|
Ответственность за применение и сопровождение модифицированных операционных систем, установленных с модифицированных установочных носителей, полностью лежит на авторах этих носителей. Замкнутость полученного дистрибутива не проверяется и возможность установки из него пакетов не гарантируется. Стандартная техническая поддержка Astra Linux не распространяется на такие системы. Действие сертификатов Astra Linux не распространяется на такие системы. |
В данной статье рассматривается создание модифицированного установочного диска. Модифицированный образ создается на основе стандартного образа установочного диска Astra Linux Special Edition. Модификация подразумевает изменение состава DEB-пакетов и preseed-сценария. Подразумевается, что служебные пакеты (udebs) не изменяются. Для изменения пакетов udeb используется отдельная процедура (см. how to build a full image with a custom kernel). Все основные действия выполняются от имени непривилегированного пользователя, привилегии суперпользователя (в Astra Linux Special Edition с включенным МКЦ - привилегий суперпользователя с высоки уровнем целостности) требуются только для установки пакетов, монтирования носителей (если используется) и операции записи созданного образа на носитель.
Для выполнения дальнейших действий на компьютере, на котором будут создаваться модифицированные образы::
sudo apt install reprepro xorriso build-essential debootstrap |
Далее предполагается, что образ установочного диска загружен в домашний каталог текущего пользователя и что все действия выполняются в этом домашнем каталоге. Для распаковки загруженного образа:
Создать подкаталог для распаковки:
mkdir ~/cd |
Распаковать ISO-образ в созданный каталог:
xorriso -osirrox on -indev путь_к_файлу.iso -extract / cd |
Для выполнения дальнейших модификаций разрешить запись в распакованные файлы:
chmod -R +w ~/cd |
В результате этого шага в подкаталоге /cd домашнего каталога текущего пользователя будет создан подкаталог /cd с копией содержимого образа установочного диска, и будет разрешено вносить изменения в содержимое этой копии.
| Для подписания измененного установочного образа следует использовать ключи, выпущенные в соответствии с установленными в организации правилами. Приведенный далее пример создания ключа применим исключительно в демонстрационных целях. |
Зафиксировать имя, которое будет использоваться в ключе. Обычно в качестве такого имени применяют адрес электронной почты, который для повторного применения удобно экспортировать в переменную окружения:
mail="<адрес_электронной_почты>" |
например:
mail="support@organization.ru" |
gen-key.cfg с параметрами генерации ключа. Создать такой файл можно следующей командой (в качестве имени владельца ключа используется имя support, для указания адреса электронной почты используется ранее экспортированная переменная mail):echo "Key-Type: 1%no-protectionKey-Length: 4096Subkey-Type: 1Subkey-Length: 4096Name-Real: support # <имя_владельца_ключа> Name-Email: $mail # <адрес_электронной_почты>Expire-Date: 0" > gen-key.cfg |
Выполнить генерацию ключа используя созданный конфигурационный файл:
gpg --batch --gen-key gen-key.cfg |
опции команды:--batch — генерация ключа без запросов подтверждений;--gen-key — команда генерации ключа;gen-key.cfg — конфигурационный файл с параметрами генерации ключа.
Экспортировать созданный ключ в файл с именем <адрес_электронной_почты>.gpg.key (удобно опять использовать значение ранее созданной переменной окружения mail):
gpg --armor --output "$mail.gpg.key" --export "$mail" |
опции команды:--armor — экспорт в формате ASCII;--output "$mail.gpg.key" — имя файла, в котором сохраняется экспортированный ключ (в имени файла используется значение ранее созданной переменной окружения);--export "$mail" — указание операции (экспорт) и имя экспортируемого объекта (используется значение ранее созданной переменной окружения).
Импортировать экспортированный ключ в комплект ключей:
|
|
Далее копия созданного ключа, находящаяся в комплекте ключей Astra Linux, будет использована для подписания измененного репозитория установочного диска.
Для того, чтобы исключить проверку подписей пакетов при установке, нужно добавить опцию debian-installer/allow-unauthenticated=true в файл /boot/grub/grub.cfg. |
Для того, чтобы подпись репозитория, сделанная собственным публичным ключом, могла быть проверена при установке операционной системы с модифицированного носителя собственный публичный (открытый) ключ должен быть включен в репозитории установочного диска. Это можно сделать оформив примитивный UDEB-пакет:
Экспортировать публичный ключ в файл:
gpg --output "$mail.gpg" --export "$mail" |
в данном случае экспорт выполняется в двоичном формате, а не в формате ASCII.
Установить права доступа на файл с экспортированным публичным ключом:
sudo chmod 644 "$mail.gpg" |
aptkey:Для удобства работы сохранить имя пакета в переменной окружения:
package="aptkey" |
Создать подкаталог для размещения пакета:
mkdir -p "$package/DEBIAN" |
Создать файл $package/DEBIAN/control с параметрами пакета (в приведенном примере команды используются значения ранее заданных переменных окружения):
echo "Package: $packageVersion: 1.0Section: debian-installerPriority: importantArchitecture: allEssential: noInstalled-Size: 1024Maintainer: $mail#Package-Type: udeb#XC-Package-Type: udebDescription: Add own keyring to aptDepends: apt" > "$package/DEBIAN//control" |
Создать файл $package/DEBIAN/postinst постустановочного сценария (сценарий нечего не делает, возвращая код завершения 0 (успешное окончание) и присвоить файлу со сценарием разрешение на выполнение:
echo "exit 0" > "$package/DEBIAN/postinst"chmod 0755 "$package/DEBIAN/postinst" |
Создать и наполнить структуру каталогов с данными пакета:
mkdir -p "$package/etc/apt/trusted.gpg.d"cp "$mail.gpg" "$package/etc/apt/trusted.gpg.d/" |
экспортированный публичный ключ помещается в каталог пакета "$package/etc/apt/trusted.gpg.d" чтобы при установке пакета этот ключ был размещен в системном каталоге доверенных ключей /etc/apt/trusted.gpg.d
Собрать пакет:
dpkg-deb --build "$package" |
Экспортированный публичный ключ переместить в каталог доверенных ключей рабочей системы:
sudo mv "$mail.gpg" /etc/apt/trusted.gpg.d/ |
| После изменения состава пакетов репозитория репозиторий перестает быть подписанным ключами ООО "РусБИТех-Астра" (становится неподписанным). |
Создать каталог для временной копии репозитория. Для примера использовано имя каталога /cache:
mkdir -p cache |
Переместить в созданный временный каталог DEB- и UDEB-пакеты из копии установочного диска:
|
Переместить (или скопировать) в созданный временный каталог ранее созданный пакет с собственным ключом:
mv "$package.deb" "cache/${package}_1.0.deb" |
Очистить копию установочного диска от ненужных каталогов:
rm -rf $HOME/cd/{db,dists,pool} |
Выполнить модернизацию состава пакетов дистрибутива:
Добавить во временный каталог собственные пакеты.
Удалить во временном каталоге ненужные пакеты.
Создать в каталоге с копией установочного диска подкаталог ~/cd/conf:
mkdir -p ~/cd/conf |
Создать конфигурационный файл ~/cd/conf/distributions для восстановления репозитория:
Здесь и далее в командах следует указывать вместо |
|
Приведенная для примера конфигурация использует дистрибутив Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.8, архитектуру |
Далее:
Инициализировать репозиторий:
reprepro -b cd/ export 1.8_x86-64 |
Выгрузить ключ для подписи репозитория:
gpg --yes --armor -o ~/cd/dists/1.8_x86-64/Release.gpg -sb ~/cd/dists/1.8_x86-64/Release |
Наполнить репозиторий пакетами, сохраненными во временном каталоге /cache:
reprepro --ask-passphrase -Vb cd includedeb 1.8_x86-64 cache/*.debreprepro --ask-passphrase -Vb cd includeudeb 1.8_x86-64 cache/*.udeb |
Обновить файл с контрольными суммами:
cd ~/cd; find ! -name md5sum.txt ! -name gostsums.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd .. |
Предупреждение
|
можно игнорировать.
Восстановить структуру ссылок репозитория:
ln -s 1.8_x86-64 ~/cd/dists/stable |
Удалить ненужный каталог ~/cd/conf и временные копии пакетов:
rm -rf ~/cd/conf ~/cd/db cache |
На установочном диске содержится файл с ответами на вопросы установщика ОС файл preseed.cfg. Для простой автоматизации установки можно задать альтернативный файл непосредственно при установке ОС. Эта возможность не обеспечивает полной автоматизации установки, но может упростить и стандартизировать установку ОС.
Пример файла для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) см. в Файл preseed для загрузки по сети Astra Linux x.8 статьи Автоматическая установка Astra Linux Special Edition x.8.
Для замены файла preseed.cfg при установке:
preseed:preseed.cfg) в корень установочного носителя.Внести в файл boot/grub/grub.cfg в строки с параметрами загрузки ядра (начинаются со слова linux) указание файла preseed, например:
linux /install.amd/vmlinuz quiet modprobe.blacklist=evbug astra_install=1 nomodeset debian-installer/locale=ru debian-installer/language=ru keyboard-configuration/xkb-keymap=ru console-keymaps-at/keymap=ru preseed/file=/cdrom/preseed.cfg |
Подключить USB-накопитель к компьютеру.
Отформатировать USB-накопитель файловой системой vfat без создания дискового раздела:
| При форматировании все данные с накопителя будут удалены. При форматировании использовать имя накопителя (например, sdh), а не имя дискового раздела (sdh1). |
sudo mkfs.vfat -I /dev/<имя_накопителя> |
Примонтировать накопитель.
Скопировать заменяющий preseed файл на накопитель.
При установке ОС:
Выбрать язык установки.
Не нажимая <Enter> выбрать способ установки (графический или текстовый).
Нажать <F2>. Откроется список выбора параметров ядра.
Нажать <Esc>. Список выбора параметров ядра закроется, и можно будет непосредственно редактировать строку параметров ядра.
В строку параметров ядра добавить указание файла preseed, при этом использовать не каталог /cdrom, а каталог /media, например:
linux /install.amd/vmlinuz quiet modprobe.blacklist=evbug astra_install=1 nomodeset debian-installer/locale=ru debian-installer/language=ru keyboard-configuration/xkb-keymap=ru console-keymaps-at/keymap=ru preseed/file=/media/preseed.cfg |
Нажать <Enter>.
Как упоминается ранее, при таком использовании полная автоматизация не обеспечивается, и всегда придется согласиться с лицензией и выбрать клавиши переключения языка. Порядок дальнейшей установки определяется указанным файлом preseed.cfg.
Применимо только для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) с debian-installer (есть метка di в названии загруженного образа) и для более ранних очередных обновлений. |
Далее подразумевается, что действия выполняются в домашнем каталоге пользователя, загрузочный образ уже распакован в подкаталог cd домашнего каталога пользователя, и файл с новым сценарием установки preseed.cfg сохранен в домашнем каталоге пользователя. Общий порядок действий для одного образа initrd:
preseed.cfg в составе распакованных файлов загрузчика.Образы initrd находятся в следующих каталогах:
Как и ранее, предполагается, что дистрибутив распакован в подкаталог cd домашнего каталога, а новый файл preseed.cfg находится в домашнем каталоге. Сценарий перебирает все известные каталоги, в которых может находиться образ initrd, и для каждого найденного каталога выполняет действия по замене файла:
for n in ~/cd/install.amd ~/cd/install.amd/gtk ~/cd/hd-media ~/cd/hd-media/gtk; do
if [ -d $n ] ; then
pushd `mktemp -d`
chmod u+w $n $n/initrd.gz
cat $n/initrd.gz | gzip -d | sudo cpio -i
sudo cp ~/preseed.cfg .
sudo find | cpio -o --format=newc | gzip -9c > $n/initrd.gz
sudo rm -rf *
chmod -R -w $n
popd
fi
done |
Пример файла preseed:
|
Подразумевается, что файл с новым сценарием установки astra-installer-preseed.yaml сохранен в текущем рабочем каталоге вместо preseed.cfg.(в примере это домашний каталог пользователя, куда в /cd был распакован образ установочного диска).
| Рекомендуется учитывать обьем дискового пространства рабочего каталога, который будут занимать несколько создаваемых каталогов с распакованным установочным образом |
mnt,squashfs,edit:
|
squashfs:
|
|
sudo rm ~/cd/live/filesystem.squashfs |
squashfs:
|
edit:
|
astra-installer-preseed.yaml в каталог с системой squashfs:
|
|
При наличии готового preseed.cfg допускается Конвертация формата debian-preseed в формат astra-preseed.
|
Где:
edit — каталог из содержимого которого будет создан архив со сжатой файловой системой squashfs;
cd/live/filesystem.squashfs — выходной файл;-b 1048576 — -comp xz — -Xdict-size 100% — задает размер словаря для алгоритма сжатия. В данном случае `100%` означает, что размер словаря будет равен размеру блока;-e boot — исключает каталог /boot.
|
|
Где custom-astra — имя модифицированного установочного образа.
|
После внесения всех изменений выполнить обновление индексов репозитория:
cd ~/cd; find ! -name md5sum.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd . |
|
Примонтировать каталог с дистрибутивом:
sudo mount -o bind $HOME/cd /mnt |
Выполнить создание chroot-образа из примонтированного дистрибутива:
На момент последнего обновления настоящей статьи для выполнения данной проверки с использованием образа Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) на обновлениях Astra Linux, выпущенных до очередного обновления 1.8, необходимо использовать пакеты debootstrap и debian-archive-keyring из очередных обновлений 1.7 и 1.6 в соответствии с версией очередного обновления (см. Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов). |
sudo debootstrap --components=main,contrib,non-free --arch=amd64 1.8_x86-64 chroot "file:///mnt" |
Создать на рабочей машине файл /etc/apt/sources.list.d/mounted.list со ссылкой на примонтированный репозиторий:
echo "deb file:/mnt 1.8_x86-64 main contrib non-free" | sudo tee /etc/apt/sources.list.d/mounted.list |
Для более ранних версий следует указать вместо 1.8_x86-64 необходимую версию Astra Linux Special Edition, например 1.7_x86-64.
Очистить кеш пакетов:
sudo rm -fr /var/lib/apt/lists/* |
Обновить списки пакетов:
sudo apt update |
Убедиться, что добавленные в модифицированный репозиторий пакеты доступны:
apt policy <имя_добавленного_пакета> |
Удалить файл mounted.list:
sudo rm /etc/apt/sources.list.d/mounted.list |
Обновить списки пакетов:
sudo apt update |
После выполнения проверок отмонтировать дистрибутив:
sudo umount /mnt |
Извлечь сектор MBR из исходного ISO-образа дистрибутива:
dd if=<имя_файла_с_ISO-образом> bs=1 count=432 of=isohdpfx.bin |
Извлеченный сектор будет сохранен в файле isohdpfx.bin.
|
|
Собрать модифицированный ISO-образ выполнив команду:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) с astra-installer:
|
Где :
eltorito-boot — путь к загрузчику для BIOS для файловой системы загрузочных дисков по стандарту ISO 9660;
eltorito-catalog — путь к каталогу с GRUB для файловой системы загрузочных дисков по стандарту ISO 9660;
grub2-mbr — путь к сектору MBR, ранее извлеченному в isohdpfx.bin ;
efi-boot-image — общий путь к загрузчику для BIOS;
e — путь к загрузчику UEFI, файлу efiboot.img;
o — путь до выходного файла ISO-образа.
Значение остальных опций см. man xorriso.
Опция |
debian-installer (есть метка di в названии загруженного образа) и более ранние очередные обновления:
|
Где : опция -V определяет метку (volume id) создаваемого образа (в примере использована метка ASTRA_ISO), опция -o определяет имя файла, в который будет записан образ (в примере - my-custom-astra.iso).
Дальнейшая работа с модифицированным образом не отличается от работы со стандартным образом.
|