Full Stack in The Wild

. . . или проекты старого сисадмина

Инструменты пользователя

Инструменты сайта


astra:os-setup

Установка ОС в минимальном варианте

Начать можно с:

виртуальное или совместимое «железное» устройство x86-64
загрузочная прошивка BIOS/UEFI (без secure boot)
RAM 512MB
HDD 2GB
установочный носитель debian-netinst.iso
Доступ к сетевому репозиторию операционной системы https://download.astralinux.ru

Идея установки заключается в загрузке устройства с внешнего debian-носителя, подготовке локального диска и debootstrap на него минимального набора пакетов из сетевого репозитория ОС.

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

Установка

rescue mode

Добыть отсюда https://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/ netboot-образ, загрузиться с него и перейти в Режим восстановления (Rescue mode)

В режиме восстановления:

  • на вопросы Мастера отвечать выбором значения по умолчанию
  • пропустить настройку сети (Do not configure the network…)
  • не монтировать корневой раздел (Do not use a root…)
  • запустить командную оболочку (Execute a shell…)

сетевые настройки

Узнать имя необходимого сетевого адаптера и настроить его, например:

ip a
ip a add 192.168.0.2/24 dev enp1s0
ip r add default via 192.168.0.1
echo "nameserver 192.168.0.1" > /etc/resolv.conf
ping dl.astralinux.ru

:!: DHCP-клиент может отсутствовать в режиме восстановления.

удаленный доступ

Опционально, для возможности удаленного доступа к устройству (в том числе для «copy+paste» установки) запустить netcat-telnet, например:

udpkg -i /cdrom/pool/main/c/coreutils/coreutils*
mkfifo /f
cat /f | /bin/sh -i 2>&1 | nc -l -p 23 192.168.0.2 > /f

Для подключения с удаленного устройства:

nc 192.168.0.2 23

подготовка диска

Примеры разметки диска целиком:

fdisk -l

BIOS

Device     Boot Start     End Sectors Size Id Type
/dev/vda1  *     2048 4194303 4192256   2G 83 Linux

UEFI

Device     Start     End Sectors Size Type
/dev/vda1   2048   83967   81920  40M EFI System
/dev/vda2  83968 4194270 4110303   2G Linux filesystem

Узнать тип загрузчика UEFI/BIOS можно по наличию/отсутствию каталога /sys/firmware/efi.

Подготовить и смонтировать в /media корень будущей системы (с возможным вложенным монтированием)

:!: ESP-раздел сейчас не нужен, он будет создан позже, поэтому в простом случае для UEFI-системы:

mkfs.ext4 -F -m 0 /dev/vda2
mount /dev/vda2 /media

swap

Опционально, в случае экстремальной нехватки оперативной памяти, создать файл подкачки, например:

dd if=/dev/zero of=/media/swap bs=1M count=256
chmod 0600 /media/swap
mkswap /media/swap
swapon /media/swap
free

debootstrap

Указать размещение main-репозитория системы, например:

A=https://download.astralinux.ru/astra/stable/1.8_x86-64/main-repository

Заменить текущий debootstrap версией из репозитория:

wget $A/dists/1.8_x86-64/main/binary-amd64/Packages.gz
P=$(zcat Packages.gz | grep "debootstrap.deb" | cut -d ' ' -f 2)
wget $A/$P
udpkg -i debootstrap*
udpkg -i /cdrom/pool/main/a/attr/libattr1-udeb*
debootstrap --version

И, наконец, установить минимальную базовую систему:

debootstrap --no-check-gpg --variant=minbase 1.8_x86-64 /media $A

ядро и загрузчик (chroot)

Минимальная базовая система не содержит ядра (kernel) и загрузчика (grub). Их следует доустановить, переключившись (chroot) в только что собранную ОС.

Почистить и смонтировать виртуальные каталоги:

