README.md

Пересборка/модификация установочных образов Astra linux

Создание/Модификация deb репозитория

Модификация squashfs (live системы)

Версия stable: 20260428_01

В pdf/docx файле инструкция с изображениями (также есть видеофайлы)

GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001


Оглавление

  1. Описание файлов скриптов
    1. old-createiso.sh
    2. copy-source-installer.sh
    3. create-deb.sh
    4. create-iso-debian-installer.sh
    5. create-iso-live-installer.sh
  2. Модификация репозитория
    1. Создание и экспорт ключа подписи
    2. Создание репозитория и импорт пакетов
      1. fly-admin-repo
      2. Терминальные команды
    3. Пересборка tasksel-data и других deb пакетов
      1. Изменение списка категорий и ПО для установки
      2. Локализация списка категорий
  3. Пересборка/модификация debian инсталлятора
    1. Выполнение команд в финале установки/изменение preseed.cfg
  4. Пересборка/модификация live инсталлятора
    1. Внесение изменений в squashfs
      1. Доп. Действия для live installer при модификации репозитория
      2. Выполнение команд в финале установки
      3. Установка/Удаление ПО в live системе
      4. Механизм копирования файлов в устанавливаемую систему
      5. Добавление переноса системы на btrfs subvolume в конце установки

Описание

Скрипты и инструкция по пересборке/модификации установочных iso образов Astra linux (Debian installer и live installer) и подобных по структуре установщиков.

Раздел инструкции по модификации live installer написан на версии 1.8.5. Не подходит для версий ниже. Может потребовать изменений для версии выше при изменении инсталлятора разработчиками.

По любым вопросам и проблемам со скриптами обращайтесь в личные сообщения Вконтакте.


1.Описание файлов скриптов

1.1.old-createiso.sh

Старая реализация скрипта со всеми функциями в одном файле.

Оставлена для альтерантивы, дорабатываться не будет.

1.2.copy-source-installer.sh

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

При запуске рядом с файлом скрипта создаются следующие новые каталоги:

  • iso-in – Содержит iso файлы;

  • iso-temp – Содержит каталоги сборки со скопированным содержимым iso файла;

  • iso-mount – Каталог для монтирования iso файлов;

  • repo – Каталог для создания в нём репозиториев.

Источник копирования определяется в следующем порядке:

  • 1.Если файлу скрипта передан путь к iso при запуске, то монтирование его в $isomountpath и использование в качестве источника копирования, если в нем есть каталоги EFI,dists,pool. Например, ./copy-source-installer.sh "/opt/install.iso"

  • 2.Если путь к источнику копирования пуст, то проверка /media/cdrom на наличие каталогов EFI,dists,pool. Если они существуют, т.е подключен диск инсталлятора, то задается вопрос использовать ли /media/cdrom в качестве источника копирования.

  • 3.Если путь к источнику копирования пуст, то создание списка iso файлов из каталога $isoinpath и предложение выбрать файл для монтирования. Если в смонтированном iso есть каталоги EFI,dists,pool, то использовать его в качестве источника копирования.

  • 4.Если путь к источнику копирования пуст и установлен zenity, то предлагается выбрать iso файл для монтирования через диалоговое окно. Если в смонтированном iso есть каталоги EFI,dists,pool, то использовать его в качестве источника копирования.

После определения источника копирования будет задан вопрос Хотите ввести имя каталога назначения сами?. В случае отказа, имя каталога, куда будет скопировано содержимое iso, будет сформировано по условию команды скрипта.

Для live инсталлятора live-installer_$(date +"%Y%m%d-%H%M%S.%3N").

Для debian инсталлятора debian-installer_$(date +"%Y%m%d-%H%M%S.%3N").

1.3.create-deb.sh

Скрипт для перепаковки deb пакетов.

При запуске рядом с файлом скрипта создаются следующие новые каталоги:

  • Deb-in - Каталог с deb пакетами для распаковки;

  • Deb-out - Каталог с собранными deb пакетами;

  • Deb-temp - Каталог с распакованными deb пакетами.

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

  • 1.Распаковать Deb пакет;

  • 2.Запаковать Deb пакет;

  • 3.Распаковать все Deb пакеты;

  • 4.Запаковать все Deb пакеты.

При запаковке всех DEB пакетов имена файлов формируются на основе информации из файла control в следующем формате: имя-пакета_версия_архитектура.deb

1.4.create-iso-debian-installer.sh

Скрипт для перепаковки Debian installer.

При запуске рядом с файлом скрипта создаются следующие новые каталоги:

  • iso-temp - Содержит каталоги сборки со скопированным содержимым iso файла;

  • iso-out – Каталог с собранными iso файлами;

  • repo - Содержит каталоги репозиториев (может содержать символьные ссылки).

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

  • 1.Скопировать репозиторий в каталог сборки;

  • 2.Распаковать initrd console;

  • 3.Запаковать initrd console;

  • 4.Распаковать initrd gtk;

  • 5.Запаковать initrd gtk;

  • 6.Собрать iso;

  • 7.Установить xorriso и isolinux.

