Создание своего образа Ubuntu Bionic

Posted by

Хочу установить систему 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: (Ниже скриншот как у меня было после всех проделанных шагов ниже)

Настраиваю через рабочий инструмент 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 включительно:

Указываю VM грузиться с подготовленного образа

 

Шаг №18: По итогу разворачивания образа под Virtualbox будет в экране VM приглашение на авторизацию в системе Ubuntu 18.04 Server amd64

Виртуальная машина с осью Ubuntu 18.04 Server успешно развернута и ожидает авторизации

Шаг №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.