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

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

Ключ

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


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

Оригинальная статья: https://wiki.debian.org/DebianInstaller/Modify/CD


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

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

Введение

Введение

В данной статье рассматривается создание модифицированного установочного диска путем создания загрузочного образа с измененным составом deb-пакетов. Модифицированный образ создается на основе стандартного образа установочного диска Astra Linux Special Edition. Модификация подразумевает изменение состава DEB-пакетов и preseed-сценария. Подразумевается, что служебные пакеты (udebs) не изменяются. Для изменения пакетов udeb используется отдельная процедура (см. how to build a full image with a custom kernel). Новый образ создается с использованием образа стандартного установочного диска (и, по необходимости, других дисков).  Все основные действия выполняются от имени непривилегированного пользователя, привилегии суперпользователя (в Astra Linux Special Edition с включенным МКЦ - привилегий суперпользователя с высоки уровнем целостности) требуются только для установки пакетов, монтирования носителей (если используется) и операции записи созданного образа на носитель.

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

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

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

  1. В
При написании статьи использовался ISO-образ установочного диска
  1. Astra Linux Special Edition
РУСБ.10015-01 (очередное обновление 1.7) сохраненный в файле 1.7.0-11.06.2021_12.40.iso. Для распаковки образа:
  1. x.8 подключить расширенный репозиторий, в более ранних обновлениях подключить репозиторий со средствами разработки. Порядок подключения репозиториев см. в статье Подключение репозиториев с пакетами в ОС Astra Linux и установка пакетов .
  2. Установить необходимые пакеты
    Установить пакет bsdtar, если он не был ранее установлен
  1. :
    Command
    sudo apt install reprepro xorriso build-essential debootstrap

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

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

  1. Создать подкаталог

    bsdtarСоздать подкаталог

    для распаковки:

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

    Command
    bsdtar -xf Загрузки/1.7.0-11.06.2021_12.40.iso -C ~/cd
    xorriso -osirrox on -indev путь_к_файлу.iso -extract / cd
  3. Для выполнения дальнейших модификаций разрешить

    Разрешить

    запись в распакованные файлы:

    Command
    chmod -R +w ~/cd

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

В составе распакованного образа важны следующие каталоги:

  • каталог ~/cd/pool/ содержит пакеты, и в него должны добавляться дополнительные пакеты;
  • каталог ~/cd/dists/1.7.0_x86-64/main/binary-amd64 содержит список пакетов (файл Packages.gz) и файл Release.

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

  • не используя права суперпользователя распаковать образ диска с помощью команды bsdtar скопировать их в соответствующие подкаталоги каталога с распакованным ISO-образом ~/cd/pool;
  • используя права суперпользователя примонтировать диск (образ диска) и так же выполнить копирование;

Ненужные пакеты можно просто удалить.

Обновление индексов Packages, Release и контрольных сумм md5sum.txt

После изменения состава пакетов необходимо обновить индексные файлы (Packages, Packages.gz и Release) и контрольные суммы (файл md5sums.txt). Для этого:

Создать файл onfig-deb со следующим содержимым:

Блок кода
# Указание на подкаталог, содержащий распакованный диск
Dir { ArchiveDir "cd"; };
# Указание на начало дерева каталогов, содержащих deb-файлы
TreeDefault { Directory "pool/"; };
# Указание на расположение файла Packages
BinDirectory "pool/main" { Packages "dists/1.7_x86-64/main/binary-amd64/Packages"; };
# Расширение индексируемых файлов
Default { Packages { Extensions ".deb"; }; };
apt-ftparchive generate config-deb

to generate Packages and Packages.gz files.

One way of updating the Release file in cd/dists/stretch/ is to delete everything in the file from the MD5Sum: line to the end of the file
sed -i '/MD5Sum:/,$d' cd/dists/stretch/Release

followed by (editing the file, if desired)

apt-ftparchive release cd/dists/stretch >> cd/dists/stretch/Release

The md5sum of any image file has to accord with what is in cd/md5sum.txt. Regenerate it with 

