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

    Возможно многие из пользователей 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 опубликован в публичном доступе. Любой желающий может его загрузить, развернуть и подправить сервисы в рамках своей инфраструктуры.
    Поделиться публикацией

    Комментарии 4

      0
      К сожалению это не безопасно, запускать неизвестные shell скрипты с неизвестного сайта. А валидировать каждый раз в ручную, тогда смысл теряется.
        0
        Как не безопасно?! Информацию о пакетах из базы данных можно экспортировать в JSON, XML файлы в папку и верифицировать изменения с помощью Git. Копию сервиса можно разместить на своем локальном компьютере или виртуальной машине. Весь список пакетов можно самому с нуля создать.
          +1
          wget http://umvirt.com/linux/helloworld.sh -O - | bash
          Дядь, вот тут ты по HTTP забираешь скрипт и сразу отправляешь его в интепретатор. За такие примеры надо пожизненно на Windows пересаживать или шеллом false прописывать.
            0
            Сомневаешься? Посмотри исходник:
            wget http://umvirt.com/linux/helloworld.sh -O script.txt
            cat script.txt
            

            echo "hello world!";

            Скрипт — это не прикрепленный в электронное письмо бинарный EXE-шник с вредоносным ПО. Скрипт — это текст. Здесь все прозрачно и понятно.

            Любой компьютер или виртуальная машина могут снапшотиться и бэкапиться, но виртуальная машина в которой собирается дистрибутив GNU/Linux просто обязана снапшотиться и(или) бэкапиться.

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

      Самое читаемое