Ранее я в этом разделе я рассматривал, как собрать свой образ Slackware, как добавить туда свой набор пакетов. А теперь я хочу копнуть ещё глубже и разобраться с тем, а как можно модифицировать установщик Slackware.
В статье Создание собственного ISO образа Slackware я слегка касался этого вопроса, но повторюсь.
Установщик Slackware — это набор bash скриптов, которые лежат в папке /usr/lib/setup/ файле initrd. Т.е. если мы возьмем initrd с установочного образа Slackware или скачаем из репозитория:
wget --no-check-certificate mirrors.slackware.com/slackware/slackware64-current/isolinux/initrd.img
Мы можем распаковать его или просто открыть через Midnihht Commander. Внутри мы увидим папку setup и набор установочных скриптов:
Основной стартовый скрипт это setup. Именно ему передается управление. Я думаю вы помните, что в отличие от других дистрибутивов в Slackware для запуска установки нужно непосредственно выполнить запуск скрипта setup.
Встроим русификацию в установщик Slackware
У меня есть скрипт русификации Slackware с диалогом выбора параметров, который было бы замечательно видеть в установщике Slackware. Сэкономило бы немного времени. Давайте я расскажу, как это можно сделать.
В скрипте setup есть маню, в которое встроим команду запуска нашего скрипта русификации.
dialog --title "Slackware Linux Setup (version 15.0)" \
--menu \
"Welcome to Slackware Linux Setup.\n\
Select an option below using the UP/DOWN keys and SPACE or ENTER.\n\
Alternate keys may also be used: '+', '-', and TAB." 18 72 9 \
"HELP" "Read the Slackware Setup HELP file" \
"KEYMAP" "Remap your keyboard if you're not using a US one" \
"ADDSWAP" "Set up your swap partition(s)" \
"TARGET" "Set up your target partitions" \
"SOURCE" "Select source media" \
"SELECT" "Select categories of software to install" \
"INSTALL" "Install selected software" \
"CONFIGURE" "Reconfigure your Linux system" \
"SETRUNLEVEL" "Set runlevel 4 in a inittab" \
"RUSSIFICATION" "Run a russification script" \
"EXIT" "Exit Slackware Linux Setup" 2> $TMP/hdset
if [ ! $? = 0 ]; then
rm -f $TMP/hdset $TMP/SeT*
exit
fi
MAINSELECT="`cat $TMP/hdset`"
rm $TMP/hdset
#+archer
if [ "$MAINSELECT" = "SETRUNLEVEL" ]; then
RUNLEVEL=4
sed -i $T_PX/etc/inittab -e "s/\(id:\).\(:initdefault:\)/\1${RUNLEVEL}\2/"
fi
if [ "$MAINSELECT" = "RUSSIFICATION" ]; then
chroot ${T_PX} /usr/sbin/russification
fi
#-archer
Вставленные строки кода я выделил цветом. Тут кстати ещё присутствует возможность сразу установить в файле inittab уровень запуска 4.
Обратите внимание, что запуск скрипта русификации /usr/sbin/russification происходит в chroot режиме. ${T_PX} — то переменная, которая хранит примонтированную папку, в которую происходит установка. Как правило, это папка /mnt.
Ну и чтобы запустился скрипт русификации он должен присутствовать в дистрибутиве, у меня он устанавливается дополнительным пакетом. Скачать можно с github.
Как теперь обратно поместить наши изменения в initrd. Для этого нужно запаковать все файлы обратно:
find . -print | cpio -o --owner root:root -H newc | gzip -9 > $CWD/slackware64-current/isolinux/initrd.img
Тут нужно дать одно замечание. В slackware-current initrd запакован архиватором XZ. Но после упаковки обратно XZ-ом у меня перестал загружаться RAM-диск. Я попробовал запаковать gzip и он заработал. Так я и оставил.
Вот полный скрипт того, что у меня выполняется:
#!/bin/sh
SLACKREPO=mirrors.slackware.com/slackware/slackware64-current/
CWD=$(pwd)
TMP=$CWD/tmp
cd $TMP
if [ -f $TMP/initrd.img ]
then
echo "The initrd exists"
else
echo "Getting the slackware initrd..."
wget --no-check-certificate $SLACKREPO/isolinux/initrd.img
fi
setupdir=$TMP/initrd-tree
rm -rf $setupdir
mkdir $setupdir
echo "Unpack the initrd ..."
cd $setupdir
xz -cd ../initrd.img |cpio -i -d -m -H newc
#patch setup
cp $CWD/setup/setup $setupdir/usr/lib/setup/
cp $CWD/setup/SeTpasswd $setupdir/usr/lib/setup/
cp $CWD/setup/SeTuacct $setupdir/usr/lib/setup/
cp $CWD/setup/SeTupass $setupdir/usr/lib/setup/
echo "Pack a new initrd ..."
cd $setupdir
#find . -print | cpio -o --owner root:root -H newc | xz -z > $CWD/slackware64-current/isolinux/initrd.img
find . -print | cpio -o --owner root:root -H newc | gzip -9 > $CWD/slackware64-current/isolinux/initrd.img
Здесь не только происходит подмена скрипта setup, но и можете видеть, что копируются 3 файла связанные с паролем. Это скрипты из проекта Liveslak Eric Hameleers (Alien BOB) для возможности создать пользователя при установке дистрибутива.
Когда я с этим всем разбирался я не нашел информации в сети, о том как устроена установка и тем более на русском языке. Поэтому надеюсь эта статья прольет свет, ещё глубже на устройство Slackware.
Все мои скрипты для создания и модификации Slackware есть в репозитории на GitHub make-slackware-iso.
Мне нравится ход твоих мыслей. Немного ранее, я всё это тоже делал.
Получилось, между прочим. Могу поделиться своим наработанным… Если интересно, конечно.
Да, я бы с удовольствием посмотрел.
Ссылка на скрипт https://disk.yandex.ru/d/54IH7rC4aW0k8A