cd cd; md5sum `find ! -name "md5sum.txt" ! -path "./isolinux/*" -follow -type f` > md5sum.txt; cd ..

It is likely there will be warning message, which appears not to affect the production of an md5sum.txt:

find: File system loop detected; ‘./debian’ is part of the same file system loop as ‘.’.

Including Override Information

The new image to be created will differ from the image it is based on, if only because of the extra packages it contains. As it stands at this stage, another difference between the new image and DVD-1 (say) lies in the Packages file content. In the course of producing this file no account was taken of the centrally managed override file. Although not critical, the absence of override information could be seen as a defect; fortunately, it is an easy one to rectify.

The purpose of an override file is explained here. To illustrate the intention: the package description for less has a Priority field value of important. This is considered by the Debian archive maintainers to be too high, so it is adjusted via an override file to standard, which is what is used in constructing the installer to determine what is installed. As it happens, a user argued against this downgrading, with the result that less has returned to Priority: important for Debian 10 (buster).

In the config-deb file change

BinDirectory "pool/main" {
   Packages "dists/stretch/main/binary-i386/Packages";
};

to

BinDirectory "pool/main" {

   Packages "dists/stretch/main/binary-i386/Packages";
   BinOverride "override";
   ExtraOverride "override.extra";
 };

and add this snippet:

Dir {

   ArchiveDir "cd";
   OverrideDir "indices";
   CacheDir "indices";
 };

Obtain override files from a mirror, put uncompressed versions (use gunzip) in the created directory cd/indices/override and carry out the previous procedures.

Creating a New Image

The original installation image (DVD-1) was designed to be bootable after being burned to a CD, DVD or BD medium or written to a USB device such as a USB stick. The next three commands will achieve this versatility for Legacy BIOS and for EFI in Legacy/CSM mode. xorriso is the package required to create a hybrid image, one which can be booted both from CD/DVD/BD media as well as from a usb key drive. isolinux will also need to be on the system. 

chmod -R -w cd
dd if=debian-9.3.0-i386-DVD-1.iso bs=1 count=432 of=isohdpfx.bin
xorriso -as mkisofs -o test.iso \
-isohybrid-mbr isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table ./cd

The dd command is advised so that isohdpfx.bin and isolinux.bin stem from the same version of SYSLINUX. It is safer but, without it, you could still find the xorriso command to be successful with /usr/lib/ISOLINUX/isohdpfx.bin in its place.

Insert the key into a USB port and use lsblk to find its block device, /dev/sdX. Then, as root (using su or sudo), write the image to a usb key drive:

dd if=test.iso bs=4M of=/dev/sdX; sync

or, as an ordinary user, burn the image to a CD, DVD, or BD medium in drive /dev/sr0:

xorriso -as cdrecord -v dev=/dev/sr0 -eject test.iso

For a medium which is bootable from a cdrom only, genisoimage can be used in place of xorriso. To make the cdrom bootable, you need to run genisoimage with appropriate parameters. Here is how to do it for x86/amd64, using isolinux for Legacy BIOS. For instructions on how to re-use the full boot equipment of installation ISOs for i386, amd64, arm64 and other architectures, see RepackBootableISO.

cd cd

genisoimage -o test.iso -r -J -no-emul-boot -boot-load-size 4 \
-boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./cd 

Installing From the New Image

Installing Debian from the new i386 ISO is just a matter of providing a computer's input device with it, booting from it and choosing the installation method. Perhaps, however, there is one thing to be aware of, depending on how it is intended to use the archive after installation. With a connection to the internet any package updates that are available (security updates, for example) would normally be pulled in during the installation of the image. Archive information would now become outdated and some packages from an archive would be uninstallable. If this is unwanted, use one of these two solutions:

  • Dispense with a network connection during the installation.
  • Press the TAB key at the boot menu and add pkgsel/upgrade=none to the command line (after quiet).

On the other hand, if the intention is to have access to stable updates and security fixes on the installed system, add

after the package archive entry.

Packages not available in the package archive will come from deb.debian.org.

Accessing the New Image's Archive

At first boot of the new operating system /etc/apt/sources.list will have a line something like this:

deb cdrom:[Debian GNU/Linux 9.3.0 _Stretch_ - Official i386 NETINST 20171209-13:03]/ stretch contrib main non-free

Change that to

deb [trusted=yes] cdrom:[Debian GNU/Linux 9.3.0 _Stretch_ - Official i386 NETINST 20171209-13:03]/ stretch contrib main non-free

apt update

should now produce a positive outcome.

Assuming the installation image and the archive is held on a a USB device, its block device (found from lsblk), can be mounted (as root) with

mount /dev/sdX /media/cdrom

and packages installed with

apt install <package>

Alternatively, a USB devices's LABELs can be found from

  • lsblk -f

and used for automatic mounting as described below. Automatically mounting a partition on the device when it is accessed and automatically unmounting it when access to it is not wanted can be done with an entry in /etc/fstab. All the parameters necessary for this to happen are available from systemd 220 onwards and explained in the systemd.mount manual. Comment out any /dev/srX entry in /etc/fstab.

  • LABEL=ISOIMAGE /media/cdrom0 iso9660 defaults, noauto,x-systemd.automount,x-systemd.idle-timeout=5,x-systemd.device-timeout=1 0 0

  • x-systemd.automount mounts /media/cdrom when any command wants to use it.

  • systemd.idle-timeout leads to unmounting the partition a specified time period after the calling program ceases to access it.

  • noauto causes /media/cdrom not to be mounted while the machine is booting.

  • x-systemd.device-timeout configures how long systemd should wait when no device is plugged in or an incorrect device is found.

On a running system, do

  • systemctl daemon reload

followed by

  • systemctl restart media-cdrom0.automount

after changing /etc/fstab.

Miscellaneous

The account in the previous sections should be sufficient to obtain a bootable, remastered ISO image. The following material was part of the original page and is left here in the event that some of it could prove useful.

Files and hooks

A list of hooks available for debian-installer: https://d-i.debian.org/doc/internals/apb.html

 (filepaths as seen from the installer)

List of packages (udebs) to install or not install in into the d-i ramdisk.

  ''cdrom''.disk/udeb_include ["anna"]
  ''cdrom''.disk/udeb_exclude

The content of these files are taken as lists of packages to install or not into the target area.

  ''cdrom''.disk/base_include [base-installer]
  ''cdrom''.disk/base_exclude

If the file ''cdrom''.disk/base_installable exists, the base-installer udeb selects the cdrom as source for the installation.

Alternate Method

If you use apt-move to store the packages apt downloads when updating your system, you can use the mirror it creates to fill the cdrom with all the packages on your current system. Remember to call "apt-move sync" before mastering the image, to make sure, all dependencies are met.

Helper scripts: diunpk, dipk

Here are example scripts for unpacking and packing d-i CD image file. You need to have aufs modules available.

* diunpk: execute this with d-i.iso file as its argument. This generates tree under dated directory and cd into it.

#!/bin/sh -e
# Local customization to match your id (check with 'id' command).
uid=1000
gid=1000

# Default values
# $1 d-i iso image file
# $2 d-i ro mount point
# $3 d-i rw tree

di_iso=${1:-d-i.iso}
di_ro=${2:-d-i.ro}
di_rw=${3:-d-i.rw}

pwd=$(pwd)
timestamp=$(date -u +%Y%m%d%H%M%S)
mkdir $timestamp

mkdir $timestamp/$di_ro
mkdir $timestamp/$di_rw

sudo mount ${di_iso} $timestamp/${di_ro} -t iso9660 -o loop,uid=${uid},gid=${gid}
sudo mount -t aufs -o br:$timestamp/${di_rw}:$timestamp/${di_ro} none $timestamp/${di_rw}
sudo chmod u+w $timestamp/${di_rw}
sudo chmod u+w $timestamp/${di_rw}/md5sum.txt
sudo find $timestamp/${di_rw}/dists -exec chmod u+w {} \;
sudo find $timestamp/${di_rw}/pool  -type d -exec chmod u+w {} \;
cd $timestamp

* dipk: execute this in dated directory.

#!/bin/sh -e
set -x
# Local customization
uid=1000
gid=1000
arch=amd64
release=squeeze

# Default values
# $1 d-i iso image file
# $2 d-i ro mount point
# $3 d-i rw tree

di_iso=${1:-d-i.iso}
di_ro=${2:-d-i.ro}
di_rw=${3:-d-i.rw}

cat > config << EOF
Dir {
    ArchiveDir ".";
    OverrideDir ".";
    CacheDir ".";
 };
            
 TreeDefault {
    Directory "pool/";
 };
                    
 BinDirectory "pool/main" {
    Packages "dists/${release}/main/debian-installer/binary-${arch}/Packages";
 };
                                   
 Default {
    Packages {
        Extensions ".udeb";
    };
 };
EOF

cd $di_rw
sudo apt-ftparchive generate ../config
sudo md5sum $(find ! -name "md5sum.txt" ! -path "./isolinux/*" -follow -type f) > md5sum.txt
cd -

#genisoimage ...
sudo genisoimage -r -o $di_iso -V di$(date -u +%m%d%H%M%S) \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table $di_rw

# check mounted by "mount"
#sudo umount ${di_rw}
#sudo umount ${di_ro}
#rm -rf $di_rw

Create a udeb packages file

Write a config-udeb file with something like this :

 Dir {
    ArchiveDir "cd";
    OverrideDir "indices";
    CacheDir "indices";
 };
            
 TreeDefault {
    Directory "pool/";
 };
                    
 BinDirectory "pool/main" {
    Packages "dists/squeeze/main/binary-i386/Packages";
    BinOverride "override";
    ExtraOverride "override.extra";
 };
                                   
 Default {
    Packages {
        Extensions ".udeb";
    };
 };

Because of the BinOverride line you also need the override file, you can get it from any debian mirror, e.g. get http://ftp.de.debian.org/debian/indices/override.squeeze.main.gz and extract it to the indices/override.

Now go into the directory with your config file and run

apt-ftparchive generate config-udeb

to generate the Packages and Releases files.

To update the cd/dists/squeeze/Release file, make a new text file called config-rel with something like this:

APT::FTPArchive::Release::Codename "squeeze";
APT::FTPArchive::Release::Origin "Debian";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "Debian";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Suite "testing";

To generate the Release file, run

 # apt-ftparchive -c config-rel release cd/dists/squeeze > cd/dists/squeeze/Release

See Also

DebianInstaller/Modify/CD (last modified 2019-10-30 18:17:36)

  • Debian privacy policy, Wiki team, bugs and config.
  • В результате этого шага в подкаталоге /cd домашнего каталога текущего пользователя будет создан подкаталог /cd с копией содержимого образа установочного диска, и будет разрешено вносить изменения в содержимое этой копии.

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

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

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

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

      например:

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

      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. Импортировать экспортированный ключ в комплект ключей:

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

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

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

        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 для восстановления репозитория:

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

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

      Command

      echo 'Origin: Astra
      Codename: 1.8_x86-64
      Suite: stable
      Version: 1.8.1
      Architectures: amd64
      Components: main contrib non-free
      UDebComponents: main
      SignWith: yes' > ~/cd/conf/distributions

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

    Приведенная для примера конфигурация использует дистрибутив Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.8, архитектуру amd64, компоненты main,contrib,nonfree. При использовании других дистрибутивов параметры конфигурации должны быть откорректированы.


    Далее:

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

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

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

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

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

    Замена файла конфигурации установки 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:
      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. Отмонтировать накопитель.
    2. При использовании немодифицируемых установочных носителей (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> выбрать способ установки (графический или текстовый).

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

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

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

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

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

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

    • install.amd/initrd;
    • install.amd/gtk/initrd;
    • hd-media/initrd (может отсутствовать в дистрибутиве);
    • hd-media/gtk/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 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 cd/boot/grub/efi.img \
        -o my-custom-astra.iso ~/cd

        Где : опция -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
    Powered by MoinMoin and Python, withhosting provided by Metropolitan Area Network Darmstadt.