Pull to refresh

Упрощаем сборку Linux из исходников с помощью сайта UmVirt LFS Packages

Reading time 3 min
Views 4.6K
Возможно многие из пользователей GNU/Linux в свете последних инициатив властей по созданию «суверенного» Интернета озадачились целью подстраховаться на случай недоступности репозиториев популярных дистрибутивов GNU/Linux.

Кто выкачивает репозитории CentOS, Ubuntu, Debian, кто-то собирает свои дистрибутивы на основе имеющихся дистрибутивов, а кто-то вооружившись книгами LFS (Linux From Scratch) и BLFS (Beyond Linux From Scratch) уже взялся за компиляцию своих дистрибутивов из исходников так как считает что в условиях «суверенного» Интернета обязательно будут происходить хакерские атаки, вирусные эпидемии, утечки данных, а бинарники просто устареют через некоторое время.

Недавно дошли руки полностью скомпилировать виртуальную машину из исходников на основе инструкций изложенных в книжке Linux From Scratch Systemd Edition v.8.3. Результатами спешу поделится с вами.

Процесс сборки Linux


Процесс сборки Linux из исходников можно разбить на три этапа:

  1. На основе имеющейся операционной системы собирается среда сборки LFS.
  2. В среде сборки собрается образ виртуальной машины LFS.
  3. В виртуальной машине устанавливаются дополнительные пакеты из книги BLFS которых нет в книге LFS.

Статичные файлы скриптов


В процессе работы со средой сборки удобно пользоваться буфером обмена и SSH: скопировал из книжки команды и вставил в консоль среды сборки.

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

Известно, что команды можно вводить не только с клавиатуры но и со стандартного потока (STDIN). Источником стандартного потока можно использовать последовательный порт а также результат работы программы скрипта так называемый стандартный вывод (STDOUT).

Многие знают что команда wget может выводить содержимое загруженного файла стандартный вывод (STDOUT):

wget http://example.com -O -

Если вывод команды wget направить в интерпретатор можно выполнить произвольный код. Код будет выполнен также как если бы он был набран на клавиатуре или скопирован из буфера обмена:

wget http://umvirt.com/linux/helloworld.sh -O - | bash

Таким образом можно разместить на каком-нибудь Web-сервере файлы с командами и отправлять их содержимое в интерпретатор.

Динамичные файлы скриптов


Статичные файлы в вещь конечно хорошая если точно знаешь что должно быть выполнено, а если происходит установка пакета, если не ясно установлены зависимости или нет что тогда?

На помощь приходит динамический сайт тот что на базе LAMP Web-сервера (Linux-Apache-MySQL-PHP). Если сайт может динамически генерировать странички (HTML-файлы) и картинки то с обычными текстовыми файлами подавно должен справится.

Так оно и получилось. Написал сайт UmVirt LFS Packages который генерирует скрипты для интерпретатора Bash. В базе сайта содержится информация о пакетах, зависимостях, патчах, дополнениях и командах сборки.

Теперь для установки пакета mc (midnight commander) можно прописать команду:

wget --no-check-cerificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bash

Скрипт сайта сам получит данные с базы данных и сформирует код проверки зависимостей и код скрипта для установки пакета. Интерпретатор обработает инструкции из скрипта.

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

База данных установленных пакетов находится в каталоге /var/cache/ulfs-packages представляет собой список пустых файлов с названиями соответствующими названию пакетов.

Если пакет не найден в базе данных происходит рекурсивная установка зависимостей.

Удобства


Чтобы установка пакетов стала более удобной написал скрипт chimp еще один сайт UmVirt LFS Assistant, использующий базу UmVirt LFS Packages. Основная задача UmVirt LFS Assistant — это выполнение прочих команд.

С помощью chimp установка пакетов становится еще более простой:

chimp install mc

Демонстрация


Чтобы ознакомится с работой сервисов UmVirt LFS Packages и UmVirt LFS Assistant можно загрузить базовый образ Initial UmVirt LFS v.0.1 Update 1. Произвести установку Хorg выполнением одной команды:

chimp install X

В процессе работы скрипта будет установлен 141 пакет в автоматическом режиме. Чтобы сохранить время на компиляцию можно в файле /etc/profile заменить значение переменой MAKEFLAGS с "-j1" (один поток) например на "-j6" (шесть потоков).

Децентрализация и кастомизация


Для целей обеспечения безопасности, автономности и кастомазации исходный код сервисов UmVirt LFS Packages и UmVirt LFS Assistant опубликован в публичном доступе. Любой желающий может его загрузить, развернуть и подправить сервисы в рамках своей инфраструктуры.
Tags:
Hubs:
+5
Comments 4
Comments Comments 4

Articles