Adding Chapter 1 : Packer will build for you

This commit is contained in:
Philippe Caseiro 2021-03-18 16:11:35 +01:00
commit 02e13dfb00
97 changed files with 4630 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.bin/
images/
packer_cache/
*inventory

2
README.md Normal file
View File

@ -0,0 +1,2 @@
# Fabrica
## Build your infrastructure from scratch with Eole/Hâpy Packer and Terraform

101
fabrica Executable file
View File

@ -0,0 +1,101 @@
#!/bin/bash
WORKDIR="./terraform"
TERRA="terraform"
VAR_FILE="main.tfvars"
PACKER_ROOT="./packer"
# FIXME
function needGitPull()
{
br=$(git branch --show-current)
diff=$(git rev-list HEAD...origin/master --count)
return ${diff}
}
function trun()
{
#needGitPull
cd ${WORKDIR}
if [[ ${?} -ne 0 ]]
then
echo "Branch is not up 2 date !"
echo "--> Git pull needed !"
return 1
fi
${TERRA} ${1} -var-file ${VAR_FILE}
res=${?}
cd -
return ${res}
}
function plan()
{
trun plan
return $?
}
function apply()
{
trun apply
return $?
}
function destroy()
{
trun destroy
return $?
}
function taint()
{
target=$1
resource=$2
cd ${WORKDIR}
$TERRA taint module.${resource}.opennebula_template.vm_template
$TERRA taint module.${resource}.opennebula_virtual_machine.vm
$TERRA taint module.${resource}.opennebula_image.system
cd -
}
function taint_all()
{
target=$1
resource=$2
cd ${WORKDIR}
$TERRA taint module.${resource}.opennebula_template.vm_template
$TERRA taint module.${resource}.opennebula_virtual_machine.vm
$TERRA taint module.${resource}.opennebula_image.system
$TERRA taint module.${resource}.opennebula_image.data
cd -
}
function init()
{
trun init
return ${?}
}
function build()
{
target=$2
cd ${PACKER_ROOT}
echo "Building ${target}"
make ${target}
return ${?}
}
function publish()
{
target=$2
echo "FIXME for publish"
}
$1 $@
exit ${?}

10
packer/Makefile Normal file
View File

@ -0,0 +1,10 @@
include targets/*.mk
build:
deploy:
clean:
rm -rf images/*
.PHONY: clean deploy

View File

@ -0,0 +1,30 @@
#!/bin/bash
if [[ $# -ne 3 ]]
then
echo Missing arguments
exit 2
fi
WORKDIR=${1}
DOMAIN=${2}
VERSION=${3}
function findImages()
{
find ${1} -iname "${2}*.img"
}
sleep 5
for imageName in $(findImages ${WORKDIR} ${DOMAIN})
do
latestName=$(echo $imageName | sed "s/.img/_latest.img/g")
newName=$(echo $imageName | sed "s/.img/_${VERSION}.img/g")
virt-sparsify -x --compress --tmp ./ --format qcow2 ${imageName} ${newName}
if [[ $? -eq 0 ]]
then
ln -s ${newName} ${latestName}
rm -rf ${imageName}
fi
done

View File

@ -0,0 +1,65 @@
#!/bin/bash
WORKDIR=${1}
sys_img=$(find ${WORKDIR} -name "*.img")
provisionDirectory=${2}
if [[ ! -d ${provisionDirectory} ]]
then
mkdir -p ${provisionDirectory}
fi
tmpMntPnt=$(mktemp -d)
tmpWorkDir=$(mktemp -d)
#
# $1 : qcow image
# $2 : mount point
#
function mountQcowImage()
{
guestmount -a $1 -i --ro ${2}
return ${?}
}
function getEoleDbConfig()
{
workdir=${1}
mntPnt=${2}
provisionDir=${3}
cd ${workdir}
cp ${mntPnt}/etc/eole/eole-db.d/* .
mkdir -p ${provisionDir}/etc/eole/eole-db.d
cp * ${provisionDir}/etc/eole/eole-db.d
cd -
}
function processConfiguration()
{
workdir=${1}
mntPnt=${2}
provisionDir=${3}
files=$(awk '/file:/ {gsub(/,|"|\047/,""); print $3}' ${mntPnt}/etc/eole/eole-db.d/*)
for file in ${files}
do
dirname=$(dirname ${file})
dest="${provisionDir}/${dirname}"
mkdir -p ${dest}
cp ${mntPnt}${file} ${dest}
done
}
mountQcowImage ${sys_img} ${tmpMntPnt}
getEoleDbConfig ${tmpWorkDir} ${tmpMntPnt} ${provisionDirectory}
processConfiguration ${tmpWorkDir} ${tmpMntPnt} ${provisionDirectory}
umount ${tmpMntPnt}
rm -rf ${tmpMntPnt}
#rm -rf ${tmpWorkDir}

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<files>
</files>
<variables>
<family name='Interface-0'>
<variable name='eth0_method' redefine='True' hidden='False' />
</family>
<separators/>
</variables>
<constraints>
<check name="valid_enum" target="eth0_method">
<param>['statique','dhcp']</param>
</check>
</constraints>
<help/>
</creole>
<!-- vim: ts=4 sw=4 expandtab
-->

View File

@ -0,0 +1,11 @@
#!/bin/sh
set -xe
installPython()
{
apk add --no-cache python3
ln -sf python3 /usr/bin/python
}
installPython

View File

@ -0,0 +1,29 @@
#!/bin/sh
set -xe
source /root/provisioning/common.sh
removePkg()
{
apk del --no-cache $1
return $?
}
cleanProv()
{
rm -rf /root/provisioning
return $?
}
for pkg in ${PKG_TO_REMOVE}
do
removePkg ${pkg}
if [ $? -ne 0 ]
then
echo "Warning : removing package ${pkg} failed with code $?"
fi
done
cleanProv
exit $?

View File

@ -0,0 +1,53 @@
#!/usr/bin/env sh
set -xeo pipefail
# Install one-context
wget https://github.com/OpenNebula/addon-context-linux/releases/download/v5.8.0/one-context-5.8.0-r1.apk
apk add --allow-untrusted --no-cache one-context-5.8.0-r1.apk
apk add --no-cache e2fsprogs-extra
apk add --no-cache haveged
# Enable VM contextualization
rc-update add one-context default
rc-update add haveged boot
rc-status
# Add DNS hook in one-context
mkdir -p /usr/local/share/one-context/scripts
cat > /usr/local/share/one-context/scripts/dns-nebula <<'EOF'
#!/bin/sh
. /usr/share/one-context/scripts/utils.sh
dns_servers="$(getval ETH0_DNS)"
echo > /etc/resolv.conf
for nameserver_address in $dns_servers; do
echo "nameserver $nameserver_address" >> /etc/resolv.conf
done
EOF
chmod +x /usr/local/share/one-context/scripts/dns-nebula
ln -s /usr/local/share/one-context/scripts/dns-nebula /etc/one-context.d/01-dns-nebula
# Reset network interfaces
cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
# BEGIN generated by /usr/share/one-context/scripts/network
# Do not modify this block, any modifications will be lost after reboot!
auto eth0
iface eth0 inet dhcp
# END generated
EOF
# Disable resolv.conf overwriting
mkdir -p /etc/udhcpc
echo 'RESOLV_CONF=NO' >> /etc/udhcpc/udhcpc.conf
# Clean up
rm -rf /root/*.apk
sync

View File

@ -0,0 +1,8 @@
#!/bin/sh
set -x
# Zeroize
dd if=/dev/zero of=/myZeroFile
rm -rf /myZeroFile
sync

View File

@ -0,0 +1,77 @@
#!/usr/bin/env sh
set -xeo pipefail
setup-ntp -c chrony
setup-apkrepos http://dl-cdn.alpinelinux.org/alpine/v3.10/main/ http://dl-cdn.alpinelinux.org/alpine/v3.10/community/
apk add --no-cache wget
apk add --no-cache expect #util-linux coreutils
apk add --no-cache haveged
apk add --no-cache ca-certificates
rc-update add haveged boot
service haveged start
update-ca-certificates
export DISKOPTS="-L"
expect <<EOF
set timeout 300
spawn setup-alpine
expect "Select keyboard layout**"
send "fr\r"
expect "Select variant**"
send "fr-azerty\r"
expect "Enter system hostname**"
send "${VM_NAME}\r"
expect "Which one do you want to initialize**"
send "eth0\r"
expect "Ip address for eth0**"
send "dhcp\r"
expect "Do you want to do any manual network configuration**"
send "no\r"
expect "New password:"
send "${ROOT_PASSWORD}\r"
expect "Retype password:"
send "${ROOT_PASSWORD}\r"
expect "Which timezone are you in**"
send "Europe/Paris\r"
expect "HTTP/FTP proxy URL**"
send "none\r"
expect "Enter mirror number**"
send "done\r"
expect "Which SSH server**"
send "openssh\r"
expect "Which disk*s* would you like to use**"
send "vda\r"
expect "How would you like to use it**"
send "sys\r"
expect "WARNING: Erase the above disk*s* and continue**"
send "y\r"
expect eof
EOF
# Remove expect package
apk del --no-cache expect
sync
reboot

View File

@ -0,0 +1 @@
06eab9a4d3ce28ce31d413b78b6ff94285e432179b6a6cba711e6c6653667567 alpine-virt-3.10.2-x86_64.iso

View File

@ -0,0 +1 @@
fe694a34c0e2d30b9e5dea7e2c1a3892c1f14cb474b69cc5c557a52970071da5 alpine-virt-3.12.0-x86_64.iso

View File

@ -0,0 +1,54 @@
#!/bin/sh
set -xe
source /root/provisioning/common.sh
installRsyslogRelp()
{
apk add --no-cache rsyslog-relp
}
installNodeExporter()
{
local node_exporter_version="0.18.1"
local node_exporter_archive="node_exporter-${node_exporter_version}.linux-amd64.tar.gz"
local node_exporter_url="https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/${node_exporter_archive}"
local node_exporter_sum="b2503fd932f85f4e5baf161268854bf5d22001869b84f00fd2d1f57b51b72424"
cd /tmp
downloadArchive ${node_exporter_url} ${node_exporter_sum} ${node_exporter_archive} sha256sum
extractArchiveXZ ${node_exporter_archive} /srv/node_exporter
cd -
}
confSyslog()
{
SYSLOG_CONF_DIR="/etc/rsyslog.d/"
SYSLOG_CONF_FILE="${SYSLOG_CONF_DIR}/aggregation.conf"
QUEUE_DIR="/var/log/rsyslog/queues"
if [ ! -d ${SYSLOG_CONF_DIR} ]
then
mkdir ${SYSLOG_CONF_DIR}
fi
if [ ! -d ${QUEUE_DIR} ]
then
mkdir -p ${QUEUE_DIR}
fi
echo "\$WorkDirectory ${QUEUE_DIR}" >> ${SYSLOG_CONF_FILE}
echo "\$ActionQueueType LinkedList" >> ${SYSLOG_CONF_FILE}
echo "\$ActionQueueFileName send_all" >> ${SYSLOG_CONF_FILE}
echo "\$ActionQueueSaveOnShutdown on" >> ${SYSLOG_CONF_FILE}
echo "" >> ${SYSLOG_CONF_FILE}
echo "*.* :omrelp:${SYSLOG_SERVER}:${SYSLOG_PORT}" >> ${SYSLOG_CONF_FILE}
}
cat /etc/resolv.conf
#Not needed for ber
#installRsyslogRelp
#installNodeExporter
#confSyslog

View File

@ -0,0 +1,51 @@
#!/bin/sh
#
# downloadArchive
# ${1} : The download url
# ${2} : the checksum
# ${3} : the filename of download target
# ${4} : the checksum command to use (default sha256sum)
#
downloadArchive(){
url=${1}
sum=${2}
archive=${3}
if [ -n ${4} ]
then
checkCmd=${4}
else
checkCmd="sha256sum"
fi
wget -q ${url}
set +e
echo "${sum} ${archive}" | ${checkCmd} -cs
if [ ${?} ]
then
set -e
return 0
else
set -e
return 2
fi
}
extractArchiveXZ(){
source=${1}
destination=${2}
cmd="tar xzvf"
if [ ! -d ${destination} ]
then
mkdir -p ${destination}
fi
${cmd} ${source} -C ${destination}
return ${?}
}
cleanUpImage(){
rm -rf /var/cache/apk/*
rm -rf /tmp/*
rm -rf /root/.ssh
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<files>
</files>
<containers>
</containers>
<variables>
<family name='Interface-0'>
<variable name='eth0_method' redefine='True' hidden='False'>
<value>statique</value>
</variable>
</family>
</variables>
<constraints>
</constraints>
<help>
</help>
</creole>

View File

@ -0,0 +1,77 @@
%set bonds = []
%set vlans = []
network:
version: 2
renderer: networkd
ethernets:
%for %%interface in range(0, %%int(%%nombre_interfaces)):
%set current_interface = 'eth' + str(%%interface)
%set interface_mode = %%getVar(%%current_interface + '_method')
%if %%getVar('activer_bonding_' + %%current_interface, "non") == 'non'
%%getVar('nom_zone_'+ %%current_interface):
%if %%interface_mode == 'statique' and %%getVar("adresse_ip_" + %%current_interface):
addresses:
- %%getVar("adresse_ip_" + %%current_interface)/%%calc_classe(%%getVar('adresse_netmask_' + %%current_interface))
%if %%getVar('alias_' + %%current_interface, "non") == "oui"
%for alias in %%getVar('alias_ip_' + %%current_interface)
- %%alias/%%calc_classe(getattr(alias, 'alias_netmask_' + %%current_interface))
%end for
%end if
%if %%interface_gw == %%getVar('nom_zone_' + %%current_interface):
gateway4: %%adresse_ip_gw
%end if
%if %%getVar('activer_ipv6') == "non"
dhcp6: no
accept-ra: no
optional-addresses: [ dhcp6 ]
%end if
%elif %%interface_mode == 'dhcp'
dhcp4: yes
%else
dhcp4: no
%end if
%else
%%bonds.append(%%current_interface)
%for %%slave in %%getVar('nom_carte_' + %%current_interface):
%%slave:
optional: false
%end for
%end if
%if %%getVar('vlan_' + %%current_interface, 'non') == 'oui'
%%vlans.append(%%current_interface)
%end if
%end for
%if len(%%bonds) > 0:
bonds:
%for bond in %%bonds:
%set %%bond_mode = %%getVar(%%bond + '_method')
%%getVar('nom_zone_' + %%bond):
interfaces: [%%custom_join(%%getVar('nom_carte_' + %%bond),',')]
%if %%bond_mode == 'statique'
addresses: [ %%getVar("adresse_ip_" + %%bond)/%%calc_classe(%%getVar('adresse_netmask_' + %%bond))]
%elif %%bond_mode == 'dhcp'
dhcp4: yes
%else
dhcp4: no
%end if
parameters:
mode: %%getVar('bonding_mode_' + %%bond)
mii-monitor-interval: %%getVar('bonding_miimon_' + %%bond)
up-delay: %%getVar('bonding_updelay_' + %%bond)
down-delay: %%getVar('bonding_downdelay_' + %%bond)
%end for
%end if
%if len(vlans) > 0:
vlans:
%for vlan in %%vlans:
%for vlan_id in %%getVar('vlan_id_' + %%vlan):
vlan%%vlan_id:
id: %%vlan_id
link: %%getVar('nom_zone_' + %%vlan)
addresses: [ %%getattr(vlan_id, 'vlan_ip_' + %%vlan)/%%calc_classe(%%getattr(vlan_id, 'vlan_netmask_' + %%vlan)) ]
%end for
%end for
%end if

View File

@ -0,0 +1,11 @@
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: yes
dhcp6: no
accept-ra: no
optional-addresses: [ dhcp6 ]

View File

@ -0,0 +1,35 @@
#!/usr/bin/env bash
source /etc/one-context.d/loc-10-network
function CreoleForce {
name=$1
value=$2
jq -a ".$name = {\"owner\": \"creole_force\", \"val\": $value}" /etc/eole/config.eol > /etc/eole/config.eol.force
[ $? == 0 ] && mv -f /etc/eole/config.eol.force /etc/eole/config.eol
rm -f /etc/eole/config.eol.force
}
rm -f /etc/eole/config.eol.bak
cp -f /etc/eole/config.eol /etc/eole/config.eol.bak
CONTEXT_INTERFACES=$(get_context_interfaces)
for interface in $CONTEXT_INTERFACES; do
IFACE_NUM=$(echo "$UPCASE_DEV" | sed 's/^ETH//')
IP=$(get_ip)
NETWORK=$(get_network)
MASK=$(get_mask)
GATEWAY=$(get_gateway)
DNS=$(get_iface_var "DNS")
CreoleForce "eth${IFACE_NUM}_method" '"statique"'
[ "$GATEWAY" != "None" ] && CreoleForce "adresse_ip_gw" "\"$GATEWAY\""
[ "$GATEWAY" != "None" ] && CreoleForce "adresse_broadcast_eth$IFACE_NUM" "\"$GATEWAY\""
[ "$MASK" != "None" ] && CreoleForce "adresse_netmask_eth$IFACE_NUM" "\"$MASK\""
[ "$NETWORK" != "None" ] && CreoleForce "adresse_network_eth$IFACE_NUM" "\"$NETWORK\""
[ "$IP" != "None" ] && CreoleForce "adresse_ip_eth$IFACE_NUM" "\"$IP\""
[ "$DNS" != "None" ] && CreoleForce "adresse_ip_dns" "[\"$DNS\"]"
done

View File

@ -0,0 +1,20 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- name: Install eole-web
apt:
name: eole-web
state: present

View File

@ -0,0 +1,37 @@
---
- name: Configure Seth Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- apt:
name: make
- apt:
name: git
- apt:
name: python-ldap
- git:
repo: 'https://forge.cadoles.com/afornerot/cadolesldap.git'
dest: /tmp/cadolesldap
- name: Run 'install' for cadolesldap
make:
chdir: /tmp/cadolesldap
target: install
- name: Cleanup
apt:
name: make
state: absent

View File

@ -0,0 +1,13 @@
---
- name: Configure DNS Serverless
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- apk:
name: nsd, unbound

View File

@ -0,0 +1,29 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing dokuwiki
apt:
name:
- eole-dokuwiki
- dokuwiki-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto

View File

@ -0,0 +1,51 @@
---
- name: Installation Dolibarr Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- name: Install mariadb
apt:
name:
- mariadb-server
- python-mysqldb
- apache2
- php
- php-mysql
- openssl
- php-ldap
- php-mcrypt
- php-intl
- php-zip
state: present
- name: Create a new database with name 'dolibarr'
mysql_db:
name: dolibarr
state: present
- name: Create mysql user
mysql_user:
name: dolibarr
password: '36f3igH9f5TPooZIBY99oA=='
priv: 'dolibarr.*:ALL,GRANT'
state: present
- name: Download Dolibarr
get_url:
url: https://sourceforge.net/projects/dolibarr/files/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/10.0.1/dolibarr_10.0.1-4_all.deb
dest: /tmp/dolibarr_10.0.1.deb
checksum: sha1:74a9bb2ac282715f80ad454cb04ad51ef60de264
- name: Install dolibarr
apt:
deb: /tmp/dolibarr_10.0.1.deb

View File

@ -0,0 +1,26 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install amon module package
apt:
name: eole-amon-all
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: amon272

View File

@ -0,0 +1,75 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Stop and disable unattended-upgrades service
service:
name: unattended-upgrades
state: stopped
enabled: no
- name: Stop apt-daily service
service:
name: apt-daily
state: stopped
enabled: no
- name: Stop apt-daily.timer service
service:
name: apt-daily.timer
state: stopped
enabled: no
- name: Stop apt-daily-upgrade service
service:
name: apt-daily-upgrade
state: stopped
enabled: no
- pause:
seconds: 30
- name: Install a EOLE Keyring from the internet.
apt:
deb: http://eole.ac-dijon.fr/eole/pool/main/e/eole-keyring/eole-archive-keyring_2020.05.12-1_all.deb
retries: 5
delay: 5
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Adding EOLE main repository
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2 main cloud
state: present
- name: Adding EOLE security repository
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2-security main cloud
state: present
- name: Adding EOLE updates repository
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2-updates main cloud
state: present
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install eole-server and eole-exim-pkg
apt:
name: eole-server,eole-exim-pkg
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"

View File

@ -0,0 +1,36 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Add an Apt signing key, for Cadoles
apt_key:
url: https://vulcain.cadoles.com/cadoles.gpg
state: present
- name: Adding Cadoles devel repository
apt_repository:
repo: deb https://vulcain.cadoles.com 2.7.2-stable main
state: present
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install lemonldap package
apt:
name: eole-lemonldap
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: lemonldap272

View File

@ -0,0 +1,36 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Add an Apt signing key, for Cadoles
apt_key:
url: https://vulcain.cadoles.com/cadoles.gpg
state: present
- name: Adding Cadoles devel repository
apt_repository:
repo: deb https://vulcain.cadoles.com 2.7.2-dev main
state: present
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install minio package
apt:
name: eole-minio
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: minio272

View File

@ -0,0 +1,109 @@
---
- name: Prepare data disk
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
vars:
fsconf:
vgn: "{{ lookup('env', 'vgname') }}"
lvs: "{{ lookup('env', 'lvnames').split(' ') }}"
szs: "{{ lookup('env', 'lvsizes').split(' ') }}"
fss: "{{ lookup('env', 'lvfssys').split(' ') }}"
mps: "{{ lookup('env', 'lvmntps').split(' ') }}"
tasks:
- name: GrowPart
command: "growpart /dev/vda 4"
environment:
LC_ALL: C
- name: Resize main vg
lvg:
vg: "{{ fsconf.vgn }}"
pvs: /dev/vda4
pvresize: yes
- name: Create logical volumes.
lvol:
vg: "{{ fsconf.vgn }}"
lv: "{{ item }}"
size: "{{ fsconf.szs[idx] }}"
active: yes
force: no
state: present
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Create filesystems
filesystem:
fstype: "{{ fsconf.fss[idx] }}"
dev: "/dev/{{ fsconf.vgn }}/{{ item }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Find what to backup
stat:
path: "{{ item }}"
with_items: "{{ fsconf.mps }}"
register: mountPoints
- name: Create mount points
file:
path: "{{ fsconf.mps[idx] }}"
state: directory
mode: '0755'
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Create temporary mount points
file:
path: "/tmp{{ fsconf.mps[idx] }}"
state: directory
mode: '0755'
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Mount fs in temporary mount points
command: mount /dev/{{ fsconf.vgn }}/"{{ item }}" "/tmp{{ fsconf.mps[idx] }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Configure filesystems create entry in fstab
mount:
path: "{{ fsconf.mps[idx] }}"
src: /dev/{{ fsconf.vgn }}/{{ item }}
state: present
fstype: "{{ fsconf.fss[idx] }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Fill new mount points if exists
become: true
delegate_to: "{{ inventory_hostname }}"
synchronize:
mode: push
src: "{{ item.item }}/"
dest: "/tmp{{ item.item }}/"
times: yes
perms: yes
owner: yes
group: yes
links: yes
recursive: yes
with_items: "{{ mountPoints.results }}"
when: item.stat.exists

View File

@ -0,0 +1,81 @@
---
- name: Provision Cadoles Server
hosts: all
tasks:
- name : Install One Context tool !
apt:
deb: https://github.com/OpenNebula/addon-context-linux/releases/download/v5.8.0/one-context_5.8.0-1.deb
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name : Install JQ
apt:
name: jq
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name : Add cadoles context script
command: mv /root/net-99-eole /etc/one-context.d/net-99-eole
- name: Make cadoles context script executable
file:
path: /etc/one-context.d/net-99-eole
mode: '+x'
- name: Copy sshd_template to modif directory
command: cp /usr/share/eole/creole/distrib/sshd_config /usr/share/eole/creole/modif/sshd_config
- name: Allow TCP Forwarding to ease GenConfig usage
lineinfile:
path: /usr/share/eole/creole/modif/sshd_config
regexp: '^AllowTcpForwarding'
line: 'AllowTcpForwarding yes'
- name: Gen_Patch
command: gen_patch
- name: Update Hostname
command: hostnamectl set-hostname eolebase272
- name: Cleanup
apt:
autoclean: yes
autoremove: yes
- name: Disable gpm
systemd:
name: gpm
enabled: no
masked: yes
- name: Disable NUT Driver
systemd:
name: nut-driver
enabled: no
masked: yes
- name: Disable NUT Monitor
systemd:
name: nut-monitor
enabled: no
masked: yes
- name: FSTRIM
command: fstrim -av
- name: Zero out the disk
command: dd if=/dev/zero of=/mytempfile
ignore_errors: yes
- name: Cleaup zero file
command: rm -rf /mytempfile
- name: Sync disk
command: sync

View File

@ -0,0 +1,26 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install seth module package
apt:
name: eole-seth-all
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: seth272

View File

@ -0,0 +1,41 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Add an Apt signing key, for Cadoles
apt_key:
url: https://vulcain.cadoles.com/cadoles.gpg
state: present
- name: Adding Cadoles devel repository
apt_repository:
repo: deb https://vulcain.cadoles.com 2.7.2-stable main
state: present
- name: Adding Cadoles Tenjin repository
apt_repository:
repo: deb https://vulcain.cadoles.com tenjin-2.7.2-stable main
state: present
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install Tenjin AD package
apt:
name: eole-seth-education
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: tenjin272

View File

@ -0,0 +1,26 @@
---
- name: Transform Ubuntu into an EOLE Server
hosts: all
tasks:
- name: Update cache
apt:
update_cache: yes
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Install Zephir module package
apt:
name: eole-zephir-all
environment:
HTTP_PROXY: "{{ http_proxy }}"
HTTPS_PROXY: "{{ https_proxy }}"
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
- name: Change hostname
hostname:
name: zephir272

View File

@ -0,0 +1,67 @@
---
- name: Récupère la configuration depuis le Zéphir
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
vars:
- zephir_server: "{{ lookup('env', 'zephir_server') }}"
- zephir_login: "{{ lookup('env', 'zephir_login') }}"
- zephir_password: "{{ lookup('env','zephir_password') }}"
- code_rne: "{{ lookup('env','code_rne') }}"
- zephir_id: "{{ lookup('env', 'zephir_id') }}"
tasks:
- name: Installation de pexpect
package:
name: python-pexpect
state: present
- name: Update CA-Certificats
command: update-ca-certificates
- name: Enregistrement Zéphir
expect:
command: /usr/bin/enregistrement_zephir
responses:
"(.*)Voulez-vous établir une configuration réseau minimale(.*)": "N"
"(.*)Entrez l'adresse(.*)": "{{zephir_server}}"
"(.*)Entrez votre login pour l'application Zéphir(.*)": "{{ zephir_login }}"
"(.*)Mot de passe pour l'application Zéphir pour(.*)": "{{ zephir_password }}"
"(.*)créer le serveur dans la base du serveur Zéphir(.*)": "N"
"(.*)rien pour saisir directement un n° de serveur(.*)": "{{ code_rne }}"
"(.*)entrez le n° identifiant le serveur l'application Zéphir(.*)": "{{ zephir_id }}"
"(.*)matériel(.*)": ""
"(.*)processeur(.*)": ""
"(.*)disque dur(.*)": ""
"(.*)continuer(.*)": "O"
"(.*)Entrez le numéro de votre choix(.*)": "2"
echo: yes
timeout: 480
- pause:
minutes: 1
prompt: "Pause d'une minute pour finaliser l'enregistrement Zéphir"
- name: Cleaning EOLE main repository (avoid duplicate entry)
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2 main cloud
state: absent
- name: Cleaning EOLE security repository (avoid duplicate entry)
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2-security main cloud
state: absent
- name: Cleaning EOLE updates repository (avoid duplicate entry)
apt_repository:
repo: deb [arch=amd64] http://eole.ac-dijon.fr/eole eole-2.7.2-updates main cloud
state: absent
- name: Cleaning EOLE repository (create clean entry)
command: Query-Auto

View File

@ -0,0 +1,33 @@
---
- name: Configure Pi-Hole Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- apt:
name: curl
- apt:
name: git
- git:
repo: 'https://github.com/pi-hole/pi-hole.git'
dest: /tmp/Pi-hole
depth: 1
- name: Run 'install' for Pi-Hole
shell: bash "/tmp/Pi-hole/automated install/basic-install.sh" --unattended
- name: Cleanup
apt:
name: make, curl, git
state: absent

View File

@ -0,0 +1,17 @@
---
- name: Configure SSO Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Maj-Auto
command: Maj-Auto
- apt:
name: eole-lemonldap
state: present

View File

@ -0,0 +1,39 @@
---
- name: Instance EOLE image
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Installation de pexpect
package:
name: python-pexpect
state: present
- name: Instancier le module EOLE
expect:
command: /usr/bin/instance
# Attention, les mots de passe sont en clairs dans le playbook !
# Il serait préférable d'utiliser le mécanisme ansible_vault ici
responses:
"Nouveau mot de passe:":
- "NotSoSecret;21"
- "NotSoSecret;21"
"Confirmation du mot de passe:":
- "NotSoSecret;21"
- "NotSoSecret;21"
'\[non\]':
- non
'\[oui\]':
- non
'(.*)Un red(.)marrage(.*)\[oui\]':
- non
echo: yes
timeout: 900
- name: Désactivation du Maj-Auto
command: /usr/share/eole/sbin/manage_schedule -d majauto

View File

@ -0,0 +1,68 @@
---
- name: Installation Jorani
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- name: Install mariadb
apt:
name:
- mariadb-server
- python-mysqldb
- unzip
- apache2
- php
- openssl
- php-ldap
- libapache2-mod-php
- php-pear
- php-cgi
- php-cli
- php-common
- php-fpm
- php-gd
- php-json
- php-mysql
- php-readline
- php-curl
- php-intl
- php-mcrypt
- php-xml
- php-mbstring
state: present
- name: Create a new database with name 'jorani'
mysql_db:
name: jorani
state: present
- name: Create mysql user
mysql_user:
name: jorani
password: 'FWUiVANngFqcIvcY8C7XWA=='
priv: 'jorani.*:ALL,GRANT'
state: present
- name: Create directory Jorani
ansible.builtin.file:
path: /var/www/html/jorani
state: directory
owner: www-data
group: www-data
mode: '0750'
- name: Download Jorani
unarchive:
src: https://github.com/bbalet/jorani/releases/download/v1.0.0/jorani-1.0.0.zip
dest: /var/www/html/jorani/
remote_src: yes

View File

@ -0,0 +1,30 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing ninegate
apt:
name:
- eole-limesurvey
- limesurvey-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto

View File

@ -0,0 +1,30 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing Nextcloud
apt:
name:
- eole-nextcloud
- nextcloud-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto

View File

@ -0,0 +1,32 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing ninegate
apt:
name:
- eole-nineboard
- nineboard-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto
- name: Generate patch
command: gen_patch

View File

@ -0,0 +1,29 @@
---
- name: Configure Portal Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing ninegate
apt:
name:
- eole-ninegate
- ninegate-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto

View File

@ -0,0 +1,29 @@
---
- name: Preparation des serveurs d'applications web
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Setting EOLE Dev apt repository
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- name: Installing ninegate
apt:
name:
- eole-piwigo
- piwigo-apps
state: present
- name: Back to normal EOLE apt repository
command: Query-Auto

View File

@ -0,0 +1,40 @@
---
- name: Configure Portal Server
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- name: Maj-Auto
command: Maj-Auto
- name: Query-Auto Dev
expect:
command: Query-Auto -D
responses:
'\[non\]':
- "oui"
echo: yes
timeout: 900
- apt:
name: eole-ninegate
state: present
- apt:
name: ninegate-apps
state: present
- name: Query-Auto
command: Query-Auto
- name: Reconfigure
command: reconfigure

View File

@ -0,0 +1,107 @@
---
- name: Prepare data disk
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
vars:
fsconf:
vgn: "{{ lookup('env', 'vgname') }}"
lvs: "{{ lookup('env', 'lvnames').split(' ') }}"
szs: "{{ lookup('env', 'lvsizes').split(' ') }}"
fss: "{{ lookup('env', 'lvfssys').split(' ') }}"
mps: "{{ lookup('env', 'lvmntps').split(' ') }}"
tasks:
- name: Create the "datavg" Volume group.
lvg:
pvs: "/dev/vdb"
vg: "{{ fsconf.vgn }}"
pesize: "16"
pv_options: '-Z y'
force: no
state: present
- name: Create logical volumes.
lvol:
vg: "datavg"
lv: "{{ item }}"
size: "{{ fsconf.szs[idx] }}"
active: yes
force: no
state: present
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Create filesystems
filesystem:
fstype: "{{ fsconf.fss[idx] }}"
dev: "/dev/datavg/{{ item }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Find what to backup
stat:
path: "{{ item }}"
with_items: "{{ fsconf.mps }}"
register: mountPoints
- name: Create mount points
file:
path: "{{ fsconf.mps[idx] }}"
state: directory
mode: '0755'
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Create temporary mount points
file:
path: "/tmp{{ fsconf.mps[idx] }}"
state: directory
mode: '0755'
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Mount fs in temporary mount points
command: mount /dev/datavg/"{{ item }}" "/tmp{{ fsconf.mps[idx] }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Configure filesystems create entry in fstab
mount:
path: "{{ fsconf.mps[idx] }}"
src: /dev/datavg/{{ item }}
state: present
fstype: "{{ fsconf.fss[idx] }}"
loop: "{{ fsconf.lvs }}"
loop_control:
index_var: idx
- name: Fill new mount points if exists
become: true
delegate_to: "{{ inventory_hostname }}"
synchronize:
mode: push
src: "{{ item.item }}/"
dest: "/tmp{{ item.item }}/"
times: yes
perms: yes
owner: yes
group: yes
links: yes
recursive: yes
with_items: "{{ mountPoints.results }}"
when: item.stat.exists

View File

@ -0,0 +1,73 @@
---
- name: Prepare disk
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
vars:
ds: "{{ lookup('env', 'disk') }}"
vg: "{{ lookup('env', 'vgname') }}"
lv: "{{ lookup('env', 'lvname') }}"
fs: "{{ lookup('env', 'fstype') }}"
sz: "{{ lookup('env', 'size') }}"
mp: "{{ lookup('env', 'mountp') }}"
tasks:
- name: Create the volume group.
lvg:
pvs: "{{ ds }}"
vg: "{{ vg }}"
pesize: "16"
pv_options: '-Z y'
force: no
state: present
- name: Create logical volume
lvol:
vg: "{{ vg }}"
lv: "{{ lv }}"
size: "{{ sz }}"
active: yes
force: no
state: present
- name: Create filesystem
filesystem:
fstype: "ext4"
dev: "/dev/{{ vg }}/{{ lv }}"
opts: -cc
- name: Create temporary mount points
file:
path: "/tmp{{ mp }}"
state: directory
mode: '0755'
- name: Mount fs in temporary mount points
command: mount /dev/"{{ vg }}"/"{{ lv }}" "/tmp{{ mp }}"
- name: Configure filesystems create entry in fstab
mount:
path: "{{ mp }}"
src: /dev/{{ vg }}/{{ lv }}
state: present
fstype: "{{ fs }}"
- name: Fill new mount points if exists
become: true
delegate_to: "{{ inventory_hostname }}"
synchronize:
mode: push
src: "{{ mp }}/"
dest: "/tmp{{ mp }}/"
times: yes
perms: yes
owner: yes
group: yes
links: yes
recursive: yes

View File

@ -0,0 +1,66 @@
---
- name: Installation Syspass
hosts: all
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
HTTPS_PROXY: "{{ lookup('env','HTTPS_PROXY') }}"
HTTP_PROXY: "{{ lookup('env','HTTP_PROXY') }}"
tasks:
- name: Update package cache
apt:
update_cache: yes
- name: Install mariadb
apt:
name:
- mariadb-server
- python-mysqldb
- unzip
- apache2
- libapache2-mod-php
- php-pear
- php
- php-cgi
- php-cli
- php-common
- php-fpm
- php-gd
- php-json
- php-mysql
- php-readline
- php-curl
- php-intl
- php-ldap
- php-mcrypt
- php-xml
- php-mbstring
state: present
- name: Create a new database with name 'syspass'
mysql_db:
name: syspass
state: present
- name: Create mysql user
mysql_user:
name: spadmin
password: '63ApD2E0xVJlNi9+hqsZUQ=='
priv: 'syspass.*:ALL,GRANT'
state: present
- name: Create directory syspass
ansible.builtin.file:
path: /var/www/html/syspass
state: directory
owner: www-data
group: www-data
mode: '0750'
- name: Download Syspass
unarchive:
src: https://github.com/nuxsmin/sysPass/archive/3.2.1.zip
dest: /var/www/html/syspass
remote_src: yes

View File

@ -0,0 +1,49 @@
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAgEA8e6gLGuOBs9zp0qFDe/L2v7w3ZmZhI+oIDKJIy0mVSqx33zHu7EN
FCS/5LhO2qEtoBLZCE4vmacsi87y05SCIuVkXYEvGDmYXJi/Gr7bnlu8DdFwA65OJI/Rrl
nX45/aLJtGjceBBTISncVIxU07LgVGVtyVkBIc2IKhP5+0qpy71ylarx45G29Ql1/Z3ZdC
AeMx66WqUleg4JGfF722236Aw8QXqGshJehuUm6bx9LQQ84prjZgAKm6MUUCJX9ITdr0lz
teDPsIt2OOswJqZT6wh9yhFfm4DS4/RuAHcW6SCzmk/HmSQTLJErgUIxiFqPNgcS472gBq
JPZB7h+sXxrRdy0wEPml+4TuYIyUkh9P7eWyqCcwwh2JiLrjdlfirdGOioqdM3m9uBWvJC
CWv1OnEab1b4NPfBak900SoSDiunJyJOXahBh7IWbh8NqpEWH+3Wu0CNWe8vcPtFzLsQGI
TXa189jOF0T8IDpRQRlqqyU2xy2ueHaVfPOXkZ8gVpBuDPRS8Yh0uB0YuMLGEc6Qx+fFHP
LXdamUz/pGkegBL+xpplr33Tks0FGiO3pngEjZDAcs2nX2SqFbMWxy/cAUyPladpbtYFuJ
4ifvX3fx84Dvj9CSk3jKDywBaOiGhK2KVC1R96ccjV0QMEW07OoCsRdwVl09OVMm0q1FI+
kAAAdQl3RcF5d0XBcAAAAHc3NoLXJzYQAAAgEA8e6gLGuOBs9zp0qFDe/L2v7w3ZmZhI+o
IDKJIy0mVSqx33zHu7ENFCS/5LhO2qEtoBLZCE4vmacsi87y05SCIuVkXYEvGDmYXJi/Gr
7bnlu8DdFwA65OJI/RrlnX45/aLJtGjceBBTISncVIxU07LgVGVtyVkBIc2IKhP5+0qpy7
1ylarx45G29Ql1/Z3ZdCAeMx66WqUleg4JGfF722236Aw8QXqGshJehuUm6bx9LQQ84prj
ZgAKm6MUUCJX9ITdr0lzteDPsIt2OOswJqZT6wh9yhFfm4DS4/RuAHcW6SCzmk/HmSQTLJ
ErgUIxiFqPNgcS472gBqJPZB7h+sXxrRdy0wEPml+4TuYIyUkh9P7eWyqCcwwh2JiLrjdl
firdGOioqdM3m9uBWvJCCWv1OnEab1b4NPfBak900SoSDiunJyJOXahBh7IWbh8NqpEWH+
3Wu0CNWe8vcPtFzLsQGITXa189jOF0T8IDpRQRlqqyU2xy2ueHaVfPOXkZ8gVpBuDPRS8Y
h0uB0YuMLGEc6Qx+fFHPLXdamUz/pGkegBL+xpplr33Tks0FGiO3pngEjZDAcs2nX2SqFb
MWxy/cAUyPladpbtYFuJ4ifvX3fx84Dvj9CSk3jKDywBaOiGhK2KVC1R96ccjV0QMEW07O
oCsRdwVl09OVMm0q1FI+kAAAADAQABAAACABcuzppzFAEDEAoP0gAr4lTx6RLTDSruuSWc
shd01B+FH9ZSlrEdnis3+ktofeXlXAHizHlHRLhslJAxHIO5z16YrK1pG6IuorL80BM4Bs
N99t88Goe/xC0suuMCKPXe84Eiv/gGDg75ZV9I8Fg3tlwKlVrteEd99NWqbtkx7JYMvtM3
W0E8nCxM1mQrAy2AuQqFQttZ3KBXVUsvqRcVTthpnt0jhUDWQy7mvuuXPcZAJUTaFJRlEX
3+xaDDBBmjwMH1IUr8nV6RD5zDJYFx0dAx2airM6RvcXuR2u5nuU7dUZFRzMWEwMcOnsX0
bbmPN/+gkrVFwOZ687DnCBpRXqrurA3hK4RVy7SniENU4/Y7N2y9MDsFMu/85sGToOizC/
1tsiD0u8sfz/G0OI5ASlpNiaSz6aXUysnT1u6DQa2CsyTsfdYlO51M6lNHyjh+PpAKbEHi
VLXRX0nqHxNvCtHycZJGnvL/1vbOfg5gbLODMJ/Rr9unVIX7GcMx3vM6T1gdfiOp9I7E5y
V1hq5PA7GcrZDzSkWUikR/pJYFJAROfwHLAwmxyqDWeKEfzEz6iy/X15L62verjcxhw06G
27HNOhNjfp8zHthy/HtAD8nY9Zx4svAPq0OjBMkzqspc8lOcm0O3EBrjmWWXXwe06fsAp2
Zja3IjYKobiXJygmyhAAABAD5UtiLTvDLJO9cYPikpbfkiZis8StGEwSEUSk29S5L61dje
rnXK7B6RWu0mwvtUo7f0KCMmtZciaBDoLMaVppAgDorzqWnkQ+yxUYbEjFaRbrW1EnFk4H
CTOfEs+YZ/RRqJ1cCl1zziaf26SZJrJxl9l+JXn/Bwp6jF0W4HUTKjtAQtaQjnqp+lKG7J
d5TZleC3YBthVvAePQ+wKIaKBcIt4fkSw0RkaNSAsNXSKhmZCP0gyftrFAoqUwViFW+nkB
jtuSxu1gcjksSyB8d3adCK0+QmyanPn4T8+PHKlbKB/f43tCbpZXA9FZmaUj2KwcHLaiXk
psGPDhRr9mjimMoAAAEBAPvdzms5m5BQxfHxYvXBXVQH2NPM++aav0eluHE/zSf2Zh4Uol
2ZWzA3Ah1VhM2ozsqZVTmo/ygfeQ/+AOYDZKwTA1ngPjX5QCKiP8g+SUBRcnoUAAobX4VD
1mwm/3lzP1t8Rd5rTsawjk6aKuQUA/NQ7bzfCGAv16FamO7E5y0gZ/ynE+oa3lt1qYI56m
BP4sciFSfdKMbaTQmI7veApNiNnM8ZCpM1Yeu9JOYJiXaEVrgxeO5sHrWKbQ3iJFLncsrk
DRnqT7fBciycU74r2/nQbY+v+TkkLLmQ0JNPovwNRIULDRxeDEDm2K5yxHItmOWnTDcf8d
pmmaWYzZJilmcAAAEBAPXnFNCUudeO1OmIxur9zMwHg29KG4/qQ2mryLCXF5Qs1NcKbkFd
27o8nvjpAxSd74+9vyKvgbQxC+MTIv23euRQ3zkRoWz0Zyi8gFnuUstMRtCWjTbuv+TbI/
xbRcJ6pUlJeRMv1l0KrPBQec0lRaHbANGw4g5iXasr9Xsddt4qOl1jInPfBB1tg31Z69Qx
rJFpk7vcgRoPDXrTOvK14yyqrR8TG2uegHm6XcmfWVvueqTlv1loQN3f9wfokhD5vh7GZT
mwnNqviQNajOxpbZzOy3lDJP9ThnM4vxExsLyrcxNYdPQZV9gs2idqQj+625LFa5wU0C1I
NtLpvYZN4S8AAAAaQ2Fkb2xlcy1WTS1EZXBsb3llbWVudC1LRVkB
-----END OPENSSH PRIVATE KEY-----

View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDx7qAsa44Gz3OnSoUN78va/vDdmZmEj6ggMokjLSZVKrHffMe7sQ0UJL/kuE7aoS2gEtkITi+ZpyyLzvLTlIIi5WRdgS8YOZhcmL8avtueW7wN0XADrk4kj9GuWdfjn9osm0aNx4EFMhKdxUjFTTsuBUZW3JWQEhzYgqE/n7SqnLvXKVqvHjkbb1CXX9ndl0IB4zHrpapSV6DgkZ8XvbbbfoDDxBeoayEl6G5SbpvH0tBDzimuNmAAqboxRQIlf0hN2vSXO14M+wi3Y46zAmplPrCH3KEV+bgNLj9G4AdxbpILOaT8eZJBMskSuBQjGIWo82BxLjvaAGok9kHuH6xfGtF3LTAQ+aX7hO5gjJSSH0/t5bKoJzDCHYmIuuN2V+Kt0Y6Kip0zeb24Fa8kIJa/U6cRpvVvg098FqT3TRKhIOK6cnIk5dqEGHshZuHw2qkRYf7da7QI1Z7y9w+0XMuxAYhNdrXz2M4XRPwgOlFBGWqrJTbHLa54dpV885eRnyBWkG4M9FLxiHS4HRi4wsYRzpDH58Uc8td1qZTP+kaR6AEv7GmmWvfdOSzQUaI7emeASNkMByzadfZKoVsxbHL9wBTI+Vp2lu1gW4niJ+9fd/HzgO+P0JKTeMoPLAFo6IaErYpULVH3pxyNXRAwRbTs6gKxF3BWXT05UybSrUUj6Q== Cadoles-VM-Deployement-KEY

Binary file not shown.

View File

@ -0,0 +1,28 @@
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIQCKWiRs1LXIyD1wK0u6tTSTANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xNzExMDYxMjIzMzNaFw0yNzExMDYxMjIzMzNaMF4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xHTAbBgNVBAMTFFJhcGlkU1NMIFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n
+MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28
OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoK
MFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckki
f2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bik
KB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQIDAQABo4IBZjCCAWIw
HQYDVR0OBBYEFFPKF1n8a8ADIS8aruSqqByCVtp1MB8GA1UdIwQYMBaAFAPeUDVW
0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF
BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo
MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E
OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i
YWxSb290Q0EuY3JsMGMGA1UdIARcMFowNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH
AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAEBMAgG
BmeBDAECATAIBgZngQwBAgIwDQYJKoZIhvcNAQELBQADggEBAH4jx/LKNW5ZklFc
YWs8Ejbm0nyzKeZC2KOVYR7P8gevKyslWm4Xo4BSzKr235FsJ4aFt6yAiv1eY0tZ
/ZN18bOGSGStoEc/JE4ocIzr8P5Mg11kRYHbmgYnr1Rxeki5mSeb39DGxTpJD4kG
hs5lXNoo4conUiiJwKaqH7vh2baryd8pMISag83JUqyVGc2tWPpO0329/CWq2kry
qv66OSMjwulUz0dXf4OHQasR7CNfIr+4KScc6ABlQ5RDF86PGeE6kdwSQkFiB/cQ
ysNyq0jEDQTkfa2pjmuWtMCNbBnhFXBYejfubIhaUbEv2FOQB3dCav+FPg5eEveX
TVyMnGo=
-----END CERTIFICATE-----

View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
-----END CERTIFICATE-----

View File

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----

View File

@ -0,0 +1,70 @@
-----BEGIN CERTIFICATE-----
MIIGETCCA/mgAwIBAgISESAecjUG2O9kiX/A/O1ocueQMA0GCSqGSIb3DQEBCwUA
MIGaMQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMg
VGl0cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE0MDIG
A1UEAwwrQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gUmFjaW5lIEFOVFMvQSBW
MzEKMAgGA1UEBRMBMTAeFw0xNjA1MjQwMDAwMDBaFw0yMjA1MjQwMDAwMDBaMIGe
MQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMgVGl0
cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE4MDYGA1UE
AwwvQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gU2VydmljZXMgQXBwbGljYXRp
ZnMxCjAIBgNVBAUTATIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDe
uXSRwETXe+9+ylXVk8BRElcJzlLIbl8mPRIvD0SOojFTMlwMGGCgFlDiPmDGR9te
pHOVU9GfeiF3eT1o9xfBxLsRQdnC/1j68fgRm0qovYN5rXaB+wNPUuWtgZNwPgZK
dc4R6430xIAQpU9dHgcusWXxWMD3b7WJJmifwtlhEBKazEZcMgPS1irH+pPRH56+
AEd+l+ir7PrRd5TGfNrT/aCT+ASE+auul9Q2OrSEgBEFb2mxNmfBf9rOc+Bpueir
KProsAH+XXNXrC/4uiBVEKkGslFBIkkuPpj0wuTUZR+upT/e9GRDo+iM0UhFdy7+
oNNxa4EITghk8Rup2Mz/AgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA
MA4GA1UdDwEB/wQEAwIBBjARBgNVHSAECjAIMAYGBFUdIAAwSAYDVR0fBEEwPzA9
oDugOYY3aHR0cDovL2NybC5hbnRzLmdvdXYuZnIvYW50c2F2My9hY19yYWNpbmVf
YW50c2F2M18xLmNybDCBgQYIKwYBBQUHAQEEdTBzMEIGCCsGAQUFBzAChjZodHRw
Oi8vc3AuYW50cy5nb3V2LmZyL2FudHNhdjMvY2FfcmFjaW5lX2FudHNhdjNfMS5j
ZXIwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vY3NwLmFudHMuZ291di5mci9hbnRzYXYz
LzAdBgNVHQ4EFgQUHIkSEyXD64D3jxXvqHfoIekNCZcwHwYDVR0jBBgwFoAUXAPV
d5g1UCpNf49vmlbblvgV4OMwDQYJKoZIhvcNAQELBQADggIBAJoyslCRpqW7qigT
plNwVyio41tKS6QD73Mz9Rz4a3YQyvozidSdyLOb3eYw9RFP+0LOTvdAQYvyjtvR
EsmqddFauTxBFebZYOy39ItoO4NWCoGSd8pclu7rPXyS/8D+Sfcb/juE3XLfjQvC
CuktXVoYC1s0LGVu/XSaM0Hn+g8d/dvvEeJH2wiQV1fCcDam1j8T8kuAbVOoZcGH
/vOvXvTH3jHXqL61JsytNonLMYtmV/0ZT3K2wF16Q6t0MQWSSHO3cwzwhzWnX3wz
122RoaFBjURrINwwJZpMSbY5UIL84MUR9Vl1KA9JEX9SY2ZIYC8nslHlo/fdLKjT
vFZ8n6N6VotreblAMS1EkkavN2KS+hg2MP9pSN3717kXuFlRe7p3KbUf60Uju+ci
LfQg2zkcmL3PQcEcVPjJdLQRjtOjy4gzGtLpSZ+BMkGRlfNWBfuatWpq1AcxZHXw
dgSwCYmuU7/YhO6NZINERuwOAH7EVPfIjK52O2w8BP5YDpHnFw2+d5qLp6w4WF9q
kvhgwl9/KPN47znzZbTvZ6nOk78Rkw9F6ZJ3ipn8mRSeBg8xrN9zRMOCmBanqT/b
NWMyIFkyE+dlfcGYsqAAjNTA8k3h5uJeqLIWJmPdiQ+6kDLfPvl8iRFsUUuNa3ip
9ud8JMaCHv5JiZCCrKoYzB8L3rO9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGJTCCBA2gAwIBAgISESC5NBpnVkavBzulIPZSBqVRMA0GCSqGSIb3DQEBCwUA
MIGaMQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMg
VGl0cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE0MDIG
A1UEAwwrQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gUmFjaW5lIEFOVFMvQSBW
MzEKMAgGA1UEBRMBMTAeFw0xMzA3MDQwMDAwMDBaFw0yNTA3MDQwMDAwMDBaMIGa
MQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMgVGl0
cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE0MDIGA1UE
AwwrQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gUmFjaW5lIEFOVFMvQSBWMzEK
MAgGA1UEBRMBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK4TdVab
glw78h8MWOZ4cILocAXSUIFbVk5gr0bD7lqEq3FV9Rpp0rGmhYkFy57sl/5oXa0v
Z+DHxnZ3fFsZODcA0DWf+H1wn3VoxoeiThIlkVdo41mFeD/ZWxaYhaYF0LkgF1Ks
hUMhaLLZNfdOVGSubIpLBCoHcBDqKf8bEEF04xS7b0hJcjfhay902SsHJ+iE3Rno
SPo3kQ4uT3kH6Qoda7StDm7F8O2FcX6LTgj/Lggly8eiT+4qPyG/+ty4RxOdE5c4
IqcsGiJe6+koGAJ2dQQSAUKA/TeKHFId47vMRIB+MwcKMXAAiqA3Ip7csk7eFr8v
mcUWZONo4x+BiNAqm6Sdlls8+JPykxe8JiClzJbXWkuAF3vBo1aiB3PzaC1qY60H
byGtv/n0kC0R8fkEx8/YC/4Qi/XY0NAsCbyrlFTZtKrGhji1OC6wKMgk5glaNJC/
nLwzUpXAPKjrUv4vHdI3jRRA8bKuB/Xecirt/bY/+vxTwW4lBqfWw3AttX48j+Az
Tu/sMcEC+kdO5iOc/ZI7m9irzUJk8VIiD4wkGrZ1SeINacsXh1vCJch2dYJxdYyc
0jTJGg12mEaRnFHlXTlYaF0hrhV1EBEo+2nOFODeIk9oqpwRPZ95+sAdQHTy+8SS
HPUtlbaN88Vks2mk2A40nDcOIXKu6wBCXVx5AgMBAAGjYzBhMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRcA9V3mDVQKk1/j2+aVtuW
+BXg4zAfBgNVHSMEGDAWgBRcA9V3mDVQKk1/j2+aVtuW+BXg4zANBgkqhkiG9w0B
AQsFAAOCAgEAPh1gSfDNSL2WKEa1n0kUVVhkyApY1JPwWrNNRxUCioRj1ulTNS/b
IcIKyowKN1d0KQFTogE8MA76y2Syc5nyQEnTwtnIhrrVuo2J4+TAt19mxObcdSJ5
BNZ6/JoC6djlcs92sghjXUcfRbtI6v84sIbnhBZvToA6PFMOHn8WIGc1rKcNv/7F
fSS4cQydgXQPdv8IBdxCBMH7zml9wYz89ENMcemyWWIm5W6kSDhaxP5wQKo3PYmq
BOX+ICX68EhZD0CIngkxpxLmFlcOsgIciGLjzuGf3mKxek4ZQUyP4hk93jfbHftL
qrKomMcB8vrksuAbxci7uAjyR+i32TqTcPhkiWwCV3BpRIiXGPAFjOHtrfdUjJPt
7OuJ4OqlDKZIkfRhDV/E3XGzlti+x7+FhPa6Wh9IUOU42pBo1SHTh+yGSpzsITVp
7rBnRv47j9L8Y7L+wDURb2JWzlwKPR7Dnf8/zPXxJ90WPgOai41FuTDsjZYbNDop
T+PM9e7cJPB6GsuEsulSqf4ZCMUAwb+QCaZSFXajKtEaYGnYhnuIhCxjuCWqo8CU
ogANuQ7ON4v+aCVLy2pJ3LPV/9YGcLHR0YssmD/jqcZi7fhNcAJMOTRW4lticHl5
R5ihit2olJHYbD2S+XesKj91gNz3GEJj1yWuWwo9id8nmXY5J7fGZ5w=
-----END CERTIFICATE-----

View File

@ -0,0 +1,70 @@
-----BEGIN CERTIFICATE-----
MIIGETCCA/mgAwIBAgISESB0DFgpC97mZ9Nh3ruNBL2qMA0GCSqGSIb3DQEBCwUA
MIGaMQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMg
VGl0cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE0MDIG
A1UEAwwrQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gUmFjaW5lIEFOVFMvQSBW
MzEKMAgGA1UEBRMBMTAeFw0xMzA3MDQwMDAwMDBaFw0xOTA3MDQwMDAwMDBaMIGe
MQswCQYDVQQGEwJGUjEwMC4GA1UECgwnQWdlbmNlIE5hdGlvbmFsZSBkZXMgVGl0
cmVzIFPDqWN1cmlzw6lzMRcwFQYDVQQLDA4wMDAyIDEzMDAwMzI2MjE4MDYGA1UE
AwwvQXV0b3JpdMOpIGRlIENlcnRpZmljYXRpb24gU2VydmljZXMgQXBwbGljYXRp
ZnMxCjAIBgNVBAUTATEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDh
AFZdLGRoaYnMv+8VxDyg1uj3ES/auX+XaXIciJK4QFzudRsu6XjS9E8N/sECZsdx
uzYZzw6CIwb8Cz/gucL7H4ITN2CUDiiMCCBobuBfSXYiY4BV7efqYE9Hx2fmQjeK
9FLHVbjJBsCjn9IIFGbqHIqCcHRH0kLyIZrnM9fG9lXJxTCqWPNzMkuTISgm9pb3
VrsBwADcoklUKeTUHkbyz+qsqwipqqrO+SJQp5Lz3Sxsx8xVNlkvKgGLn0JOidVK
PFtUPrHvd0sXzqkvaUKdAOV1SBkFJ1Oya6LBQjuDNIzdSkTyQ5h7K5p4xDUfSBU3
bZVD0ZFYnnzPo8tCYqsjAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA
MA4GA1UdDwEB/wQEAwIBBjARBgNVHSAECjAIMAYGBFUdIAAwSAYDVR0fBEEwPzA9
oDugOYY3aHR0cDovL2NybC5hbnRzLmdvdXYuZnIvYW50c2F2My9hY19yYWNpbmVf
YW50c2F2M18xLmNybDCBgQYIKwYBBQUHAQEEdTBzMEIGCCsGAQUFBzAChjZodHRw
Oi8vc3AuYW50cy5nb3V2LmZyL2FudHNhdjMvY2FfcmFjaW5lX2FudHNhdjNfMS5j
ZXIwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vY3NwLmFudHMuZ291di5mci9hbnRzYXYz
LzAdBgNVHQ4EFgQUM5+7zx89GVrXKHmoSv1jfL8AMi8wHwYDVR0jBBgwFoAUXAPV
d5g1UCpNf49vmlbblvgV4OMwDQYJKoZIhvcNAQELBQADggIBAFGR3FQ/DSv7k5ZM
n97UhitA5RT+iwT7gnGMnwZ7N2CSahmxulyNSIk2UUUpmBXd/dlBTB5W4BxupgJM
21O+32dwZwfhLxT92nVlTlG+5ow0W4aXHy3ZCso+90oFBoFuZvuVt2w3XROWxqsp
Emvoot0uZjHA81hFvZEL/B8N4yoPB4olI4HCBPVAp8oBxeljYxbc/QhB5q/PqCww
lv0K4j7r2/yiUQbml5H9YZZKSETi8MW4IaIoSUh0A0IWQH4nBR7b+cwGvfgZXw43
ymE01oW2fAEAl+6nHYXEDA7q4o6VCGMqlb7FDY6ZvQ/V7oM1veVqj0nYyVTYBQ7p
Lp3hs0RuF5LJCFYhnaM9TLoDEh86tKG/YONJUXUYgUaBgFmYyBm2Rdj3A+GXpd9+
8+8ihI/mRiWPNKfX9GANN67mSOlMXbUFyZkG30CwCBZdlng+EmcZnfDNNteWxOPe
gnm816k96+zR6ZbBPRz6Vkw6nN2OB9z3GfmoaWffHXaA6jmBPn62bfCC6PzEpebp
do7X/dfB7rvRRay3Ewe/aUnzc2ze5w5z3taT5bQEj5SgBEYCMnGekmJkdMOBf/c2
mUfPtqWPDU7Mp7nO2HbMbH9Ly/EyTPh3lwFRyU3tgei0rBEN/Dq2sXt37OcfmWxy
ni/uwutaK6dn+u1i0CCQS/qDcWk0
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
/q4AaOeMSQ+2b1tbFfLn
-----END CERTIFICATE-----

View File

@ -0,0 +1,31 @@
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,31 @@
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

View File

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,27 @@
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc6bLEeMfizANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDEwMloXDTIxMDMxNzE2NDEwMlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFg0MIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA4SR0Qnu3kTHZc/84qtjORFy3OQrcRK4NvUW5lzdnr71QT1/T
EFRr90HajmPmbVvA6ECpjEH80QOJ/2JhCWDWBwV4mpC9GmQ+T9zPdy+Ja8tnr0FN
xY0AwGv+jYTctfKVMajo9pCgQ0qTdFyzPkNpS4kiR3RRPplkw80kAfmELyh3FyKn
3cNsCExmLzd0xW+TjrBGNxZh0VCYyLAPT1hTfKz22i2WYVCtQ9wKpk+etVK5nI7v
Tt9GszHcIPxpwqMgdT7sOBs2TmZm0t/1ZqSTL3umDpQ+YD1KSxxvurRNHDyRWG4v
TcTacNvtATl2wEnn6TW1FAaQweWS4hD9a7m0hQIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBTFsatOTLHNZDCTfsGEmQWr5gPiJTANBgkqhkiG9w0BAQsF
AAOCAQEANlaeSdstfAtqFN3jdRZJFjx9X+Ob3PIDlekPYQ1OQ1Uw43rE1FUj7hUw
g2MJKfs9b7M0WoQg7C20nJY/ajsg7pWhUG3J6rlkDTfVY9faeWi0qsPYXE6BpBDr
5BrW/Xv8yT8U2BiEAmNggWq8dmFl82fghmLzHBM8X8NZ3ZwA1fGePA53AP5IoD+0
ArpW8Ik1sSuQBjZ8oQLfN+G8OoY7MNRopyLyQQCNy4aWfE+xYnoVoa5+yr+aPiX0
7YQrY/cKawAn7QB4PyF5//IKSAVs7mAuB68wbMdE3FKfOHfJ24W4z/bIJTrTY8Y5
Sr4AUhtzf8oVDrHZYWRrP4joIcOu/Q==
-----END CERTIFICATE-----

View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1
WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrX
NSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf
89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHl
Npi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7Dc
Gu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgz
uEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMB
AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU
BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB
FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSo
SmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js
LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF
BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG
AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD
VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB
ABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGx
A/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRM
UM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2
DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1
eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOu
OsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vw
p7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY
2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0
ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKR
PB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5b
rUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt
-----END CERTIFICATE-----

View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1
WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrX
NSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf
89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHl
Npi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7Dc
Gu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgz
uEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMB
AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU
BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB
FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSo
SmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js
LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF
BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG
AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD
VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB
ABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGx
A/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRM
UM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2
DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1
eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOu
OsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vw
p7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY
2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0
ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKR
PB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5b
rUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt
-----END CERTIFICATE-----

View File

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFHzCCBAegAwIBAgISBCjkb2j6sMEhSJmFWzQLY9ZFMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMTAyMTcxMjA3MTZaFw0yMTA1MTgxMjA3MTZaMBgxFjAUBgNVBAMM
DSouYmVyLmFzc28uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4
WWRNeZeda6tJdMoq2BaVTTn9dPxv7PXmMAbyV4BBF0OjNiJiWcMUtTR2UEmnVLzD
gaIs09jwsz/ONgjlEjM0t3bUOX6DiZg5GCE454JzMNSJAbiBTmCIQmPK3G/T6ZCG
xCIIVVhBQ6IYZjZWVnULtwtTy4k4Ib8lD0XHZKo7vX5+2pycXAB0ndK8UoEDJf8L
d7OatFaNC4J3/D3qUvNVQufGUgxZPp5ETKSEDnxrl67A/coea54pP73cHyArdL97
QRgT0UAT2Nuwn/It6a5xdE/5gl24RqwjN3XivgKyRhA5UeHw4tQBWIi6mou9Ttt0
ky16vAsXWjt1OXxIfi8ZAgMBAAGjggJHMIICQzAOBgNVHQ8BAf8EBAMCBaAwHQYD
VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0O
BBYEFIPQnxhiMLua8dlOGgyjElFFSq9JMB8GA1UdIwQYMBaAFBQusxe3WFbLrlAJ
QOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL3Iz
Lm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5vcmcv
MBgGA1UdEQQRMA+CDSouYmVyLmFzc28uZnIwTAYDVR0gBEUwQzAIBgZngQwBAgEw
NwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5j
cnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdQCUILwejtWNbIhzH4KL
IiwN0dpNXmxPlD1h204vWE2iwgAAAXewGhhfAAAEAwBGMEQCIC88mMBZPXR5wDuV
Q3+TNOafkGYD1RZMp88tiTI4j/EAAiAi8HdR5aYRkcjgVKsB8Dc/yA36dkQ9V/MH
3+50rvef4gB2AH0+8viP/4hVaCTCwMqeUol5K8UOeAl/LmqXaJl+IvDXAAABd7Aa
GQgAAAQDAEcwRQIhAIFWNgftG1lP3bFEMx90k9PGZyEQnAgt/I0rmUMFRsJVAiAT
y92UzhyUcE5ylL0ef33/f+y5Fk3TemdFDnWguX56CzANBgkqhkiG9w0BAQsFAAOC
AQEACiz/1Na1pfXd78CZ8jN65EcbhE8Z9JMUb8v4uOOf5whK6oHlkUgAvjIUzL5A
xfmUPUXdceSLOttgT6+wx5X8zyPSiUNQDEre8RMqGtRTX0uix5Gxp2nyQAOf7BdS
knzYkQ90HM5XHyXci0yqImT+g1XUz404DTXi4TtunVXaHTsnVK4VvJCMbitmwEjR
8u3xQrbqqBAkhVMeiywgNdSpkhDZz1Vl7NQgv0QmkdDfs2UM2cOt/XPlzyzYQ/DG
sRyJ+ItEm5XMlrh21ISmnHzeBNGLGnPBBNBYMX8ReLIw1VjQ+98adWs+jL6/Ac9Q
aNieo2Uw0oyYjOfiqjgqwmQ4Og==
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4WWRNeZeda6tJ
dMoq2BaVTTn9dPxv7PXmMAbyV4BBF0OjNiJiWcMUtTR2UEmnVLzDgaIs09jwsz/O
NgjlEjM0t3bUOX6DiZg5GCE454JzMNSJAbiBTmCIQmPK3G/T6ZCGxCIIVVhBQ6IY
ZjZWVnULtwtTy4k4Ib8lD0XHZKo7vX5+2pycXAB0ndK8UoEDJf8Ld7OatFaNC4J3
/D3qUvNVQufGUgxZPp5ETKSEDnxrl67A/coea54pP73cHyArdL97QRgT0UAT2Nuw
n/It6a5xdE/5gl24RqwjN3XivgKyRhA5UeHw4tQBWIi6mou9Ttt0ky16vAsXWjt1
OXxIfi8ZAgMBAAECggEBAKfFGsZzYSrvwNvCAPcK30qTFLJ41AAcfBE4JipIvbz/
KhwP+Szeme5vlsYR/WXedUfL40a+qZEs4GWPwXqPnLBeQzOS+3NENpfHQPzjnFGu
382sFjj/llSLbvxArzkBN/md54cD/KSwo4VnCA588lpuBE4HTuMZuzZD9vImx9JC
75oGD1Acct+AFAxqf4aLDAf7XawNMTXYFmMICUtzJ/TlP4XiuSJgyt6tUvbE0SPq
PEP1iEohJCBVZrN1F1/rxW1AYKdXtso97iszObbTiHFIYyqqvBGMofgKiZXhtsLg
UCm7umD5SMeDEZWD+gGjtThepWbi+1eQezgolUMF/fECgYEA32S+VzgVwd5YNql/
8/rYKys7asacR6MZ6MP3zTpu8JU4NhuEnRi97J2nm/r4iwCO+TI1YC72r47iImp0
BQhs/4BMizZurMbEc7lvfgiDVZKCnV0iyfmi1k/K4IgVHUAFFX8JG5zSrT1eKXdh
cGrPU5UHO2F8iqaX2e6a/haha30CgYEA00G6m+v8gj2vb5h3bXnY+WPBatRdbpqn
DoLA/tASWhioY0lisiiOiziIFpeRjOQ6JEqgt+ro0yTKksHX54ti0yHL2QFi8acM
wXHTEHNo2S22DAe1fbUQuwbYzexxdscgqK+u2OBTQb9Ji7SzyMfPRZ5QdgRrri83
1Fo7+N86TM0CgYAB1Jh+rHX5LbI5WHA09pQ43lTRTilPqPV4Y8qvAtCP5hkc0GLo
yqAbxTrvW0IYGXwSbKflTt00mQ4fTBIBTI1gFpQJ+/syLTrE2/se5ED3PYkWcwHq
98Gu0d6Osm7B25lvEKhpcoKDauJPoqvIuQdT3v+9K9JSbIUIAx2AAX13HQKBgECN
ozImCEDcDJGzKzs+snhybRXx0qMLiuS6O7MhbZouUrYUJJ6AGh6cpakRo55D1yhj
zXylwYNTiLsTlJ/iTc5qU1n6PHvPKeyqlW4/ddh3SVuft2u0OmqMCw/RolJDQs2I
8Yq/8XDzvMt96jn+JG4HlFqbuzO8pfizogPIYo45AoGBAIkCD7iW7TMI38npwgbt
nnA/DiMdNorsUzp/zQdzGb4QGGldVSsIk+sgJkNMAMC9zJ2ih4jh2M/Lr1N3FsOC
PVReoeF9/PMjy0Hbdyyzd6XQhW+KLiyibgwMkdRYrAD0jXaSgDnwzIff2aPS1n/m
7eRMhYiUVDxVVO8REWVlEmlr
-----END PRIVATE KEY-----

View File

@ -0,0 +1,56 @@
-----BEGIN CERTIFICATE-----
MIIFHzCCBAegAwIBAgISBCjkb2j6sMEhSJmFWzQLY9ZFMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMTAyMTcxMjA3MTZaFw0yMTA1MTgxMjA3MTZaMBgxFjAUBgNVBAMM
DSouYmVyLmFzc28uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4
WWRNeZeda6tJdMoq2BaVTTn9dPxv7PXmMAbyV4BBF0OjNiJiWcMUtTR2UEmnVLzD
gaIs09jwsz/ONgjlEjM0t3bUOX6DiZg5GCE454JzMNSJAbiBTmCIQmPK3G/T6ZCG
xCIIVVhBQ6IYZjZWVnULtwtTy4k4Ib8lD0XHZKo7vX5+2pycXAB0ndK8UoEDJf8L
d7OatFaNC4J3/D3qUvNVQufGUgxZPp5ETKSEDnxrl67A/coea54pP73cHyArdL97
QRgT0UAT2Nuwn/It6a5xdE/5gl24RqwjN3XivgKyRhA5UeHw4tQBWIi6mou9Ttt0
ky16vAsXWjt1OXxIfi8ZAgMBAAGjggJHMIICQzAOBgNVHQ8BAf8EBAMCBaAwHQYD
VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0O
BBYEFIPQnxhiMLua8dlOGgyjElFFSq9JMB8GA1UdIwQYMBaAFBQusxe3WFbLrlAJ
QOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL3Iz
Lm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5vcmcv
MBgGA1UdEQQRMA+CDSouYmVyLmFzc28uZnIwTAYDVR0gBEUwQzAIBgZngQwBAgEw
NwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5j
cnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdQCUILwejtWNbIhzH4KL
IiwN0dpNXmxPlD1h204vWE2iwgAAAXewGhhfAAAEAwBGMEQCIC88mMBZPXR5wDuV
Q3+TNOafkGYD1RZMp88tiTI4j/EAAiAi8HdR5aYRkcjgVKsB8Dc/yA36dkQ9V/MH
3+50rvef4gB2AH0+8viP/4hVaCTCwMqeUol5K8UOeAl/LmqXaJl+IvDXAAABd7Aa
GQgAAAQDAEcwRQIhAIFWNgftG1lP3bFEMx90k9PGZyEQnAgt/I0rmUMFRsJVAiAT
y92UzhyUcE5ylL0ef33/f+y5Fk3TemdFDnWguX56CzANBgkqhkiG9w0BAQsFAAOC
AQEACiz/1Na1pfXd78CZ8jN65EcbhE8Z9JMUb8v4uOOf5whK6oHlkUgAvjIUzL5A
xfmUPUXdceSLOttgT6+wx5X8zyPSiUNQDEre8RMqGtRTX0uix5Gxp2nyQAOf7BdS
knzYkQ90HM5XHyXci0yqImT+g1XUz404DTXi4TtunVXaHTsnVK4VvJCMbitmwEjR
8u3xQrbqqBAkhVMeiywgNdSpkhDZz1Vl7NQgv0QmkdDfs2UM2cOt/XPlzyzYQ/DG
sRyJ+ItEm5XMlrh21ISmnHzeBNGLGnPBBNBYMX8ReLIw1VjQ+98adWs+jL6/Ac9Q
aNieo2Uw0oyYjOfiqjgqwmQ4Og==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEZTCCA02gAwIBAgIQQAF1BIMUpMghjISpDBbN3zANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIwMTAwNzE5MjE0MFoXDTIxMDkyOTE5MjE0MFow
MjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxCzAJBgNVBAMT
AlIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuwIVKMz2oJTTDxLs
jVWSw/iC8ZmmekKIp10mqrUrucVMsa+Oa/l1yKPXD0eUFFU1V4yeqKI5GfWCPEKp
Tm71O8Mu243AsFzzWTjn7c9p8FoLG77AlCQlh/o3cbMT5xys4Zvv2+Q7RVJFlqnB
U840yFLuta7tj95gcOKlVKu2bQ6XpUA0ayvTvGbrZjR8+muLj1cpmfgwF126cm/7
gcWt0oZYPRfH5wm78Sv3htzB2nFd1EbjzK0lwYi8YGd1ZrPxGPeiXOZT/zqItkel
/xMY6pgJdz+dU/nPAeX1pnAXFK9jpP+Zs5Od3FOnBv5IhR2haa4ldbsTzFID9e1R
oYvbFQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
BAMCAYYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5p
ZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTE
p7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEE
AYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2Vu
Y3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0
LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYf
r52LFMLGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
AQsFAAOCAQEA2UzgyfWEiDcx27sT4rP8i2tiEmxYt0l+PAK3qB8oYevO4C5z70kH
ejWEHx2taPDY/laBL21/WKZuNTYQHHPD5b1tXgHXbnL7KqC401dk5VvCadTQsvd8
S8MXjohyc9z9/G2948kLjmE6Flh9dDYrVYA9x2O+hEPGOaEOa1eePynBgPayvUfL
qjBstzLhWVQLGAkXXmNs+5ZnPBxzDJOLxhF2JIbeQAcH5H0tZrUlo5ZYyOqA7s9p
O5b85o3AM/OJ+CktFBQtfvBhcJVd9wvlwPsk+uyOy2HI7mNxKKgsBTt375teA2Tw
UdHkhVNcsAKX1H7GNNLOEADksd86wuoXvg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,27 @@
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEZTCCA02gAwIBAgIQQAF1BIMUpMghjISpDBbN3zANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIwMTAwNzE5MjE0MFoXDTIxMDkyOTE5MjE0MFow
MjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxCzAJBgNVBAMT
AlIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuwIVKMz2oJTTDxLs
jVWSw/iC8ZmmekKIp10mqrUrucVMsa+Oa/l1yKPXD0eUFFU1V4yeqKI5GfWCPEKp
Tm71O8Mu243AsFzzWTjn7c9p8FoLG77AlCQlh/o3cbMT5xys4Zvv2+Q7RVJFlqnB
U840yFLuta7tj95gcOKlVKu2bQ6XpUA0ayvTvGbrZjR8+muLj1cpmfgwF126cm/7
gcWt0oZYPRfH5wm78Sv3htzB2nFd1EbjzK0lwYi8YGd1ZrPxGPeiXOZT/zqItkel
/xMY6pgJdz+dU/nPAeX1pnAXFK9jpP+Zs5Od3FOnBv5IhR2haa4ldbsTzFID9e1R
oYvbFQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
BAMCAYYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5p
ZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTE
p7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEE
AYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2Vu
Y3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0
LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYf
r52LFMLGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
AQsFAAOCAQEA2UzgyfWEiDcx27sT4rP8i2tiEmxYt0l+PAK3qB8oYevO4C5z70kH
ejWEHx2taPDY/laBL21/WKZuNTYQHHPD5b1tXgHXbnL7KqC401dk5VvCadTQsvd8
S8MXjohyc9z9/G2948kLjmE6Flh9dDYrVYA9x2O+hEPGOaEOa1eePynBgPayvUfL
qjBstzLhWVQLGAkXXmNs+5ZnPBxzDJOLxhF2JIbeQAcH5H0tZrUlo5ZYyOqA7s9p
O5b85o3AM/OJ+CktFBQtfvBhcJVd9wvlwPsk+uyOy2HI7mNxKKgsBTt375teA2Tw
UdHkhVNcsAKX1H7GNNLOEADksd86wuoXvg==
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4WWRNeZeda6tJ
dMoq2BaVTTn9dPxv7PXmMAbyV4BBF0OjNiJiWcMUtTR2UEmnVLzDgaIs09jwsz/O
NgjlEjM0t3bUOX6DiZg5GCE454JzMNSJAbiBTmCIQmPK3G/T6ZCGxCIIVVhBQ6IY
ZjZWVnULtwtTy4k4Ib8lD0XHZKo7vX5+2pycXAB0ndK8UoEDJf8Ld7OatFaNC4J3
/D3qUvNVQufGUgxZPp5ETKSEDnxrl67A/coea54pP73cHyArdL97QRgT0UAT2Nuw
n/It6a5xdE/5gl24RqwjN3XivgKyRhA5UeHw4tQBWIi6mou9Ttt0ky16vAsXWjt1
OXxIfi8ZAgMBAAECggEBAKfFGsZzYSrvwNvCAPcK30qTFLJ41AAcfBE4JipIvbz/
KhwP+Szeme5vlsYR/WXedUfL40a+qZEs4GWPwXqPnLBeQzOS+3NENpfHQPzjnFGu
382sFjj/llSLbvxArzkBN/md54cD/KSwo4VnCA588lpuBE4HTuMZuzZD9vImx9JC
75oGD1Acct+AFAxqf4aLDAf7XawNMTXYFmMICUtzJ/TlP4XiuSJgyt6tUvbE0SPq
PEP1iEohJCBVZrN1F1/rxW1AYKdXtso97iszObbTiHFIYyqqvBGMofgKiZXhtsLg
UCm7umD5SMeDEZWD+gGjtThepWbi+1eQezgolUMF/fECgYEA32S+VzgVwd5YNql/
8/rYKys7asacR6MZ6MP3zTpu8JU4NhuEnRi97J2nm/r4iwCO+TI1YC72r47iImp0
BQhs/4BMizZurMbEc7lvfgiDVZKCnV0iyfmi1k/K4IgVHUAFFX8JG5zSrT1eKXdh
cGrPU5UHO2F8iqaX2e6a/haha30CgYEA00G6m+v8gj2vb5h3bXnY+WPBatRdbpqn
DoLA/tASWhioY0lisiiOiziIFpeRjOQ6JEqgt+ro0yTKksHX54ti0yHL2QFi8acM
wXHTEHNo2S22DAe1fbUQuwbYzexxdscgqK+u2OBTQb9Ji7SzyMfPRZ5QdgRrri83
1Fo7+N86TM0CgYAB1Jh+rHX5LbI5WHA09pQ43lTRTilPqPV4Y8qvAtCP5hkc0GLo
yqAbxTrvW0IYGXwSbKflTt00mQ4fTBIBTI1gFpQJ+/syLTrE2/se5ED3PYkWcwHq
98Gu0d6Osm7B25lvEKhpcoKDauJPoqvIuQdT3v+9K9JSbIUIAx2AAX13HQKBgECN
ozImCEDcDJGzKzs+snhybRXx0qMLiuS6O7MhbZouUrYUJJ6AGh6cpakRo55D1yhj
zXylwYNTiLsTlJ/iTc5qU1n6PHvPKeyqlW4/ddh3SVuft2u0OmqMCw/RolJDQs2I
8Yq/8XDzvMt96jn+JG4HlFqbuzO8pfizogPIYo45AoGBAIkCD7iW7TMI38npwgbt
nnA/DiMdNorsUzp/zQdzGb4QGGldVSsIk+sgJkNMAMC9zJ2ih4jh2M/Lr1N3FsOC
PVReoeF9/PMjy0Hbdyyzd6XQhW+KLiyibgwMkdRYrAD0jXaSgDnwzIff2aPS1n/m
7eRMhYiUVDxVVO8REWVlEmlr
-----END PRIVATE KEY-----

View File

@ -0,0 +1,95 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"alpine_provisionning": "{{ user `provisionning_dir`}}/alpine",
"al_mirror": "http://dl-cdn.alpinelinux.org/alpine",
"al_release": "3.10.2",
"al_version": "3.10",
"al_flavour": "alpine-virt",
"vm_name": "alpine-310",
"root_password": "cadoles",
"disk_size": "10240",
"headless": "true"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ user `al_mirror` }}/v{{ user `al_version` }}/releases/x86_64/{{ user `al_flavour` }}-{{ user `al_release` }}-x86_64.iso",
"iso_checksum": "file:{{ user `alpine_provisionning` }}/sums/{{ user `al_flavour` }}-{{ user `al_release` }}-x86_64.iso.sha256",
"format": "qcow2",
"disk_size": "{{user `disk_size`}}",
"disk_compression": false,
"skip_compaction": true,
"ssh_username": "root",
"ssh_password": "{{user `root_password`}}",
"accelerator": "kvm",
"headless": "{{user `headless`}}",
"http_directory": "{{ template_dir }}",
"boot_wait": "5s",
"boot_command": [
"<wait5s>root<enter>",
"<wait1s><enter>",
"<wait1s>passwd<enter><wait1s>cadoles<enter><wait1s>cadoles<enter>",
"<wait1s>setup-interfaces<enter><wait1s><enter><wait1s><enter><wait1s><enter>",
"<wait1s>ifup eth0<enter>",
"<wait1s>setup-sshd<enter>",
"<wait1s><enter><wait1s>",
"<wait1s>echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config<enter>",
"<wait1s>rc-service sshd stop<enter>",
"<wait1s>rc-service sshd start<enter>",
"<wait1s><enter>"
],
"ssh_wait_timeout": "20m",
"output_directory": "{{ template_dir }}/../../../images/alpine/{{user `al_version`}}/{{ user `al_flavour` }}",
"vm_name": "{{ build_name }}-{{ isotime \"20060102\" }}.img"
}
],
"provisioners": [
{
"type":"file",
"source":"{{ user `provisionning_dir`}}/ssl",
"destination":"/usr/local/share/ca-certificates/"
},
{
"type": "shell",
"expect_disconnect": true,
"script": "{{ user `alpine_provisionning` }}/setup-alpine.sh",
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}",
"ROOT_PASSWORD={{user `root_password`}}"
]
},
{
"pause_before": "30s",
"type": "shell",
"scripts": [
"{{ user `alpine_provisionning` }}/configure-onecontext.sh",
"{{ user `alpine_provisionning` }}/finalize.sh"
],
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}",
"ROOT_PASSWORD={{user `root_password`}}"
]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [ "sleep 5","qemu-img convert -O qcow2 -c {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ build_name }}-{{ isotime \"20060102\" }}.img {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ user `al_flavour` }}-{{ user `al_version` }}.img" ,
"rm -rf {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ build_name }}-{{ isotime \"20060102\" }}.img" ]
}
]
}

View File

@ -0,0 +1,94 @@
{
"variables": {
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"headless": "true",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"alpine_provisionning": "{{ user `provisionning_dir`}}/alpine",
"root_password": "cadoles",
"al_flavour": "alpine-virt",
"al_mirror": "http://dl-cdn.alpinelinux.org/alpine",
"al_release": "3.12.0",
"al_version": "3.12",
"disk_size": "10240",
"vm_name": "alpine-312"
},
"builders": [
{
"accelerator": "kvm",
"boot_command": [
"<wait5s>root<enter>",
"<wait1s><enter>",
"<wait1s>passwd<enter><wait1s>cadoles<enter><wait1s>cadoles<enter>",
"<wait1s>setup-interfaces<enter><wait1s><enter><wait1s><enter><wait1s><enter>",
"<wait1s>ifup eth0<enter>",
"<wait1s>setup-sshd<enter>",
"<wait1s><enter><wait1s>",
"<wait1s>echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config<enter>",
"<wait1s>rc-service sshd stop<enter>",
"<wait1s>rc-service sshd start<enter>",
"<wait1s><enter>"
],
"boot_wait": "5s",
"disk_compression": false,
"disk_size": "{{user `disk_size`}}",
"format": "qcow2",
"headless": "{{user `headless`}}",
"http_directory": "{{ template_dir }}",
"iso_checksum": "file:{{ user `alpine_provisionning` }}/sums/{{ user `al_flavour` }}-{{ user `al_release` }}-x86_64.iso.sha256",
"iso_url": "{{ user `al_mirror` }}/v{{ user `al_version` }}/releases/x86_64/{{ user `al_flavour` }}-{{ user `al_release` }}-x86_64.iso",
"name": "{{ user `vm_name` }}",
"output_directory": "{{ template_dir }}/../../../images/alpine/{{user `al_version`}}/{{ user `al_flavour` }}",
"skip_compaction": true,
"ssh_password": "{{user `root_password`}}",
"ssh_timeout": "20m",
"ssh_username": "root",
"type": "qemu",
"vm_name": "{{ build_name }}-{{ isotime \"20060102\" }}.img"
}
],
"provisioners": [
{
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}",
"ROOT_PASSWORD={{user `root_password`}}"
],
"expect_disconnect": true,
"script": "{{ user `alpine_provisionning` }}/setup-alpine.sh",
"type": "shell"
},
{
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}",
"ROOT_PASSWORD={{user `root_password`}}"
],
"pause_before": "30s",
"scripts": [
"{{ user `alpine_provisionning` }}/configure-onecontext.sh",
"{{ user `alpine_provisionning` }}/finalize.sh"
],
"type": "shell"
}
],
"post-processors": [
{
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ build_name }}-{{ isotime \"20060102\" }}.img {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ user `al_flavour` }}-{{ user `al_version` }}.img",
"rm -rf {{ template_dir }}/../../../images/alpine/{{ user `al_version` }}/{{ user `al_flavour` }}/{{ build_name }}-{{ isotime \"20060102\" }}.img"
],
"type": "shell-local"
}
]
}

View File

@ -0,0 +1,85 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "amon",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "amon-2.7.2",
"image_size": "40960",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=var",
"lvsizes=80%FREE",
"lvfssys=ext4",
"lvmntps=/var"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
}
]
}

View File

@ -0,0 +1,89 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "eolebase",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "eolebase-2.7.2",
"image_size": "10240",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/ubuntu/{{user `ubuntu_version`}}/ubuntu-{{ user `ubuntu_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "file",
"source": "{{ user `eole_provisionning` }}/onecontext/net-99-eole",
"destination": "/root/net-99-eole"
},
{
"type": "file",
"source": "{{ user `eole_provisionning` }}/{{ user `eole_version` }}/modif/00-eole.yaml",
"destination": "/root/00-eole.yaml"
},
{
"type": "file",
"source": "{{ user `eole_provisionning` }}/{{ user `eole_version` }}/netplan/01-netcfg.yaml",
"destination": "/etc/netplan/01-netcfg.yaml"
},
{
"type":"file",
"source":"{{user `provisionning_dir` }}/ssl",
"destination":"/usr/local/share/ca-certificates/rapidssl"
},
{
"type": "ansible",
"playbook_file": "{{user `eole_playbooks`}}/eole.yml",
"extra_arguments": [ "-vvvv", "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
},
{
"type":"ansible",
"playbook_file":"{{ user `eole_playbooks` }}/provision.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
}
]
}

View File

@ -0,0 +1,92 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "lemonldap",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "lemonldap-2.7.2",
"image_size": "20480",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=var",
"lvsizes=80%FREE",
"lvfssys=ext4",
"lvmntps=/var"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
},
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O vdi {{ user `output_dir` }}/{{ user `vm_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.vdi"
]
}
]
}

View File

@ -0,0 +1,92 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "minio",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "minio-2.7.2",
"image_size": "102400",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=ds1 ds2 ds3 ds4 ds5 ds6 ds7 ds8",
"lvsizes=10G 10G 10G 10G 10G 10G 10G 10G",
"lvfssys=ext4 ext4 ext4 ext4 ext4 ext4 ext4 ext4",
"lvmntps=/srv/ds1 /srv/ds2 /srv/ds3 /srv/ds4 /srv/ds5 /srv/ds6 /srv/ds7 /srv/ds8"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
},
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O vdi {{ user `output_dir` }}/{{ user `vm_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.vdi"
]
}
]
}

View File

@ -0,0 +1,4 @@
openssh-server/permit-root-login boolean true
d-i preseed/late_command string in-target /bin/bash -c "chpasswd -c SHA512 <<<'root:cadoles'"
d-i preseed/late_command string in-target /bin/bash -c "sed -i 's/^#PermitRootLogin.*\$/PermitRootLogin yes/g' /etc/ssh/sshd_config";

View File

@ -0,0 +1,76 @@
#!/bin/bash -e
set -xeo pipefail
export DEBIAN_FRONTEND=noninteractive
# Download OpenNebula context package
ONE_CONTEXT_VERSION=5.8.0
ONE_CONTEXT_BUILD_SUFFIX=-1
ONE_CONTEXT_SHASUM=cfcc8aa2e51396935e8d2a507f996838201515b5
ONE_CONTEXT_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v${ONE_CONTEXT_VERSION}/one-context_${ONE_CONTEXT_VERSION}${ONE_CONTEXT_BUILD_SUFFIX}.deb"
ONE_CONTEXT_PACKAGE_DEST=/tmp/one-context.deb
wget -O- "${ONE_CONTEXT_URL}" > "${ONE_CONTEXT_PACKAGE_DEST}"
echo "${ONE_CONTEXT_SHASUM} ${ONE_CONTEXT_PACKAGE_DEST}" | shasum -c
# Purge cloud-init
#apt-get purge -y cloud-init
# Install onecontext
Query-Auto
dpkg -i "${ONE_CONTEXT_PACKAGE_DEST}" || apt-get install -fy
# Ajout script de compat contextualisation OpenNebula/EOLE
apt-get install -y jq
mv /root/net-99-eole /etc/one-context.d/net-99-eole
chmod +x /etc/one-context.d/net-99-eole
# Allow TCP Forwarding to ease GenConfig usage
sed 's/^AllowTcpForwarding.*$/AllowTcpForwarding yes/' /usr/share/eole/creole/distrib/sshd_config > /usr/share/eole/creole/modif/sshd_config
# Ajout patch configuration DHCPv6
mv /root/00-eole.yaml /usr/share/eole/creole/modif/00-eole.yaml
gen_patch
# Update hostname
hostnamectl set-hostname "${VM_NAME}"
# Disable root login with password
# sed -i 's/^PermitRootLogin.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
# Cleanup
rm -f "${ONE_CONTEXT_PACKAGE_DEST}"
apt-get -y clean
# Update image with latest packages
Maj-Auto -i
# Clean all apt cache
apt clean
# TEMP Prevent EOLE 2.7.0 fucking bugs
systemctl disable gpm # Allow fucking login in VNC
# Disable nut-(driver|monitor)
systemctl mask nut-driver
systemctl disable nut-monitor
# Disable IPv6 to allow the VM to fucking boot
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*$/GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"/' /etc/default/grub
update-grub
# TRIM command to reduce disk size
fstrim -av
# Zero out the disk (could be very long)
set +e
FILE=/mytempfile
dd if=/dev/zero of=${FILE}
rm -rf ${FILE}
sync
set -e
# Force sync
sync

View File

@ -0,0 +1,85 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "seth",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "seth-2.7.2",
"image_size": "51200",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=home var tmp",
"lvsizes=80%FREE 90%FREE 100%FREE",
"lvfssys=ext4 ext4 ext4",
"lvmntps=/home /var /tmp"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
}
]
}

View File

@ -0,0 +1,92 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "tenjin",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "tenjin-2.7.2",
"image_size": "100G",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=var home",
"lvsizes=10%FREE 90%FREE",
"lvfssys=ext4 ext4",
"lvmntps=/var /home"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
},
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O vdi {{ user `output_dir` }}/{{ user `vm_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.vdi"
]
}
]
}

View File

@ -0,0 +1,86 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"eole_provisionning": "{{ user `provisionning_dir`}}/eole",
"eole_playbooks": "{{ user `provisionning_dir` }}/playbooks/eole",
"module_name": "zephir",
"ubuntu_version": "18.04",
"eole_version": "2.7.2",
"vm_name": "{{ user `module_name` }}-2.7.2",
"image_size": "40960",
"output_dir": "{{ template_dir }}/../../../images/eole/2.7.2/{{ user `module_name` }}",
"image_name": "{{ user `vm_name` }}-{{ isotime \"20060102\" }}"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_url": "{{ template_dir }}/../../../images/eole/{{user `eole_version`}}/eolebase/eolebase-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"disk_size": "{{ user `image_size` }}",
"ssh_username": "root",
"ssh_password": "cadoles",
"http_directory": "{{ template_dir }}",
"accelerator": "kvm",
"net_device": "virtio-net",
"disk_interface": "virtio",
"ssh_wait_timeout": "5m",
"boot_wait": "5s",
"output_directory": "{{ user `output_dir` }}",
"vm_name": "{{ user `image_name` }}.img",
"headless": true,
"qemuargs": [
[
"-m",
"2048"
]
]
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "{{ user `eole_playbooks` }}/partitions.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}",
"vgname=main",
"lvnames=home var",
"lvsizes=5%FREE 80%FREE",
"lvfssys=ext4 ext4",
"lvmntps=/home /var"
]
},
{
"type": "shell",
"inline": [ "reboot" ],
"expect_disconnect": true
},
{
"type": "ansible",
"pause_before": "45s",
"playbook_file": "{{ user `eole_playbooks` }}/{{ user `module_name` }}.yml",
"extra_arguments": [ "--extra-vars", "VM_NAME={{ user `vm_name` }} HTTP_PROXY={{ user `HTTP_PROXY` }} HTTPS_PROXY={{ user `HTTPS_PROXY` }} http_proxy={{ user `http_proxy` }} https_proxy={{ user `https_proxy` }}"]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"sleep 5",
"qemu-img convert -O qcow2 -c {{ user `output_dir` }}/{{ user `image_name` }}.img {{ user `output_dir` }}/{{ user `vm_name` }}.img",
"rm -rf {{ user `output_dir` }}/{{ user `image_name` }}.img"
]
}
]
}

View File

@ -0,0 +1,117 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"domain": "{{ env `DOMAIN` }}",
"provisionning_dir": "{{ template_dir }}/../../../../provisioning",
"playbooks_dir": "{{ user `provisionning_dir` }}/playbooks",
"infra_provisionning": "{{ user `provisionning_dir`}}/infra/{{ user `domain` }}",
"infra_playbooks": "{{ user `provisionning_dir` }}/playbooks/infra/{{ user `domain` }}",
"vm_name": "{{ env `VM_NAME` }}",
"image_output_directory": "{{ template_dir }}/../../../images/infra/cadoles.com/production/{{ user `vm_name`}}/system",
"syst_image_file": "{{ user `image_output_directory` }}/{{ user `vm_name` }}.img",
"eole_module" : "eolebase",
"image_version": "0.0.1",
"eole_version" : "2.7.2"
},
"builders": [
{
"name": "{{ user `vm_name` }}",
"type": "qemu",
"iso_urls": "{{ template_dir }}/../../../../images/eole/{{user `eole_version`}}/{{user `eole_module`}}/{{user `eole_module`}}-{{ user `eole_version` }}.img",
"iso_checksum": "none",
"disk_image": true,
"format": "qcow2",
"cpus": "2",
"memory": "2048",
"disk_size": "20480",
"ssh_username": "root",
"ssh_password": "cadoles",
"accelerator": "kvm",
"http_directory": "{{ template_dir }}",
"ssh_wait_timeout": "20m",
"boot_wait": "15s",
"skip_compaction": true,
"headless": true,
"shutdown_command": "shutdown -P now",
"output_directory": "{{ user `image_output_directory` }}",
"vm_name": "{{ build_name }}.img"
}
],
"provisioners": [
{
"type": "file",
"source": "{{user `provisionning_dir`}}/ssh",
"destination": "/root/.ssh/"
},
{
"type":"file",
"source":"{{ user `provisionning_dir` }}/../provisioning/ssl/ca/",
"destination":"/usr/local/share/ca-certificates/rapidssl"
},
{
"type":"file",
"source":"{{ user `provisionning_dir` }}/../provisioning/ssl/certs/",
"destination":"/etc/ssl/certs/"
},
{
"type":"file",
"source":"{{ user `provisionning_dir` }}/../provisioning/ssl/private/",
"destination":"/etc/ssl/private/"
},
{
"type": "ansible",
"pause_before": "30s",
"playbook_file": "{{ user `playbooks_dir` }}/get_conf_from_zephir.yml",
"ansible_env_vars": [
"zephir_server=zephir.cadoles.com",
"zephir_login=pacer",
"zephir_password=9+N7c2#vqV",
"create_server=non",
"code_rne=00004242",
"zephir_id=26",
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}"
]
},
{
"type": "ansible",
"playbook_file": "{{ user `infra_playbooks` }}/sso.yml",
"ansible_env_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}"
]
},
{
"type": "ansible",
"pause_before": "10s",
"playbook_file": "{{ user `playbooks_dir` }}/instance.yml",
"ansible_env_vars": [
"VM_NAME={{ user `vm_name` }}",
"HTTP_PROXY={{ user `HTTP_PROXY` }}",
"HTTPS_PROXY={{ user `HTTPS_PROXY` }}",
"http_proxy={{ user `http_proxy` }}",
"https_proxy={{ user `https_proxy` }}"
]
}
],
"post-processors": [
{
"type": "shell-local",
"script": "{{ template_dir }}/../../../../post-processors/compress-qcow2.sh",
"execute_command": [
"/bin/bash",
"-c",
"{{.Vars}} {{.Script}} {{ user `image_output_directory` }}/../ {{ user `vm_name` }} {{ user `image_version` }}"
]
}
]
}

View File

@ -0,0 +1,174 @@
### Preseed for Ubuntu 18.04
# Derived from: https://help.ubuntu.com/lts/installation-guide/example-preseed.txt
### Compatibility
# Tested with the netboot image:
# http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
# Might work with the regular image (not tested):
# http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-amd64.iso
### Authentication
# We recommend to use public key authentication and therefore disabled the root
# password. The build-iso.sh script will do all the hard work for you.
#
# In case you still want to use password authentication, you need to set the
# passwd/root-password-crypted variable. See below for further instructions.
### Usage
# We recommend to use the build-iso.sh script to build an image with embedded
# preseed and other required files. In that case the preseed file gets loaded
# automatically and all additional files are available to the installer.
#
# In case you want to use a vanilla ISO image, please use the following boot
# instructions to load the preseed file (press ESC and enter in boot prompt):
#
# install auto=true priority=critical url=https://raw.githubusercontent.com/core-process/linux-unattended-installation/master/ubuntu/18.04/custom/preseed.cfg
#
# Note: you will need to adjust the "preseed/late_command" variable to match
# your environment in case you do not use the build-iso.sh script.
### Unattended Installation
d-i auto-install/enable boolean true
d-i debconf/priority select critical
### Localization
d-i debian-installer/locale string fr_FR.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8, fr_FR.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select fr
### Network configuration
d-i netcfg/choose_interface select auto
d-i netcfg/hostname string ubt1804
d-i netcfg/get_hostname string ubt1804
d-i netcfg/get_domain string cadol.es
d-i hw-detect/load_firmware boolean true
### Mirror settings
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
### Account setup
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password $1$41q22ku0$lM57h3xPuGwoiBHD4Neqg.
d-i passwd/make-user boolean false
# The root password is disabled by default. In case you want to use a root
# password, please generate a password with the following command
# printf "please-change-password" | mkpasswd -s -m sha-512
# and update the passwd/root-password-crypted variable accordingly. Furthermore
# you need to remove the call to "usermod" below.
### Normal account setup
d-i passwd/user-fullname string Cadoles User
d-i passwd/username string cadoles
d-i passwd/user-password-crypted password $1$41q22ku0$lM57h3xPuGwoiBHD4Neqg.
d-i passwd/user-uid string 1000
d-i passwd/user-default-groups string wheel
### Clock and time zone setup
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
### Partitioning
d-i preseed/early_command string umount /media || true
d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string main
d-i partman-md/device_remove_md boolean true
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-basicmethods/method_only boolean false
### GPT
d-i partman-basicfilesystems/choose_label string gpt
d-i partman-basicfilesystems/default_label string gpt
d-i partman-partitioning/choose_label string gpt
d-i partman-partitioning/default_label string gpt
d-i partman/choose_label string gpt
d-i partman/default_label string gpt
### EFI
d-i partman-efi/non_efi_system boolean true
### Grub
d-i grub-installer/bootdev string /dev/vda
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
### Disk layout
# Use entire disk
d-i partman-auto/expert_recipe string \
boot-root :: \
1 1 1 free \
$bios_boot{ } \
method{ biosgrub } \
. \
256 256 256 fat32 \
$primary{ } \
$iflabel{ gpt } \
$reusemethod{ } \
method{ efi } format{ } \
mountpoint{ /boot/efi } \
. \
512 512 512 ext4 \
$primary{ } \
$bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /boot } \
. \
1024 102400000 1000000000 ext4 \
$lvmok{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
lv_name{ root } \
. \
200% 200% 200% linux-swap \
$lvmok{ } \
method{ swap } format{ } \
lv_name{ swap } \
.
### Base system installation
d-i base-installer/install-recommends boolean true
d-i base-installer/kernel/image string linux-generic
### Apt setup
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
d-i apt-setup/backports boolean true
d-i apt-setup/use_mirror boolean false
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.ubuntu.com
d-i apt-setup/security_path string /ubuntu
### Package selection
d-i tasksel/first multiselect none
d-i pkgsel/include string openssh-server python
d-i pkgsel/upgrade select full-upgrade
d-i pkgsel/update-policy select unattended-upgrades
### Finishing up the installation
d-i preseed/late_command string \
in-target sh -c "sed -i '/PermitRootLogin/c PermitRootLogin yes' /etc/ssh/sshd_config"; \
in-target sh -c 'echo "IPv4: \\\4" >> /etc/issue && echo "IPv6: \\\6" >> /etc/issue && echo "" >> /etc/issue';
d-i debian-installer/splash boolean false
d-i cdrom-detect/eject boolean true
### Shutdown machine
d-i finish-install/reboot_in_progress note

View File

@ -0,0 +1,70 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"vm_name": "ubuntu-18.04",
"packer_images_output_dir": "{{ template_dir }}/../../../images/ubuntu/18.04",
"cpus": "2",
"memory": "4096",
"ubuntu_codename": "bionic",
"ubuntu_mirror": "http://archive.ubuntu.com/ubuntu/dists/",
"ssh_username": "root",
"ssh_password": "cadoles",
"preseed_file_name": "preseed-minimal.cfg",
"disk_size": "10240",
"headless": "true"
},
"builders":
[
{
"name": "{{ user `vm_name` }}",
"vm_name": "{{ user `vm_name` }}.img",
"type": "qemu",
"iso_checksum": "file:{{ user `ubuntu_mirror` }}{{ user `ubuntu_codename` }}-updates/main/installer-amd64/current/images/SHA256SUMS",
"iso_urls": [ "{{ user `ubuntu_mirror` }}{{ user `ubuntu_codename` }}-updates/main/installer-amd64/current/images/netboot/mini.iso" ],
"ssh_username": "{{ user `ssh_username` }}",
"ssh_password": "{{ user `ssh_password` }}",
"ssh_wait_timeout": "60m",
"headless": "{{ user `headless` }}",
"output_directory": "{{ template_dir }}/../../../images/ubuntu/18.04",
"accelerator": "kvm",
"cpus": "{{ user `cpus` }}",
"memory": "{{user `memory`}}",
"boot_wait": "5s",
"boot_command":
[
"<tab>",
"url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{ user `preseed_file_name` }} ",
"auto=true ",
"language=fr ",
"country=FR ",
"locale=fr_FR.UTF-8 ",
"method=fr ",
"net.ifnames=0 ",
"hostname={{user `vm_name` }} ",
"<enter>"
],
"disk_size": "{{ user `disk_size` }}",
"disk_additional_size": [ "10G", "20G", "30G", "40G", "50G", "60G" ],
"http_directory": "{{template_dir}}/http"
}
],
"provisioners": [
{
"type": "shell",
"scripts": [
"{{ template_dir }}/scripts/provision-minimal.sh"
],
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}"
]
}
]
}

View File

@ -0,0 +1,57 @@
#!/bin/bash -e
set -xeo pipefail
# For SHASUM
apt-get -y install perl ifupdown
# Download OpenNebula context package
ONE_CONTEXT_VERSION=5.8.0
ONE_CONTEXT_BUILD_SUFFIX=-1
ONE_CONTEXT_SHASUM=cfcc8aa2e51396935e8d2a507f996838201515b5
ONE_CONTEXT_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v${ONE_CONTEXT_VERSION}/one-context_${ONE_CONTEXT_VERSION}${ONE_CONTEXT_BUILD_SUFFIX}.deb"
ONE_CONTEXT_PACKAGE_DEST=/tmp/one-context.deb
wget -O- "${ONE_CONTEXT_URL}" > "${ONE_CONTEXT_PACKAGE_DEST}"
echo "${ONE_CONTEXT_SHASUM} ${ONE_CONTEXT_PACKAGE_DEST}" | shasum -c
# Purge cloud-init
apt-get purge -y cloud-init perl
# Install onecontext
dpkg -i "${ONE_CONTEXT_PACKAGE_DEST}" || apt-get install -fy
# Update hostname
hostnamectl set-hostname "${VM_NAME}"
# Disable root login with password
# sed -i 's/^PermitRootLogin.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
# Run dhclient on one-context service failure
mkdir -p /etc/systemd/system/one-context.service.d
cat > /etc/systemd/system/one-context.service.d/dhclient-on-fail.conf <<EOF
[Unit]
OnFailure=one-dhclient.service
EOF
cat > /etc/systemd/system/one-dhclient.service <<EOF
[Unit]
Description=Execute dhclient
[Service]
ExecStart=/sbin/dhclient
EOF
chmod 664 /etc/systemd/system/one-dhclient.service
# Disable auto-upgrade
systemctl disable unattended-upgrades
systemctl disable apt-daily
systemctl disable apt-daily.timer
systemctl disable apt-daily-upgrade
# Cleanup
rm -f "${ONE_CONTEXT_PACKAGE_DEST}"
apt-get -y clean
# Force sync
sync

View File

@ -0,0 +1,174 @@
### Preseed for Ubuntu 18.04
# Derived from: https://help.ubuntu.com/lts/installation-guide/example-preseed.txt
### Compatibility
# Tested with the netboot image:
# http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
# Might work with the regular image (not tested):
# http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-amd64.iso
### Authentication
# We recommend to use public key authentication and therefore disabled the root
# password. The build-iso.sh script will do all the hard work for you.
#
# In case you still want to use password authentication, you need to set the
# passwd/root-password-crypted variable. See below for further instructions.
### Usage
# We recommend to use the build-iso.sh script to build an image with embedded
# preseed and other required files. In that case the preseed file gets loaded
# automatically and all additional files are available to the installer.
#
# In case you want to use a vanilla ISO image, please use the following boot
# instructions to load the preseed file (press ESC and enter in boot prompt):
#
# install auto=true priority=critical url=https://raw.githubusercontent.com/core-process/linux-unattended-installation/master/ubuntu/18.04/custom/preseed.cfg
#
# Note: you will need to adjust the "preseed/late_command" variable to match
# your environment in case you do not use the build-iso.sh script.
### Unattended Installation
d-i auto-install/enable boolean true
d-i debconf/priority select critical
### Localization
d-i debian-installer/locale string fr_FR.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8, fr_FR.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select fr
### Network configuration
d-i netcfg/choose_interface select auto
d-i netcfg/hostname string ubt2004
d-i netcfg/get_hostname string ubt2004
d-i netcfg/get_domain string cadol.es
d-i hw-detect/load_firmware boolean true
### Mirror settings
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
### Account setup
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password $1$41q22ku0$lM57h3xPuGwoiBHD4Neqg.
d-i passwd/make-user boolean false
# The root password is disabled by default. In case you want to use a root
# password, please generate a password with the following command
# printf "please-change-password" | mkpasswd -s -m sha-512
# and update the passwd/root-password-crypted variable accordingly. Furthermore
# you need to remove the call to "usermod" below.
### Normal account setup
d-i passwd/user-fullname string Cadoles User
d-i passwd/username string cadoles
d-i passwd/user-password-crypted password $1$41q22ku0$lM57h3xPuGwoiBHD4Neqg.
d-i passwd/user-uid string 1000
d-i passwd/user-default-groups string wheel
### Clock and time zone setup
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
### Partitioning
d-i preseed/early_command string umount /media || true
d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string main
d-i partman-md/device_remove_md boolean true
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-basicmethods/method_only boolean false
### GPT
d-i partman-basicfilesystems/choose_label string gpt
d-i partman-basicfilesystems/default_label string gpt
d-i partman-partitioning/choose_label string gpt
d-i partman-partitioning/default_label string gpt
d-i partman/choose_label string gpt
d-i partman/default_label string gpt
### EFI
d-i partman-efi/non_efi_system boolean true
### Grub
d-i grub-installer/bootdev string /dev/vda
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
### Disk layout
# Use entire disk
d-i partman-auto/expert_recipe string \
boot-root :: \
1 1 1 free \
$bios_boot{ } \
method{ biosgrub } \
. \
256 256 256 fat32 \
$primary{ } \
$iflabel{ gpt } \
$reusemethod{ } \
method{ efi } format{ } \
mountpoint{ /boot/efi } \
. \
512 512 512 ext4 \
$primary{ } \
$bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /boot } \
. \
1024 102400000 1000000000 ext4 \
$lvmok{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
lv_name{ root } \
. \
200% 200% 200% linux-swap \
$lvmok{ } \
method{ swap } format{ } \
lv_name{ swap } \
.
### Base system installation
d-i base-installer/install-recommends boolean true
d-i base-installer/kernel/image string linux-generic
### Apt setup
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
d-i apt-setup/backports boolean true
d-i apt-setup/use_mirror boolean false
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.ubuntu.com
d-i apt-setup/security_path string /ubuntu
### Package selection
d-i tasksel/first multiselect none
d-i pkgsel/include string openssh-server python
d-i pkgsel/upgrade select full-upgrade
d-i pkgsel/update-policy select unattended-upgrades
### Finishing up the installation
d-i preseed/late_command string \
in-target sh -c "sed -i '/PermitRootLogin/c PermitRootLogin yes' /etc/ssh/sshd_config"; \
in-target sh -c 'echo "IPv4: \\\4" >> /etc/issue && echo "IPv6: \\\6" >> /etc/issue && echo "" >> /etc/issue';
d-i debian-installer/splash boolean false
d-i cdrom-detect/eject boolean true
### Shutdown machine
d-i finish-install/reboot_in_progress note

View File

@ -0,0 +1,72 @@
{
"variables": {
"HTTP_PROXY": "{{ env `HTTP_PROXY` }}",
"HTTPS_PROXY": "{{ env `HTTPS_PROXY` }}",
"http_proxy": "{{ env `http_proxy` }}",
"https_proxy": "{{ env `https_proxy` }}",
"packer_images_output_dir": "{{ template_dir }}/../../../images/ubuntu/20.04",
"provisionning_dir": "{{ template_dir }}/../../../provisioning",
"cpus": "2",
"memory": "4096",
"ubuntu_codename": "focal",
"ubuntu_version": "20.04",
"ubuntu_mirror": "http://archive.ubuntu.com/ubuntu/dists/",
"ssh_username": "root",
"ssh_password": "cadoles",
"preseed_file_name": "preseed-minimal.cfg",
"disk_size": "10240",
"headless": "true",
"vm_name": "ubuntu-{{ user `ubuntu_version` }}"
},
"builders":
[
{
"name": "{{ user `vm_name` }}",
"vm_name": "{{ user `vm_name` }}.img",
"type": "qemu",
"iso_checksum": "file:{{ user `ubuntu_mirror` }}{{ user `ubuntu_codename` }}-updates/main/installer-amd64/current/legacy-images/SHA256SUMS",
"iso_urls": [ "{{ user `ubuntu_mirror` }}{{ user `ubuntu_codename` }}-updates/main/installer-amd64/current/legacy-images/netboot/mini.iso" ],
"ssh_username": "{{ user `ssh_username` }}",
"ssh_password": "{{ user `ssh_password` }}",
"ssh_wait_timeout": "60m",
"headless": "{{ user `headless` }}",
"output_directory": "{{ template_dir }}/../../../images/ubuntu/20.04",
"accelerator": "kvm",
"cpus": "{{ user `cpus` }}",
"memory": "{{user `memory`}}",
"boot_wait": "5s",
"boot_command":
[
"<tab>",
"url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{ user `preseed_file_name` }} ",
"auto=true ",
"language=fr ",
"country=FR ",
"locale=fr_FR.UTF-8 ",
"method=fr ",
"net.ifnames=0 ",
"hostname={{user `vm_name` }} ",
"<enter>"
],
"disk_size": "{{ user `disk_size` }}",
"disk_additional_size": [ "10G", "20G", "30G", "40G", "50G", "60G" ],
"http_directory": "{{template_dir}}/http"
}
],
"provisioners": [
{
"type": "shell",
"scripts": [
"{{ user `provisionning_dir` }}/ubuntu/{{ user `ubuntu_version` }}/provision-minimal.sh"
],
"environment_vars": [
"VM_NAME={{user `vm_name`}}",
"HTTP_PROXY={{user `HTTP_PROXY`}}",
"HTTPS_PROXY={{user `HTTPS_PROXY`}}",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}"
]
}
]
}

View File

@ -0,0 +1,57 @@
#!/bin/bash -e
set -xeo pipefail
# For SHASUM
apt-get -y install perl ifupdown
# Download OpenNebula context package
ONE_CONTEXT_VERSION=5.8.0
ONE_CONTEXT_BUILD_SUFFIX=-1
ONE_CONTEXT_SHASUM=cfcc8aa2e51396935e8d2a507f996838201515b5
ONE_CONTEXT_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v${ONE_CONTEXT_VERSION}/one-context_${ONE_CONTEXT_VERSION}${ONE_CONTEXT_BUILD_SUFFIX}.deb"
ONE_CONTEXT_PACKAGE_DEST=/tmp/one-context.deb
wget -O- "${ONE_CONTEXT_URL}" > "${ONE_CONTEXT_PACKAGE_DEST}"
echo "${ONE_CONTEXT_SHASUM} ${ONE_CONTEXT_PACKAGE_DEST}" | shasum -c
# Purge cloud-init
apt-get purge -y cloud-init perl
# Install onecontext
dpkg -i "${ONE_CONTEXT_PACKAGE_DEST}" || apt-get install -fy
# Update hostname
hostnamectl set-hostname "${VM_NAME}"
# Disable root login with password
# sed -i 's/^PermitRootLogin.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
# Run dhclient on one-context service failure
mkdir -p /etc/systemd/system/one-context.service.d
cat > /etc/systemd/system/one-context.service.d/dhclient-on-fail.conf <<EOF
[Unit]
OnFailure=one-dhclient.service
EOF
cat > /etc/systemd/system/one-dhclient.service <<EOF
[Unit]
Description=Execute dhclient
[Service]
ExecStart=/sbin/dhclient
EOF
chmod 664 /etc/systemd/system/one-dhclient.service
# Disable auto-upgrade
systemctl disable unattended-upgrades
systemctl disable apt-daily
systemctl disable apt-daily.timer
systemctl disable apt-daily-upgrade
# Cleanup
rm -f "${ONE_CONTEXT_PACKAGE_DEST}"
apt-get -y clean
# Force sync
sync

31
packer/script/build Executable file
View File

@ -0,0 +1,31 @@
#!/usr/bin/env bash
set -eo pipefail
PACKER_TEMPLATE=$1
shift
if [ -f '.env' ]; then
set -a
source .env
set +a
fi
export PACKER_KEY_INTERVAL=10ms
export PATH="$PATH:.bin"
function usage {
cat<<EOF
Usage: $0 </chemin/vers/template/packer>
Construit l'image correspondante au template Packer donné
EOF
exit 1
}
[ -z "${PACKER_TEMPLATE}" ] && usage
# Validate template
packer validate ${PACKER_TEMPLATE}
[[ $? -ne 0 ]] && exit 123
packer build $@ ${PACKER_TEMPLATE}

9
packer/script/clean Executable file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -eo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
rm -rf "${DIR}/../images"
rm -rf "${DIR}/../.bin"
rm -rf "${DIR}/../packer_cache"

37
packer/script/install Executable file
View File

@ -0,0 +1,37 @@
#!/usr/bin/env bash
#set -eo pipefail
set -o pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
sparsify=$(which virt-sparsify)
if [ $? -ne 0 ]
then
echo "!!!"
echo "!!! Warning : virt-sparsify is not present, you may encounter build issues with cadoles recipes !"
echo "!!! Please install libguestfs if you want to build cadoles production images"
echo "!!!"
fi
# Install a local copy of packer
PACKER_VERSION=1.6.6
PACKER_ARCH=amd64
#PACKER_ARCHIVE_SHA256SUM=30da8dab9c526a6d15b037e2234f6f12cf3accfad77eb2c130738ec1a54cab6d
#PACKER_ARCHIVE_SHA256SUM=a678c995cb8dc232db3353881723793da5acc15857a807d96c52e96e671309d9
PACKER_ARCHIVE_SHA256SUM=721d119fd70e38d6f2b4ccd8a39daf6b4d36bf5f7640036acafcaaa967b00c3b
wget -O- https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_${PACKER_ARCH}.zip > packer.zip
echo "${PACKER_ARCHIVE_SHA256SUM} packer.zip" | sha256sum -c
mkdir -p "${DIR}/../.bin"
unzip -o -d "${DIR}/../.bin" packer.zip
rm -f packer.zip
# Cadoles Packer plugins
# OpenNebula - Post-Processor Image Template
PLUGIN_ARCHIVE=https://forge.cadoles.com/Cadoles/packer-opennebula/releases/download/4fa5cbc782/packer-post-processor-opennebula-image-template-rev.4fa5cbc-linux-amd64.tar.gz
wget -O- "$PLUGIN_ARCHIVE" > plugin.tar.gz
tar -C "$DIR/../.bin" --strip=1 --wildcards -xzf plugin.tar.gz --wildcards packer-*/packer-post-processor-opennebula-image-template
rm -f plugin.tar.gz

