Рубрики
alpine linux

Alpine Linux

Ссылки:

https://alpinelinux.org/
https://docs.alpinelinux.org
https://pkgs.alpinelinux.org/packages
https://habr.com/ru/company/digdes/blog/415279/
https://pingvinus.ru/distribution/alpine-linux
https://wiki.alpinelinux.org/wiki/Linux_Router_with_VPN_on_a_Raspberry_Pi

Зачем нам это надо?:

Alpine Linux - минималистический дистрибутив
Этот дистрибутив может вам понравиться по следующим причинам:

Если вы любите минимализм и инструменты, ориентированные на выполнение поставленной задачи без лишних свистелок и украшений;
Если вы заметили, что имеющиеся «мэйнстримные» дистрибутивы немного (?) раздуты и избыточны;
Если вы захотели решить имеющуюся задачу простым способом.

Под «мэйнстримом» подразумевают тройку CentOS — Debian — Ubuntu.

Чего нету \ иди делается по другому:
systemd - инициализация системы и не только
systemd / journald = rsyslogd + auditd - логи
systemd / crond - планировщик задач
networking / networkd / NetworkManage / netplan - управление сетью
tuned / firewalld / iptables - управление firewall
python


Сравнение дистрибутивов:

Лидером избыточности по дисковому пространству и числу пакетов оказывается Ubuntu 18.04 (2,8 ГБ дискового пространства, 342 пакета, 31 активный сервис systemd, 15 процессов при входе). 
Семейство systemd тут представлено в максимальном объеме — systemd, networkd, timesyncd, resolved, logind, есть dbus.


CentOS 7.5.1804 проигрывает по диску и числу пакетов, но лидер по вероятно-избыточным сервисам 
(1.1 ГБ дискового пространства, 299 пакетов, 34 активных сервиса systemd, 19 процессов при входе, среди которых — NetworkManager, firewalld, tuned, postfix, polkitd, auditd, journald + rsyslogd, dbus).


Debian 9.4.0 пытались сильно не надувать: 940 МБ, 334 пакета, 25 активных сервисов systemd, 14 процессов при входе. 
Само собой, тут тоже есть systemd (а также journald, timesyncd и сопутствующий dbus), но без особого фанатизма в части управления сетью.

Что ожидают от мини дистрибутива:

0. Загрузчик, который дотянет нас до ядра
1. Само ядро ОС (в рассматриваемом случае — linux)
2. Система инициализации, которую ядро запустит по готовности. 
Желательно, по простоте недалеко ушедшая от топора.
Минимальный набор процессов, который запустит система инициализации. 
Окончательная инициализация устройств и определение дополнительных параметров ядра
3. Обеспечение журналирования (можно с текстовыми журналами? Ну пожалуйста)
4. Конфигурация сети (хорошо бы, с меньшим числом управляющих прослоек);
5. Синхронизация времени (ntpd / chronyd);
6. Несколько локальных консолей;
7. Опционально — периодическое выполнение задач (сrond);
8. Опционально — удаленный доступ к системе (sshd);
9. Хорошо бы еще сохранять и восстанавливать конфигурацию межсетевого экрана.
10. Менеджер пакетов

Alpine:

0. Установка с использованием консольной утилиты setup-alpine
1. В качестве загрузчика взят extlinux из состава проекта syslinux
2. Небольшой инструмент сборки mkinitfs для создания временной файловой системы, используемой при загрузке
3. Система инициализации openrc с определением зависимостей между сервисами, уровнями запуска и с возможностью скриптования. 
4. Замена стандартной библиотеки GNU libc на более легковесную musl libc
5. Вместо пакета GNU coreutils большинство стандартных системных утилит в несколько урезанном исполнении входят в состав пакета busybox, который может быть Вам знаком по встраиваемым решениям
6. По умолчанию используется командный интерпретатор ash в составе busybox. Само собой, никто не мешает при необходимости поставить bash, ну и systemd;
7. Собственный пакетный менеджер apk и собственная инфраструктура распространения пакетов.

Apline init:

Init использует файл /etc/inittab

Запустить систему инициализации openrc для поочередного достижения требуемых уровней инициализации 
openrc использует не классические уровни инициализации 0-6, а собственные уровни/группы sysinit — boot — default

Переменных, заданных в файлах каталога /etc/conf.d
Скриптов запуска, находящихся в каталоге /etc/init.d

/etc/init.d/syslog - скрипт запуска openrc

Apline демоны:

