Linux — самая бесплатная из систем, если ваше время ничего не стоит.

Любимая шутка Microsoft

   В Сети, да и вообще в курилках, не прекращаются дебаты между линуксоидами: кто что юзает, какие патчи прописывает, как часто ядро компилит. Но есть один дистро, пользователи которого "вне досягаемости" простых умов, поскольку все пакеты в свою инсталляцию они собирали вручную. Имя этому дистрибутиву — LFS, то есть Linux From Scratch.

   Идея собирать Linux своими руками пришла в голову сначала Линусу Торвальдсу, а потом еще нескольким не менее беспокойным типам. Однако продавать этот "конструктор" как продукт (в виде книжки + CD) первым додумался француз Жерар Бикманс. Затевалось все это шесть лет назад — я в это время только-только начал делать первые вылазки в интернет :). А к настоящему времени Жерар накатал уже шестую версию своего фолианта (собственно, о ней-то и пойдет речь). Для тех, кто не умеет пользоваться Googl’ом, сообщаем: эту книжицу можно найти по адресу http://sourceforge.net/projects/lfs/files/lfs/6.0/.

   Идея такова: проделать всю компиляцию всех пакетов и написать все скрипты запуска Linux с самого начала. В результате вы получите систему, каждый пакет которой собран и установлен собственноручно, а потому вы (вероятно) точно знаете, зачем он вам нужен. Еще в большем результате ваш дистрибутив не будет захламлен множеством ненужных пакетов, многие из которых запускаются и сконфигурированы для работы в режиме демонов — а значит, потенциально потребляют ваши ресурсы и представляют угрозу безопасности.

   Конечно, если говорить откровенно, то человек, первый раз собирающий Linux, скорее допустит ошибки, которые сделают его систему более уязвимой, чем наоборот. По крайней мере, у нас нет оснований подозревать составителей известных дистрибутивов в недобросовестности. Так что ваш LFS, может, и не будет таким же защищенным, как тот же Red Hat Enterprise Edition. Но уж зато можно ручаться, что вы научитесь делать некоторые вещи, которые наверняка пригодятся в дальнейшем.

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

Краткое вступление в LFS человеческим языком

Сама книжица, как все французское, сочетает железный здравый смысл с гламурной пургой. К пятой главе вы не получаете практически никакой важной информации. Точнее, все можно было бы записать в несколько строк. Поэтому я сэкономлю вам пару часов жизни и перескажу это вступление по-народному.

   Для начала поставьте нормальную установку Linux на ядре 2.6, скомпилированную gcc 3.0 или выше. Почему это надо, объяснять не буду — просто надо (в частности, по причине Udev и прочих новшеств). Проверить ядро и его компайлер можно, сделав:

cat /proc/version

   Желательно поставить отдельную инсталляцию в самом простом виде: на двух разделах HDD, fs2 root и swap (чтобы не париться с расширенными разделами). Создайте также отдельный раздел для LFS и отформатируйте как fs2. В результате у вас получится, например, hda1,2,3 -> fs2,swap,fs2. Форматирование, если вы его не сделали сразу, можно произвести позже с помощью:

mke2fs /dev/hda3

   Форматировать swap не нужно: поскольку вы будете "крутить" только одну систему из двух, то они без особых проблем смогут по очереди использовать один swap.

Физические разделы

   Кое-кто выражается примерно таким способом: "Я никогда не доверяю разбивку диска инсталлятору!" или "Без точной настройки разделов ничего не будет работать как надо". Полноте, зайцы! По статистике (http://counter.li.org/reports/machines.php) только одна установка из трех будет использована как сервер, а у около 50% машин вообще всего один пользователь. У 90% линуксов будет от одного до девяти пользователей — и в такой группе все тоже, как правило, решается полюбовно. В результате только примерно один из десяти компьютеров под Linux потенциально будет испытывать те напряги, при которых разбиение на разделы имеет смысл. Кстати, пока и квоты никто не отменял, и другие умные механизмы слежения за дисковым пространством и работой серверов.

   А разделы нужны, конечно,— но не так часто, как рассказывают некоторые мини-перцы. Если вы дочитали "Секреты Линукс" только до раздела "Создание файловой системы", то продолжайте читать дальше, там еще много интересного.

Теперь пора забуячить пару каталогов и кое-чего еще (под рутом):

export LFS=/mnt/lfs
mount /dev/hda3 $LFS
cd $LFS
mkdir sources
mkdir tools
ln -s $LFS/tools /

   Последняя команда устанавливает эквивалентность (линк) между каталогами $LFS/tools и /tools. Зачем — понятно: сначала мы будем использовать проги в /tools, а потом зарутимся в $LFS и будем продолжать использовать те же проги по тому же адресу.

   Дальше создаете пользователя и группу lfs, якобы для полной независимости от хост-системы. Польза и вправду есть: логон под этим юзером автоматически настраивает "стерильную" среду. Ход французской мысли после создания юзера таков:

chown lfs $LFS/tools
chown lfs $LFS/sources
su — lfs

cat > ~/.bash_profile << EOF
   exec env -i HOME=$HOME TERM=$TERM PS1=‘\u:\w\$‘ /bin/bash
EOF

cat > ~/.bashrc << EOF
   set +h
   umask +022
   LFS=/mnt/lfs
   LC_ALL=POSIX
   PATH=/tools/bin:/usr/bin
   export LFS LC_ALL PATH
EOF

   Два башенных файла в конфигурации пользователя lfs обозначают настройки bash. Первый баш — ложовый (то есть запускается для пользователя во время логона). Второй, обычный, вызывается уже из первого, как там и написано. Первый сбрасывает все переменные среды (может быть, кое-что еще выполняется в /etc/profile для всех пользователей) и оставляет только три переменные окружения. Так что, когда позже вы прочитаете предупреждения о переменных компиляции и т.п.,— то это у Жерара просто башня перегрелась, этого не может быть никогда после такого облома.

   Второй баш заходит в видит то, что ему нужно видеть, а именно: пару переменных, нужных для компиляции.

   Короче, вот и закончились пять разделов LFS :). Пропуская всякую лабуду о настройке вашей системы, скорости компиляции, тестах пакетов и статической линковке, можете сразу переходить к пункту 5.4, где собственно и начинается компиляция первого реального пакета — Binutils.

