Мой LFS-2003. Часть 1, вводная. Постановка проблемы

Как собирать Linux из исходников? Тут возникает извечная проблема курицы и яйца.

Действительно, чтобы собрать компилятор, нужно как минимум иметь компилятор, а чтобы собрать bash -- требуется этот компилятор запустить (из командной строки bash, разумеется). А и то, и другое требует библиотечных функций из главной системной библиотеки glibc. Которую, как нетрудно догадаться, также следует предварительно скомпилировать. Иными словами, как говорил мой бывший воинский начальник, "чтобы сварить суп из курицы, нужно как минимум иметь курицу". Что в данном случае означало -- чтобы собрать работоспособную Linux-систему, ее уже нужно иметь в установленном (и работоспособном) виде.

Получается заколдованный круг, выход из которого -- не столь очевиден. Линус на заре создания своей ОС решил эту систему просто: первые варианты Linux'а собирались под управлением другой операционной системы (волею судеб ею оказалась Minix знаменитого теоретика осестроения Энди Таненбаума). Однако ныне можно обойтись без этого, собирая Linux из Linux'а же.

Этим путем пошли и Герард, и Джонатан. То есть имея работоспособную
Linux-машину в произвольном исполнении и полный набор исходников base
Linux. Установленный дистрибутив может быть любым (при условии
достаточной свежести компилятора gcc и библиотеки glibc, прочие компоненты не столь критичны). Ну и ядро родительской системы должно поддерживать все опции, желательные для системы дочерней (в первую очередь файловую систему, на которой предполагается разместить корень ее файловой иерархии).

По методу Герард сначала собирается (на отдельном дисковом разделе) некий самодостаточный минимум -- bash, gcc, binutils и т.д., причем -- статически слинкованные. Далее выполняется операция chroot и посредством этих программ собирается библиотека glibc. А потом -- перекомпилируется, уже в динамически связанном виде, все ранее собранное хозяйство, плюс дособирается остальное из base Linux, ядро системы и средства загрузки.

Основная трудность здесь -- в сборке библиотеки glibc: если она завершится успешно, с остальными компонентами также все будет в порядке. Однако именно в этом-то деле успех (по причинам, о которых речь пойдет в одной из следующих частей) и не гарантирован. Так что Джонатан вообще отказывается от этого шага, предлагая просто перенести бинарный пакет glibc родительской в дочернюю и устранить его обычным для прекомпилированных пакетов образом.

Собственно говоря, основная заслуга Герарда, на мой взгляд, в разработке идеологически чистого метода сборки glibc, осуществляемого с помощью разработанных им специальных патчей. Однако метод этот жестко привязан к версии главной системной библиотеки: текущие патчи его не работают с более свежими версиями glibc.

Мне же хотелось осуществить самострой системы а) идеологически чисто (то есть без заимствования компонентов родительской системы, б) из базовых компонентов произвольных (то есть наиболее свежих на текущий момент) версий (ведь не секрет, что многие из них обновляются достаточно часть, и, главное, в) на чистую машину. Не то чтобы у меня на винчестере не было какого-либо Linux'а -- был, и являлся им Gentoo Linux. Более того, я даже осуществил самосбор, используя этот дистрибутив в качестве родительского, -- и осуществил успешно. Но вследствие этого успеха появилось желание разработать общий метод самосбора действительно с нуля (в том числе и на только что купленный
компьютер).

Проблема казалась неразрешимой. Тут настало время вспомнить, что злые языки в нашей Партии (не подумайте плохого -- геолого-поисковой) трактовали цитировавшуюся выше сентенцию нашего начальника в том с смысле, что минимальным системным требованием для куриного супа является все же кошка. И, дабы "зарамсить проблему", я занялся поисками такой кошки.

Интуитивно было понятно, что собрать систему с нуля на голой машине можно было бы с помощью какого-либо LiveCD дистрибутива из числа расплодившихся в последнее время. Однако в большинстве из них декларировались в первую очередь легкость настройки и совместимость с оборудованием, а отнюдь не изобилие инструментальных средств. Однако и подходящий LiveCD нашелся быстро -- некто lonix, сам собранный на базе LFS (ныне, увы, прекративший свое развитие). Он комплектовался не только полным сборочным инструментарием, но и средствами настройки доступа к Сети -- как через локалку, так (что важно в наших условиях) и по модему: на тот случай, если в ходе сборки понадобится докачать какую-нибудь забытую мелочь.

Таким образом, Lonix идеально подходил на роль слесарного
чемоданчика. Однако для этой цели подошел бы, вероятно, и knoppix. Более того, подозреваю, что можно осуществить самосбор и с опорой на установочный LiveCD Gentoo и его первый (stage1) тарбалл, однако это пока не проверено.


К содержанию

. .