Сначала, на уровне sysinit:
dmesg — выставляется уровень журналирования для сообщений от ядра
devfs — монтируется и настраивается /dev
mdev — запускается менеджер устройств
hwdrivers — загружаются модули устройств на основе информации из /sys и /dev

Следующим идет уровень boot:
modules — загружаются модули ядра, перечень которых определен в /etc/modules
hwclock — настраиваются аппаратные часы реального времени
sysctl — задаются параметры ядра, определенные нами в /etc/sysctl.conf
swap — подключается swap-раздел
bootmisc — очищаются временные каталоги
urandom — настраивается генератор случайных чисел
keymaps — инициализируется раскладка клавиатуры
hostname — задается имя машины, которое определено в /etc/hostname
networking — поиск и инициализация интерфейсов с использованием информации из /etc/network/interfaces
syslog — запускается демон журналирования из состава busybox


И наконец, уровень default:
chrony — запускается NTP-сервис
crond — запускается сервис выполнения задач по расписанию
acpid — запускается сервис отслеживания событий питания
sshd — запускается сервис удаленного доступа


Зависимости:
sysfs — монтирование /sys
fsck — проверка и исправление файловых систем
root — монтирование корневой системы на запись/чтение
localmount — монтирование всех файловых систем, перечисленных в /etc/fstab
klogd — журналирование событий ядра


Открываем одну из локальных консолей, где нас поджидает getty, вводим логин, 
после чего передаем пароль процессу login и получаем доступ к запущенному командному интерпретатору ash 
(при запуске которого выполняется содержимое файлов /etc/profile, /etc/profile.d/* и ~/.profile для подготовки пользовательского окружения).

Доп:

Авторы дистрибутива сделали свою собственную надстройку над iptables под названием «Alpine Wall».
И она не висит постоянно отдельным процессом в системе

Для тех, кто любит управлять сервером через веб-интерфейс, подготовлен пакет «Alpine Configuration Framework». Без PHP или Perl, но с Lua

Для тех, кто желает рабочего стола, есть возможность установки графической среды (хотя это может оказаться больно в начале)

Для особых ценителей имеется «установка» Alpine в памяти с хранением конфигурации на внешнем хранилище (см. описание инструмента lbu)

Система управления пакетами apk-tools:

apk - утилита для установки, обновления и удаления пакетов в работающей системе. (Не путать с apk форматом для Android)
lbu - утилита для сохранения данных, необходимых для последующего восстановления системы в ранее сконфигурированное состояние
lbu происходит от названия "Alpine local backup"
Пакеты для Alipne Linux представляют собой tar.gz архивы и имеют расширение .apk

add - добавление и обновление пакетов
del - удаление пакетов
fix - выполнить восстановление или обновление, установленных пакетов
update - обновить индекс — получить актуальную информацию о пакетах, находящихся в репозиториях
info - вывести информацию об установленных или доступных пакетах
search - поиск по названию или описанию пакетов
upgrade	- обновление пакетов
cache	- управление кешем
version	- сравнение версий установленных и доступных в репозитории пакетов
index - создать индекс на основе списка пакетов
fetch - скачать, но не устанавливать пакеты
audit - показать изменения в файловой системе после установки пакета
verify - проверить подпись
dot - создать граф (graphviz) для описания структуры пакета
policy - показать репозиторий, из которого пакет был установлен, а также репозитории, в которых также содержится этот пакет
stats - отобразить статистику, включая количество установленных и доступных пакетов, количество директорий, файлов и т.д.
manifest - отобразить контрольные суммы для файлов, содержащихся в пакете


/etc/apk/repositories - список репозиториев представлен в файле 
---------------------------------------------------------------
/media/sda1/apks
http://dl-3.alpinelinux.org/alpine/v2.6/main
https://dl-3.alpinelinux.org/alpine/v2.6/main
ftp://dl-3.alpinelinux.org/alpine/v2.6/main
---------------------------------------------------------------

Apline setup / install

Система устанавливается в консольном режиме
Для установки используется скрипт setup-alpine

Существует три режима установки, которые влияют на то, как будет работать система:
Diskless Mode — вся система и все приложения загружаются в RAM.
Data Disk Mode — система запускается из RAM, но swap и /var монтируются с диска.
Sys Disk Mode — традиционная установка системы на диск. По умолчанию создается три раздела: /boot, swap и /.

GCC install

!!! https://www.gnu.org/distros/free-distros.html 
apk add build-base