Улесняваме сборката на 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

По този начин можете да разполагате файлове с команди на някой уеб сървър и да изпращате съдържанието им на интерпретатора.

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

Статичните файлове са добри, ако точно знаете какво трябва да се изпълни. А ако става дума за инсталация на пакет, и не е ясно дали зависимостите са инсталирани или не, какво тогава?

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

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

Сега за инсталацията на пакета mc (midnight commander) можете да напишете командата:

wget --no-check-certificate 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. Извършете инсталация на Xorg с изпълнението на една команда:

chimp install X

В процеса на работа на скрипта ще бъдат инсталирани 141 пакета в автоматичен режим. За да спестите време за компилация, можете в файла /etc/profile да замените стойността на променливата MAKEFLAGS от «-j1» (един поток) например на «-j6» (шест потока).

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

С цел осигуряване на сигурност, автономност и персонализация изходният код на услугите UmVirt LFS Packages и UmVirt LFS Assistant е публикуван в публичен достъп. Всеки желаещ може да го изтегли, внедри и модифицира услугите в рамките на своята инфраструктура.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster