Мною двигал интерес к процессу и желание сделать то, что ещё никто не делал (подробнее об этом позже). Это не означает, что вы не сможете применить малинки в своем проде: как минимум из них может быть очень хорошая основа тонкого клиента для пользовательской станции или очень бюджетный кластер для вашего разработчика. И всё это на отечественной операционной системе, так ещё и с сертификатами безопасности!
Установка Astra Linux на RPi4: казалось бы, что может быть проще?
Сначала качаешь образ img и записываешь его на карту памяти. А вот тут начинается самое интересное. В свободном доступе образов для записи на карту памяти нет :-(
- Единственный вариант, который мне подсказали в чате Астра Линукс, это запрашивать rootfs для записи на карту памяти через их менеджера.
- Также стоит отметить, что у Астры есть версия для arm архитектуры и обозначается она как 4.7, где 4 - это код дистрибутива под архитектуру arm, а 7 - версия (подробнее про версии астры нужно читать на их Вики). На сегодня последняя версия, которая есть в репозиторий - это stable 4.7.6 (обновление 4.7.7 также на подходе).
- Версии х.7 основаны на debian 10. Версии х.8 уже основаны на debian 12. Так почему бы не взять Астру 4.8.1, если она должна быть более новой и с новыми плюшками? А все потому что релиза 4.8 ещё не было, иначе я бы писал именно про него.
Итак, мы выяснили, что Астра под нужную архитектуру существует и даже выяснили, что есть кейсы её работы на RPi4 (по крайней мере представитель Астры в их чате заявлял, что образ у них рабочий, хотя и не показал :( Привет, Роман!). Значит задача теперь у нас простая - понять, как установить астру.
Хоть Астра и готова работать под arm, но установщик, который идёт на установочном диске 4.7.5, заточен под установку системы с загрузчиком grub.
Способ первый: виртуалка и копирование
Установить астру на виртуальную машину (или любой компьютер с arm процессором), а потом перенести все файлы на нужную карту памяти, после чего научить загрузчик RPi4 правильно грузить Астру. Именно этот вариант я бы советовал рассмотреть, если будете использовать астру в проде: во время установки отрабатывает довольно большое количество скриптов, которые готовят систему работать с СЗИ Астры.
Но этот вариант мне не совсем подходил, потому что единственные машины с arm, которые у меня были, это малинки, куда Астру и нужно поставить (парадокс, однако). Создание виртуальной машины на компьютере с архитектурой x86_64 с последующей установкой машины на arm, потребовало бы значительных ресурсов и терпения. Поэтому данный способ отложил как запасной вариант (но повторю ещё раз: если хотите заморачиваться меньше, то просто ставьте систему в виртуалке на arm с обычного установочного диска Астры по стандартной инструкции. Boot лучше отправить на отдельный раздел, так как его содержимое, а именно загрузчик grub, вам потом будет не нужен. После этого копируете установленную систему на карту памяти)
Поэтому я стал думать дальше. И все оказалось довольно просто.
Способ второй: установка операционной системы из-под другой операционной системы
Такой опыт у меня уже имелся и, по моим меркам, был весьма удачен. Тогда я делал бездисковую загрузку Астры по сети, чтобы все её файлы были в оперативной памяти.
Учитывая мой прошлый опыт с такой установкой, я решил попробовать и установить систему с помощью утилиты debootstrap. Этот инструмент позволяет установить минимальную операционную систему (debian) в директорию на основной операционной системе.
Ставится минимальная система, в которую потом можно сделать chroot и доустановить остальные компоненты.
Для загрузки RPi4 (как я понимаю, также как и для загрузки RPi3) нужно на отдельном разделе (FAT), который будет помечен как загрузочный, разместить файлы необходимые для загрузки: ядро, инитрд и файлы прошивки RPi.
Алгоритм:
1. Разметить карту памяти на два раздела загрузочный и основной;
2. Установить систему в основной раздел;
3. Зачрутиться в корень системы, выполнить установку ядра и генерацию инитрд. В бонус создать пользователя админа и установить графику;
4. Перезагрузиться в новую операционную систему и выполнить базовую настройку СЗИ (а то какая это Астра, если не будет Смоленска).
Стоит отметить, что для того, чтобы debootstrap можно было запустить, уже должна быть система, из под которой я буду его использовать. Для этого я взял образ debian 12 img и установил его на вторую малинку (вы можете делать это и с одной).
Размечаем карту памяти
- Установим parted и mtools для того, чтобы разметить карту памяти и установить метки:
sudo apt install parted sudo apt install mtools
- Размечать диск будем следующим образом:
Первый раздел —> загрузочный с меткой system-boot и размером примерно 500 МБ
Второй раздел —> диск с системой, метка writable, занимает всё оставшееся место
sudo parted /dev/sda --script mktable msdos mkpart primary fat32 1MiB 501MiB mkpart primary ext4 501MiB 100% sudo mkfs.vfat /dev/sda1 sudo mkfs.ext4 /dev/sda2 sudo parted /dev/sda set 1 boot on sudo mlabel -i /dev/sda1 ::system-boot sudo e2label /dev/sda2 "writable"
- Логично, что для установки Астры, обычный debootstrap (из дебиан) нам не подойдет, поэтому поставим в систему ту версию, что лежит в репозитории Астры (Первый раз в жизни ставлю пакеты из астры в дебиан, а не наоборот):
wget https://dl.astralinux.ru/astra/stable/4.7_arm/repository-update/pool/main/d/debootstrap/debootstrap_1.0.132astra3+ci2_all.deb
sudo apt install ./debootstrap_1.0.132astra3+ci2_all.deb
Да, вы можете сказать, что я тут привязываюсь к конкретному пакету и со временем его могут обновить, поэтому правильнее будет прописать репозитории Астры в мою машину на дебиан и поставить пакет из репозитория:
cat << END > /etc/apt/sources.list # Основной репозиторий - аппаратно-зависимый компонент и компоненты общего назначения: deb [trusted=yes] https://dl.astralinux.ru/astra/stable/4.7_arm/repository-main/ 4.7_arm main contrib non-free # Актуальное оперативное обновление основного репозитория deb [trusted=yes] https://dl.astralinux.ru/astra/stable/4.7_arm/repository-update/ 4.7_arm main contrib non-free # Базовый репозиторий deb [trusted=yes] https://dl.astralinux.ru/astra/stable/4.7_arm/repository-base/ 4.7_arm main contrib non-free END sudo apt update sudo apt install deboostrap
- Ставить систему будем на /dev/sda2, поэтому монтируем его в /mnt/media/root, а sda1, где будут файлы для загрузчика, поместим в /mnt/media/root/boot/firmware:
sudo mkdir -p /mnt/media/root sudo mount /dev/sda2 /mnt/media/root sudo mkdir -p /mnt/media/root/boot/firmware sudo mount /dev/sda1 /mnt/media/root/boot/firmware
Запускаем установку
sudo debootstrap --include ncurses-term,mc,locales,nano,gawk,lsb-release,acl,perl-modules-5.28 --components=main,contrib,non-free 4.7_arm /mnt/media/root http://dl.astralinux.ru/astra/stable/4.7_arm/repository-main
- Монтируем в каталог /mnt/media/root каталоги proc, sys, dev, чтобы можно было сделать chroot:
sudo bash << END mount --make-rslave --rbind /proc /mnt/media/root/proc mount --make-rslave --rbind /sys /mnt/media/root/sys mount --make-rslave --rbind /dev /mnt/media/root/dev mount --make-rslave --rbind /run /mnt/media/root/run mount --make-rslave --rbind /dev/pts /mnt/media/root/dev/pts END sudo chroot /mnt/media/root /bin/bash
Дальше команды уже будут выполняться из под пользователя root, который зачрутился в каталог /mnt/media/root.
- Для работы с репозиториями по https нужно поставить два пакета: apt-transport-https и ca-certificates
Сейчас в sources.list прописан только один репозиторий, который мы указали при использовании утилиты debootstrap.
apt update apt install apt-transport-https ca-certificates -y
- После чего пропишем репозитории, доступные по https:
cat << END > /etc/apt/sources.list deb https://dl.astralinux.ru/astra/stable/4.7_arm/repository-main 4.7_arm main contrib non-free deb https://dl.astralinux.ru/astra/stable/4.7_arm/repository-update 4.7_arm main contrib non-free deb https://dl.astralinux.ru/astra/stable/4.7_arm/repository-base 4.7_arm main contrib non-free # deb https://dl.astralinux.ru/astra/stable/4.7_arm/repository-extended 4.7_arm main contrib non-free END apt update && apt dist-upgrade -y
Теперь перейдем к установке базовых утилит.
- Установим локаль и настроим клавиатуру
apt install locales console-setup bash-completion dialog -y dpkg-reconfigure locales dpkg-reconfigure keyboard-configuration
- Установим sudo, а после создадим пользователя sa и группу astra-admin, пропишем их в sudoerc
apt install sudo useradd -m -s /bin/bash sa groupadd astra-admin usermod -aG astra-admin,sudo sa echo '%astra-admin ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
- Теперь настроим fstab, для того, чтобы systemd правильно монтировал наши разделы. Помним про то, что мы ставили метки на разделы, и именно на основе меток будем делать монтирование.
cat << END > /etc/fstab LABEL=system-boot /boot/firmware vfat defaults 0 1 LABEL=writable / ext4 defaults 0 1 END
- Поставим ядро для нашей системы и сгенерируем initrd для этого ядра.
Я буду ставить шестое ядро как самое последнее, что есть в версии x.7
apt install linux-image-6.1-generic linux-astra-modules-6.1.90-1-generic --no-install-recommends -y
- Теперь запустим тасксел, чтобы установить оставшиеся компоненты для системы.
Кстати, при своих первых попытках я столкнулся с особенностью: при установке пакетов из задачи base, почему-то цеплялись пакеты, связанные с fly и ставилась еще и графика, но возможно я просто наговариваю на непогрешимую астру и сам дурак нажал куда-то не туда. Поэтому приведу некоторый костыль, с помощью которого можно поставить все пакеты из задачи base, но посмотреть какие рекомендованные будут установлены через apt:
sudo apt install $(sudo tasksel --task-packages Base| xargs echo)
А для остальных просто будем использовать tasksel:
tasksel install Base
И для графики:
tasksel install Fly
- Еще я поставлю ssh и сервер xrdp для удаленного доступа к машине:
apt install ssh xrdp -y
- Дополнительно нужно заблокировать некоторые модули, которые будут мешать графическому интерфейсу:
cat << END > /etc/modprobe.d/blacklist-astra.conf # Astra blacklist blacklist vc4 blacklist simpledrm END sudo update-initramfs -k all -u && sudo cp /boot/initrd.img-6.1.90-1-generic /boot/firmware/initrd.img-6.1.90-1-generic
Работа с модулями ядра была самой долгой работой, потому что графика не хотела стартовать от слова совсем. Я никак не мог понять, как правильно заставить её работать, и буквально методом "тыка" нашел конфликтующие модули.
На этом установка системы закончена.
Настройка загрузчика
- Скачаем файлы прошивки: хорошо, что они есть в репозитории астры. Кстати, с первого раза у меня система не завелась, пока я не подкинул ей сразу все файлы из репозитория https://github.com/raspberrypi/firmware
Но в целом файлы прошивок есть а в пакете linux-firmware-raspi
apt install linux-firmware-raspi
Распаковываются они в директорию /usr/lib/linux-firmware-raspi
mkdir /boot/firmware/overlays cp /usr/lib/linux-firmware-raspi/* /boot/firmware/ cp /usr/lib/firmware/6.1.90-1-generic/device-tree/broadcom/bcm2711-rpi-4-b.dtb /boot/firmware/
- Качаем с гитхаба файлы overlays:
cd apt install git -y git clone --depth=1 https://github.com/raspberrypi/firmware.git cd firmware/boot/overlays cp * /boot/firmware/overlays
- Теперь займемся конфигами.
Создадим конфиг /boot/firmware/config.txt
cat << END > /boot/firmware/config.txt dtoverlay=vc4-kms-v3d arm_64bit=1 enable_uart=1 kernel=vmlinuz-6.1.90-1-generic initramfs initrd.img-6.1.90-1-generic max_framebuffers=2 hdmi_force_hotplug=1 hdmi_group=2 hdmi_mode=82 hdmi_pixel_encoding=2 framebuffer_depth=32 framebuffer_width=1920 framebuffer_height=1080 END
И конфиг cmdline
cat << END > /boot/firmware/cmdline.txt console=tty0 console=ttyS1,115200 root=LABEL=writable rw fsck.repair=yes net.ifnames=0 rootwait END
На этом можно заканчивать подготовку и пытаться загружаться в новую систему, для того чтобы уже в ней настроить СЗИ.
Загрузка в систему
- Отмонтируем pts, dev, sys, proc
sudo bash << END umount /mnt/media/root/dev/pts umount /mnt/media/root/dev umount /mnt/media/root/sys umount /mnt/media/root/proc umount /mnt/media/root/run umount /mnt/media/root/boot/firmware umount /mnt/media/root END
- Пытаемся загрузиться с карты памяти…
При входе в систему обнаружим, что рабочий стол синий. Это значит, что мы запустили систему под низким уровнем целостности. В данном случае у нас фактически Орел.

Исправим это. Добавим параметр, чтобы ядро грузилось с уровнем целостности 63, что в дальнейшем позволит включить мандатный контроль целостности на файловой системе.
sudo pdpl-user -i 63 sa cat << END > /boot/firmware/cmdline.txt console=tty0 console=ttyS1,115200 root=LABEL=writable rw fsck.repair=yes net.ifnames=0 parsec.max_ilev=63 rootwait END
Перезагружаем машину: теперь при входе пользователя в систему его рабочий стол стал красным.
- Включаем МКЦ
Поскольку каталог /boot/firmware включает в себя файлы с файловой системой FAT, то нужно добавить его в исключения для успешной проверки целостности системы.
sudo -i cat << END >> /etc/parsec/fs-ilev.conf exc /boot/firmware/* exc /boot/firmware END exit
Включаем МКЦ:
sudo set-fs-ilev enable
Проверим статус:
sudo set-fs-ilev status -v
И поставим правильную лицензию:
sudo -i cat << END > /etc/astra_license MODE=2 DESCRIPTION=maximum(smolensk) URL=https://astralinux.ru/information/licenses END exit
После делаем перезагрузку и радуемся результату!

В ходе эксплуатации понял, что у меня неправильно настроен механизм policyKit-1, поэтому пришлось его вызвать и переназначить группу системных администраторов на astra-admin:

Чтобы не проходить этот процесс каждый раз при необходимости ставить систему на новую малинку, можно с этой карты памяти снять образ и после уже раскатывать его на нужные устройства.
Также для большего удобства установки можно добавить механизм cloud-init.
Это был весьма интересный опыт - запуск Astra Linux на RPi4. Доступных инструкций по установке я не обнаружил, да и нигде не было информации о том, что вся эта архитектура будет работать.
Несмотря на вышеуказанные сложности, процесс инсталляции системы был успешно выполнен с нуля. Получилось значительно углубить понимание особенностей каждого этапа установки и функционирования программного обеспечения на данной аппаратной платформе.
Подготовил Михаил Федоров