
У каждого своё чувство перфекционизма. В этой статье я покажу примеры модификации live installer Astra linux, чтобы вы могли создать автономный дистрибутив своей мечты.
В репозитории также есть инструкция для Debian installer.
Также в репозитории есть видеофайлы к некоторым частям инструкции.
ВАЖНО!!! Раздел 1 и 2 не зависят от версии Astra linux. Раздел 3 может быть частично неприменим к версиям инсталлятора ниже/выше (следите за обновлениями в репозитории). Текущая инструкция писалась на live installer 1.8.5.46.
1. Описание файлов скриптов
1.1. copy-source-installer.sh
Скрипт для копирования содержимого установочного диска в каталог сборки.
При запуске рядом с файлом скрипта создаются следующие новые каталоги:
iso-in – Содержит iso файлы;
iso-temp – Содержит каталоги сборки со скопированным содержимым iso файла;
iso-mount – Каталог для монтирования iso файлов;
repo – Каталог для создания в нём репозиториев.
Источник копирования определяется в следующем порядке:
-
Если файлу скрипта передан путь к iso при запуске, то монтирование его в '$isomountpath' и использование в качестве источника копирования, если в нем есть каталоги EFI,dists,pool. Например,
./copy-source-installer.sh "/opt/install.iso" Если путь к источнику копирования пуст, то проверка /media/cdrom на наличие каталогов EFI,dists,pool. Если они существуют, т.е подключен диск инсталлятора, то задается вопрос использовать ли /media/cdrom в качестве источника копирования.
Если путь к источнику копирования пуст, то создание списка iso файлов из каталога '$isoinpath' и предложение выбрать файл для монтирования. Если в смонтированном iso есть каталоги EFI,dists,pool, то использовать его в качестве источника копирования.
Если путь к источнику копирования пуст и установлен 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.2. create-deb.sh
Скрипт для перепаковки deb пакетов.
При запуске рядом с файлом скрипта создаются следующие новые каталоги:
Deb-in - Каталог с deb пакетами для распаковки;
Deb-out - Каталог с собранными deb пакетами;
Deb-temp - Каталог с распакованными deb пакетами.
Доступны следующие действия:
Распаковать Deb пакет;
Запаковать Deb пакет;
Распаковать все Deb пакеты;
Запаковать все Deb пакеты.
При запаковке всех DEB пакетов имена файлов формируются на основе информации из файла control в следующем формате: имя-пакета_версия_архитектура.deb
1.3. create-iso-live-installer.sh
Скрипт для перепаковки live installer Astra linux.
При запуске рядом с файлом скрипта создаются следующие новые каталоги:
iso-temp - Содержит каталоги сборки со скопированным содержимым iso файла;
iso-out - Каталог с собранными iso файлами;
repo - Содержит каталоги репозиториев (может содержать символьные ссылки);
live-squashfs - Содержит каталоги с распакованным squashfs образами.
Доступны следующие действия:
Скопировать репозиторий в каталог сборки;
Распаковать filesystem.squashfs;
Запаковать filesystem.squashfs;
Собрать iso;
Установить 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 удобен тем, что визуально видно все пакеты с неудовлетворенными зависимостями.
-
Запустите fly-admin-repo и создайте репозиторий.
Укажите путь до каталога, где будет находится репозиторий (путь к созданному скриптом (copy-source-installer.sh / create-iso-debian-installer.sh / create-iso-live-installer.sh ) каталогу repo);
Вы можете создать каталог в любом удобном для вас месте, а потом сделать символьную ссылку на данный каталог в каталоге repo.
Заполните поля с информацией о репозитории в соответствии с исходным репозиторием;
Поставьте галочки на «Создать Contents-*.gz file» и «Подписать репозиторий».
Изображения

-
Выполните импорт репозитория: Файл -→Импорт-→Импорт репозитория
Выберите для импорта каталог pool c установочного диска или каталога сборки.
Ожидайте, пока репозиторий импортируется
Изображения


2.2.2. Терминальные команды
Установите пакет reprepro: sudo apt install reprepro
Создайте каталог репозитория: mkdir -p /путь-к-репозиторию/conf
-
Создайте 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.
-
Для инициализации нового репозитория выполните команду (будут созданы необходимые базы данных и каталоги):
reprepro --ask-passphrase -b <путь_к_репозиторию> export -
Наполнить репозиторий пакетами из каталога pool:
find "путь-к-каталогу-pool" -name "*.deb" -exec reprepro --ask-passphrase -b "путь-к-репозиторию" includedeb "Codename-репозитория" {} \;find "путь-к-каталогу-pool" -name "*.udeb" -exec reprepro --ask-passphrase -b "путь-к-репозиторию" includeudeb "Codename-репозитория" {} \;Импорт репозитория довольно длительный процесс (рекомендуется сохранить пароль от ключа подписи в связке ключей).
После импорта репозитория вы можете вносить в него любые необходимые вам изменения. При добавлении/удалении пакетов помните о зависимостях.
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.
-
Выполните необходимые вам изменения и соберите пакет. Собранный пакет будет в каталоге Deb-out.
В каталоге распакованного пакета создайте каталог «/etc/apt/trusted.gpg.d» и поместите в него файл открытого ключа, которым вы подписали репозиторий (т.е. у вас будет путь «каталог-распакованного-пакета/etc/apt/trusted.gpg.d»).
2.3.1. Изменение списка категорий и ПО для установки
В этом же пакете tasksel-data в файле debian-tasks.desk при необходимости редактируется список категорий и их содержимого для выбора при установке.
Файл находится по следующему пути: «/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 являются скомпилированными бинарными файлами локализации, которые используются программами для отображения интерфейса на разных языках. Напрямую редактировать их текстовым редактором нельзя.
-
Перейдите в каталог с нужным файлом локализации в распакованном tasksel-data, например, .../usr/share/locale/ru/LC_MESSAGES/
Изображения

-
Декомпиляция в формат .po
msgunfmt debian-tasks.mo -o debian-tasks.poИзображения

-
-
Редактирование текста.
В файле найдите нужную строку msgid (оригинал) и измените соответствующее ей значение msgstr (перевод).
Если в debian-tasks.desc были добавлены новые категории, то добавьте для них перевод по аналогии с имеющимися записями.
Изображения

-
Обратная компиляция в .mo
msgfmt debian-tasks.po -o debian-tasks.mo
-
Изображения

3. Пересборка/модификация live инсталлятора
Скопируйте содержимое инсталлятора в каталог сборки. Доступен удобный скрипт copy-source-installer.sh (подробнее в разделе описания скриптов).
Запустите скрипт create-iso-live-installer.sh. Рядом с файлом скрипта будут созданы необходимые каталоги (подробнее в разделе описания скриптов).
Если необходимо изменить состав пакетов репозитория или отредактировать списки категорий ПО в файле debian-tasks.desk, то выполните инструкции из раздела «2. Модификация репозитория» и «3.1.1. Доп. Действия для live installer при модификации репозитория».
Если необходимо выполнить команды в финале установки, выполните инструкции из раздела «3.1.2. Выполнение команд в финале установки».
Если необходимо установить/удалить ПО в live систему, то читайте раздел «3.1.3. Установка/Удаление ПО в live системе».
Если необходимо скопировать файлы в устанавливаемую систему, то читайте раздел «3.1.4. Механизм копирования файлов в устанавливаемую систему».
Перед сборкой iso выполните пункт «Установить xorriso, squashfs-tools и grub-pc-bin», если данные пакеты еще не установлены.
Если вы изменили репозиторий, то выполните пункт «Скопировать репозиторий в каталог сборки».
-
Соберите iso.
ПРИМЕЧАНИЕ! В каталоге репозитория installer-live есть примеры изменений.
Изображения (сборка iso)


3.1. Внесение изменений в squashfs
Для перепаковки squashfs установите пакет squashfs-tools.
-
Выполните действие «Распаковать filesystem.squashfs».
Изображения

Внесите необходимые вам изменения в распакованное содержимое.
Важно!!! При изменении python и yaml файлов соблюдайте форматирование в файле.
В Python отступы критически важны. После двоеточия (например, if условие:) следует блок кода, который должен быть сдвинут вправо относительно строки с if на четыре пробела (или один табулятор). Эти отступы определяют тело блока, и все строки внутри блока должны иметь одинаковый отступ. Например:
def условие: строка 1 строка 2 if условие: строка 1 строка 2 if условие: строка 1 строка 2В каталоге installer-live/filesystem.squashfs репозитория есть полные файлы для примера изменений.
-
Когда все необходимые вам изменения будут сделаны, выполните действие «Запаковать filesystem.squashfs»
Изображения



3.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'],Изображения

Изображения (пример списка в инсталляторе)

3.1.2. Выполнение команд в финале установки
В этом разделе я покажу, как добавить выполнение своих скриптов на финальном этапе установки используя механизм настройки параметров безопасности, доступный в инсталляторе.
Инсталлятор запускает скрипты параметров безопасности напрямую из /usr/sbin устанавливаемой системы, т. е. нужно, чтобы необходимые вам скрипты существовали в устанавливаемой системе в момент вызова. Смотрите раздел «3.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
Изображения

Отредактируйте следующие файлы (соблюдайте синтаксис и форматирование):
-
«.../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 )
Вставьте до .add_step(StepFactory.security_settings(self.security)):
-
«.../squashfs-root/usr/lib/python3/dist-packages/astra_installer/setup/common/setup.py»
.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:
Изображения

3.1.3. Установка/Удаление ПО в live системе
Перейдите в каталог с распакованным live образом и откройте в нем терминал. Выполните команду sudo -s, чтобы переключиться на пользователя root.
Если нужно установить ПО из сетевых репозиториев, то нужно добавить их в распакованный 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
Создайте файл resolv.conf для дальнейшего успешного наложения файла:
echo '' > ./squashfs-root/etc/resolv.conf
Выполняем наложение необходимых файлов/каталогов, чтобы chroot и сеть в нем работали корректно:
for i in dev dev/pts sys proc run etc/resolv.conf; do mount --bind -v /$i ./squashfs-root/$i; done
Изображения

Выполняем chroot в распакованный live образ
chroot ./squashfs-root
Далее, подключившись к 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
Удалим каталог с файлами установки пакетов (у вас может не быть его или путь будет другой):
rm -fR /tmp/deb
Для выхода из chroot выполните команду exit.
Далее необходимо отмонтировать смонтированные ранее в live файлы/каталоги:
for i in dev/pts dev sys proc run etc/resolv.conf; do umount -l -v ./squashfs-root/$i; done
3.1.4. Механизм копирования файлов в устанавливаемую систему
Есть 2 варианта копирования файлов в устанавливаемую систему.
Вариант 1:
Вы можете создать deb пакет и установить его, указав, например, в категории hidden пакета tasksel-data. Для модификации пакета читайте раздел «2. Модификация репозитория».
Вариант 2:
Вы можете использовать придуманный мной алгоритм копирования файлов в устанавливаемую систему.
Создайте в корне iso каталог extra-source.
-
В этом каталоге будут расположены:
Каталог 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.
-
Добавьте в конец файла новые функции соблюдая форматирование:
-
«.../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 createsteps(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.
Изображения

Ссылка на репозиторий: Gitflic
Ссылка на Яндекс.Диск: repo-rezerv
Комментарии (4)

Granulex
18.05.2026 19:42«Соблюдайте форматирование Python» – предупреждение правильное. А ещё chroot без предварительного mount --bind /dev /proc /sys превращает apt-get внутри образа в лотерею: половина скриптов постустановки молча зависнет. И /etc/resolv.conf в chroot тоже не появится сам.
MrBotikkk
Какая лицензия будет у “дистрибутива вашей мечты” после авто-отправки данных через astra-subscription?
medved0001 Автор
Непонятна суть вопроса. Изменение состава репозитория диска или выполнение настройки системы на финальном этапе установки никак не влияет и не может влиять на то, какая лицензия будет.
Целью является просто создание автономного дистрибутива с необходимым набором пакетов в репозитории и дополнительными настройками, которые можно выбрать для выполнения, получив на выходе настроенную систему.
MrBotikkk
Автоматическая установка Astra Linux Special Edition x.8 Вот такая фича для примера: