Russian
English
Arabic
Chinese (Simplified)
Chinese (Traditional)
French
German
Italian
Japanese
Kazakh
Portuguese
Spanish
Turkish
Телефон +7 (812) 718-6184
СПб, Московский пр. 118
  1. О центре
  2. Статьи преподавателей
  3. Установка Astra Linux на Raspberry Pi 4

Установка Astra Linux на Raspberry Pi 4

03.04.2025
В прошлом году, в целях более глубокого изучения Linux-систем (а также и для эксперимента), я приобрёл три платы RPi4. Они прекрасно мне служили и выполняли поставленные задачи, пока мне в голову не пришла мысль - а почему бы не поставить на них астру, чтобы ещё глубже погрузиться в настолько любимую мной операционную систему.

Мною двигал интерес к процессу и желание сделать то, что ещё никто не делал (подробнее об этом позже). Это не означает, что вы не сможете применить малинки в своем проде: как минимум из них может быть очень хорошая основа тонкого клиента для пользовательской станции или очень бюджетный кластер для вашего разработчика. И всё это на отечественной операционной системе, так ещё и с сертификатами безопасности!

Установка 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

  • Пытаемся загрузиться с карты памяти…

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

Установка Astra Linux на Raspberry Pi 4, изображение №2

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

После делаем перезагрузку и радуемся результату!

Установка Astra Linux на Raspberry Pi 4, изображение №3

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

Установка Astra Linux на Raspberry Pi 4, изображение №4

Чтобы не проходить этот процесс каждый раз при необходимости ставить систему на новую малинку, можно с этой карты памяти снять образ и после уже раскатывать его на нужные устройства.
Также для большего удобства установки можно добавить механизм cloud-init.

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

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

Подготовил Михаил Федоров