Задача: Настроить установку по сети где система (Lubuntu 18.04 Desktop amd64) устанавливается на зашифрованный диск и все это через подготовленный seed файл применяя FOG Project

Что понадобиться для реализации задуманного:

1) Развернутый в сети сервис FOG Project / «Как установить FOG на Ubuntu 18.04»

2) Ознакомиться с заметкой «Меню загрузки Ubuntu 18.04 Server в FOG Management» из нее будут взяты часть настроек.

3) В роли тестовой машины выступит VM созданная на тестовом полигоне базирующемся связки Debian 10 + Proxmox 6: «Как установить proxmox on Debian 10»

4) А еще по желанию, дабы каждый раз не качать deb пакеты из сети интернет я использую развернутый сервис apt-cacher-ng («Кэширования пакетов apt-cacher-ng на Ubuntu Bionic»), по сути это аналог WSUS, но для Linux систем. У меня он обслуживается: CentOS, Debian, Ubuntu системы.

Шаг №1: Я со своего рабочего места под управлением Ubuntu 18.04 Desktop amd64 ноутбука Lenovo E555 подключаюсь к VM на которой в моей домашней сети работает сервис FOG Project. У меня по короткому имени настроен алиас на подключение:

ekzorchik@navy:~$ nano ~/.bashrc

alias srv-fog='sshpass -p 712mbddr@ ssh -o "StrictHostKeyChecking no" ekzorchik@172.35.35.7 -p 22'

ekzorchik@navy:~$ source ~/.bashrc

ekzorchik@navy:~$ srv-fog

ekzorchik@srv-fog:~$

Шаг №2: Создаю файл ответов установки системы Ubuntu 18.04 Lubuntu Desktop где система устанавливается на зашифрованный диск:

ekzorchik@srv-fog:~$ sudo cp /var/www/fog/ubuntu/bionic/desktop/lubuntu.seed /var/www/fog/ubuntu/bionic/desktop/lubuntuluks.seed
ekzorchik@srv-fog:~$ sudo nano /var/www/fog/ubuntu/bionic/desktop/lubuntuluks.seed
#Install LUbuntu 18.04 Desktop + LUKS + LVM + Script Configure
d-i auto-install/enable boolean true
d-i debconf/priority string critical
d-i pkgsel/update-policy select none
d-i debian-installer/locale string en_US
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us
d-i keyboard-configuration/layoutcode string us
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string srv-dbionic
d-i mirror/country string manual
d-i mirror/http/hostname string us.archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string http://172.35.35.8:3142
d-i passwd/user-fullname string ekzorchik
d-i passwd/username string ekzorchik
d-i passwd/user-password password 712mbddr@
d-i passwd/user-password-again password 712mbddr@
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ru.pool.ntp.org
d-i partman-auto/init_automatically_partition select biggest_free
d-i partman-auto/disk string /dev/sda /dev/vda
d-i partman-auto/method string crypto
d-i partman-crypto/passphrase password 712mbddr@
d-i partman-crypto/passphrase-again password 712mbddr@
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/guided_size string 90%

d-i partman-auto-lvm/new_vg_name string crypt
d-i partman-auto/choose_recipe select root-encrypted
d-i partman-auto/expert_recipe string                         \
      root-encrypted ::                                       \
              500 500 500 ext3                                \
                      $primary{ } $bootable{ }                \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ /boot }                     \
              .                                               \
              2000 2000 2000 linux-swap                       \
                      $lvmok{ } lv_name{ swap }               \
                      in_vg { crypt }                         \
                      $primary{ }                             \
                      method{ swap } format{ }                \
              .                                               \
              51200 51200 51200 ext4			      \
                      $lvmok{ } lv_name{ root }               \
                      in_vg { crypt }                         \
                      $primary{ }                             \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ / }                         \
              .                                               \
              2000 2000 2000 ext4                             \
                      $primary{ }                             \
                      method{ keep }                          \
                      use_filesystem{ } filesystem{ ext4 }    \
                      label{ rescuedisk }                     \
              .

d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
tasksel tasksel/first multiselect lubuntu-desktop openssh-server
d-i pkgsel/include string ca-certificates openssh-server
d-i pkgsel/upgrade select full-upgrade
d-i pkgsel/update-policy select unattended-upgrades
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i debian-installer/add-kernel-opts string net.ifnames=0
d-i finish-install/reboot_in_progress note
d-i preseed/late_command string in-target apt-install -y wget tmux mercurial vim lvm2 net-tools openssh-server gcc mail perl sshpass
d-i preseed/late_command string in-target wget --no-proxy http://172.35.35.7/fog/ubuntu/bionic/desktop/dproject -O /tmp/dproject.sh; in-target chmod +x /tmp/dproject.sh; in-target /bin/bash /tmp/dproject.sh;

Шаг №3: Создаю iPXE меню в FOG Project:

http://IP&DNS/fog — FOG Configuration — iPXE New Menu Entry

  • Menu Item: Lubuntu 18.04 Desktop Luks
  • Description: Lubuntu 18.04 Desktop Luks
  • Parameters:
kernel tftp://${fog-ip}/os/ubuntu/desktop/18.04/linux
initrd tftp://${fog-ip}/os/ubuntu/desktop/18.04/initrd.gz
imgargs linux initrd=initrd.gz root=/dev/nfs netboot=nfs nfsroot=${fog-ip}:/images/os/ubuntu/desktop/18.04/ locale=en_US.UTF-8 keyboard-configuration/layoutcode=us hostname=srv-dbionic localechooser/supported-locales=en_US.UTF-8 url=http://172.35.35.7/fog/ubuntu/bionic/desktop/lubuntuluks.seed quiet splash ip=dhcp rw
boot || goto MENU
  • Menu Show with: All Hosts

и нажимаю Save Changes

моя структура вида /os/ubuntu/desktop и т.д указанная в Parameters берет свое начало в заметке «Меню загрузки Ubuntu 18.04 Server в FOG Management»

Шаг №4: Создаю контейнер VM на тестовом полигоне с использованием гипервизора Debian 10 + Proxmox 6: CPU = 1, HDD = 50Gb, RAM = 2Gb

и выставляю что первым грузиться по сети:

https://IP&DNS:8006 — user&pass — (Folder View) Datacenter — Virtual Machine — ID: 119 (srv-lubuntu-luks) — Options — Boot Order — Edit

  • Boot device 1: Network
  • Boot device 2: Disk "virtio0"
  • Boot device 3: CD-ROM

и нажимаю OK. Запускаю VM

Шаг №5: Когда передо мной предстает FOG Menu выбираю "Lubuntu 18.04 Desktop Luks" и установка начинается.

Шаг №6: Проверяю, как выглядит система установленная с помощью предопределенного файла lubuntuluks.seed

https://IP&DNS:8006 — user&pass — (Folder View) Datacenter — Virtual Machine — ID: 113 (USLuks) - ">_Console"

Сперва черный экран

Нажимаю клавишу Esc

Вижу запрос

Запрос на расшифровку при загрузке

Please unlock disk sda5_crypt ввожу пароль который я предопределил в lubuntuluks.seed — в рамках этой заметки это 712mbddr@ и нажимаю клавишу Enter

и вот приветствие на авторизацию в самой системе

После последующая авторизация в Lubuntu 18.04 Desktop

После того, как авторизовался в системе, проверяю что есть в файле /etc/fstab:

ekzorchik@srv-dbionic:~$ cat /etc/fstab | grep -v "^#"

/dev/mapper/crypt-root / ext4 errors=remount-ro 0 1

UUID=8f917c8c-8c05-4c2c-a33f-6d0ece3c10c7 /boot ext4 defaults 0 2

/dev/mapper/crypt-swap_1 none swap sw 0 0

ekzorchik@srv-dbionic:~$

ekzorchik@srv-dbionic:~$ sudo pvs

PV VG Fmt Attr PSize PFree

/dev/mapper/vda5_crypt crypt lvm2 a-- <49.28g <4.93g

ekzorchik@srv-dbionic:~$ sudo lvs

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

root crypt -wi-ao---- 43.39g

swap_1 crypt -wi-ao---- 976.00m

ekzorchik@srv-dbionic:~$

На этом у меня всё, Я разобрал в шагах от и до, как сделать чтобы система была защищена от простого переноса жесткого диска в другой системный блок путем шифрования. Если при включении системы не указать пароль доступа к ней не получить. С уважением автор Олло Александр aka ekzorchik.