umount /media/sys/firmware/efi/efivars /media/boot/efi /media/sys /media/run /media/proc /media/dev
for m in dev proc run sys tmp; do rm -rfv /media/$m/*; done
for m in dev proc run sys;     do mount -o bind /$m /media/$m; done

Переключиться в минимальную базовую систему (chroot):

HOME=/root SHELL=/bin/bash chroot /media
cd; pwd

В зависимости от типа выбрать пакеты загрузчика:

GRUB="grub-efi efibootmgr dosfstools" # UEFI
GRUB="grub-pc"                        # BIOS

Установить ядро, загрузчик и самое необходимое:

apt-get -y clean
apt-get -y update
apt-get -y --no-install-recommends --no-install-suggests install busybox dbus linux-6.1-generic lsb-release parsec ssh zstd $GRUB

Дополнительные драйверы/прошивки установить при необходимости (для виртуальной машины может не потребоваться вообще):

apt-get -y clean
apt-get -y update
apt-get -y --no-install-recommends --no-install-suggests install linux-firmware

Изменить [удалить] пароль root:

passwd [-d] root

Опционально, разрешить:

echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/99-SetupPermitRootLogin.conf

Используя systemd-networkd настроить будущую сеть, например:

cat > /etc/systemd/network/enp1s0.network << EOF 
[Match]
Name=enp1s0
 
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
#DHCP=ipv4
EOF
 
systemctl enable systemd-networkd

Создать /etc/fstab с параметрами монтирования корневого раздела, например:

eval $(blkid -o export $(grep -w '/' /proc/mounts | awk '{print $1}'))
echo "UUID=$UUID / $TYPE discard 0 1" > /etc/fstab

Для UEFI создать ESP-раздел, например:

ESP=/dev/vda1
mkfs.fat -F 32 $ESP
eval $(blkid -o export $ESP)
echo "UUID=$UUID /boot/efi $TYPE umask=0077 0 2" >> /etc/fstab
mkdir -pv /boot/efi
mount -av

Для UEFI смонтировать виртуальную файловую систему:

mount -t efivarfs none /sys/firmware/efi/efivars

Для UEFI (опционально) навести порядок в загрузочном меню, удалив «лишнее»:

efibootmgr
efibootmgr -B -b 0
. . .
efibootmgr

Наконец, установить загрузчик, например:

update-grub
grub-install --removable # для UEFI
grub-install /dev/vda    # для UEFI и BIOS

И перезагрузить устройство:

exit
sync
swapoff -a
umount /media/sys/firmware/efi/efivars /media/boot/efi /media/sys /media/run /media/proc /media/dev /media
reboot

Если были произведены соответствующие настройки (см. выше), то после перезагрузки устройство будет доступно по сети (ssh) пользователю root.

Настройка

Первоначальная настройка системы (практически все - опционально):

swap

Создать файл подкачки, например размером 4GB:

dd if=/dev/zero of=/swap bs=1M count=4096
chmod  -v 0600 /swap
mkswap -f      /swap
swapon         /swap
echo "/swap swap swap defaults 0 0" >> /etc/fstab

astra-admin

Создать магическую группу astra-admin с GID=1001 и правом sudo:

groupadd --gid 1001 astra-admin
echo "%astra-admin ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/astra-admin
chmod 0440 /etc/sudoers.d/astra-admin

сетевые настройки

Отключить IPv6 на интерфейсе, например:

echo "LinkLocalAddressing=no" >> /etc/systemd/network/enp1s0.network
echo "IPv6AcceptRA=no"        >> /etc/systemd/network/enp1s0.network

Настроить DNS-клиент, например:

echo "nameserver 192.168.0.1" > /etc/resolv.conf

apt

Отключить установку рекомендуемых и предлагаемых пакетов:

apt-config dump | grep ::Install- | tr 1 0 > /etc/apt/apt.conf.d/99RecommendsSuggests
apt-config dump | grep ::Install-

Скорректировать /etc/apt/sources.list, например:

cat > /etc/apt/sources.list << EOF
deb https://download.astralinux.ru/astra/stable/1.8_x86-64/main-repository/     1.8_x86-64 main contrib non-free non-free-firmware
deb https://download.astralinux.ru/astra/stable/1.8_x86-64/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
EOF
apt clean
apt update

apt install

Установить обязательные и # прочие пакеты:

apt install astra-safepolicy locales netbase # fdisk less mc iproute2 iputils-ping qemu-guest-agent

региональные параметры

В минимальной сборке - английский язык и не используется русификация консоли:

sed -i 's/.*en_US.UTF-8.*/en_US.UTF-8 UTF-8/gI' /etc/locale.gen 
locale-gen
localectl set-locale en_US.UTF-8
localectl set-x11-keymap "us,ru" "pc105" "." "grp:alt_shift_toggle"
echo "KEYMAP=us" > /etc/vconsole.conf
localectl

Перелогиниться для применения всех настроек.

активные службы(сервисы)

Отключить некоторые службы и добиться, например:

systemctl list-unit-files --state=enabled
 
auditd.service                       enabled enabled 
getty@.service                       enabled enabled 
parsec.service                       enabled enabled 
ssh.service                          enabled enabled 
swap-wiper.service                   enabled enabled 
systemd-network-generator.service    enabled enabled 
systemd-networkd-wait-online.service enabled disabled
systemd-networkd.service             enabled enabled 
systemd-networkd.socket              enabled enabled 
astra-safepolicy.target              enabled enabled 
 
10 unit files listed.
systemctl list-unit-files --state=enabled --global
 
0 unit files listed.

Конкретизировать загрузочный таргет:

systemctl set-default multi-user.target

прочее

Настроить grub:

sed -i 's/.*GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/g' /etc/default/grub
sed -i 's/.*GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="mitigations=off quiet"/g' /etc/default/grub
update-grub

Настроить синхронизацию времени, например с помощью systemd:

apt install systemd-timesyncd
sed -i 's/#NTP=.*/NTP=ru.pool.ntp.org/g' /etc/systemd/timesyncd.conf
timedatectl set-timezone Europe/Moscow
timedatectl

Указать имя хоста:

hostnamectl set-hostname localhost

безопасность

Создать локального администратора и заблокировать root:

adduser --add-extra-groups administrator
adduser administrator astra-admin
 
rm -fv /etc/ssh/sshd_config.d/99-SetupPermitRootLogin.conf
usermod --password '*' root

Обязательно установить (минимальный) уровень безопасности и перезагрузить устройство:

astra-modeswitch set 0
reboot

Результат

$ cat /etc/astra/build_version 
1.8.1.16
 
$ /sbin/astra-modeswitch getname
base(orel)
 
$ lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda    252:0    0   2G  0 disk 
└─vda1 252:1    0   2G  0 part /
 
$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       2.0G 1017M  945M  52% /
 
$ free -m
               total        used        free      shared  buff/cache   available
Mem:             457          76         306           0          85         380
Swap:              0           0           0
 
$ sudo journalctl -b -p err
-- No entries --
 
$ sudo systemctl --failed
  UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed.

Подготовка диска к клонированию:

sed -i "s/^Address=/#Address=/g" /etc/systemd/network/*
rm -rfv /etc/ssh/ssh_host_* /var/lib/dbus/machine-id /var/log/journal
truncate -s 0 /etc/machine-id
history -c; rm -fv /root/.bash_history; poweroff