Сейчас я свой сервис FOG Project
на машине где у меня также развернут сервис apt-cacher-ng
сделаю меню автоматизированной установки нужного мне дистрибутива — а именно Ubuntu 18.04 Server
+ файл ответов и добавлю в него скрипт подготовки системы к дальнейшему использованию. В моем случае это экономия времени во время тестов и последующего боевого использования.
Текущая система:
srv-cache
OS: Ubuntu 18.04 Server
Services: FOG Project, apt-cacher-ng
Шаг №1:
Обновленная
установка FOG Project on Ubuntu 18.04 Server
Шаг №2:
Т.к. пакет tftpd-hpa
установлен шагов выше, то произвожу изменения в конфигурационном файле и месторасположению:
ekzorchik@srv-cache:~$ dpkg -l | grep tftpd-hpa ii tftpd-hpa 5.2+20150808-1ubuntu3 amd64 HPA's tftp server ekzorchik@srv-cache:~$ ekzorchik@srv-cache:~$ sudo mkdir /tftpboot ekzorchik@srv-cache:~$ sudo chmod -R 777 /tftpboot/ ekzorchik@srv-cache:~$ sudo chown -R nobody:nogroup /tftpboot/ ekzorchik@srv-cache:~$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup ekzorchik@srv-cache:~$ sudo nano /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure --create --verbose" ekzorchik@srv-cache:~$ sudo systemctl restart tftpd-hpa.service ekzorchik@srv-cache:~$ sudo netstat -tulpn | grep tftp udp 0 0 0.0.0.0:69 0.0.0.0:* 8145/in.tftpd udp6 0 0 :::69 :::* 8145/in.tftpd ekzorchik@srv-cache:~$
Шаг №3:
Создаю структуру каталогов для iPXE Menu: OS.Ubuntu 18.04.6 Server:
ekzorchik@srv-cache:~$ wget http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04.6-server-amd64.iso ekzorchik@srv-cache:~$ sudo mkdir -p /images/os/ubuntu/server/18.04 ekzorchik@srv-cache:~$ sudo mkdir -p /tftpboot/os/ubuntu/server/18.04 ekzorchik@srv-cache:~$ sudo mount -o loop -t iso9660 /home/ekzorchik/ubuntu-18.04.6-server-amd64.iso /mnt mount: /mnt: WARNING: device write-protected, mounted read-only. ekzorchik@srv-cache:~$ ekzorchik@srv-cache:~$ sudo cp -R /mnt/* /images/os/ubuntu/server/18.04/ ekzorchik@srv-cache:~$ sudo umount /mnt ekzorchik@srv-cache:~$ rm ubuntu-18.04.6-server-amd64.iso ekzorchik@srv-cache:~$ sudo cp /images/os/ubuntu/server/18.04/install/vmlinuz /tftpboot/os/ubuntu/server/18.04/ ekzorchik@srv-cache:~$ sudo cp /images/os/ubuntu/server/18.04/install/netboot/ubuntu-installer/amd64/initrd.gz /tftpboot/os/ubuntu/server/18.04/ ekzorchik@srv-cache:~$
Шаг №4:
Корневая директория для Web
-сервиса — это /var/www/
, но FOG Management
использует /var/www/fog/
, а значит создаю структуру:
ekzorchik@srv-cache:~$ sudo a2dissite Your choices are: 001-fog Which site(s) do you want to disable (wildcards ok)? ekzorchik@srv-cache:~$ sudo apache2ctl -S | grep fog *:80 172.35.35.16 (/etc/apache2/sites-enabled/001-fog.conf:1) ekzorchik@srv-cache:~$ cat /etc/apache2/sites-enabled/001-fog.conf | grep Root DocumentRoot /var/www/ ekzorchik@srv-cache:~$ ekzorchik@srv-cache:~$ sudo mkdir -p /var/www/fog/ubuntu/bionic/server
файл server.seed
помещаю в каталог /var/www/fog/ubuntu/bionic/server
Содержимое server.seed
ekzorchik@srv-cache:~$ sudo nano /var/www/fog/ubuntu/bionic/server/server.seed #General configuration d-i auto-install/enable boolean true d-i debconf/priority string critical d-i pkgsel/update-policy select none #Localization d-i debian-installer/locale string en_US.UTF-8 d-i debian-installer/language string en d-i localechooser/supported-locales multiselect en_US.UTF-8, ru_RU.UTF8 d-i debian-installer/country string US #Keyboard d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us d-i console-setup/modelcode string SKIP d-i keyboard-configuration/xkb-keymap select us #Set physical link d-i netcfg/choose_interface select auto #The Debian release to install d-i mirror/country select US d-i mirror/http/mirror select us.archive.ubuntu.com # TODO: d-i mirror/http/proxy string http://HOST:3142/ d-i mirror/http/proxy string http://172.35.35.16:3142/ d-i mirror/suite string bionic # CLOCK / TIMEZONE 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 time.nist.gov #hostname d-i netcfg/get_hostname string srv-bionic #user setup d-i passwd/user-fullname string Ubuntu 18.04 test user 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 live-installer/enable boolean false #Partitioning d-i partman-auto/disk string /dev/sda /dev/vda d-i partman-auto/method string regular #d-i partman-auto/method string lvm #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 max #atomic -> all files in on partition #home -> separate /home partition #multi -> separate /home, /var, /tmp partitions d-i partman-auto/choose_recipe select atomic 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 #Software selection d-i tasksel/first multiselect standard d-i preseed/late_command string apt-install mc unzip tmux mercurial vim build-essential multipath-tools lsscsi lvm2 htop net-tools openssh-server qemu-guest-agent d-i finish-install/reboot_in_progress no ekzorchik@srv-cache:~$ sudo chown -R www-data:www-data /var/www/fog/ubuntu/
Шаг №5:
Проверяю, что обратившись к URL
адресу получаю файл ответов:
ekzorchik@srv-cache:~$ curl -vsSf http://172.35.35.16/fog/ubuntu/bionic/server/server.seed > /dev/null * Trying 172.35.35.16... * TCP_NODELAY set * Connected to 172.35.35.16 (172.35.35.16) port 80 (#0) > GET /fog/ubuntu/bionic/server/server.seed HTTP/1.1 > Host: 172.35.35.16 > User-Agent: curl/7.58.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Sat, 22 Jan 2022 16:01:55 GMT < Server: Apache/2.4.29 (Ubuntu) < Last-Modified: Sat, 22 Jan 2022 15:56:00 GMT < ETag: "8fa-5d62dc5910b85" < Accept-Ranges: bytes < Content-Length: 2298 < Connection: close < { [2298 bytes data] * Closing connection 0 ekzorchik@srv-cache:~$
Статус имеет код 200
и это означает что запрашиваемый URL
доступен, также можно просто скопировать URL
(http://172.35.35.16/fog/ubuntu/bionic/server/server.seed
) в другую вкладку и в ответ Вы должны получить содержимое файла ответов server.seed.
Шаг №6:
Создаю iPXE
меню возможности установки Ubuntu 18.04 Server
(дистрибутив: ubuntu-18.04.6-server-amd64.iso
)
http://172.35.35.16/fog/management/index.php
Авторизуюсь:
Username: fog
Password: password
Language: English
и нажимаю Login
, затем перехожу FOG Configuration — iPXE New Menu Entry -
Menu Item: OS: Ubuntu 18.04 Server
Description: Ubuntu 18.04 Server
Parameters: kernel tftp://${fog-ip}/os/ubuntu/server/18.04/vmlinuz
initrd tftp://${fog-ip}/os/ubuntu/server/18.04/initrd.gz
imgargs vmlinuz initrd=initrd.gz root=/dev/nfs netboot=nfs nfsroot=${fog-ip}:/images/os/ubuntu/server/18.04/ locale=en_US.UTF-8 keyboard-configuration/layoutcode=us hostname=srv-bionic url=http://${fog-ip}/fog/ubuntu/bionic/server/server.seed quiet splash ip=dhcp rw
boot || goto MENU
Menu Show with: All Hosts
и нажимаю Save Changes
Шаг №7:
Проверяю установку ОС
через PXE
загрузку, для этого создаю VM
на Proxmox 6
и выставляю что образ не используется (т.е. система не устанавливается через подмонтированный iso
образ)
и получаю ошибки вида:
Filename: undionly.kpxe
tftp://172.35.35.16/undionly.kpxe... No such file or directory
No more network devices
положил файл undionly.kpxe
в каталог /tftpboot
после
tftp://172.35.35.16/default.ipxe... No such file or directory
Chainloading failed, hit 's' for the iPXE shell; reboot in 10 seconds
В каталог /tftpboot
помещаю undionly.kpxe
и создаю меню установки, странно что дефолтное Web
-интерфейсное не задействуется, как было ранее в FOG Project 1.5.5:
ekzorchik@srv-cache:~$ sudo find / -name undionly.kpxe /opt/fog/packages/tftp/10secdelay/undionly.kpxe /opt/fog/packages/tftp/undionly.kpxe ekzorchik@srv-cache:~$ ekzorchik@srv-cache:~$ sudo cp /opt/fog/packages/tftp/undionly.kpxe /tftpboot/ ekzorchik@srv-cache:~$ cd /tftpboot/ ekzorchik@srv-cache:/tftpboot$ ln -s undionly.kpxe undionly.0
Шаг №8:
Создаю свое меню через создание файла default.ipxe:
ekzorchik@srv-cache:/tftpboot$ nano default.ipxe #!ipxe set fog-ip 172.35.35.16 ######## MAIN MENU ################### :start menu Welcome to iPXE's Boot Menu item item --gap -- ---------------- iPXE boot menu ---------------- item shell Enter iPXE shell item Ubuntu_18_04_Server Ubuntu 18.04 Server item reboot Reboot item config Config item exit Exit (boot local disk) choose --default return --timeout 15000 target && goto ${target} :shell echo Type exit to get the back to the menu shell set menu-timeout 0 goto start :reboot reboot :config config goto start :exit sanboot --no-describe --drive 0x80 exit #############MAIN MENU ITEMS############# :Ubuntu_18_04_Server kernel tftp://${fog-ip}/os/ubuntu/server/18.04/vmlinuz initrd tftp://${fog-ip}/os/ubuntu/server/18.04/initrd.gz imgargs vmlinuz initrd=initrd.gz root=/dev/nfs netboot=nfs nfsroot=${fog-ip}:/images/os/ubuntu/server/18.04/ locale=en_US.UTF-8 keyboard-configuration/layoutcode=us hostname=srv-bionic url=http://${fog-ip}/fog/ubuntu/bionic/server/server.seed quiet splash ip=dhcp rw boot goto start
После сохраняю внесенные изменения.
ekzorchik@srv-cache:/tftpboot$ cd ~ ekzorchik@srv-cache:~$
Перезапускаю виртуальную машину, выбираю в меню загрузки меню " Ubuntu_18_04_Server"
и установка начинается и с учетом что в качестве жесткого диска для виртуальной машины выбран M.2
диск (1000 ГБ SSD M.2 накопитель Kingston KC2500 [SKC2500M8/1000G]
) процесс довольно быстро завершается успешно. Операционная система Ubuntu 18.04.6
успешно установлена по сети и готова к использованию:
Подведу итоги, почему-то через FOG Project
меню загрузки не появилось, как я раньше использовал, а вместо этого я приобщаюсь к использованию конфигурационного файла описывающего поведение загрузки — default.ipxe
. Возможно это и к лучшему и смогу удалить сервис FOG Project
в пользу минимизации.
Шаг №9:
Удаляю FOG Project:
ekzorchik@srv-cache:~$ sudo mv /var/www/fog/ubuntu/ /var/www/html/ ekzorchik@srv-cache:~$ sudo rm -Rf /var/www/fog/ ekzorchik@srv-cache:~$ sudo mysql -u root -p712mbddr@ -e "drop database fog" ekzorchik@srv-cache:~$ sudo rm /var/www/html/fog ekzorchik@srv-cache:~$ sudo rm -rf /opt/fog ekzorchik@srv-cache:~$ sudo userdel fogproject ekzorchik@srv-cache:~$ sudo a2dissite 001-fog ekzorchik@srv-cache:~$ sudo rm -f /var/www/html/index.html ekzorchik@srv-cache:~$ sudo rm -f /etc/apache2/sites-available/001-fog.conf ekzorchik@srv-cache:~$ sudo systemctl restart apache2
В итоге остается каталог ubuntu:
и изменяю default.ipxe
для пути расположения каталога ubuntu:
ekzorchik@srv-cache:~$ nano /tftpboot/default.ipxe #!ipxe set server-ip 172.35.35.16 ######## MAIN MENU ################### :start menu Welcome to iPXE's Boot Menu item item --gap -- ---------------- iPXE boot menu ---------------- item shell Enter iPXE shell item Ubuntu_18_04_Server Ubuntu 18.04 Server item reboot Reboot item config Config item exit Exit (boot local disk) choose --default return --timeout 15000 target && goto ${target} :shell echo Type exit to get the back to the menu shell set menu-timeout 0 goto start :reboot reboot :config config goto start :exit sanboot --no-describe --drive 0x80 exit #############MAIN MENU ITEMS############# :Ubuntu_18_04_Server kernel tftp://${server-ip}/os/ubuntu/server/18.04/vmlinuz initrd tftp://${server-ip}/os/ubuntu/server/18.04/initrd.gz imgargs vmlinuz initrd=initrd.gz root=/dev/nfs netboot=nfs nfsroot=${server-ip}:/images/os/ubuntu/server/18.04/ locale=en_US.UTF-8 keyboard-configuration/layoutcode=us hostname=srv-bionic url=http://${server-ip}/ubuntu/bionic/server/server.seed quiet splash ip=dhcp rw boot goto start
Шаг №10:
Добавляем в файл ответов скрипт предварительной настройки системы перед дальнейшим использованием:
ekzorchik@srv-cache:~$ sudo nano /var/www/html/ubuntu/bionic/server/default.sh #!/bin/bash # Codepage UTF-8 # aka Олло Александр aka ekzorchik (Telegram: @ekzorchik) # for Ubuntu 18.04 Server amd64 #Это у меня в локальной сети сервис кеширующий любые устанавливаемые deb-пакеты чтобы не приходилось их раз за разом скачивать во время экспериментов. function proxy { cat > /etc/apt/apt.conf.d/02proxy << EOF Acquire::http { Proxy "http://172.35.35.16:3142"; }; EOF } proxy #for wget no use proxy sed -i 's/#use_proxy = on/use_proxy = off/g' /etc/wgetrc rm -Rf /var/lib/apt/lists locklist="/var/lib/apt/lists/lock" if [ -f $locklist ] then echo "$locklist found i budet delete" rm -rf $locklist else echo "$locklist not found" fi lockapt="/var/cache/apt/archives/lock" if [ -f $lockapt ] then echo "$lockapt found i budet delete" rm -rf $lockapt else echo "$lockapt not found" fi lock="/var/lib/dpkg/lock" lockfrontend="/var/lib/dpkg/lock-frontend" lockbackup="/var/lib/dpkg/lock-backup" if [ -f "$lock" ] then echo "$lock found i budet delete" rm -rf $lock ls /var/lib/dpkg/lock else echo "$lock not found." fi if [ -f "$lockfrontend" ] then echo "$lockfrontend found i budet delete" rm -rf $lockfrontend ls /var/lib/dpkg/lock-frontend else echo "$lockfrontend not found" fi if [ -f "$lockbackup" ] then echo "$lockbackup found i budet delete" rm -rf $lockbackup ls /var/lib/dpkg/lock-backup else echo "$lockbackup not found" fi apt-get update && sudo apt-get upgrade -y rm -rf /var/lib/dpkg/updates/* sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades dpkg --configure -a apt-get dist-upgrade -y #Timezone rm -f /etc/localtime ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime apt-get autoremove -y # Удаляю из системы пакет Cloud Init sudo bash -c "echo 'datasource_list: [ None ]' sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg" sudo apt purge -y cloud-init sudo rm -Rf /etc/cloud /var/lib/cloud #NTP sudo apt-get install ntpdate mercurial bikeshed -y sudo bash -c "echo '@reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null'" | sudo -s tee /var/spool/cron/crontabs/root ntpdate -s 0.pool.ntp.org #Install nuznoe in work apt-get install htop mc software-properties-common -y #locale #sudo locale-gen ru_RU #sudo locale-gen ru_RU.UTF-8 sudo locale-gen en_US.UTF-8 sudo sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen && sudo locale-gen #sudo sed -i 's/ru_RU.KOI8-R/ru_RU.UTF-8/g' /etc/locale.alias echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
Шаг №11:
Изменяю файл server.seed
с добавлением выполнения скрипта после установки системы Ubuntu 18.04 Server:
ekzorchik@srv-cache:~$ sudo nano /var/www/html/ubuntu/bionic/server/server.seed #General configuration d-i auto-install/enable boolean true d-i debconf/priority string critical d-i pkgsel/update-policy select none #Localization d-i debian-installer/locale string en_US.UTF-8 d-i debian-installer/language string en d-i localechooser/supported-locales multiselect en_US.UTF-8, ru_RU.UTF8 d-i debian-installer/country string US #Keyboard d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us d-i console-setup/modelcode string SKIP d-i keyboard-configuration/xkb-keymap select us #Set physical link d-i netcfg/choose_interface select auto #The Debian release to install d-i mirror/country select US d-i mirror/http/mirror select us.archive.ubuntu.com # TODO: d-i mirror/http/proxy string http://HOST:3142/ d-i mirror/http/proxy string http://172.35.35.16:3142/ d-i mirror/suite string bionic # CLOCK / TIMEZONE 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 time.nist.gov #hostname d-i netcfg/get_hostname string srv-bionic #user setup d-i passwd/user-fullname string Ubuntu 18.04 test user 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 live-installer/enable boolean false #Partitioning d-i partman-auto/disk string /dev/sda /dev/vda d-i partman-auto/method string regular d-i partman-auto/method string lvm 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 max #atomic -> all files in on partition #home -> separate /home partition #multi -> separate /home, /var, /tmp partitions d-i partman-auto/choose_recipe select atomic 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 #Software selection d-i tasksel/first multiselect standard d-i preseed/late_command string apt-install mc unzip tmux mercurial vim build-essential multipath-tools lsscsi lvm2 htop net-tools openssh-server qemu-guest-agent; in-target wget --no-proxy http://172.35.35.16/ubuntu/bionic/server/default.sh -O /tmp/default.sh; in-target chmod +x /tmp/default.sh; in-target /bin/bash /tmp/default.sh d-i finish-install/reboot_in_progress no ekzorchik@srv-cache:~$ sudo chown -R www-data:www-data /var/www/html/
Вот теперь намного лучше, задача по автоматизированной установке Ubuntu 18.04 Server
выполнена и без применения сервиса FOG Project.
На этом у меня пока все, с уважением автор блога Олло Александр aka ekzorchik.