Вероятно, много от пользователей 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По този начин можете да разполагате файлове с команди на някой уеб сървър и да изпращате съдържанието им на интерпретатора.
Динамични файлове на скриптове
Статичните файлове са добри, ако точно знаете какво трябва да се изпълни. А ако става дума за инсталация на пакет, и не е ясно дали зависимостите са инсталирани или не, какво тогава?
На помощ идва динамичният сайт, който е на база LAMP Web-сервер (Linux-Apache-MySQL-PHP). Ако сайтът може динамично да генерира страници (HTML-файлове) и изображения, значи трябва да се справи и с обикновените текстови файлове.
Така и стана. Написах сайт , който генерира скриптове за интерпретатора 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 Packages. Основната задача UmVirt LFS Assistant е изпълнението на други команди.
С помощта на chimp инсталацията на пакети става още по-лесна:
chimp install mcДемонстрация
За да се запознаете с работата на услугите, UmVirt LFS Packages и UmVirt LFS Assistant можете да изтеглите базов образ . Извършете инсталация на Xorg с изпълнението на една команда:
chimp install XВ процеса на работа на скрипта ще бъдат инсталирани 141 пакета в автоматичен режим. За да спестите време за компилация, можете в файла /etc/profile да замените стойността на променливата MAKEFLAGS от «-j1» (един поток) например на «-j6» (шест потока).
Децентрализация и персонализация
С цел осигуряване на сигурност, автономност и персонализация изходният код на услугите UmVirt LFS Packages и UmVirt LFS Assistant е публикуван в публичен достъп. Всеки желаещ може да го изтегли, внедри и модифицира услугите в рамките на своята инфраструктура.
Източник: habr.com
