Оглавление |
---|
См. также: https://wiki.debian.org/DebianInstaller/Modify/CD
Информация | ||
---|---|---|
| ||
|
Предупреждение |
---|
Ответственность за применение и сопровождение модифицированных операционных систем, установленных с модифицированных установочных носителей, полностью лежит на авторах этих носителей. Замкнутость полученного дистрибутива не проверяется и возможность установки из него пакетов не гарантируется. Стандартная техническая поддержка Astra Linux не распространяется на такие системы. Действие сертификатов Astra Linux не распространяется на такие системы. |
Введение
В данной статье рассматривается создание модифицированного установочного диска. Модифицированный образ создается на основе стандартного образа установочного диска Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7. Модификация подразумевает изменение состава DEB-пакетов и preseed-сценария. Подразумевается, что служебные пакеты (udebs) не изменяются. Для изменения пакетов udeb используется отдельная процедура (см. how to build a full image with a custom kernel). Все основные действия выполняются от имени непривилегированного пользователя, привилегии суперпользователя (в Astra Linux Special Edition с включенным МКЦ - привилегий суперпользователя с высоки уровнем целостности) требуются только для установки пакетов, монтирования носителей (если используется) и операции записи созданного образа на носитель.
Подготовка компьютера
Для выполнения дальнейших действий на компьютер, на котором будут создаваться модифицированные образы, установить необходимые пакеты:
Command |
---|
sudo apt install bsdtar reprepro xorriso build-essential debootstrap |
Создание распакованной копии установочного диска
Далее предполагается, что образ установочного диска загружен в домашний каталог текущего пользователя и что все действия выполняются в этом домашнем каталоге. Для распаковки загруженного образа:
Создать подкаталог для распаковки:
Command mkdir ~/cd Распаковать ISO-образ в созданный каталог:
Command bsdtar -xf <имя_файла_с_образом> -C ~/cd Для выполнения дальнейших модификаций разрешить запись в распакованные файлы:
Command chmod -R +w ~/cd
В результате этого шага в подкаталоге cd домашнего каталога текущего пользователя будет создан подкаталог cd с копией содержимого образа установочного диска, и будет разрешено вносить изменения в содержимое этой копии.
Создание и пакетизация собственного ключа для подписания измененного установочного образа
Создание собственного ключа
Предупреждение |
---|
Для подписания измененного установочного образа следует использовать ключи, выпущенные в соответствии с установленными в организации правилами. Приведенный далее пример создания ключа применим исключительно в демонстрационных целях. |
Зафиксировать имя, которое будет использоваться в ключе. Обычно в качестве такого имени применяют адрес электронной почты, который для повторного применения удобно экспортировать в переменную окружения:
Command mail="<адрес_электронной_почты>" например:
Command mail="support@organization.ru" - Создать конфигурационный файл gen-key.cfg с параметрами генерации ключа. Содержимое файла:
Блок кода Key-Type: 1 %no-protection Key-Length: 4096 Subkey-Type: 1 Subkey-Length: 4096 Name-Real: <имя_владельца_ключа> Name-Email: <адрес_электронной_почты> Expire-Date: 0
Создать такой файл можно следующей командой (в качестве имени владельца ключа используется имя support, для указания адреса электронной почты используется ранее экспортированная переменная mail):
Command echo "Key-Type: 1
%no-protection
Key-Length: 4096
Subkey-Type: 1
Subkey-Length: 4096
Name-Real: support
Name-Email: $mail
Expire-Date: 0" > gen-key.cfg Выполнить генерацию ключа используя созданный конфигурационный файл:
Command gpg --batch --gen-key gen-key.cfg опции команды:
--batch - генерация ключа без запросов подтверждений;
--gen-key - команда генерации ключа;
gen-key.cfg - конфигурационный файл с параметрами генерации ключа.Экспортировать созданный ключ в файл с именем <адрес_электронной_почты>.gpg.key (удобно опять использовать значение ранее созданной переменной окружения mail):
Command gpg --armor --output "$mail.gpg.key" --export "$mail" опции команды:
--armor - экспорт в формате ASCII;
--output "$mail.gpg.key" - имя файла, в котором сохраняется экспортированный ключ (в имени файла используется значение ранее созданной переменной окружения);
--export "$mail" - указание операции (экспорт) и имя экспортируемого объекта (используется значение ранее созданной переменной окружения);Импортировать экспортированный ключ в комплект ключей Astra Linux:
Command sudo gpg --no-default-keyring --keyring /usr/share/apt/astra-archive.gpg --import "$mail.gpg.key" Далее копия созданного ключа, находящаяся в комплекте ключей Astra Linux, будет использована для подписания измененного репозитория установочного диска.
Пакетизация собственного ключа
Для того, чтобы подпись репозитория, сделанная собственным ключом, могла быть проверена при установке операционной системы с модифицированного носителя собственный ключ должен быть включен в репозитории установочного диска. Это можно сделать оформив примитивный UDEB-пакет:
Экспортировать ключ в файл:
Command gpg --output "$mail.gpg" --export "$mail" в данном случае экспорт выполняется в двоичном формате, а не в формате ASCII;
Установить права доступа на файл с экспортированным ключом:
Command sudo chmod 644 "$mail.gpg" - Создать UDEB-пакет для включения собственного ключа в модифицированный дистрибутив. Для примера далее используется имя пакета aptkey:
Для удобства работы сохранить имя пакета в переменной окружения. Это можно сделать командой:
Command package="aptkey" Создать подкаталог для размещения пакета:
Command mkdir -p "$package/DEBIAN" Создать файл $package/DEBIAN/control с параметрами пакета (в приведенном примере команды используются значения ранее заданных переменных окружения):
Command echo "Package: $package
Version: 1.0
Section: debian-installer
Priority: important
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer: $mail
#Package-Type: udeb
#XC-Package-Type: udeb
Description: Add own keyring to apt
Depends: apt" > "$package/DEBIAN/control"Создать файл $package/DEBIAN/postinst постустановочного сценария (сценарий нечего не делает, возвращая код завершения 0 (успешное окончание)) и присвоить файлу со сценарием разрешение на выполнение:
Command echo "exit 0" > "$package/DEBIAN/postinst"
chmod 0755 "$package/DEBIAN/postinst"Создать и наполнить структуру каталогов с данными пакета:
Command 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;
Собрать пакет:
Command dpkg-deb --build "$package" Экспортированный ключ переместить в каталог доверенных ключей рабочей системы:
Command sudo mv "$mail.gpg" /etc/apt/trusted.gpg.d/
Изменение состава пакетов в репозитории
Предупреждение |
---|
После изменения состава пакетов репозитория репозиторий перестает быть подписанным ключами ООО "РусБИТех-Астра" (становится неподписанным). |
Создать каталог для временной копии репозитория. Для примера использовано имя каталога cache:
Command mkdir -p cache Переместить в созданный временный каталог DEB- и UDEB-пакеты из копии установочного диска:
Command find cd/pool -name \*.deb -print -exec mv {} cache \;
find cd/pool -name \*.udeb -exec mv {} cache \;Переместить (или скопировать) в созданный временный каталог ранее созданный пакет с собственным ключом:
Command mv "$package.deb" "cache/${package}_1.0.deb" Очистить копию установочного диска от ненужных каталогов:
Command rm -rf $HOME/cd/{db,dists,pool} Выполнить модернизацию состава пакетов дистрибутива:
Добавить во временный каталог собственные пакеты;
Удалить во временном каталоге ненужные пакеты;
Создать в каталоге с копией установочного диска подкаталог ~/cd/conf:
Command mkdir -p ~/cd/conf Создать конфигурационный файл ~/cd/conf/distributions для восстановления репозитория:
Command echo 'Origin: Debian
Codename: 1.7_x86-64
Suite: stable
Version: 1.7.0
Architectures: amd64
Components: main contrib non-free
UDebComponents: main
SignWith: yes' > ~/cd/conf/distributions
Приведенная для примера конфигурация использует дистрибутив Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7, архитектура amd64, компоненты main, contrib, nonfree. При использовании других дистрибутивов параметры конфигурации должны быть соответственно откорректированы;
Инициализировать репозиторий:
Command reprepro -b cd/ export 1.7_x86-64 Выгрузить ключ для подписи репозитория:
Command gpg --yes --armor -o ~/cd/dists/1.7_x86-64/Release.gpg -sb ~/cd/dists/1.7_x86-64/Release Наполнить репозиторий пакетами, сохраненными во временном каталоге cache:
Command reprepro --ask-passphrase -Vb cd includedeb 1.7_x86-64 cache/*.deb
reprepro --ask-passphrase -Vb cd includeudeb 1.7_x86-64 cache/*.udebОбновить файл с контрольными суммами:
Command cd ~/cd; find ! -name md5sum.txt ! -name gostsums.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd .. Предупреждение
Информация find: Обнаружено зацикливание в файловой системе; ...
можно игнорировать.
Восстановить структуру ссылок репозитория:
Command ln -s 1.7_x86-64 ~/cd/dists/stable Удалить ненужный каталог ~/cd/conf и временные копии пакетов:
Command rm -rf ~/cd/conf ~/cd/db cache
Замена файла preseed.cfg в составе дистрибутива
Подразумевается, что файл со с новым сценарием установки preseed.cfg сохранен в текущем каталоге. Подробнее про сценарии установки см. Установка Astra Linux по сети (UEFI или Legacy BIOS).
Далее приведен сценарий выполняющий следующие действиядействия по замене файла preseed.cfg, находящегося в составе дистрибутива:
- Распаковываются загрузочные образы из копии дистрибутива. Для распаковки создается временный каталог, который далее используется в качестве рабочего;
- В распакованных образах файл preseed.cfg заменяется новым файлом;
- Образы упаковываются и помещаются в копию установочного диска.
Сценарий:
Command |
---|
for n in ~/cd/install.amd ~/cd/install.amd/gtk ~/cd/hd-media ~/cd/hd-media/gtk; do 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 done |
Обновление индексов
После внесения всех изменений выполнить обновление индексов репозитория:
Command |
---|
cd ~/cd; find ! -name md5sum.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd .. |
Предупреждение
Информация |
---|
find: Обнаружено зацикливание в файловой системе; ... |
можно игнорировать.
Первичные проверки модифицированного дистрибутива
Примонтировать каталог с дистрибутивом:
Command sudo mount -o bind $HOME/cd /mnt
Chroot
Выполнить создание chroot-образа из примонтированного дистрибутива:
Информация На момент последнего обновления настоящей статьи для выполнения данной проверки с использованием образа Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) на обновлениях Astra Linux, выпущенных до очередного обновления 1.7, необходимо использовать пакеты debootstrap и debian-archive-keyring из очередного обновления 1.7 (см. Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов).
Command sudo debootstrap --components=main,contrib,non-free --arch=amd64 1.7_x86-64 chroot "file:///mnt"
Состав репозитория
Создать на рабочей машине файл /etc/apt/sources.list.d/mounted.list со ссылкой на примонтированный репозиторий:
Command echo "deb file:/mnt 1.7_x86-64 main contrib non-free" | sudo tee /etc/apt/sources.list.d/mounted.list Очистить кеш пакетов:
Command sudo rm -fr /var/lib/apt/lists/* Обновить списки пакетов:
Command sudo apt update Убедиться, что добавленные в модифицированный репозиторий пакеты доступны:
Command apt policy <имя_добавленного_пакета> Удалить файл /etc/apt/sources.list.d/mounted.list:
Command sudo rm /etc/apt/sources.list.d/mounted.list Обновить списки пакетов:
Command sudo apt update
После выполнения проверок отмонтировать дистрибутив:
Command |
---|
sudo umount /mnt |
Создание файла с загрузочным ISO-образом модифицированного дистрибутива
Извлечь сектор MBR из исходного ISO-образа дистрибутива:
Command dd if=<имя_файла_с_ISO-образом> bs=1 count=432 of=isohdpfx.bin Извлеченный сектор будет сохранен в файле isohdpfx.bin;
Создать модифицированный ISO-образ:
Command xorriso -as mkisofs -isohybrid-mbr isohdpfx.bin -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -V "WIKI_ISO" \
-eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -append_partition 2 0xef cd/boot/grub/efi.img \
-o wiki_iso.iso ~/cdВ приведенном примере опция -V определяет метку (volume id) создаваемого образа (в примере использована метка WIKI_ISO), опция -o определяет имя файла, в который будет записан образ (в примере - wiki_iso.iso). Значение остальных опций см. man xorriso.
Опционально: удалить файл isohdpfx.bin:
Command rm isohdpfx.bin
Дальнейшая работа с модифицированным образом не отличается от работы со стандартным образом.