Доработка установщика Slackware

Ранее я в этом разделе я рассматривал, как собрать свой образ 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 и набор установочных скриптов:

Slackware initrd
Slackware 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.

One thought on “Доработка установщика Slackware”

  1. Мне нравится ход твоих мыслей. Немного ранее, я всё это тоже делал.
    Получилось, между прочим. Могу поделиться своим наработанным… Если интересно, конечно.

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

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

  −  8  =  2