Пересборка/модификация установочных образов Astra linux
Создание/Модификация deb репозитория
Модификация squashfs (live системы)
Версия stable: 20260428_01
В pdf/docx файле инструкция с изображениями (также есть видеофайлы)
GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Оглавление
- Описание файлов скриптов
- Модификация репозитория
- Пересборка/модификация debian инсталлятора
- Пересборка/модификация live инсталлятора
Описание
Скрипты и инструкция по пересборке/модификации установочных 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