1.5.create-iso-live-installer.sh

Скрипт для перепаковки live installer Astra linux.

При запуске рядом с файлом скрипта создаются следующие новые каталоги:

  • iso-temp - Содержит каталоги сборки со скопированным содержимым iso файла;

  • iso-out - Каталог с собранными iso файлами;

  • repo - Содержит каталоги репозиториев (может содержать символьные ссылки);

  • live-squashfs - Содержит каталоги с распакованным squashfs образами.

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

  • 1.Скопировать репозиторий в каталог сборки;

  • 2.Распаковать filesystem.squashfs;

  • 3.Запаковать filesystem.squashfs;

  • 4.Собрать iso;

  • 5.Установить xorriso, squashfs-tools и grub-pc-bin.


2.Модификация репозитория

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

2.1.Создание и экспорт ключа подписи

Создайте или импортируйте ключ для подписи репозитория через KGpg или терминал (выставьте абсолютное доверие к ключу и назначьте его используемым по умолчанию). Экспортируйте открытый ключ, который будет использоваться для доступа к репозиторию, в файл.

Создание ключа (Есть видео в каталоге инструкций):

gpg --full-generate-key

Экспорт публичного ключа:

gpg --armor --export "имя-ключа" > public-key.asc

Экспорт приватного ключа:

gpg --armor --export-secret-keys "имя-ключа" > private-key.asc

Импорт ключа:

gpg --import key.asc

Назначить абсолютное доверие указанному ключу:

echo -e "5\ny\n" | gpg --command-fd 0 --edit-key "ИД-ключа" trust

Информация об открытых ключах:

gpg --list-keys

Информация о закрытых ключах:

gpg --list-secret-keys

Если вам нужен бинарный формат ключа при экспорте, то уберите опцию --armor.

Если нужно изменить ключ по умолчанию в неинтерактивном режиме, то замените/добавьте значение ИД-ключа в строке default-key в файле .gnupg/gpg.conf в домашнем каталоге пользователя.

Если вы запускаете KGpg или fly-admin-repo из терминала и у вас возникает ошибка при запросе пароля к ключу, то введите в терминале export GPG_TTY=$(tty). Это перенаправит запрос пароля ключа в терминал.


2.2.Создание репозитория и импорт пакетов

2.2.1.fly-admin-repo

Описанный способ изменения репозитория через fly-admin-repo удобен тем, что визуально видно все пакеты с неудовлетворенными зависимостями.

  • 1.Запустите fly-admin-repo и создайте репозиторий.

◦ Укажите путь до каталога, где будет находится репозиторий (путь к созданному скриптом ( copy-source-installer.sh / create-iso-debian-installer.sh / create-iso-live-installer.sh ) каталогу repo);

Вы можете создать каталог репозитория в любом удобном для вас месте, а потом сделать символьную ссылку на данный каталог в каталоге repo.

◦ Заполните поля с информацией о репозитории в соответствии с исходным репозиторием;

◦ Поставьте галочки на Создать Contents-*.gz file и Подписать репозиторий.

  • 2.Выполните импорт репозитория: Файл –>Импорт–>Импорт репозитория

Выберите для импорта каталог pool c установочного диска или каталога сборки.

Ожидайте, пока репозиторий импортируется.

2.2.2.Терминальные команды

  • 1.Установите пакет reprepro: sudo apt install reprepro

  • 2.Создайте каталог репозитория: mkdir -p /путь-к-репозиторию/conf

  • 3.Создайте distributions (конфигурационный файл репозитория).

Пример команды (ваш конфигурационный файл может отличаться от приведенной мной команды):

echo -e 'Origin: Debian\nCodename: 1.8_x86-64\nSuite: stable\nVersion: 1.8.5\nArchitectures: amd64\nComponents: main contrib non-free non-free-firmware\nUDebComponents: main contrib non-free non-free-firmware\nSignWith: yes\nContents: . .gz' > /путь-к-репозиторию/conf/distributions

Подробное описание всех опций конфигурационного файла, параметров вызова команды и переменных окружения см. в справочной системе man: man reprepro.

  • 4.Для инициализации нового репозитория выполните команду (будут созданы необходимые базы данных и каталоги): reprepro --ask-passphrase -b <путь_к_репозиторию> export

  • 5.Наполнить репозиторий пакетами из каталога pool (выполните обе команды):

Добавить deb пакеты:

find "путь-к-каталогу-pool" -name "*.deb" -exec reprepro --ask-passphrase -b "путь-к-репозиторию" includedeb "Codename-репозитория" {} \;

Добавить udeb пакеты:

find "путь-к-каталогу-pool" -name "*.udeb" -exec reprepro --ask-passphrase -b "путь-к-репозиторию" includeudeb "Codename-репозитория" {} \;

Импорт репозитория довольно длительный процесс (рекомендуется сохранить пароль от ключа подписи в связке ключей).

После импорта репозитория вы можете вносить в него любые необходимые вам изменения. При добавлении/удалении пакетов помните о зависимостях.

Примечание!

Репозитории debian и live установщиков astra linux 1.8.5.46 полностью совпадают, т.е. при необходимости можно из одного импортированного репозитория собрать 2 установщика. На других версиях, при необходимости, сначала проверьте, что репозитории обоих установщиков совпадают.


2.3.Пересборка tasksel-data и других deb пакетов

Если вы делали изменения в репозитории, то необходимо пересобрать deb пакет tasksel-data, как минимум для того, чтобы добавить в него открытый ключ вашего репозитория.

  • Запустите скрипт create-deb.sh. Рядом с файлом скрипта будут созданы необходимые каталоги (подробнее в разделе описания скриптов).

  • Скопируйте deb пакет tasksel-data из репозитория в каталог Deb-in (пример пути к файлу в репозитории .../pool/main/t/tasksel/tasksel-data_2.78+astra254_all.deb).

  • Распакуйте пакет.

  • Содержимое распакуется в каталог Deb-temp.

  • Выполните необходимые вам изменения и соберите пакет.

В каталоге распакованного пакета создайте каталог /etc/apt/trusted.gpg.d и поместите в него файл открытого ключа, которым вы подписали репозиторий (т.е. у вас будет путь каталог-распакованного-пакета/etc/apt/trusted.gpg.d).

Пример содержимого для debian installer: installer-debian/tasksel-data

Пример содержимого для live installer: installer-live/tasksel-data

  • Собранный пакет будет в каталоге Deb-out.

2.3.1.Изменение списка категорий и ПО для установки

В этом же пакете tasksel-data в файле debian-tasks.desk при необходимости редактируется список категорий и их содержимого для выбора при установке.

Для Debian инсталлятора достаточно изменения только debian-tasks.desk.

В live инсталляторе, если в debian-tasks.desk добавлялись или удалялись категории, необходимо внести дополнительные изменения в установщик, который находится в filesystem.squashfs (информация о необходимых действиях находится в разделе 4.1.1. Доп. Действия для live installer при модификации репозитория).

Файл находится по следующему пути: /usr/share/tasksel/debian-tasks.desk в каталоге распакованного пакета tasksel-data. Вы можете отредактировать состав пакетов в существующих категориях этого файла, удалить ненужные категории, добавить свои.

Пункт Relevance действует для дистрибутива с установщиком Debian. В live он тоже обязателен для корректности файла, но не используется установщиком (Для live installer позиция пункта в меню выбора соответствует расположению категории в файле debian-tasks.desk).

Relevance – это сортировка пунктов при выводе в инсталляторе. Чем значение выше, тем выше будет этот пункт. Разные категории могут иметь один и тот же номер, тогда порядок этих категорий будет выставлен автоматически между всеми категориями с этим номером.

Test-new-install задает состояние категории по умолчанию.

  • mark mark — категория выбрана;

  • show show — категория не выбрана;

  • install install — категория устанавливается автоматически.

Description — отображаемое имя категории. Допустимо использовать дефис для связки слов, например: WEB-сервер, Chromium-gost. Если предполагается до/после дефиса ставить пробел, то используйте тире для корректного отображения.

Draw.io — программа для создания диаграмм и схем

вместо

Draw.io - программа для создания диаграмм и схем

При изменении debian-tasks.desk не забудьте загрузить в репозиторий все указанные вами новые пакеты и зависимости к ним.

Скачать указанные пакеты и все зависимости к ним: sudo apt -d install имена-пакетов

Скачать зависимости к пакетам расположенным в файловой системе (откройте терминал, где расположены deb пакеты и выполните команду): sudo apt -d install ./*deb

Скачанные пакеты будут расположены в каталоге: /var/cache/apt/archives

Рекомендуется выкачивать пакеты на чистой системе, чтобы автоматически скачались все зависимости к ним.

2.3.2.Локализация списка категорий

Если в debian-tasks.desc вы используете английские названия категорий, то для локализации на русский, если это необходимо, внесите изменения в файл локализации debian-tasks.mo. Вы можете использовать нужный язык в названии категорий прямо в debian-tasks.desc, если нет необходимости в многоязычности.

Файлы с расширением .mo являются скомпилированными бинарными файлами локализации, которые используются программами для отображения интерфейса на разных языках. Напрямую редактировать их текстовым редактором нельзя.

  • 1.Перейдите в каталог с нужным файлом локализации в распакованном tasksel-data, например, .../usr/share/locale/ru/LC_MESSAGES/

  • 2.Декомпиляция в формат .po:

msgunfmt debian-tasks.mo -o debian-tasks.po
  • 3.Редактирование файла .po:

В файле найдите нужную строку msgid (оригинал) и измените соответствующее ей значение msgstr (перевод).

Если в debian-tasks.desc были добавлены новые категории, то добавьте для них перевод по аналогии с имеющимися записями.

  • 4.Обратная компиляция в .mo:
msgfmt debian-tasks.po -o debian-tasks.mo

3.Пересборка/модификация debian инсталлятора

  • 1.Скопируйте содержимое инсталлятора в каталог сборки. Доступен удобный скрипт copy-source-installer.sh (подробнее в разделе описания скриптов).

  • 2.Запустите скрипт create-iso-debian-installer.sh. Рядом с файлом скрипта будут созданы необходимые каталоги (подробнее в разделе описания скриптов).

  • 3.Если необходимо изменить состав пакетов репозитория или отредактировать списки категорий ПО в файле debian-tasks.desk, то выполните инструкции из раздела 2.Модификация репозитория.

  • 4.Если необходимо изменить preseed.cfg, то распакуйте initrd, внесите изменения и запакуйте initrd обратно.

  • 5.Если необходимо выполнить команды в финале установки, читайте раздел 3.1.

  • 6.Перед сборкой iso выполните пункт Установить xorriso и isolinux, если данные пакеты еще не установлены.

  • 7.Если вы изменили репозиторий, то выполните пункт Скопировать репозиторий в каталог сборки.

  • 8.Соберите iso.


3.1.Выполнение команд в финале установки/изменение preseed.cfg

Для Debian installer, если необходимо выполнить скрипты в финале установки, создайте файл скрипта в распакованном пакете tasksel-data или используйте предоставленную мной структуру tasksel-data. Для редактирования tasksel-data выполните инструкции из раздела 2.Модификация репозитория.

Помимо фиксированных скриптов вы можете сделать скрипт, в который будут добавляться команды для выполнения из собранных определенным образом deb пакетов, если они выбраны для установки (механизм опционального выполнения скриптов в финале установки). Пример содержимого пакета для опционального добавления выполняемых в финале команд находится в каталоге df-cryptoprocsp-inst. Данный метод полезен для ПО, которое не может быть установлено стандартным путем, а только в конце установки.

Например, я делаю так в debian installer astra linux. В каталоге распакованного пакета tasksel-data я создаю каталог opt/install-files-programm и в него помещаю скрипты (полный путь каталог-распакованного-пакета/opt/install-files-programm). Запускаемый в финале скрипт у вас будет 1 (в моем случае, это postinstos.sh), а дополнительные скрипты и команды запускаются из него.

Для запуска скрипта в финале необходимо добавить строки ниже в preseed.cfg.

Распаковываете initrd (console и gtk) через скрипт create-iso-debian-installer.sh, вносите изменения в preseed.cfg и запаковываете обратно.

Внести в конец preseed.cfg нижеприведенные строки:

d-i cdrom-detect/eject boolean false

d-i preseed/late_command string \
[[ "$(ls -1 /target/media/cdrom | wc -l)" -eq 0 ]] && mount --bind -v /cdrom /target/media/cdrom && export mb_cd="1"; \
in-target /bin/bash -c /opt/install-files-programm/postinstos.sh; \
[[ $mb_cd -eq 1 ]] && umount /target/media/cdrom

В Astra 1.8 на Debian installer замечено отмонтирование диска внутри устанавливаемой системы, поэтому добавлена команда mount --bind, если /target/media/cdrom пуст.

  • d-i preseed/late_command позволяет вам выполнить команду на завершающем этапе установки. Если выполнение завершится с ошибкой, то установка прервется.

  • /opt/install-files-programm/postinstos.sh заменить при необходимости на свой путь.

При необходимости вы можете выполнить команды напрямую из late_command без использования файла скрипта.

  • d-i cdrom-detect/eject boolean false предотвращает отмонтирование носителя на финальном этапе установки.

4.Пересборка/модификация live инсталлятора

  • 1.Скопируйте содержимое инсталлятора в каталог сборки. Доступен удобный скрипт copy-source-installer.sh (подробнее в разделе описания скриптов).

  • 2.Запустите скрипт create-iso-live-installer.sh. Рядом с файлом скрипта будут созданы необходимые каталоги (подробнее в разделе описания скриптов).

  • 3.Если необходимо изменить состав пакетов репозитория или отредактировать списки категорий ПО в файле debian-tasks.desk, то выполните инструкции из раздела 2.Модификация репозитория и 4.1.1.Доп. Действия для live installer при модификации репозитория.

  • 4.Если необходимо выполнить команды в финале установки, выполните инструкции из раздела 4.1.2.Выполнение команд в финале установки.

  • 5.Если необходимо установить/удалить ПО в live систему, то читайте раздел 4.1.3.Установка/Удаление ПО в live системе.

  • 6.Если необходимо скопировать файлы в устанавливаемую систему, то читайте раздел 4.1.4.Механизм копирования файлов в устанавливаемую систему.

  • 7.Если вы хотите добавить возможность установки системы на btrfs subvolume, то читайте раздел 4.1.5.Добавление переноса системы на btrfs subvolume в конце установки.

  • 8.Перед сборкой iso выполните пункт Установить xorriso, squashfs-tools и grub-pc-bin, если данные пакеты еще не установлены.

  • 9.Если вы изменили репозиторий, то выполните пункт Скопировать репозиторий в каталог сборки.

  • 10.Соберите iso.

ПРИМЕЧАНИЕ! В каталоге репозитория installer-live есть примеры изменений.


4.1.Внесение изменений в squashfs

  • 1.Для перепаковки squashfs установите пакет squashfs-tools.

  • 2.Выполните действие Распаковать filesystem.squashfs.

  • 3.Внесите необходимые вам изменения в распакованное содержимое.

Важно!!! При изменении python и yaml файлов соблюдайте форматирование в файле.

В Python отступы критически важны. После двоеточия (например, if условие:) следует блок кода, который должен быть сдвинут вправо относительно строки с if на четыре пробела (или один табулятор). Эти отступы определяют тело блока, и все строки внутри блока должны иметь одинаковый отступ. Например:

def условие:
    строка 1
    строка 2
    if условие:
        строка 1
        строка 2
        if условие:
            строка 1
            строка 2

В каталоге installer-live/filesystem.squashfs репозитория есть полные файлы для примера изменений.

  • 4.Когда все необходимые вам изменения будут сделаны, выполните действие Запаковать filesystem.squashfs

4.1.1.Доп. Действия для live installer при модификации репозитория

Распакуйте filesystem.squashfs, если вы этого еще не сделали.

Необходимо добавить в каталог .../squashfs-root/etc/apt/trusted.gpg.d файл открытого ключа, которым подписан репозиторий (его же вы добавляли в пакет tasksel-data).

Дальнейшие действия в этом разделе нужны вам, только если вы изменяли список категорий ПО в файле debian-tasks.desk пакета tasksel-data.

В каталоге installer-live/filesystem.squashfs репозитория есть полные файлы для примера изменений.

Актуализируйте (добавьте/удалите) категории ПО в файлах:

  • .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/settings/task.py. Добавить нужные вам строки в массив name_by_id в class Task(Component) по аналогии с имеющимися:
'Имя-категории': 'Наименование категории на английском',

Имя категории соответствует имени в debian-tasks.desk.

Например:

'ya-browser': 'Yandex browser',
  • .../squashfs-root/usr/lib/python3/dist-packages/astra_installer_converter/tasksel.py. Добавить нужные вам строки в массив vocabulary по аналогии с имеющимися:
'Имя-категории': ['Наименование на английском', 'Имя-категории', 'Наименование на русском'],

Пример строки:

'Fly': ['Fly desktop', 'Fly', 'Графический интерфейс Fly'],

4.1.2.Выполнение команд в финале установки

В этом разделе я покажу, как добавить выполнение своих скриптов на финальном этапе установки используя механизм настройки параметров безопасности, доступный в инсталляторе.

Инсталлятор запускает скрипты параметров безопасности напрямую из /usr/sbin устанавливаемой системы, т.е. нужно, чтобы необходимые вам скрипты существовали в устанавливаемой системе в момент вызова в конце установки. Смотрите раздел 4.1.4.Механизм копирования файлов в устанавливаемую систему с описанием возможных вариантов.

ВАЖНО! Имя файла скрипта должно соответствовать имени задачи, которая будет добавлена в необходимые файлы далее. Инсталлятор вызывает скрипт из /usr/sbin по имени задачи с передаваемым параметром enable/disable в зависимости от того выбрана задача или нет. Например:

chroot /target/bin/bash -c '/usr/sbin/custom-change-remote-con-settings enable'

Базовый шаблон скрипта следующий:

#!/bin/bash
if [[ "$1" = "enable" ]]; then
  ваш код
else
  ваш код
fi

В каталоге installer-live/filesystem.squashfs репозитория есть полные файлы для примера изменений.

Отредактируйте следующие файлы (соблюдайте синтаксис и форматирование):

  • .../squashfs-root/usr/lib/python3/dist-packages/astra_installer_converter/convert.py. Добавьте необходимые вам строки в массив vocabulary в def additional_settings:
'имя-задачи': ['имя-задачи', 'Наименование на английском', 'Наименование на русском'],
'astra-mic-control': ['astra-mic-control', 'Enable Mandatory Integrity Control', 'Мандатный контроль целостности'],
  • .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/settings/security_feature.py. Добавьте необходимые вам строки в массив name_by_id в class SecurityFeature(Component) соблюдая форматирование:
'имя-задачи': 'Наименование на английском',
'astra-mic-control': 'Mandatory integrity control',
  • .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/configs/common/common.conf.yaml. Добавьте необходимые вам строки в раздел security_features соблюдая форматирование (Порядок отображения и выполнения зависит от порядка расположения задач в данном файле):
- id: имя-задачи
    name:
      ~: Наименование на английском
      ru_RU: Наименование на русском
    desc:
      ~: Описание на английском
      ru_RU: Описание на русском
- id: astra-mic-control
    name:
      ~: Mandatory integrity control
      ru_RU: Мандатный контроль целостности
    desc:
      ~: Enables mandatory integrity control
      ru_RU: Включает механизм мандатного контроля целостности

При необходимости вы можете указать включен ли пункт по умолчанию и виден ли он в списке. Это делается в разделе modes. Настройка выполняется отдельно для каждого уровня защищенности.

Пример (custom-exec-latest-cmd будет принудительно выполнен. В списке его видно не будет):

- id: custom-exec-latest-cmd
        selected: True
        enabled: True
        visible: False
- id: custom-change-remote-con-settings
        selected: True
        enabled: True

ВАЖНО! После установки выбранных категорий пакетов, в какой-то момент репозиторий внутри устанавливаемой системы становится недоступен. Если вам в скриптах нужен доступ к репозиторию диска, то его необходимо заново инициализировать следующим способом.

  • Добавьте новую функцию в конец файла .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/disk.py соблюдая форматирование:
def update_cd_repo_in_target(self) -> None:
    Logger.log('Update CD repo in target system')
    self.chroot.run_command('apt-cdrom add --no-mount; apt update')

  • Добавьте в конец файла .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/setup_builder.py соблюдая форматирование:
@staticmethod
def update_cd_repo_in_target(disk: 'DiskInstall') -> ProgressStep:
    return ProgressStep(
        name="update_cd_repo_in_target",
        description=_('Update cd repo in target system'),
        action=disk.update_cd_repo_in_target,
        weight=1.0
    )

  • Добавьте строку в файл .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/setup.py до .add_step(StepFactory.security_settings(self.security)):
.add_step(StepFactory.update_cd_repo_in_target(self.disk))

В архиве after-install.tar.gz доступны следующие примеры скриптов (скрипты начинающиеся с custom-in-system не могут быть установлены из инсталлятора. Не все ПО из-за особенностей их postinstall скриптов может быть установлено во время установки системы):

  • custom-change-remote-con-settings — настройка удаленных подключений;

  • custom-enable-composit — скрипт заглушка. Будет описан отдельно;

  • custom-enable-fstrim — настройка fstrim;

  • custom-exec-latest-cmd — различные настройки;

  • custom-install-ad-sssd — установка fly-admin-ad-sssd-client;

  • custom-install-assistant — установка Ассистент;

  • custom-install-bitrix — установка bitrix

  • custom-install-cryptopro — установка КриптоПро;

  • custom-install-gosplugin — установка Госплагин;

  • custom-install-grandsmeta — установка Гранд-Смета;

  • custom-install-kvm — установка KVM;

  • custom-install-kvm-guest — установка гостевых дополнений KVM;

  • custom-install-mount-autofs — установка и настройка autofs;

  • custom-install-mount-pam — установка и настройка pam-mount;

  • custom-install-mount-smb — настройка smb точек монтирования;

  • custom-install-r7office — установка R7-office

  • custom-install-spo-anketa — установка СПО Анкета;

  • custom-install-spravki-bk — установка Справки-БК

  • custom-install-virtualbox — установка virtualbox

  • custom-in-system-change-conf.sh — изменение различных настроек;

  • custom-in-system-install-carma — установка EOS Карма;

  • custom-in-system-install-kesl — установка KESL;

  • custom-in-system-install-recordsupport — установка плагина фиксации действий;

  • custom-in-system-install-sbis — установка sbis;

  • custom-repo-frozen-astra — добавление frozen репозитория astra;

  • custom-repo-local — добавление своего репозитория;

  • custom-repo-local-astra — добавления локального репозитория astra;

  • custom-transfer-system-to-btrfs-subvolume — получение нужной информации перед переносом на btrfs subvolume;

  • custom-update-chromiumgost — обновление chromium-gost из репозитория github.

custom-enable-composit является скриптом заглушкой. Для того, чтобы управлять состоянием композита добавьте следующие строки сразу после открытия функции def enable_composit_manager (отредактируйте форматирование остальных строк в функции, после добавления) в файле .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/disk.py:

selected_features = {feature.ident for feature in SettingsManager.security.selected_features()}
if 'custom-enable-composit' in selected_features:

4.1.3.Установка/Удаление ПО в live системе

  • 1.Перейдите в каталог с распакованным live образом и откройте в нем терминал. Выполните команду sudo -s, чтобы переключиться на пользователя root.

  • 2.Если нужно установить ПО из сетевых репозиториев, то нужно добавить их в распакованный live (пример добавления frozen репозиториев):

echo -e 'deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.5/main-repository/ 1.8_x86-64 contrib main non-free non-free-firmware\ndeb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.5/extended-repository/ 1.8_x86-64 contrib main non-free non-free-firmware' > ./squashfs-root/etc/apt/sources.list.d/astra-frozen.list
  • 3.Создайте файл resolv.conf для дальнейшего успешного наложения файла:
echo '' > ./squashfs-root/etc/resolv.conf
  • 4.Выполняем наложение необходимых файлов/каталогов, чтобы chroot и сеть в нем работали корректно:
for i in dev dev/pts sys proc run etc/resolv.conf; do mount --bind -v /$i ./squashfs-root/$i; done
  • 5.Выполняем chroot в распакованный live образ
chroot ./squashfs-root
  • 6.Далее, подключившись к live через chroot, вы можете выполнять любые нужные вам команды. Пример установки пакетов из репозитория:
apt update && apt -y install ldmtool blivet-gui binutils rsync exfatprogs gvfs gvfs-backends gvfs-fuse

Пример установки пакетов из файла (заранее скопируйте необходимые deb файлы в како-либо каталог внутри распаковонного live):

apt -y install /tmp/deb/*.deb
  • 7.Для выхода из chroot выполните команду exit.

  • 8.Далее необходимо отмонтировать смонтированные ранее в live файлы/каталоги:

for i in dev/pts dev sys proc run etc/resolv.conf; do umount -l -v ./squashfs-root/$i; done

4.1.4.Механизм копирования файлов в устанавливаемую систему

Есть 2 варианта копирования файлов в устанавливаемую систему.

Вариант 1:

Вы можете создать deb пакет и установить его, указав, например, в категории hidden пакета tasksel-data. Для модификации пакета читайте раздел 2.Модификация репозитория.

Вариант 2:

Вы можете использовать придуманный мной алгоритм копирования файлов в устанавливаемую систему.

  • 1.Создайте в корне iso каталог extra-source.

  • 2.В этом каталоге будут расположены:

    • Каталог dir_contents. Содержимое каталога будет скопировано в устанавливаемую систему, в тот момент, когда вы вызовете нужную функцию. Подходит для копирования файлов/каталогов в устанавливаемую систему, когда не важно сохранение исходных прав, либо нужные права будут выставлены отдельным скриптом.

    • Архив after-install.tar.gz. Содержимое архива будет распаковано в target системе через chroot (с сохранением всех исходных прав в архиве) после установки выбранных категорий пакетов. Т.е. если файл/каталог существует, то он будет заменен и права будут соответствовать правам в архиве. Учитывайте это при создании архива. Чтобы распаковать архив с сохранением всех прав, запустите от имени root команду:

mkdir -p after-install && tar xpvfz "after-install.tar.gz" -C ./after-install

Создать архив с сохранением всех прав вы можете запустив fly-fm от root и через контекстное меню выполнить упаковку в tar.gz.

  • 3.Добавьте в файл .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/disk.py новые функции соблюдая форматирование:
def copy_dir_contents_to_target_system(self) -> None:
    Logger.log('Copy extra source to target system')
    run_command(f'extra_dir="/run/live/medium/extra-source/dir_contents"; [[ -d "$extra_dir" ]] && cd "$extra_dir" || exit 0; cp -R -v -f * "/target/"')

def copy_extra_source_disk_to_system_after_install(self) -> None:
    Logger.log('Copy extra source to target system')
    run_command(f'extra_file="/run/live/medium/extra-source/after-install.tar.gz"; [[ -f "$extra_file" ]] && cp -f -v "$extra_file" /target/tmp/ || exit 0')
    self.chroot.run_command('extra_file="/tmp/after-install.tar.gz"; [[ -f "$extra_file" ]] && tar xpvfz "$extra_file" -C / || exit 0')

Добавьте в конец файла .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/setup_builder.py соблюдая форматирование:

@staticmethod
def copy_extra_source(disk: 'DiskInstall') -> ProgressStep:
    def action():
            disk.copy_dir_contents_to_target_system()
            disk.copy_extra_source_disk_to_system_after_install()

    return ProgressStep(
            name="copy_extra_source",
            description=_('Copy extra source to target system'),
            action=action,
            weight=1.0
    )

Добавьте в файл .../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/setup.py в def _create_steps(self) после .add_step(StepFactory.tasks(self.tasks)):

.add_step(StepFactory.copy_extra_source(self.disk))

ВАЖНО!!! В установщике замечено следующее поведение.

Если в /etc/skel вы создадите каталог .config/rusbitech, то установщику нужно, чтобы там существовал файл fly-xkbmap.conf, иначе при настройке пользователя будет ошибка. Потом вы можете удалить этот файл из /etc/skel/.config/rusbitech.


4.1.5.Добавление переноса системы на btrfs subvolume в конце установки

Если вы хотите добавить в инсталлятор возможность переноса системы на btrfs subvolume в конце установки, то выполните следующие действия:

  • 1.Распакуйте squashfs с live системой, если еще не сделали это (пункт 4.1).

  • 2.Скачайте последнюю версию скрипта из репозитория system install btrfs subvolume (https://gitflic.ru/project/medved0001/system-install-btrfs-subvolume) и положите в /usr/sbin распакованной live системы файл btrfs-autocreate-subvol.sh. Добавьте файлу права выполнения.

  • 3.Добавьте в конец файла .../usr/lib/python3/dist-packages/astra_installer/setup/common/disk.py следующие строки (в функции system_transfer_btrfs_subvolume вы можете изменить параметры вызова скрипта -ceb -neb "astra" -sp):

def copy_uuid_system_part(self) -> None:
    selected_features = {feature.ident for feature in SettingsManager.security.selected_features()}
    if 'custom-transfer-system-to-btrfs-subvolume' in selected_features:
        run_command(f'[[ -f "/tmp/uuid-system-part" ]] && rm -f "/tmp/uuid-system-part" || echo ""; [[ -f "/target/tmp/uuid-system-part" ]] && cp -v -f "/target/tmp/uuid-system-part" /tmp/ || exit 0')

def system_transfer_btrfs_subvolume(self) -> None:
    selected_features = {feature.ident for feature in SettingsManager.security.selected_features()}
    if 'custom-transfer-system-to-btrfs-subvolume' in selected_features:
        Logger.log('System transfer to btrfs subvolume')
        run_command(f'unset LD_PRELOAD; [[ -f "/tmp/uuid-system-part" ]] && eval "/usr/sbin/btrfs-autocreate-subvol.sh -im $([[ -f "/tmp/tsbs-custom-param" ]] && cat /tmp/tsbs-custom-param || echo \'-ceb -neb "astra" -sp "/;@;space_cache=v2,nodiscard,relatime,compress=zstd:5,commit=300;0;" -sp "/home;@home;nodiscard,relatime;0;" -sp "/tmp;@tmp;nodiscard,relatime;1;" -sp "/var/cache;@varcache;nodiscard,noatime;1;" -sp "/var/log;@varlog;nodiscard,noatime;1;" -sp "/var/tmp;@vartmp;nodiscard,relatime;1;" -sp "/swap;@swap;nodiscard,noatime;1;"\')" || exit 0')

copy_uuid_system_part — функция копирования файла, если существует, из target системы в live. Файл будет существовать, если выбран перенос системы на btrfs subvolume и система удовлетворяет требованиям.

system_transfer_btrfs_subvolume — функция переноса системы после установки на btrfs subvolume, если выбран перенос и файл /tmp/uuid-system-part существует, т. е. система удовлетворяет требованиям скрипта.

  • 4.Добавьте в .../usr/lib/python3/dist-packages/astra_installer/setup/common/setup.py в def _create_steps(self) после .add_step(StepFactory.umount(self.disk)):
.add_step(StepFactory.system_to_btrfs(self.disk))
  • 5.Добавьте в .../usr/lib/python3/dist-packages/astra_installer/setup/common/setup_builder.py в def finalize_stage_two после disk.run_late_command():
disk.copy_uuid_system_part()
  • 5.Добавьте в конец файла .../usr/lib/python3/dist-packages/astra_installer/setup/common/setup_builder.py:
@staticmethod
def system_to_btrfs(disk: 'DiskInstall') -> ProgressStep:
    return ProgressStep(
        name="system_to_btrfs",
        description=_('Move system to btrfs subvolume'),
        action=disk.system_transfer_btrfs_subvolume,
        weight=1.0
    )

  • 6.По инструкции из раздела 4.1.2 выполните добавление скрипта custom-transfer-system-to-btrfs-subvolume для возможности выполнения в финале установки.

В файл .../usr/lib/python3/dist-packages/astra_installer_converter/convert.py:

'custom-transfer-system-to-btrfs-subvolume': ['custom-transfer-system-to-btrfs-subvolume', 'Transfer system to btrfs subvolume', 'Перенос системы на btrfs subvolume'],

В файл .../usr/lib/python3/dist-packages/astra_installer/settings/security_feature.py

'custom-transfer-system-to-btrfs-subvolume': 'Transfer system to btrfs subvolume',

В файл .../usr/lib/python3/dist-packages/astra_installer/configs/common/common.conf.yaml:

- id: custom-transfer-system-to-btrfs-subvolume
    name:
      ~: System btrfs subvolume
      ru_RU: Перенос системы на btrfs subvolume
    desc:
      ~: Transfer system to btrfs subvolume
      ru_RU: Перенос системы на btrfs subvolume
  • 7.В соответствии с разделом 4.1.3 установите в live систему пакет parsec-cap из репозитория astralinux.

  • 8.В соответствии с пунктом 4.1.4 обеспечьте существование файла скрипта /usr/sbin/custom-transfer-system-to-btrfs-subvolume в устанавливаемой системе. Файл скрипта находится в архиве в репозитории по следующему пути: installer-live/root-installer/extra-source/after-install.tar.gz

Описание
Скрипт и инструкция по пересборке/модификации установочных образов Astra linux и подобных по структуре установщиков
Релизы
2026-04-29
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики