Перейти к содержимому

Alpine linux что это

  • автор:

Установка Alpine Linux

Итак, что же мы знаем об Alpine Linux и зачем его устанавливать? Во-первых, он базируется на musl и BusyBox, во-вторых, это единственный независимый дистрибутив Linux предоставляющий безопасность в общих целях. Его разработка была предопределена концепцией обеспечения безопасности, а для защиты от вредоносного кода было решено использовать PaX и SSP.

Стоит отметить его необычно неприхотливые требования к ресурсам системы. Пакеты используются apk, но некоторые придется установить самостоятельно. Руководство, конечно же, присутствует на сайте дистрибутива, которому необходимо не более 8 МБ, а минимальная установка на диск требует не более 130 МБ свободного места. Для управления пакетами в Alpine используется apk. И некоторых пакетов, которые Вам будут нужны, по умолчанию не будет в Alpine.

Установка Alpine Linux

Шаг 1. Загрузка образа

Переходим по этой ссылке https://www.alpinelinux.org/downloads/ и качаем образ:

Нам нужен STANDARD.

Шаг 2. Запись образа

Все как обычно, — если у вас Linux, то качаем Unebootin; если у вас Windows, то качаем Rufus. Ссылки предоставил.

Шаг 3. Настройка BIOS

Перезагружаем компьютер и заходим в BIOS. Нам надо зайти во вкладку Boot и указать в пункте 1 st Boot Device вашу флешку. Затем сохраните настройки и перезагрузите компьютер.

Шаг 4. Начало установки

Заранее говорю, что все делается через командную строку.

Пишем для входа в командную оболочку:

Далее выполняем команду:

Таким образом мы запускаем процесс установки

Шаг 5. Раскладка клавиатуры

Выбираем раскладку из списка. В моем случае это:

Жмем далее и снова пишем:

Шаг 6. Имя компьютера

При указании имени компьютера обратите внимание на то, что следует использовать числа и символы нижнего регистра. Например, имя Noma я не смог указать, зато имя noma вполне проходит по параметрам.

Шаг 7. Настройка сети

Сразу же после указания имени хоста нам предложат настройки, связанные с интернетом. Если у вас проводной интернет по DHCP, их просто пропускаем нажатием Enter. Все это можно настроить уже потом непосредственно в установленной системе.

Шаг 8. Пароль пользователя

Указываем пароль для суперпользователя. Если он 6-значный, например, то вы получите предупреждение о том, что пароль слишком слабый, но это не мешает установке.

Шаг 9. Настройка прокси

Далее вы можете установить прокси или просто пропустить. В моем случае я просто нажал Enter и пропустил этот пункт, так как все это тоже можно будет потом настроить, при необходимости.

Шаг 10. Выбор зеркала репозиториев

Вам дадут список зеркал, если вы этого не сделаете, то система будет проверять каждое и самостоятельно выберет наиболее подходящее.

Примечание для жителей Украины. Если вы не укажите зеркало, то рискуете попасть на Yandex, а с ним установка не получится, так как компания под санкциями. В вашем случае просто выберете любое другое.

Шаг 11. Настройка SSH

Если вы хотите, то можете установить и ssh сервер. И снова, на данном этапе это не является необходимым, и вы всегда сможете его поднять позже.

Шаг 12. Выбор места установки

Система предложит выбрать любой из доступных дисков для установки ОС. Я указываю следующее:

Далее вам надо выбрать для чего будет использоваться этот диск. Так как это системный диск, то я выбираю:

Получаем предупреждение о том, что все данные с выбранного диска будут удалены. Впрочем, ничего удивительного. Пишем:

Шаг 13. Завершение установки

Когда установка Alpine Linux завершится, система попросит о перезагрузке. Для этого извлекаем носитель на котором система и перезагружаемся командой:

Шаг 14. Вход в систему

Далее пишем пароль, который ранее задавали.

Шаг 15. Установка редактора nano

Так как у нас нет редактора, то мы установим. Это будет редактор Nano. Сделаем это с помощью команды:

Шаг 16. Редактирование файла с репозиториями и обновление

Теперь нам надо отредактировать файл репозиториев. Это позволит нам обновить систему и продолжить установку. Пишем:

Чтобы получить доступ к репозиторию сообщества надо раскомментиовать третью строку:

Для этого удалите # перед ней. После жмем ctrl+o -> Enter -> ctrl+x. После всего пишем команду:

Шаг 17. Установка графического интерфейса

Теперь выполняем команду:

apk add alpine-desktop

Шаг 18. Устанавливаем окружение xfce4

Шаг 19. Устанавливаем файловый менеджер

apk add thunar-volman

Достаточно тривиально, но проверено.

Шаг 20. Набор тем и иконок

apk add Faenza-icon-theme

Шаг 21. Устанавливаем менеджер входа

Так как система является легковесной, то будем работать в направлении её преимуществ. Это ответ на вопрос: А почему Slim?.

Шаг 22. Запуск сервиса DBus

Чтобы приложения могли между собой взаимодействовать, нам надо запустить сервис межпроцессорного взаимодействия (IPC). Выполняем команду:

rc-service dbus start

Работает, отлично. Теперь добавим его в автозагрузку?

rc-update add dbus

Шаг 23. Завершение установки.

Это позволит нам перезагрузить устройство и войти в систему с графическим интерфейсом.

В поле username пишем root и указываем раннее заданный пароль. Ну а дальше рабочий стол.

Теперь вы знаете как установить Alpine Linux, а также как минимально настроить систему, так, чтобы с ней можно было работать.

Зачем забивать гвозди микроскопом, если есть Alpine Linux?

По зову сердца и работе в Digital Design в качестве системного инженера, мне часто приходится сталкиваться с переусложненными программными продуктами и архитектурными конструкциями. Это вызывает страстное желание минимизации и упрощения всего, что попадается под руку, и приводит к восторгу от человеческих решений, просто делающих свою работу , без регистрации и смс .

Так я и познакомился с Alpine Linux.

Неожиданное окно

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

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

Под «мэйнстримом» я подразумеваю тройку CentOS — Debian — Ubuntu (конечно же, ими мир не заканчивается), да простят меня все верующие в эти замечательные дистрибутивы. При их использовании, периодически, на границе восприятия, возникает колкая мысль – «а может быть можно проще?».

Оно нам действительно надо?

$ holywar mode disable
Неужели для решения вашей небольшой задачи требуется все это:

Замечательная systemd. Система инициализации (уже не совсем), которая может произвести впечатление системы управления шаттлом?

Подсистема журналирования / аудита, построенная на связке вроде journald → rsyslogd + auditd?

Можно догадываться, почему это сделано именно так, но действительно ли для моей простой задачи требуется такая цепочка?

Дублирование функциональности периодического выполнения задач как в systemd, так и в crond?

Сосуществование нескольких подсистем управления сетью в разных сочетаниях: классический networking / networkd / NetworkManager?

Сервисы вида tuned и firewalld?

Локальный почтовый сервис. Вы точно будете его использовать?

Раз уж мы вспомнили про минимализм, можно очень грубо сравнить наши дистрибутивы-лидеры в их минимальном варианте установки:

  • Лидером избыточности по дисковому пространству и числу пакетов оказывается 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), но без особого фанатизма в части управления сетью.

holywar: cannot change mode to ‘disable’: Permission denied

Хочется странного

От части перечисленного выше можно (попробовать) избавиться вручную, но вдруг все уже придумано за нас? В идеале, от дистрибутива серверной операционной системы общего назначения хочется видеть:

  • Как ни странно, загрузчик, который дотянет нас до ядра;
  • Само ядро ОС (в рассматриваемом случае — linux);
  • Система инициализации, которую ядро запустит по готовности. Желательно, по простоте недалеко ушедшая от топора;
  • Минимальный набор процессов, который запустит система инициализации. Ну например:
    • Окончательная инициализация устройств и определение дополнительных параметров ядра;
    • Обеспечение журналирования (можно с текстовыми журналами? Ну пожалуйста);
    • Конфигурация сети (хорошо бы, с меньшим числом управляющих прослоек);
    • Синхронизация времени (ntpd / chronyd);
    • Несколько локальных консолей;
    • Опционально — периодическое выполнение задач (сrond);
    • Опционально — удаленный доступ к системе (sshd);
    • Хорошо бы еще сохранять и восстанавливать конфигурацию межсетевого экрана.

    И на этом почти все, остальное — дело менеджера пакетов. Меньше исполняемого кода и конфигурации – меньше багов, меньше багов – меньше багов. А система все также запущена и доступна по сети. Идея выглядит неплохо, теперь посмотрим, насколько близок к ней дистрибутив Alpine Linux.

    Про Alpine

    Чем может очаровать Alpine, особенно после CentOS? Отчаянным минимализмом!
    Ну и, конечно, отсутствием необходимости сертификации «Linux Systemd Certified Voldemort».

    Что сделали авторы:

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

    Кроме того, авторы реализовали ряд мер, ориентированных на повышение уровня защищенности базовой системы:

    • Применили патчи ядра grsecurity/PaX (про их эффективность мнения расходятся, но все же); Уже нет, спасибо коллеге из комментариев. Как раз 26 июня вышла версия 3.8.0.
    • Собрали пакеты с использованием режимов, снижающих вероятность эксплуатации ряда возможных уязвимостей.

    В итоге мы получаем систему, снабженную рядом дополнительных механизмов защиты, позволяющую решить имеющуюся задачу и занимающую около 130 МБ. В запущенной системе установлен 41 пакет и выполняется 13 пользовательских процессов, можно стучаться по ssh.

    И больше ничего. Осталось добавить то, что нужно вам (да и iptables с возможностью восстановления конфигурации при старте поставьте).

    Приоткроем крышку

    Обратите внимание – Alpine может пригодиться как учебная площадка при ознакомлении с ОС Linux! Увидеть логику работы компонентов субъективно проще, чем пытаться охватить сходу CentOS или Ubuntu:

    • Загрузчик нашей установленной системы прост, его конфигурация влезает в 12 строк:

    Конфигурация загрузчика

    • Да и в /boot не слишком многолюдно:

    вывод ls /boot

    • А вот и запущенный загрузчик без модных обоев:

    Запущенный bootloader

    • Ядро загружается, подхватывает initramfs, отрабатывает собственные шаги инициализации и вызывает команду init (которая, на самом деле, тоже идет в составе busybox). Init использует файл /etc/inittab:

    Содержимое /etc/inittab

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

      Далее состояние системы зависит от конфигурации openrc, а именно:

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

      Демоны и их привязка к уровням

      Осталось прочитать скрипты запуска и обработать их с учетом уровней запуска и зависимостей.
      Можем на примере syslog (/etc/init.d/syslog) посмотреть, как выглядит скрипт запуска openrc.

      Как видите, это не всегда эти ваши нелюбимые «портянки»:

      Пример конфигурационного файла openrc

      Переменные, используемые при выполнении скрипта, определяются в соответствующем файле /etc/conf.d/syslog. В нашем случае, в файле определена переменная SYSLOGD_OPTS=»-Z».
      Обратите внимание — в скрипте декларативно определены зависимости данного сервиса.

      Openrc честно перебирает в заданном порядке скрипты запуска, достигает уровня «default» — и вот она, рабочая система!

      Демоны под крышкой

      Что же именно скрывается под скриптами запуска openrc? Как ни странно — набор задач и демонов, перечисленных ниже.

      Сначала, на уровне 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 — запускается сервис удаленного доступа.

      Ура, после выполнения этих шагов система готова к работе! Не забудем и про зависимости от перечисленных выше сервисов, которые были заданы в init.d файлах:

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

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

      /.profile для подготовки пользовательского окружения).

      Ура, никаких дополнительных сущностей (несомненно, полезных в ряде случаев, вроде PAM) — а мы в системе!

      Осталось воспользоваться пакетным менеджером apk, и поискать нужные нам для нашей задачи пакеты. (Есть ли они там? Можно оценить это через веб-портал).

      А еще

      • Авторы дистрибутива сделали свою собственную надстройку над iptables под названием «Alpine Wall». И она не висит постоянно отдельным процессом в системе;
      • Для тех, кто любит управлять сервером через веб-интерфейс, подготовлен пакет «Alpine Configuration Framework». Без PHP или Perl, но с Lua;
      • Для тех, кто желает рабочего стола, есть возможность установки графической среды (хотя это может оказаться больно в начале);
      • Для особых ценителей имеется «установка» Alpine в памяти с хранением конфигурации на внешнем хранилище (см. описание инструмента lbu).

      Дистрибутив Alpine не идеален, но его лаконичность меня действительно впечатлила, особенно в роли контейнера (всего 6 процессов — init, 4*getty, syslogd). Для меня он выглядит так, как должна выглядеть минимальная серверная операционная система (прости меня, CentOS!).

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

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

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