131
packer/script/onepublish Executable file
View File

@ -0,0 +1,131 @@
#!/bin/bash
#
# Publish builed images to OpenNebula
# Based on the work of "Julien Marchetti" from here : https://dev-eole.ac-dijon.fr/projects/packer/repository
#
set -eo pipefail
function help ()
{
cat <<EO
Usage : ${0} [options]
Add images to OpenNebula (market or datastore) using XMLRPC.
Options:
EO
cat <<EO | column -s\& -t
-h & print help message
-u [user] & user with correct privileges to push images into OpenNebula or OpenNebula market
-U [url] & URL du service XMLRPC OpenNebula (http://127.0.0.1:2633/RPC2)
-n [name] & Name for the image
-p [path] & Path of the image to upload
-t [type] & Image type (OS,CDROM)
-d [id|name] & Datastore id or name
-m [id|name] & Market id or name
-M [mode] & Tell the script what to do (datastore,market,all)
datastore: publish only in the datastore
market: publish only in the market
all: publish in datastore and in market
EO
}
function errorMsg(){
echo
echo "ERROR: $1"
echo
[[ -n ${3} ]] && help
exit $2
}
#
# Publish an image to the datastore
#
function datastorePush()
{
[[ -z ${datastore} ]] && errorMsg "You must specify a datastore id" 3 "help"
local cmd="oneimage"
local act="create"
local opt="--name ${name}"
opt="${opt} --path ${path}"
opt="${opt} --type ${itype}"
[[ -n ${user} ]] && opt="${opt} --user '${user}'"
opt="${opt} --driver ${driver}"
opt="${opt} --prefix ${prefix}"
opt="${opt} --endpoint ${url}"
opt="${opt} -d ${datastore}"
opt="${opt} -v"
${cmd} ${act} ${opt} --description "${desc}"
return ${?}
}
function marketPush()
{
[[ -z ${datastore} ]] && errorMsg "You must specify a datastore id" 3 "help"
[[ -z ${market} ]] && errorMsg "You must specify a market id" 3 "help"
ENDING=${1}
cmd="onemarketapp"
action="create"
file=$(mktemp)
datastorePush
echo "TEMPLATE" >> ${file}
echo ${cmd} ${action} ${file}
rm ${file}
if [[ ${ENDING} == "CLEAN" ]]
then
echo "MUST CLEAN IMAGE FROM DATASTORE"
fi
return 0
}
[ $# -eq 0 ] && help && exit 1
while getopts ":hU:u:n:D:p:t:P:d:m:M:" opt; do
case $opt in
U) url="${OPTARG}" >&2 ;;
u) user="${OPTARG}" >&2 ;;
n) name="${OPTARG}" >&2 ;;
D) desc="${OPTARG}" >&2 ;;
p) path="${OPTARG}" >&2 ;;
t) itype="${OPTARG}" >&2 ;;
P) prefix="${OPTARG}" >&2 ;;
d) datastore="${OPTARG}" >&2 ;;
m) market="${OPTARG}" >&2 ;;
M) mode="${OPTARG}" >&2 ;;
\?)
echo "Invalid option : -'${OPTARG}'" >&2
help
;;
h) help ; exit >&2 ;;
esac
done
[[ -z ${mode} ]] && errorMsg "Missing option -M" 2 "help"
[[ -z ${path} ]] && errorMsg "Missing option -p" 2 "help"
[[ -z ${name} ]] && name=$(basename ${path})
[[ -z ${desc} ]] && desc="Image ${name} ..."
[[ -z ${itype} ]] && itype="OS"
[[ -z ${prefix} ]] && prefix="vd"
[[ -z ${driver} ]] && driver="qcow2"
[[ -z ${url} ]] && url="http://127.0.0.1:2633/XMLRPC2"
case ${mode} in
all)
marketPush "KEEP"
;;
datastore) datastorePush ;;
market)
marketPush "CLEAN" ;;
esac

