Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

См. также: https://wiki.debian.org/DebianInstaller/Modify/CD


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Common Edition 2.12



Предупреждение
Ответственность за применение и сопровождение модифицированных операционных систем, установленных с модифицированных установочных носителей, полностью лежит на авторах этих носителей. Замкнутость полученного дистрибутива не проверяется и возможность установки из него пакетов не гарантируется. Стандартная техническая поддержка 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

Создание распакованной копии установочного диска

Далее предполагается, что образ установочного диска загружен в домашний каталог текущего пользователя и что все действия выполняются в этом домашнем каталоге. Для распаковки загруженного образа:

  1. Создать подкаталог для распаковки:

    Command
    mkdir ~/cd


  2. Распаковать ISO-образ в созданный каталог:

    Command
    bsdtar -xf <имя_файла_с_образом> -C ~/cd


  3. Для выполнения дальнейших модификаций разрешить запись в распакованные файлы:

    Command
    chmod -R +w ~/cd


В результате этого шага в подкаталоге cd домашнего каталога текущего пользователя будет создан подкаталог cd с копией содержимого образа установочного диска, и будет разрешено вносить изменения в содержимое этой копии.

Создание и пакетизация собственного ключа для подписания измененного установочного образа

Создание собственного ключа

Предупреждение
Для подписания измененного установочного образа следует использовать ключи, выпущенные в соответствии с установленными в организации правилами. Приведенный далее пример создания ключа применим исключительно в демонстрационных целях.
  1. Зафиксировать имя, которое будет использоваться в ключе. Обычно в качестве такого имени применяют адрес электронной почты, который для повторного применения удобно экспортировать в переменную окружения:

    Command
    mail="<адрес_электронной_почты>"

    например:

    Command
    mail="support@organization.ru"


  2. Создать конфигурационный файл 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


  3. Выполнить генерацию ключа используя созданный конфигурационный файл:

    Command
    gpg --batch --gen-key gen-key.cfg

    опции команды:
    --batch - генерация ключа без запросов подтверждений;
    --gen-key - команда генерации ключа;
    gen-key.cfg - конфигурационный файл с параметрами генерации ключа.

  4. Экспортировать созданный ключ в файл с именем <адрес_электронной_почты>.gpg.key (удобно опять использовать значение ранее созданной переменной окружения mail):

    Command
    gpg --armor --output "$mail.gpg.key" --export "$mail"

    опции команды:
    --armor - экспорт в формате ASCII;
    --output "$mail.gpg.key" - имя файла, в котором сохраняется экспортированный ключ (в имени файла используется значение ранее созданной переменной окружения);
    --export "$mail" - указание операции (экспорт) и имя экспортируемого объекта  (используется значение ранее созданной переменной окружения);

  5. Импортировать экспортированный ключ в комплект ключей Astra Linux:

    Command
    sudo gpg --no-default-keyring --keyring /usr/share/apt/astra-archive.gpg --import "$mail.gpg.key"

    Далее копия созданного ключа, находящаяся в комплекте ключей Astra Linux, будет использована для подписания измененного репозитория установочного диска.

Пакетизация собственного ключа

Для того, чтобы подпись репозитория, сделанная собственным ключом, могла быть проверена при установке операционной системы с модифицированного носителя собственный ключ должен быть включен в репозитории установочного диска. Это можно сделать оформив примитивный  UDEB-пакет:

  1. Экспортировать ключ в файл:

    Command
    gpg --output "$mail.gpg" --export "$mail"

    в данном случае экспорт выполняется в двоичном формате, а не в формате ASCII;

  2. Установить права доступа на файл с экспортированным ключом:

    Command
    sudo chmod 644 "$mail.gpg"


  3. Создать UDEB-пакет для включения собственного ключа в модифицированный дистрибутив. Для примера далее используется имя пакета aptkey:
    1. Для удобства работы сохранить имя пакета в переменной окружения. Это можно сделать командой:

      Command
      package="aptkey"


    2. Создать подкаталог для размещения пакета:

      Command
      mkdir -p "$package/DEBIAN"


    3. Создать файл $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"


    4. Создать файл $package/DEBIAN/postinst постустановочного сценария (сценарий нечего не делает, возвращая код завершения 0 (успешное окончание)) и присвоить файлу со сценарием разрешение на выполнение:

      Command
      echo "exit 0" > "$package/DEBIAN/postinst"
      chmod 0755 "$package/DEBIAN/postinst"


    5. Создать и наполнить структуру каталогов с данными пакета:

      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;

    6. Собрать пакет:

      Command
      dpkg-deb --build "$package"


    7. Экспортированный ключ переместить в каталог доверенных ключей рабочей системы:

      Command
      sudo mv "$mail.gpg" /etc/apt/trusted.gpg.d/


