В прошлый раз я разобрал для себя, как сделать образ системы Ubuntu 18.04 Server amd64 на основе подготовленного и разобранного файла ответов, теперь я под свои нужды тестирования (под Virtualbox) уже использую не ручную установку системы с прохождением каждого этапа и ответом на вопросы мастера инсталляции. Но теперь я по такому же принципу хочу разобрать создание своего образа на базе Ubuntu 18.04 Desktop amd64. Цель которую я преследую:
- Разворачивание в виртуальную систему под Virtualbox, ESXi, Hyper-V
- В последствии с помощью PXE сервера устанавливать в один клик систему, либо на виртуальную либо на физическую.
Считаю что все должно быть автоматизировано и стандартизирована. Плюс интересно и в дальнейшем будет экономить время.
Как всегда основная система — это Ubuntu 18.04 Desktop amd64 установленная на ноутбуке Lenovo E555 на которой я все обкатываю и пишу реальные заметки для своих блогов.
И пакет Virtualbox для тестирования с последующим внедрением.
Необходимые условия каким я их себе вижу:
- Обязательно наличие интернет соединения или же настроенного на Вашем железе в Вашей локальной сети сервиса
apt-cacher-ng
где уже должны быть все deb-пакеты.
Также, как и в прошлый раз на основную систему установлен пакет tmux с целью параллельного наблюдения за процессом.
Шаг №1: Как и в прошлый раз создаю каталог isoproject
под проект сборки своего образа:
ekzorchik@navy:~$ mkdir isoproject/iso
Шаг №2: Перехожу в каталог проекта isoproject
ekzorchik@navy:~$ cd isoproject/
Шаг №3: Скачиваю/Выкачиваю оригинальный образ (Размер 1.8Gb) Ubuntu 18.04 Desktop
со старым установщиком системы:
ekzorchik@navy:~/isoproject$ wget http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso
Шаг №4: Создаю скрипт для распаковки образа:
ekzorchik@navy:~/isoproject$ nano isoextract.sh
#!/bin/bash
BUILD=iso
IMAGE=ubuntu-18.04.1-desktop-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/
После не забываем сохранить внесенные изменения.
Шаг №5: Задаю атрибуты запуска данному скрипту (isoextract.sh
):
ekzorchik@navy:~/isoproject$ chmod +x isoextract.sh
Шаг №6: Создаю еще один скрипт через который распакованный образ с внесенными изменениями в него будет собираться:
ekzorchik@navy:~/isoproject$ sudo nano archiveisopreseed.sh
#!/bin/bash
IMAGE=ubuntu-18.04-desktop-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/
После не забываем сохранить внесенные изменения.
Шаг №7: Задаю атрибуты запуска данному скрипту (archiveisopreseed.sh
):
ekzorchik@navy:~/isoproject$ chmod +x archiveisopreseed.sh
Шаг №8: Запускаю первый скрипт (isoextract.sh
) для распаковки дистрибутива и монтирования его в каталог iso на основной системе находящимся в проекте isoproject
:
ekzorchik@navy:~/isoproject$ sudo ./isoextract.sh
Шаг №9: Удаляю преднастроенные preseed файлы:
ekzorchik@navy:~/isoproject$ sudo rm iso/preseed/*.seed
Шаг №10: Не все можно предопределить в preseed-файле на самых ранних этапах загрузки. И в этом случае в распакованном в Шаге №8 нужно изменить содержимое файла txt.cfg
(удаляю все, но оставляю только это):
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/txt.cfg
default oem
label oem
menu label ^OEM install
kernel /casper/vmlinuz
append file=/cdrom/preseed/oem.seed auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd.lz quiet splash noprompt noshell ---
После не забываем сохранить внесенные изменения.
Шаг №11: Когда образ указан как загрузочный и идет загрузка с него, мастер установки предлагает Вам указать язык, но я иду по пути автоматизации и следовательно чтобы данный запрос не появлялся:
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/lang
en
На заметку: в каталоге iso/isolinux/
есть файл langlist
внутри которого перечислены доступные варианты языков.
Шаг №12: Чтобы загрузчик из файла txt.cfg
в автоматизированном виде выбирал каждый последующий пункт меню установки следует изменить дефолтное значение в 300 секунд до 5 (к примеру):
ekzorchik@navy:~/isoproject$ sudo nano iso/isolinux/isolinux.cfg
path
include menu.cfg
default vesamenu.c32
prompt 0
#timeout 300
timeout 50
ui gfxboot bootlogo
После не забываем сохранить внесенные изменения.
Шаг №13: Создаю собственный файл ответов на вопросы инсталлятора при установке:
На заметку: убрать символы комментария:
ekzorchik@navy:~/isoproject$ sed 's:^#.*$::g' iso/preseed/oem.seed
ekzorchik@navy:~/isoproject$ sudo nano iso/preseed/oem.seed
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 archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
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
d-i partman-auto/method string regular
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/choose_recipe select atomic
d-i partman-basicfilesystems/no_swap boolean false
d-i partman/default_filesystem string ext4
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-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
tasksel tasksel/first multiselect ubuntu-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 apt-install tmux mercurial vim lvm2 net-tools openssh-server
d-i finish-install/reboot_in_progress no
Шаг №14: Собираю образ на основе проделанных изменений шагами выше запуском созданного в Шаге №6 скрипта:
ekzorchik@navy:~/isoproject$ sudo ./archiveisopreseed.sh
ekzorchik@navy:~/isoproject$ sudo umount /mnt
Шаг №15: Сравниваю эталонный образ и свой образ:
ekzorchik@navy:~/isoproject$ ls -lh *.iso
-rw-r--r-- 1 ekzorchik ekzorchik 1,9G июл 25 06:22 ubuntu-18.04.1-desktop-amd64.iso
-rw-r--r-- 1 root root 1,9G ноя 24 16:14 ubuntu-18.04-desktop-custom.iso
Видно, что он не намного изменился в размере.
Шаг №16: Проверяю его (образа) работоспособность в Virtualbox, создаю VM (Name: UD, расшифровывается как Ubuntu Desktop), к примеру со следующими характеристиками: CPU = 1, HDD = 50, RAM = 2 и выставляю что грузиться следует с подмонтированного образа созданного из шагов с 1 под 14 включительно:
Шаг №17: По итогу разворачивания образа под Virtualbox будет в экране VM приглашение на авторизацию в системе Ubuntu 18.04 Desktop amd64, как я и хотел все на Английском.
Шаг №18: Кликаю левой кнопкой мыши по квадрату с надписью «ekzorchik» авторизуюсь в развернутой системе под зашитыми в файл oem.preseed
идентификационными данными:
- Login: ekzorchik
- Pass: 712mbddr@
Запускаю терминал по сочетанию клавиш Ctrl + Alt + T
и в консоли командной строки вывожу, какой сейчас ядро в системе и какой релиз:
ekzorchik@srv-dbionic:~$ 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
Шаг №19: Можно начинать работать с системой, как если бы она была развернута просто с оригинального образа Ubuntu Bionic Desktop.
Далее произвожу преднастройку перед использования посредством своего скрипта который выкачиваю из личного Mercurial репозитария. В Вашем случае — у Вас должно быть все свое с учетом Ваших предпочтений.
ekzorchik@srv-dbionic:~$ hg clone --insecure https://172.33.33.7/hg/dproject
ekzorchik@srv-dbionic~$ sudo ./dproject/default
Итого, как впрочем как всегда я добился желаемого задавшись целью сделать собственный образ Ubuntu 18.04 Desktop amd64
. Теперь у меня две заметки по созданию собственных образом. Но это уже прошлый век использовать USB
носитель или привод — пора использовать PXE
сервис, вот об этом я поведую своим читателям и себе составляю пошаговое руководство в следующих заметках. На этом я прощаюсь с Вами читатели моего (www.ekzorchik.ru) и конечно же Telegram канала (@ekzorchik
), с уважением Олло Александр aka ekzorchik.