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

от автора

Здравствуйте меня зовут Федоров Михаил и являюсь сертифицированным преподавателем Астра Линукс в учебном центре Эврика.

В прошлом году в целях более глубоко изучения Линукс систем и для эксперимента я приобрёл три платы rpi4. Они прекрасно мне служили и выполняли поставленные задачи, пока мне в голову не пришла мысль — а почему бы не поставить на них астру, чтобы ещё глубже погрузиться в настолько любимую мной операционную систему.

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

Переходим непосредственно к поставленной задаче: поставить astra linux на rpi4
Казалось бы, что может быть проще?

Качаешь образ img и записываешь его на карту памяти.

А вот тут начинается самое интересное. В свободном доступе образов для записи на карту памяти нет 🙁 .

Единственный вариант, который мне подсказали в чате Астра Линукс, это запрашивать rootfs для записи на карту памяти через их менеджера.

Также стоит отметить у Астры есть версия для arm архитектуры и обозначается она как 4.7, где 4 -> это код дистрибутива под архитектуру arm, а 7 — версия (подробнее про версии астры нужно читать на их Вики [https://wiki.astralinux.ru/pages/viewpage.action?pageId=53646577] ) на данный момент последняя версия которая есть в репозиторий 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[https://wiki.debian.org/Debootstrap]
Этот инструмент позволяет установить минимальную операционную систему (как понятно из названия debian систему) в директорию на вашей основной операционной системе.
Как вы понимаете ставится минимальная система, в которую потом можно сделать chroot и до установить остальные компоненты. С установкой системы разобрались теперь давайте поговорим про загрузчик rpi4.

Для загрузки rpi4 (ну как я понимаю также как и для загрузки rpi3) нужно на отдельном разделе который FAT который будет помечен как загрузочный разместить файлы необходимые для загрузки а именно ядро, инитрд и файлы прошивки rpi.

Таким образом задача простая:
            1) Разметить карту памяти на два раздела загрузочный и основной;
            2) Установить систему в основанной раздел;
            3) Зачрутиться в корень удавливаемой системы и выполнить установку ядра и генерацию инитрд, ну и в бонус создать пользователя админа и установить графику;
            4) Перезагрузиться в новую операционную систему и выполнить базовую настройку СЗИ (А то какая это астра если не будет Смоленска)

Для начала стоит отметить что для того чтобы debootstrap можно было запустить уже должна быть система из под которой я буду его использовать, для этого я просто взял образ debian 12 img и установил его на вторую малинку (вы можете делать это и с одной).

Установим parted и mtools для того чтобы разметить карту памяти и установить метки.

sudo apt install parted  sudo apt install mtools 

Размечать диск будем следующим образом 2 раздела
Первый -> загрузочный раздел с меткой 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 

Дальше наши команды уже будут выполняться из под пользователя рут который зачрутился в каталог /mnt/media/root.

Для работы с репозиториями по https нужно поставить два пакета:
apt-transport-https
ca-certificates
Сейчас у нас в sources.list прописан только один репозиторий (http://dl.astralinux.ru/astra/stable/4.7_arm/repository-main) который мы указали при использовании утилиты 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  

И теперь попытаемся загрузиться с карты памяти.

При входе в систему обнаружим что рабочий стол синим.

Это значит что мы запустили систему по низким уровнем целостности. В данном случае у нас фактически орел. давайте это исправлять.

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 

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

Теперь включаем МКЦ. Так как каталог /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. Дело в том что нормальной инструкции по установке я не нашел, да и нигде не было информации что она будет работать.
Но даже не смотря на всё это я практически с нуля прошёл процесс установки системы и теперь лучше понимаю что происходит на каждом этапе.


ссылка на оригинал статьи https://habr.com/ru/articles/894816/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *