Мой опыт сборки Linux From Scratch

lfs
Эта статья нужна для того что-бы поделиться опытом сборки Linux From Scratch. Дело в том, что совершив те или иные ошибки, я приходил к тому, что что-то сделано не правильно изначально и это дело нужно бросать, либо начинать сначала. Именно поэтому я бросал сборку LFS раза, наверное, два или три. Во время последних новогодних праздников мне удалось довести начатое дело до конца. Так что предупрежу сразу, для того, чтобы это сделать нужно иметь много времени и терпения.

Этап 1. Подготовка окружения

Этот этап может показаться самым простым, но он же и самый ответственный, поскольку если вы предпримете что-то не так, все последующие шаги могут оказаться пустой тратой времени. Начнем с компьютера: я создал виртуальную машину, использовав VirtualBox. Я думаю, вам ее возможностей хватит сполна и вы ее можете ее использовать тоже. Те кто считает себя джедаями линукса, способными прямо в консоли поднять ВМ, в системе виртуализации, у которой нет GUI, например гипервизоре Xen, могут для этих целей использовать Xen. Самый важный момент в создании ВМ — это выбор размера виртуального жесткого диска, поскольку если вы упретесь в границы размеров жесткого диска, вам придется либо бросить сборку LFS, либо создать новый диск и перенести все что вы собрали на другой раздел. Возможно, я позже сделаю заметку о том, как переносить linux на другой диск/раздел, так, чтобы он после этого продолжал загружаться, хотя, если вы сможете собрать Linux From Scratch, вы сами знаете, как это сделать. В моем случае, я использовал фиксированный жесткий диск, размером в 40Гб, поделенный поровну на два ext4 раздела, в одном из которых установлена host система, а в другом LFS.
В качестве host системы я использовал Debian netinstall без установки рабочих столов. Чтобы впоследствии из нее было удобно работать, я рекомендую настроить SSH соединение. После того, как установите sshd в автозапуске системы, прокиньте 22 порт наружу, чтобы он был доступен SSH клиенту в вашей основной ОС. В качестве SSH клиента я использовал PuTTY, поскольку это наиболее распространенный вариант среди пользователей Windows. Если ваша основная система linux, можно использовать тот-же PuTTY, либо openssh-client, доступный из командной строки. Для того, чтобы быстрее заходить в систему, стоит настроить автоматическую авторизацию при помощи закрытых ключей. После установки ОС и SSH, я запускал ВМ в headless-mode, для того, чтобы не видеть его окно, поскольку моим UI был SSH клиент. Настроенный SSH позволит вам, во-первых — не ограничиваться размерами стандартного разрешения консоли, во-вторых, при желании, копипастить код из книги. Настройка X-ов и интеграции ВМ, с моей точки зрения, менее приемлемо, поскольку такое решение сильнее нагружает систему, потребляя не лишние ресурсы, а так-же может доставить вам больше сюрпризов и меньше удобств, чем вариант с SSH клиентом.
Во время подготовки, убедитесь в том, что у вас в системе есть все, что перечислено в требованиях к host системе, того, чего нет — доустановите. Не меньшее внимание уделите настройке переменных $LFS и $LFS_TGT, поскольку эти переменные будут во многих командах, на протяжении всей пятой главы книги, а так-же папке tools с ссылкой на нее. И в конце-концов убедиться, что список пакетов, по которому вы их скачивали принадлежит той версии книги, по которой вы собираете систему. Так-же советую добавить раздел с LFS в fstab, чтобы он был монтирован уже во время загрузки системы.
Если вы сделали здесь все правильно, то последующие совершенные вами действия могут не пойти на смарку. Выше я акцентировал некоторые моменты из книги, потому что это те грабли, на которые я наступил, как можно быстрее приступив к сборке своего Linux’а.

Этап 2. Сборка chroot окружения

Суть этого этапа заключается в том, что вы не можете прямо в разделе собрать готовый linux. Если вы будете просто менять префикс при сборке на точку монтирования раздела с ОС, то во многих программах этот путь будет захардкожен и недействителен когда вы перезагрузитесь в тот раздел. На этом разделе нужно будет собрать минимально необходимый для сборки набор инструментов, статически слинкованный с библиотеками. Обратите внимание, что последующие пакеты часто зависят от предыдущих, статически линкуясь с ними, поэтому если вы проступились на этом или предыдущем этапе, вам, возможно, придется собрать все заново, чуть более подготовившись.

Этап 3. Сборка самой системы

Если у вас, вдруг, на предыдущих двух этапах все закончилось успешно, то стоит приступить к сборке самой системы. Если до этого у вас получалось все правильно, то вы получаете именно то chroot окружение, которое ожидал автор этой книги, а значит вас не должно поджидать никаких сюрпризов.
Единственное хотелось бы отметить два момента в книге:

  1. Требуемое время и 311Гб свободного места у GCC в версии книги 7.8-systemd, скорее всего, является багой. Я потратил целый день на создание раздела фиксированного диска, размером 0.5Тб, хотя на самом мне столько места не понадобилось. Поэтому советую предпринимать такие координальные меры, только тогда, когда вы упретесь в сообщение об ошибке, а не тогда, когда думаете, что упретесь.
  2. Упущенные пакеты во втором разделе, можно дособрать, только для этого потребуется воссоздать окружение на момент второго этапа, т.е. выйти из chroot и вернуть прежние переменные окружения.

В заключении

Когда вы закончите строительство системы, вы просто устанавливаете загрузчик, делаете последние настройки, готовите fstab и перезагружаетесь в свеже-построенную систему linux. Ванильной конфигурации ядра должно хватить, для того, чтобы система загрузилась без ram-диска.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*