Содержание статьи
Десктоп
Начнем с десктопной версии. Для нее нам понадобится добавить в Arch графическое окружение и автостарт.
Если же тебе нужен серверный вариант, то это руководство можешь рассматривать как пример, а весь нужный софт выберешь сам. Это просто: находишь описание нужного сервиса на официальной вики и применяешь инструкцию к каталогу airootfs как корню твоей будущей системы. Впрочем, всё по порядку.
Собрать список пакетов, который бы устроил всех, нереально. Поэтому приведу пример установки и настройки на основе того, что я выбрал для себя, а ты уже сам решишь, что убрать и добавить.
Вот что будет на нашей флешке:
- базовые пакеты Archiso для сборки официального образа;
- графическая система X.org;
- рабочая среда Xfce 4;
- браузер;
- несколько текстовых редакторов;
- дополнительные пакеты, нужные в повседневной работе.
Подготовка
В статье «Карманный Arch. Делаем флешку с живым образом Arch Linux» я уже рассказывал о том, как сделать загрузочный внешний диск с Arch Linux. В этой же статье я покажу, как сделать свой конфиг для утилиты Archiso. Дальше ты можешь воспользоваться инструкцией из первой статьи, чтобы создать образ для такой же флешки.
Дальше мы будем создавать и наполнять каталог airootfs
и составлять список пакетов в файле packages.
.
Если при установке пакета в систему будут необходимы специальные настройки, мы внесем их в airootfs
.
Минимальный образ
Образ я окрестил xrerus, где X — в честь графической среды (или журнала «Хакер», как тебе больше нравится), re — от release engineering, ну а почему rus, ты, думаю, догадаешься.
Все действия мы будем производить с привилегиями суперпользователя, так что сразу пиши su
и вводи пароль.
Поскольку за основу я взял официальный образ Arch Linux, мы начнем с того, что скопируем его и переименуем в xrerus.
cp -rv /usr/share/archiso/configs/releng xrerus
Либо можно сразу скачать образ из официального репозитория, если ты еще этого не сделал:
git clone https://gitlab.archlinux.org/archlinux/archiso.git
Кстати, при выборе пакетов ограничимся только официальным репозиторием. Причины две: более надежная поддержка пакетов и установка без дополнительных действий. Добавление пакетов из других репозиториев, возможно, рассмотрим в другой раз.
Для удобства записываем путь до каталога с конфигами в переменную:
export ARCHISO=/home/ЛОГИН/xrerus
Графическая система
В минимальном образе главная задача — универсальность. Нам нужно, чтобы он работал на большинстве компьютеров. Поэтому добавляем xorg-server, менеджер входа, открытые драйверы и сервер VNC.
Начнем с настройки менеджера входа LightDM.
Создаем каталог для файлов настроек:
mkdir -p $ARCHISO/airootfs/etc/lightdm
Файл настроек greeter-gtk
:
vim $ARCHISO/airootfs/etc/lightdm/lightdm-gtk-greeter.conf
[greeter]background = /usr/share/backgrounds/wallpaper
Не забываем скопировать файл для фона.
mkdir -p $ARCHISO/airootfs/usr/share/backgrounds
cp -v ~wallpaper $ARCHISO/airootfs/usr/share/backgrounds/wallpaper
info
Мы не ставим никаких пакетов с обоями, так что для начала будет черный фон, а красоту можешь добавить сам.
Включаем автозапуск сервиса LightDM:
ln -sv /usr/lib/systemd/system/lightdm.service $ARCHISO/airootfs/etc/systemd/system/display-manager.service
В конец файла packages.x86_64 дописываем устанавливаемые пакеты:
$ARCHISO/packages.x86_64
...
xorg-server
xorg-xinit
xorg-xrandr
lightdm
lightdm-gtk-greeter
xf86-video-dummy
xf86-video-fbdev
xf86-video-vesa
xf86-video-amdgpu
xf86-video-ati
xf86-video-intel
xf86-video-nouveau
autorandr
tigervnc
Рабочая среда Xfce 4
Тут у нас есть два варианта: можно установить группу пакетов xfce4, а можно выбрать вручную только самые нужные пакеты. Мы пойдем по второму пути.
Добавляем пакеты в список packages.
:
xfwm4
xfce4-battery-plugin
xfce4-notifyd
xfce4-panel
xfce4-power-manager
xfce4-pulseaudio-plugin
xfce4-session
xfce4-settings
xfce4-terminal
xfce4-xkb-plugin
xfce4-clipman-plugin
accountsservice
xdg-utils
polkit
Софт
Дальше я просто перечислю все пакеты с софтом, которые я выбрал для своего образа.
Браузеры:
$ARCHISO/packages.x86_64
...
luakit
firefox
firefox-i18n-ru
chromium
Редакторы:
$ARCHISO/packages.x86_64
...
vim
nano
mousepad
leafpad
Средства коммуникации:
$ARCHISO/packages.x86_64
...
discord
telegram-desktop
Дополнительные пакеты
Нам понадобятся шрифты:
$ARCHISO/packages.x86_64
...
ttf-droid
ttf-croscore
ttf-liberation
ttf-dejavu
ttf-inconsolata
Звуковые драйверы и утилиты:
$ARCHISO/packages.x86_64
...
alsa-firmware
alsa-plugins
alsa-utils
pipewire-pulse
pipewire-alsa
pipewire-jack
rtkit
pavucontrol
Если на твоей машине есть Bluetooth, то утилиты для работы с ним:
$ARCHISO/packages.x86_64
...
bluez
bluez-utils
bluez-obex
blueman
Сетевые утилиты
Тут нам надо определиться, каким из доступных средств мы будем настраивать сеть. Так как у нас десктопный вариант, мой выбор — NetworkManager.
Автозагрузка NetworkManager при старте:
ln -sv /usr/lib/systemd/system/NetworkManager.service $ARCHISO/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
ln -sv /usr/lib/systemd/system/NetworkManager-dispatcher.service $ARCHISO/airootfs/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service
ln -sv /usr/lib/systemd/system/NetworkManager-wait-online.service $ARCHISO/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service
Также не забудем запустить сервис сопоставления доменных имен:
ln -sv /usr/lib/systemd/system/systemd-resolved.service $ARCHISO/airootfs/etc/systemd/system/systemd-resolved.service
Устанавливаем имя хоста:
echo archi > $ARCHISO/airootfs/etc/hostname
Пишем /
:
vim $ARCHISO/airootfs/etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 archi
Если хост использует статический IP-адрес, то его следует указать вместо 127.0.1.1. Если у системы есть fully qualified domain name (FQDN), вставь его перед именем хоста. Подробнее про настройку сети — в официальной вики.
Добавляем пакеты в список для установки.
$ARCHISO/packages.x86_64
...
network-manager-applet
networkmanager
networkmanager-openconnect
networkmanager-openvpn
networkmanager-pptp
networkmanager-vpnc
networkmanager-l2tp
dnsutils
modemmanager
mobile-broadband-provider-info
И не забудем про пользовательские утилиты:
$ARCHISO/packages.x86_64
...
openssh
git
wget
curl
Работа с файлами
Стандартный файловый менеджер в Xfce 4 — это Thunar. Добавляем его.
$ARCHISO/packages.x86_64
...
thunar
thunar-archive-plugin
thunar-media-tags-plugin
thunar-volman
Для более комфортной работы с файловыми системами ставим дополнительные пакеты:
$ARCHISO/packages.x86_64
...
gvfs
gvfs-nfs
gvfs-smb
nfs-utils
ntfs-3g
sshfs
Дополнительный софт
Дальше в списке нет обязательных и незаменимых программ, так что можешь убирать или заменять что угодно на свое усмотрение.
Я себе добавил:
-
GParted
— графический редактор разделов и дисков (утилита особенно пригодится, если ты собираешься использовать образ как установочный диск); -
feh
— смотрелка картинок; -
Flameshot
— если понадобится делать скриншоты; -
mpv
— аудио- и видеоплеер; -
htop
— монитор системных ресурсов; -
mc
— двухпанельный файловый менеджер.
Также я добавил несколько самых важных сетевых утилит и комплект архиваторов:
$ARCHISO/packages.x86_64
...
gzipp7zip
unrar
unzip
file-roller
С установкой пакетов на этом всё, но есть еще несколько настроек, которые нам надо сделать.
Настройка
На определенном этапе загрузки управление переходит к образу initramfs-linux.
. Для установочного ISO этот образ особый. Так как наш инсталл Arch Linux не будет отличаться от обычной установки на жесткий диск, мы можем использовать стандартные настройки для создания initramfs-linux.
.
Если менять настройки mkinitcpio, то конфиг перестанет быть пригодным для сборки обычных ISO-образов. Это легко исправить, либо вернув потом настройки mkinitcpio, либо сделав в этом файле две секции: одну — для сборки ISO, другую — для наших IMG. Но на практике мы пойдем по наиболее легкому пути — выберем создание initramfs-linux.
с настройками по умолчанию.
Так как предполагается, что мы делаем образ из системы Arch Linux x86-64, мы можем подсмотреть пример файла mkinitcpio.conf на нашей системе. Далее предполагается, что мы используем стандартное ядро — то, что содержится в пакете linux
.
Копируем файлы настроек mkinitcpio:
cp -v /etc/mkinitcpio.d/linux.preset $ARCHISO/airootfs/etc/mkinitcpio.d/linux.preset
cp -v /etc/mkinitcpio.conf $ARCHISO/airootfs/etc/mkinitcpio.conf
Удаляем из него лишнее:
$ARCHISO/airootfs/etc/mkinitcpio.d/linux.preset
ALL_kver="/boot/vmlinuz-linux"PRESETS=('default')default_config="/etc/mkinitcpio.conf"default_image="/boot/initramfs-linux.img"
Редактируем файл /
. В параметре HOOKS необходимо убрать autodetect.
$ARCHISO/airootfs/etc/mkinitcpio.conf
...
HOOKS=(base udev microcode modconf kms keyboard keymap consolefont block filesystems fsck)
...
Команды для включения русской локализации возьмем из официальной вики.
Ставим общесистемное значение переменной LANG:
echo LANG=ru_RU.UTF-8 > $ARCHISO/airootfs/etc/locale.conf
Файл /
содержит списки доступных локализаций системы, рекомендую оставить эти две:
$ARCHISO/airootfs/etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Ставим шрифт и параметры изменения раскладки.
$ARCHISO/airootfs/etc/vconsole.conf
KEYMAP=ruFONT=cyr-sun16
Установи свою временную зону.
ln -sfv /usr/share/zoneinfo/Europe/Moscow $ARCHISO/airootfs/etc/localtime
При необходимости еще можно добавить обычного пользователя. Например, archi
.
Дописываем в конец файла passwd
:
echo
И добавляем запись в shadow
:
echo archi::14871:::::: >> $ARCHISO/airootfs/etc/shadow
warning
Мы задали пустой пароль пользователю, то есть зайти в систему он сможет без указания пароля.
mkdir -p $ARCHISO/airootfs/home/archi
chown 1000:users $ARCHISO/airootfs/home/archi
Почему 1000, а не имя archi? Если на твоем локальном компьютере есть пользователь с таким же именем, но с другим ID, то при установке прав будет использован его номер с текущей машины и потом при загрузке свежеустановленной системы у пользователя не будет доступа к домашнему каталогу.
Настройки пользовательского окружения можно задать, используя каталог skel
($ARCHISO/
).
В готовой собранной системе при использовании команды useradd
файлы из каталога skel
копируются в каталог пользователя со сменой владельца.
Удаляем ненужные «хуки» pacman.
rm -v $ARCHISO/airootfs/etc/pacman.d/hooks/*
warning
При создании ISO-образа диска при помощи mkarchiso часть настроек будет сделана при помощи «хуков» (сценариев командной строки) менеджера пакетов pacman. Эти хуки удаляются при создании ISO-образа. Если ты планируешь использовать эту конфигурацию для создания ISO-образов с помощью mkarchiso, не удаляй хуки.
Теперь в наш конфиг входят все пакеты из официального установочного образа. Также мы добавили графический интерфейс и сетевой менеджер, настроили его автозагрузку и добавили минимальный набор программ. Теперь у нас есть конфиг для сборки образа диска для установки Arch Linux в графическом окружении. О том, как собирать сам образ, я писал в статье «Карманный Arch», можешь обратиться к ней.
На этом цветочки закончились, переходим к ягодкам.
Raspberry Pi
Можно ли тем же методом сделать образ для ARM-систем, например для Raspberry Pi? Сейчас попробуем и узнаем!
У Archiso есть две стандартные конфигурации: releng, которая используется для создания официальных образов ISO, и baseline — минимальная конфигурация для создания собственных сборок.
Сначала я хотел делать образ на основе baseline, но оказалось, что переделать там надо больше половины, так что я решил собирать образ с нуля. К тому же совместимость с Archiso для Raspberry Pi нам не нужна.
Подготовка
Я буду собирать конфиг для Raspberry Pi 4B+ — просто потому, что она у меня есть. Не думаю, что для других версий «Малины» будут какие‑то серьезные отличия.
За основу возьмем образ Arch Linux ARM.
Напомню, что все действия мы будем делать от рута, поскольку владельцем всех файлов в каталоге с настройками должен быть root.
su
cd ~
Создаем наш рабочий каталог.
mkdir -v pi
Для удобства записываем путь до каталога с настройками в переменную.
export ARCHISO=/root/pi
Стандартные конфиги Archiso сделаны для архитектуры x86-64. Мы же будем собирать для AArch64. У нас будут другие репозитории, поэтому нам надо отредактировать файл pacman.
нашего конфига.
Я пишу статью, работая уже на Arch Linux ARM, поэтому могу просто скопировать их конфиг:
cp /etc/pacman.conf $ARCHISO/pacman.conf
Но для полноты картины приведу фрагмент файла, который отличается от версии для x86-64:
$ARCHISO/pacman.conf
...Architecture = aarch64...[core]Include = /etc/pacman.d/mirrorlist[extra]Include = /etc/pacman.d/mirrorlist[alarm]Include = /etc/pacman.d/mirrorlist[aur]Include = /etc/pacman.d/mirrorlist
И подправим файл со списком репозиториев:
/etc/pacman.d/mirrorlist
Server = http://mirror.yandex.ru/archlinux-arm/$arch/$repoServer = http://mirror.archlinuxarm.org/$arch/$repo
Как и раньше, список пакетов мы будем хранить в файле packages
. Создадим файл и заодно запишем в него первый базовый пакет:
echo base > $ARCHISO/packages.aarch64
Пакеты ARM
В нашем будущем образе не хватает самых важных пакетов: ядра, загрузчика и ключей для pacman. Добавим их в конец нашего файла packages.aarch64:
$ARCHISO/packages.aarch64
raspberrypi-bootloader
linux-rpi
linux-rpi-headers
archlinuxarm-keyring
Пара слов о ядрах и загрузчиках. Для Raspberry Pi два загрузчика: raspberrypi-bootloader
и uboot-raspberrypi
. С ядрами тоже есть варианты, но не каждый загрузчик подходит к каждому ядру. В принципе, при попытке поставить несовместимые пакеты выводится соответствующее сообщение, но на всякий случай я тебя предупредил.
Так как мы жестко привязываемся к железу, можем заранее записать файл /
. Точнее, даже обязательно сделать это!
echo "/dev/mmcblk0p1 /boot vfat defaults,errors=remount-ro 0 0" > $ARCHISO/airootfs/etc/fstab
Настройка загрузчика
Загрузчик настраивается через файл /
:
vim $ARCHISO/airootfs/boot/config.txt
Там доступно множество настроек, которые можно менять, а можно и не менять. Дальше я выставлю их для своей RPi 4B+, а если у тебя другая версия, обязательно сверься с документацией.
Строку загрузки оставляем как есть:
initramfs initramfs-linux.img followkernel
Для отключения черной рамки по периметру экрана добавляем такой параметр:
pacman-key --initpacman-key --populate archlinuxarm
Для отключения цветной заставки перед загрузкой:
disable_splash=1
Если ты подключаешь монитор по HDMI и в нем нет встроенных колонок, то звук можно выводить через мини‑джек. Для этого надо указать загрузку видеодрайвера без вывода звука:
dtoverlay=vc4-kms-v3d-pi4,noaudio=on
Этот параметр должен быть указан выше строки загрузки (initramfs
).
Еще можно отключить индикаторы на плате:
dtparam=pwr_led_trigger=default-ondtparam=pwr_led_activelow=offdtparam=act_led_trigger=nonedtparam=act_led_activelow=off
И индикаторы разъема RJ45:
dtparam=eth_led0=4dtparam=eth_led1=4
Название параметров для индикаторов недавно менялось, так что на всякий случай сверься с доками.
На этом все. Установить пакеты и настроить пользовательское окружение можешь по аналогии с нашим образом xrerus. Достаточно повторить все действия за исключением раздела настройки mkinitcpio.
Единственная оговорка: для «Малины» не нужны будут пакеты xf86-video-ati
и xf86-video-intel
, так что просто не добавляй их в свой packages.
.
Сборка образа для Raspberry Pi
Сборка образа тоже происходит уже описанным выше способом, но есть важное отличие: нам понадобится сделать два раздела на диске. Первый раздел будет называться boot
, и его нужно отформатировать в FAT32. Второй раздел — корневой.
Разбиваем диск:
sgdisk -o -n 1:0:+256M -t 1:EF00 -n 2:0:0 -t 2:8300 usb.img
При установке пакетов не забудь использовать файл со списком пакетов — packages.
.
grep -v '^#' $ARCHISO/packages.aarch64 | tr '\n' ' ' | xargs pacstrap -c -G -M -C $ARCHISO/pacman.conf -- /mnt/usb
Еще тебе надо будет инициализировать ключи pacman. Это можно сделать во время создания образа, когда зайдешь в chroot, либо уже в готовой системе перед первым запуском pacman.
Инициализируем ключи для pacman:
pacman-key --initpacman-key --populate archlinuxarm
Альтернативный вариант
Если ты планируешь использовать карту памяти на 32 Гбайт или больше, то создавать образ с большим пустым местом не всегда удобно. В официальном дистрибутиве Arch Linux ARM сделано именно так. Вся установка происходит в каталог, а затем его просто пакуют в архив. При установке на накопитель диск разбивается на нужные разделы и форматируется, а затем туда распаковывается архив. Переписывать это руководство я не буду, оно доступно на сайте проекта Arch Linux ARM.
GPIO
У Raspberry Pi есть интерфейс для подключения всякого оборудования, в том числе самодельного, он называется GPIO. Для работы с ним из Python нам понадобится пакет из репозитория AUR — python-rpi-gpio
.
Скачиваем python-rpi-gpio
, собираем и устанавливаем его:
git clone https://aur.archlinux.org/python-rpi-gpio.git
cd python-rpi-gpio
makepkg -si
Выводы
Собрав образ xrerus, мы получили систему, аналогичную официальному установочному диску, но с графическим интерфейсом и дополнительными программами. То же самое мы проделали и с прицелом на Raspberry Pi, так что теперь у тебя будет шаблон, по которому ты сможешь делать свои дистрибутивы Arch Linux.