Хочу установить систему Ubuntu 18.04 с помощью файлов ответов, дабы можно было разворачивать виртуальную систему под Virtualbox, ESXi, Hyper-V с помощью всего лишь одного составленного для личного использования образа в один клик. Заодно и приобщиться к этому таинству — загрузка системы с помощью файла ответом. Не исключаю что сейчас я многое путаю в написанном выше, но начинать нужно с малого, а потом упорядочивать.
Что понадобится:
- Установленный на основную систему пакет Virtualbox посредством которого будет тестироваться создаваемый образ Ubuntu 18.04 Server amd64
- Моя основная система: Ubuntu 18.04 Desktop amd64 на ноутбуке Lenovo E555
- Обязательно наличие интернет соединения или же настроенного на Вашем железе в Вашей локальной сети сервиса apt-cacher-ng где уже должны быть все deb-пакеты.
Для удобства и одновременного видения всего процесса на каждом этапе мой Вам совет использовать tmux
Шаг №1: Запускаю tmux: (Ниже скриншот как у меня было после всех проделанных шагов ниже)
Шаг №2: Создаю каталог проекта:
ekzorchik@navy:~$ mkdir isoproject/iso
Шаг №3: Перехожу в каталог проекта:
ekzorchik@navy:~$ cd isoproject/
Шаг №4: Скачиваю оригинальный образ Ubuntu 18.04 Server со старым установщиком системы:
ekzorchik@navy:~/isoproject$ wget http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04.1-server-amd64.iso
Шаг №5: Создаю скрипт для распаковки образа:
ekzorchik@navy:~/isoproject$ nano isoextract.sh
#!/bin/bash
BUILD=iso
IMAGE=ubuntu-18.04.1-server-amd64.iso
# Распаковываем образ в директорию
rm -rf $BUILD/
mkdir $BUILD/
echo "** Mounting image..."
sudo mount -o loop $IMAGE /mnt/
echo "** Syncing..."
rsync -av /mnt/ $BUILD/
chmod -R u+w $BUILD/
После не забываем сохранить внесенные изменения.
Шаг №6: Задаю атрибуты запуска данному скрипту (isoextract.sh
):
ekzorchik@navy:~/isoproject$ chmod +x isoextract.sh
Шаг №7: Создаю еще один скрипт через который распакованный образ с внесенными изменениями в него будет собираться:
ekzorchik@navy:~/isoproject$ nano archiveisopreseed.sh
#!/bin/bash
IMAGE=ubuntu-custom.iso
BUILD=iso
# Запаковываем содержимое iso/ в образ ubuntu-custom.iso
echo ">>> Calculating MD5 sums..."
rm $BUILD/md5sum.txt
(cd $BUILD/ && find . -type f -print0 | xargs -0 md5sum | grep -v "boot.cat" | grep -v "md5sum.txt" > md5sum.txt)
echo ">>> Building iso image..."
mkisofs -r -V "Ubuntu OEM install" \
-cache-inodes \
-J -l -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-o $IMAGE $BUILD/
После не забываем сохранить внесенные изменения.
Шаг №8: Задаю атрибуты запуска данному скрипту (archiveisopreseed.sh
):
ekzorchik@navy:~/isoproject$ chmod +x archiveisopreseed.sh
Шаг №9: Запускаю первый скрипт (isoextract.sh
) для распаковки дистрибутива и монтирования его в каталог iso на основной системе находящимся в проекте isoproject:
ekzorchik@navy:~/isoproject$ sudo ./isoextract.sh
Шаг №10: Удаляю преднастроенные preseed
файлы:
ekzorchik@navy:~/isoproject$ sudo rm iso/preseed/*.seed
Шаг №11: Не все можно предопределить в preseed
-файле на самых ранних этапах загрузки. И в этом случае в распакованном в Шаге №9 нужно изменить содержимое файла (удаляю все, но оставляю только это):
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/txt.cfg
default oem
label oem
menu label ^OEM install
kernel /install/vmlinuz
append file=/cdrom/preseed/oem.seed vga=788 initrd=/install/initrd.gz quiet debian-installer/language=en debian-installer/country=US console-setup/ask_detect=false keyboard-configuration/layoutcode=us debian-installer/locale=en_US --
После не забываем сохранить внесенные изменения.
Шаг №12: Когда образ указан как загрузочный и идет загрузка с него, мастер установки предлагает Вам указать язык, но я иду по пути автоматизации и следовательно чтобы данный запрос не появлялся:
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/lang
en
На заметку: в каталоге iso/isolinux/
есть файл langlist
внутри которого перечислены доступные варианты языков.
Шаг №13: Чтобы загрузчик из файла txt.cfg
в автоматизированном виде выбирал каждый последующий пункт меню установки следует изменить дефолтное значение в 300 секунд до 2 (к примеру):
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/isolinux.cfg
path
include menu.cfg
default vesamenu.c32
prompt 0
#timeout 300
timeout 20
ui gfxboot bootlogo
После не забываем сохранить внесенные изменения.
Шаг №14: Создаю собственный файл ответов на вопросы инсталлятора при установке:
ekzorchik@navy:~/isoproject$ sudo nano iso/preseed/oem.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
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i console-setup/ask_detect boolean false
#hostname
d-i netcfg/get_hostname string srv-bionic
#HW clock
d-i clock-setup/utc boolean true
#time zone
d-i time/zone string Europe/Moscow
#Use a http proxy
d-i mirror/http/proxy string
#The Debian release to install
d-i mirror/suite string 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
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
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 tmux mercurial vim build-essential multipath-tools lsscsi lvm2 htop net-tools openssh-server
d-i finish-install/reboot_in_progress no
Шаг №15: Собираю образ на основе проделанных изменений шагами выше запуском созданного в Шаге №7 скрипта:
ekzorchik@navy:~/isoproject$ sudo ./archiveisopreseed.sh
ekzorchik@navy:~/isoproject$ sudo umount /mnt
Шаг №16: Сравниваю эталонный образ и свой образ:
ekzorchik@navy:~/isoproject$ ls -lh *.iso
-rw-rw-r-- 1 ekzorchik ekzorchik 715M сен 30 21:29 ubuntu-18.04.1-server-amd64.iso
-rw-r--r-- 1 root root 723M ноя 10 13:08 ubuntu-custom.iso
Видно, что он не намного изменился в размере.
Шаг №17: Проверяю его работоспособность в Virtualbox, создаю VM, к примеру со следующими характеристиками: CPU = 1, HDD = 50, RAM = 2 и выставляю что грузиться следует с подмонтированного образа созданного из шагов с 1 под 14 включительно:
Шаг №18: По итогу разворачивания образа под Virtualbox будет в экране VM приглашение на авторизацию в системе Ubuntu 18.04 Server amd64
Шаг №19: Авторизуюсь в развернутой системе под зашитыми в файл oem.preseed
идентификационными данными:
- Login: ekzorchik
- Pass: 712mbddr@
ekzorchik@srv-bionic:~$ uname -a
Linux srv-bionic 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ekzorchik@srv-bionic:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
Шаг №20: Можно начинать работать с системой, как если бы она была развернута просто с оригинального образа Ubuntu Bionic. Далее я уже для себя под свои проекты со своего Mercurial сервера выкачиваю скрипт пред настройки системы для дальнейшего использования.
ekzorchik@srv-bionic:~$ hg clone --insecure https://172.35.35.8/hg/dproject
ekzorchik@srv-bionic:~$ sudo ./dproject/default
Исходя из всего этого, я реализовал собственными силами поставленную задачу, впрочем как и всегда. На основе вот этой можно подготовить образ с уже в автоматически настраивыми сервиса (к примеру: MajorDoMo, Zabbix, MotionEYE и т.д) после разворачивания. В следующий раз я разберу и задокумментирую по шагам, как настроить по максимальной безопасности свой образ, а заодно как будет ставится данный образ на реальной железо. На этом я прощаюсь с Вами читатели моего блога (www.ekzorchik.ru) и конечно же Telegram канала (@ekzorchik), с уважением Олло Александр aka ekzorchik.