Возможно многие из пользователей 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 из исходников можно разбить на три этапа:
- На основе имеющейся операционной системы собирается среда сборки LFS.
- В среде сборки собрается образ виртуальной машины LFS.
- В виртуальной машине устанавливаются дополнительные пакеты из книги 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-файлы) и картинки то с обычными текстовыми файлами подавно должен справится.
Так оно и получилось. Написал сайт который генерирует скрипты для интерпретатора 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 Packages. Основная задача UmVirt LFS Assistant — это выполнение прочих команд.
С помощью chimp установка пакетов становится еще более простой:
chimp install mcДемонстрация
Чтобы ознакомится с работой сервисов UmVirt LFS Packages и UmVirt LFS Assistant можно загрузить базовый образ . Произвести установку Хorg выполнением одной команды:
chimp install XВ процессе работы скрипта будет установлен 141 пакет в автоматическом режиме. Чтобы сохранить время на компиляцию можно в файле /etc/profile заменить значение переменой MAKEFLAGS с «-j1» (один поток) например на «-j6» (шесть потоков).
Децентрализация и кастомизация
Для целей обеспечения безопасности, автономности и кастомазации исходный код сервисов UmVirt LFS Packages и UmVirt LFS Assistant опубликован в публичном доступе. Любой желающий может его загрузить, развернуть и подправить сервисы в рамках своей инфраструктуры.
Źródło: habr.com
