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

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition и РУСБ.10015-10 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 РУСБ.10015-01 очередное обновление 1.7. Модификация подразумевает . Модификация подразумевает изменение состава DEB-пакетов и preseed-сценария. Подразумевается, что служебные пакеты (udebs) не изменяются. Для изменения пакетов udeb используется отдельная процедура (см. how to build a full image with a custom kernel). Все основные действия выполняются от имени непривилегированного пользователя, привилегии суперпользователя (в Astra Linux Special Edition с включенным МКЦ - привилегий суперпользователя с высоки уровнем целостности) требуются только для установки пакетов, монтирования носителей (если используется) и операции записи созданного образа на носитель.

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

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

  1. В Astra Linux Special Edition x.8 подключить расширенный репозиторий, в более ранних обновлениях подключить репозиторий со средствами разработки. Порядок подключения репозиториев см. в статье Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов .
  2. Установить необходимые пакеты:
    Command
    sudo apt install bsdtar reprepro xorriso build-essential debootstrap

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

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

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

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

    Command
    bsdtar -xf <имя_файла_с_образом> -C ~/
    xorriso -osirrox on -indev путь_к_файлу.iso -extract / cd
  3. Для выполнения дальнейших модификаций разрешить запись в распакованные файлы:

    Command
    chmod -R +w ~/cd

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

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

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

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

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

    например:

    Command
    mail="support@organizationsupport@organization.ru"
  2. Создать конфигурационный файл gen-key.cfg с параметрами генерации ключа. Содержимое файла:
    Создать такой файл можно следующей командой (в качестве имени владельца ключа используется имя 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. Выполнить генерацию ключа используя созданный конфигурационный файлСоздать такой файл можно следующей командой (в качестве имени владельца ключа используется имя 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 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:

    Commandsudo

    :

    1. Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8):
      Command

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

    2. Astra Linux Special Edition x.7 и более ранние очередные обновления:
      Command

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

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

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

Информация
Для того, чтобы исключить проверку подписей пакетов при установке, можно в файл /boot/grub/grub.cfg нужно добавить опцию debian-installer/allow-unauthenticated=true .в файл /boot/grub/grub.cfg.

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

  6. ;
    1. .

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

  7. ;
    1. .

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

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

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

    Здесь и далее в командах следует указывать вместо 1.8_x86-64 вашу версию дистрибутива, например 1.7_x86-64

    Command

    echo 'Origin:

  10. Debian
  11. Astra
    Codename: 1.

  12. 7
  13. 8_x86-64
    Suite: stable
    Version: 1.

  14. 7
  15. 8.

  16. 0
  17. 1
    Architectures: amd64
    Components: main contrib non-free
    UDebComponents: main
    SignWith: yes' > ~/cd/conf/distributions

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

Приведенная для примера конфигурация использует дистрибутив Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.

7

8,

архитектура

архитектуру amd64, компоненты main,contrib,nonfree. При использовании других дистрибутивов параметры конфигурации должны быть

соответственно

откорректированы.


Далее:;

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

    Command
    reprepro -b cd/ export 1.78_x86-64
  2. Выгрузить ключ для подписи репозитория:

    Command
    gpg --yes --armor -o ~/cd/dists/1.78_x86-64/Release.gpg -sb ~/cd/dists/1.78_x86-64/Release
  3. Наполнить репозиторий пакетами, сохраненными во временном каталоге /cache:

    Command
    reprepro --ask-passphrase -Vb cd includedeb  1.78_x86-64 cache/*.deb
    reprepro --ask-passphrase -Vb cd includeudeb 1.78_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.78_x86-64 ~/cd/dists/stable
  6. Удалить ненужный каталог ~/cd/conf и временные копии пакетов:

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

Замена файла конфигурации установки preseed.cfg

при установке


На установочном диске содержится файл с ответами на вопросы установщика ОС - файл preseed.cfg. Для простой автоматизации установки можно задать альтернативный файл непосредственно при установке ОС. Эта возможность не обеспечивает полной автоматизации установки, так всегда будут запрашиваться подтверждение согласия с лицензией и выбор клавиш переключения клавиатуры, но может упростить и стандартизировать установку ОС. 

Для замены файла preseed.cfg:

Пример файла для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) см. в Файл preseed для загрузки по сети Astra Linux x.8 статьи Автоматическая установка Astra Linux Special Edition x.8.

При установке

Для замены файла preseed.cfg при установке:

  1. При использовании установочных носителей созданных на USB-накопителях (на модифицируемых носителях) для замены файла preseed:
      При использовании установочных носителей созданных на USB-накопителях (на модифицируемых носителях) для замены файла preseed:
      1. Примонтировать носитель.
      2. Скопировать заменяющий файл (например, preseed.cfg) в корень установочного  носителя;.
      3. Внести в файл 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
      4. Отмонтировать накопитель.
    1. При использовании немодифицируемых установочных носителей (CD-ROM, DVD-ROM) заменяющий файл можно предоставить с помощью USB-накопителя: 
      1. Подготовить накопитель: 
        1. Подключить USB-накопитель к компьютеру.

        2. Отформатировать USB-накопитель файловой системой vfat без создания дискового раздела:

          Предупреждение
          При форматировании все данные с накопителя будут удалены.
          При форматировании использовать имя накопителя (например, sdh), а не имя дискового раздела (sdh1).
           
          Command
          sudo mkfs.vfat -I /dev/<имя_накопителя>
        3. Примонтировать накопитель.

        4. Скопировать заменяющий preseed файл на накопитель.

        5. Отмонтировать накопитель.
      2. При установке ОС:

        1. Выбрать язык установки.

        2. Не нажимая Enter <Enter> выбрать способ установки (графический или текстовый).

        3. Нажать <F2>. Откроется список выбора параметров ядра.

        4. Нажать <Esc>. Список выбора параметров ядра закроется, и можно будет непосредственно редактировать строку параметров ядра.

        5. В строку параметров ядра добавить указание файла 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
        6. Нажать <Enter>.

    Как упоминается ранее, при таком использовании полная автоматизация не обеспечивается, и всегда придется согласиться с лицензией и выбрать клавиши переключения языка. Порядок дальнейшей установки определяется указанным файлом preseed.

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

    cfg.

    В составе дистрибутива с debian-installer

    Информация
    Применимо только для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) с debian-installer (есть метка di в названии загруженного образа) и для более ранних очередных обновлений.

    Далее подразумевается, что действия выполняются в домашнем каталоге пользователя, загрузочный образ уже распакован в подкаталог cd домашнего каталога пользователя, и Подразумевается, что файл с новым сценарием установки preseed.cfg сохранен в текущем в домашнем каталоге . Подробнее про сценарии установки см. Автоматическая установка Astra Linux Special Edition 1.7.

    Далее приведен сценарий выполняющий действия по замене файла preseed.cfg, находящегося в составе дистрибутива:

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

    Сценарий:

    Commandfor n in ~/cd/install.amd ~/cd/

    пользователя. Общий порядок действий для одного образа initrd:

    1. Распаковать файлы загрузчика ранее распакованного модифицируемого образа из рабочего каталога.
    2. Произвести замену файла  preseed.cfg в составе распакованных файлов загрузчика.
    3. Запаковать файлы загрузчика модифицируемого образа:

    Образы initrd находятся в следующих каталогах:

    • install.amd/initrd;
    • install.amd/gtk
    ~
    • /
    cd/
    • initrd;
    • hd-media
    ~/cd/
    • /initrd (может отсутствовать в дистрибутиве);
    • 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
    • /initrd (может отсутствовать в дистрибутиве);

    Пример сценария замены файла preseed.cfg

    Как и ранее, предполагается, что дистрибутив распакован в подкаталог 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

    Пример файла preseed:

    Раскрыть
    titleЁще один пример файла preseed.cfg (фоновый режим установки без диалоговых окон)


    Блок кода
    titlepreseed.cfg
    # Сетевой репозиторий для установки
    d-i mirror/protocol string http
    d-i mirror/http/hostname string dl.astralinux.ru
    d-i mirror/http/directory string /astra/stable/1.7_x86-64/repository-main
    # Настройки языка
    d-i mirror/country string manual
    d-i debian-installer/locale string ru_RU
    d-i debian-installer/locale select ru_RU.UTF-8
    d-i debian-installer/language string ru
    d-i debian-installer/country string RU
    d-i debian-installer/keymap string ru
    # Настройки клавиатуры
    d-i console-tools/archs select at
    d-i console-keymaps-at/keymap select ru
    d-i console-setup/toggle string Ctrl+Shift
    d-i console-setup/layoutcode string ru
    d-i keyboard-configuration/toggle select Ctrl+Shift
    d-i keyboard-configuration/layoutcode string ru
    d-i keyboard-configuration/xkb-keymap select ru
    d-i languagechooser/language-name-fb select Russian
    d-i countrychooser/country-name select Russia
    # Настройки сетевого интерфейса
    d-i netcfg/choose_interface select auto
    # Выбор компонент репозитория
    d-i apt-setup/non-free boolean true
    d-i apt-setup/contrib boolean true
    d-i apt-setup/services-select none
    # Настройка часов и синхронизации времени
    d-i clock-setup/utc boolean true
    d-i time/zone string Europe/Moscow
    # Определяет, нужно ли использовать NTP для установки часов во время установки
    d-i clock-setup/ntp boolean true
    # Используемый сервер NTP. Значение по умолчанию указывается здесь. Для примера указан сервер ВНИИФТРИ.
    d-i clock-setup/ntp-server string ntp4.vniiftri.ru
    # Разметка диска
    d-i partman-auto/method string regular
    d-i partman-auto/purge_lvm_from_device boolean true
    d-i partman-lvm/confirm boolean true
    # Для режима legacy bios:
    d-i partman-auto/expert_recipe string myroot :: \
         512 16384 512 ext2 \
             $primary{ } $bootable{ } \
             method{ format } format{ } use_filesystem{ } filesystem{ ext2 } mountpoint{ /boot } .\
         8192 16384 16384 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /     } .\
         2048 16384 2048 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /tmp  } options/noexec{ noexec } options/nodev{ nodev } options/nosuid{ nosuid } .\
         500 8192 -1 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } .
    d-i partman-auto/choose_recipe select myroot
    #d-i partman-auto/choose_recipe select atomic
    # Для режима UEFI:
    # d-i   partman-auto/choose_recipe  select  /lib/partman/recipes-amd64-efi/30atomic
    # Этот параметр заставляет partman выполнить разметку автоматически без подтверждения.
    d-i partman/confirm_write_new_label     boolean true
    d-i partman/choose_partition select finish
    d-i partman/confirm boolean true
    d-i partman-auto-crypto/erase_disks     boolean true
    d-i partman-basicfilesystems/no_swap    boolean false
    d-i partman-target/mount_failed         boolean true
    d-i partman-partitioning/unknown_label  boolean true
    d-i partman-auto/purge_lvm_from_device  string  true
    d-i partman-lvm/vgdelete_confirm        boolean true
    d-i partman/confirm_write_new_label     string  true
    d-i partman-lvm/confirm boolean true
    d-i partman/confirm_nooverwrite boolean true
    
    d-i base-installer/kernel/image string linux-image-generic
    
    d-i passwd/make-user boolean true
    # Учетная запись и пароль пользователя
    d-i passwd/user-fullname string astra
    d-i passwd/username string astra
    d-i passwd/user-password password 12345678
    d-i passwd/user-password-again password 12345678
    # или в виде MD5 хеша.
    #d-i passwd/user-password-crypted password [MD5 хеш]
    d-i debian-installer/allow_unauthenticated string true
    
    # Имя узла и имя домена
    d-i netcfg/get_hostname string astra
    d-i netcfg/get_domain string astradomain
    d-i netcfg/get_hostname seen true
    d-i netcfg/get_domain seen true
    
    #Выбор ядра
    d-i base-installer/kernel/image select linux-6.1-generic
    
    #Пропустить сканирование дополнительного установочного носителя
    d-i apt-setup/cdrom/set-first boolean false
    d-i apt-setup/use_mirror boolean false
    
    # Выбор ПО для установки
    tasksel tasksel/first multiselect Base packages, Fly desktop, SSH server
    tasksel tasksel/astra-feat-setup multiselect
    
    # Выбор уровня защищенности ОС
    d-i astra-additional-setup/os-check select Maximum security level Smolensk
    
    # Выбор параметров ОС
    d-i astra-additional-setup/additional-settings-smolensk multiselect Enable Mandatory Integrity Control, Enable Mandatory Access Control, Disable ptrace capability
    
    # Подтверждение согласия с лицензионным соглашением (обязательный параметр)
    astra-license astra-license/license boolean true
    
    popularity-contest popularity-contest/participate boolean false
    
    d-i grub-installer/only_debian boolean true
    
    d-i grub-installer/with_other_os boolean true
    # Пароль загрузчика grub
    d-i grub-installer/password password 12345678
    d-i grub-installer/password-again password 12345678
    grub-installer grub-installer/password-mismatch error
    # Не показывать последнее сообщение о том, что установка завершена.
    d-i finish-install/reboot_in_progress note
    d-i finish-install/exit/poweroff boolean true
    
    d-i preseed/late_command string in-target apt purge -y ntp ; \
                                    in-target systemctl enable systemd-timesyncd.service ; \
                                    in-target rm -f /etc/NetworkManager/system-connections/*;

    В составе дистрибутива с astra-installer

    Подразумевается, что файл с новым сценарием установки astra-installer-preseed.yaml сохранен в текущем рабочем каталоге вместо preseed.cfg.(в примере это домашний каталог пользователя, куда в /cd был распакован образ установочного диска).

    Информация
    Рекомендуется учитывать обьем дискового пространства рабочего каталога, который будут занимать несколько создаваемых каталогов с распакованным установочным образом
    1. Создать дополнительные рабочие каталоги mnt,squashfs,edit:
      Command

      mkdir -p ~/{mnt,squashfs,edit}

    2. Включить модуль ядра squashfs:
      Command

      sudo modprobe squashfs

    3. Примонтировать установочный образ:
      Command

      sudo mount -o loop ~/<имя_установочного_образа>.iso mnt

    4. Удалить файл:
      Command
      sudo rm ~/cd/live/filesystem.squashfs
    5. Примонтировать раздел с файловой системой squashfs:
      Command

      sudo mount -t squashfs -o loop mnt/live/filesystem.squashfs squashfs/

    6. Скопировать раздел в ранее созданный рабочий каталог edit:
      Command

      sudo cp -a squashfs/* edit

    7. Скопировать файл astra-installer-preseed.yaml в каталог с системой squashfs:
      Command

      sudo cp ~/astra-installer-preseed.yaml edit/etc/

      Раскрыть
      titleПример файла astra-installer-preseed.yaml (фоновый режим установки без диалоговых окон)
      Блок кода
      titleastra-installer-preseed.yaml
      # Автоматически подтвердить согласие с лицензией
      license: true
      
      # Список доступных языков системы
      locales:
        - ru_RU
      #  - en_US
      
      # Список доступных раскладок клавиатуры
      layouts:
        - ru
        - us
      
      # Настройки комбинации клавиш для переключения раскладки клавиатуры (alt_shift_toggle, ctrl_shift_toggle, ...)
      # grp options from /usr/share/X11/xkb/rules/base.lst
      layout_switch_keys:
        - ctrl_shift_toggle
      
      # Настройки часового пояса
      timezone: Europe/Moscow
      
      # Настройки синхронизации времени (опционально)
      # Для того, чтобы служба синхронизации времени автоматически запускалась после установки ОС следует указать ntp_state: True.
      # При этом если значение параметра ntp_settings не задано, то для синхронизации будет использоваться сервер ntp1.vniiftri.ru.
      ntp_settings:
        ntp_state: True # Статус синхронизации
        ntp_server: 'ntp1.vniiftri.ru' # Сервер для синхронизации (опционально)
      
      # Настройки пользователя
      user:
        username: astra # Имя пользователя
        # Ниже приведены примеры настройки паролей пользователя и GRUB
        # Supported plain and hashed passwords (see man chpasswd and man crypt)
        password: Testastra!357
        # или
        # password-encrypted: $6$hackmehackme$ZzN7PixBxkr6xS2Mdc9rUgjBsF/HimXDXgDGM48JOq/fBnuOKIf42/wOjwR9vA/D2Blwbz.82AGwjxnyaVntX0
        # Supported plain and encrypted GRUB passwords (see man grub-mkpasswd-pbkdf2)
        grub-password: Testastra!357
        # или
        # grub-password-encrypted: <зашифрованный пароль GRUB>
      
      host:
        # Имя хоста
        hostname: astra
        # Генерировать случайный суффикс вида "-NNNNN" к имени хоста (не обязательно)
        generate_sub_name: True
      
      # Настройки репозиториев
      # При установке по сети требуется обязательно указать в данной секции удаленный репозиторий. При установке из образа определять данную секцию не обязательно
      # repos:
      #   debootstrap:
      #     name:
      #       default: "Main repository"
      #       ru_RU: "Основной репозиторий"
      #     url: 'deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/repository-main/ 1.8_x86-64 main contrib non-free'
      
      # Ядро, которое будет установлено
      kernel-package: 6.1.50-1-generic
      
      # Список компонентов системы, которые будут установлены
      tasks:
        - Base
        - Fly
        - hidden
      
      # Идентификатор режима защищенности, который будет применен к устанавливаемой системе (в данном примере будет применен максимальный режим)
      mode: 2
      
      # Список дополнительных настроек (настройки безопасности), которые будут применены к устанавливаемой системе
      features:
        - astra-mic-control
        - astra-mac-control
      #  - astra-ptrace-lock
      #  - astra-sudo-control
      # Ниже приведены примеры конфигурации разметки
      
      # В данном примере разметка будет выполнена в соответствии с заранее прописанным шаблоном из указанного файла storage:
      #  # Device is enought. Default template will be used.
      #  device: /dev/sdb # Диск, к которому будет применена разметка, и на который будет установлена система
      #  template: default_template.txt # Файл шаблона разметки
      # Выбор типа таблицы разделов:
      # 1. Если не используется разметка дисков с помощью опции config, то указать тип таблицы разделов можно с помощью опций gpt и bios:
      #       gpt: True # Создать таблицу разделов GPT. Рекомендованный вариант.
      #       bios: True # Произвести установку системы в режиме совместимости с BIOS
      # 2. Если используется опция config, то тип таблицы разделов указывается в команде очистки разделов clearpart:
      #       clearpart --all --disklabel=gpt # Рекомендованный вариант
      #      или
      #       clearpart --all --disklabel=msdos
      
      # В данном примере полностью описывается шаблон разметки
      # Формат шаблона — Kickstart
      # Является аналогом ручной разметки
      # При установке в режиме UEFI требуется описать разделы, необходимые для данного режима. Пример такого описания включен в шаблон:
      # part /boot/efi --label=efi --fstype=ext2 --size=1024 --asprimary
      storage:
      # gpt: true # Выбор типа таблицы разделов. В данном примере не используется, так как далее для разметки диска используется опция confg,
      # позволяющая детально задать шаблон разметки.
      # Строки шаблона должны быть разделены последовательностью из двух символов "\n" (новая строка).  Опция config и шаблон разметки:
        config: "
          ignoredisk --only-use=sda|vda
      
          clearpart --all --disklabel=gpt
      
          bootloader --location=partition
      
          part biosboot --fstype=biosboot --size=2
      
          part /boot --label=boot --fstype=ext2 --size=1024 --asprimary
      
          part /boot/efi --label=efi --fstype=ext2 --size=1024 --asprimary
      
          part pv.lvm_part --grow --asprimary
      
          volgroup VG pv.lvm_part
      
          logvol / --fstype=ext4 --name=lv_root --vgname=VG --percent=100
      
          logvol swap --fstype=swap --name=lv_swap --vgname=VG --recommended"
      
      

      При наличии готового preseed.cfg допускается Конвертация формата debian-preseed в формат astra-preseed.


    8. Создать новую файловую систему для образа:
      Command

      sudo mksquashfs edit cd/live/filesystem.squashfs -b 1048576 -comp xz -Xdict-size 100% -e boot

      Где:

      •  edit каталог из содержимого которого будет создан архив со сжатой файловой системой  squashfs;

      • cd/live/filesystem.squashfs — выходной файл;
      • -b 1048576 устанавливает размер блока (в байтах), который будет использоваться при создании образа;
      • -comp xz — указывает использовать алгоритм сжатия `xz`. XZ — формат контейнера для архивов, использующий алгоритм сжатия LZMA2;
      • -Xdict-size 100% — задает размер словаря для алгоритма сжатия. В данном случае `100%` означает, что размер словаря будет равен размеру блока;
      • -e boot — исключает каталог /boot.
    9. Записать параметры файловой системы на образ:
      Command

      sudo du -sx --block-size=1 edit | cut -f1 | sudo tee cd/live/filesystem.size

    10. Указать имя образа последовательно выполнив команды:
      Command

      echo "custom-astra" | sudo tee cd/README.diskdefines

      Где custom-astra — имя модифицированного установочного образа.

      Раскрыть
      titleПример сценария модификации образа с astra-installer
      Блок кода
      titlecustom_astra-installer.sh
      #!/bin/bash
      
      # установить режим пошаговой отладки
      set -xe
      # имя установочного образа
      ISONAME="custom-astra.iso";
      
      #Для добавления пользовательского файла _astra-installer-preseed.yaml_ просим выполнить следующие действия:
      
      #1. Создать основной рабочий каталог liveCD и подкаталоги:
      mkdir -p ~/{mnt,squashfs,edit}
      
      #2. Перейти в основной рабочий каталог:
      cd ~/
      
      #3. Примонтировать live-образ:
      sudo mount -o loop ~/$ISONAME mnt
      
      #4. Удалить файл:
      sudo rm ~/cd/live/filesystem.squashfs
      
      #5. Включить модуль ядра squashfs:
      sudo modprobe squashfs
      
      #6. Примонтировать раздел с файловой системой squashfs:
      sudo mount -t squashfs -o loop mnt/live/filesystem.squashfs squashfs/
      
      #7. Скопировать раздел в ранее созданный рабочий каталог edit:
      sudo cp -a squashfs/* edit
      
      #8. Скопировать файл _astra-installer-preseed.yaml_ в каталог с системой squashfs:
      sudo cp ~/astra-installer-preseed.yaml edit/etc/
      
      #9. Создать новую файловую систему для образа:
      sudo mksquashfs edit cd/live/filesystem.squashfs
      
      #10. Записать параметры файловой системы на образ:
      sudo du -sx --block-size=1 edit | cut -f1 | sudo tee cd/live/filesystem.size

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

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

    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

    1. Выполнить создание chroot-образа из примонтированного дистрибутива:

      Информация

      На момент последнего обновления настоящей статьи для выполнения данной проверки с использованием образа Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) на обновлениях Astra Linux, выпущенных до очередного обновления 1.8, необходимо использовать пакеты debootstrap и debian-archive-keyring из очередных обновлений 1.7 и 1.6 в соответствии с версией очередного обновления (см. Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов).

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

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

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

      Command
      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.

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

      Command
      sudo rm -fr /var/lib/apt/lists/*
    3. Обновить списки пакетов:

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

      Command
      apt policy <имя_добавленного_пакета>
    5. Удалить файл 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. Перейти в директорию куда был распакован образ:
      Command

      cd cd

    3. Уточнить путь до загрузчиков для дальнейшего указания в параметрах сборки ISO-образа:
      Command

      find * -type f -name "*.img" -o -name "*.cat"

    4. Собрать модифицированный ISO-образ выполнив команду:

      1. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) с astra-installer:

        Command

        sudo xorriso -as mkisofs -joliet -partition_cyl_align "off" -iso-level 4 -full-iso9660-filenames -eltorito-boot boot/grub/bios.img -eltorito-catalog boot/grub/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info --protective-msdos-label --grub2-mbr $HOME/isohdpfx.bin -eltorito-alt-boot -efi-boot-part --efi-boot-image boot/grub/bios.img -e EFI/boot/efiboot.img -no-emul-boot -o ../my-custom-astra1_8.iso

        Где :

        • -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.

          Информация

          Опция -no-emul-boot указывается дважды после файлов-загрузчиков

      2. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8) с debian-installer (есть метка di в названии загруженного образа) и более ранние очередные обновления:
        Command

        sudo xorriso -as mkisofs -isohybrid-mbr $HOME/isohdpfx.bin -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -V "ASTRA_ISO" \
        -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -append_partition 2 0xef boot/grub/efi.img \
        -o ../my-custom-astra1_8di.iso .

        Где : опция -V определяет метку (volume id) создаваемого образа (в примере использована метка ASTRA_ISO), опция -o определяет имя файла, в который будет записан образ (в примере - my-custom-astra.iso).

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

    Раскрыть
    titleПример общего сценария сборки модифицированного образа
    Command
    TitlemakeISO.sh
    #!/bin/bash
    #set -e;
    
    #режим отладки
    #set -x;
    
    WORKDIR="cd";
    cd  $HOME/$WORKDIR;
    
    ISONAME="custom-astra.iso";
    GRUB=`find * -type f -name "boot.cat"`;
    
    read -p "Введите имя образа(по умолчанию custom-astra.iso): " NAME;
    if [ ! -z $NAME ];  then
    ISONAME="../${NAME}.iso"
    fi;
    # КОМАНДЫ СБОРКИ ОБРАЗОВ
    function gen_iso_ai { BIOS=`find * -type f -name "bios.img"`; EFI=`find * -type f -name "efiboot.img"`; sudo xorriso -as mkisofs -joliet -partition_cyl_align "off" -iso-level 4 -full-iso9660-filenames -eltorito-boot $BIOS -eltorito-catalog $GRUB -no-emul-boot -boot-load-size 4 \
    -boot-info-table --grub2-boot-info --protective-msdos-label --grub2-mbr $HOME/isohdpfx.bin -eltorito-alt-boot -efi-boot-part --efi-boot-image $BIOS -e $EFI -no-emul-boot -o ~/$ISONAME . } function gen_iso_di {
    ISOEFI="boot/grub/efi.img"; cd sudo xorriso -as mkisofs -isohybrid-mbr isohdpfx.bin -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c $GRUB -V "ASTRA_ISO" \ -eltorito-alt-boot -e $ISOEFI -no-emul-boot -isohybrid-gpt-basdat -append_partition 2 0xef $WORKDIR/$ISOEFI \ -o $ISONAME ~/$WORKDIR }
    # ПРОВЕРКА ВЕРСИИ УСТАНОВЩИКА ОС
    CHECK=`find . -type d -name "isolinux"` if [ -z $CHECK ]; then gen_iso_ai else gen_iso_di fi

    Состав каталогов, содержащих загрузочные образы (и, соответственно, файл pressed.cfg), различается в разных дистрибутивах, в частности может отсутствовать каталог hd-media. 

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

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

    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-образом модифицированного дистрибутива

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

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

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

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

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

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