Adding self installation command for fabrica

This commit is contained in:
2021-03-23 10:47:39 +01:00
parent 740a8de4a2
commit b360760855
120 changed files with 301 additions and 164 deletions

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,71 @@
{
"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` }}",
"vnc_bind_address": "0.0.0.0",
"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,59 @@
#!/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
apt-get install -y qemu-guest-agent
# 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