Page tree
Skip to end of metadata
Go to start of metadata

Данная статья применима к:

  • 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 с включенным МКЦ - привилегий суперпользователя с высоки уровнем целостности) требуются только для установки пакетов, монтирования носителей (если используется) и операции записи созданного образа на носитель.

Подготовка компьютера

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

sudo apt install bsdtar reprepro xorriso build-essential debootstrap

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

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

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

    mkdir ~/cd

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

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

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

    chmod -R +w ~/cd

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

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

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

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

    mail="<адрес_электронной_почты>"
    например:
    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):

    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. Выполнить генерацию ключа используя созданный конфигурационный файл:

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

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

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

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

    sudo gpg --no-default-keyring --keyring /usr/share/apt/astra-archive.gpg --import "$mail.gpg.key"
    Далее копия созданного ключа, находящаяся в комплекте ключей Astra Linux, будет использована для подписания измененного репозитория установочного диска.

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

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

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

    gpg --output "$mail.gpg" --export "$mail"
    в данном случае экспорт выполняется в двоичном формате, а не в формате ASCII;

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

    sudo chmod 644 "$mail.gpg"

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

      package="aptkey"

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

      mkdir -p "$package/DEBIAN"

    3. Создать файл $package/DEBIAN/control с параметрами пакета (в приведенном примере команды используются значения ранее заданных переменных окружения):

      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 (успешное окончание)) и присвоить файлу со сценарием разрешение на выполнение:

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

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

      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. Собрать пакет:

      dpkg-deb --build "$package"

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

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

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

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

      mkdir -p cache

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

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

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

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

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

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

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

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

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

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

      mkdir -p ~/cd/conf

    7. Создать конфигурационный файл ~/cd/conf/distributions для восстановления репозитория:

      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. Инициализировать репозиторий:

    reprepro -b cd/ export 1.7_x86-64

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

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

  3. Наполнить репозиторий пакетами, сохраненными во временном каталоге cache:

    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. Обновить файл с контрольными суммами:

    cd ~/cd; find ! -name md5sum.txt ! -name gostsums.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd ..
    Предупреждение 

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

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

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

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

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

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

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

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

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

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

Сценарий:

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


Обновление индексов

После внесения всех изменений выполнить обновление индексов репозитория:

cd ~/cd; find ! -name md5sum.txt -follow -type f -print0 | xargs -0 md5sum > md5sum.txt ; cd ..
Предупреждение 

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

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

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


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

    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 и установка пакетов).

    sudo debootstrap --components=main,contrib,non-free --arch=amd64 1.7_x86-64 chroot "file:///mnt"

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

  1. Создать на рабочей машине файл /etc/apt/sources.list.d/mounted.list со ссылкой на примонтированный репозиторий:

    echo "deb file:/mnt 1.7_x86-64 main contrib non-free" | sudo tee /etc/apt/sources.list.d/mounted.list

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

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

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

    sudo apt update

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

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

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

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

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

    sudo apt update

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

sudo umount /mnt

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

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

    dd if=<имя_файла_с_ISO-образом> bs=1 count=432 of=isohdpfx.bin
    Извлеченный сектор будет сохранен в файле isohdpfx.bin;

  2. Создать модифицированный ISO-образ:

    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:

    rm isohdpfx.bin

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

  • No labels