Где взять LFS?

   Пару слов об еще одной французской шутке. Когда вы дойдете до раздела, где описываются пакеты, предназначенные для загрузки, вам посоветуют закачать их с FreshMeat.net. Там вы попадете в небольшой квест из пяти нажатий мыши — причем не все там и есть. При этом рядом же, на сайте, лежат и скрипты wget (http://lfs.icx.fr/lfs/wget/), которые закачают вам все в лучшем виде.
   Там же можно и вломиться на ftp-сервер LFS (например, сюда: ftp://ftp.linuxfromscratch.org/pub/lfs/ … kages/6.0/) и скачать все в пару кликов. Зачем тогда начинать закачку с самого скучного FreshMeat — непонятно. Разве что для накрутки посещений.
   Наконец, все для LFS 6 выложено на наш CD — это уже просто подарок лично от меня, поскольку закачивал я дома через помегабитную сетку :).

Инсталляция пакетов

   Вообще-то сборка и установка для обычного пакета настолько же проста, насколько несложно набрать строку:

./configure ––prefix=/tools && make && make install

   Обратите внимание: поскольку вы в этом время находитесь под пользователем lfs и устанавливаете пакеты в /tools, то для установки вам не придется переходить в режим суперпользователя. Конечно, не все пакеты устанавливаются настолько одинаково — многие ставятся "через плечо", то есть не из каталога с исходниками, а из папки по соседству. Поэтому команда configure вызывается что-то вроде:

../gcc-3.4.1/configure ...

   Две точки в начале — это перейти на каталог выше, а три в конце — это типа "и так далее", поскольку кроме префикса часто устанавливаются и другие параметры. Кроме того, спасибо Жерару — он точно дозирует компиляцию, так что, когда вам не нужно компилировать что-то из пакета, то он указывает только те файлы, которые нам нужны. Забота, однако. В остальном процесс туп до невозможности, так что, когда вы дойдете до конца, неплохо бы иметь под руками охлажденные средства для устранения природной жажды.

http://www.comizdat.com/pcworld/images/lfslinux1.jpg

   Комбинируя графический, ncurses и консольный интерфейсы, можно добиться оптимальной производительности работы в Linux

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

   Если вы с трудом набираете текст на клавиатуре, то вас не должен волновать Linux, а особенно From Scratch. Сконцентрируйтесь лучше на программах вроде "Cоло на клавиатуре" — потом быстро наверстаете все остальные компьютерные науки.
   В главе 6 вы перейдете в новый "корень" по chroot, где и будет происходить вторая (она же — основная) фаза компиляции. В этой среде до поры до времени не будет такой полезной программки, как Midnight Commander. И как бы круто вы ни набирали в консоли, вы все равно часто не знаете, как называется файл и т.д. — то есть операции с файлами все-таки часто удобнее делать в mc. Так вот, вы легко можете это делать, просто зайдите под root’ом в /mnt/lfs/sources и творите там свои дела. Но, конечно, таким образом вы можете только раскрывать архивы и после компиляции удалять исходники. Сама компиляция, в целях правильной привязки к каталогам (вот еще глупости исторические!), должна будет происходить только в chroot’овском мире. Распараллеливая распаковку-и-зачистку с компиляцией, вы можете значительно ускорить свою работу.
Комментарий по распаковке: если вы не ограничены в дисковом пространстве, то не жадничайте и дайте своему LFS достаточно пространства (5 Гб, например). Тогда вы можете не играться с зачистками и распаковать все пакеты одной командой. Однако следите и, когда нужно, удаляйте старые "отработанные" версии и распаковывайте снова. Хотя для пакетов, компилирующихся в "другом" каталоге (*-build), очищать нужно только этот каталог — сами исходники можно не тревожить, они не пострадают.
   Современные консоли под X-Windows, кстати, очень хорошо воспринимают вставку текста. Правда, так же как и в MS Windows, в Linux нет общего мнения, какими клавишами при этом пользоваться. Поэтому в браузере Firefox вы будете копировать по Ctrl+C, а в консоль (например, Konsole) вставлять по Shift+Ins. В результате вашей любимой комбинацией клавиш станет такая последовательность: выделить — Ctrl+C — Alt+Tab — Shift+Ins — Enter. Причем копировать и вставлять вы можете и многострочный текст — в том числе с переводами строки и переносами косой чертой, что особенно важно при вводе файлов конфигурации и длинных команд chroot.
Коль уж зашла речь о многострочных файлах (да и вообще во избежание ошибок), следите за пробелами при вводе. Например, перед знаком переноса / или в конструкции "find -exec strip" перед \; обязательно ставьте пробел.
   А если уж вспоминать о "стриптизе" отладочной информации, то есть тут небольшая накладочка: после второго цикла сборки, то есть когда собраны уже все пакеты LFS, в пункте Strip Again (или как его там) мы вызываем find и strip из каталога tools. А недавно перед этим, как только мы собрали bash, мы тут же, не сходя с места, переключились на свежесобранный командник. Неконсистентно получается — уж тогда правильней было бы "чисто из принципа" воспользоваться новыми утилитами из /sbin.
   Но это так, не ошибка, а просто непоследовательность. Реальная ошибка вот в чем: если вы используете в качестве "хоста" новый дистрибутив вроде FC3, то в нем утилиты e2fsprogs уже далеко не 1.35. А есть такой загон: пакет ставит марку версии — и если не совпадает, то e2fsck будет вылетать с ошибкой, типа "не мое, гав-гав". Все бы хорошо, если бы проверка не была включена в загрузку. Хорошо, что fs3 проверять не надо: журнал прописал и считай готов — а так не загрузите вы свой расчудесный LFS.
Проблема фиксится двумя способами.

   Простой и грязный предполагает просто скопировать e2fsck из хостового sbin’а на ваш LFS. Это, конечно, херит все великие идеи, зато всегда работает.

   Второй вариант: просто в том месте (или позже), где речь идет о 1.35, собрать последние утилиты (на сегодня — 1.37). Я их тоже включил на диск, чтобы вы не шарились по Сети в самый неподходящий момент. Вообще, "предупреждения" не включать в LFS последние пакеты — французское жлобство чистой воды. Кстати, и mc тоже можно бы в LFS включить, а то, получается, это не средство первой необходимости.

   Еще такая небольшая маза с окультуриванием работы есть. В X-Windows вообще, и в KDE в частности, есть различие между окном переднего плана и фокусом ввода. Поэтому вы можете проделать такой трюк: на переднем плане консоль, на заднем — тот же Firefox. Переводите мышку на браузер и, не нажимая клавиш, вращаете колесиком. Браузер становится активным на заднем плане, текст в нем начинает прокручиваться — то есть вы читаете и следите за процессами в консоли, дабы не прозевать и подкинуть новых дровишек. Однако, как и было сказано в книге, параллельно собирать по два пакета не рекомендуется. В винде такой номер с прокруткой на заднем плане не проходит ни при каких условиях, даже если проги написаны на том же Qt. Можно, конечно, сделать консоль "наверху", но она тогда мешается не по делу.
Насчет тестирования: здесь вам поможет здравый смысл, что считать сбоем или ошибкой. У меня в одном-двух "критических" тестах, типа glibc, валились некоторые проверки, но в конце концов общая сборка, в том числе и ядра, прошла успешно. Возможно, это проблема не моя или системы — а тех, кто придумывает эти тесты? Короче, можете тесты вообще не запускать, а запуская — не особо волноваться, если одна-две ошибки вылезут, это нормально.

Как инсталлировать MC

   К большому моему удивлению, васи из линукца проявляют невиданный снобизм и делают вид, что набирать на клаве лучше, чем пользоваться полуночным командиром. Это, конечно, загон первой степени — и нужно что-то делать. Ниже приведены инструкции, как поставить mc на LFS.

   Для начала необходимы два вспомогательных пакета — pkg-config и glib (оба есть на КП-диске). Установка без всяких понтов — ./configure && make && make install.

   После установки pkg-config попадет в /usr/local/bin — достаньте его оттуда в нужное место. Например, так: ln -s /usr/local/bin/pkg-config /usr/bin. Главное чтобы после этого он искался по путям, а то glib ./configure будет плакать.

   После установки glib выполните ldconfig, чтобы либы "засосало" в индекс. Вообще-то, техника козлячая — можно было бы вставлять эту операцию в сам инсталлятор — но, как вы знаете, линуксоиды народ принципиальный и обидчивый, никаких других умных людей кроме себя не признает и не понимает.

   Все, финиш — ставьте Midnight Commander. Если вы вкомпилировали русский язык в ядро и проколдовали его в консоль, то даже немедленно получите русский интерфейс. (А люди до сих пор мучают сетку по поводу русификации mc. Ну и народец! Да просто не трогай ничего — и все будет как надо :) )

И чё дальше?

   Дальше у вас на руках система, в общем-то, рабочая. Хотя до рабочей ей — как до неба. Это как если бы вы своего ребенка не делали привычным путем, доверяя его создание природе, а решили, как папа Карло, сострогать его из бревна. Метод и результат весьма похожи. Впрочем, если вы сломаетесь, поставите тот же RPM и станете "таскать" пакетики как обычно, то дела у вас пойдут спорее. Но коль уж вы — папа Карло на всю сдачу, то вам прямой путь на сайт Beyond LFS (http://lfs.icx.fr/blfs/news.html). Там вам расскажут и покажут, как скомпилировать почти любое из известных приложений — общим числом 257. Как только закончите, сообщите — я галочку поставлю в журнале героев. Впрочем, это продолжение LFS я признаю полезным и приятным, я там почерпнул (впрочем, и без BLFS почерпнул бы), как ставить EXIM+Courier.

   Есть еще два сиквела. Один называется Automated LFS. Его цель — помочь вам пройти все операции в автоматическом режиме. Лично я никакого смысла в этом не вижу, но это якобы хорошо при "частом построении LFS". Вместо данных богом нам скриптов там используются XML-документы и прочая чушь. Я не могу придумать ни одного повода, чтобы часто собирать LFS, а уж чтобы использовать для этого XML — и подавно. Кстати, где-то там же есть и версия на Perl, но и в ней я тоже никакого смысла не вижу :).

   Третья "продолжалка" называется Hardened LFS. Это помесь LFS+BLFS, предназначенная для более сложной настройки системы безопасности. Некоторые фрагменты заменены на более строгие: изменены скрипты запуска, добавлены спецсредства, патчи безопасности, вроде защиты стека, и т.д. Для создания серверов рекомендуется использовать именно эту версию.

Короче

   Если вы уже изучили команды ls и mkdir, то ради профилактики можете собрать и LFS. Много нового не обещаю — но вот понимание того, то с Linux вы можете делать все, что угодно,— это да. Правда для этого придется пройти еще не одну сотню таких "LFS" — но чем бы мы еще занимались?

Источник