Оглавление |
---|
См. также: https://wiki.debian.org/DebianInstaller/Modify/CD
Информация | ||
---|---|---|
| ||
|
Предупреждение |
---|
Ответственность за применение и сопровождение модифицированных операционных систем, установленных с модифицированных установочных носителей, полностью лежит на авторах этих носителей. Замкнутость полученного дистрибутива не проверяется и возможность установки из него пакетов не гарантируется. Стандартная техническая поддержка Astra Linux не распространяется на такие системы. Действие сертификатов Astra Linux не распространяется на такие системы. См. также Использование стороннего программного обеспечения в аттестованных информационных системах, функционирующих под управлением ОС Astra Linux Special Edition. |
Введение
В данной статье рассматривается создание модифицированного установочного диска. Модифицированный образ создается на основе стандартного образа установочного диска 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 .. Восстановить структуру ссылок репозитория:
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 по сети.
Далее приведен сценарий выполняющий следующие действия:
- Распаковываются загрузочные образы из копии дистрибутива. Для распаковки создается временный каталог, который далее используется в качестве рабочего;
- В распакованных образах файл 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
Дальнейшая работа с модифицированным образом не отличается от работы со стандартным образом.