Изменение состава пакетов в репозитории

Предупреждение
После изменения состава пакетов репозитория репозиторий перестает быть подписанным ключами ООО "РусБИТех-Астра" (становится неподписанным).
    1. Создать каталог для временной копии репозитория. Для примера использовано имя каталога cache:

      Command
      mkdir -p cache


    2. Переместить в созданный временный каталог DEB- и UDEB-пакеты из копии установочного диска:

      Command

      find cd/pool -name \*.deb -print -exec mv {} cache \;
      find cd/pool -name \*.udeb -exec mv {} cache \;


    3. Переместить (или скопировать) в созданный временный каталог ранее созданный пакет с собственным ключом:

      Command
      mv "$package.deb" "cache/${package}_1.0.deb"


    4. Очистить копию установочного диска от ненужных каталогов:

      Command
      rm -rf $HOME/cd/{db,dists,pool}


    5. Выполнить модернизацию состава пакетов дистрибутива:

      1. Добавить во временный каталог собственные пакеты;

      2. Удалить во временном каталоге ненужные пакеты;

    6. Создать в каталоге с копией установочного диска подкаталог ~/cd/conf:

      Command
      mkdir -p ~/cd/conf


    7. Создать конфигурационный файл ~/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. При использовании других дистрибутивов параметры конфигурации должны быть соответственно откорректированы;

  1. Инициализировать репозиторий:

    Command
    reprepro -b cd/ export 1.7_x86-64


  2. Выгрузить ключ для подписи репозитория:

    Command
    gpg --yes --armor -o ~/cd/dists/1.7_x86-64/Release.gpg -sb ~/cd/dists/1.7_x86-64/Release


  3. Наполнить репозиторий пакетами, сохраненными во временном каталоге 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


  4. Обновить файл с контрольными суммами:

    Command
    cd ~/cd; find ! -name md5sum.txt ! -name gostsums.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd ..

    Предупреждение 

    Информация

    find: Обнаружено зацикливание в файловой системе; ...

    можно игнорировать.

  5. Восстановить структуру ссылок репозитория:

    Command
    ln -s 1.7_x86-64 ~/cd/dists/stable


  6. Удалить ненужный каталог ~/cd/conf и временные копии пакетов:

    Command
    rm -rf ~/cd/conf ~/cd/db cache


Замена файла preseed.cfg в составе дистрибутива

Подразумевается, что файл со сценарием установки preseed.cfg сохранен в текущем каталоге. Подробнее про сценарии установки см. Установка Astra Linux Special Edition 1.5 по сети (UEFI или Legacy BIOS).

Далее приведен сценарий выполняющий следующие действия:

  1. Распаковываются загрузочные образы из копии дистрибутива. Для распаковки создается временный каталог, который далее используется в качестве рабочего;
  2. В распакованных образах файл preseed.cfg заменяется новым файлом;
  3. Образы упаковываются и помещаются в копию установочного диска.

Сценарий:

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: Обнаружено зацикливание в файловой системе; ...

можно игнорировать.

Первичные проверки модифицированного дистрибутива


  1. Примонтировать каталог с дистрибутивом:

    Command
    sudo mount -o bind $HOME/cd /mnt


Chroot


  1. Выполнить создание 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"


Состав репозитория

  1. Создать на рабочей машине файл /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


  2. Очистить кеш пакетов:

    Command
    sudo rm -fr /var/lib/apt/lists/*


  3. Обновить списки пакетов:

    Command
    sudo apt update


  4. Убедиться, что добавленные в модифицированный репозиторий пакеты доступны:

    Command
    apt policy <имя_добавленного_пакета>


  5. Удалить файл /etc/apt/sources.list.d/mounted.list:

    Command
    sudo rm /etc/apt/sources.list.d/mounted.list


  6. Обновить списки пакетов:

    Command
    sudo apt update


После выполнения проверок отмонтировать дистрибутив:

Command
sudo umount /mnt

Создание файла с загрузочным ISO-образом модифицированного дистрибутива

  1. Извлечь сектор MBR из исходного ISO-образа дистрибутива:

    Command
    dd if=<имя_файла_с_ISO-образом> bs=1 count=432 of=isohdpfx.bin

    Извлеченный сектор будет сохранен в файле isohdpfx.bin;

  2. Создать модифицированный 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.

  3. Опционально: удалить файл isohdpfx.bin:

    Command
    rm isohdpfx.bin



Дальнейшая работа с модифицированным образом не отличается от работы со стандартным образом.