55
packer/script/run Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -eo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
ORIG_DISK_IMAGE=$1
function usage {
cat<<EOF
Usage: $0 </chemin/vers/image_disque>
Éxecute l'image disque donnée avec Qemu
EOF
exit 1
}
function find_available_port {
read lower_port upper_port < /proc/sys/net/ipv4/ip_local_port_range
while :; do
for (( port = lower_port ; port <= upper_port ; port++ )); do
(echo > /dev/tcp/0.0.0.0/$port) 2>/dev/null >/dev/null
if [ $? -ne 0 ]; then
echo $port
return
fi
done
done
}
[ -z "$ORIG_DISK_IMAGE" ] && usage
DISK_IMAGE_DIR="$DIR/../.run/$(dirname $ORIG_DISK_IMAGE)"
ORIG_DISK_IMAGE=$(readlink -f "$ORIG_DISK_IMAGE")
DISK_IMAGE_NAME=$(date -r "$ORIG_DISK_IMAGE" | shasum - | cut -f1 -d ' ').img
DISK_IMAGE="$DISK_IMAGE_DIR/$DISK_IMAGE_NAME"
if [ -f "$DISK_IMAGE" ]; then
echo "Using existing qcow2 image '$DISK_IMAGE'..."
else
mkdir -p "$(dirname $DISK_IMAGE)"
rm -f "$DISK_IMAGE_DIR"/*.img
cd "$(dirname $DISK_IMAGE)"
echo "Generating qcow2 image '$DISK_IMAGE'..."
qemu-img create -f qcow2 -b "$ORIG_DISK_IMAGE" "$(basename $DISK_IMAGE)"
cd -
fi
SSH_PORT=$(find_available_port)
echo "Starting VM... SSH will be available on '127.0.0.1:${SSH_PORT}'"
qemu-system-x86_64 -boot once=d \
-device virtio-net,netdev=user.0 \
-m 1024M -machine type=pc,accel=kvm \
-display sdl \
-hda "${DISK_IMAGE}" \
-netdev user,id=user.0,hostfwd=tcp::${SSH_PORT}-:22

27
packer/targets/alpine.mk Normal file
View File

@ -0,0 +1,27 @@
# Images Alpine
ALPINE_DEPS=images/alpine/3.10/alpine-virt/alpine-virt-3.10.img images/alpine/3.12/alpine-virt/alpine-virt-3.12.img
build: alpine
deploy: deploy-alpine
alpine: $(ALPINE_DEPS)
deploy-alpine: deploy-alpine-virt
deploy-alpine-virt: deploy-alpine-virt-3.10 deploy-alpine-virt-3.12
images/alpine/3.10/alpine-virt/alpine-virt-3.10.img:
rm -rf images/alpine/3.10/alpine-virt
script/build recipes/alpine/3.10/virt.json
images/alpine/3.12/alpine-virt/alpine-virt-3.12.img:
rm -rf images/alpine/3.12/alpine-virt
script/build recipes/alpine/3.12/virt.json
deploy-alpine-virt-3.10:
IMAGE_NAME=alpine-virt-3.10 \
IMAGE_HTTP_PATH=alpine/3.10/alpine-virt/alpine-virt-3.10.img \
script/build recipes/deploy.json
deploy-alpine-virt-3.12: images/alpine/3.12/alpine-virt/alpine-virt-3.12.img
IMAGE_NAME=alpine-virt-3.12 \
IMAGE_HTTP_PATH=alpine/3.12/alpine-virt/alpine-virt-3.12.img \
script/build recipes/deploy.json

View File

@ -0,0 +1,54 @@
# Images EOLE 2.7.2
EOLE_2.7.2_DEPS=images/eole/2.7.2/eolebase/eolebase-2.7.2.img
AMON_2.7.2_DEPS=images/eole/2.7.2/amon/amon-2.7.2.img
SETH_2.7.2_DEPS=images/eole/2.7.2/seth/seth-2.7.2.img
MINIO_2.7.2_DEPS=images/eole/2.7.2/minio/minio-2.7.2.img
LEMON_2.7.2_DEPS=images/eole/2.7.2/lemonldap/lemonldap-2.7.2.img
TENJIN_2.7.2_DEPS=images/eole/2.7.2/tenjin/tenjin-2.7.2.img
ZEPHIR_2.7.2_DEPS=images/eole/2.7.2/zephir/zephir-2.7.2.img
UBUNTU=images/ubuntu/18.04/ubuntu-18.04.img
EOLEBASE272=images/eole/2.7.2/eolebase/eolebase-2.7.2.img
build: eole-2.7.2
eole-2.7.2: $(EOLE_2.7.2_DEPS)
amon-2.7.2: $(AMON_2.7.2_DEPS)
seth-2.7.2: $(SETH_2.7.2_DEPS)
minio-2.7.2: $(MINIO_2.7.2_DEPS)
lemonldap-2.7.2: $(LEMON_2.7.2_DEPS)
tenjin-2.7.2: $(TENJIN_2.7.2_DEPS)
zephir-2.7.2: $(ZEPHIR_2.7.2_DEPS)
images/eole/2.7.2/eolebase/eolebase-2.7.2.img: $(UBUNTU)
rm -rf images/eole/2.7.2/eolebase
script/build recipes/eole/2.7.2/eolebase.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/amon/amon-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/amon
script/build recipes/eole/2.7.2/amon.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/seth/seth-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/seth
script/build recipes/eole/2.7.2/seth.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/minio/minio-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/minio
script/build recipes/eole/2.7.2/minio.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/lemonldap/lemonldap-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/lemonldap
script/build recipes/eole/2.7.2/lemonldap.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/tenjin/tenjin-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/tenjin
script/build recipes/eole/2.7.2/tenjin.json ${BUILD_OPTS} ${BUILD_OPT}
images/eole/2.7.2/zephir/zephir-2.7.2.img: $(EOLEBASE272)
rm -rf images/eole/2.7.2/zephir
script/build recipes/eole/2.7.2/zephir.json ${BUILD_OPTS} ${BUILD_OPT}

47
packer/targets/infra.mk Normal file
View File

@ -0,0 +1,47 @@
DOMAIN ?= cadoles.com
OUTPUT_DIR = images/infra/$(DOMAIN)/production
SYSDIR = $(OUTPUT_DIR)/$*.$(DOMAIN)/system
DATADIR = $(OUTPUT_DIR)/$*.$(DOMAIN)/data
SYSSIZE ?= 10240
DATASIZE ?= 20480
EOLEBASE = images/eole/2.7.2/eolebase/eolebase-2.7.2.img
SETHBASE = images/eole/2.7.2/seth/seth-2.7.2.img
AMONBASE = images/eole/2.7.2/amon/amon-2.7.2.img
PSOURCE ?= ./images/infra/$(DOMAIN)/production
PUBDIR ?= /var/www/html/market/master/ber/
PROVDIR ?= ./recipes/provisioning/infra
build: infra
infra: dns.$(DOMAIN).img \
amon.$(DOMAIN).img \
dc.$(DOMAIN).img \
sso.$(DOMAIN).img \
ninegate.$(DOMAIN).img \
limesurvey.$(DOMAIN).img \
dokuwiki.$(DOMAIN).img \
dolibarr.$(DOMAIN).img \
nextcloud.$(DOMAIN).img \
nineboard.$(DOMAIN).img \
piwigo.$(DOMAIN).img \
syspass.$(DOMAIN).img \
jorani.$(DOMAIN).img
%.$(DOMAIN): %.$(DOMAIN).img
@echo Building : $*
%.$(DOMAIN).img: $(EOLEBASE) $(SETHBASE) $(AMONBASE)
@rm -rf $(SYSDIR)
@mkdir -p $(PROVDIR)/$*.$(DOMAIN)/eole-db
VM_NAME=$*.$(DOMAIN) DOMAIN=$(DOMAIN) SYS_DISK_SIZE=$(SYSSIZE) \
script/build recipes/infra/$(DOMAIN)/production/$*.json ${BUILD_OPTS} ${BUILD_OPT}
%.$(DOMAIN)-publish:
@echo cp -r $(PSOURCE)/$*.$(DOMAIN) $(PUBDIR)production/
@cp -r $(PSOURCE)/$*.$(DOMAIN) $(PUBDIR)production/
ber-publish:
@echo cp -r $(PSOURCE) $(PUBDIR)
@cp -r $(PSOURCE) $(PUBDIR)

View File

@ -0,0 +1,34 @@
SDOMAIN = services
SOUTPUT_DIR = images/services
SSYSSIZE ?= 10240
SEOLEBASE = images/eole/2.7.2/eolebase/eolebase-2.7.2.img
SALPINEBASE = images/alpine/3.12/alpine-virt/alpine-virt-3.12.img
SPUBUSER ?= root
SPSERVER ?= hephy.service
SPSOURCE ?= ./images/cadoles/services
SPUBDIR ?= /var/www/html/market/master/cadoles/
SPROVDIR ?= ./recipes/cadoles/production/provisioning
build: services
deploy: deploy-services
services: bitwarden.services.img
%.$(SDOMAIN): %.services.img
@echo Building : $*
%.$(SDOMAIN).img: $(SEOLEBASE) $(SALPINEBASE)
@rm -rf $(SOUTPUT_DIR)
VM_NAME=$*.$(SDOMAIN) SYS_DISK_SIZE=$(SSYSSIZE) \
script/build recipes/services/$*.json ${BUILD_OPTS} ${BUILD_OPT}
%.$(SDOMAIN)-publish:
@echo scp -r $(SPSOURCE)/$*.$(SDOMAIN) $(SPUBUSER)@$(SPSERVER):$(SPUBDIR)production/
@scp -r $(SPSOURCE)/$*.$(SDOMAIN) $(SPUBUSER)@$(SPSERVER):$(SPUBDIR)production/
services-publish:
@echo scp -r $(SPSOURCE) $(SPUBUSER)@$(SPSERVER):$(PUBDIR)
@scp -r $(SPSOURCE) $(SPUBUSER)@$(SPSERVER):$(SPUBDIR)

15
packer/targets/ubuntu.mk Normal file
View File

@ -0,0 +1,15 @@
# Images Ubuntu
UBUNTU_DEPS=images/ubuntu/20.04/ubuntu-20.04.img images/ubuntu/18.04/ubuntu-18.04.img
build: ubuntu
deploy: deploy-ubuntu
ubuntu: $(UBUNTU_DEPS)
images/ubuntu/20.04/ubuntu-20.04.img:
rm -rf images/ubuntu/20.04
script/build recipes/ubuntu/20.04/packer.json
images/ubuntu/18.04/ubuntu-18.04.img:
rm -rf images/ubuntu/18.04
script/build recipes/ubuntu/18.04/packer.json