Создание собственного ISO образа Slackware

Есть некоторые моменты, которые меня не устраивают в Slackware. Поэтому я решил разобраться, как создать свой собственный дистрибутив Slackware.

Первое, что нам понадобится это зеркало каталога с дистрибутивом Slackware-current и всеми пакетами. Это можно сделать через rsync. Единственное нужно исключить папку с исходниками. Так как она очень большая и нам не понадобится.

rsync -av --exclude source/ rsync://mirror.yandex.ru/slackware/slackware64-current/ .

Таким образом мы получим репозиторий дистрибутива в текущей папке.

Для описания процесса я создам ISO образ, который будет содержать окружение рабочего стола cutefish и некоторые мои пакеты.

Вся работа будет идти в папке isolinux/. Нам потребуются следующие файлы:

  • setpkg — файл предоставляет меню выбора пакетов в установщике
  • message.txt — файл содержит текст приветственного сообщения, которые вы видите после загрузки ISO-образа

В папке slackware64 находится структура пакетов дистрибутива:

Добавим сюда две свои папки: cutefish и myrepo. Структура будет такая:

Теперь требуется внести скопированные папки в меню выбора пакетов в файле setpkg. После изменения выглядеть он будет следующим образом (обратите внимание на последние две строки):

dialog --backtitle "Selecting software to install." --title "PACKAGE SERIES SELECTION" --item-help --output-separator "#" --checklist \
"Now it's time to select which general categories of software to install \
on your system. Use the spacebar to select or unselect the software you \
wish to install. You can use the up and down arrows to see all the \
possible choices. Recommended choices have been preselected. Press the \
ENTER key when you are finished." \
20 75 9 \
"A" "Base Linux system" on "The A (base) series contains the kernel and main system utilities." \
"AP" "Various Applications that do not need X" on "The AP series is a collection of useful applications." \
"D" "Program Development (C, C++, Lisp, Perl, etc.)" on "The D series contains compilers, debuggers, and other programming tools." \
"E" "GNU Emacs" on "The E series contains the GNU Emacs advanced real-time display editor." \
"F" "FAQ lists, HOWTO documentation" on "The F series contains essential documentation for Linux system administrators." \
"K" "Linux kernel source" on "The K series contains the source code for the Linux kernel." \
"KDE" "The KDE Plasma Desktop" on "The KDE series contains the KDE Plasma Desktop for X." \
"L" "System Libraries (needed by KDE, GNOME, X, and more)" on "The L series contains important libraries needed by the rest of the system." \
"N" "Networking (TCP/IP, UUCP, Mail, News)" on "The N series contains network related clients and servers." \
"T" "TeX typesetting software" on "TeX is a typesetting system often used for mathematics and technical papers." \
"TCL" "Tcl/Tk script languages" on "The TCL series contains the Tcl/Tk/TclX languages and programs that use them." \
"X" "X Window System" on "This series contains X, the window system (or GUI) used by Linux." \
"XAP" "X Applications" on "The XAP series is a collection of applications for X." \
"XFCE" "The Xfce Desktop Environment for X" on "Xfce is a fast and lightweight GTK+ based desktop environment for X." \
"Y" "Games" on "The Y series contains a collection of classic text-based games." \
"cutefish" "Cute Fish DE" on "Packages CuteFish" \
"myrepo" "My" on "My packages" \
2> $TMP/SeTSERIES

Так же отредактируем файл message.txt, добавим какой-нибудь текст. Например так «Install Slackware Cutefish»:

Welcome to 09Slackware6407 version 15.0 (Linux kernel 5.13.6)!

If you need to pass extra parameters to the kernel, enter them at the prompt
below after the name of the kernel to boot (e.g., huge.s).

In a pinch, you can boot your system from here with a command like:

boot: huge.s root=/dev/sda1 initrd= ro 

In the example above, /dev/sda1 is the / Linux partition.

To test your memory with memtest86+, enter memtest on the boot line below.

This prompt is just for entering extra parameters. If you don't need to enter
any parameters, hit ENTER to boot the default kernel "huge.s" or press [F2] 
for a listing of more kernel choices. Default kernel will boot in 2 minutes.

Install Slackware Cutefish

Все приготовления сделаны и остается только собрать ISO-образ. Для этого в папке slackware64-current выполним следующую команду (обратите внимание в конце есть точка, которая указывает, что xorriso начинает работать в текущей папке):

xorriso -as mkisofs \
  -iso-level 4 \
  -full-iso9660-filenames \
  -R -J -A "Slackware Install cutefish" \
  -hide-rr-moved \
  -v -d -N \
  -eltorito-boot isolinux/isolinux.bin \
  -eltorito-catalog isolinux/boot.cat \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -isohybrid-mbr /usr/share/syslinux/isohdpfx.bin \
  -eltorito-alt-boot \
  -e isolinux/efiboot.img \
  -no-emul-boot -isohybrid-gpt-basdat \
  -m 'source' \
  -volid "SlackDVD" \
  -output ./slackware-cutefish-dvd.iso \
  .

В результате будет создан файл установочного ISO-образа slackware-cutefish-dvd.iso. Попробуем установить его и проверить что получилось.

Я запущу установку в VirtualBox. Первое, что мы увидим — надпись, которую добавили в файл message.txt:

А далее после чтения cd диска будет выведен список выбора групп установки в котором будут наши два пункта:

После установки все пакеты скопированные в папки cutefish и myrepo будут установлены. Причем кроме пакетов ничего создавать в этих папках не потребовалось.

Вот таким очень простым способом легко можно собрать образ дистрибутива со своим набором пакетов.

В заключении

В завершение мне хочется сказать следующее. Отсутствие зависимостей в Slackware несколько ограничивает применяемость своего ISO-образа. В Slackware мне не нравится то, что сразу устанавливается очень много программ, которыми я не пользуюсь. (речь идет не о пакетах библиотек, а именно программах, которые доступны в меню запуска). В итоге в меню запуска программ куча всего мне ненужного. Создавая свой ISO образ мне хотелось убрать лишнее и оставить только нужное мне ПО. Но это оказалось не просто. Если создать свою группу пакетов и переносить в ней, то что мне нужно, есть шанс пропустить необходимые библиотеки. Если наоборот удалять пакеты из групп, то добиться нужного результата можно, но какой-то это немного неправильно что ли. В итоге пока, я пришел к выводу, что ставить нужно все пакеты. А свой ISO-образ буду использовать, чтобы добавлять пакеты, которые отсутствуют в дистрибутиве.

Как попадает setpkg в установочные скрипты

Все это время я думал, каким образом происходит замена установочного меню. Например, в salix initrd распаковывается, туда копируются скрипты salix и упаковывается. Но здесь такого не нет. В итоге пришлось спрашивать на linuxquestions. Так как же это работает?

В установочных скриптах (/usr/lib/setup/setup) в рам-диске (initrd) просто есть строчка вызова «sh /var/log/mount/isolinux/setpkg», который в свою очередь копируется в установочный ISO-образм.

Все оказалось очень банально. Хотя, на мой взгляд, как-то костыльно… Вариант с переборкой initrd был бы более понятный и давал больше возможностей для кастомизации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

4  ×  1  =