The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа

Кросс-компилированный Linux From Scratch

Версия 1.0.0-ALPHA

Jim Gifford

Ryan Oliver

Перевод: Сергей Каминский http://lfs.linux.kiev.ua

Copyright (c) 2005, Jim Gifford & Ryan Oliver

Все права защищены.

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

  • Повторное распространение в любой форме должно содержать вышестоящее уведомление об авторском праве, данные положения и нижеприведённый отказ от прав

  • Ни название проекта “Linux From Scratch”, ни имена его участников не могут быть использованы для подписи и рекламирования продуктов, произошедших из данного материала без специального письменного разрешения

  • Все материалы, произошедшие из Linux From Scratch должны сохранять ссылку на проект “Linux From Scratch

ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПОСТАВЛЯЕТСЯ ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ “КАК ЕСТЬ” И ЛЮБЫЕ ЯВНЫЕ ИЛИ НЕЯВНЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ, КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ ОТРИЦАЮТСЯ. НИ В КОЕМ СЛУЧАЕ РЕГЕНТЫ ИЛИ УЧАСТНИКИ НЕ ДОЛЖНЫ БЫТЬ ОТВЕТСТВЕННЫМИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ОБРАЗЦОВЫЙ ИЛИ ПОСЛЕДУЮЩИЙ УЩЕРБЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОСТАВКОЙ ТОВАРОВ ЗАМЕНЫ ИЛИ УСЛУГ; ПОТЕРЮ ДАННЫХ ИЛИ ИХ НЕПРАВИЛЬНУЮ ПЕРЕДАЧУ ИЛИ ПОТЕРИ; ПРИОСТАНОВЛЕНИЕ БИЗНЕСА), И ТЕМ НЕ МЕНЕЕ ВЫЗВАННЫЕ И В ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ КОНТРАКТНОЙ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ИЛИ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ ХАЛАТНОСТЬ ИЛИ ИНЫМ СПОСОБОМ), ВОЗНИКШЕМ ЛЮБЫМ ПУТЕМ ПРИ ИСПОЛЬЗОВАНИИ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫ БЫЛО СООБЩЕНО О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.


Оглавление

Пролог

i. Предисловие

Проект Linux From Scratch увидел много изменений за несколько лет своего существования. Лично я вовлёкся в проект в 1999 году во время релизов 2.x. В то время процессами сборки были создание статических бинарников при помощи хост системы, затем chroot и сборка финальных бинарников поверх статических.

Затем началось использование директории /static для содержания статической сборки отдельно от финальной системы, затем Ryan Oliver и Greg Schafer разработали процессы чистой LFS, вводящие новые процессы сборки инструментария, который отделяет нашу начальную сборку от хоста. Наконец, LFS 6 принесла Linux ядро 2.6, структуру динамических устройств udev, осмысленные заголовки ядра и другие улучшения в системе Linux From Scratch.

Единственным "недостатком" LFS являлось то, что он всегда был основан на процессорах класса x86. С приходом процессоров Athlon 64 и Intel EM64T только x86 LFS больше не является идеальным. На протяжении этого времени Ryan Oliver разработал и задокументировал процессы, при помощи которых Вы можете собрать Linux из любой системы и для любой системы использованием техники кросс-компилирования. Таким образом начался проект Кросс-компилированного LFS (CLFS).

CLFS следует тем же принципам, что и проект LFS, то есть знание Вашей системы изнутри и увеличение сил в сборке системы самостоятельно. Дополнительно, во время сборки CLFS Вы изучите расширенные техники, например кросс-компилированные инструменты, поддержка мультибиблиотечности (одновременно 32 и 64-битные библиотеки), альтернативные архитектуры - Sparc, MIPS и Alpha и многое другое.

Мы надеемся, что Вы насладитесь сборкой Вашей собственной CLFS системы и выгодами, которые появляются от системы, собранной для Ваших потребностей.

--
Jeremy Utley, менеджер релиза CLFS 1.x (Автор страницы)
Jim Gifford, лидер проекта CLFS
Ryan Oliver, лидер проекта CLFS
Joe Ciccone, Justin Knierin, Chris Staub, Matt Darcy, Ken Moffat,
Manuel Canales Esparcia и Nathan Coulson - разработчики CLFS

ii. Аудитория

Существует ряд причин, по которым эта книга может представлять интерес. Главная причина - установка Linux системы из исходников. Многие люди спросят: “Зачем мучиться, вручную собирая Linux систему с нуля, когда можно скачать и установить готовую?” Это хороший вопрос и мы постараемся ответить на него в этой части книги.

Важная причина существования СLFS - помочь людям понять, как работает Linux система. Построение СLFS-системы помогает показать, что заставляет Linux работать, как работают её компоненты и как они друг от друга зависят. И, наконец, оно учит как настроить Linux под себя, в соответствии со своими вкусами и потребностями.

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

Другим преимуществом СLFS является возможность создать наиболее компактную систему. При установке обычного дистрибутива, вместе с ним, как правило, устанавливается большое количество программ, которые Вы никогда не будете использовать. Они просто будут занимать место на диске (или, возможно, время центрального процессора). В то же время не составит труда установить систему СLFS на 100 MБ диска. Вам кажется, это много? Некоторые пользователи смогли создать весьма компактную СLFS систему. Они собрали систему, позволяющую запускать веб-сервер Apache, которая занимала всего 8 Mb на диске. Дальнейшее урезание её позволит сократить используемое место до 5 Mb. Попробуйте сделать это, используя обычный дистрибутив.

Мы можем сравнить дистрибутив Linux с гамбургером из закусочной — Вы не знаете точно, что едите. СLFS же даёт Вам не гамбургер, а рецепт его приготовления. Внимательно изучив его, можно убрать ненужные ингредиенты и добавить свои по вкусу. Как только Вы довольны рецептом, можете смело приступать к приготовлению Гамбурга. Вы можете также выбрать способ приготовления: поджарить, сварить, запечь или съесть сырым.

Также СLFS можно сравнить с домом. CLFS предоставляет только его план, а строить его Вам. Разумеется, можно изменять план по ходу дела.

Немаловажным преимуществом построения своей Linux-системы также является безопасность. При компилировании из исходников Вы получаете возможность проверять все компоненты системы и, в случае надобности, ставить патчи. Вам больше не придётся ждать, пока кто-то выпустит бинарный пакет, устраняющий дырку в безопасности. Нет гарантии, что новый пакет адекватно собран и устраняет проблему, если Вы самостоятельно не изучили и не собрали патч.

Цель Linux From Scratch - собрать полную и удобную систему. Читатели, которые не желают собирать их собственную систему Linux из исходников могут не использовать информацию из этой книги. Если Вы только хотите знать, что происходит при загрузке компьютера, мы рекомендуем HOWTO “От включения питания до приглашения Bash”, размещённом на http://axiom.anu.edu.au/~okeefe/p2b/ или на сайте Linux Documentation Project (TLDP) http://www.tldp.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html. Это руководство описывает процесс построения голой системы, которая похожа на описанную в этой книге, но способной только к загрузке до приглашения BASH. Считайтесь со своей объективностью. Если Вы желаете построить систему Linux, изучая её по ходу дела, тогда эта книга Ваш лучший выбор.

Есть ещё много причин, по которым лучше собрать СLFS, настолько много, что их все здесь просто не привести. Эта часть только верхушка айсберга. При установке СLFS Вы поймёте, что вся сила - в информации и знаниях.

iii. Предпосылки

Сборка CLFS системы это не простая задача. Она требует некоторого уровня имеющихся знаний в администрировании Unix систем для разрешения проблем и правильного выполнения указанных команд. В особенности, как абсолютный минимум, читатель уже должен иметь опыт в использовании командной строки (оболочки) для копирования и пересылки файлов и директорий, просмотра содержимого файлов и директорий и смены текущей директории. Также ожидается, что читатель имеет познания в использовании и установке программ Linux. Базовое понимание архитектур, использованное в процессах кросс-LFS и основной операционной системе, также необходимо.

Поскольку книга CLFS подразумевает по крайней мере этот начальный уровень квалификации, различные форумы поддержки CLFS вряд ли способны предоставить Вам много помощи. Ваши вопросы относительно таких основных познаний обычно останутся без ответа, или Вы просто будете перенаправлены на соответствующую документацию LFS.

Перед сборкой CLFS системы мы рекомендуем прочитать следующее:

  • Software-Building-HOWTO http://www.tldp.org/HOWTO/Software-Building-HOWTO.html

    Это исчерпывающее руководство по сборке и установке “общих” UNIX-ориентированных программ в Linux.

  • Руководство пользователей Linux http://www.linuxhq.com/guides/LUG/guide.html

    Это руководство описывает использование различных Linux-программ.

  • Важные советы для первоначального прочтения http://www.linuxfromscratch.org/hints/downloads/files/essential_prereading.txt

    Это Советы, написаные специально для новичков в мире Linux. В основном содержит ссылки на внешние источники информации на различные темы. Любой человек, собравшийся установить СLFS, должен понимать многие темы из перечисленных в этом документе.

iv. Требования хост системы

Вы должны быть способны собрать CLFS систему из любой Unix-подобной операционной системы. Ваша хост система должна иметь следующие программы с минимальными указанными версиями. Также заметьте, что многие дистрибутивы размещают заголовки программ в отдельных пакетах, часто в виде “[package-name]-devel” или “[package-name]-dev”. Убедитесь, что установили их если они предоставляются Вашим дистрибутивом.

  • Bash-2.05a

  • Binutils-2.12 (Версии больше, чем 2.17, не рекомендуются так как они не были протестированы)

  • Bzip2-1.0.2

  • Coreutils-5.0 (или Sh-Utils-2.0, Textutils-2.0 и Fileutils-4.1)

  • Diffutils-2.8

  • Findutils-4.1.20

  • Gawk-3.0

  • Gcc-2.95.3 (Versions greater than 4.1.1 are not recommended as they have not been tested)

  • Glibc-2.2.5 (Версии больше, чем 2.4, не рекомендуются так как они не были протестированы)

  • Grep-2.5

  • Gzip-1.2.4

  • Make-3.79.1

  • Patch-2.5.4

  • Sed-3.0.2

  • Tar-1.14

Чтобы увидеть, имеет ли Ваша хост система все подходящие версии, выполните следующее:

cat > version-check.sh << "EOF"
#!/bin/bash

# Простой скрипт для вывода номеров версий критических инструментов разработки

bash --version | head -n1 | cut -d" " -f2-4
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-4
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
gcc --version | head -n1
/lib/libc.so.6 | head -n1 | cut -d" " -f1-7
grep --version | head -n1
gzip --version | head -n1
make --version | head -n1
patch --version | head -n1
sed --version | head -n1
tar --version | head -n1

EOF

bash version-check.sh

v. Оформление

Для облегчения понимания книги ознакомьтесь с некоторыми соглашениями, которые будут в ней использованы. Этот раздел содержит примеры печатного форматирования.

./configure --prefix=/usr

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

install-info: unknown option '--dir-file=/mnt/clfs/usr/info/dir'

Текст такого формата (моноширинный) показывает вывод на экран, как результат выполнения какой-либо команды. Также он используется для указания имени файла, например /etc/ld.so.conf.

Выделение

Текст такого формата имеет несколько назначений в книге. В основном он используется для подчёркивания наиболее важных моментов и для примеров.

http://cross-lfs.org/

Текст такого формата используется для ссылок как внутри книги, так и на внешние ресурсы - руководства, сайты, места для скачивания.

cat > ${CLFS}/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF

Такой раздел используется для создания файлов конфигурации. Первая команда говорит системе создать файл ${CLFS}/etc/group, наполняя его строчками до EOF. В командной строке эта секция печатается в точности как на экране.

[REPLACED TEXT]

Этот формат используется для замены текста, который не должен быть набран так, как изображён или должен быть скопирован и вставлен.

passwd(5)

Этот формат используется для ссылок на особые man-страницы. Номер внутри скобок указывает на особый раздел внутри man. Например, passwd имеет две страницы man. По инструкциям установки CLFS, эти две страницы будут помещены в /usr/share/man/man1/passwd.1 и /usr/share/man/man5/passwd.5. Эти страницы имеют разную информацию. Когда в книге используется passwd(5), то это указание на /usr/share/man/man5/passwd.5. man passwd будет выводить первую найденную man страницу, которая означает “passwd”, которая будет /usr/share/man/man1/passwd.1. В этом примере Вам понадобится запустить man 5 passwd для прочтения указанной страницы. Надо отметить, что большинство man страниц не содержат дублированных имён страниц в разных разделах. Поэтому вызов man [program name] обычно достаточен.

vi. Структура

Эта книга разделена на следующие части.

vi.1. Часть I - Вступление

Часть I содержит некоторые важные сведения о процессе инсталляции и некоторую дополнительную информацию о книге.

vi.2. Часть II - Подготовка к сборке

Часть II описывает приготовления к процессу сборки: создание раздела, скачивание пакетов и компилирование временных инструментов.

vi.3. Часть III - Получение инструментов кросс-компилирования

Часть III рассказывает, как создать инструменты для кросс-компилирования. Эти инструменты могут быть запущены на Вашей основной системе но позволяют собрать пакеты, которые будут запускаться на целевой системе.

vi.4. Часть IV - Сборка основных инструментов

Часть IV рассказывает, как создать инструменты, предназначенные для работы на целевой системе. Это инструменты, которые позволят создать рабочую систему на Вашей целевой системе.

vi.5. Часть V - Сборка CLFS системы

Часть V проводит читателя через сборку CLFS системы — компилирование и установку всех пакетов один за другим, установку загрузочных скриптов и установку ядра. Полученная Linux система является основой, на которой могут быть установлены другие программы для расширения системы по необходимости. В конце книги есть простой в использовании список всех программ, библиотек и важных файлов, которые были установлены.

vi.6. Приложения

Приложения содержат информацию, которая обычно не помещается в другие места книги. Приложение A содержит описания сокращений и определений, используемых в книге; Приложение B содержит благодарности людям, которые помогли в работе над проектом CLFS и сайтом; Приложения C и D содержат информацию о зависимостях пакетов и порядке сборки. Некоторые архитектуры могут содержать дополнительные приложения для архитектурно-специфичных задач.

vii. Опечатки

Программы, используемые для создания CLFS системы, постоянно обновляются и расширяются. Предупреждения безопасности и исправления ошибок могут стать доступными после того, как книга CLFS будет выпущена. Некоторые системы также могут иметь проблемы сборки CLFS. Чтобы проверить, требуется ли обновить версии пакетов или инструкции в этом релизе CLFS, устранить уязвимости безопасности, провести другие исправления ошибок или аппаратно-специфичных проблем, пожалуйста обратитесь на http://trac.cross-lfs.org/clfs/errata/1.0.0/ перед продолжением сборки. Вы должны отметить любые показанные изменения и применить их в соответствующих разделах книги для продвижения в сборке CLFS системы.

Часть I. Вступление

Глава 1. Вступление

1.1. Благодарности Cross-LFS

Редакторы книги хотели бы подлагодарить людей, которые помогли сделать книгу такой, какая она теперь.

Наши лидеры:

  • Ryan Oliver - Разработчик процессов сборки.

  • Jim Gifford - Ведущий разработчик.

  • Jeremy Utley - Диспетчер серии 1.x.

Наша команда CLFS:

  • Joe Ciccone - Сборки Alpha, MIPS, Sparc.

  • Nathan Coulson - Bootscripts.

  • Matt Darcy - Сборки x86, X86_64 и Sparc.

  • Manuel Canales Esparcia - XML книга.

  • Karen McGuiness - Корректор.

  • Jeremy Huntwork - Сборки PowerPC, x86, Sparc.

  • Justin Knierim - Разработчик сайта.

  • Ken Moffat - Сборки PowerPC и X86_64. Разработчие совета Pure 64.

  • Alexander E. Patrakov - Интеграция Udev/Hotplug

  • Chris Staub - Сборки x86. Лидер контроля качества.

Команда внешних разработчиков

  • JЭrg Billeter - Проверка и помощь в разработке пакета Linux Headers

  • Richard Downing - Тестирование, набор и исправления содержания.

  • Peter Ennis - Набор и исправления содержания.

  • Tony Morgan - Набор и исправления содержания.

Редакторы книги также хотели бы подлагодарить за содействие людей с [email protected] и действующих совместно списков рассылки, которые предоставляли ценные технические и редакторские правки во время проверки книги Cross-LFS.

  • G. Moko - Обновление текста и набор

  • Maxim Osipov - Тестирование MIPS.

  • Doug Ronne - Различные исправления x86_64.

  • William Zhou - Обновление текста и набор.

  • Theo Schneider - Тестирование пакета Linux Headers.

Спасибо Вам всем за Вашу поддержку.

1.2. Как построить СLFS систему

CLFS система будет построена при использовании первоначально установленной системы Unix или дистрибутива Linux (например Debian, Mandrake, Red Hat или SuSE). Эта существующая система (хост) будет использована в качестве отправной точки, предоставляющей основные программы, включая компилятор, компоновщик и оболочку для сборки новой системы. Выберите опцию “Разработка” во время установки дистрибутива для установки этих инструментов.

В качестве альтернативы установки некоторого отдельного дистрибутива на Вашу машину Вы можете захотеть использовать Linux From Scratch LiveCD. CD работает хорошо в качестве хост системы, предоставляя все необходимые инструменты для того, чтобы успешно проследовать по инструкциям книги. Дополнительно он содержит все пакеты с исходниками и патчами для книги LFS и копию этой книги, но не необходимые пакеты или книгу для CLFS. Вы можете использовать CD для сборки CLFS, но Вам понадобится скачать пакеты, патчи и книгу отдельно. Также Вы можете обратиться к http://www.linuxfromscratch.org/hints/downloads/files/lfscd-remastering-howto.txt за информацией по сборке своего собственного CD, заменив пакеты LFS и книгу на соответствующие для CLFS. Поэтому если у Вас есть CD, то Вам не нужно сетевое подключение или дополнительные скачивания. За большей информацией о LFS LiveCD или для скачивания его копии посетите http://www.linuxfromscratch.org/livecd/.

Глава Подготовка нового раздела описывает как создать новый Linux native раздел и файловую систему, место, где новая CLFS система будет скомпилирована и установлена. Глава Пакеты и патчи объясняет, какие пакеты и патчи необходимо скачать для сборки CLFS системы и как сохранить их в новой файловой системе. Глава Окончательные приготовления обсуждает настройки для получения подходящего рабочего окружения. Пожалуйста, прочтите главу Окончательные приготовления внимательно, так как здесь разъясняются важные моменты, которые разработчик должен осознавать перед началом работы над главой Создание инструментов кросс-компилирования и в дальнейшем.

Глава Создание инструментов кросс-компилирования разъясняет установку инструментов кросс-компилирования, которые будут собраны на хост системе, но будут способны собирать программы, запускаемые на целевой машине. Эти инструменты кросс-компилирования будут использованы для создания временной, минимальной системы, которая станет основой для построения окончательной CLFS системы. Некоторые из этих пакетов необходимы для разрешения круговых зависимостей — например, для сборки компилятора Вам нужен компилятор.

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

После сборки наших “Кросс-инструментов” мы начнём сборку очень минимальной рабочей системы в /tools. Эта минимальная система будет собрана, используя кросс-инструментарий в /cross-tools.

В главе Установка основных системных программ будет собрана полная CLFS система. В зависимости от системы, для которой Вы проводите кросс-сборку, Вы также загрузите минимальную временную систему на целевой машине или войдёте в неё в chroot окружении.

Программа chroot (изменение root) используется для входа в виртуальное окружение и запуска новой оболочки, для которой корневая директория будет установлена на раздел CLFS. Это очень похоже на перезагрузку и указание ядру монтировать раздел CLFS в качестве корневого раздела. Главное преимущество в том, что “вход в chroot” позволяет продолжать сборку, используя для сборки CLFS основную систему. Во время ожидания завершения сборки пакета пользователь может работать с другой виртуальной консолью или X и продолжать использовать компьютер как обычно.

Некоторые системы не могут быть собраны при помощи chroot, вместо этого они должны быть загружены. Обычно, если Вы собираете для архитектуры, отличной от хост системы, Вы должны перезагрузиться так как ядро не поддерживает целевую машину. Загрузка влечёт за собой установку нескольких дополнительных пакетов, которые нужны для загрузки, установку загрузочных скриптов и сборку минимального ядра. Мы также опишем некоторые альтернативные методы загрузки в Разделе 7.20, “Что дальше”

Для завершения установки устанавливаются CLFS-Bootscripts и ядро в главе Установка системных скриптов загрузки, а загрузчик устанавливается в главе Обеспечение загрузки СLFS системы. Глава Конец содержит информацию по дальнейшему изучению CLFS после этой книги. После выполнения инструкций этой книги компьютер будет готов к перезагрузке в новую CLFS систему.

Это процесс в нескольких словах. Детальная информация по каждому шагу обсуждается в следующих разделах и описаниях пакетов. Пункты, которые могут казаться комплексными, будут разделены и всё будет разложено по местам, так как читатель начинает CLFS приключение.

1.3. Основной список изменений

Это версия 1.0.0 книги Кросс-платформенный Linux From Scratch, датированная September 21, 2006. Если эта книга более чем на шесть месяцев старше, то, возможно, уже доступна более новая и лучшая её версия. Для поиска проверьте одно из зеркал через http://trac.cross-lfs.org/.

Ниже приведён перечень общих изменений, внесённых после выхода предыдущей версии.

Содержание изменений:

  • September 18, 2006

    • [Chris] - Removed TeX installation commands from Texinfo instructions.

  • September 16, 2006

    • [jim] - Updated Udev-Cross-LFS rules to 1.0-3. Fixes bootup with /lib64/udev.

  • September 10, 2006

    • [jim] - Added a patch to fix Inetutils. Telnet on 64 bit systems will fail, it will attempt to connect to 255.255.255.255 instead of the ip address entered. This was due to a change in glibc's handling of inet_addr, was long now is u_int32_t. Bug found by Vladimir Vainer.

    • [jim] - Add patch to fix gzexe. Used Matts change from LFS, that utilizes Robert's fix. More details at http://wiki.linuxfromscratch.org/lfs/ticket/1876.

    • [Chris] - Added Host System Requiremets page, and added more info to the "To Boot or Chroot?" page about needing a 2.6.x Linux kernel to chroot.

  • September 9, 2006

    • [jim] - Updated Linux to 2.6.17.13 and Linux Headers to 2.6.17.13-09092006.

  • September 8, 2006

    • [jim] - Fixed Perl Testsuite Network tests.

  • September 7, 2006

    • [jim] - Updated Multilib Tree to follow build standards set in the book.

    • [jim] - Updated copy commands in Linux Headers, simpler and cleaner.

  • September 6, 2006

    • [jim] - UDEV Rules - On multilib builds, change /lib/udev to /lib64/udev, to keep consistency through the system.

    • [jim] - Removed sed from tcl, not required.

    • [jim] - Replace Perl FPIC patch with a sed, to make sure fpic is set correctly.

  • September 5, 2006

    • [jim] - UDEV - On multilib builds, change /lib/udev to /lib64/udev, to keep consistency through the system.

    • [jim] - IPRoute2 - On multilib builds, change /usr/lib/tc to /usr/lib64/tc, to keep consistency through the system.

  • August 28, 2006

    • [jim] - Renamed Cross-LFS Bootscripts 0.4 to 1.0, for the release. No changes made to the scripts.

    • [jim] - Renamed Cross-LFS Udev Rules 0.1-07062006 to 1.0, for the release. No changes made to the rules.

  • August 27, 2006

    • [jim] - Updated to Cross-LFS Bootscripts 0.4.

  • August 23, 2006

    • [jim] - Updated Linux to 2.6.17.11 and Linux Headers to 2.6.17.11-08232006.

    • [jim] - Updated Linux to 2.6.17.10 and Linux Headers to 2.6.17.10-08232006.

  • August 21, 2006

    • [jciccone] - Added a multilib perl setup that has a multilib wrapper. The multilib wrapper checks for the value of PERL_ARCH and executes the cooresponding perl binary.

    • [ken] - Remove include/net from instructions for headers.

  • August 20, 2006

    • [jciccone] - Added the Perl fPIC patch which makes perl build a shared DynaLoader.a.

    • [Chris] - Removed mention of package users hint from "Package Management" page.

    • [jim] - Updated Linux to 2.6.17.9 and Linux Headers to 2.6.17.9-08202006.

    • [jim] - Added Linux Tulip Patch to all Linux 2.6.17.9 builds. Fixes an initialization error.

  • August 8, 2006

    • [jim] - Moved man-pages to the beginning of the build. (fixes ticket #82).

    • [jim] - Updated the wording of Bzip2, changes were made to MIPS but not the other multilib architectures. Updated for all architectures now (fixes ticket #79).

  • August 7, 2006

    • [Chris] - Updated udev explanatory text in the book and added "Custom Symlinks" page, taken from LFS. Thanks to Alexander Patrakov for the updated text (fixes ticket #75).

  • August 3, 2006

    • [ken] - Fixed the temporary bash to correct a failure in the Glibc testsuite, (fixes ticket #78). Thanks to Go Moko.

  • July 27, 2006

    • [jim] - Fixed symlink issue in bootscripts. New Package CLFS-bootscripts 0.3.

  • July 25, 2006

    • [jim] - Symlinks /tools/bin/file to /usr/bin/file for the GCC testsuite.

  • July 24, 2006

    • [Chris] - Updated commands for building the keymap into the kernel - changed the bootable/kernel page to account for the new keymap files location, and changed the instructions in the "boot" section to reflect that fact that we don't know where the keymap files may be on the host (fixes ticket #56).

  • July 20, 2006

    • [jim] - Updated to linux-2.6.17.6 and linux-headers-2.6.17.6-07202006.

    • [jim] - Updated to Udev 096.

  • July 17, 2006

    • [jeremy] - Minor foreword fixups courtesy of Karen.

  • July 16, 2006

    • [Chris] - Removed unneeded chown and chmod commands from final-system linux-headers installation.

    • [Chris] - Added a sed command to fix updatedb due to the new location for the find program.

  • July 14, 2006

    • [jeremy] - Updated to new foreword

  • July 11, 2006

    • [jim] - Updated to linux-headers-2.6.17.4-07112006.

  • July 9, 2006

    • [jim] - Updated to linux-headers-2.6.17.4-07092006.

  • July 8, 2006

    • [jim] - Updated to linux-2.6.17.4 and linux-headers-2.6.17.4-07072006.

    • [Chris] - Removed many "${CLFS}" references from explanatory text in boot section.

  • July 7, 2006

    • [Chris] - Modified the "creating directories" sections - changed multilib instructions to be consistent with the new format now used for every other arch, and changed mips instructions to use xincludes.

  • July 6, 2006

    • [jim] - Updated Udev rules to 07062006, Fixed cdrom, permissions and groups.

  • July 5, 2006

    • [jim] - Fixes a possible issue with bootscripts if the the /usr partition is not mounted during startup. Moved find to /bin and moved some kbd utilities to /bin.

  • July 4, 2006

    • [jim] - Updated the Grub patch to fix various issues, see text of patch for more details.

  • July 2, 2006

    • [Chris] - Updated passwd and group file creation to only create minimal users and groups and include information on other users/groups.

    • [jim] - Added file to Testsuite tools, required for gcc tests.

  • July 1, 2006

    • [jim] - Updated the build to use CLFS in variables instead of LFS. Also change /mnt/lfs to /mnt/clfs.

  • June 29, 2006

    • [jim] - Updated Temp-System and Boot builds to be more consistant. Added --build=${LFS_HOST}, where possible.

    • [jim] - Updated to Cross-LFS Bootscripts. Added check for for /etc/sysconfig/createfiles.

  • June 27, 2006

    • [jim] - Updated to linux-headers-2.6.17.1-06272006.

  • June 25, 2006

    • [jciccone] - Updated to linux-headers-2.6.17.1-06252006.

  • June 24, 2006

    • [jeremy] - Release of 1.0.0-rc1

  • June 23, 2006

    • [jim] - Updated Binutils 2.17.

    • [jim] - Updated Cross-LFS Specific Пакеты and Patches links for Release.

  • June 22, 2006

    • [jim] - Added mktemp to Linux dependency list. New dependency as of 2.6.17.

    • [jim] - Updated Vim 7.0 patch.

  • June 21, 2006

    • [Chris] - Text updates to the book, including replacing "LFS" with "CLFS".

    • [jim] - Updated to linux-headers-2.6.17.1-06212006-1.

    • [jim] - Updated Vim 7.0 patch.

  • June 20, 2006

    • [jeremy] - Corrected e2fsprogs installation in the boot section, to take into account the new mke2fs.conf file.

    • [jciccone] - Updated to linux-2.6.17.1 and linux-headers-2.6.17.1-06202006.

    • [jim] - Updated to linux-headers-2.6.17.1-06202006-1.

  • June 19, 2006

    • [jciccone] - Updated to man-1.6d.

    • [jciccone] - Added an iconv_fix patch to glibc which fixes an issue that has shown up primarily in samba.

    • [jciccone] - Updated to linux-2.6.17 and linux-headers-2.6.17-06192006.

  • June 15, 2006

    • [jim] - Let Perl use thread support.

  • June 14, 2006

    • [jim] - Updated to Binutils 2.16.94.

  • June 10, 2006

    • [Chris] - Updates to lists of installed programs for several packages.

    • [Ken] - Fixed the module-init-tools install in the presence of existing files. Thanks to Manuel for pointing me to the fix in LFS, and to Dan Nicholson for the fix.

  • June 9, 2006

    • [jim] - Updates to Shadow 4.0.16 build instructions.

    • [jim] - Updated to Linux Headers 2.6.16.20 to 06092006.

  • June 7, 2006

    • [jim] - Updated to Shadow 4.0.16.

  • June 6, 2006

    • [Chris] - Added many more -v switches for verbosity.

  • June 5, 2006

    • [jim] - Updated to linux-2.6.16.20, and linux-headers-2.6.16.20.

    • [jim] - Updated to Bison 2.3.

  • June 4, 2006

    • [Chris] - Removed obsolete paragraph about "resetting" passwords when using pwconv from Shadow instructions.

    • [jim] - Updated to Linux Headers 2.6.16.19 to 06042006.

  • June 1, 2006

    • [Chris] - Updated list of installed programs for several packages.

  • May 31, 2006

    • [ken] - Removed redundant chown of /usr/share/libtool/libltdl.

    • [jim] - Updated to linux-2.6.16.19, and linux-headers-2.6.16.19.

  • May 30, 2006

    • [jim] - Added a patch to fix a missing declaration of R_OK in util-linux.

    • [Chris] - Removed the long-gone swapdev program from the list of programs installed by util-linux, and several programs not installed by default from the kbd program list.

    • [jim] - Updated to E2fsprogs 1.39.

    • [jim] - Updated to Man-Pages 2.33.

  • May 29, 2006

    • [jim] - Updated to Binutils 2.16.93.

    • [jim] - Updated to UDEV 093.

    • [jim] - Updated Udev Rules to 0.1-05292006.

    • [jim] - Updated Linux Headers 2.6.16.18 to 05292006.

  • May 28, 2006

    • [jim] - Added a patch to Grub to prevent. Error 24: Attempt to access block outside partition.

  • May 25, 2006

    • [jim] - Updated to GCC 4.1.1.

    • [jim] - Add Vim 7.0 Upstream Patches.

  • May 22, 2006

    • [jim] - Updated to Coreutils 5.96.

    • [jim] - Updated linux-2.6.16.18, and linux-headers-2.6.16.18.

  • May 21, 2006

    • [jciccone] - Updated to Bison-2.2, linux-2.6.16.17, and linux-headers-2.6.16.17.

  • May 17, 2006

    • [Chris] - Made a number of text updates and grammar fixes and added more dependency info (bootscripts, udev-rules, tree) to Appendix C.

  • May 16, 2006

    • [Chris] - Changed the temp-system and final-system package build order and a few package build instructions to account for the changed order (the rest of ticket #26).

    • [ken] - Change name of coreutils patch to match the patch.

  • May 15, 2006

    • [jim] - Updated to Man-Pages 2.32.

  • May 14, 2006

    • [jim] - Updated Udev Rules to 0.1-05142006.

    • [jim] - Updated Linux Headers 2.6.16.16 to 05142006.

  • May 13, 2006

    • [jim] - Updated to Coreutils 5.95.

  • May 12, 2006

    • [jim] - Add Vim 7.0 Upstream Patches.

  • May 11, 2006

    • [jim] - Updated Linux and Linux Headers to 2.6.16.16.

    • [jim] - Add Vim 7.0 Upstream Patches.

  • May 10,2006

    • [Chris] - Added more detailed dependency info and moved it to Appendices C and D. Fixes half of ticket #26.

  • May 9, 2006

    • [jim] - Updated to Binutils 2.16.92.

    • [jim] - Updated to Vim 7.0.

    • [jciccone] - Updated to Linux 2.6.16.15.

  • May 7, 2006

    • [jim] - Updated Linux Headers 2.6.16.14 to 05072006.

  • May 6, 2006

    • [jciccone] - Updated Linux Headers 2.6.16.14 to 05062006.

  • May 4, 2006

    • [jim] - Updated to Linux-2.6.16.14.

    • [jim] - Updated Linux Headers 2.6.16.13 to 05042006.

  • May 3, 2006

    • [Chris] - Updated to Man-Pages 2.31.

    • [jim] - Updated to Linux-2.6.16.13.

    • [jim] - Updated to Iana-Etc 2.10.

  • May 2, 2006

    • [jim] - Updated Linux Headers 2.6.16.12 to 05022006.

    • [jim] - Reverted change to bash. Needed on some architectures.

    • [jim] - Fixed a coreutils cross-compile issues on some architectures.

  • May 1, 2006

    • [Chris] - Updated to Man-Pages 2.30.

    • [jim] - Updated Linux Headers 2.6.16.11 to 05012006.

    • [Chris] - Updated to Linux-2.6.16.12.

  • April 30, 2006

    • [jim] - Updated Linux Headers 2.6.16.11 to 04302006.

  • April 29, 2006

    • [ken] - Add asm-generic to headers which are chowned in non-multilib books.

  • April 28, 2006

    • [jim] - Updated Linux Headers 2.6.16.11 to 04282006.

    • [jim] - Updated Udev Rules to 0.1-04282006.

  • April 27, 2006

    • [jim] - Updated to Linux Headers 2.6.16.11 to 04272006.

  • April 25, 2006

    • [jim] - Updated to Udev 091.

    • [jim] - Updated to Linux Headers 2.6.16.11 to 04262006.

  • April 24, 2006

    • [ken] - Updated to iproute2-2.6.16-060323.

    • [jim] - Updated to Linux and Linux Headers 2.6.16.11.

  • April 22, 2006

    • [ken] - Add example commands to test if chroot is possible, thanks to William Zhou.

  • April 21, 2006

    • [jim] - Updated Linux-Headers to fix x86_64-biarch problem.

  • April 20, 2006

    • [jim] - Added missing asm-generic copy to Linux-Headers.

    • [jim] - Updated Linux-Headers to include nvram.h.

  • April 19, 2006

    • [jim] - Updated to Bash Patch -8.

    • [jim] - Removed Linux-Libc-Headers and replace it with our Linux-Headers package.

    • [jim] - Updated to Linux 2.6.16.9.

    • [jim] - Updated to Linux 2.6.16.8.

  • April 18, 2006

    • [jim] - Renamed gcc fold_const patch to the PR #.

    • [jim] - Added GCC 4.1.0 patch PR20425. This allows searching of multilib dirs for the specs file.

  • April 17, 2006

    • [Chris] - Removed sed command from temp-system bash - no longer needed for Bash 3.1.

    • [jim] - Updated to Udev 090.

    • [jim] - Updated to udev-rules 0.1-04172006.

    • [jciccone] - Added a gcc patch that fixes an optimaztion error which can result in incorrect code.

    • [jciccone] - Removed the util-linux and kernel patch that fixes the checksum calculation for sun disklabels.

  • April 14, 2006

    • [jciccone] - Added a security patch to tar.

    • [jciccone] - Added a util-linux and kernel patch to fix a checksum calculation issue for sun disklabels.

  • April 13, 2006

    • [jim] - Updated to GCC 4.1.0.

    • [jim] - Fixed make install-minimal in udev-rules.

    • [jim] - Updated to Linux 2.6.16.5.

  • April 12, 2006

    • [jim] - Updated to Glibc 2.4.

    • [jim] - Updated to latest bash patch -7.

  • April 10, 2006

    • [jim] - Changed numbering of udev-rules to use 0.1-SVNDATE.

  • April 6, 2006

    • [jim] - Added install-minimal to udev rules.

    • [jim] - Updated to Udev 089.

  • April 1, 2006

    • [jim] - Updated to Make 3.81.

    • [jim] - Updated to Man-Pages 2.28.

  • March 28, 2006

    • [jim] - Updated to Linux 2.6.16.1.

    • [jim] - Updated to Man-Pages 2.27.

  • March 27, 2006

    • [jciccone] - Updated coreutils suppress_uptime_kill_su patch to -2.

    • [jciccone] - Updated readline fixes patch to -3.patch.

    • [jciccone] - Updated bash fixes patch to -6.

  • March 22, 2006

    • [jim] - Updated Udev to build floppy helper.

  • March 21, 2006

    • [jim] - Updated to Udev 088.

    • [jim] - Updated to Man-Pages 2.26.

    • [jim] - Updated to IPRoute2 2.6.15-060110.

  • March 20, 2006

    • [jim] - Fixed build issue with Texinfo in temp-system. Added --build.

    • [jim] - Updated to Linux 2.6.16.

    • [jim] - Updated to Shadow 4.0.15.

    • [Chris] - Removed note about GCC 2.95.3 from kernel section, as documentation has been updated in linux-2.6.16 and it now recommends GCC >= 3.2.

  • March 15, 2006

    • [jim] - Changed bootscripts to CLFS-bootscripts 0.1.

    • [jim] - Updated to Psmisc 22.2.

    • [jim] - Updated to Flex 2.5.33.

  • March 14, 2006

    • [jim] - Updated to Linux 2.6.16-rc6.

    • [jim] - Removal of Hotplug.

    • [jim] - Updated to Udev 087.

    • [jim] - Removal of old udev rules.

    • [jim] - Added Udev-Cross-LFS 0.1.

    • [jim] - Updated to GCC 4.0.3.

    • [jim] - Updated to File 4.17.

  • March 13, 2006

    • [jciccone] - Removed pure64 bootloader warning from the top page.

  • March 9, 2006

    • [Chris] - Simplified IPRoute2 instruction by removing redundant "configure" command.

  • March 2, 2006

    • [Chris] - Updated to Man-Pages 2.25.

    • [Chris] - Reverted to Expect 5.43.0. 5.44.1 depends on Tk.

  • February 27, 2006

    • [jim] - Updated Bash fixes patch to -5.

  • February 26, 2006

    • [jim] - Updated to Expect 5.44.1.

  • February 23, 2006

    • [Chris] - Simplified the "Changing Ownership" page for the boot section, and rewrote some of the text in the final "Reboot" page.

  • February 21, 2006

    • [jim] - Removed Dependency of Tempfile from Bzip2.

    • [jim] - Updated Bash fixes patch to -4.

    • [jciccone] - Updated to Man-Pages 2.24

  • February 14, 2006

    • [jim] - Updated to Coreutils 5.94.

  • February 11, 2006

    • [Chris] - Added -v switches to commands that accept it.

  • February 9, 2006

    • [jim] - Updated to Man-Pages 2.23.

  • February 8, 2006

    • [jim] - Changed x86_64 to use unknown in the target triplet.

  • February 7, 2006

    • [Chris] - Removed inetutils from boot section - it will be covered in the "netboot" hint.

    • [Chris] - Added section on Package Management - moved out of BLFS.

  • February 6, 2006

    • [Chris] - Moved the text explaining why binutils should be the first package compiled to a more appopriate location at the first installation of binutils, and changed the wording in temp-system gettext.

    • [jim] - Updated Readline and Bash patches from Upstream.

  • February 5, 2006

    • [jim] - Updated Procps 32bit build in Multilib builds to use lib64=lib. Fixed via Trac Ticket #2.

    • [jim] - Updated to Man-Pages 2.22.

  • February 3, 2006

    • [jim] - Updated to Sed 4.1.5.

  • February 2, 2006

    • [jim] - Updated to Perl 5.8.8.

    • [jhuntwork] - Minor textual fix to GCC.

  • February 1, 2006

    • [Chris] - Added a sed substitution to man instructions to fix an error in the makewhatis script.

  • January 31, 2006

    • [Chris] - Added -v to commands that accept them, for consistency with LFS.

  • January 30, 2006

    • [jim] - Change final-system GCC, to use make bootstrap. Update provided by Ryan Oliver.

  • January 29, 2006

    • [jim] - Updated Toolchain adjustment in final-system. Thank you Dan Nicholson.

  • January 24, 2006

    • [jim] - Updated to Man 1.6c.

  • January 23, 2006

    • [Chris] - Removed unnecessary --with-ncurses switches from temp-system bash and inetutils.

    • [Chris] - Moved zlib from temp-system to boot as it's not needed if you chroot.

  • January 19, 2006

    • [Chris] - Removed patch from shadow instructions.

    • [Chris] - Added perl sprintf vulnerability patch.

    • [jim] - Updated to Man-Pages 2.21.

  • January 13, 2006

    • [ken] - Moved grep ahead of libtool to avoid /tools being hardcoded into the libtool script for EGREP.

    • [ken] - Alter bison to build repeatably, from LFS.

    • [ken] - Alter gccbug to use mktemp, from LFS.

    • [ken] - Move creation of /etc/hosts within Perl instructions, for repeatability, from LFS.

    • [Chris] - Moved bootloader setup to right after "Changing Ownership" in Chapter 7, and changed several package installation instructions in that chapter.

  • January 12, 2006

    • [Chris] - Moved directory and symlink creation pages to the beginning of Chapter 7.

    • [jim] - Updated to Psmisc 22.1.

    • [jim] - Updated to Man-Pages 2.20.

    • [jim] - Updated Coreutils build instructions to copy more files to /bin. These are changes for bootscripts and the new udev rules.

    • [jim] - Updated to Linux 2.6.14.6.

    • [jim] - Numerous complaints about temp-system Perl failing to build. So I moved temp perl to first package in final-system build. The failures we noted on Pure 64 builds.

  • January 11, 2006

    • [jim] - Rewrote wrote zlib final instructions to include a patch the will allow build of static and shared libraries at the same time. Thanx for the recommendation Tushar Teredesai.

  • January 8, 2006

    • [Chris] - Rewrote much of the описание of the build process and test suite information.

  • January 3, 2006

    • [jim] - Updated to Shadow 4.0.14.

  • December 30, 2005

    • [Chris] - Updated package dependencies, removed explanation of "target alias" and "cross-compiling" from final-system binutils, and removed note about GRUB's testsuite failure.

    • [ken] - Fix where tree gets installed.

  • December 29, 2005

    • [jim] - Added CC="gcc" to temp-system perl build.

  • December 28, 2005

    • [ken] - Remove --with-x=no from expect - either we booted, or we are in chroot.

    • [ken] - Fix a failure to build glibc-headers.

    • [jim] - Updated to Linux 2.6.14.5.

  • December 23, 2005

    • [jim] - Updated Shadow patch to fix linking to outside libraries.

  • December 22, 2005

    • [jim] - Bash Maintainer Released Bash-001 patch. This patch fixes the following issue: There are parsing problems with compound assignments in several contexts, including as arguments to builtins like `local', `eval', and `let', and as multiple assignments in a single command.

    • [jim] - Readline Maintainer Released Readline-001 patch. This patch fixes the following issue: A problem with the readline callback interface can result in segmentation faults when using the delete-char function via a multiple-key sequence. Two consecutive calls to delete-char will crash the application calling readline.

    • [jim] - Removed halt, sync, and shutdown users. These users work, but offer a potential security threat. Thus the reason for removal.

    • [jim] - Fixed Vim symlink. Thank you LFS and Jeremy Huntwork.

  • December 20, 2005

    • [jim] - Updated to M4 1.4.4.

  • December 19, 2005

    • [ken] - Fix for accessing vim's documentation, from LFS.

    • [jim] - Fixed the Gettext testsuite from failing, by fixing an issue in Gawk. Thank you Greg Schaefer.

  • December 18, 2005

    • [jim] - Re-arranged temp-tools. Renamed it to testsuite-tools. Moved perl and texinfo to temp-system. Moved flags from testsuite-tools to chroot and boot sections.

    • [jim] - Removed 32bit and N32 builds from temp-system, upon testing it was found that these were not needed for building the final system on a multilib capable build.

    • [jim] - Updated to Libtool 1.5.22.

    • [jim] - Updated to Man-Pages 2.18.

  • December 17, 2005

    • [jim] - Updated to psmisc 21.9.

  • December 16, 2005

    • [jim] - Moved Tree to temp-tools, since it's not needed for the final-system.

    • [jim] - Moved Procps before perl in the final-system build. Fixes test suite issue in perl.

  • December 15, 2005

    • [ken] - Minor fix for rendering in temp-tools/texinfo.

    • [jim] - Added not to temp-system about the WARNING message.

  • December 14, 2005

    • [jim] - Change the CLFS_HOST and CLFS_TARGET pages to prevent further build issues.

    • [jim] - Updated to Man-Pages 2.17.

    • [jim] - Added Tree 1.5.0. Added for the udev testsuite.

  • December 13, 2005

    • [jim] - Removed setvbuf test from Temp-System Bash compile. Thanks to David Fix.

  • December 12, 2005

    • [jim] - Removed testsuites from Temp-Tools section.

  • December 11, 2005

    • [ken] - Fix Tcl configure, thanks to Greg Schafer.

  • December 9, 2005

    • [jim] - Upgraded to Module Init Tools 3.2.2.

    • [ken] - Bzip2 - clarify what is being tested.

    • [jim] - Removed installation of sound sanitized headers. They will be removed in the next release of linux-libc-headers.

  • December 8, 2005

    • [jim] - Upgraded to Less 394.

    • [jim] - Upgraded to Bash 3.1.

    • [jim] - Upgraded to Readline 5.1.

  • December 7, 2005

    • [jim] - Upgraded to TCL 8.4.12.

    • [jim] - Upgraded to IPRoute2 2.6.14-051107.

    • [jim] - Upgraded to Readline 5.0.5.

    • [jim] - Upgraded to Bash 3.0.16.

  • December 6, 2005

    • [jim] - Upgraded to Glibc 20051107.

    • [jim] - Sparcv8 now uses the same Glibc as the other architectures.

    • [jim] - Ported Gettext update from Temp-system LFS to Cross-LFS.

    • [ken] - Tidying in Gettext to reflect our differences from LFS, and correct the date in changelog.

    • [jim] - Moved Cross-tools from $HOME to LFS. This provide a easy way for livecd builders to not loose valueable build time, if something goes wrong.

    • [jim] - Upgraded to Findutils 4.2.27.

  • December 5, 2005

    • [Matt Darcy] - Updated the resources page to include reference and base instructions on using the LFS pastebin

    • [Matt Darcy] - Updated some of the missing text poritions of the book

    • [Matt Darcy] - Updated creation of $CLFSHOME parameter to a less user error system. This change will will need to be validated by by other devs

    • [ken] - Moved Mktemp ahead of Module-init-tools so that the latter's testsuite doesn't bail out when testing generate-modprobe.conf.

  • December 3, 2005

    • [ken] - Reference a home directory for dummy user when testing coreutils, and correct sed 'man page' to 'HTML documentation', both from LFS.

  • December 2, 2005

    • [jim] - Updated to Man-Pages 2.16.

  • December 1, 2005

    • [jim] - Updated to Linux 2.6.14.3.

    • [jim] - Updated to Man-Pages 2.15.

    • [jim] - Updated to Udev 076.

    • [jim] - Added support for Sparc v8 and below.

  • November 30, 2005

    • [jim] - Text updates to final-system.

    • [jim] - Text updates to temp-tools.

  • November 29, 2005

    • [jim] - Text updates to chroot.

    • [jim] - Text updates to boot.

  • November 28, 2005

    • [jim] - Text updates to glibc in all sections.

    • [jim] - Text updates to temp-system.

    • [jim] - Fixed duplicated gcc configure line in gcc. Thank you Dennis Perkins.

  • November 27, 2005

    • [jim] - Text updates to gcc in all sections.

    • [jim] - Updates to Ncurses, added curses file and link. Thank you G. Moko.

  • November 25, 2005

    • [jim] - Text updates to binutils in all sections.

  • November 24, 2005

    • [Matt Darcy] - Text updates to resources page

    • [Matt Darcy] - Updated reference to LFS news server to reflect that it no longer exists

  • November 23, 2005

    • [jim] - For inetutils to utilize the Ncurses headers in /tools/include.

  • November 21, 2005

    • [jim] - Updated to Udev 075.

    • [jim] - Updated to Module Init Tools 3.2.1.

  • November 20, 2005

    • [jim] - Updated to Findutils 4.2.26.

  • November 18, 2005

    • [manuel] - Fixed the unpack of the module-init-tools-testsuite package.

  • November 17, 2005

    • [jim] - Update to Man-Pages 2.14.

    • [jim] - Update to Linux 2.6.14.2. This includes changes for the MIPS Architecture. New Patch added.

    • [jim] - Added change to move /usr/bin/less to /bin/less.

  • November 13, 2005

    • [manuel] - Improve the heuristic for determining a locale that is supported by both Glibc and packages outside LFS. Ported from LFS-SVN.

    • [manuel] - Omit running Bzip2's testsuite as a separate step, as make runs it automatically. Ported from LFS-SVN.

    • [jim] - Updated TCL build to install headers. Thank you Greg Schafer.

    • [jim] - Updated Expect to use the newly relocated TCL Headers. Thank you Greg Schafer.

  • November 10, 2005

    • [ken] - Added Data/Dumper to temp perl modules, for coreutils testsuite. Ported from LFS-SVN.

    • [ken] - Removed POSIX VERSION information from coreutils page Thank you G Moko.

    • [jim] - Added text for multilib kernel build requirements.

  • November 9, 2005

    • [manuel] - Stop Udev from killing udevd processes on the system and removed udevdir=/dev. Ported from LFS-SVN.

    • [manuel] - Install the binaries from Less to /usr/bin instead of /bin. Ported from LFS-SVN.

    • [manuel] - Removed SBUs and disk usage information.

    • [jim] - Added missing utmp group. Thank you William Zhou.

  • November 8, 2005

    • [jim] - Removed make headers -C bfd from Binutils. Thank you Robert Day.

  • November 7, 2005

    • [manuel] - Remove the optimization related warnings from the toolchain packages. Ported from LFS-SVN.

    • [manuel] - Install Vim's documentation to /usr/share/doc/vim-7.0 instead of /usr/share/vim/vim64/doc. Ported from LFS-SVN.

    • [manuel] - Correct the instructions for running the Module-Init-Tools' testsuite. Ported from LFS-SVN.

    • [jim] - Removed unnecessary linking libc sed in gcc-final in cross-tools. Recommendation from Erik-Jan, via cross-lfs list.

  • November 6, 2005

    • [jim] - Updated to Coreutils 5.93.

    • [jim] - Updated to Procps 3.2.6.

    • [jim] - Updated to Man-Pages 2.13.

  • November 5, 2005

    • [jim] - Updated to psmisc 21.8.

  • November 3, 2005

    • [jim] - Fixes added to coreutils. Coreutils was install locales to /locale. Added fixes for dircolors and md5sum also.

  • October 31, 2005

    • [jim] - Now an official project. Resetting all Changelogs.

Ветка синхронизирована с релизом LFS 6.0 23 февраля 2005

1.4. Список изменений для Alpha

Ниже приведён список изменений, специфичный для этой архитектуры, сделанный после предыдущего релиза книги. Общие изменения смотрите в разделе Основной список изменений,

Содержание изменений:

  • 28 июня 2006

    • [jciccone] - Обновление ратча aboot-fixes до -4.

  • 25 июня 2006

    • [jciccone] - Добавлен патч для glibc и ядра, который исправляет проблему с некоторым строчным ассемблированием.

    • [jciccone] - Обновление ратча aboot-fixes до -3.

  • 5 января 2006

    • [jim] - Добавлен патч для исправления Glibc. Смотрите http://sources.redhat.com/bugzilla/show_bug.cgi?id=1458.

  • 31 октября 2005

    • [jim] - Теперь официальный проект. Сброс всех списков изменений.

1.5. Ресурсы

1.5.1. FAQ

Если на протяжении сборки CLFS системы Вы получите некоторые ошибки, вызывающие вопросы, или подумаете, что в книге есть опечатки, пожалуйста, начните с консультации в Часто Задаваемых Вопросах (FAQ), которые размещены на http://trac.cross-lfs.org/wiki/faq.

1.5.2. Списки рассылки

Сервер cross-lfs.org размещает некоторое количество списков рассылки, используемые разработчиками проекта LFS. Эти списки включают, помимо прочего, список разработчиков и список поддержки. Если FAQ не решит Вашу проблему, то следующим шагом будет поиск в списках рассылки на http://www.mail-archive.com. Вы можете найти списки рассылки по следующей ссылке:

http://www.mail-archive.com/index.php?hunt=clfs

Для поиска информации о доступных списках рассылки, подписки на них, просмотра их архивов и т.п. загляните на http://trac.cross-lfs.org/wiki/lists.

1.5.3. Сервер новостей

Cross-LFS не поддерживает собственный сервер новостей, но мы предоставляем доступ через gmane.org http://gmane.org. Если Вы хотите подписаться на Cross-LFS, используйте gmane.org. Вы можете найти поиск игр для CLFS по следующей ссылке:

http://dir.gmane.org/search.php?match=clfs

1.5.4. IRC

Множество членов сообщества СLFS используют IRC сервер сообщества. Перед тем, как использовать этот вид поддержки, проверьте СLFS FAQ и архивы списков рассылки. Возможно, на Ваш вопрос уже есть ответ. Вы сможете найти наш IRC сервер на chat.freenode.net. Канал поддержки для cross-lfs называется #cross-lfs. Если Вам необходимо показать людям вывод Вашей проблемы, используйте http://pastebin.linuxfromscratch.org и ссылку pastebin URL когда задаёте вопросы.

1.5.5. Зеркала сайта

Проект LFS имеет ряд зеркал в сети. Список текущих зеркал можно увидеть на http://trac.cross-lfs.org/wiki/mirrors.

1.5.6. Контактная информация

Пожалуйста, направляйте все Ваши вопросы и коментарии в списки рассылки CLFS (см. выше).

1.6. Помощь

Если проблема или вопрос неожиданно возникает во время работы с книгой, проверьте страницу FAQ на http://trac.cross-lfs.org/wiki/faq#generalfaq. Здесь часто уже есть ответы на возникшие вопросы. Если Вы не нашли здесь ответ на свой вопрос, попробуйте найти источник проблемы. Следующие подсказки дадут Вам некоторое направление для решения проблемы: http://www.linuxfromscratch.org/hints/downloads/files/errors.txt.

У нас также есть отличное сообщество СLFS, которое готово предложить помощь через IRC и списки рассылки (смотри в Разделе 1.5, “Ресурсы” этой книги). Хотя мы каждый день отвечаем на несколько вопросов, на многие из них ответ может быть легко найден в FAQ и поиском по спискам рассылки. Поэтому, чтобы мы предоставили лучшую возможную помощь, Вам самим сначала необходимо сделать некоторые изыскания. Это позволит нам сфокусироваться на более необычных потребностях поддержки. Если Ваши поиски не приведут к результатам, пожалуйста, включайте всю доступную информацию (упомянутую ниже) в задаваемый вопрос.

1.6.1. Что необходимо указать

Помимо краткого сообщения об ошибке, не забудьте привести следующую информацию:

  • Версия используемой книги (в данном случае 1.0.0)

  • Основной дистрибутив и его версию, используемый для сборки СLFS

  • Какие архитектуры у хоста и целевой системы

  • Значения переменных окружения ${CLFS_HOST}, ${CLFS_TARGET}, ${BUILD32} и ${BUILD64}

  • Пакет или раздел, с которыми у Вас возникли проблемы

  • Сообщение об ошибке или симптомы проблемы. Смотрите пример ниже в Разделе 1.6.3, “Проблемы компилирования”

  • Отклонялись ли Вы от шагов, описаных в книге

Замечание

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

1.6.2. Проблемы конфигурации

Если что-то пошло не так при выполнении скрипта configure, то посмотрите в файле config.log. Этот файл содержит ошибки, которые не были выведены на экран. Включите информацию из этого файла в просьбу о помощи.

1.6.3. Проблемы компилирования

Для того, чтобы помочь нам найти причину проблемы важен как вывод на экране, так и содержание некоторых файлов. Вывод на экране скрипта configure и команды make содержат много полезной информации. Не стоит слепо включать в свое сообщение весь вывод, но и не следует включать слишком мало информации. Ниже приведен вывод на экран команды make::

gcc -DALIASPATH=\"/mnt/clfs/usr/share/locale:.\"
-DLOCALEDIR=\"/mnt/clfs/usr/share/locale\"
-DLIBDIR=\"/mnt/clfs/usr/lib\"
-DINCLUDEDIR=\"/mnt/clfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
-g -O2 -c getopt1.c
gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o
expand.o file.o function.o getopt.o implicit.o job.o main.o
misc.o read.o remake.o rule.o signame.o variable.o vpath.o
default.o remote-stub.o version.o opt1.o
-lutil job.o: In function `load_too_high':
/clfs/tmp/make-3.79.1/job.c:1565: undefined reference
to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/clfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/clfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2

В этом случае большинство людей включают в сообщение строчку:

make [2]: *** [make] Error 1

Но этого недостаточно для решения проблемы потому, что это только скажет что что-то не так. В сообщение с просьбой помочь необходимо включить всю секцию вывода, т.к. она содержит выполнение команды и её сообщения об ошибках.

В Интернете есть отличная статья о том, как надо правильно задавать вопросы, расположенная на http://catb.org/~esr/faqs/smart-questions.html. Прочтите эту статью и примите к сведению при задавании вопросов, тогда Ваши шансы получить полный и квалифицированный ответ значительно возрастут.

Часть II. Подготовка к сборке

Глава 2. Подготовка нового раздела

2.1. Вступление

В этой главе подготавливается раздел, который будет хостом CLFS системы. Мы сами создадим раздел, создадим в нём файловую систему и примонтируем её.

2.2. Создание нового раздела

Как и большинство операционных систем, CLFS обычно устанавливается на выделенный раздел. Рекомендованный подход для сборки CLFS системы это использование доступного пустого раздела или, если у Вас есть достаточно неиспользуемого под разделы места, создать его. Хотя, если Вы собираете для другой архитектуры, то Вы можете просто собрать всё в “/mnt/clfs” и переместить это на Вашу целевую машину.

Для минимальной системы нам понадобится раздел около 1.2 ГБ. Это позволит сохранить все исходники и архивы и собрать все пакеты. Но если Вы хотите установить СLFS в качестве основной Linux системы, то Вам, видимо, понадобятся дополнительные программы и надо будет больше места, возможно около 2 или 3 ГБ. Система СLFS сама не занимает так много места. Большая часть этих требований к дисковому пространству предоставляет достаточную свободу для временного пространства. Сборка пакетов может требовать много дискового пространства, которое будет освобождено после установки пакетов.

Для того, чтобы Вам всегда хватало оперативной памяти, неплохо было бы использовать небольшой раздел диска для подкачки (swap space) - это место будет использоваться ядром для сохранения редко используемых данных из памяти для увеличения объема доступной памяти за счет этого раздела. Раздел подкачки может быть одним для всех Ваших систем: СLFS и основной, так что Вам не надо создавать второй такой раздел, если у Вас уже есть один.

Программы для оперирования разделами, такие как cfdisk или fdisk, запускаются с именем диска, на котором будет производится изменение - например /dev/hda для главного IDE диска. Создайте Linux native раздел и раздел подкачки в случае надобности. Пожалуйста, изучите мануалы по cfdisk(8) или fdisk(8) если Вы не знаете, как использовать эти программы.

Запомните расположение Вашего нового раздела - что-то наподобие hda5. Эта книга ссылается на этот раздел, как на раздел СLFS. Если у Вас есть раздел подкачки, то запомните и его расположение. Оно нам понадобится для файла /etc/fstab.

На системе Alpha необходима bsd метка диска. Для её создания выполним следующую команду:

fdisk /dev/[yyy]

Затем используем опцию b для создания bsd метки диска. Перед выходом используем опцию w для записи таблицы разделов.

2.3. Создание файловой системы на разделе

Теперь у нас есть пустой раздел и нам надо создать на нём файловую систему. Наиболее используемой системой в Linux является second extended (ext2), но современные высококачественные жёсткие диски делают более популярными журналируемые файловые системы. Здесь мы создадим файловую систему ext2, а инструкции по установке других файловых систем можно найти на http://www.linuxfromscratch.org/blfs/view/svn/postlfs/filesystems.html.

Для создания файловой системы ext2 в разделе СLFS необходимо выполнить:

mke2fs /dev/[xxx]

Замените [xxx] на имя Вашего раздела СLFS (что-то типа hda5).

Замечание

Некоторые дистрибутивы используют собственные функции в их инструментах создания файловых систем (E2fsprogs). Это может привести к проблемам во время загрузки в Вашу новую CLFS систему так как эти функции не будут поддержаны E2fsprogs, установленными в CLFS; Вы получите ошибку, похожую на unsupported filesystem features, upgrade your e2fsprogs. Для проверки, поддерживает ли Ваша хост система собственные расширения, выполните следующую команду:

debugfs -R feature /dev/[xxx]

Если вывод содержит расширения, отличные от: dir_index; filetype; large_file; resize_inode или sparse_super, то Ваша хост система может иметь собственные расширения. В таком случае для избежания последующих проблем Вы должны скомпилировать главный пакет E2fsprogs и использовать результирующие бинарники для пересоздания файловой системы на Вашем CLFS разделе:

cd /tmp
tar xjf /path/to/sources/e2fsprogs-1.39.tar.bz2
cd e2fsprogs-1.39
mkdir build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs /dev/[xxx]
cd /tmp
rm -rf e2fsprogs-1.39

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

mkswap /dev/[yyy]

Замените [yyy] на имя swap раздела.

2.4. Монтирование нового раздела

Теперь, когда мы создали в разделе файловую систему, нам надо получить к ней доступ. Для этого нам необходимо выбрать точку монтирования и примонтировать этот раздел в неё. В этой книге подразумевается, что файловая система монтирована в /mnt/clfs, но это не обязательно, поступите так, как Вам больше нравится.

Выберем точку монтирования и свяжим её с переменной окружения CLFS, для этого запустим:

export CLFS=/mnt/clfs

Теперь создадим точку монтирования и примонтируем файловую систему СLFS запуском следующей команды:

mkdir -pv ${CLFS}
mount -v /dev/[xxx] ${CLFS}

Замените [xxx] на имя Вашего раздела CLFS.

Если Вы решили использовать несколько разделов для CLFS (например одну для /, а другую для /usr), примонтируйте их следующим образом:

mkdir -pv ${CLFS}
mount -v /dev/[xxx] ${CLFS}
mkdir -v ${CLFS}/usr
mount -v /dev/[yyy] ${CLFS}/usr

Замените [xxx] и [yyy] на соответствующие имена разделов.

Вам также надо убедиться, что новый раздел не примонтировался с ограничениями доступа (такие опции как nosuid, nodev или noatime). Запустите команду mount без параметров для того, чтобы увидеть с какими опциями примонтировался наш раздел. Если nosuid, nodev и/или noatime установлены, Вам надо будет перемонтировать раздел снова.

Теперь у нас есть место для работы и мы готовы к закачке пакетов.

Глава 3. Пакеты и патчи

3.1. Вступление

Эта глава включает список пакетов, которые Вам надо будет скачать для сборки простейшей Linux системы. Указанные версии являются версиями, о которых точно известно, что они работают, и эта книга базируется на них. Если Вы не являетесь опытным установщиком LFS, мы строго рекомендуем не испытывать новые версии, так как команды сборки для них могут отличаться. Также не рекомендуется использовать последние версии пакетов из-за того, что ещё неизвесно, какие проблемы может вызвать их установка и как они будут работать.

Места для скачивания могут быть не всегда доступны. Если место для скачивания было изменено за время публикации этой книги, Google (http://www.google.com/) предлагает полезную поисковую службу для большинства пакетов. Если этот поиск будет безуспешным, попробуйте один из альтернативных способов, обсуждаемых на http://cross-lfs.org/files/packages/1.0.0/.

Вам надо сохранить скачанные пакеты и патчи так, чтобы они были доступны из точки сборки. Вам также будет нужна директория для распаковки исходников и их сборки. В книге мы используем директорию ${CLFS}/sources как место для записи тарболов и патчей и как рабочую директорию. Это позволяет сделать их доступными из раздела СLFS на всём протяжении процесса сборки системы.

Для создания директории, как пользователь root, выполните следующую команду перед началом сессии скачивания пакетов:

mkdir -v ${CLFS}/sources

Сделайте эту директорию доступной для записи и прикреплённой. Когда директория помечена, как “прикреплённая”, то это означает, что даже если различные пользователи имеют права записи в директорию, только владелец файла может удалить файл из прикреплённой директории. Следующая команда включит режим записи и прикреплённости:

chmod -v a+wt ${CLFS}/sources

3.2. Все пакеты

Скачайте или получите другим способом следующие пакеты:

Autoconf (2.59) - 904 KБ:

Домашняя страница: http://www.gnu.org/software/autoconf/

Адрес для скачивания: http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2

Контрольная сумма: 1ee40f7a676b3cfdc0e3f7cd81551b5f

Automake (1.9.6) - 748 KБ:

Домашняя страница: http://www.gnu.org/software/automake/

Адрес для скачивания: http://ftp.gnu.org/gnu/automake/automake-1.9.6.tar.bz2

Контрольная сумма: c11b8100bb311492d8220378fd8bf9e0

Bash (3.1) - 2,475 KБ:

Домашняя страница: http://www.gnu.org/software/bash/

Адрес для скачивания: http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz

Контрольная сумма: ef5304c4b22aaa5088972c792ed45d72

Bash Documentation (3.1) - 2,013 KБ:

Адрес для скачивания: http://ftp.gnu.org/gnu/bash/bash-doc-3.1.tar.gz

Контрольная сумма: a8c517c6a7b21b8b855190399c5935ae

Binutils (2.17) - 13,496 KБ:

Домашняя страница: http://sources.redhat.com/binutils/

Адрес для скачивания: http://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2

Контрольная сумма: e26e2e06b6e4bf3acf1dc8688a94c0d1

Bison (2.3) - 1,060 KБ:

Домашняя страница: http://www.gnu.org/software/bison/

Адрес для скачивания: http://ftp.gnu.org/gnu/bison/bison-2.3.tar.bz2

Контрольная сумма: c18640c6ec31a169d351e3117ecce3ec

Bzip2 (1.0.3) - 654 KБ:

Домашняя страница: http://www.bzip.org/

Адрес для скачивания: http://www.bzip.org/1.0.3/bzip2-1.0.3.tar.gz

Контрольная сумма: 8a716bebecb6e647d2e8a29ea5d8447f

CLFS-Bootscripts (1.0) - 28 KБ:

Адрес для скачивания: http://cross-lfs.org/files/packages/1.0.0/bootscripts-cross-lfs-1.0.tar.bz2

Контрольная сумма: 79bff3247411589d7de51fdaea9578bd

Coreutils (5.96) - 4,960 KБ:

Домашняя страница: http://www.gnu.org/software/coreutils/

Адрес для скачивания: http://ftp.gnu.org/gnu/coreutils/coreutils-5.96.tar.bz2

Контрольная сумма: bf55d069d82128fd754a090ce8b5acff

DejaGNU (1.4.4) - 1,056 KБ:

Домашняя страница: http://www.gnu.org/software/dejagnu/

Адрес для скачивания: http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.4.4.tar.gz

Контрольная сумма: 053f18fd5d00873de365413cab17a666

Diffutils (2.8.7) - 1,034 KБ:

Домашняя страница: http://www.gnu.org/software/diffutils/

Адрес для скачивания: ftp://alpha.gnu.org/gnu/diffutils/diffutils-2.8.7.tar.gz

Контрольная сумма: 18d6587cb915e7aa110a5d463d6ed156

E2fsprogs (1.39) - 3,612 KБ:

Домашняя страница: http://e2fsprogs.sourceforge.net/

Адрес для скачивания: http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.39.tar.gz?download

Контрольная сумма: 06f7806782e357797fad1d34b7ced0c6

Expect (5.43.0) - 514 KБ:

Домашняя страница: http://expect.nist.gov

Адрес для скачивания: http://expect.nist.gov/src/expect-5.43.0.tar.gz

Контрольная сумма: 43e1dc0e0bc9492cf2e1a6f59f276bc3

File (4.17) - 544 KБ:

Адрес для скачивания: ftp://ftp.gw.com/mirrors/pub/unix/file/file-4.17.tar.gz

Контрольная сумма: 50919c65e0181423d66bb25d7fe7b0fd

Замечание

Пакет File (4.17) может быть недоступен, когда Вы это читаете. На главных местах для скачивания удаляют старые версии пакетов. Альтернативные места для скачивания, которые могут иметь корректную версию, доступны на http://cross-lfs.org/files/packages/1.0.0/.

Findutils (4.2.27) - 1,097 KБ:

Домашняя страница: http://www.gnu.org/software/findutils/

Адрес для скачивания: http://ftp.gnu.org/gnu/findutils/findutils-4.2.27.tar.gz

Контрольная сумма: f1e0ddf09f28f8102ff3b90f3b5bc920

Flex (2.5.33) - 680 KБ:

Домашняя страница: http://flex.sourceforge.net

Адрес для скачивания: http://prdownloads.sourceforge.net/flex/flex-2.5.33.tar.bz2?download

Контрольная сумма: 343374a00b38d9e39d1158b71af37150

Gawk (3.1.5) - 1,716 KБ:

Домашняя страница: http://www.gnu.org/software/gawk/

Адрес для скачивания: http://ftp.gnu.org/gnu/gawk/gawk-3.1.5.tar.bz2

Контрольная сумма: 5703f72d0eea1d463f735aad8222655f

GCC (4.1.1) - 38,300 KБ:

Домашняя страница: http://gcc.gnu.org/

Адрес для скачивания: http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/gcc-4.1.1.tar.bz2

Контрольная сумма: ad9f97a4d04982ccf4fd67cb464879f3

Gettext (0.14.5) - 6,940 KБ:

Домашняя страница: http://www.gnu.org/software/gettext/

Адрес для скачивания: http://ftp.gnu.org/gnu/gettext/gettext-0.14.5.tar.gz

Контрольная сумма: e2f6581626a22a0de66dce1d81d00de3

Glibc (2.4) - 14,847 KБ:

Домашняя страница: http://www.gnu.org/software/libc/

Адрес для скачивания: http://ftp.gnu.org/gnu/glibc/glibc-2.4.tar.bz2

Контрольная сумма: 7e9a88dcd41fbc53801dbe5bdacaf245

Grep (2.5.1a) - 516 KБ:

Домашняя страница: http://www.gnu.org/software/grep/

Адрес для скачивания: http://ftp.gnu.org/gnu/grep/grep-2.5.1a.tar.bz2

Контрольная сумма: 52202fe462770fa6be1bb667bd6cf30c

Groff (1.19.2) - 2,836 KБ:

Домашняя страница: http://www.gnu.org/software/groff/

Адрес для скачивания: http://ftp.gnu.org/gnu/groff/groff-1.19.2.tar.gz

Контрольная сумма: f7c9cf2e4b9967d3af167d7c9fadaae4

Gzip (1.3.5) - 324 KБ:

Домашняя страница: http://www.gzip.org/

Адрес для скачивания: ftp://alpha.gnu.org/gnu/gzip/gzip-1.3.5.tar.gz

Контрольная сумма: 3d6c191dfd2bf307014b421c12dc8469

Iana-Etc (2.10) - 184 KБ:

Домашняя страница: http://www.sethwklein.net/projects/iana-etc/

Адрес для скачивания: http://www.sethwklein.net/projects/iana-etc/downloads/iana-etc-2.10.tar.bz2

Контрольная сумма: 53dea53262b281322143c744ca60ffbb

Inetutils (1.4.2) - 1019 KБ:

Домашняя страница: http://www.gnu.org/software/inetutils/

Адрес для скачивания: http://ftp.gnu.org/gnu/inetutils/inetutils-1.4.2.tar.gz

Контрольная сумма: df0909a586ddac2b7a0d62795eea4206

IPRoute2 (2.6.16-060323) - 378 KБ:

Домашняя страница: http://linux-net.osdl.org/index.php/Iproute2

Адрес для скачивания: http://developer.osdl.org/dev/iproute2/download/iproute2-2.6.16-060323.tar.gz

Контрольная сумма: f31d4516b35bbfeaa72c762f5959e97c

Kbd (1.12) - 618 KБ:

Адрес для скачивания: http://www.kernel.org/pub/linux/utils/kbd/kbd-1.12.tar.bz2

Контрольная сумма: 069d1175b4891343b107a8ac2b4a39f6

Less (394) - 286 KБ:

Домашняя страница: http://www.greenwoodsoftware.com/less/

Адрес для скачивания: http://www.greenwoodsoftware.com/less/less-394.tar.gz

Контрольная сумма: a9f072ccefa0d315b325f3e9cdbd4b97

Libtool (1.5.22) - 2,854 KБ:

Домашняя страница: http://www.gnu.org/software/libtool/

Адрес для скачивания: http://ftp.gnu.org/gnu/libtool/libtool-1.5.22.tar.gz

Контрольная сумма: 8e0ac9797b62ba4dcc8a2fb7936412b0

Linux (2.6.17.13) - 40,320 KБ:

Домашняя страница: http://www.kernel.org/

Адрес для скачивания: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.13.tar.bz2

Контрольная сумма: 834885b3ad9988b966570bee92459572

Linux-Headers (2.6.17.13-09092006) - 1,576 KБ:

Домашняя страница: http://headers.cross-lfs.org/

Адрес для скачивания: http://cross-lfs.org/files/packages/1.0.0/linux-headers-2.6.17.13-09092006.tar.bz2

Контрольная сумма: bfda0e9440dd76e6e35fdce79c9b0bf6

M4 (1.4.4) - 300 KБ:

Домашняя страница: http://www.gnu.org/software/m4/

Адрес для скачивания: http://ftp.gnu.org/gnu/m4/m4-1.4.4.tar.bz2

Контрольная сумма: eb93bfbcb12cf00165583302bb31a822

Make (3.81) - 1,125 KБ:

Домашняя страница: http://www.gnu.org/software/make/

Адрес для скачивания: http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2

Контрольная сумма: 354853e0b2da90c527e35aabb8d6f1e6

Man (1.6d) - 268 KБ:

Домашняя страница: http://primates.ximian.com/~flucifredi/man/

Адрес для скачивания: http://primates.ximian.com/~flucifredi/man/man-1.6d.tar.gz

Контрольная сумма: 36d3f65bcc10f0754a3234e00d92ad6d

Man-pages (2.33) - 1,752 KБ:

Адрес для скачивания: http://www.kernel.org/pub/linux/docs/manpages/man-pages-2.33.tar.bz2

Контрольная сумма: e9f61ec73b5390c582530da173c12b10

Mktemp (1.5) - 69 KБ:

Домашняя страница: http://www.mktemp.org/

Адрес для скачивания: ftp://ftp.mktemp.org/pub/mktemp/mktemp-1.5.tar.gz

Контрольная сумма: 9a35c59502a228c6ce2be025fc6e3ff2

Module-Init-Tools (3.2.2) - 166 KБ:

Адрес для скачивания: http://www.kerneltools.org/pub/downloads/module-init-tools/module-init-tools-3.2.2.tar.bz2

Контрольная сумма: a1ad0a09d3231673f70d631f3f5040e9

Ncurses (5.5) - 2,260 KБ:

Домашняя страница: http://dickey.his.com/ncurses/

Адрес для скачивания: ftp://invisible-island.net/ncurses/ncurses-5.5.tar.gz

Контрольная сумма: e73c1ac10b4bfc46db43b2ddfd6244ef

Patch (2.5.9) - 198 KБ:

Домашняя страница: http://www.gnu.org/software/patch/

Адрес для скачивания: ftp://alpha.gnu.org/gnu/diffutils/patch-2.5.9.tar.gz

Контрольная сумма: dacfb618082f8d3a2194601193cf8716

Perl (5.8.8) - 9,887 KБ:

Домашняя страница: http://www.perl.com/

Адрес для скачивания: http://ftp.funet.fi/pub/CPAN/src/perl-5.8.8.tar.bz2

Контрольная сумма: a377c0c67ab43fd96eeec29ce19e8382

Procps (3.2.6) - 273 KБ:

Домашняя страница: http://procps.sourceforge.net/

Адрес для скачивания: http://procps.sourceforge.net/procps-3.2.6.tar.gz

Контрольная сумма: 7ce39ea27d7b3da0e8ad74dd41d06783

Psmisc (22.2) - 239 KБ:

Домашняя страница: http://psmisc.sourceforge.net/

Адрес для скачивания: http://prdownloads.sourceforge.net/psmisc/psmisc-22.2.tar.gz?download

Контрольная сумма: 77737c817a40ef2c160a7194b5b64337

Readline (5.1) - 1,983 KБ:

Домашняя страница: http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

Адрес для скачивания: http://ftp.gnu.org/gnu/readline/readline-5.1.tar.gz

Контрольная сумма: 7ee5a692db88b30ca48927a13fd60e46

Sed (4.1.5) - 781 KБ:

Домашняя страница: http://www.gnu.org/software/sed/

Адрес для скачивания: http://ftp.gnu.org/gnu/sed/sed-4.1.5.tar.gz

Контрольная сумма: 7a1cbbbb3341287308e140bd4834c3ba

Shadow (4.0.16) - 1,412 KБ:

Адрес для скачивания: ftp://ftp.pld.org.pl/software/shadow/shadow-4.0.16.tar.bz2

Контрольная сумма: 1d91f7479143d1d705b94180c0d4874b

Замечание

Пакет Shadow (4.0.16) может быть недоступен, когда Вы это читаете. На главных местах для скачивания удаляют старые версии пакетов. Альтернативные места для скачивания, которые могут иметь корректную версию, доступны на http://cross-lfs.org/files/packages/1.0.0/.

Sysklogd (1.4.1) - 80 KБ:

Домашняя страница: http://www.infodrom.org/projects/sysklogd/

Адрес для скачивания: http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.4.1.tar.gz

Контрольная сумма: d214aa40beabf7bdb0c9b3c64432c774

Sysvinit (2.86) - 97 KБ:

Адрес для скачивания: ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/sysvinit-2.86.tar.gz

Контрольная сумма: 7d5d61c026122ab791ac04c8a84db967

Tar (1.15.1) - 1,574 KБ:

Домашняя страница: http://www.gnu.org/software/tar/

Адрес для скачивания: http://ftp.gnu.org/gnu/tar/tar-1.15.1.tar.bz2

Контрольная сумма: 57da3c38f8e06589699548a34d5a5d07

Tcl (8.4.12) - 3,419 KБ:

Домашняя страница: http://tcl.sourceforge.net/

Адрес для скачивания: http://prdownloads.sourceforge.net/tcl/tcl8.4.12-src.tar.gz?download

Контрольная сумма: 7480432d8730263f267952788eb4839b

Texinfo (4.8) - 1,487 KБ:

Домашняя страница: http://www.gnu.org/software/texinfo/

Адрес для скачивания: http://ftp.gnu.org/gnu/texinfo/texinfo-4.8.tar.bz2

Контрольная сумма: 6ba369bbfe4afaa56122e65b3ee3a68c

Tree (1.5.0) - 26 KБ:

Адрес для скачивания: ftp://mama.indstate.edu/linux/tree/tree-1.5.0.tgz

Контрольная сумма: e0d090c564e7ea5afa16bac80620c7e0

Udev (096) - 192 KБ:

Домашняя страница: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html

Адрес для скачивания: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-096.tar.bz2

Контрольная сумма: f4effef7807ce1dc91ab581686ef197b

Udev Cross-LFS Rules (1.0-3) - 12 KБ:

Адрес для скачивания: http://cross-lfs.org/files/packages/1.0.0/udev-cross-lfs-1.0-3.tar.bz2

Контрольная сумма: 0c9b9e24a37b9501bcd4889da71cf313

Util-linux (2.12r) - 1,339 KБ:

Адрес для скачивания: http://www.kernel.org/pub/linux/utils/util-linux/util-linux-2.12r.tar.bz2

Контрольная сумма: af9d9e03038481fbf79ea3ac33f116f9

Vim (7.0) - 6,422 KБ:

Домашняя страница: http://www.vim.org

Адрес для скачивания: ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2

Контрольная сумма: 4ca69757678272f718b1041c810d82d8

Vim (7.0) language files (optional) - 1,153 KБ:

Адрес для скачивания: ftp://ftp.vim.org/pub/vim/extra/vim-7.0-lang.tar.gz

Контрольная сумма: 6d43efaff570b5c86e76b833ea0c6a04

Zlib (1.2.3) - 485 KБ:

Домашняя страница: http://www.zlib.net/

Адрес для скачивания: http://www.zlib.net/zlib-1.2.3.tar.gz

Контрольная сумма: debc62758716a169df9f62e6ab2bc634

Общий объём этих пакетов: около 180 МБ

3.3. Дополнительные пакеты для Alpha

Aboot (0.9b) - 112 KБ:

Домашняя страница: http://sourceforge.net/projects/aboot

Адрес для скачивания: http://prdownloads.sourceforge.net/aboot/aboot-0.9b.tar.bz2?download

Контрольная сумма: 5f16edbf4e9d52cd191adc4d4b6a5327

Общий объём этих пакетов: около 112 KБ

3.4. Необходимые патчи

Помимо всех пакетов Вам будут нужны некоторые патчи. Они корректируют некоторые ошибки в пакетах, которые были обнаружены, или улучшают функциональность. Патчи также делают небольшие модификации для обеспечения более лёгкой работы с пакетами. Следующие патчи будут нужны для сборки системы СLFS:

Bash Fixes Patch - 23 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/bash-3.1-fixes-8.patch

Контрольная сумма: bc337045fa4c5839babf0306cc9df6d0

Binutils Posix Patch - 4.9 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/binutils-2.17-posix-1.patch

Контрольная сумма: 7e42a8edc0c59246bbc58c428256113c

Bzip2 Documentation Patch - 1.7 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/bzip2-1.0.3-install_docs-1.patch

Контрольная сумма: 9e5dfbf4814b71ef986b872c9af84488

Bzip2 Bzdiff Remove Tempfile - 1.8 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/bzip2-1.0.3-remove_tempfile-1.patch

Контрольная сумма: bcadb0ce282c96af15a86a2ccdac0765

Bzip2 Bzgrep Security Fixes Patch - 1.3 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/bzip2-1.0.3-bzgrep_security-1.patch

Контрольная сумма: 4eae50e4fd690498f23d3057dfad7066

Coreutils Suppress Uptime, Kill, Su Patch - 13 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/coreutils-5.96-suppress_uptime_kill_su-1.patch

Контрольная сумма: 227d41a6d0f13c31375153eae91e913d

Expect Spawn Patch - 6.9 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/expect-5.43.0-spawn-2.patch

Контрольная сумма: 7706e1e8238c72eed8dc905d6f3b6aa9

Gawk Segfault Patch - 1.3 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gawk-3.1.5-segfault_fix-1.patch

Контрольная сумма: 7679530d88bf3eb56c42eb6aba342ddb

GCC Cross Search Paths Patch - 2 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gcc-4.1.1-cross_search_paths-1.patch

Контрольная сумма: 541fe39d228ddaa0d8396a35ec3a0ada

GCC PR20425 Patch - 36 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gcc-4.1.1-PR20425-1.patch

Контрольная сумма: 95535bda8e4d37d30251db0b121b5374

GCC Posix Patch - 9 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gcc-4.1.1-posix-1.patch

Контрольная сумма: 0d88068740a0e00780891f2cb905b808

Glibc iconv Fix - 4 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/glibc-2.4-iconv_fix-1.patch

Контрольная сумма: 9c8e681226ccf7a1f25c6467674f915e

Glibc Disable linking with libgcc_eh.a - 1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/glibc-2.4-libgcc_eh-1.patch

Контрольная сумма: e5122ea7b89a5f22615eaadf8e46b334

Glibc Localedef Segfault - 1.9 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/glibc-2.4-localedef_segfault-1.patch

Контрольная сумма: 42452abc6196789e0a83afa1ca7e6e4e

Gzip Security Fix Patch - 2 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gzip-1.3.5-security_fixes-1.patch

Контрольная сумма: f107844f01fc49446654ae4a8f8a0728

Inetutils inet_addr Patch - 4 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/inetutils-1.4.2-inet_addr_fix-1.patch

Контрольная сумма: a33267b7a4e0d303a6f8dfeafde7bd8e

Inetutils GCC 4.x Fixes Patch - 4.1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/inetutils-1.4.2-gcc4_fixes-3.patch

Контрольная сумма: 5204fbc503c9fb6a8e353583818db6b9

Inetutils No-Server-Man-Pages Patch - 1.3 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/inetutils-1.4.2-no_server_man_pages-1.patch

Контрольная сумма: eb477f532bc6d26e7025fcfc4452511d

KBD GCC 4.x Fixes Patch - 1.5 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/kbd-1.12-gcc4_fixes-1.patch

Контрольная сумма: 615bc1e381ab646f04d8045751ed1f69

Linux Tulip Update Patch - 8 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/linux-2.6.17.13-tulip-1.patch

Контрольная сумма: 0dd7027a8cb8e59c74c24ff0a8f45f3b

Mktemp Tempfile Patch - 3.6 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/mktemp-1.5-add_tempfile-3.patch

Контрольная сумма: 65d73faabe3f637ad79853b460d30a19

Perl Libc Patch - 4 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/perl-5.8.8-libc-2.patch

Контрольная сумма: 3bf8aef1fb6eb6110405e699e4141f99

Readline Fixes Patch - 2.1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/readline-5.1-fixes-3.patch

Контрольная сумма: e30963cd5c6f6a11a23344af36cfa38c

Sysklogd Fixes Patch - 28 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/sysklogd-1.4.1-fixes-1.patch

Контрольная сумма: 508104f058d1aef26b3bc8059821935f

Tar GCC-4.x Fix Patch - 1.2 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/tar-1.15.1-gcc4_fix_tests-1.patch

Контрольная сумма: 8e286a1394e6bcf2907f13801770a72a

Tar Security Fix Patch - 3.9 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/tar-1.15.1-security_fixes-1.patch

Контрольная сумма: 19876e726d9cec9ce1508e3af74dc22e

Tar Sparse Fix Patch - 1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/tar-1.15.1-sparse_fix-1.patch

Контрольная сумма: 9e3623f7c88d8766878ecb27c980d86a

Texinfo Tempfile Fix Patch - 2.2 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/texinfo-4.8-tempfile_fix-2.patch

Контрольная сумма: 559bda136a2ac7777ecb67511227af85

Util-linux Cramfs Patch - 2.8 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/util-linux-2.12r-cramfs-1.patch

Контрольная сумма: 1c3f40b30e12738eb7b66a35b7374572

Util-linux GCC 4.x Patch - 1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/util-linux-2.12r-gcc4_fixes-1.patch

Контрольная сумма: 6c030921dc9b92daf688f12a4ee6f6e0

Util-linux Missing Header Patch - 1 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/util-linux-2.12r-missing_header-1.patch

Контрольная сумма: 33ccc15d2e92caa6189b044f573fdcda

Vim Fixes Patch - 32 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/vim-7.0-fixes-5.patch

Контрольная сумма: 6e179cfe811d105de4fd9156a0ef6699

Zlib fPIC Patch - 3.2 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/zlib-1.2.3-fPIC-1.patch

Контрольная сумма: 545d60b20bfde6f53023de44438cef59

Общий объём этих патчей: около 214.7 KБ

В дополнение к вышеперечисленным необходимым патчам имеется некоторое количество опциональных патчей, созданных сообществом CLFS. Эти опциональные патчи решают меньшие проблемы или добавляют функциональность, которая отсутствует по умолчанию. Свободно пересматривайте базу данных патчей, размещённую на http://patches.cross-lfs.org/1.0.0/ и получайте другие дополнительные патчи, необходимые для системы.

3.5. Дополнительные патчи для Alpha

Aboot Patch - 100 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/aboot-0.9b-kernel26_gcc4_fixes-4.patch

Контрольная сумма: 2b83c5aa0c6edada9ab04cb6331b0806

GCC Specs Patch - 15 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/gcc-4.1.1-specs-1.patch

Контрольная сумма: a17be8ccfb978e73f382be5093dd8abd

Glibc ioperm Fix Patch - 4 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/glibc-2.4-alpha_ioperm_fix-1.patch

Контрольная сумма: 3a50c4055d2f72248eb656eb2d15edec

Linux IO Fix Patch - 4 KБ:

Адрес для скачивания: http://patches.cross-lfs.org/1.0.0/linux-2.6.17.13-alpha_io_fix-1.patch

Контрольная сумма: 67f66a5d252e5b82f4aeb3b06f4e5735

Общий объём этих патчей: около 123 KБ

Глава 4. Окончательные приготовления

4.1. О ${CLFS}

На протяжении этой книги переменная окружения CLFS будет использоваться несколько раз. Эта переменная всегда определена. Она должна указывать на директорию примонтированного раздела для будущей системы СLFS. Проверьте, что переменная CLFS установлена корректно командой:

echo ${CLFS}

Убедимся, что вывод, показывающий путь к точке монтирования СLFS раздела, соответствует /mnt/clfs, если следовать предложенному примеру. Если вывод некорректный, то переменная может быть установлена так:

export CLFS=/mnt/clfs

Наличие этой установленной переменной выгодно в таких командах, как install -dv ${CLFS}/tools. Оболочка будет автоматически заменять “${CLFS}” на “/mnt/clfs” (или на то, что описывает эта переменная) при обработке командной строки.

Если Вы ещё не создали директорию ${CLFS}, то сделайте это сейчас выполнением следующей команды:

install -dv ${CLFS}

Не забудьте проверить, что ${CLFS} установлена всякий раз, как Вы покидаете и перезаходите в текущее рабочее окружение (когда выполняете “su” для root или другого пользователя).

4.2. Создание директории ${CLFS}/tools

Все программы, компилируемые в главе Создание временной системы будут установлены в ${CLFS}/tools для содержания их отдельно от программ, устанавливаемых в главе Установка основных системных программ. Программы, компилируемые здесь, являются только временными инструментами и не будут частью финальной СLFS системы. Удерживая эти программы в отдельной директории, мы сможем легко их отбросить позднее после их использования. Это также предупреждает эти программы от установки в директории хоста (просто ошибившись в главе Создание временной системы).

Создадим требуемую директорию запуском следующей команды под пользователем root:

install -dv ${CLFS}/tools

Следующий шаг создаёт символическую ссылку /tools в хост системе. Она будет указывать на только что созданную директорию на СLFS разделе. Выполните следующую команду как пользователь root:

ln -sv ${CLFS}/tools /

Замечание

Предыдущая команда корректна. Команда ln имеет множество различных вариантов синтаксиса и Вы должны изучить man-страницу по ln прежде, чем сообщать о том, что Вы считаете, что обнаружили ошибку.

Созданная ссылка разрешает временным инструментам быть собранными так, что они всегда ссылаются на /tools, означая, что компилятор, ассемблер и компоновщик будут работать. Это предоставит общее место для нашей временной системы.

4.3. Создание директории ${CLFS}/cross-tools

Кросс-binutils и кросс-компилятор, собираемые в главе Создание инструментов кросс-компилирования, будут установлены в ${CLFS}/cross-tools для содержания их отдельно от хост программ. Программы, компилируемые здесь, являются кросс-инструментами и не будут частью финальной СLFS системы или временной системы. Удерживая эти программы в отдельной директории, мы сможем легко их отбросить позднее после их использования.

Создадим требуемую директорию запуском следующей команды под пользователем root:

install -dv ${CLFS}/cross-tools

Следующий шаг создаёт символическую ссылку /cross-tools в хост системе. Она будет указывать на только что созданную директорию на СLFS разделе. Выполните следующую команду как пользователь root:

ln -sv ${CLFS}/cross-tools /

Символическая ссылка не является технически необходимой (хотя инструкции книги подразумевают её наличие), но это главным образом для постоянства (так как /tools это также ссылка на ${CLFS}/tools) и более простой установки кросс-инструментов.

4.4. Добавление пользователя CLFS

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

groupadd clfs
useradd -s /bin/bash -g clfs -m -k /dev/null clfs

Описание параметров командной строки:

-s /bin/bash

Эта опция делает bash оболчкой по умолчанию для пользователя clfs.

-g clfs

Эта опция добавляет пользователя clfs в группу clfs.

-m

Эта опция создаёт домашнюю директорию для пользователя clfs.

-k /dev/null

Этот параметр предупреждает возможное копирование файлов из скелетной директории (по умолчанию /etc/skel) изменением входящего расположения на специальное нуль-устройство.

clfs

Это актуальное имя для созданных группы и пользователя.

Для регистрации как clfs (в противоположность переключению на пользователя clfs после регистрации как root, которая не требует у пользователя clfs наличия пароля), дадим пользователю clfs пароль:

passwd clfs

Дадим clfs полный доступ в ${CLFS}/cross-tools и ${CLFS}/tools, сделав clfs владельцем этих директорий:

chown -v clfs ${CLFS}/tools
chown -v clfs ${CLFS}/cross-tools

Если Вы создали отдельную директорию для работы, то смените также и её владельца на clfs.

chown -v clfs ${CLFS}/sources

Теперь, войдём в систему как пользователь clfs. Это можно сделать через виртуальную консоль, через менеджер экрана или командой:

su - clfs

Инструкция “-” команды su запустит новую регистрированную оболочку в противоположность нерегистрированной оболочке. Отличия между двумя этими типами оболочек в деталях могут быть найдены в bash(1) и info bash.

4.5. Установка окружения

Установим хорошее окружение, создав два новых файла для оболочки bash. Когда Вы зарегистрируетесь под пользователем clfs, выполните следующую команду для создания нового файла .bash_profile:

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

Когда Вы регистрируетесь как пользователь clfs, то первоначальной оболочкой обычно является login, которая читает файл /etc/profile основной системы (возможно содержащий некоторые установки и переменные окружения) и затем .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку на новую с полностью очищенными переменными окружения, исключая переменные HOME, TERM и PS1. Это подтверждает, что нежелательные и потенциально опасные переменные окружения из основной системы не попадут в окружение сборки. Техника, применённая здесь, преследует цель подтверждения очистки переменных окружения.

Новый образец оболочки является нерегистрированной оболочкой, которая не читает файлы /etc/profile или .bash_profile, но вместо этого читает файл .bashrc. Создадим файл .bashrc:

cat > ~/.bashrc << "EOF"
set +h
umask 022
CLFS=/mnt/clfs
LC_ALL=POSIX
PATH=/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
EOF

Команда set +h отключает функцию запоминания bash. Запоминание обычно является полезным расширением. Bash использует hash-таблицу для запоминания полного пути к исполняемым файлам для сокращения времени поиска и отсутствия необходимости запоминания путей этих файлов. Хотя новые инструменты должны быть использованы так скоро, как только они будут установлены. Отключив функцию запоминания, оболочка после её запуска всегда будет искать программу по пути PATH. Таким образом, оболочка будет находить новые установленные инструменты в /cross-tools, как только они станут доступны без запоминания предыдущей версии этих программ из другого места.

Установка маски для создания файлов пользователем (umask) в 022 позволит убедиться, что вновь созданные файлы и директории будут доступны для записи только владельцу, а для чтения и выполнения любому (по умолчанию, используя системный вызов open(2), новые файлы будут создаваться с правами доступа 644 и директории с правами доступа 755).

Переменная CLFS указывает на точку монтирования, которую Вы выбрали для раздела CLFS.

Переменная LC_ALL контролирует локализацию некоторых программ, делает вывод их сообщений зависимым от страны. Если Ваша система основана на Glibc старее версии 2.2.4, установка LC_ALL в что-то отличное от “POSIX” или “С” (на протяжении этой главы) может создать проблемы при выходе-входе из/в chroot окружения. Установив LC_ALL в “POSIX” или “С” (что аналогично) мы страхуемся от ошибок при использовании chroot.

Поместив /cross-tools/bin в начале переменной PATH, кросс-компилятор, собираемый в главе Создание инструментов кросс-компилирования, будет собран процессом сборки для пакетов временной системы перед чем-либо, что может быть установлено в хост. Это, в комбинации с выключением хеширования, помогает убедиться, что Вы будете использовать инструменты кросс-сборки для сборки временной системы в /tools.

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

source ~/.bash_profile

4.6. О тестах

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

Невозможно запустить тесты во время кросс-компилирования, поэтому инструкции по установке пакетов не объясняют, как запустить тесты на протяжении главы Установка основных системных программ.

Часть III. Получение инструментов кросс-компилирования

Глава 5. Создание инструментов кросс-компилирования

5.1. Вступление

Эта глава показывает Вам как создать кросс-платформенные инструменты.

Если Вам понадобится остановиться и вернуться к процессу позже, то выполните команду su - clfs, которая установит окружение сборки, которое Вы покинули.

5.1.1. Общие замечания

Важно

Перед выполнением инструкций по сборке пакета этот пакет должен быть распакован пользователем clfs и необходимо перейти в созданную директорию при помощи команды cd. Инструкции по сборке подразумевают, что Вы используете интерпретатор командной строки bash.

Некоторые пакеты перед компилированием необходимо пропатчить, но только когда это необходимо для решения тех или иных проблем. Часто патчи нужно применять в обеих главах (этой и следующей), но некоторые необходимы только в одной из глав. Поэтому не беспокойтесь, если не найдёте инструкций по наложению некоторых скачанных патчей в этой главе. При накладывании патчей могут появляться сообщения с предупреждением offset или fuzz. Это нормально и Вы можете не обращать на них внимания.

Во время сборки многих пакетов будут появляться некоторые предупреждения. Можете их игнорировать. Всё, что они говорят — внимание, есть неточность, но не ошибка в коде C или C++. Это из-за того, что меняются стандарты на язык C, а некоторые пакеты написаны в соответствии со старыми стандартами, но это не представляет проблемы для компилятора.

Важно

После установки каждого пакета в этой и следующей главах удаляйте их исходники и директории сборки если нет особых инструкций на этот счёт. Удаление исходников предотвращает неправильную конфигурацию во время переустановки того самого пакета позднее.

5.2. Флаги сборки CFLAGS

CFLAGS и CXXFLAGS не должны быть установлены во время сборки кросс-инструментов.

Для сброса CFLAGS и CXXFLAGS используются следующие команды:

unset CFLAGS
unset CXXFLAGS

Добавим это в ~/.bashrc для избежания проблем если мы остановимся и продолжим сборку позже:

echo unset CFLAGS >> ~/.bashrc
echo unset CXXFLAGS >> ~/.bashrc

5.3. Переменные сборки

Установка хоста и целевой системы

На протяжении сборки инструментов кросс-компилирования Вам понадобится установить некоторые переменные, которые будут подчинены Вашим особым потребностям. Первая переменная будет "близнецом" HOST машины. Вам понадобится установить CHOST для соответствия Вашим особым потребностям. Для установки этой информации Вы можете выполнить следующую команду:

export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"

Теперь мы установим нашего "близнеца" для целевой архитектуры:

export CLFS_TARGET="alpha-unknown-linux-gnu"

Добавим это в ~/.bashrc для избежания проблем если мы остановимся и продолжим сборку позже:

echo export CLFS_HOST=\""${CLFS_HOST}\"" >> ~/.bashrc
echo export CLFS_TARGET=\""${CLFS_TARGET}\"" >> ~/.bashrc

5.4. Linux-Headers-2.6.17.13-09092006

Пакет Linux Headers содержит “осмысленные” заголовки ядра.

5.4.1. Установка заголовков Linux

Установим заголовочные файлы, которые нужны для основы сборки:

install -dv /tools/include
cp -av include/asm-alpha /tools/include/asm
cp -av include/{asm-generic,linux} /tools/include/

Детальная информация о пакете находится в Разделе 10.6.2, “Описание Linux-Headers.”

5.5. Кросс Binutils-2.17

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

5.5.1. Установка Cross Binutils

Важно чтобы Binutils был первым из пакетов, которые мы установим, потому что Glibc и GCC проводят некоторые тесты на доступные компоновщик и ассемблер для определения доступных опций.

Чтобы убедиться, что для некоторых инструментов используется правильный синтаксис, применим следующий патч:

patch -Np1 -i ../binutils-2.17-posix-1.patch

В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../binutils-build
cd ../binutils-build

Подготавливаем Binutils к компиляции:

../binutils-2.17/configure --prefix=/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-lib-path=/tools/lib \
    --disable-nls --enable-shared --disable-multilib

Описание параметров команды configure:

--prefix=/cross-tools

Это скажет скрипту конфигурации, что программы Binutils следует устанавливать в директорию /cross-tools.

--host=${CLFS_HOST}

При использовании совместно с --target создаётся кросс-архитектурный файл для ${LFS_TARGET} но исполняемый на ${LFS_HOST}.

--target=${CLFS_TARGET}

При использовании совместно с --host создаётся кросс-архитектурный файл для ${LFS_TARGET} но исполняемый на ${LFS_HOST}.

--with-lib-path=/tools/lib

Указывает скрипту configure установить путь поиска библиотек во время сборки Binutils, в результате директория /tools/lib будет помещена в компоновщик. Это запретит компоновщику поиск в директориях библиотек хоста.

--disable-nls

Это отключит интернационализацию (сокращенно - i18n) так как это не надо для инструментов кросс-сборки.

--enable-shared

Разрешает создание разделяемых библиотек.

--disable-multilib

Эта опция отключит сборку мультибиблиотечных возможностей binutils.

Компилируем пакет:

make configure-host
make

Описание параметров команды make:

configure-host

Проверяет окружение хоста и наличие всех необходимых инструментов для сборки Binutils.

Устанавливаем пакет:

make install

Скопируем файл libiberty.h в директорию /tools/include:

cp -v ../binutils-2.17/include/libiberty.h /tools/include

Детальная информация о пакете находится в Разделе 10.9.2, “Описание Binutils.”

5.6. Заголовки Glibc-2.4

Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т.д. Библиотека C используется для всех динамически скомпонованых программ.

5.6.1. Установка заголовков Glibc

Следующая команда sed удаляет зависимость gcc 3.4.x от glibc, которую мы используем в cross-lfs. Смысл в том, что устанавливаются только заголовки и процесс компилирования отсутствует. При следующей установке Glibc мы используем GCC, который после этого раздела собран правильно:

cp -v configure{,.orig}
sed -e 's/3.4/3.[0-9]/g' configure.orig > configure

Документация по Glibc рекомендует собирать Glibc вне директории с исходниками, в отдельной директории для сборки:

mkdir -v ../glibc-build
cd ../glibc-build

Следующие строки необходимо добавить в файл config.cache для поддержки NPTL в Glibc:

echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_mlong_double_128=yes" >> config.cache
echo "libc_cv_alpha_tls=yes" >> config.cache

Подготавливаем Glibc к компиляции:

CC=gcc ../glibc-2.4/configure --prefix=/tools \
   --host=${CLFS_TARGET} --build=${CLFS_HOST} \
   --disable-sanity-checks --enable-kernel=2.6.0 \
   --with-headers=/tools/include --cache-file=config.cache \
   --with-binutils=/cross-tools/${CLFS_TARGET}/bin

Замечание

Любые сообщения об ошибках, касающиеся nptl, на этом этапе могут быть безопасно проигнорированы.

Описание параметров команды configure:

CC=gcc

Говорит Glibc использовать GCC компилятор хоста.

--prefix=/tools

Это говорит скрипту configure подготовить установку пакета в директорию /tools.

--build=${CLFS_HOST}

При использовании с --host это создаёт кросс-архитектурные файлы, которые созданы для ${CLFS_TARGET}, но запускаются на ${CLFS_HOST}.

--host=${CLFS_TARGET}

При использовании с --build это создаёт кросс-архитектурные файлы, которые созданы для ${CLFS_TARGET}, но запускаются на ${CLFS_HOST}.

--disable-sanity-checks

Этот ключ отключает любые проверки на этом этапе.

--enable-kernel=2.6.0

Это говорит Glibc компилировать библиотеку с поддержкой ядер Linux 2.6.x.

--with-headers=/tools/include

Это говорит Glibc компилироваться с заголовками, установленными в директории /tools, поэтому glibc точно знает, какие возможности имеет ядро и может оптимизировать себя соответствующим образом.

--with-binutils=/cross-tools/${CLFS_TARGET}/bin

Это говорит Glibc использовать binutils из целевой архитектуры.

Теперь установим заголовки:

make install-headers

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

Сначала мы скопируем общие файлы в /tools/include:

install -dv /tools/include/bits
cp -v bits/stdio_lim.h /tools/include/bits

Теперь мы создадим пустой файл-заглушку:

touch /tools/include/gnu/stubs.h

Другой заголовок нужен для NPTL:

cp -v ../glibc-2.4/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h /tools/include/bits/

Детальная информация о пакете находится в Разделе 10.7.5, “Описание Glibc.”

5.7. Кросс GCC-4.1.1 - статически

Пакет GCC содержит коллекцию компилятора GNU, включая компиляторы C и C++.

5.7.1. Установка кросс-компилятора GCC со статической libgcc и без нитей

Сделаем пару подходящих установок в файле specs, чтобы GCC использовал наше окружение сборки:

patch -Np1 -i ../gcc-4.1.1-specs-1.patch

Чтобы убедиться, что некоторые инструменты используют правильный синтаксис, применим следующий патч:

patch -Np1 -i ../gcc-4.1.1-posix-1.patch

Следующий патч подтвердит, что gcc не ищет libgcc_s.so в директории /usr во время кросс-компилирования:

patch -Np1 -i ../gcc-4.1.1-cross_search_paths-1.patch

Изменим StartFile Spec, указав правильное расположение библиотеки:

echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/alpha/linux.h

Теперь изменим путь поиска заголовков по умолчанию предпроцессора gcc на использование только директории /tools:

cp -v gcc/Makefile.in{,.orig}
sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
    gcc/Makefile.in.orig > gcc/Makefile.in

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../gcc-build
cd ../gcc-build

Подготавливаем GCC к компиляции:

../gcc-4.1.1/configure --prefix=/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} \
    --with-local-prefix=/tools --disable-nls --disable-shared \
    --disable-threads --enable-languages=c

Описание параметров команды configure:

--with-local-prefix=/tools

Этот ключ удаляет /usr/local/include из пути поиска заголовков для gcc. Это не абсолютно необходимо, хотя помагает минимизировать влияние хост системы.

--disable-shared

Выключает сборку разделяемых библиотек.

--disable-threads

Это предотвратит поиск GCC для мульти-нитевых файлов заголовков, так как пока они не были созданы для этой архитектуры. GCC сможет найти мульти-нитевую информацию после создания заголовков Glibc.

--enable-languages=c

Эта опция позволяет быть увереным, что будет собран только компилятор C.

Компилируем пакет:

make all-gcc

Устанавливаем пакет:

make install-gcc

Детальная информация о пакете находится в Разделе 10.10.2, “Описание GCC.”

5.8. Glibc-2.4

Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т.д. Библиотека C используется для всех динамически скомпонованых программ.

5.8.1. Установка Glibc

Необходимо заметить, что сборка Glibc другим способом, не тем, что описан в этой книге, может привести к рискам нестабильности системы.

Следующий патч исправляет некоторое ассемблирование в glibc:

patch -Np1 -i ../glibc-2.4-alpha_ioperm_fix-1.patch

Отключим компоновку с libgcc_eh:

patch -Np1 -i ../glibc-2.4-libgcc_eh-1.patch

Следующий патч исправит проблему, приводящую к падению localdef:

patch -Np1 -i ../glibc-2.4-localedef_segfault-1.patch

Следующая команда sed устраняет проблему сборки Glibc. Она предостережёт nscd от попытки компоновки с отсутствующими библиотеками:

cp -v nscd/Makefile{,.orig}
sed -e "/nscd_stat.o: sysincludes = # nothing/d" nscd/Makefile.orig > \
    nscd/Makefile

Документация по Glibc рекомендует собирать Glibc вне директории с исходниками, в отдельной директории для сборки:

mkdir -v ../glibc-build
cd ../glibc-build

Следующие строки необходимо добавить в файл config.cache для поддержки NPTL в Glibc:

echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache

Подготавливаем Glibc к компиляции:

BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" \
    AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
    ../glibc-2.4/configure --prefix=/tools \
    --host=${CLFS_TARGET} --build=${CLFS_HOST} \
    --disable-profile --enable-add-ons \
    --with-tls --enable-kernel=2.6.0 --with-__thread \
    --with-binutils=/cross-tools/bin --with-headers=/tools/include \
    --cache-file=config.cache

Описание новых параметров команды configure:

BUILD_CC="gcc"

Предписывает Glibc использовать текущий компилятор Вашей системы. Это используется для создания инструментов Glibc, используемых во время собственной сборки.

CC="${CLFS_TARGET}-gcc"

Предписывает Glibc использовать компилятор, созданный для целевой архитектуры.

AR="${CLFS_TARGET}-ar"

Предписывает Glibc использовать утилиту ar, созданную для целевой архитектуры.

RANLIB="${CLFS_TARGET}-ranlib"

Предписывает Glibc использовать утилиту ranlib, созданную для целевой архитектуры.

--disable-profile

Это собирает библиотеки без профильной информации. Пропустите эту опцию если профильная информация нужна во временной системе.

--enable-add-ons

Говорит Glibc использовать все доступные дополнения.

--with-tls

Говорит Glibc включить поддержку для Thread-Local Storage (TLS). Это необходимо для нормальной работы NPTL.

--with-__thread

Эта опция говорит Glibc использовать __thread для сборки libc и libpthread.

--with-binutils=/cross-tools/bin

Предписывает Glibc использовать утилиту Binutils, специфичную для целевой архитектуры.

--cache-file=config.cache

Предписывает Glibc использовать подготовленный кэш файл.

На этом шаге Вы можете увидеть следующее предупреждение:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Отсутствующая или несовместимая программа msgfmt безвредна. Эта программа msgfmt является частью пакета Gettext, который используется из дистрибутива основной системы.

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.7.5, “Описание Glibc.”

5.9. GCC-4.1.1 - окончательный кросс-компилятор

Пакет GCC содержит коллекцию компилятора GNU, включая компиляторы C и C++.

5.9.1. Установка кросс-компилятора GCC

Следующий патч исправляет поиск мультибиблиотечных директорий для файла specs. Патч стандартизирует путь драйверов функций итераци gcc, подтверждая, что мультибиблиотечные директории ищутся в корректном порядке. Это исправляет различные проблемы, большинство из которых отмечены с libtool на мультибиблиотечных системах:

patch -Np1 -i ../gcc-4.1.1-PR20425-1.patch

Сделаем пару подходящих установок в файле specs, чтобы GCC использовал наше окружение сборки:

patch -Np1 -i ../gcc-4.1.1-specs-1.patch

Чтобы убедиться, что некоторые инструменты используют правильный синтаксис, применим следующий патч:

patch -Np1 -i ../gcc-4.1.1-posix-1.patch

Следующий патч подтвердит, что gcc не ищет libgcc_s.so в директории /usr во время кросс-компилирования:

patch -Np1 -i ../gcc-4.1.1-cross_search_paths-1.patch

Изменим StartFile Spec, указав правильное расположение библиотеки:

echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/alpha/linux.h

Теперь изменим путь поиска заголовков по умолчанию предпроцессора gcc на использование только директории /tools:

cp -v gcc/Makefile.in{,.orig}
sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
    gcc/Makefile.in.orig > gcc/Makefile.in

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../gcc-build
cd ../gcc-build

Подготавливаем GCC к компиляции:

../gcc-4.1.1/configure --prefix=/cross-tools \
    --target=${CLFS_TARGET} --host=${CLFS_HOST} --disable-multilib \
    --with-local-prefix=/tools --disable-nls --enable-shared \
    --enable-languages=c,c++ --enable-__cxa_atexit \
    --enable-c99 --enable-long-long --enable-threads=posix

Описание новых параметров команды configure:

--enable-languages=c,c++

Эта опция позволяет убедиться, что будут собраны только компиляторы C и C++.

--enable-__cxa_atexit

Эта опция разрешит использование __cxa_atexit, которое предпочтительнее использования atexit, для регистрации деструкторов C++ для локальных и глобальных объектов для обеспечения полного соответствия стандартам ссылок на деструкторы. Он также повлияет на C++ ABI и некоторые другие результаты в библиотеках C++ и программах C++, которые взаимодействуют с другими дистрибутивами Linux.

--enable-c99

Разрешает поддержку C99 для программ C.

--enable-long-long

Разрешает поддержку long long в компиляторе.

--enable-threads=posix

Подключит расширение C++ для мульти-нитевого кода.

Компилируем пакет:

make AS_FOR_TARGET="${CLFS_TARGET}-as" \
    LD_FOR_TARGET="${CLFS_TARGET}-ld"

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.10.2, “Описание GCC.”

Часть IV. Сборка основных инструментов

Глава 6. Создание временной системы

6.1. Вступление

Эта глава показывает, как собрать и установить минимальную Linux систему. Эта система будет содержать только достаточные инструменты для начала конструирования финальной CLFS системы в главе Установка основных системных программ и даст рабочее окружение с бОльшим удобством для пользователя, которое будет минимальным окружением.

Инструменты в этой главе являются кросс-компилированными при помощи инструментов из /cross-tools и будут установлены в директорию ${CLFS}/tools для содержания их отдельно от файлов, устанавливаемых в главе Установка основных системных программ и файлов хоста. Так как пакеты, собираемые здесь, временные, то мы не хотим загрязнять ими будущую CLFS систему.

Последний раз проверяем правильность установки переменной окружения CLFS:

echo ${CLFS}

Вывод должен указывать на точку монтирования раздела СLFS. Мы используем /mnt/clfs в качестве примера.

Во время сборки этой части Вы можете увидеть некоторые ПРЕДУПРЕЖДАЮЩИЕ сообщения, похожие на приведённое ниже. Такие сообщения можно безопасно игнорировать.

configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.

6.2. Переменные сборки

Установим переменные окружения для компилятора и компоновщика:

export CC="${CLFS_TARGET}-gcc"
export CXX="${CLFS_TARGET}-g++"
export AR="${CLFS_TARGET}-ar"
export AS="${CLFS_TARGET}-as"
export RANLIB="${CLFS_TARGET}-ranlib"
export LD="${CLFS_TARGET}-ld"
export STRIP="${CLFS_TARGET}-strip"

Затем добавим эти переменные в ~/.bashrc для предотвращения проблем если Вы остановитесь и продолжите позже:

echo export CC=\""${CC}\"" >> ~/.bashrc
echo export CXX=\""${CXX}\"" >> ~/.bashrc
echo export AR=\""${AR}\"" >> ~/.bashrc
echo export AS=\""${AS}\"" >> ~/.bashrc
echo export RANLIB=\""${RANLIB}\"" >> ~/.bashrc
echo export LD=\""${LD}\"" >> ~/.bashrc
echo export STRIP=\""${STRIP}\"" >> ~/.bashrc

6.3. Binutils-2.17

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

6.3.1. Установка Binutils

Чтобы убедиться, что для некоторых инструментов используется правильный синтаксис, применим следующий патч:

patch -Np1 -i ../binutils-2.17-posix-1.patch

В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../binutils-build
cd ../binutils-build

Подготавливаем Binutils к компиляции:

../binutils-2.17/configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET} --target=${CLFS_TARGET} \
    --disable-nls --enable-shared --disable-multilib

Компилируем пакет:

make configure-host
make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.9.2, “Описание Binutils.”

6.4. GCC-4.1.1

Пакет GCC содержит коллекцию компилятора GNU, включая компиляторы C и C++.

6.4.1. Установка GCC

Следующий патч исправляет поиск мультибиблиотечных директорий для файла specs. Патч стандартизирует путь драйверов функций итераци gcc, подтверждая, что мультибиблиотечные директории ищутся в корректном порядке. Это исправляет различные проблемы, большинство из которых отмечены с libtool на мультибиблиотечных системах:

patch -Np1 -i ../gcc-4.1.1-PR20425-1.patch

Сделаем пару подходящих установок в файле specs, чтобы GCC использовал наше окружение сборки:

patch -Np1 -i ../gcc-4.1.1-specs-1.patch

Чтобы убедиться, что некоторые инструменты используют правильный синтаксис, применим следующий патч:

patch -Np1 -i ../gcc-4.1.1-posix-1.patch

Следующий патч подтвердит, что gcc не ищет libgcc_s.so в директории /usr во время кросс-компилирования:

patch -Np1 -i ../gcc-4.1.1-cross_search_paths-1.patch

Теперь мы изменим путь поиска cpp чтобы он не искал в /usr/include:

cp -v gcc/cppdefault.c{,.orig}
sed -e '/#define STANDARD_INCLUDE_DIR/s@"/usr/include"@0@g' \
    gcc/cppdefault.c.orig > gcc/cppdefault.c

Также нам необходимо установить директорию, которая ищется процессами fixincludes для поиска системных заголовков, поэтому она не должна указывать на директорию заголовков хост системы:

cp -v gcc/Makefile.in{,.orig}
sed -e 's@\(^NATIVE_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g' \
    gcc/Makefile.in.orig > gcc/Makefile.in

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../gcc-build
cd ../gcc-build

Перед началом сборки GCC не забудьте сбросить любые переменные окружения, которые изменяют флаги оптимизации по умолчанию.

Подготавливаем GCC к компиляции:

../gcc-4.1.1/configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET} --target=${CLFS_TARGET} \
    --with-local-prefix=/tools --enable-long-long --enable-c99 \
    --enable-shared --enable-threads=posix --enable-__cxa_atexit \
    --disable-nls --enable-languages=c,c++ --disable-libstdcxx-pch

Описание новых параметров команды configure:

--disable-libstdcxx-pch

Не собирать предкомпилированные заголовки (PCH) для libstdc++. Это сохранит некоторое место и мы их не используем.

Компилируем пакет:

make AS_FOR_TARGET="${AS}" \
    LD_FOR_TARGET="${LD}"

Устанавливаем пакет:

make install

Многие пакеты используют имя cc для вызова компилятора С. Для поддержки таких пакетов создадим ссылку:

ln -sv gcc /tools/bin/cc

Детальная информация о пакете находится в Разделе 10.10.2, “Описание GCC.”

6.5. Ncurses-5.5

Пакет Ncurses содержит библиотеки для расширения возможностей текстового интерфейса.

6.5.1. Установка Ncurses

Подготавливаем Ncurses к компиляции:

./configure --prefix=/tools --with-shared \
    --build=${CLFS_HOST} --host=${CLFS_TARGET} \
    --without-debug --without-ada \
    --enable-overwrite --with-build-cc=gcc

Описание параметров команды configure:

--with-shared

Говорит Ncurses создавать разделяемые библиотеки.

--without-debug

Говорит Ncurses собирать без отладочной информации.

--without-ada

Это заставит Ncurses собираться без использованиея Ada, если он установлен в основной системе, так как он не будет доступен во время сборки финальной системы.

--enable-overwrite

Это скажет Ncurses устанавливать свои заголовки в /tools/include вместо /tools/include/ncurses, нам надо убедиться, что другие пакеты смогут эти заголовки найти.

--with-build-cc=gcc

Это называет Ncurses используемый тип компилятора.

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.15.2, “Описание Ncurses.”

6.6. Bash-3.1

Bash - это Bourne-Again SHell.

6.6.1. Установка Bash

Удалим тест, который приводит к выпадению сборки:

echo "ac_cv_func_setvbuf_reversed=no" >> config.cache

Когда bash является кросс-компилированным, то он не может протестировать наличие именованных каналов. Мы использовали su чтобы стать непривилегированным пользователем, эта комбинация приведёт к сборке без замены процессов, которая прервёт скрипт тестирования c++ в glibc. Предупредим это установкой следующего определения:

echo "bash_cv_sys_named_pipes=yes" >> config.cache

Подготавливаем Bash к компиляции:

./configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET} \
    --without-bash-malloc --cache-file=config.cache

Описание параметра команды configure:

--without-bash-malloc

Эта опция выключает использование функции Bash-а "memory allocation" (malloc), которая известна своей нестабильной работой. После выключения этой опции Bash будет использовать функцию malloc из Glibc, которая более стабильна.

Компилируем пакет:

make

Устанавливаем пакет:

make install

Создадим ссылку для программ, которые используют в качестве оболочки sh:

ln -sv bash /tools/bin/sh

Детальная информация о пакете находится в Разделе 10.26.2, “Описание Bash.”

6.7. Bzip2-1.0.3

Bzip2 является блочным файловым архиватором, который, как правило, сжимает лучше традиционного gzip.

6.7.1. Установка Bzip2

Файл Makefile по умолчанию автоматически запускает тесты. Выключим их, так как они не работают на мультиархитектурной сборке:

cp -v Makefile{,.orig}
sed -e 's@^\(all:.*\) test@\1@g' Makefile.orig > Makefile

Пакет Bzip2 не содержит скрипта configure. Компилируем его при помощи команды:

make CC="${CC}" AR="${AR}" RANLIB="${RANLIB}"

Устанавливаем пакет:

make PREFIX=/tools install

Детальная информация о пакете находится в Разделе 10.27.2, “Описание Bzip2.”

6.8. Coreutils-5.96

Пакет Coreutils содержит некоторые системные утилиты для показа и установки базовых системных характеристик.

6.8.1. Установка Coreutils

Пакет Coreutils имеет проблемы при кросс-компилировании. Поэтому мы опишем необходимые для кросс-компилирования пункты:

echo "ac_cv_sys_restartable_syscalls=yes" > config.cache
echo "ac_cv_func_setvbuf_reversed=yes" >> config.cache
echo "utils_cv_sys_open_max=1024" >> config.cache

Подготавливаем Coreutils к компиляции:

./configure --prefix=/tools --cache-file=config.cache \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.11.2, “Описание Coreutils.”

6.9. Diffutils-2.8.7

Программы из этого пакета показывают различия между двумя файлами или директориями.

6.9.1. Установка Diffutils

Подготавливаем Diffutils к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.28.2, “Описание Diffutils.”

6.10. Findutils-4.2.27

Пакет Findutils содержит программы для поиска файлов, в том числе "на лету" (путём рекурсивного поиска от директории и показывая только файлы, удовлетворяющие параметрам поиска) или поиск через бызу данных.

6.10.1. Установка Findutils

Findutils имеет проблему при кросс-компилировании, когда не находит getline. Исправим это:

echo "am_cv_func_working_getline=yes" >> config.cache

Подготавливаем Findutils к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET} \
     --cache-file=config.cache

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.31.2, “Описание Findutils.”

6.11. Gawk-3.1.5

Gawk является вариантом awk, который используется для манипуляций с текстовыми файлами.

6.11.1. Установка Gawk

Подготавливаем Gawk к компиляции:

./configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.32.2, “Описание Gawk.”

6.12. Gettext-0.14.5

Пакет Gettext используется для интернационализации и локализации. Программы могут быть скомпилированы с Поддержкой Родного Языка (Native Language Support - NLS) для получения возможности вывода сообщений на языке пользователя.

6.12.1. Установка Gettext

Gettext имеет проблемы при кросс-компилировании, когда не находит getline. Исправим это:

cd gettext-tools
echo "am_cv_func_working_getline=yes" >> config.cache

Подготавливаем Gettext к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET} \
     --disable-shared --cache-file=config.cache

Описание параметров команды configure:

--disable-shared

Не собирать разделяемые библиотеки.

Только одна программа из пакета Gettext нужна для сборки:

make -C lib
make -C src msgfmt

Установим бинарник msgfmt:

cp -v src/msgfmt /tools/bin

Детальная информация о пакете находится в Разделе 10.33.2, “Описание Gettext.”

6.13. Grep-2.5.1a

Grep является программой для поиска в содержимом файлов.

6.13.1. Установка Grep

Подготавливаем Grep к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET} \
     --disable-perl-regexp

Описание параметров команды configure:

--disable-perl-regexp

Подтверждает, что программа grep не скомпонована с библиотекой Perl Compatible Regular Expression (PCRE), которая может быть на хост машине, но не будет доступна во время сборки финальной системы.

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.34.2, “Описание Grep.”

6.14. Gzip-1.3.5

Пакет Gzip содержит программы для сжатия и распаковки файлов.

6.14.1. Установка Gzip

Настроим скрипт configure так, чтобы он мог использовать кросс-компилированные инструменты:

cp -v configure{,.orig}
sed -e "s@nm conftest@${CLFS_TARGET}-&@" configure.orig > configure

Подготавливаем Gzip к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.36.2, “Описание Gzip.”

6.15. Make-3.81

Пакет Make содержит программу для компиляции приложений.

6.15.1. Установка Make

Подготавливаем Make к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.40.2, “Описание Make.”

6.16. Patch-2.5.9

Пакет Patch содержит программу для модификации или создания файлов применением “patch-файла”, обычно созданного программой diff.

6.16.1. Установка Patch

Подготавливаем Patch к компиляции:

./configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.44.2, “Описание Patch.”

6.17. Sed-4.1.5

Sed является потоковым редактором.

6.17.1. Установка Sed

Подготавливаем Sed к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.17.2, “Описание Sed.”

6.18. Tar-1.15.1

Tar является программой архивирования.

6.18.1. Установка Tar

Tar имеет проблему при кросс-компилировании, когда не находит getline. Исправим это:

echo "am_cv_func_working_getline=yes" >> config.cache

Подготавливаем Tar к компиляции:

./configure --prefix=/tools \
     --build=${CLFS_HOST} --host=${CLFS_TARGET} \
     --cache-file=config.cache

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.49.2, “Описание Tar.”

6.19. Texinfo-4.8

Пакет Texinfo содержит программы, используемые для чтения, записи и конвертирования документов Info, которые содержат системную документацию.

6.19.1. Установка Texinfo

Подготавливаем Texinfo к компиляции:

./configure --prefix=/tools \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.50.2, “Описание Texinfo.”

6.20. Загружаться или Chroot?

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

Метод загрузки необходим, когда Вы собираете на другой архитектуре. Например, если Вы собираете систему PowerPC на какой-нибудь x86, то Вы не можете войти в chroot. Метод chroot используется, когда Вы собираете на той же архитектуре. Если Вы собираете на и для системы х86, то Вы можете просто войти в chroot. Главным правилом здесь является то, что если архитектуры соответствуют и Вы загружаете ядро одной серии, то Вы можете войти в chroot. Если у Вас ядра разных серий или хотите запустить другой ABI, то Вам понадобиться использовать метод загрузки.

Если Вы сомневаетесь, то можете попробовать следующую команду для проверки возможности входа в chroot:

/tools/lib/libc.so.6
/tools/bin/gcc -v

Если одна из этих команд выпадет, то Вы должны использовать метод загрузки.

Для chroot Вам также понадобится Linux Kernel-2.6.x (скомпилированный с GCC-3.0 или больше). Смысл в требовании к версии ядра в том, что без этого поддержка thread-local storage в Binutils не будет собрана и тесты Native POSIX Threading Library (NPTL) приведут к ошибке сегментации.

Для проверки версии Вашего ядра запустите cat /proc/version - если это не скажет, что Вы запустили 2.6.2 или следующее ядро Linux, скомпилированное с GCC 3.0 или позднее, то Вы не можете использовать chroot.

Для метода загрузки следуйте в главу Если Вы решили загружаться.

Для метода chroot следуйте в главу Если Вы решили использовать Chroot.

Глава 7. Если Вы решили загружаться

7.1. Вступление

Эта глава показывает, как полностью собрать временные инструменты для создания минимальной системы, которая будет использована для загрузки целевой машины и для сборки пакетов финальной системы.

Есть несколько дополнительных пакетов, которые необходимо будет установить для возможности загрузки минимальной системы. Некоторые из этих пакетов будут установлены в корень или в /usr на разделе CLFS (${CLFS}/bin, ${CLFS}/usr/lib и т.д.), а не в /tools, используя опцию "DESTDIR" в make. Это потребует наличия у пользователя clfs доступа на запись в остальную часть раздела CLFS, поэтому Вам понадобится временно изменить владельца ${CLFS} на пользователя clfs. Выполните следующую команду как root:

chown -v clfs ${CLFS}

7.2. Создание директорий

Теперь нам надо создать структуру файловой системы CLFS. Создадим стандартное дерево директорий, используя следующие команды:

mkdir -pv ${CLFS}/{bin,boot,dev,{etc/,}opt,home,lib,mnt}
mkdir -pv ${CLFS}/{proc,media/{floppy,cdrom},sbin,srv,sys}
mkdir -pv ${CLFS}/var/{lock,log,mail,run,spool}
mkdir -pv ${CLFS}/var/{opt,cache,lib/{misc,locate},local}
install -dv -m 0750 ${CLFS}/root
install -dv -m 1777 ${CLFS}{/var,}/tmp
mkdir -pv ${CLFS}/usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv ${CLFS}/usr/{,local/}share/{doc,info,locale,man}
mkdir -pv ${CLFS}/usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv ${CLFS}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}
for dir in ${CLFS}/usr{,/local}; do
  ln -sv share/{man,doc,info} $dir
done

По умолчанию директории создаются с правами доступа 755, но это правильно не для всех из них. Мы сделаем два изменения - одно для домашней директории пользователя root, а другое для директории временных файлов.

Первой командой смены моды мы запрещаем доступ в директорию /root для всех, кроме владельца — то же самое нам надо будет потом сделать для домашних директорий остальных пользователей. Второй командой смены моды мы позволяем всем пользователям записывать и читать файлы в и из директорий /tmp и /var/tmp, но они не смогут удалять оттуда файлы других пользователей. Последнее достигается установкой “бита прикрепления” - старшего бита в битовой маске 1777.

7.2.1. Совместимость с FHS

Мы создаём наше дерево каталогов совместимым со стандартом FHS (доступен на http://www.pathname.com/fhs/). Вместе с деревом директорий, созданным выше, этот стандарт обуславливает существование директорий /usr/local/games и /usr/share/games. Мы не рекомендуем их для базовой системы, хотя Вы можете создать систему полностью FHS-совместимой. Поскольку структура поддиректорий /usr/local/share не описана в стандарте FHS, то мы создаём её так, как надо нам.

7.3. Создание необходимых ссылок

Некоторые программы имеют встроенные пути к программам, которые пока не установлены. Чтобы обеспечить доступ к этим программам, мы создадим ссылки на них, которые пока заменят нам реальные файлы до их установки.

ln -sv /tools/bin/{bash,cat,grep,pwd,stty} ${CLFS}/bin
ln -sv /tools/lib/libgcc_s.so{,.1} ${CLFS}/usr/lib
ln -sv /tools/lib/libstd* ${CLFS}/usr/lib
ln -sv bash ${CLFS}/bin/sh

7.4. Zlib-1.2.3

Пакет Zlib содержит библиотеку, которая используется некоторыми программами для своих функций сжатия и распаковки.

7.4.1. Установка Zlib

Подготавливаем Zlib к компиляции:

./configure --prefix=/tools --shared

Описание параметров команды configure:

--shared

Говорит Zlib собирать разделяемую библиотеку.

Компилируем пакет:

make

Устанавливаем пакет:

make install

Детальная информация о пакете находится в Разделе 10.23.2, “Описание Zlib.”

7.5. E2fsprogs-1.39

E2fsprogs содержит ряд системных утилит для поддержки файловой системы ext2. Они также поддерживают журналируемую файловую систему ext3.

7.5.1. Установка E2fsprogs

Рекомендуется собирать E2fsprogs вне директории с исходниками:

mkdir -v build
cd build

Подготавливаем E2fsprogs к компиляции:

../configure --prefix=/tools \
    --enable-elf-shlibs --disable-evms \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Описание параметров команды configure:

--enable-elf-shlibs

Создаёт разделяемую библиотеку для использования некоторыми программами из этого пакета.

--disable-evms

Отключает сборку плагина Enterprise Volume Management System (EVMS). Этот плагин не обновляется с последними внутренними EVMS интерфейсами и EVMS не инсталируется как часть базовой системы LFS, поэтому плагин не требуется. Смотрите EVMS сайт на http://evms.sourceforge.net/ для большей информации о EVMS.

Компилируем пакет:

make

Устанавливаем бинарники и документацию:

make DESTDIR=${CLFS} install

Описание параметра команды make:

DESTDIR=${CLFS}

Файл Makefile для e2fsprogs жёстко прописывает путь к файлу mke2fs.conf, пытаясь установить его в ${DESTDIR}/etc, приводя установку к выпадению, так как она пытается записывать в /etc. Параметр DESTDIR предотвратит это.

Установим разделяемые библиотеки:

make install-libs

Создадим необходимые ссылки для загружаемой системы:

ln -sv /tools/sbin/{fsck.ext2,fsck.ext3,e2fsck} ${CLFS}/sbin

Детальная информация о пакете находится в Разделе 10.29.2, “Описание E2fsprogs.”

7.6. Sysvinit-2.86

Пакет Sysvinit содержит пограммы для контроля загрузки, запуска и выключения всех других программ.

7.6.1. Установка Sysvinit

Сделаем некоторые изменения, чтобы позволить Вам загрузиться в минимальную временную систему:

cp -v src/Makefile src/Makefile.orig
sed -e 's@root@0@g' \
    -e "s@/dev/initctl@${CLFS}&@g" \
    -e 's@\(mknod \)-m \([0-9]* \)\(.* \)p@\1\3p; chmod \2\3@g' \
    -e "s@/usr/lib@/tools/lib@" \
    src/Makefile.orig > src/Makefile

Компилируем пакет:

make -C src clobber
make -C src CC="${CC}"

Устанавливаем пакет:

make -C src install INSTALL="install" ROOT="${CLFS}"

7.6.2. Настройка Sysvinit

Создадим новый файл ${CLFS}/etc/inittab запуском следующей команды:

cat > ${CLFS}/etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

# Remove this section if you System only
# has a console port
1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600

# Uncomment this section if your system has a console
# port
#c0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100

# End /etc/inittab
EOF

Детальная информация о пакете находится в Разделе 10.48.3, “Описание Sysvinit.”

7.7. Module-Init-Tools-3.2.2

Пакет Module-Init-Tools содержит программы для поддержки модулей ядра в ядрах Linux с версией 2.5.47 или выше.

7.7.1. Установка Module-Init-Tools

Подготавливаем Module-Init-Tools к компиляции:

./configure --prefix=/ \
    --build=${CLFS_HOST} --host=${CLFS_TARGET}

Компилируем пакет:

make

Устанавливаем пакет:

make DESTDIR="${CLFS}" install

Детальная информация о пакете находится в Разделе 10.43.2, “Описание Module-Init-Tools.”

7.8. Util-linux-2.12r

Пакет Util-linux содержит ряд различных утилит. Некоторые из этих утилит используются для монтирования, размонтирования, форматирования, разбиения и обслуживания дисков, открытия портов tty и вызова сообщений ядра.

7.8.1. Установка Util-linux

Util-linux выпадает при компилировании с новыми версиями заголовков ядра Linux. Следующий патч исправляет эту проблему:

patch -Np1 -i ../util-linux-2.12r-cramfs-1.patch

Следующий патч исправляет проблему сборки с GCC 4.1.1:

patch -Np1 -i ../util-linux-2.12r-gcc4_fixes-1.patch

Следующий патч исправляет swapon.c, который пытается найти переменную R_OK но заголовка, включающего R_OK, нет:

patch -Np1 -i ../util-linux-2.12r-missing_header-1.patch

Util-linux по умолчанию не использует только что установленные заголовки и библиотеки из директории /tools. Это исправляется изменением скрипта configure:

cp -v configure{,.orig}
sed -e 's@/usr/include@/tools/include@g' configure.orig > configure

Установка Util-linux использует -o root. Следующая команда sed удаляет это, так как мы ещё не имеем установленных пользователей:

cp -v MCONFIG{,.orig}
sed -e 's|-o root||' MCONFIG.orig > MCONFIG

Подготавливаем Util-linux к компиляции:

./configure

Компилируем пакет:

make HAVE_KILL=yes HAVE_SLN=yes \
    HAVE_SHADOW=no CPUOPT="" ARCH="" \
    CPU=""

Описание параметров команды make:

HAVE_KILL=yes

Это предостережёт программу kill от сборки.

HAVE_SLN=yes

Это предостережёт программу sln (статически скомпонованный ln, уже установленный с Glibc) от повторной сборки.

HAVE_SHADOW=no

Это отключает компоновку с shadow.

CPUOPT=""

Это отключает любую оптимизацию компилятора под тип CPU.

ARCH=""

Это отключает определение архитектуры.

CPU=""

Это отключает определение процессора.

Устанавливаем пакет:

make HAVE_KILL=yes HAVE_SLN=yes HAVE_SHADOW=no \
    USE_TTY_GROUP=no CPUOPT="" ARCH="" \
    CPU="" DESTDIR=${CLFS} install

Детальная информация о пакете находится в Разделе 10.52.3, “Описание Util-linux.”

7.9. Udev-096

Пакет Udev содержит программы для динамического создания нод устройств.

7.9.1. Установка Udev

Компилируем пакет:

make CROSS_COMPILE="${CLFS_TARGET}-" CC="${CC}" LD="${CC}"

Устанавливаем пакет:

make DESTDIR=${CLFS} install

Детальная информация о пакете находится в Разделе 10.51.2, “Описание Udev.”

7.10. Создание файлов passwd, group и log

Для возможности регистрации в качестве пользователя root и для распознавания имени “root” нам необходимо создать соответствующие элементы в файлах /etc/passwd и /etc/group.

Создадим файл ${CLFS}/etc/passwd запуском следующей команды:

cat > ${CLFS}/etc/passwd << "EOF"
root::0:0:root:/root:/bin/bash
EOF

Пароль пользователя root (символ “::” заменяет его здесь и позволяет загружаться без пароля) будет определён позднее.

Дополнительные пользователи, которых Вы можете захотеть добавить:

bin:x:1:1:bin:/bin:/bin/false

Может быть полезен для совместимости с настоящими приложениями

daemon:x:2:6:daemon:/sbin:/bin/false

Он часто рекомендуется для использования с некоторыми непривилегированными ID пользователя/ID групы для запуска демонов, в порядке ограничения их доступа к системе

adm:x:3:16:adm:/var/adm:/bin/false

Использовался программами, использующими административные задачи

lp:x:10:9:lp:/var/spool/lp:/bin/false

Используется программами для печати

mail:x:30:30:mail:/var/mail:/bin/false

Часто используется программами электронной почты

news:x:31:31:news:/var/spool/news:/bin/false

Часто используется для сетевых серверов новостей

uucp:x:32:32:uucp:/var/spool/uucp:/bin/false

Часто используется для копирования файлов между Unix серверами

operator:x:50:0:operator:/root:/bin/bash

Часто используется для возможности операторов системы получать доступ к системе

postmaster:x:51:30:postmaster:/var/spool/mail:/bin/false

Обычно используется в качестве учётной записи, которая получает всю информацию о проблемах через почтовый сервер

nobody:x:65534:65534:nobody:/:/bin/false

Используется NFS

Создадим файл ${CLFS}/etc/group запуском следующей команды:

cat > ${CLFS}/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF

Дополнительные группы, которые Вы можете захотеть добавить:

adm:x:16:root,adm,daemon

Всем пользователям в этой группе разрешено выполнять административные задачи

console:x:17:

Эта группа имеет прямой доступ к консоли

cdrw:x:18:

Эта группа позволяет использовать CDRW накопитель

mail:x:30:mail

Используется MTA (Mail Transport Agents)

news:x:31:news

Используется серверами сетевых новостей

uucp:x:32:uucp

Используется пользователями для копирования между Unix машинами

users:x:1000:

GID по умолчанию, используемый shadow для новых пользователей

nogroup:x:65533:

Это группа по умолчанию, используемая некоторыми программами, которые не требуют группу

nobody:x:65534:

Используется NFS

Созданные группы не являются частью какого-то стандарта — эти группы будут использоваться при конфигурации Udev в финальной системе. База стандарта Linux (LSB, доступна на http://www.linuxbase.org) рекомендует, чтобы после группы “root” с ID группы (GID) 0 находилась группа “bin” с GID, равным 1. Все другие имена групп и их GID могут свободно выбираться пользователем, но некоторые пакеты зависят от имени группы, хоть и не зависят от номера GID.

Программы login, agetty и init (и другие) используют некоторые лог-файлы для записи информации, например кто был зарегистрирован в системе и когда. Хотя эти программы не будут записывать в отсутствующие лог-файлы. Проинициализируем лог-файлы и дадим им правильные права:

touch ${CLFS}/var/run/utmp ${CLFS}/var/log/{btmp,lastlog,wtmp}
chmod -v 664 ${CLFS}/var/run/utmp ${CLFS}/var/log/lastlog
chmod -v 600 ${CLFS}/var/log/btmp

Файл /var/run/utmp записывает пользователей, которые уже зарегистрировались. Файл /var/log/wtmp записывает все входы в систему и выходы из системы. Файл /var/log/lastlog записывает, когда каждый пользователь последний раз регистрировался в системе. Файл /var/log/btmp записывает неправильые регистрации.

7.11. Linux-2.6.17.13

Пакет Linux содержит ядро Linux и файлы заголовков.

7.11.1. Установка ядра

Внимание

Здесь будет собрано временное кросс-компилированное ядро. Во время его конфигурации выберите минимальный набор опций, необходимый для загрузки целевой машины и сборки финальной системы. То есть без поддержки звука, принтеров и т.д.

По возможности попытайтесь избежать использования модулей и не используйте полученное ядро для нормальных систем.

Сборка ядра разбита на несколько шагов — конфигурация, компилирование и установка. Если Вам не нравится способ установки, описаный в этой книге, то посмотрите файл README в директории с исходниками ядра на предмет альтернативы.

Следующий патч исправляет проблему инициализации с сетевым драйвером tulip:

patch -Np1 -i ../linux-2.6.17.13-tulip-1.patch

Следующий патч исправляет некоторое ассемблирование в ядре:

patch -Np1 -i ../linux-2.6.17.13-alpha_io_fix-1.patch

Подготовимся к компилированию запуском следующей команды:

make mrproper

Это позволит убедиться, что дерево исходников будет абсолютно чистым. Команда разработки ядра рекомендует запускать эту команду перед каждым компилированием ядра. Вы не можете быть абсолютно уверены в отсутствии лишних файлов даже после распаковки исходников.

Если Ваша клавиатура не US и на Вашей хост системе установлен Kbd, то Вы можете собрать подходящую раскладку для Вашей клавиатуры внутри ядра. Если Вы пожелаете это сделать, то запустите следующую команду (замените [путь к раскладке] на положение клавиатурной раскладки на хосте - обычным местом является /usr/share/kbd):

loadkeys -m [путь к раскладке] > \
    drivers/char/defkeymap.c

Например, если используется русская клавиатура, то используйте /usr/share/kbd/keymaps/i386/qwerty/ru1.map.gz (один из вариантов).

Отконфигурируем ядро через меню-подобный интерфейс:

make ARCH=alpha CROSS_COMPILE=${CLFS_TARGET}- menuconfig

Скомпилируем образ ядра и модули:

make ARCH=alpha CROSS_COMPILE=${CLFS_TARGET}-

Если Вы будете использовать модули, то может понадобиться файл /etc/modprobe.conf. Информация по модулям и конфигурации ядра находится в документации ядра в директории Documentation. Также может быть интересна man страница modprobe.conf.

Будьте осторожны при чтении другой документации, так как обычно она применима только к ядрам 2.4.x. Как мы давно знаем, проблемы конфигурации ядра, специфичные для Hotplug и Udev, не документированы. Проблема в том, что Udev будет создавать ноды устройств только если Hotplug или созданный пользователем скрипт вставит соответствующий модуль в ядро и не все модули определяются Hotplug. Заметьте, что утверждения, похожие на указанное ниже, в файле /etc/modprobe.conf не работают с Udev:

alias char-major-XXX some-module

Установим модули, если ядро их использует:

make ARCH=alpha CROSS_COMPILE=${CLFS_TARGET}- \
   INSTALL_MOD_PATH=${CLFS} modules_install

После завершения компилирования ядра требуются дополнительные шаги для завершения установки. Некоторые файлы необходимо скопировать в директорию ${CLFS}/boot directory.

Используйте следующую команду для установки ядра:

cp -v vmlinux ${CLFS}/boot/clfskernel-2.6.17.13

System.map это файл карты символов для ядра. Он содержит карту точек входа в каждую функцию API ядра. Используйте следующую команду для установки этого файла:

cp -v System.map ${CLFS}/boot/System.map-2.6.17.13

Файл конфигурации ядра .config, созданный после выполнения команды make menuconfig, содержит все выбранные опции конфигурации для только что откомпилированного ядра. Хорошей идеей будет сохранение этого файла:

cp -v .config ${CLFS}/boot/config-2.6.17.13

Детальная информация о пакете находится в Разделе 12.3.2, “Описание Linux.”

7.12. Aboot-0.9b

Пакет aboot содержит загрузчик Alpha.

7.12.1. Установка Aboot

Следующий патч исправляет проблемы сборки с GCC 4.1.1:

patch -Np1 -i ../aboot-0.9b-kernel26_gcc4_fixes-4.patch

Компилируем пакет:

make CC="${CC}"

Устанавливаем пакет:

make root="${CLFS}" bindir=/cross-tools/bin install

Детальная информация о пакете находится в Разделе 10.54.2, “Описание aboot.”

7.13. Установка окружения

Новый экземпляр оболочки, которая будет запущена во время загрузки системы, является регистрированной оболочкой, которая будет читать файл .bash_profile. Создадим файл .bash_profile сейчас:

cat > ${CLFS}/root/.bash_profile << "EOF"
set +h
PS1='\u:\w\$ '
LC_ALL=POSIX
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/sbin
export LC_ALL PATH PS1
EOF

Переменная LC_ALL контолирует локализацию некоторых программ, делая вывод их сообщений зависимым от страны. Установка LC_ALL в “POSIX” или “C” (обе эквивалентны) подтверждает, что в Вашей временной систме всё будет работать как ожидается.

Добавлением /tools/bin в конце стандартной переменной PATH все программы, установленные в главе Создание временной системы, будут находиться оболочкой если они ещё не были собраны на целевой системе. Эта конфигурация заставляет использовать бинарники финальной системы, так как они собираются поверх временной системы, минимизируя шанс программ финальной системы быть собранными при помощи временной системы.

7.14. Создание файла /etc/fstab

Файл /etc/fstab используется рядом программ для определения того, какие разделы будут монтированы по умолчанию, какие файловые системы должны быть проверены и т.д. Создадим новую таблицу файловых систем так, как показано здесь:

cat > ${CLFS}/etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type   options          dump  fsck
#                                                         order

/dev/[xxx]     /            [fff]  defaults         1     1
/dev/[yyy]     swap         swap   pri=1            0     0
proc           /proc        proc   defaults         0     0
sysfs          /sys         sysfs  defaults         0     0
devpts         /dev/pts     devpts gid=4,mode=620   0     0
shm            /dev/shm     tmpfs  defaults         0     0
# End /etc/fstab
EOF

Замените [xxx], [yyy] и [fff] на более подходяшие для системы значения, например hda2, hda5 и ext2. За более полной информацией обратитесь к man 5 fstab.

Точка монтирования /dev/shm для tmpfs добавлена для обеспечения поддержки POSIX-разделяемой памяти. Ваше ядро должно быть собрано со встроенной поддержкой этой системы (более подробно об этом смотрите в следующем разделе). Имейте в виду, что только небольшое количество программного обеспечения использует POSIX-разделяемую память. Поэтому точка монтирования /dev/shm является опциональной. Для более подробной информации смотрите Documentation/filesystems/tmpfs.txt в дереве исходников ядра.

7.15. CLFS-Bootscripts-1.0

Пакет СLFS-Bootscripts содержит набор скриптов для запуска/остановки системы CLFS во время загрузки/выключения.

7.15.1. Установка CLFS-Bootscripts

Устанавливаем пакет:

make ETCDIR=${CLFS}/etc minimal

Скрипт setclock считывает время с внутренних часов Вашего компьютера, также известных как часы BIOS или CMOS. Если аппаратные часы установлены на UTC, то этот скрипт конвертирует время аппаратных часов в локальное время, используя файл /etc/localtime, (который говорит программе hwclock, в каком часовом поясе находится пользователь). Нет способа автоматического определения того, установленны ли внутренние часы Вашего компьютера в UTC или нет, поэтому нам надо будет это настроить самим.

Если Вы не знаете, установлены ли аппаратные часы на время UTC, то определите это запуском команды hwclock --localtime --show и, если необходимо, отредактируйте скрипт /etc/sysconfig/clock. Худшее, что может произойти при неправильной установке здесь, это неправильное отображение времени.

Измените значение переменной UTC ниже на значение 0 (ноль), если аппаратные часы не установлены на время UTC.

cat > ${CLFS}/etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF

Детальная информация о пакете находится в Разделе 11.2.2, “Описание CLFS-Bootscripts.”

7.16. Udev Rules-1.0-3

Пакет Udev Cross-LFS rules содержит необходимый набор правил для начальной работы системы.

7.16.1. Установка Udev-Rules

Устанавливаем пакет:

make DESTDIR=${CLFS} install-minimal

Детальная информация о пакете находится в Разделе 11.3.2, “Описание Udev Rules.”

7.17. Заполнение /dev

7.17.1. Создание начальных нод устройств

Замечание

Все последующие команды в книге должны выполняться пользователем root. Также дважды убедитесь, что ${CLFS} установлена как root.

Когда ядро загружает систему, оно требует наличия нескольких файлов устройств, обычно это устройства console и null. Файлы устройств будут созданы на жёстком диске, поэтому они будут доступны до запуска udev и в дополнение при загрузке Linux в однопользовательском режиме (отсюда ограниченные права доступа на console). Создадим их запуском следующих команд:

mknod -m 600 ${CLFS}/dev/console c 5 1
mknod -m 666 ${CLFS}/dev/null c 1 3

7.18. Изменение владельца

На данный момент права на директорию ${CLFS} и все её поддиректории принадлежат пользователю clfs, который существует только на основной системе. В целях безопасности корневая директория ${CLFS} и все её поддиректории должны принадлежать root. Изменим владельца для ${CLFS} и её поддиректорий запуском следующей команды:

chown -Rv root:root ${CLFS}

7.19. Обеспечение загрузки временной системы

Создадим файл aboot.conf, описывающий меню загрузки aboot:

cat > ${CLFS}/etc/aboot.conf << "EOF"
# Begin /etc/aboot.conf
0:1/boot/clfskernel-2.6.17.13 root=/dev/sda1
# End /etc/aboot.conf
EOF

Если aboot уже установлен на Вашей целевой системе, то Вам не надо его переустанавливать. aboot это просто цепочечный загрузчик и он не имеет отношения к сборке системы.

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

swriteboot -f3 /dev/sda /boot/bootlx
abootconf /dev/sda 1

7.20. Что дальше

Теперь Вы находитесь в точке создания копии директории ${CLFS} на Вашей целевой машине. Простейшим методом будет использование tar и копирование файла.

tar -jcvf ${CLFS}.tar.bz2 ${CLFS}

Некоторые имеют другие идеи о том, как это сделать. Ниже представлена таблица с методами и ссылками на соответствующую информацию.

Table 7.1. Методы загрузки

Метод загрузки Для архитектуры Ссылка
nfsroot MIPS, PPC, Sparc, x86 и x86_64 http://documents.jg555.com/netboot

Глава 8. Если Вы решили использовать Chroot

8.1. Вступление

Эта глава показывает, как подготовить chroot окружение для сборки в нём пакетов финальной системы.

8.2. Util-linux-2.12r

Пакет Util-linux содержит ряд различных утилит. Некоторые из этих утилит используются для монтирования, размонтирования, форматирования, разбиения и обслуживания дисков, открытия портов tty и вызова сообщений ядра.

8.2.1. Установка Util-linux

Следующий патч исправляет проблему сборки с GCC 4.1.1:

patch -Np1 -i ../util-linux-2.12r-gcc4_fixes-1.patch

Util-linux по умолчанию не использует только что установленные заголовки и библиотеки из директории /tools. Это исправляется изменением скрипта configure:

cp -v configure{,.orig}
sed -e 's@/usr/include@/tools/include@g' configure.orig > configure

Подготавливаем Util-linux к компиляции:

./configure

Компилируем некоторые поддерживаемые шаблоны:

make ARCH="" CPU="" -C lib

Описание параметров команды make:

ARCH=""

Отключает определение архитектуры.

CPU=""

Отключает определение CPU.

Только некоторые из утилит должны быть собраны:

make ARCH="" CPU="" -C mount mount umount
make ARCH="" CPU="" -C text-utils more

Копируем эти программы во временную систему непосредственно:

cp -v mount/{,u}mount text-utils/more /tools/bin

Детальная информация о пакете находится в Разделе 10.52.3, “Описание Util-linux.”

8.3. Монтирование виртуальных файловых систем ядра

Замечание

Все последующие команды в книге должны выполняться пользователем root. Также дважды убедитесь, что ${CLFS} установлена как root.

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

Начнём с создания директорий, в которые будут монтироваться файловые системы:

mkdir -pv ${CLFS}/{dev,proc,sys}

Теперь подмонтируем файловые системы:

mount -vt proc proc ${CLFS}/proc
mount -vt sysfs sysfs ${CLFS}/sys

Запомните, что если по любой причине Вы прекратили работу с СLFS и решили возобновить её позже, то важно убедиться, что эти системы будут смонтированы внутри chroot окружения, иначе могут возникнуть определённые проблемы.

Две ноды устройств, /dev/console и /dev/null, должны присутствовать в файловой системе. Они нужны ядру даже до запуска Udev в процессе загрузки, поэтому создадим их:

mknod -m 600 ${CLFS}/dev/console c 5 1
mknod -m 666 ${CLFS}/dev/null c 1 3

После завершения системы и загрузки остальные ноды устройств будут созданы пакетом Udev. Пока этот пакет нам не доступен, мы должны сделать другие шаги для предоставления нод устройств для CLFS системы. Мы используем опцию “bind” в команде mount чтобы сделать структуру директории /dev хост системы доступной в файловой системе CLFS:

mount -v -o bind /dev ${CLFS}/dev

Дополнительные файловые системы скоро будут примонтированы в пределах chroot окружения. Для оставления возможности обновления хост системы выполним “фальшивое монтирование” для каждой из них:

mount -f -vt tmpfs tmpfs ${CLFS}/dev/shm
mount -f -vt devpts -o gid=4,mode=620 devpts ${CLFS}/dev/pts

8.4. Вход в Chroot окружение

Теперь пришло время войти в chroot окружение для начала сборки и установки финальной CLFS системы. Перед тем, как войти в chroot окружение, Вам необходимо войти в систему как root. Для входа в chroot окружение выполним следующую команду:

chroot "${CLFS}" /tools/bin/env -i \
    HOME=/root TERM="${TERM}" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

Параметр -i, передаваемый команде env, очистит все переменные окружения chroot окружения. После этого мы устанавливаем только переменные HOME, TERM, PS1 и PATH. Конструкция TERM=${TERM} установит переменную TERM внутри chroot окружения в то же значение, что и вне chroot окружения. Эта переменная нужна таким программам как vim и less для правильной работы. Если Вам нужны другие переменные, такие как CFLAGS или CXXFLAGS, то это хорошее место задать их.

С этого места нам уже не надо использовать переменную CLFS, потому что вся работа будет ограничена файловой системой CLFS. Это потому что оболочка Bash говорит, что ${CLFS} теперь является корневой (/) директорией.

Заметьте, что /tools/bin последняя в списке путей PATH. Благодаря этому пакеты из этой директории не будут использованы, если мы уже установили окончательную версию соответствующего пакета. Это действует в том случае, когда оболочка “не запоминает” расположение исполняемых файлов, поэтому отключим эту функцию при помощи опции +h, переданной bash.

Запомните, что все команды до конца этой главы и во всех последующих выполняются из chroot окружения. Если Вы покинули это окружение по любой причине (например после перезагрузки), то Вы должны снова зайти в chrrot окружение и примонтировать файловые системы proc и devpts (описываются позже) перед продолжением установки.

Заметьте, что приглашение bash выводит сообщение I have no name!. Это нормально, поскольку файл /etc/passwd ещё не создан.

8.5. Изменение владельца

На данный момент права на директории /tools и /cross-tools принадлежат пользователю clfs, который существует только на основной системе. Хотя директории /tools и /cross-tools могут быть удалены сразу после установки CLFS системы, они могут быть оставлены для сборки других CLFS систем. Если директории /tools и /cross-tools оставляются как есть, то файлы принадлежат ID пользователя без соответствующего аккаунта. Это опасно, так как пользователь, созданный позднее, может иметь тот же ID и может получить доступ к директории /tools и всем файлам в ней.

Чтобы избежать этого, добавим пользователя clfs в новую СLFS позже при создании файла /etc/passwd и подправим его таким образом, чтобы ID этого пользователя и группы были идентичны им же на основной системе. Помимо этого, Вы можете связать содержимое директорий /tools и /cross-tools с пользователем root запуском команды:

chown -Rv 0:0 /tools
chown -Rv 0:0 /cross-tools

Команда использует 0:0 вместо root:root, потому что chown не может использовать имя “root” до того, как будет создан файл паролей passwd.

8.6. Создание директорий

Теперь нам надо создать структуру файловой системы CLFS. Создадим стандартное дерево директорий, используя следующие команды:

mkdir -pv /{bin,boot,dev,{etc/,}opt,home,lib,mnt}
mkdir -pv /{proc,media/{floppy,cdrom},sbin,srv,sys}
mkdir -pv /var/{lock,log,mail,run,spool}
mkdir -pv /var/{opt,cache,lib/{misc,locate},local}
install -dv -m 0750 /root
install -dv -m 1777 {/var,}/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}
for dir in /usr{,/local}; do
  ln -sv share/{man,doc,info} $dir
done

По умолчанию директории создаются с правами доступа 755, но это правильно не для всех из них. Мы сделаем два изменения - одно для домашней директории пользователя root, а другое для директории временных файлов.

Первой командой смены моды мы запрещаем доступ в директорию /root для всех, кроме владельца — то же самое нам надо будет потом сделать для домашних директорий остальных пользователей. Второй командой смены моды мы позволяем всем пользователям записывать и читать файлы в и из директорий /tmp и /var/tmp, но они не смогут удалять оттуда файлы других пользователей. Последнее достигается установкой “бита прикрепления” - старшего бита в битовой маске 1777.

8.6.1. Совместимость с FHS

Мы создаём наше дерево каталогов совместимым со стандартом FHS (доступен на http://www.pathname.com/fhs/). Вместе с деревом директорий, созданным выше, этот стандарт обуславливает существование директорий /usr/local/games и /usr/share/games. Мы не рекомендуем их для базовой системы, хотя Вы можете создать систему полностью FHS-совместимой. Поскольку структура поддиректорий /usr/local/share не описана в стандарте FHS, то мы создаём её так, как надо нам.

8.7. Создание необходимых ссылок

Некоторые программы имеют встроенные пути к программам, которые пока не установлены. Чтобы обеспечить доступ к этим программам, мы создадим ссылки на них, которые пока заменят нам реальные файлы до их установки.

ln -sv /tools/bin/{bash,cat,grep,pwd,stty} /bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstd* /usr/lib
ln -sv bash /bin/sh

8.8. Создание файлов passwd, group и log

Для возможности регистрации в качестве пользователя root и для распознавания имени “root” нам необходимо создать соответствующие элементы в файлах /etc/passwd и /etc/group.

Создадим файл /etc/passwd запуском следующей команды:

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
EOF

Пароль пользователя root (символ “x” заменяет его здесь) будет определён позднее.

Дополнительные пользователи, которых Вы можете захотеть добавить:

bin:x:1:1:bin:/bin:/bin/false

Может быть полезен для совместимости с настоящими приложениями

daemon:x:2:6:daemon:/sbin:/bin/false

Он часто рекомендуется для использования с некоторыми непривилегированными ID пользователя/ID групы для запуска демонов, в порядке ограничения их доступа к системе

adm:x:3:16:adm:/var/adm:/bin/false

Использовался программами, использующими административные задачи

lp:x:10:9:lp:/var/spool/lp:/bin/false

Используется программами для печати

mail:x:30:30:mail:/var/mail:/bin/false

Часто используется программами электронной почты

news:x:31:31:news:/var/spool/news:/bin/false

Часто используется для сетевых серверов новостей

uucp:x:32:32:uucp:/var/spool/uucp:/bin/false

Часто используется для копирования файлов между Unix серверами

operator:x:50:0:operator:/root:/bin/bash

Часто используется для возможности операторов системы получать доступ к системе

postmaster:x:51:30:postmaster:/var/spool/mail:/bin/false

Обычно используется в качестве учётной записи, которая получает всю информацию о проблемах через почтовый сервер

nobody:x:65534:65534:nobody:/:/bin/false

Используется NFS

Создадим файл /etc/group запуском следующей команды:

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF

Дополнительные группы, которые Вы можете захотеть добавить:

adm:x:16:root,adm,daemon

Всем пользователям в этой группе разрешено выполнять административные задачи

console:x:17:

Эта группа имеет прямой доступ к консоли

cdrw:x:18:

Эта группа позволяет использовать CDRW накопитель

mail:x:30:mail

Используется MTA (Mail Transport Agents)

news:x:31:news

Используется серверами сетевых новостей

uucp:x:32:uucp

Используется пользователями для копирования между Unix машинами

users:x:1000:

GID по умолчанию, используемый shadow для новых пользователей

nogroup:x:65533:

Это группа по умолчанию, используемая некоторыми программами, которые не требуют группу

nobody:x:65534:

Используется NFS

Созданные группы не являются частью какого-то стандарта — эти группы будут использоваться при конфигурации Udev в финальной системе. База стандарта Linux (LSB, доступна на http://www.linuxbase.org) рекомендует, чтобы после группы “root” с ID группы (GID) 0 находилась группа “bin” с GID, равным 1. Все другие имена групп и их GID могут свободно выбираться пользователем, но некоторые пакеты зависят от имени группы, хоть и не зависят от номера GID.

Программы login, agetty и init (и другие) используют некоторые лог-файлы для записи информации, например кто был зарегистрирован в системе и когда. Хотя эти программы не будут записывать в отсутствующие лог-файлы. Проинициализируем лог-файлы и дадим им правильные права:

Для удаления сообщения “I have no name!” запустим новую оболочку. Так как полная Glibc была установлена в главе Создание инструментов кросс-компилирования, а файлы /etc/passwd и /etc/group были созданы сейчас, имена пользователя и группы будут работать.

exec /tools/bin/bash --login +h

Замечание по использованию параметра +h. Это скажет bash не использовать внутренний кеш путей. Без этого bash будет запоминать пути к исполненным бинарникам. Поскольку мы собираемся использовать вновь скомпилированные пакеты по мере их установки, то мы должны отключить эту функцию в этой главе.

Созданные группы не являются частью какого-то стандарта — эти группы будут использоваться при конфигурации Udev в финальной системе. База стандарта Linux (LSB, доступна на http://www.linuxbase.org) рекомендует, чтобы после группы “root” с ID группы (GID) 0 находилась группа “bin” с GID, равным 1. Все другие имена групп и их GID могут свободно выбираться пользователем, но некоторые пакеты зависят от имени группы, хоть и не зависят от номера GID.

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog
chmod -v 600 /var/log/btmp

Файл /var/run/utmp записывает пользователей, которые уже зарегистрировались. Файл /var/log/wtmp записывает все входы в систему и выходы из системы. Файл /var/log/lastlog записывает, когда каждый пользователь последний раз регистрировался в системе. Файл /var/log/btmp записывает неправильые регистрации.

8.9. Монтирование файловых систем ядра

8.9.1. Монтирование дополнительных файловых систем ядра

Подмонтируем правильные виртуальные файловые системы (ядра) в созданные директории:

mount -vt devpts -o gid=4,mode=620 none /dev/pts
mount -vt tmpfs none /dev/shm

Команды mount, указанные выше, могут выдать следующее предупреждающее сообщение:

can't open /etc/fstab: No such file or directory.

Этот файл — /etc/fstab — пока не был создан, но он пока не нужен для нормального монтирования файловых систем. Раз так, предупреждение может быть проигнорировано.

Часть V. Сборка CLFS системы

Оглавление

Глава 9. Создание инструментов тестирования

9.1. Вступление

Эта глава собирает инструменты, необходимые для запуска тестов, содержащихся в пакетах. То eсть make check

9.2. Tcl-8.4.12

Пакет Tcl содержит Tool Command Language (Инструмент Командого Языка).

9.2.1. Установка Tcl

Этот и следующие два (Expect и DejaGNU) устанавливаемых пакета нужны для работы тестирования GCC и Binutils. Установка этих трех пакетов нужна только для этого, и если Вы не хотите тестировать устанавливаемые инструменты, то можно пропустить эти установки, но мы рекомендуем проверять работоспособность собираемых инструментов.

Сначала исправим ошибку синтаксиса скрипта configure:

cd unix
sed -i "s/relid'/relid/" configure

Подготавливаем Tcl к компиляции:

./configure --prefix=/tools

Собираем пакет:

make

Устанавливаем пакет:

make install

Собственные файлы заголовков Tcl необходимы для следующего пакета Expect. Установим их в /tools:

make install-private-headers

Создадим необходимую символическую ссылку:

ln -sv tclsh8.4 /tools/bin/tclsh

9.2.2. Описание Tcl

Установленные программы: tclsh (ссылка на tclsh8.4) и tclsh8.4
Установленная библиотека: libtcl8.4.so

Короткие описания

tclsh8.4

Командная оболочка Tcl

tclsh

Ссылка на tclsh8.4

libtcl8.4.so

Библиотека Tcl

9.3. Expect-5.43.0

Пакет Expect содержит программы, обеспечивающие программируемый диалог с другими интерактивными программами.

9.3.1. Установка Expect

Следующая команда sed говорит скрипту configure искать библиотеки в ${libdir}, а не только в /tools/lib:

sed -i '/EXP_LIB_SPEC=/s@${exec_prefix}/lib@${libdir}@' configure

Наложим патч, который устраняет выдачу неверного результата при тестировании GCC.

patch -Np1 -i ../expect-5.43.0-spawn-2.patch

Теперь подготавливаем Expect к компиляции:

./configure --prefix=/tools --with-tcl=/tools/lib \
    --with-tclinclude=/tools/include

Описание параметров команды configure:

--with-tcl=/tools/lib

Это скажет скрипту конфигурации искать Tcl в нашей временной директории, а не в основной системе.

--with-tclinclude=/tools/include

Это точно указывает Expect, где искать внутренние заголовки Tcl. Использование этой опции предотвращает состояния, когда configure выпадает, потому что не может автоматически определить положение директории исходников Tcl.

Собираем пакет:

make

Устанавливаем пакет:

make SCRIPTS="" install

Описание параметра команды make:

SCRIPTS=""

Этот параметр запускает установку без вспомогательных скриптов, которые не нужны.

9.3.2. Описание Expect

Установленная программа: expect
Установленная библиотека: libexpect-5.43.a

Короткие описания

expect

Связывается с другими интерактивными программами посредством скриптов

libexpect-5.43.a

Библиотека функций, которые позволяют Expect быть использованным, как расширение Tcl или прямо из С или С++ (без Tcl).

9.4. File-4.17

File является утилитой для определения типа файла.

9.4.1. Установка File

Подготавливаем File к компиляции:

./configure --prefix=/tools

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Теперь мы создадим символическую ссылку, так что тесты GCC смогут использовать file:

ln -sv /tools/bin/file /usr/bin

Детальная информация о пакете находится в Разделе 10.30.2, “Описание File.”

9.5. DejaGNU-1.4.4

Пакет DejaGnu содержит основы для тестирования других программ.

9.5.1. Установка DejaGNU

Подготавливаем DejaGNU к компиляции:

./configure --prefix=/tools

Собираем и инсталируем пакет:

make install

9.5.2. Описание DejaGNU

Установленная программа: runtest

Короткие описания

runtest

Скрипт-обёртка, который размещает свойства оболочки expect и затем запускает DejaGNU

9.6. Tree-1.5.0

Пакет Tree содержит программу, выводящую структуру директории в графическом формате "дерева". Он используется Udev для сообщений об ошибках в его тестах.

9.6.1. Установка Tree

Компилируем пакет:

make

Устанавливаем пакет:

make prefix=/tools install

Описание параметров команды make:

prefix=/tools

Это заменяет префикс по умолчанию /usr/local в файле Makefile.

9.6.2. Описание Tree

Установленная программа: tree

Короткие описания

tree

Tree выводит структуру директории в древовидном формате

Глава 10. Установка основных системных программ

10.1. Вступление

В этой главе мы войдём в фазу сборки и начнём серьёзно собирать нашу СLFS систему. Установка программ строго последовательная. Хотя в большинстве случаев инструкции по установке могут быть сделаны короче и более общими, мы их оптимизировали для предоставления полных инструкций для каждого пакета для уменьшения вероятности ошибки. Ключом к пониманию того, что делает рабочая Линукс система есть знание того, для чего нужен каждый пакет и зачем он нужен пользователю или системе. Для каждого установленного пакета приводится информация о том, что входит в пакеты, краткое описание каждой программы и библиотеки.

Если в этой главе Вы решите использовать оптимизацию компилятора,то Вам стоит посмотреть справку по оптимизации на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt. Оптимизация компилятора может сделать программы быстрее, но могут возникнуть сложности при компилировании и некоторые проблемы при работе этих программ. Если пакет отказывается компилироваться при использовании оптимизации, то попробуйте скомпилировать пакет без неё, возможно проблемы исчезнут. Если пакет компилируется с использованием оптимизации, то есть возможность, что он скомпилируется некорректно, например могут появиться проблемы между интерактивностью в коде и собранными инструментами. В общем, использование оптимизации при сборке является рискованным. Также отметьте, что опции -march и -mtune могут привести к проблемам с пакетами Binutils, GCC и Glibc. Небольшой потенциал от выгоды применения оптимизации компилятора часто перевешивается риском. Новичкам в CLFS рекомендуется собирать её без оптимизации. В Ваших силах сделать систему быстрой и стабильной одновременной.

Порядок установки пакетов в этой главе должен точно соблюдаться чтобы не было программ, случайно имеющих ссылку на путь в /tools, жёстко прописанный в них Для этого же не компилируйте пакеты параллельно. Параллельная сборка может показаться иногда выгодной (в особенности на многопроцессорных системах), но в результате у программ появится зависимость от инструментов из /tools и они не смогут работать, когда мы удалим эту директорию.

Для содержания в порядке установленных пакетов можно применять менеджеры пакетов. Для ознакомления с различными стилями менеджеров пакетов обратитесь к следующей странице.

10.2. Управление пакетами

Управление пакетами является часто запрашиваемым дополнением к книге CLFS. Менеджер пакетов позволяет отслеживать установку файлов, делая легким их удаление, и обновлять пакеты. И перед тем, как Вы начнёте радоваться, НЕТ — этот раздел ни рассказывает о каком-нибудь особенном менеджере пакетов, ни рекомендует. Здесь предоставляется обзор наиболее популярных способов и методов их работы. Наилучший для Вас менеджер пакетов может быть среди этих способов или может быть комбинацией из нескольких. Этот раздел коротко оговаривает проблемы, которые могут появиться при обновлении пакетов.

Некоторые основания, почему менеджеры пакетов не описаны в CLFS или BLFS:

  • Рассмотрение управления пакетами сфокусировано вокруг целей этой книги - обучению того, как строить Линукс систему.

  • Существует много решений по управлению пакетами, имеющие собственные преимущества и недостатки.

Существует несколько советов, написанных на тему управления пакетами. Посетите Подпроект советов для поиска подходящего для Вас варианта.

10.2.1. Задачи обновления

Менеджер пакетов делает обновление пакетов на более новую версию при её появлении. Обычно инструкции, описанные в книгах CLFS и BLFS, могут быть использованы для обновления на новые версии. Есть несколько моментов, которые Вы должны знать при обновлении пакетов, особенно на работающей системе.

  • Если один из основных пакетов (glibc, gcc, binutils) надо обновить на новую младшую версию, то безопаснее пересобрать CLFS. Вы можете сделать это пересборкой всех пакетов в порядке их зависимостей. Мы это не рекомендуем. Например, если glibc-2.2.x необходимо обновить до glibc-2.3.x, то безопаснее пересобрать. Для незначительного обновления версий обычно работает простая переустановка, но это не гарантировано. Например, обновление от glibc-2.3.4 до glibc-2.3.5 обычно не будет означать каких-либо проблем.

  • Если обновлён пакет, содержащий разделяемые библиотеки и если имена библиотек изменились, то все пакеты, динамически скомпонованные с этими библиотеками, должны быть перекомпилированы для связи с новыми библиотеками. Заметьте, что это не корреляция между версией пакета и именем библиотеки. Например, рассмотрим пакет foo-1.2.3, который устанавливает разделяемую библиотеку с именем libfoo.so.1. Скажем, Вы обновляете пакет на новую версию foo-1.2.4, которая устанавливает разделяемую библиотеку с именем libfoo.so.2. В этом случае все пакеты, которые динамически скомпонованы с libfoo.so.1, необходимо перекомпилировать для компоновки с libfoo.so.2. Заметьте, что Вы не должны удалять предыдущие библиотеки, пока зависимые пакеты перекомпилируются.

  • Если Вы обновляете запущенную систему, будьте внимательны с пакетами, которые используют cp вместо install для установки файлов. Последняя команда обычно безопаснее, если программа или библиотека уже загружена в память.

10.2.2. Способы управления пакетами

Следующее является общим в способах управления пакетами. Перед принятием решения о менеджере пакетов проведите поиск различных способов, особенно недостатков отдельных схем.

10.2.2.1. Это всё в моей голове!

Да, это техника управления пакетами. Некоторые люди не видят необходимости в управлении пакетами потому, что они лично знают пакеты и знают, какие файлы установлены каждым пакетом. Некоторые пользователи также не нуждаются в любом управлении пакетами потому, что они планируют пересборку целой системы при изменении пакета.

10.2.2.2. Установка в отдельные директории

Это простейшее управление пакетами, которое не требует дополнительных пакетов для управления установкой. Каждый пакет устанавливается в отдельную директорию. Например, пакет foo-1.1 установлен в /usr/pkg/foo-1.1 и сделана ссылка из /usr/pkg/foo на /usr/pkg/foo-1.1. Когда устанавливается новая версия foo-1.2, она устанавливается в /usr/pkg/foo-1.2, а предыдущая ссылка заменяется ссылкой на новую версию.

Такие переменные окружения, как PATH, LD_LIBRARY_PATH, MANPATH, INFOPATH и CPPFLAGS необходимо расширить для включения /usr/pkg/foo. Для более чем нескольких пакетов такая схема становится неуправляемой.

10.2.2.3. Управление пакетами, основанное на ссылках

Это вариация предыдущей техники управления пакетами. Каждый пакет установлен аналогично предыдущей схеме. При этом он установлен, делая ссылку на каждый файл в иерархию /usr. Это исключает необходимость расширять переменные окружения. Хотя ссылки могут быть созданы пользователем, для автоматизации их создания было написано много менеджеров пакетов. Некоторые из таких популярных менеджеров - Stow, Epkg, Graft и Depot.

Установка должна быть обманута так, чтобы пакет думал, что он установлен в /usr, хотя в действительности он установлен в иерархию /usr/pkg. Установка таким способом обычно не тривиальная задача. Например, предположим, что Вы устанавливаете пакет libfoo-1.1. Следующие инструкции могут не установить пакет корректно:

./configure --prefix=/usr/pkg/libfoo/1.1
make
make install

Установка будет работать, но зависимые пакеты могут не компоноваться с libfoo, как Вы могли бы ожидать. Если Вы компилируете пакет, который компонуется с libfoo, то Вы можете отметить, что он скомпонован с /usr/pkg/libfoo/1.1/lib/libfoo.so.1 вместо /usr/lib/libfoo.so.1, как Вы бы ожидали. Корректным подходом является использование стратегии DESTDIR для обмана установки пакета. Это работает следующим образом:

./configure --prefix=/usr
make
make DESTDIR=/usr/pkg/libfoo/1.1 install

Большинство пакетов поддерживают такой подход, но есть и такие, которые не поддерживают. Для неподдающихся пакетов Вам также может понадобиться установить пакет вручную или Вы можете найти, что проще установить некоторые проблемные пакеты в /opt.

10.2.2.4. Управление, основанное на отметке по времени

При такой технике перед установкой пакета создаётся файл и отмечается время его создания. После установки пакета простое использование команды find с соответствующими опциями может сгенерировать лог обо всех файлах, установленных после создания файла, отмеченного по времени. Менеджер пакетов, написанный с таким подходом - это install-log.

Хотя такая схема имеет преимущество простоты, она имеет два недостатка. Если во время установки файлы установлены с другой отметкой по времени, не соответствующей текущему времени, то они не будут отслежены менеджером пакетов. Также эта схема может быть использована только тогда, когда за одно время установлен один пакет. Логи не надёжны, если два пакета были установлены на двух различных консолях.

10.2.2.5. Управление, основанное на LD_PRELOAD

При таком подходе библиотека перед установкой предзагружается. В течении установки эта библиотека отслеживает пакеты, которые были установлены, присоединением себя к различным исполняемым файлам, таким как cp, install, mv и отслеживает системные вызовы, изменяющие файловую систему. Для работы такого метода, все исполняемые файлы должны быть скомпонованы динамически без битов suid или sgid. Предзагрузка библиотеки может означать некоторые нежелательные эффекты во время установки. Чтобы убедиться, что менеджер пакетов ничего не портит и отчитывается о всех соответствующих файлах выполните некоторые тесты.

10.2.2.6. Создание архива пакетов

При такой схеме установка пакета перенаправляется в отдельное дерево, как описано в методе управления пакетами, основанном на ссылках. После установки создаётся архив пакета, использующий установленные файлы. Этот архив затем используется для установки пакета как на текущую машину, так и может быть установлен на другую.

Такой метод используется в большинстве менеджеров пакетов, находящихся в комерческих дистрибутивах. Примеры менеджеров пакетов, соответствующих этому методу, это RPM (который в данном случае требуется Linux Standard Base Specification), pkg-utils, apt Debian-а и система портежей Gentoo. Совет по адаптации такого стиля управления пакетами для LFS систем находится на http://www.linuxfromscratch.org/hints/downloads/files//fakeroot.txt.

10.3. Опять о тестах

Во время сборки финальной системы Вы больше не кросскомпилируете, поэтому возможно запускать тесты пакетов. Некоторые тесты более важные чем другие. Например, тесты для основных пакетов — GCC, Binutils и Glibc — являются крайне важными так как они играют центральную роль в правильной работе системы. Тесты для GCC и Glibc могут занять очень много времени, особенно на медленной машине, но они очень рекомендуются.

Известной проблемой запуска тестов для Binutils и GCC является запуск вне псевдотерминалов (PTY). Это может привести к большому числу непройденных тестов. Это может произойти в некоторых случаях, но в большинстве вероятных случаях (если Вы в chroot) это из-за того, что хост система не имеет правильно установленную файловую систему devpts. Эта проблема обсуждается в деталях на http://trac.cross-lfs.org/wiki/faq#no-ptys.

Иногда тесты пакетов будут выпадать но по причинам, которые разработчики осознают и считают не критичными. Проконсультируйтесь в логах, размещённых на http://trac.cross-lfs.org/clfs/build-logs/1.0.0/ для проверки, ожидаются ли эти ошибки. Этот сайт имеет силу для всех тестов из этой книги.

10.4. Временный Perl-5.8.8

Пакет Perl содержит язык практичной обработки и отчётов (Practical Extraction and Report Language).

10.4.1. Установка Perl

Сначала адаптируем некоторые жёстко прописанные пути в библиотеке C применением следующего патча:

patch -Np1 -i ../perl-5.8.8-libc-2.patch

Подготовим Perl к компиляции:

./configure.gnu --prefix=/tools \
   -Dstatic_ext='Data/Dumper IO Fcntl POSIX' -Dcc="gcc"

Описание параметра команды configure:

-Dstatic_ext='Data/Dumper IO Fcntl POSIX'

Это говорит Perl собирать минимальный набор статических расширений, необходимых для установки и тестирования пакетов Glibc и Coreutils позднее в этой главе.

Теперь мы готовы к сборке утилит perl:

make perl utilities

Хотя Perl содержит тесты, не рекомендуется запускать их сейчас. Только часть Perl была создана и запуск make test сейчас будет означать, что остальная часть Perl будет собрана нормально, что излишне на этом этапе. Тест может быть запущен позднее в этой главе при необходимости.

Установим эти инструменты и их библиотеки:

cp -v perl pod/pod2man /tools/bin
install -dv /tools/lib/perl5/5.8.8
cp -Rv lib/* /tools/lib/perl5/5.8.8

В конце создадим необходимую ссылку:

ln -sv /tools/bin/perl /usr/bin

Детальная информация о пакете находится в Разделе 10.21.2, “Описание Perl.”

10.5. Man-pages-2.33

Пакет Man-pages содержит более 1200 man-страниц.

10.5.1. Установка Man-pages

Установим Man-pages запуском:

make install

10.5.2. Описание Man-pages

Установленные файлы: различные man страницы

Короткие описания

man pages

Этот пакет содержит страницы man, которые описывают следующее: звголовки POSIX (раздел 0p), утилиты POSIX (раздел 1p), функции POSIX (раздел 3p), команды пользователя (раздел 1), системные вызовы (раздел 2), вызовы libc (раздел 3), информацию об устройствах (раздел 4), форматы файлов (раздел 5), игры (раздел 6), соглашения и макро пакеты (раздел 7), системное администрирование (раздел 8) и ядро (раздел 9).

10.6. Linux-Headers-2.6.17.13-09092006

Пакет Linux Headers содержит “осмысленные” заголовки ядра.

10.6.1. Установка заголовков Linux

В течении многих лет было очень практично использовать “сырые” заголовки ядра (прямо из тарбола ядра) в /usr/include, но в последние несколько лет разработчики ядра приняли жёсткое решение, что так не должно быть. Это привело к появлению проекта Linux-Libc-Headers, который был разработан для поддержки Application Programming Interface (API) стабильной версии заголовков Linux. С некоторых пор этот проект прекратил обновляться, поэтому команда Cross-LFS начала разработку своего собственного проекта.

Установим файлы заголовков, общие для всех архитектур:

install -dv /usr/include
cp -av include/{asm-generic,linux,mtd,scsi,sound} /usr/include/

Установим файлы заголовков для этой архитектуры:

cp -av include/asm-alpha /usr/include/asm

10.6.2. Описание Linux-Headers

Установленные заголовки: /usr/include/{asm,asm-generic,linux,mtd,scsi,sound}/*.h

Короткие описания

/usr/include/{asm,asm-generic,linux,mtd,scsi,sound}/*.h

Заголовки Linux API

10.7. Glibc-2.4

Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т.д. Библиотека C используется для всех динамически скомпонованых программ.

10.7.1. Установка Glibc

Замечание

Некоторые пакеты вне CLFS допускают установку GNU libiconv для преобразования данных из одной кодировки в другую. Домашняя страница проекта (http://www.gnu.org/software/libiconv/) говорит “Эта библиотека предоставляет реализацию iconv() для использования на системах, которые её не имеют, или те реализации не могут преобразовывать из/в Unicode”. Glibc предоставляет реализацию iconv() и может преобразовывать из/в Unicode, хотя libiconv не требуется в системе CLFS.

Система сборки Glibc является весьма самодостаточной и должна установится корректно, даже если Ваши spec файл и компоновщик находятся в /tools. Мы не можем установить spec и компоновщик перед установкой Glibc потому, что тест автоконфинурации Glibc даст фиктивные результаты и от этого зависит чистота сборки.

Следующий патч исправляет некоторое ассемблирование в glibc:

patch -Np1 -i ../glibc-2.4-alpha_ioperm_fix-1.patch

Следующий патч исправит проблему, приводящую к падению localdef:

patch -Np1 -i ../glibc-2.4-localedef_segfault-1.patch

Следующий патч устраняет проблему с iconv:

patch -Np1 -i ../glibc-2.4-iconv_fix-1.patch

Следующая команда sed устраняет проблему сборки Glibc. Она предостережёт nscd от попытки компоновки с отсутствующими библиотеками:

cp -v nscd/Makefile{,.orig}
sed -e "/nscd_stat.o: sysincludes = # nothing/d" nscd/Makefile.orig > \
    nscd/Makefile

Документация по Glibc рекомендует собирать Glibc вне директории с исходниками, в отдельной директории для сборки:

mkdir -v ../glibc-build
cd ../glibc-build

Подготавливаем Glibc к компиляции:

../glibc-2.4/configure --prefix=/usr \
    --disable-profile --enable-add-ons --enable-kernel=2.6.0 \
    --libexecdir=/usr/lib/glibc

Описание нового параметра команды configure:

--libexecdir=/usr/lib/glibc

Изменяет место установки программы pt_chown из места по умолчанию /usr/libexec на /usr/lib/glibc.

Компилируем пакет:

make

Важно

Проведение тестирования Glibc очень критично. Не пропускайте его.

Протестируем результаты:

make -k check >glibc-check-log 2>&1 ; grep Error glibc-check-log

Тесты Glibc сильно зависят от некоторых функций хост системы, в особенности ядра. Тест posix/annexc обычно выпадает и Вы должны увидеть в выводе Error 1 (ignored). Кроме этого, ожидается, что тест Glibc проходит. Хотя в некоторых случаях некоторые ошибки неизбежны. Если тест выпадает из-за отсутствия программы (или отсутствия символической ссылки) или выдаёт ошибку сегментации, то Вы увидите код ошибки больше чем 127, а детали будут в логе. Хуже, когда тесты будут выпадать с Error 2 - при этом содержание соответствующего .out файла может быть информативным, т.е. posix/annexc.out. Здесь приведён список большинства известных общих проблем:

Тесты Glibc сильно зависят от некоторых функций хост системы, в особенности ядра. Тест posix/annexc обычно выпадает и Вы должны увидеть в выводе Error 1 (ignored). Кроме этого, ожидается, что тест Glibc проходит. Хотя в некоторых случаях некоторые ошибки неизбежны. Если тест выпадает из-за отсутствия программы (или отсутствия символической ссылки) или выдаёт ошибку сегментации, то Вы увидите код ошибки больше чем 127, а детали будут в логе. Хуже, когда тесты будут выпадать с Error 2 - при этом содержание соответствующего .out файла может быть информативным, т.е. posix/annexc.out. Здесь приведён список большинства известных общих проблем:

  • Тест math иногда выпадает. Некоторые установки оптимизации являются известным фактором.

  • Если Ваш CLFS раздел примонтирован с опцией noatime, то тест atime выпадет. Как указано в Разделе 2.4, “Монтирование нового раздела”, не используйте опцию noatime во время сборки CLFS.

  • При запуске на старом и медленном оборудовании некоторые тесты могут выпадать, так как будут превышены временные параметры тестов.

На этапе установки Glibc может выдать предупреждение об отсутствии /etc/ld.so.conf. Упредим это сообщение:

touch /etc/ld.so.conf

Устанавливаем пакет:

make install

10.7.2. Интернационализация

Локали различных языков, на которых могут осуществляться системные сообщения, не устанавливаются предыдущей командой. Установим их следующей командой:

make localedata/install-locales

Альтернативой запуску предыдущей команды для экономии времени является установка только определённых локалей, тех которые Вам нужны. Это может быть достигнуто использованием команды localedef. Информацию об использовании этой команды можно получить из файла INSTALL в исходниках Glibc. Тем не менее, список локалей может быть существенным для некоторых тестов, в частности теста libstdc++ из GCC. Следующие команды, используемые вместо вышеописанной install-locales, установят минимальный набор локалей для успешного завершения тестирований:

mkdir -pv /usr/lib/locale
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP

Некоторые локали, установленные командой make localedata/install-locales, не полностью поддерживаются некоторыми приложениями, описанными в книгах CLFS и BLFS. Поскольку такие проблемы существуют и приводят к сбоям на некотрых локалях, CLFS не может быть использована с локалями, использующими мультибайтные таблицы символов (включая UTF-8) или пишущиеся в порядке справа налево. Необходимы многочисленные неофициальные и нестабильные патчи для устранения этих проблем, поэтому разработчиками CLFS было решено не поддерживать такие комплексные локали. Это применено также к локалям ja_JP и fa_IR - они были установлены только для прохождения тестов GCC и Gettext и программы watch (части пакета Procps), которые не работают корректно в них. Некоторые попытки обойти эти ограничения описаны в интернационально-связанных заметках.

10.7.3. Конфигурация Glibc

Нам нужно создать файл /etc/nsswitch.conf потому, что по умолчанию Glibc не создаёт этот файл и без него не работает с сетью. Также необходимо установить часовой пояс.

Создадим новый файл /etc/nsswitch.conf, запустив следующую команду:

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF

Для определения Вашего часового пояса, запустите скрипт:

tzselect

Когда Вы ответите на некоторые вопросы о Вашем местонахождении, скрипт выдаст имя Вашего часового пояса, что-то наподобие Europe/Kiev. Теперь создадим файл /etc/localtime запуском следующей команды:

cp -v --remove-destination /usr/share/zoneinfo/[xxx] \
    /etc/localtime

Замените [xxx] именем часового пояса, который выдаст tzselect (например, Europe/Kiev).

Объяснение опций команды cp:

--remove-destination

Это необходимо для удаления существующей ссылки. Мы используем копию файла вместо ссылки в случае, если /usr находится на другом разделе. Также это нужно, например, когда Вы загружаетесь в однопользовательском режиме.

10.7.4. Настройка динамического загрузчика

По умолчанию, динамический загрузчик (/lib/ld-linux.so.2) ищет динамические библиотеки, необходимые для программ, в /lib и /usr/lib. Таким образом, если есть директории с библиотеками, отличные от /lib и /usr/lib, то Вам надо указать их в файле /etc/ld.so.conf в порядке поиска их динамическим загрузчиком. Две наиболее распространённые директории с дополнительными библиотеками находятся в /usr/local/lib и /opt/lib, и мы добавим их в путь поиска динамического загрузчика.

Создадим новый файл /etc/ld.so.conf запуском команды:

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF

10.7.5. Описание Glibc

Установленные программы: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic
Установленные библиотеки: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so и libutil.[a,so]

Короткие описания

catchsegv

Может быть использована для трассировки стэка, когда программа прервана с ошибкой сегментации

gencat

Генерирует каталоги сообщений

getconf

Показывает значения системных конфигураций для специфичных переменных файловой системы

getent

Получает содержимое из административной базы данных

iconv

Осуществляет конвертацию символов

iconvconfig

Создаёт быстро загружаемый iconv модуль конфигурационных файлов

ldconfig

Конфигурирует динамический компоновщик

ldd

Сообщает, какие разделяемые библиотеки требуются каждой указанной программе или разделяемой библиотеке

lddlibc4

Помагает ldd в работе с бъектными файлами

locale

Говорит компилятору разрешить или запретить использование POSIX локалей для встроенных операций

localedef

Компилирует спецификации локалей

mtrace

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

nscd

Демон, который обеспечивает кэш для большинства известных имен запросов сервисов

pcprofiledump

Распечатывает информацию, сгенерированную PC profiling

pt_chown

Программа-помощник к grantpt для установки владельца, группы и прав доступа ведомого псевдо терминала

rpcgen

Генерирует C код для встраивания в протокол вызова удалённой процедуры (Remote Procecure Call - RPC)

rpcinfo

Создаёт вызов RPC к RPC серверу

sln

Статически слинкованная программа, создающая символические ссылки

sprof

Читает и показывает профильные данные разделяемого объекта

tzselect

Спрашивает пользователя о местоположении системы и выдаёт соответствующее описание часового пояса

xtrace

Отслеживает запуск программы, печатая текущую запущенную функцию

zdump

Информация о часовом поясе

zic

Компилятор часовых поясов

ld.so

Программа-загрузчик для разделяемых библиотек

libBrokenLocale

Используется программами, такими как Mozilla, для решения проблем с повреждёнными локалями

libSegFault

Библиотека сигналов ошибки сегментации

libanl

Библиотека поиска асинхронных имен

libbsd-compat

Предоставляет совместимость, необходимую для запуска Berkey Software Distribution (BSD) программ под Linux

libc

Базовая библиотека C

libcrypt

Криптографическая библиотека

libdl

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

libg

Библиотека для g++

libieee

Библиотека для работы с числами с плавающей запятой Института "Electrical and Electronic Engineers" (IEEE)

libm

Математическая библиотека

libmcheck

Описывает запуск кода при загрузке

libmemusage

Используется программой memusage (включена в Glibc, но не собираемая в базовой CLFS системе, так как имеет дополнительные зависимости) для сбора информации об использовании памяти программами

libnsl

Библиотека сетевых сервисов

libnss

Библиотека Name Service Switch, описывающая функции для разбора имён хостов, имён пользователей, имён групп, алиасов, сервисов, протоколов и т.д.

libpcprofile

Содержит профильные функции, используемые для отслеживания количества времени, используемого CPU, в особых строчках исходного кода

libpthread

Библиотека POSIX-нитей

libresolv

Описывает функции для создания, посылки и интерпритации пакетов к серверам имён интернет

librpcsvc

Описывает функции, предоставляющие разнообразные RPC сервисы

librt

Описывает функции, предоставляющие большинство из интерфейсов, специфицированных POSIX.1b Realtime Extension

libthread_db

Описывает функции, полезные для построения отладчиков для multi-threaded программ

libutil

Содержит код для “стандартных” функций, используемых во многих других Юникс утилитах

10.8. Настройка инструментария

Сейчас мы изменим файл specs GCC чтобы он указывал на новый динамический компоновщик. Это выполнит команда perl:

gcc -dumpspecs | \
perl -p -e 's@/tools/lib/ld@/lib/ld@g;' \
     -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
     $(dirname $(gcc --print-libgcc-file-name))/specs

После этого также неплохо было бы визуально проверить spec файлы, чтобы убедиться в сделанных изменениях.

Заметьте, что /lib теперь является префиксом нашего компоновщика.

Предупреждение

На этом месте необходимо остановиться и убедиться, что основные функции (компиляцмя и компоновка) новых инструментов работают корректно. Для этого есть простой тест:

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /lib'

Если всё в порядке, то не будет ошибок и в выводе Вы увидите:

[Requesting program interpreter: /lib/ld-linux.so.2]

Заметьте, что /lib теперь является префиксом нашего компоновщика.

Если эта надпись вообще не появилась или появилась другая, то что-то сильно не так. Вам надо исследовать и повторить все пройденные шаги, чтобы найти в чём проблема и устранить её. Точки для возврата после этого места уже не будет. Как правило, что-то не так бывает с вышеописанной правкой specs-фала. Любые проблемы необходимо устранить перед продолжением процесса.

Если всё прошло нормально, то можно удалить тестовые файлы:

rm -v dummy.c a.out

10.9. Binutils-2.17

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

10.9.1. Установка Binutils

Проверьте, что псевдо терминалы (PTY) работают корректно внутри окружения сборки, выполнив простой тест:

expect -c "spawn ls"

Если Вы получили следующее сообщение, то Ваше окружение не может оперировать с PTY:

The system has no more ptys.
Ask your system administrator to create more.

В этом случае Вам не стоит запускать тестирование для Binutils и GCC до того, как Вы устраниете проблему.

В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../binutils-build
cd ../binutils-build

Подготавливаем Binutils к компиляции:

../binutils-2.17/configure --prefix=/usr \
    --enable-shared

Компилируем пакет:

make configure-host

Важно

Во время выполнения команды make configure-host Вы можете получить следующее сообщение об ошибке. Можете безопасно его пропустить.

WARNING: `flex' is missing on your system. You should only
need it if you modified a `.l' file. You may need the `Flex'
package in order for those modifications to take effect. You
can get `Flex' from any GNU archive site.
make tooldir=/usr

Описание параметра команды make:

tooldir=/usr

Обычно tooldir (директория, в которой окончательно размещаются бинарники) устанавливается на $(exec_prefix)/$(target_alias). Так как у нас собственная система, то эта директория в /usr не требуется.

Важно

Тестирование Binutils на этом этапе является критичным. Не пропускайте его.

Протестируем результаты:

make check

Устанавливаем пакет:

make tooldir=/usr install

Установим заголовки libiberty, которые нужны для некоторых пакетов:

cp -v ../binutils-2.17/include/libiberty.h /usr/include

10.9.2. Описание Binutils

Установленные программы: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings и strip
Установленные библиотеки: libiberty.a, libbfd.[a,so] и libopcodes.[a,so]

Короткие описания

addr2line

Транслирует адрес программы в имя файла и номер строки. Адрес и имя исполняемого файла используются с отладочной информацией бинарника для определения исходника и номера строки, ассоциированного с адресом.

ar

Создаёт, модифицирует и распаковывает из архива.

as

Ассемблер. Ассемблирует вывод gcc в объектные файлы.

c++filt

Используется компоновщиком для сортировки символов C++ и Java, для пропуска перезагрузки функций при конфликтах.

gprof

Отображает график системных вызовов.

ld

Компоновщик. Он соединяет несколько объектных и архивных файлов в один, переопределяет их данные и устанавливает символические ссылки.

nm

Выводит символы, содержащиеся в объектном файле.

objcopy

Используется для преобразования из одного типа объектного файла в другой.

objdump

Выводит информацию об объектном файле в соответствии с параметрами, определяющими, какую информацию выводить. Выводимая информация, как правило, используется программистами, работающими с инструментами компилирования.

ranlib

Генерирует список содержимого архива и сохраняет его в архиве. Список содержит все символы, определённые частями архива, которые являются объектными файлами.

readelf

Выводит информацию о типе бинарника.

size

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

strings

Выводит для каждого файла список печатных символов больше указанной длины (по умолчанию - 4). Для объектных файлов печатаются только строки из инициализационного и загружаемого разделов. Для других типов файлов выводятся все строки.

strip

Удаляет символы из объектных файлов.

libiberty

Содержит правила, используемые различными программами GNU, включая getopt, obstack, strerror, strtol и strtoul

libbfd

Библиотека двоичого дескриптора файла.

libopcodes

Библиотека для работы с опкодами — “читаемыми” версиями инструкций процессора; используется в сборке утилит вроде objdump.

10.10. GCC-4.1.1

Пакет GCC содержит коллекцию компилятора GNU, включая компиляторы C и C++.

10.10.1. Установка GCC

Следующий патч исправляет поиск мультибиблиотечных директорий для файла specs. Патч стандартизирует путь драйверов функций итераци gcc, подтверждая, что мультибиблиотечные директории ищутся в корректном порядке. Это исправляет различные проблемы, большинство из которых отмечены с libtool на мультибиблиотечных системах:

patch -Np1 -i ../gcc-4.1.1-PR20425-1.patch

Примененим замену sed, которая запретит установку libiberty.a. Вместо этого будет использована libiberty.a из Binutils:

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

GCC предоставляет скрипт gccbug, определяет во время сборки наличие mktemp и жёстко прописывает результат в тест. Если mktemp не найден, скрипт вернётся к использованию менее случайных имён для временных файлов. Мы установим mktemp позднее, поэтому следующая команда sed будет симулировать его наличие:

sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir -v ../gcc-build
cd ../gcc-build

Подготавливаем GCC к компиляции:

../gcc-4.1.1/configure --prefix=/usr \
    --libexecdir=/usr/lib --enable-shared --enable-threads=posix \
    --enable-__cxa_atexit --enable-c99 --enable-long-long \
    --enable-clocale=gnu --enable-languages=c,c++ \
    --disable-multilib --disable-libstdcxx-pch

Компилируем пакет:

make bootstrap

Важно

В этой части тестирование GCC является обязательным. Не пропускайте его.

Тестируем результат, но не останавливаемся при возникновении ошибок:

make -k check

Флаг -k используется, чтобы тест прошёл до конца и не останавливался при ошибках. Тесты GCC достаточно исчерпывающие и практически гарантируют некоторые ошибки. Для получения общего результата тестов выполните:

../gcc-4.1.1/contrib/test_summary

Для получения результата перенаправьте вывод через grep -A7 Summ.

Некоторые неожиданные ошибки не могут быть полностью исключены. Разработчики GCC обычно знают об этих проблемах, но пока их не решили.

Устанавливаем пакет:

make install

Некоторые пакеты ожидают наличие препроцессора C в директории /lib. Для поддержки таких пакетов создадим символическую ссылку:

ln -sv ../usr/bin/cpp /lib

Многие пакеты используют имя cc для вызова компилятора С. Для поддержки таких пакетов создадим ссылку:

ln -sv gcc /usr/bin/cc

10.10.2. Описание GCC

Установленные программы: c++, cc (ссылка на gcc), cpp, g++, gcc, gccbug и gcov
Установленные библиотеки: libgcc.a, libgcc_eh.a, libgcc_s.so, libmudflap.[a,so], libmudflapth.[a,so], libstdc++.[a,so] и libsupc++.a

Короткие описания

cc

C компилятор

cpp

C препроцессор; используется компилятором для извлечения #include, #define и похожих определений в исходных файлах

c++

C++ компилятор

g++

C++ компилятор

gcc

C компилятор

gccbug

Скрипт, применяемый для облегчения создания сообщений об ошибках

gcov

Содержит в себе несколько тестов; используется для анализа программ и определения, где оптимизация будет иметь наибольший эффект

libgcc

Описывает run-time поддержку для gcc

libmudflap

Библиотека libmudflap используется GCC как инструментальный указатель и для выстраивания действий

libstdc++

Стандартная C++ библиотека

libsupc++

Предоставляет поддержку шаблонов для языка програмирования C++

10.11. Coreutils-5.96

Пакет Coreutils содержит некоторые системные утилиты для показа и установки базовых системных характеристик.

10.11.1. Установка Coreutils

Предупредим Coreutils от инсталяции бинарников, которые будут инсталированы позднее в других пакетах:

patch -Np1 -i ../coreutils-5.96-suppress_uptime_kill_su-1.patch

Теперь подготавливаем Coreutils для компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Тест Coreutils делает некоторые предположения о наличии системных пользователей и групп, которых нет в минимальном текущем окружении. Поэтому перед запуском теста необходимо выполнить некоторые действия. Перейдите дальше к “Установке пакета” если не хотите выполнять тест.

Создадим две группы dummy и пользователя dummy:

echo "dummy1:x:1000:" >> /etc/group
echo "dummy2:x:1001:dummy" >> /etc/group
echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd

Теперь тест полностью подготовлен к запуску. Следующий тест проверит запуск от имени пользователя root:

make NON_ROOT_USERNAME=dummy check-root

Остальные тесты запустим как пользователь dummy:

src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"

После окончания теста удалим группы и пользователя dummy:

sed -i '/dummy/d' /etc/passwd /etc/group

Устанавливаем пакет:

make install

Переместим некоторые программы в места, указанные в FHS:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date} /bin
mv -v /usr/bin/{dd,df,echo,false,hostname,ln,ls,mkdir,mknod} /bin
mv -v /usr/bin/{mv,pwd,rm,rmdir,stty,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin

Некоторые из скриптов в пакете CLFS-Bootscripts зависят от программ в директории /usr. Так как эта директория может быть недоступна на ранних этапах загрузки, то эти программы должны быть на корневом разделе:

mv -v /usr/bin/{[,basename,head,install,nice} /bin
mv -v /usr/bin/{readlink,sleep,sync,test,touch} /bin
ln -svf ../../bin/install /usr/bin

10.11.2. Описание Coreutils

Установленные программы: [, basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami и yes

Короткие описания

basename

Возвращает имя файла по указаному полному имени с путями и суффиксами.

cat

Суммирует содержимое файлов на стандартный вывод.

chgrp

Изменяет группу-владельца для указанного файла на заданную группу.

chmod

Изменяет режим доступа к файлу на указанный. Режим может быть указан в качестве последовательности символов для изменения режима доступа или как восьмеричное число для определения нового режима.

chown

Изменяет пользователя и/или группу, которые являются владельцем файла на указанную пару пользователь:группа.

chroot

Запускает указанную команду с указанной директорией в качестве корня /.

cksum

Печатает контрольную сумму CRC и количество байт в указанном файле.

comm

Сравнивает два файла и выводит в три колонки одинаковые строки и разные.

cp

Копирует файлы.

csplit

Разделяет указанный файл на несколько других файлов, разделяя их по указанному шаблону либо по номерам строк и выводит количество байт для каждого нового файла.

cut

Печатает часть строк, соответствующих заданным параметрам.

date

Показывает текущее время в указанном формате или устанавливает системное время.

dd

Копирует файл, используя указанные размеры блоков и опциональные преобразования.

df

Показывает сколько места доступно (и используется) для всех примонтированных файловых систем или только для системы, содержащей указанные файлы.

dir

Синоним команды ls.

dircolors

Выдает команду для установки переменной окружения LS_COLOR, используемой для изменения цветовой схемы для ls.

dirname

Удаляет суффикс, не являющийся директорией, из имени файла.

du

Возвращает место на диске, занимаемое указанной или текущей директориями со всеми вложенными директориями или файлами.

echo

Показывает заданную строку.

env

Запускает команду в измененном окружении.

expand

Заменяет знаки табуляции пробелами.

expr

Вычисляет выражения.

factor

Выводит разложение на простые множители всех указанных целых чисел.

false

Ничего не делает, но всегда завершается со статусом ошибки.

fmt

Форматирует абзацы в указанных файлах.

fold

Переносит строки в заданных фалах.

groups

Выводит группу, к которой принадлежит пользователь.

head

Печатает первые десять строк файла (или указанное число строк).

hostid

Возвращает числовой идентификатор хоста (в шестнадцатиричном формате).

hostname

Возвращает установленное имя хоста.

id

Возвращает ID пользователя, ID группы и группу к которой принадлежит текущий или заданный пользователь.

install

Копирует файлы, устанавливая им режим доступа и, если возможно, их владельца и группу.

join

Соединяет строки двух файлов в поля.

link

Создаёт жёсткую ссылку на указанное имя или файл.

ln

Создаёт жёсткую или символическую ссылку на файлы.

logname

Возвращает идентификационное имя текущего пользователя.

ls

Выводит содержимое указанной директории. По умолчанию - в алфавитном порядке подкаталоги и файлы.

md5sum

Возвращает контрольную сумму MD5.

mkdir

Создаёт директорию с указанным именем.

mkfifo

Создаёт FIFO “именованный канал” UNIX способом с заданным именем.

mknod

Создаёт элемент устройства с заданным именем. Элемент устройства может быть специальным символьным фалом, блочным файлом или FIFO.

mv

Перемещает или переименовывает указанные файлы или директории.

nice

Запускает программу с измененным приоритетом выполнения.

nl

Возвращает количество строк в указанном файле.

nohup

Выполняет команду, защищённую от зависаний, с выводом в файл журнала.

od

Выводит дамп файла в восьмеричном или ином формате.

paste

Выводит строки, соответствующие заданным образцам из указанных файлов и разделённые символами табуляции.

pathchk

Проверяет корректность или портируемость имён файлов.

pinky

Упрощённый вариант finger. Возвращает некоторую информацию об указанных пользователях.

pr

Форматирует файл по страницам и колонкам для вывода на печать.

printenv

Печатает переменные окружения.

printf

Печатает заданные параметры в указанном формате - очень похож на одноимённую функцию C.

ptx

Печатает оглавление файла, определяя его по указанным ключевым словам.

pwd

Возвращает имя текущей директории.

readlink

Возвращает значение символической ссылки.

rm

Удаляет файлы или директории.

rmdir

Удаляет директорию, если она пустая.

seq

Печатает ряд чисел в заданном диапазоне с заданным шагом.

sha1sum

Возвращает или проверяет контрольную сумму 160-бит SHA1.

shred

Удаляет указанные файлы, перезаписывая занимаемые ими блоки указанным шаблоном, что очень сильно затрудняет их последующее восстановление.

sleep

Пауза на указанное время (в секундах).

sort

Сортирует строки заданных файлов.

split

Разрезает указанный файл на части заданного размера или по номерам строк.

stat

Показывает статус файла или файловой системы.

stty

Устанавливает или печатает установки терминала.

sum

Печатает контрольную сумму и количество блоков для указанного файла.

sync

Переключает буфер файловой системы. Он принудительно записывает изменённые блоки на диск и обновляет super block.

tac

Выводит содержимое указанных файлов в обратном порядке.

tail

Печатает последние десять строк (или указанное их количество) заданного файла.

tee

Считывает данные со стандартного ввода и записывает их в файл, дублируя на устройстве стандартного вывода.

test или [

Сравнивает значения и проверяет типы файлов.

touch

Изменяет время изменения файла, устанавливает доступ к файлу. Если файл не существует, то он будет создан с нулевой длиной.

tr

Заменяет, вставляет и удаляет символы со стандартного ввода.

true

Ничего не делает, но всегда возвращает результат успешно завершённой операции.

tsort

Проводит топологическую сортировку. Он выводит полностью отсортированный список с учётом уже произведённой сортировки указанного файла.

tty

Возвращает имя файла терминала, присоединённого к стандартному вводу.

uname

Выводит информацию о системе.

unexpand

Заменяет пробелы символами табуляции.

uniq

Удаляет все повторяющиеся строки из отсортированного файла.

unlink

Удаляет указанный файл.

users

Выводит список подключённых к системе пользователей.

vdir

То же самое, что ls -l

wc

Выводит количество строк, слов и байт в указанном файле и общее количество строк, если указано более одного файла.

who

Сообщает, кто сейчас подключён.

whoami

Возвращает имя пользователя, соответствующее текущему ID.

yes

Выводит циклически “y” или заданную строку, после чего завершается.

10.12. Iana-Etc-2.10

Iana-Etc содержит данные для сетевых сервисов и протоколов.

10.12.1. Установка Iana-Etc

Следующая команда преобразует сырые данные, предоставляемые IANA, в корректные форматы для файлов /etc/protocols и /etc/services:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.12.2. Описание Iana-Etc

Установленные файлы: /etc/protocols и /etc/services

Короткие описания

/etc/protocols

Описывает некоторые DARPA Интернет протоколы, которые доступны из TCP/IP подсистемы

/etc/services

Предоставляет соответствие между дружественными текстовыми именами для интернет сервисов и их основными определёнными номерами портов и типами протоколов

10.13. M4-1.4.4

Пакет M4 является макро процессором.

10.13.1. Установка M4

Подготавливаем M4 к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.13.2. Описание M4

Установленная программа: m4

Короткие описания

m4

Копирует ввод на вывод, используя макросы. Макросы могут быть как встроенными, так и пользовательскими и могут иметь несколько аргументов. Помимо макро-преобразований, m4 имеет встроенные функции для включения именованных файлов, запуска команд Unix, целочисленной арифметики, разносторонними манипуляциями с текстом, рекурсию и др. Программа m4 может использоваться в качестве front-end для компиляторов или как макропроцессор на Ваше усмотрение

10.14. Bison-2.3

Bison является генератором парсеров.

10.14.1. Установка Bison

Подготавливаем Bison к компиляции:

./configure --prefix=/usr

При конфигурировании системы bison собирается без поддержки интернационализации сообщений об ошибках если программа bison не находится в переменной $PATH. Следующее дополнение исправит это:

echo '#define YYENABLE_NLS 1' >> config.h

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.14.2. Описание Bison

Установленные программы: bison и yacc
Установленная библиотека: liby.a

Короткие описания

bison

Генерирует, согласно ряду правил, программу для анализа структуры текстовых файлов; Bison заменяет Yacc (Yet Another Compiler Compiler)

yacc

Оболочка для bison, специально для программ, использующих yacc вместо bison; вызывает bison с опцией -y.

liby.a

Библиотека Yacc, содержащая Yacc-совместимые функции yyerror и main; эта библиотека практически не используется, но она упоминается в стандарте POSIX.

10.15. Ncurses-5.5

Пакет Ncurses содержит библиотеки для расширения возможностей текстового интерфейса.

10.15.1. Установка Ncurses

Подготавливаем Ncurses к компиляции:

./configure --prefix=/usr --libdir=/lib \
    --with-shared --without-debug

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Переместим статические библиотеки Ncurses в правильное место:

mv -v /lib/lib{panel,menu,form,ncurses,ncurses++,curses}.a /usr/lib

Создадим символические ссылки в /usr/lib:

rm -v /lib/lib{ncurses,menu,panel,form,curses}.so
ln -svf ../../lib/libncurses.so.5 /usr/lib/libcurses.so
ln -svf ../../lib/libncurses.so.5 /usr/lib/libncurses.so
ln -svf ../../lib/libmenu.so.5 /usr/lib/libmenu.so
ln -svf ../../lib/libpanel.so.5 /usr/lib/libpanel.so
ln -svf ../../lib/libform.so.5 /usr/lib/libform.so

Установим права доступа на запись для динамических библиотек Ncurses:

chmod -v 755 /lib/lib{panel,menu,form,ncurses}.so.5.5

10.15.2. Описание Ncurses

Установленные программы: captoinfo (ссылка на tic), clear, infocmp, infotocap (ссылка на tic), reset (ссылка на tset), tack, tic, toe, tput и tset
Установленные библиотеки: libcurses.[a,so] (ссылка на libncurses.[a,so]), libform.[a,so], libmenu.[a,so], libncurses++.a, libncurses.[a,so] и libpanel.[a,so]

Короткие описания

captoinfo

Конвертирует описание termcap в описание terminfo

clear

Очищает экран, если это возможно

infocmp

Сравнивает или печатает описания terminfo

infotocap

Конвертирует описание terminfo в описание termcap

reset

Реинициализирует терминал со значениями по умолчанию

tack

Проверяет действия terminfo. Он главным образом используется для тестирования корректировок элементов базы данных terminfo

tic

Компилятор описаний записей terminfo. Он преобразует файл terminfo из исходного формата в двоичный, необходимый для работы библиотеки ncurses. Файл terminfo содержит информацию о возможностях соответствующего терминала

toe

Выводит список всех доступных типов терминалов по их имени и описанию

tput

Делает информаию о терминале доступной шеллу. Также может использоваться для сброса или инициализации терминала или показа его полного имени

tset

Может использоваться для инициализации терминала

libcurses

Ссылка на libncurses

libncurses

Содержит функции для отображения текста разными способами на экране терминала. Хорошим примером использования этих функций является меню, отображаемое при настройке параметров ядра командой make menuconfig

libform

Содержит функции работы с формами

libmenu

Содержит функции работы с меню

libpanel

Содержит функции работы с панелями

10.16. Procps-3.2.6

Пакет Procps содержит программы для мониторинга системных процессов.

10.16.1. Установка Procps

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.16.2. Описание Procps

Установленные программы: free, kill, pgrep, pkill, pmap, ps, pwdx, skill, slabtop, snice, sysctl, tload, top, uptime, vmstat, w и watch
Установленная библиотека: libproc.so

Короткие описания

free

Возвращает информацию о свободной и используемой памяти в системе, как физической, так и виртуальной

kill

Используется для посылки сигналов процессам

pgrep

Выводит список процессов, отфильтрованный по именам и другим атрибутам

pkill

Посылает сигналы процессам по их имени или другим атрибутам

pmap

Возвращает карту памяти указанного процесса

ps

Выводит список текущих процессов

pwdx

Сообщает текущую рабочую директорию процесса

skill

Посылает сигналы процессам, попадающим под критерий

slabtop

Отображает детальную информацию о кеше ядра в реальном времени

snice

Изменяет приоритет выполнения процессов, соответствующих критериям

sysctl

Модифицирует параметры ядра во время его работы

tload

Отображает график загрузки системы

top

Отображает загрузку процессора. Используется для слежения за активностью процессора в реальном времени

uptime

Возвращает время работы системы, количество вошедших в неё пользователей и загрузку системы

vmstat

Отображает статистику виртуальной памяти, включая информацию о процессах, памяти, страницах, блоках ввода-вывода, прерываниях и активности CPU

w

Показывает сколько пользователей подключено к системе, где и как они подключились

watch

Циклически выполняет указанную команду, выводя её первый полный экран вывода. Это позволяет контролировать вывод всё время

libproc

Содержит функции, используемые большей частью программ этого пакета

10.17. Sed-4.1.5

Sed является потоковым редактором.

10.17.1. Установка Sed

Подготавливаем Sed к компиляции:

./configure --prefix=/usr --bindir=/bin --enable-html

Описание нового параметра команды configure:

--enable-html

Эта опция говорит Sed собрать и установить его HTML документацию.

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.17.2. Описание Sed

Установленная программа: sed

Короткие описания

sed

Фильтрует и трансформирует текстовые файлы за один проход

10.18. Libtool-1.5.22

GNU libtool является общей библиотекой поддержки скриптов. Libtool скрывает сложность использования системных библиотек, обеспечивая совместимый, портируемый интерфейс.

10.18.1. Установка Libtool

Подготавливаем Libtool к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.18.2. Описание Libtool

Установленные программы: libtool и libtoolize
Установленные библиотеки: libltdl.[a,so]

Короткие описания

libtool

Предоставляет общие сервисы сборки библиотек

libtoolize

Предоставляет стандартные инструменты для включения поддержки libtool в пакет

libltdl

Скрывает различные сложности библиотек dlopen

10.19. Flex-2.5.33

Пакет Flex используется для генерации программ, которые могут обрабатывать шаблоны в тексте.

10.19.1. Установка Flex

Подготавливаем Flex к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

Некоторые пакеты ищут библиотеку lex в /usr/lib. Создадим необходимую ссылку:

ln -sv libfl.a /usr/lib/libl.a

Некоторые программы не знают о flex и используют его предыдущий вариант, lex. Для поддержки таких программ создадим shell-скрипт lex который будет вызывать flex в режиме эмуляции lex:

cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex

exec /usr/bin/flex -l "$@"

# End /usr/bin/lex
EOF
chmod -v 755 /usr/bin/lex

10.19.2. Описание Flex

Установленные программы: flex и lex
Установленная библиотека: libfl.a

Короткие описания

flex

Инструмент для генерации программ, которые могут обрабатывать шаблоны в тексте; он допускает для разнообразных программ указывать правила для поиска по образцу, делая ненужной разработку специальных программы

lex

Скрипт, который запускает flex в режиме эмуляции lex

libfl.a

Библиотека flex

10.20. IPRoute2-2.6.16-060323

Пакет Iproute2 содержит программы для базовой и расширенной IPV4 сети.

10.20.1. Установка IPRoute2

Бинарник arpd, входящий в этот пакет, зависит от базы данных Berkeley. Так как arpd не очень сильно необходим в базовой Linux системе, то удалим зависимость с базой данных Berkeley DB, применив патч в следующей команде. Если бинарник arpd необходим, то инструкция по компиляции базы данных Berkeley может быть найдена в книге BLFS в http://www.linuxfromscratch.org/blfs/view/svn/server/databases.html#db.

sed -i '/^TARGETS/s@arpd@@g' misc/Makefile

Компилируем пакет:

make SBINDIR=/sbin

Описание параметра команды make:

SBINDIR=/sbin

Будем устанавливать бинарники Iproute2 в /sbin. Это корректное положение согласно требованиям FHS, потому что некоторые из бинарников Iproute2 используются в загрузочных скриптах.

В этом пакете тестов нет.

Устанавливаем пакет:

make SBINDIR=/sbin install

10.20.2. Описание IPRoute2

Установленные программы: ctstat (ссылка на lnstat), ifcfg, ifstat, ip, lnstat, nstat, routef, routel, rtacct, rtmon, rtpr, rtstat (ссылка на lnstat), ss и tc

Короткие описания

ctstat

Утилита статуса соединения

ifcfg

Скрипт-обёртка для команды ip

ifstat

Показывает статистику интерфейсов, включая информацию о переданных и принятых через интерфейс пакетах

ip

Основная исполняемая программа. Она имеет несколько различных функций:

ip link [устройство] позволяет пользователям наблюдать за состоянием устройств и вносить изменения.

ip addr позволяет пользователям наблюдать за адресами и их свойствами, добавлять новые адреса и удалять старые.

ip neighbor позволяет пользователям наблюдать за соседними связями и их свойствами, добавлять новые соседние связяи и удалять старые.

ip rule позволяет пользователям наблюдать за политикой маршрутизации и менять её.

ip route позволяет пользователям наблюдать за таблицей маршрутизации и менять правила этой таблицы.

ip tunnel позволяет пользователям наблюдать за IP тунелями, их свойствами и менять их.

ip maddr позволяет пользователям наблюдать за multicast адресами, их свойствами и менять их.

ip mroute позволяет пользователям устанавливать, менять или удалять multicast маршрутизацию.

ip monitor позволяет пользователям продолжительно наблюдать за состоянием устройств, адресами и маршрутами.

lnstat

Предоставляет статистику Linux сети. Это обобщённая и более совершенная замена для старой программы rtstat

nstat

Показывает сетевую статистику

routef

Компонент ip route. Используется для наполнения таблицы маршрутизации

routel

Компонент ip route. Используется для листинга таблицы маршрутизации

rtacct

Отображает содержание /proc/net/rt_acct

rtmon

Утилита мониторинга маршрутов

rtpr

Преобразует вывод ip -o в читаемый вид

rtstat

Утилита статуса маршрутов

ss

Похожа на команду netstat; показывает активные соединения

tc

Программа для контроля трафика; служит для включений Quality Of Service (QOS) и Class Of Service (COS)

tc qdisc позволяет пользователям устанавливать дисциплину очередей

tc class позволяет пользователям устанавливать классы, основанные на списочной дисциплине очередей

tc estimator позволяет пользователям оценивать сетевые потоки в сети

tc filter позволяет пользователям устанавливать QOS/COS фильтрацию пакетов

tc policy позволяет пользователям устанавливать QOS/COS политику

10.21. Perl-5.8.8

Пакет Perl содержит язык практичной обработки и отчётов (Practical Extraction and Report Language).

10.21.1. Установка Perl

Следующая команда sed подтвердит, что DynaLoader.a будет собран с -fPIC, поэтому позднее он может быть скомпонован в разделяемую библиотеку:

sed -i -e "s@pldlflags=''@pldlflags=\"\$cccdlflags\"@g" \
    -e "s@static_target='static'@static_target='static_pic'@g" Makefile.SH

Замечание

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

ip link set lo up
hostname clfs

Перед началом конфигурации создадим базовый файл /etc/hosts на который будет ссылка в одном из файлов конфигурации Perl. Также он используется во время тестов.

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

Если Вы хотите контролировать процесс настроек опций сборки Perl, то Вы можете запустить интерактивный скрипт Configure и указывать опции сборки Perl. Если вместо этого Вы предпочитаете использовать настройки, которые Perl определяет по умолчанию автоматически, то просто запустите команду:

./configure.gnu --prefix=/usr \
   -Dman1dir=/usr/share/man/man1 \
   -Dman3dir=/usr/share/man/man3 \
   -Dpager="/bin/less -isR" \
   -Dusethreads

Описание параметра команды configure:

-Dpager="/bin/less -isR"

Корректирует ошибку в коде perldoc, связанную с работой программы less.

-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3

Пока Groff не установлен, configure.gnu думает, что мы не хотим устанавливать страницы man для Perl. Применение этих параметров изменит это предположение.

-Dusethreads

Это говорит Perl использовать нити.

Компилируем пакет:

make

Для проверки результата выполним: make test.

Устанавливаем пакет:

make install

10.21.2. Описание Perl

Установленные программы: a2p, c2ph, cpan, dprofpp, enc2xs, find2perl, h2ph, h2xs, instmodsh, libnetcfg, perl, perl5.8.8 (ссылка на perl), perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage, podchecker, podselect, prove, psed (ссылка на s2p), pstruct (link to c2ph), s2p, splain и xsubpp
Установленные библиотеки: Несколько сотен, которые не могут быть перечислены здесь все

Короткие описания

a2p

Переводит awk в perl

c2ph

Делает дамп структур C, генерируемых cc -g -S

cpan

Скрипт оболочки, предоставляющий командный интерфейс с CPAN.pm

dprofpp

Отображает данные профиля perl

enc2xs

Собирает расширение Perl для модулей Encode из таблиц символов Unicode или файлов кодировки Tcl

find2perl

Транслирует команды find в Perl

h2ph

Конвертирует файлы заголовков .h C в файлы заголовков .ph для Perl

h2xs

Конвертирует файлы заголовков .h C в расширения Perl

libnetcfg

Используется для настройки libnet

instmodsh

Скрипт для проверки установленных модулей Perl и даже может создавать тарбол из любого установленного модуля

perl

Сочетает достоинства C, sed, awk и sh в одном мощном языке

perl5.8.8

Жёсткая ссылка на perl

perlbug

Используется для генерации отчётов об ошибках в Perl или в поставляемых с ним модулях и их отправки по E-mail

perlcc

Генерирует исполняемые файлы из программ Perl

perldoc

Выводит часть документации в формате pod, которая расположена в дереве установки perl или в скриптах perl

perlivp

Процедура верификации инсталяции Perl; может быть использована для проверки корректности установки Perl и его библиотек

piconv

Perl версия преобразователя кодировок iconv

pl2pm

Инструмент для конвертирования файлов Perl4 .pl в модули Perl5 .pm

pod2html

Конвертирует файлы из формата pod в формат HTML

pod2latex

Конвертирует файлы из формата pod в формат LaTeX

pod2man

Конвертирует данные pod в форматированный вывод *roff

pod2text

Конвертирует данные pod в форматированный текст ASCII

pod2usage

Печатает сообщения usage из документов pod в файлах

podchecker

Проверяет синтаксис файлов документов в pod формате

podselect

Отображает выбранную часть документации pod

prove

Инструмент командной строки для запуска тестов с Test::Harness

psed

Perl-реализация потокового редактора sed

pstruct

Делает дамп C-структур, генерируемых cc -g -S

s2p

Транслирует sed в Perl

splain

Используется для пропуска полных диагностических сообщений Perl

xsubpp

Конвертирует код Perl XS в код на языке C

10.22. Readline-5.1

Пакет Readline содержит библиотеку командной строки, поддерживающую редактирование и возможности истории.

10.22.1. Установка Readline

Следующий патч содержит обновления от разработчиков. Разработчики Readline выпускают эти патчи для исправления серьёзных проблем.

patch -Np1 -i ../readline-5.1-fixes-3.patch

Подготавливаем Readline к компиляции:

./configure --prefix=/usr --libdir=/lib

Компилируем пакет:

make SHLIB_XLDFLAGS=-lncurses

Описание параметра команды make:

SHLIB_XLDFLAGS=-lncurses

Этот флаг заставляет Readline компоноваться с библиотекой libncurses.

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Дадим динамическим библиотекам Readline более подходящие права доступа:

chmod -v 755 /lib/lib{readline,history}.so*

Переместим статические библиотеки в более подходящее место:

mv -v /lib/lib{readline,history}.a /usr/lib

Затем удалим файлы .so в /lib и создадим на них ссылки в /usr/lib.

rm -v /lib/lib{readline,history}.so
ln -svf ../../lib/libreadline.so.5 /usr/lib/libreadline.so
ln -svf ../../lib/libhistory.so.5 /usr/lib/libhistory.so

10.22.2. Описание Readline

Установленные библиотеки: libhistory.[a,so] и libreadline.[a,so]

Короткие описания

libhistory

Предоставляет логичный интерфейс пользователя для вызова строк с историей

libreadline

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

10.23. Zlib-1.2.3

Пакет Zlib содержит библиотеку, которая используется некоторыми программами для своих функций сжатия и распаковки.

10.23.1. Установка Zlib

Этот патч добавляет -fPIC в нашу сборку и позволяет нам собирать статическую и разделяемую библиотеки одновременно:

patch -Np1 -i ../zlib-1.2.3-fPIC-1.patch

Подготавливаем Zlib к компиляции:

./configure --prefix=/usr --shared

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

Предыдущая команда установила файл .so в /usr/lib. Мы переместим его в /lib, а затем слинкуем его в /usr/lib:

mv -v /usr/lib/libz.so.* /lib
ln -svf ../../lib/libz.so.1 /usr/lib/libz.so

Исправим права доступа у статической библиотеки:

chmod -v 644 /usr/lib/libz.a

10.23.2. Описание Zlib

Установленные библиотеки: libz.[a,so]

Короткие описания

libz

Библиотеки, которые используются некоторыми программами для своих функций сжатия и распаковки

10.24. Autoconf-2.59

Пакет Autoconf создаёт shell скрипты, которые автоматически конфигурируют исходный код.

10.24.1. Установка Autoconf

Подготавливаем Autoconf к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check. 2 теста, которые используют Automake, пропускаются. Для охвата всего теста Autoconf может быть протестирован после установки Automake.

Устанавливаем пакет:

make install

10.24.2. Описание Autoconf

Установленные программы: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate и ifnames

Короткие описания

autoconf

Предоставляет shell-скрипты, которые автоматически настраивают исходники пакетов для адаптации к большинству Unix-подобных систем. Скрипты конфигурации создаются сомостоятельными - они работают без программы autoconf.

autoheader

Инструмент для создания шаблонов файлов с директивами C #define для настройки использования.

autom4te

Это оболочка для макропроцессора M4.

autoreconf

Автоматически запускает autoconf, autoheader, aclocal, automake, gettextize и libtoolize в корректном порядке для сохранения времени, когда сделаны изменения во временных файлах autoconf и automake.

autoscan

Помогает при создании файла configure.in для пакета программ; он проверяет исходники в дереве каталогов, ищет в них возможность возникновения проблем при переносимости и создаёт файл configure.scan, который служит предварительным файлом configure.in для пакета.

autoupdate

Модифицирует файл configure.in, обновляя имена вызова макросов autoconf.

ifnames

Помогает при написании configure.in для пакета программ. Он печатает идентификаторы, используемые пакетом в условиях препроцессора C. Если пакет уже настроен на определенную переносимость, эта программа может помочь определить, что надо проверять скрипту configure. Он может заполнить некоторые пропуски в файле configure.in, сгенерированом autoscan.

10.25. Automake-1.9.6

Automake генерирует файлы Makefile, предназначенные для использования Autoconf.

10.25.1. Установка Automake

Подготавливаем Automake к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.25.2. Описание Automake

Установленные программы: acinstall, aclocal, aclocal-1.9, automake, automake-1.9, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile, symlink-tree и ylwrap

Короткие описания

acinstall

Скрипт, устанавливающий файлы aclocal-стиля M4.

aclocal

Генерирует файлы aclocal.m4, основанные на содержимом файлов configure.in.

aclocal-1.9

Жёсткая ссылка на aclocal.

automake

Инструмент для автоматической генерации файлов Makefile.in из файлов Makefile.am. Для создания всех файлов Makefile.in для пакета, запустите программу в верхней директории пакета. При сканировании файлов configure.in он автоматчески найдёт соответствующие файлы Makefile.am и сгенерирует соответствующий файл Makefile.in.

automake-1.9

Жёсткая ссылка на automake.

compile

Оболочка для компиляторов.

config.guess

Скрипт, который определяет каноническое имя (триплет) системы - сборка, хост и тип архитектуры.

config.sub

Скрипт проверки конфигурации.

depcomp

Скрипт для компиляции програмы как таковой, генерирующий на выходе не только требования, но и информацию о зависимостях.

elisp-comp

Байт-компиляция кода Emacs Lisp.

install-sh

Скрипт, который устанавливает программу, скрипт или файл данных.

mdate-sh

Скрипт, который выводит время модификации директории или файла.

missing

Скрипт, заменяющий ряд пропущенных при инсталяции программ GNU.

mkinstalldirs

Создаёт дерево каталогов.

py-compile

Компилирует Python-программу

symlink-tree

Скрипт для создания дерева ссылок на дерево директорий и файлов.

ylwrap

Оболочка для lex и yacc

10.26. Bash-3.1

Bash - это Bourne-Again SHell.

10.26.1. Установка Bash

Если Вы скачали тарболл документации Bash и хотите установить HTML документацию, то выполните следующие команды:

tar -xvf ../bash-doc-3.1.tar.gz &&
sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.1|" \
    Makefile.in

Следующий патч содержит обновления от разработчиков. Разработчик Bash выпускает эти патчи только для устранения серьёзных проблем.

patch -Np1 -i ../bash-3.1-fixes-8.patch

Подготавливаем Bash к компиляции:

./configure --prefix=/usr --bindir=/bin \
    --without-bash-malloc --with-installed-readline

Описание параметра команды configure:

--with-installed-readline

Эта опция говорит Bash испоьзовать библиотеку readline, которая уже установлена в системе и лучше, чем встроенная версия readline.

Компилируем пакет:

make

Для проверки результата выполним: make tests.

Устанавливаем пакет:

make install

Запустим только что установленную программу bash, заменив уже запущенную:

exec /bin/bash --login +h

Замечание

Использованы параметры для создания процесса bash с интерактивной регистрацией оболочки, так что новые программы обнаруживаются и становятся доступными.

10.26.2. Описание Bash

Установленные программы: bash, bashbug и sh (ссылка на bash)

Короткие описания

bash

Широко используемый интерпритатор команд. Он поддерживает различные расширения и подстановки в получаемой командной строке, что делает его весьма мощным инструментом.

bashbug

shell-скрипт для помощи пользователю в составлении и отправке сообщения об ошибке, относящейся к bash, в стандартном формате.

sh

Ссылка на программу bash. При вызове как sh, bash запускается в режиме эмуляции исторической версии sh насколько это возможно, для большего соответствия стандартам POSIX.

10.27. Bzip2-1.0.3

Bzip2 является блочным файловым архиватором, который, как правило, сжимает лучше традиционного gzip.

10.27.1. Установка Bzip2

Применим патч для установки документации для этого пакета:

patch -Np1 -i ../bzip2-1.0.3-install_docs-1.patch

Команда bzgrep не обрабатывает '|' и '&' в именах файлов, размещённых в ней. Это позволяет произвольным командам быть запущенными с привилегиями пользователя, запустившего bzgrep. Применим следующий патч для устранения этого:

patch -Np1 -i ../bzip2-1.0.3-bzgrep_security-1.patch

Скрипт bzdiff зависит от tempfile. Удалим эту зависимость при помощи следующего патча:

patch -Np1 -i ../bzip2-1.0.3-remove_tempfile-1.patch

Пакет Bzip2 не содержит скрипта configure. Компилируем его при помощи команды:

make -f Makefile-libbz2_so
make clean

Флаг -f означает, что Bzip2 будет собран, используя другой файл Makefile, в данном случае файл Makefile-libbz2_so, который создаёт динамическую библиотеку libbz2.so и связывает Bzip2 с ней.

Перекомпилируем пакет, используя неразделяемую библиотеку, и протестируем его.

make

Замечание

При переустановке Bzip2 сначала выполните rm -vf /usr/bin/bz*, иначе следующая команда make install выпадет.

Проинсталируем программы:

make install

Установим разделяемый bzip2 бинарник в директорию /bin и сделаем некоторые символические ссылки:

cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat

10.27.2. Описание Bzip2

Установленные программы: bunzip2 (ссылка на bzip2), bzcat (ссылка на bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless и bzmore
Установленные библиотеки: libbz2.a, libbz2.so (ссылка на libbz2.so.1.0), libbz2.so.1.0 (ссылка на libbz2.so.1.0.3) и libbz2.so.1.0.3

Короткие описания

bunzip2

Декомпрессия файлов, сжатых bzip

bzcat

Декомпрессия на стандартное устройство вывода

bzcmp

Запускает cmp на файлах, сжатых bzip

bzdiff

Запускает diff на файлах, сжатых bzip

bzgrep

Запускает grep на файлах, сжатых bzip

bzegrep

Запускает egrep на файлах, сжатых bzip

bzfgrep

Запускает fgrep на файлах, сжатых bzip

bzip2

Сжимает файлы, используя алгоритм компрессии Burrows-Wheeler блочной сортировки текста с кодированием Huffman; уровень компрессии лучше, чем у сжатия более распространенными компрессорами, использующими алгоритм “Lempel-Ziv”, например gzip

bzip2recover

Пытается восстановить данные из поврежденных bzip-файлов

bzless

Запускает less на файлах, сжатых bzip

bzmore

Запускает more на файлах, сжатых bzip

libbz2*

Библиотека, включающая блочно-сортирующую компрессию данных, использующую алгоритм Burrows-Wheeler

10.28. Diffutils-2.8.7

Программы из этого пакета показывают различия между двумя файлами или директориями.

10.28.1. Установка Diffutils

Подготавливаем Diffutils к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.28.2. Описание Diffutils

Установленные программы: cmp, diff, diff3 и sdiff

Короткие описания

cmp

Сравнивает два файла и показывает, где и какие байты в них отличаются

diff

Сравнивает два файла или директирии и показывает, какие строки в файлах отличаются

diff3

Сравнивает три файла построчно

sdiff

Объединяет два файла и интерактивно выводит результат

10.29. E2fsprogs-1.39

E2fsprogs содержит ряд системных утилит для поддержки файловой системы ext2. Они также поддерживают журналируемую файловую систему ext3.

10.29.1. Установка E2fsprogs

Рекомендуется собирать E2fsprogs вне директории с исходниками:

mkdir -v build
cd build

Подготавливаем E2fsprogs к компиляции:

../configure --prefix=/usr --with-root-prefix="" \
    --enable-elf-shlibs --disable-evms

Описание параметров команды configure:

--with-root-prefix=""

Определённые программы (такие как программа e2fsck) рассматриваются как необходимые программы. Например, когда раздел /usr не примонтирован, эти программы не будут доступны. Они должны находится в таких директориях как /lib и /sbin. Если этот параметр пропущен при конфигурации E2fsprogs, то программы разместятся в директории /usr, что нам не нужно..

--enable-elf-shlibs

Создаёт разделяемую библиотеку для использования некоторыми программами из этого пакета.

--disable-evms

Отключает сборку плагина Enterprise Volume Management System (EVMS). Этот плагин не обновляется с последними внутренними EVMS интерфейсами и EVMS не инсталируется как часть базовой системы LFS, поэтому плагин не требуется. Смотрите EVMS сайт на http://evms.sourceforge.net/ для большей информации о EVMS.

Компилируем пакет:

make

Для проверки результата выполним: make check.

Установим бинарники и документацию:

make install

Установим разделяемые библиотеки:

make install-libs

10.29.2. Описание E2fsprogs

Установленные программы: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, filefrag, findfs, fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs и uuidgen.
Установленные библиотеки: libblkid.[a,so], libcom_err.[a,so], libe2p.[a,so], libext2fs.[a,so], libss.[a,so] и libuuid.[a,so]

Короткие описания

badblocks

Ищет на устройстве (обычно разделе диска) плохие блоки.

blkid

Утилита командной строки для определения и печати атрибутов блочных устройств.

chattr

Изменяет атрибуты файла в файловой системе ext2, а также ext3 файловой системы - журналируемой версии ext2 файловой системы.

compile_et

Компилятор таблицы ошибок. Он конвертирует таблицу названий кодов ошибок и сообщений в исходный код на C для использования с библиотекой com_err.

debugfs

Отладчик файловой системы. Он может использоваться для проверки и изменения состояния файловой системы ext2.

dumpe2fs

Печатает информацию о супер блоке и группе блоков для файловых систем на указанном устройстве.

e2fsck

Используется для проверки и исправления ошибок файловых систем ext2 и ext3.

e2image

Используется для сохранения критически важных данных файловой системы ext2 в файл.

e2label

Возвращает или изменяет метку тома на файловой системе ext2 на указанном устройстве.

filefrag

Сообщает о возможности плохого фрагментирования файла.

findfs

Ищет файловую систему по метке тома или UUID.

fsck

Используется для проверки и исправления ошибок файловых систем.

fsck.ext2

По умолчанию проверяет файловые системы ext2.

fsck.ext3

По умолчанию проверяет файловые системы ext3.

logsave

Сохраняет вывод команды в лог-файл.

lsattr

Выводит список атрибутов файлов на файловой системе ext2.

mk_cmds

Конвертирует таблицу команд и справочных сообщений в исходники на C для использования с библиотекой libss subsystem library

mke2fs

Используется для создания файловой системы ext2 или ext3 на указанном устройстве.

mkfs.ext2

По умолчанию создаёт ext2 файловую систему.

mkfs.ext3

По умолчанию создаёт ext3 файловую систему.

mklost+found

Используется для создания директории lost+found на файловой системе ext2. Он заранее выделяет блоки для этой директории для нужд e2fsck.

resize2fs

Используется для изменения размеров файловой системы ext2.

tune2fs

Используется для изменения настраиваемых параметров файловой системы ext2.

uuidgen

Создаёт новый универсальный уникальный идентификатор (universally unique identifier - UUID). Этот новый UUID будет уникальным среди всех созданных UUID на локальной или другой системе в прошлом и будущем.

libblkid

Содержит правила идентификации устройств и получения содержимого.

libcom_err

Содержит правила вывода стандартных ошибок.

libe2p

Используется dumpe2fs, chattr и lsattr

libext2fs

Содержит правила для работы программ уровня пользователя для манипулирования файловой системы ext2.

libss

Используется debugfs

libuuid

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

10.30. File-4.17

File является утилитой для определения типа файла.

10.30.1. Установка File

Подготавливаем File к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.30.2. Описание File

Установленные программы: file
Установленная библиотека: libmagic.[a,so]

Короткие описания

file

Пытается классифицировать каждый искомый файл; он выполняет некоторые тесты - тест файловой системы, числовые тесты и языковой тест

libmagic

Описывает шаблоны для распознавания чисел, используется программой file

10.31. Findutils-4.2.27

Пакет Findutils содержит программы для поиска файлов, в том числе "на лету" (путём рекурсивного поиска от директории и показывая только файлы, удовлетворяющие параметрам поиска) или поиск через бызу данных.

10.31.1. Установка Findutils

Подготавливаем Findutils к компиляции:

./configure --prefix=/usr --libexecdir=/usr/lib/locate \
    --localstatedir=/var/lib/locate

Описание параметров команды configure:

--localstatedir

Эта опция изменяет положение базы данных locate на /var/lib/locate, которая совместима с FHS.

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

Программа find используется некоторыми скриптами из пакета CLFS-Bootscripts. Так как /usr может не быть доступной на ранних этапах загрузки, бинарник find должен быть на корневом разделе:

mv -v /usr/bin/find /bin

Скрипт updatedb необходимо изменить для указания на новое положение find:

sed -i 's@find:=${BINDIR}@find:=/bin@' /usr/bin/updatedb

10.31.2. Описание Findutils

Установленные программы: bigram, code, find, frcode, locate, updatedb и xargs

Короткие описания

bigram

Ранее использовался для создания баз данных

code

Ранее использовался для создания баз данных locate; это предок frcode

find

Поиск файлов, удовлетворяющих особым критериям, по дереву директорий

frcode

Вызывается программой updatedb для сжатия списка файлов; компрессия уменьшает размер базы данных в четыре-пять раз

locate

Осуществляет поиск в базе данных имён файлов и сообщает имена, которые содержат искомую строку или искомый образец

updatedb

Обновляет базу данных locate; сканирует содержимое файловой системы (включая другие файловоые системы, которые подмонтированы в данный момент, если не оговорено обратное) и заносит каждое имя файла, которое находит, в базу данных

xargs

Может применяться в команде поиска по списку файлов

10.32. Gawk-3.1.5

Gawk является вариантом awk, который используется для манипуляций с текстовыми файлами.

10.32.1. Установка Gawk

Устраним проблему, приводящую к выпадению при запуске на несуществующих файлах:

patch -Np1 -i ../gawk-3.1.5-segfault_fix-1.patch

Подготавливаем Gawk к компиляции:

./configure --prefix=/usr --libexecdir=/usr/lib

Теперь устраним проблему, приводящую к ошибкам тестов Gettext:

echo '#define HAVE_LC_MESSAGES 1' >> config.h

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.32.2. Описание Gawk

Установленные программы: awk (ссылка на gawk), gawk, gawk-3.1.5, grcat, igawk, pgawk, pgawk-3.1.5 и pwcat

Короткие описания

awk

Ссылка на gawk

gawk

Используется для манипуляций с текстовыми файлами; это GNU реализация awk

gawk-3.1.5

Жёсткая ссылка на gawk

grcat

Распечатывает базу данных групп /etc/group

igawk

Даёт gawk способность включать файлы

pgawk

Профилированная версия gawk

pgawk-3.1.5

Жёсткая ссылка на pgawk

pwcat

Распечатывает базу данных паролей /etc/passwd

10.33. Gettext-0.14.5

Пакет Gettext используется для интернационализации и локализации. Программы могут быть скомпилированы с Поддержкой Родного Языка (Native Language Support - NLS) для получения возможности вывода сообщений на языке пользователя.

10.33.1. Установка Gettext

Подготавливаем Gettext к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.33.2. Описание Gettext

Установленные программы: autopoint, config.charset, config.rpath, envsubst, gettext, gettext.sh, gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext и xgettext
Установленные библиотеки: libasprintf.[a,so], libgettextlib.so, libgettextpo.[a,so] и libgettextsrc.so

Короткие описания

autopoint

Копирует файлы стандартной инфраструктуры gettext в пакет исходников.

config.charset

Выводит системо-зависимую таблицу кодов символов.

config.rpath

Выводит системо-зависимый набор переменных, описывающий как установить путь для поиска библиотек и программ.

envsubst

Заменяет переменные окружения в строки в формате shell.

gettext

Переводит сообщение на исходном языке в сообщение на языке пользователя, находя перевод в каталоге сообщений.

gettext.sh

Изначально служит в качестве библиотеки функций оболочки для gettext.

gettextize

Копирует стандартные файлы Gettext в указанную корневую директорию пакета для возможности его интернационализации.

hostname

Возвращает сетевое имя хоста в разных форматах.

msgattrib

Фильтрует сообщения каталога переводов по их атрибутам и управляет атрибутами.

msgcat

Объединяет указанные файлы .po files

msgcmp

Сравнивает два файла .po, определяя наличие строк с одинаковым msgid.

msgcomm

Ищет одинаковые сообщения, содержащиеся в указанных файлах .po.

msgconv

Преобразует каталог перевода в другую кодировку.

msgen

Создаёт каталог перевода на английский.

msgexec

Применяет команду ко всем переводам в каталоге переводов.

msgfilter

Применяет фильтр ко всем переводам в каталоге переводов.

msgfmt

Генерирует двоичный каталог сообщений из каталога переводов.

msggrep

Извлекает все сообщения из каталога перевода, которые содержат указанный шаблон или принадлежащие заданным исходным файлам.

msginit

Создаёт новый файл .po, инициализирует мета-информацию с переменными из пользовательского окружения.

msgmerge

Объединяет два перевода в один файл.

msgunfmt

Декомпилирует каталог двоичных сообщений в текст перевода.

msguniq

Унифицирует дублирующиеся переводы в каталоге переводов.

ngettext

Выводит перевод сообщения, чья форма зависит от числа, на родной язык.

xgettext

Извлекает переводы строк сообщений из указанных исходников для создания шаблона перевода.

libasprintf

Определяет класс autosprintf, который создаёт правила для форматирования вывода C в программах на C++ для использования в строках <string> и потоках <iostream>.

libgettextlib

Частная библиотека, содержащая основные правила, используемые различными программами gettext. Она не предназначена для общего использования.

libgettextpo

Используется для написания специализарованных программ, создающих файлы .po. Эта библиотека используется когда стандартных приложений, входящих в пакет gettext, не достаточно (таких как msgcomm, msgcmp, msgattrib и msgen).

libgettextsrc

Частная библиотека, содержащая основные правила, используемые различными программами gettext. Она не предназначена для общего использования.

10.34. Grep-2.5.1a

Grep является программой для поиска в содержимом файлов.

10.34.1. Установка Grep

Подготавливаем Grep к компиляции:

./configure --prefix=/usr --bindir=/bin

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.34.2. Описание Grep

Установленные программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep

Короткие описания

egrep

Печатает строки, содержащие искомый расширенный шаблон

fgrep

Печатает строки, содержащие список фиксированных отрывков строк

grep

Печатает строки, содержащие базовые регулярные выражения

10.35. Groff-1.19.2

Пакет Groff содержит некоторые программы для обработки и форматирования текста.

10.35.1. Установка Groff

Groff использует переменную окружения PAGE для определения размеров бумаги по умолчанию. При использовании в США команда PAGE=letter корректна. Если Вы живёте в другом месте, PAGE=A4 может быть предпочтительнее.

Подготавливаем Groff к компиляции:

PAGE=[paper_size] ./configure --prefix=/usr

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Некоторые программы документации, например xman, не будут работать правильно без следующих ссылок:

ln -sv soelim /usr/bin/zsoelim
ln -sv eqn /usr/bin/geqn
ln -sv tbl /usr/bin/gtbl

10.35.2. Описание Groff

Установленные программы: addftinfo, afmtodit, eqn, eqn2graph, gdiffmk, geqn (ссылка на eqn), grap2graph, grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (ссылка на tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pdfroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff и zsoelim (ссылка на soelim)

Короткие описания

addftinfo

Читает файл шрифта troff и добавляет некоторую дополнительную фонт-метрическую информацию, которая используется системой groff

afmtodit

Создаёт файл шрифта для использования с groff и grops

eqn

Компилирует описания, встроенные во фходных файлах troff в команды, понимаемые troff

eqn2graph

Конвертирует troff EQN (выравнивание) в точечное изображение

gdiffmk

Помечает отличия между файлами groff/nroff/troff

geqn

Ссылка на eqn

grap2graph

Преобразует диаграмму grap в растровое изображение

grn

groff препроцессор для файлов в формате gremlin

grodvi

Драйвер для groff, который предоставляет формат TeX dvi

groff

Оболочка для системы форматирования документов groff; обычно он запускает программу troff и пост-обработчик присваивается для выбранного устройства

groffer

Показывает файлы groff и документы в формате man на X и tty терминалах

grog

Читает файлы и определяет, какие из опций groff -e, -man, -me, -mm, -ms, -p, -s и -t необходимы для печати файлов и сообщает groff команду, включающую эти опции

grolbp

Это groff драйвер для принтеров Canon CAPSL (лазерные принтеры серий LBP-4 и LBP-8)

grolj4

Драйвер для groff который обеспечивает вывод в формате PCL5 для принтера, совместимого с HP Laserjet 4

grops

Переводит вывод GNU troff в PostScript

grotty

Переводит вывод GNU troff в форму, подходящую для символьно-печатающих устройств

gtbl

Ссылка на tbl

hpftodit

Создаёт файл шрифта для использования с groff -Tlj4 из HP-tagged файла метрического шрифта

indxbib

Создаёт инвертированный индекс для библиографических баз данных с специфицированным файлом для использования с refer, lookbib и lkbib

lkbib

Осуществляет поиск ссылок, содержащих специфичные ключи, по библиографическим базам данных и сообщает о наличии любых ссылок

lookbib

Печатает приглашение на устройство стандартной ошибки (если устройство стандартного ввода не терминал), читает строку, содержащую установку ключевых слов с устройства стандартного ввода, ищет библиографические базы данных в специфицированном файле для поиска ссылок, содержащих эти ключевые слова, печатает любые найденные ссылки на устройство стандартного вывода и повторяет этот процесс до окончания ввода

mmroff

Простой препроцессор для groff

neqn

Форматирует выравнивание для American Standard Code для Information Interchange (ASCII) вывода

nroff

Скрипт, эмулирующий команду nroff, используя groff

pdfroff

Создаёт pdf документы используя groff

pfbtops

Транслирует PostScript шрифт в формате .pfb в ASCII

pic

Компилирует описания изображений, встроенные во входные файлы troff или TeX в команды, понимаемые TeX или troff

pic2graph

Конвертирует диаграммы PIC в растровые изображения

post-grohtml

Переводит вывод GNU troff в HTML

pre-grohtml

Переводит вывод GNU troff в HTML

refer

Копирует содержание файла на устройство стандартного вывода, исключая строки между .[ и .], интерпретированные как цитаты, и строки между .R1 и .R2, интерпретированные как команды, так как цитаты должны быть обработаны

soelim

Читает файлы и заменяет строки в форме .so файла по содержанию запомненного файла

tbl

Компилирует описания таблиц, встроенные во входные файлы troff в команды, понимаемые troff

tfmtodit

Создаёт файл шрифта для использования с groff -Tdvi

troff

Наиболее совместимый с Unix troff; обычно помагает использованию команды groff, которая будет также запускать препроцессор и постпроцессор в порядке присвоения и в присвоении опций

zsoelim

Ссылка на soelim

10.36. Gzip-1.3.5

Пакет Gzip содержит программы для сжатия и распаковки файлов.

10.36.1. Установка Gzip

Следующий патч устраняет две уязвимости безопасности Gzip.

patch -Np1 -i ../gzip-1.3.5-security_fixes-1.patch

Команда gzexe вызывает tail с опциями, которые не соответствуют новым версиям стандарта POSIX, а поэтому не приняты текущими версиями Coreutils. Исправим эту проблему выполнением следующей команды:

sed -i 's/tail +/tail -n +/' gzexe.in

Подготавливаем Gzip к компиляции:

./configure --prefix=/usr

Скрипт gzexe имеет встроенный путь к бинарнику gzip. Поскольку мы позднее изменим положение этого файла, следующая команда позволит встроить новый путь в бинарник:

sed -i 's@"BINDIR"@/bin@g' gzexe.in

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Переместим программу gzip в директорию /bin и создадим некоторые ссылки на них:

mv -v /usr/bin/gzip /bin
rm -v /usr/bin/{gunzip,zcat}
ln -sv gzip /bin/gunzip
ln -sv gzip /bin/zcat
ln -sv gzip /bin/compress
ln -sv gunzip /bin/uncompress

10.36.2. Описание Gzip

Установленные программы: compress (ссылка на gzip), gunzip (ссылка на gzip), gzexe, gzip, uncompress (ссылка на gunzip), zcat (ссылка на gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore и znew

Короткие описания

compress

Сжимает и разжимает файлы

gunzip

Распаковывает gzip-файлы

gzexe

Создаёт самораспаковывающиеся файлы

gzip

Сжимает файлы, используя кодирование Lempel-Ziv (LZ77)

uncompress

Распаковывает сжатые файлы

zcat

Распаковывает gzip-файлы на устройство стандартного вывода

zcmp

Запускает cmp на gzip-файлах

zdiff

Запускает diff на gzip-файлах

zegrep

Запускает egrep на gzip-файлах

zfgrep

Запускает fgrep на gzip-файлах

zforce

Принудительно устанавливает расширение .gz на всех выбранных gzip-файлах, поэтому gzip не будет сжимать их опять; это может быть полезно, когда имя файла было изменено во время передачи файла

zgrep

Запускает grep на gzip-файлах

zless

Запускает less на gzip-файлах

zmore

Запускает more на gzip-файлах

znew

Пересжимает файлы из формата compress в формат gzip.Z в .gz

10.37. Inetutils-1.4.2

Пакет Inetutils содержит сетевые клиенты и серверы.

10.37.1. Установка Inetutils

Не все программы, входящие в Inetutils, будут установлены. Система установки Inetutils будет настаивать на установке всех страниц man. Следующий патч исправит эту ситуацию:

patch -Np1 -i ../inetutils-1.4.2-no_server_man_pages-1.patch

Этот патч исправит проблему сборки с GCC 4.1.1:

patch -Np1 -i ../inetutils-1.4.2-gcc4_fixes-3.patch

Этот патч устраняет проблему, при которой telnet на некоторых машинах будет посылать только на 255.255.255.255. Это привело к изменениям в способе поддержки inet_addr в glibc. Применим следующий патч для исправления этой проблемы:

patch -Np1 -i ../inetutils-1.4.2-inet_addr_fix-1.patch

Подготавливаем Inetutils к компиляции:

./configure --prefix=/usr --libexecdir=/usr/sbin \
    --sysconfdir=/etc --localstatedir=/var \
    --disable-logger --disable-syslogd \
    --disable-whois --disable-servers

Описание параметров команды configure:

--disable-logger

Этот параметр запрещает inetutils установку программы ведения логов, которая использует скрипты для отправки сообщений System Log Daemon. Мы не устанавливаем его потому, что Util-linux установит потом лучшую версию этой программы.

--disable-syslogd

Этот параметр запрещет inetutils установку System Log Daemon, который мы установим с пакетом Sysklogd.

--disable-whois

Этот параметр отключает сборку клиента whois, который является сильно устаревшим. Инструкции по установке лучшей версии клиента whois Вы найдете в книге BLFS.

--disable-servers

Этот параметр отключит установку ряда сетевых серверов как части пакета Inetutils. Эти серверы не нужны на простой CLFS системе. Некоторые из них являются небезопасными и могут быть запущеными только в доверенной сети. Более полную информацию можно получить на http://www.linuxfromscratch.org/blfs/view/svn/basicnet/inetutils.html. Заметьте, что есть лучшие альтернативы для многих из этих серверов.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Переместим программу ping в FHS-совместимое место:

mv -v /usr/bin/ping /bin

10.37.2. Описание Inetutils

Установленные программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp

Короткие описания

ftp

Программа для передачи данных через сеть

ping

Посылает пакеты эхо-запроса и отчитывается о времени прибытия ответа

rcp

Обеспечивает удалённое копирование файлов

rlogin

Обеспечивает удалённый вход в систему

rsh

Запускает удалённый шелл

talk

Используется для чата с другим пользователем

telnet

Интерфейс для протокола TELNET

tftp

Простая программа передачи файлов

10.38. Kbd-1.12

Пакет Kbd содержит файлы раскладок клавиатуры и утилиты для них.

10.38.1. Установка Kbd

Следующий патч устраняет проблему сборки с GCC 4.1.1:

patch -Np1 -i ../kbd-1.12-gcc4_fixes-1.patch

Подготавливаем Kbd к компиляции:

./configure --datadir=/lib/kbd

Описание параметров команды configure:

--datadir

Эта опция размещает данные Kbd и файлы раскладок клавиатуры в /lib/kbd так как они используются некоторыми скриптами из пакета CLFS-Bootscripts и должны находиться на корневом разделе.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Некоторые программы из Kbd используются скриптами из пакета CLFS-Bootscripts. Так как директория /usr может быть недоступна на ранних этапах загрузки, то эти бинарники должны быть на корневом разделе:

mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin

10.38.2. Описание Kbd

Установленные программы: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (ссылка на psfxtable), psfgettable (ссылка на psfxtable), psfstriptable (ссылка на psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setmetamode, showconsolefont, showkey, unicode_start и unicode_stop

Короткие описания

chvt

Изменяет используемый виртуальный терминал

deallocvt

Закрывает неиспользуемые виртуальные терминалы

dumpkeys

Делает дамп таблицы преобразований клавиатуры

fgconsole

Печатает номер активного виртуального терминала

getkeycodes

Печатает таблицу перевода скэнкодов в коды клавиш ядра

kbd_mode

Возвращает или устанавливает режим клавиатуры

kbdrate

Устанавливает время повтора и задержки нажатий клавиш

loadkeys

Загружает таблицу преобразований клавиатуры

loadunimap

Загружает таблицу перевода unicode-to-font ядра

mapscrn

Устаревшая программа, которая используется для загрузки заданной пользователем таблицы преобразований вывода в драйвер консоли. Теперь это делается через setfont

openvt

Запускает программу на новом виртуальном терминале (VT)

psfaddtable

Ссылка на psfxtable

psfgettable

Ссылка на psfxtable

psfstriptable

Ссылка на psfxtable

psfxtable

Поддерживает Unicode таблицу символов для консольных шрифтов

resizecons

Изменяет установленные ядром размеры консоли

setfont

Изменяет шрифт EGA/VGA на консоли

setkeycodes

Загружает таблицу скэнкодов в коды клавиш, используемую если у Вас есть неиспользуемые клавиши на клавиатуре

setleds

Устанавливает флаги клавиатуры и LED (светодиоды)

setmetamode

Определяет режим клавиши meta

showconsolefont

Отображает текущий EGA/VGA экранный шрифт консоли

showkey

Возвращает скэнкоды и коды клавиш, а также ASCII-коды нажатых на клавиатуре клавиш

unicode_start

Включает на консоли и клавиатуре режим unicode. Никогда не используйте это в CLFS, так как приложения не сконфигурированы с поддержкой UNICODE

unicode_stop

Возвращает консоль и клавиатуру из режима unicode

10.39. Less-394

Less является просмотрщиком текстовых файлов.

10.39.1. Установка Less

Подготавливаем Less к компиляции:

./configure --prefix=/usr --sysconfdir=/etc

Описание параметра команды configure:

--sysconfdir=/etc

Этот параметр укажет, что надо создавать программы с файлами конфигурации в /etc.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Перемещаем less в /bin:

mv -v /usr/bin/less /bin

10.39.2. Описание Less

Установленные программы: less, lessecho и lesskey

Короткие описания

less

Является просмотрщиком файлов. Он отображает содержимое указанного файла, позволяет его прокручивать для просмотра, находить строки и переходить к отметкам

lessecho

Нужен для расширенных метасимволов, таких как * и ? в именах файлов на системах Unix

lesskey

Используется для определения управляющих клавиш less

10.40. Make-3.81

Пакет Make содержит программу для компиляции приложений.

10.40.1. Установка Make

Подготавливаем Make к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.40.2. Описание Make

Установленная программа: make

Короткие описания

make

Автоматически определяет, какие части программы нуждаются в перекомпилировании и отдаёт команду на их компиляцию

10.41. Man-1.6d

Man является просмотрщиком man-страниц.

10.41.1. Установка Man

Необходимо сделать некоторые дополнения к исходникам Man.

Первая sed замена необходима для добавления ключа -R в переменную PAGER для правильной поддержки esc-последовательностей в Less:

sed -i 's@-is@&R@g' configure

Вторая sed замена коментирует строчку “MANPATH /usr/man” в файле man.conf для предотвращения лишних результатов при использовании таких программ, как whatis:

sed -i 's@MANPATH./usr/man@#&@g' src/man.conf.in

Подготавливаем Man к компиляции:

./configure -confdir=/etc

Описание параметров команды configure:

-confdir=/etc

Программа man будет искать файл конфигурации man.conf в директории /etc.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Замечание

Если Вы будете работать на терминале, который не поддерживает атрибуты текста, например цвет или выделение, то Вы можете отключить Select Graphic Rendition (SGR) escape-последовательности, отредактировав файл man.conf и добавив параметр -c к переменной NROFF. Если Вы используете разные типы терминалов на одном компьютере, то лучше будет выборочно добавлять переменную окружения GROFF_NO_SGR для терминалов, которые не поддерживают SGR.

Если используется 8-битная кодировка символов, то ищите строку, которая начинается с “NROFF” в /etc/man.conf, и проверьте, что она выглядит как следующая строка:

NROFF /usr/bin/nroff -Tlatin1 -mandoc

Заметьте, что “latin1” необходимо использовать даже если это не используется в кодировке установленной локали. Смысл в том, что согласно спецификации groff не имеет обозначений типа символов, установленных вне Интернациональной Организации по Стандартам (ISO) 8859-1, без некоторых неизвестных escape-кодов. Когда ман-страница форматирована, то groff думает, что она в кодировке ISO 8859-1 и этот ключ - -Tlatin1 - говорит groff использовать для вывода ту же самую кодировку. Посе этого groff не перекодирует входные символы и форматированный результат на выходе будет в той же кодировке, что и на входе, и это также можно использовать как вход для пейджера.

Это не решает проблему с неработающей программой man2dvi для локализованных man-страниц в не-ISO 8859-1 локалях. Также это не работает с мультибайтными символами. Первая проблема пока не имеет решеня. Вторая проблема не интересна, так как инсталяция СLFS не поддерживает мультибайтные символы.

Дополнительная информация с описанием сжатия страниц man и info может быть найдена в книге BLFS в http://www.linuxfromscratch.org/blfs/view/svn/postlfs/compressdoc.html.

10.41.2. Описание Man

Установленные программы: apropos, makewhatis, man, man2dvi, man2html и whatis

Короткие описания

apropos

Ищет в базе данных whatis и отображает краткое описание системной команды, которое содержит указанную строку

makewhatis

Создаёт базу данных whatis. Он рассматривает все страницы документации man в соответствующих путях и добавляет запись команды и её краткого описания в базу данных whatis

man

Форматирует и отображает запрошенную man-страницу

man2dvi

Конвертирует man-страницу в формат dvi

man2html

Конвертирует man-страницу в HTML

whatis

Ищет в базе данных whatis и отображает краткое описание системной команды, содержащей указанное ключевое слово или несколько слов

10.42. Mktemp-1.5

Пакет Mktemp содержит программы создания безопасных временных файлов в шелл-скриптах.

10.42.1. Установка Mktemp

Многие скрипты всё ещё используют программу tempfile, которая функционально похожа на mktemp. Пропатчим Mktemp для включения оболочки tempfile:

patch -Np1 -i ../mktemp-1.5-add_tempfile-3.patch

Подготавливаем Mktemp к компиляции:

./configure --prefix=/usr --with-libc

Описание параметра команды configure:

--with-libc

Это говорит программе mktemp использовать системные функции библиотеки С mkstemp и mkdtemp.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install
make install-tempfile

10.42.2. Описание Mktemp

Установленные программы: mktemp и tempfile

Короткие описания

mktemp

Создаёт временные файлы в безопасном режиме; используется в скриптах

tempfile

Создаёт временные файлы в менее безопасном режиме, чем mktemp; устанавливается для обратной совместимости

10.43. Module-Init-Tools-3.2.2

Пакет Module-Init-Tools содержит программы для поддержки модулей ядра в ядрах Linux с версией 2.5.47 или выше.

10.43.1. Установка Module-Init-Tools

Выполните следующие команды для выполнения тестов (заметьте, что команда make distclean необходима для очистки дерева исходников):

./configure &&
make check &&
make distclean

Подготавливаем Module-Init-Tools к компиляции:

./configure --prefix=/ --enable-zlib

Описание параметров команды configure:

--enable-zlib

Это позволяет пакету Module-Init-Tools поддерживать сжатые модули ядра.

Компилируем пакет:

make

Устанавливаем пакет:

make INSTALL=install install

Описание параметра команды make:

INSTALL=install

Обычно команда make install не установит бинарники, если они уже установлены. Эта опция изменит такое поведение вызовом install вместо использования скрипта по умолчанию.

10.43.2. Описание Module-Init-Tools

Установленные программы: depmod, generate-modprobe.conf, insmod, insmod.static, lsmod (ссылка на insmod), modinfo, modprobe (ссылка на insmod) и rmmod (ссылка на insmod)

Короткие описания

depmod

Создаёт файл зависимостей, основанный на символах, которые он находит в существующих установках модулей; этот файл зависимостей используется modprobe для автоматической загрузки требуемых модулей

generate-modprobe.conf

Создаёт файл modprobe.conf из существующих настроек модулей 2.2 или 2.4

insmod

Устанавливает загружаемый модуль в загружаемое ядро

insmod.static

Статически скомпилированная версия insmod

lsmod

Выводит список загруженных модулей

modinfo

Проверяет объектный файл, связанный с модулем ядра и отображает другую информацию, которую он может собрать

modprobe

Использует файл зависимости, созданный depmod, для автоматической загрузки модулей

rmmod

Выгружает загружаемый модуль из загруженного ядра

10.44. Patch-2.5.9

Пакет Patch содержит программу для модификации или создания файлов применением “patch-файла”, обычно созданного программой diff.

10.44.1. Установка Patch

Подготавливаем Patch к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.44.2. Описание Patch

Установленная программа: patch

Короткие описания

patch

Модифицирует файл в соответствии с файлом патча. Патч обычно является списком, созданным программой diff. Применив эти отличия к оригинальным файлам, patch создаёт обновлённые версии программ.

10.45. Psmisc-22.2

Пакет Psmisc содержит программы для отображения информации о процессах.

10.45.1. Установка Psmisc

Подготавливаем Psmisc к компиляции:

./configure --prefix=/usr --exec-prefix=""

Описание параметра команды configure:

--exec-prefix=""

Это необходимо для установки бинарников в /bin вместо /usr/bin. Поскольку программы Psmisc часто используются в загрузочных скриптах, то они должны быть доступны даже при недоступной файловой системе.

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Нет смысла для переноса программ pstree и pstree.x11 в /bin. Напротив, перенесём их в /usr/bin:

mv -v /bin/pstree* /usr/bin

По умолчанию программа pidof не устанавливается. Обычно это не является проблемой, поскольку устанавливаемый позже пакет Sysvinit содержит лучший вариант программы pidof. Но если Вы не собираетесь использовать Sysvinit, то Вам стоит завершить установку Psmisc созданием следующей ссылки:

ln -sv killall /bin/pidof

10.45.2. Описание Psmisc

Установленные программы: fuser, killall, pstree и pstree.x11 (ссылка на pstree)

Короткие описания

fuser

Возвращает PID процессов, которые используют указанные файлы или фаловые системы

killall

Убивает процессы по имени. Он посылает сигнал всем процессам, запущенным одной из указанных команд

oldfuser

Возвращает PID процессов, которые используют указанные файлы или фаловые системы

pstree

Отображает дерево запущенных процессов

pstree.x11

То же самое, что pstree, исключая, что она ожидает подтверждения перед исполнением

10.46. Shadow-4.0.16

Пакет Shadow содержит программы для усиления безопасности системных паролей.

10.46.1. Установка Shadow

Замечание

Если Вы захотите использовать усиленные пароли, то обратитесь к http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cracklib.html для установки Cracklib перед сборкой Shadow. Затем добавьте --with-libcrack в команду configure ниже.

Подготавливаем Shadow к компиляции:

./configure --libdir=/lib --sysconfdir=/etc --enable-shared \
    --without-libpam --without-audit --without-selinux

Описание параметров команды configure:

--sysconfdir=/etc

Говорит Shadow устанавливать свои файлы конфигурации в /etc, а не в /usr/etc.

--without-libpam

Поддержка для Linux-PAM в Shadow включена по умолчанию, хотя PAM не установлен в базовой CLFS системе, поэтому этот ключ отключает поддержку PAM в Shadow. За инструкциями по установке PAM и компоновке с ним Shadow обратитесь в http://www.linuxfromscratch.org/blfs/view/svn/postlfs/shadow.html.

--without-audit

Поддержка проверок включена по умолчанию но необходимая библиотека не установлена в базовой CLFS системе. Этот ключ отключает поддержку проверок.

--without-selinux

Поддержка selinux включена по умолчанию но selinux не собран в базовой CLFS системе и configure без этого ключа будет выпадать.

Отключим установку программы groups и её man страниц, так как Coreutils предоставляет лучшую версию:

sed -i 's/groups$(EXEEXT) //' src/Makefile
sed -i '/groups/d' man/Makefile

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

Вместо использования по умолчанию метода crypt, используем более защищённый метод шифрования паролей MD5, который также допускает использование паролей длинной более 8 символов. Также необходимо изменить положение пользовательских почтовых ящиков на /var/spool/mail, которое Shadow устанавливает по умолчанию в /var/mail. Мы сделаем это, проведя следующие изменения конфигурационного файла:

sed -i /etc/login.defs \
    -e 's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
    -e 's@/var/spool/mail@/var/mail@'

Замечание

Если Вы собрали Shadow с поддержкой Cracklib, выполните следующую замену sed для исправления пути к словарю Cracklib:

sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' /etc/login.defs

Переместим программу passwd в более правильное место:

mv -v /usr/bin/passwd /bin

Переместим динамические библиотеки в более предпочтительное место:

mv -v /lib/libshadow.*a /usr/lib
rm -v /lib/libshadow.so
ln -svf ../../lib/libshadow.so.0 /usr/lib/libshadow.so

10.46.2. Настройка Shadow

Этот пакет содержит утилиты для модификации паролей пользователей, добавления или удаления пользователей и групп и тому подобные. Мы не собираемся объяснять здесь, что такое скрытие паролей (password shadowing). Полное объяснение можно найти в файле doc/HOWTO в распакованной директории с исходниками Shadow. Сдесь мы опишем только то, что Вам понадобится, если Вы захотите использовать поддержку Shadow: программы, которые должны проверять пароли (к примеру: xdm, демоны ftp, демоны pop3) должны будут компилироваться с поддержкой 'shadow-совместимости', что надо для использования работы со скрытыми паролями.

Для использования скрытых паролей запустите следующую команду:

pwconv

А для использования скрытых групп выполните:

grpconv

Для просмотра или изменения установок по умолчанию для учётных записей нового пользователя, которого Вы создали, можете отредактировать /etc/default/useradd. Для большей информации просмотрите man useradd или http://www.linuxfromscratch.org/blfs/view/svn/postlfs/skel.html.

10.46.3. Установка пароля root

Выберите пароль для пользователя root и установите его командой:

passwd root

10.46.4. Описание Shadow

Установленные программы: chage, chfn, chpasswd, chgpasswd, chsh, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, grpck, grpconv, grpunconv, lastlog, login, logoutd, newgrp, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (ссылка на newgrp), useradd, userdel, usermod, vigr (ссылка на vipw) и vipw
Установленные библиотеки: libshadow.[a,so]

Короткие описания

chage

Используется для изменения максимального количества дней до обязательной смены пароя

chfn

Изменяет полное имя пользователя и некоторую другую информацию

chgpasswd

Используется для обновления паролей групп в групповом режиме

chpasswd

Используется для обновления паролей групп в групповом режиме

chsh

Используется для изменения шелла пользователя по умолчанию

expiry

Проверяет и изменяет правила использования паролей

faillog

Используется для обработки логов ошибочных входов в систему, для установки лимита на ошибки входа до блокирования аккаунта или для сброса счётчика этих ошибок

gpasswd

Используется для добавления или удаления членов и администраторов групп

groupadd

Создаёт группу с указанным именем

groupdel

Удаляет группу с указанным именем

groupmod

Используется для изменения имени указанной группы или её GID

grpck

Проверяет целостность файлов групп /etc/group и /etc/gshadow

grpconv

Создаёт или обновляет теневой файл групп, используя обычный файл групп

grpunconv

Обновляет /etc/group из /etc/gshadow и затем удаляет последний

lastlog

Отчитывается о входах пользователей или указанного пользователя в систему

login

Используется в начале новой сессии работы с системой

logoutd

Демон, контролирующий время регистрации и порты

newgrp

Используется для изменения текущего GID

newusers

Используется для создания или обновления пользовательских аккаунтов

nologin

Отображает сообщение о недоступном аккаунте. Разработан для использования в качестве оболочки по умолчанию для отключённых аккаунтов

passwd

Используется для изменения пароля пользователя или группы

pwck

Проверяет целостность файлов паролей /etc/passwd и /etc/shadow

pwconv

Создаёт или обновляет теневой файл паролей, используя обычный файл паролей

pwunconv

Обновляет /etc/passwd из /etc/shadow и затем удаляет последний

sg

Выполняет указанную команду с правами группы с указанным GID

su

Запускает оболочку с заменой пользователя и ID группы

useradd

Создаёт нового пользователя с указанным именем или обновляет информацию по умолчанию для новых пользователей

userdel

Удаляет указанный пользовательский аккаунт

usermod

Используется для модификации указанноко имени пользователя, UID, оболочки, группы, домашней директории и т.п

vigr

Редактирует файл /etc/group или /etc/gshadow

vipw

Редактирует файл /etc/passwd или /etc/shadow

libshadow

Содержит функции, используемые большинством программ этого пакета

10.47. Sysklogd-1.4.1

Пакет Sysklogd содержит программы для записи системных сообщений в логи, например сообщений ядра.

10.47.1. Установка Sysklogd

Следующий патч устраняет различные проблемы, включая проблему сборки Sysklogd с ядрами Linux серии 2.6:

patch -Np1 -i ../sysklogd-1.4.1-fixes-1.patch

Компилируем пакет:

make

В этом пакете тестов нет.

Устанавливаем пакет:

make install

10.47.2. Настройка Sysklogd

Создадим новый файл /etc/syslog.conf запуском команды:

cat > /etc/syslog.conf << "EOF"
# Begin /etc/syslog.conf

auth,authpriv.*                 -/var/log/auth.log
*.*;auth,authpriv.none          -/var/log/sys.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none                  -/var/log/messages.log

*.emerg                         *

# log the bootscript output:
local2.*                        -/var/log/boot.log

# End /etc/syslog.conf
EOF

10.47.3. Описание Sysklogd

Установленные программы: klogd и syslogd

Короткие описания

klogd

Системный демон для перехвата и протоколирования сообщений ядра

syslogd

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

10.48. Sysvinit-2.86

Пакет Sysvinit содержит пограммы для контроля загрузки, запуска и выключения всех других программ.

10.48.1. Установка Sysvinit

Когда изменяется уровень запуска (например, при выключении системы), init посылает сигналы TERM и KILL тем процессам, которые запустил сам init и которые не должны быть запущены на новом уровне запуска. Пока проходит этот процесс, init выводит сообщение, похожее на “Sending processes the TERM signal”, при этом кажется, что init отсылает эти сигналы всем работающим процессам. Чтобы не попасть в заблуждение, исправим это сообщение на “Sending processes started by init the TERM signal”:

sed -i 's@Sending processes@& started by init@g' \
    src/init.c

Компилируем пакет:

make -C src clobber
make -C src

Устанавливаем пакет:

make -C src install

10.48.2. Конфигурация Sysvinit

Создадим новый файл /etc/inittab запуском следующих команд:

cat > /etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600

# End /etc/inittab
EOF

Параметр -I '\033(K' говорит agetty послать эту еscape-последовательность на терминал перед остальными действиями. Эта еscape-последовательность переключает консольный набор символов на пользовательский, который может быть изменён запуском программы setfont. Стартовый скрипт console из пакета CLFS-Bootscripts вызывает программу setfont во время загрузки системы. Посылка этой еscape-последовательности необходима для людей, которые используют не-ISO 8859-1 экранный шрифт, но это не имеет эффекта для использующих английский.

10.48.3. Описание Sysvinit

Установленные программы: bootlogd, halt, init, killall5, last, lastb (ссылка на last), mesg, mountpoint, pidof (ссылка на killall5), poweroff (ссылка на halt), reboot (ссылка на halt), runlevel, shutdown, sulogin, telinit (ссылка на init), utmpdump и wall

Короткие описания

bootlogd

Направляет сообщения загрузки в лог-файл

halt

Обычно вызывает shutdown с параметром -h если текущй уровень запуска не 0, затем он отдаёт команду ядру на отключение системы, но сначала записывает в файл /var/log/wtmp что система отключается

init

Первый процесс, который стартует после инициализации аппаратуры ядром и запускает все процессы для текущего уровня запуска

killall5

Посылает сигнал всем процессам за исключением родительских процессов - таким образом он не убьёт оболочку, вызвавшую скрипт

last

Показывает, какие пользователи подключены (и отключены) в системе, просматривая файл /var/log/wtmp; он также отображает процесс загрузки и отключения системы и изменения уровней запуска

lastb

Показывает ошибки входа в систему, отмеченные в /var/log/btmp

mesg

Контролирует возможность отправки другими пользователями сообщений на текущий терминал пользователя

mountpoint

Сообщает, является ли директория точкой монтирования

pidof

Возвращает PID указанных программ

poweroff

Передаёт ядру команду на отключение системы и выключение компьютера (смотри halt)

reboot

Передаёт ядру команду на перезагрузку системы (смотри halt)

runlevel

Возвращает предыдущий и текущий уровни запуска, последний уровень запуска записан в /var/run/utmp

shutdown

Безопасно отключает систему, отсылает сигнал всем процессам и уведомляет всех подключеных пользователей

sulogin

Позволяет зарегистрироваться root; обычно используется в скрипте init при загрузке системы в однопользовательском режиме

telinit

Говорит init о необходимости смены уровня запуска

utmpdump

Отображает содержимое указанного login-файла в удобочитаемом формате

wall

Пишет сообщение всем подключённым пользователям

10.49. Tar-1.15.1

Tar является программой архивирования.

10.49.1. Установка Tar

Применим патч для устранения некоторых проблем с тестами при использовании GCC-4.1.1:

patch -Np1 -i ../tar-1.15.1-gcc4_fix_tests-1.patch

Таr имеет проблему при использовании опции -S с файлами более 4 Гб. Следующий патч устраняет эту проблему:

patch -Np1 -i ../tar-1.15.1-sparse_fix-1.patch

Этот патч устраняет проблему безопасности Tar:

patch -Np1 -i ../tar-1.15.1-security_fixes-1.patch

Подготавливаем Tar к компиляции:

./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

10.49.2. Описание Tar

Установленные программы: rmt и tar

Короткие описания

rmt

Удалённо управляет ленточным магнитным накопителем через межпроцессорное связывающее соединение

tar

Сохраняет и распаковывает файлы в и из архивов, известных как файлы tar (тарболы)

10.50. Texinfo-4.8

Пакет Texinfo содержит программы, используемые для чтения, записи и конвертирования документов Info, которые содержат системную документацию.

10.50.1. Установка Texinfo

Texinfo позволяет локальным пользователям перезаписывать произвольные файлы через ссылку, подключаемую через временные файлы. Применим следующий патч для устранения этого:

patch -Np1 -i ../texinfo-4.8-tempfile_fix-2.patch

Подготавливаем Texinfo к компиляции:

./configure --prefix=/usr

Компилируем пакет:

make

Для проверки результата выполним: make check.

Устанавливаем пакет:

make install

Система документации Info использует обычный текстовый файл для своего списка меню. Файл расположен в /usr/share/info/dir. Из-за случайных проблем в мэйкфайлах некоторых пакетов это может иногда привести к выходу в систему на этапе установки Info-документации. Если файл /usr/share/info/dir всегда требует обновления, следующие опциональные команды выполнят задачу:

cd /usr/share/info
rm dir
for f in *
do install-info $f dir 2>/dev/null
done

10.50.2. Описание Texinfo

Установленные программы: info, infokey, install-info, makeinfo, texi2dvi, texi2pdf и texindex

Короткие описания

info

Используется для чтения документов Info. Документы Info похожи на man-страницы, но содержат больше, чем простое описание опций программы. Сравните для примера man bison и info bison.

infokey

Компилирует файл с исходниками, содержащий персонализацию Info, в двоичный формат

install-info

Используется для установки файлов Info. Он обновляет записи в файле индекса info

makeinfo

Преобразует указанный файл документации исходников Texinfo в различные другие форматы: файлы Info, текст или HTML

texi2dvi

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

texi2pdf

Используется для форматирования указанного документа Texinfo в файл PDF

texindex

Используется для сортировки файла индекса Texinfo

10.51. Udev-096

Пакет Udev содержит программы для динамического создания нод устройств.

10.51.1. Установка Udev

Компилируем пакет:

make EXTRAS="extras/floppy extras/cdrom_id extras/firmware \
    extras/scsi_id extras/volume_id extras/ata_id extras/usb_id \
    extras/edd_id extras/dasd_id extras/path_id"

Описание параметра команды make:

EXTRAS="extras/floppy extras/cdrom_id extras/firmware extras/scsi_id extras/volume_id extras/ata_id extras/usb_id extras/edd_id extras/dasd_id extras/path_id"

Это собирает вспомагательные приложения, используемые с udev. Эти вспомагательные программы помагают в правильной поддержке устройств.

Если Вы хотите запустить тест, то Вам необходимо изменить жёстко прописанные ссылки на программу test:

sed -i 's@/usr/bin/test@/bin/test@' test/udev-test.pl

Для проверки результата выполним: make test.

Устанавливаем пакет:

make DESTDIR=/ \
    EXTRAS="extras/floppy extras/cdrom_id extras/firmware \
    extras/scsi_id extras/volume_id extras/ata_id extras/usb_id \
    extras/edd_id extras/dasd_id extras/path_id" install

Описание параметра команды make:

DESTDIR=/

Это предостережёт процессы сборки Udev от остановки любых процессов udevd, которые могут быть запущены в системе.

Установим необходимые вспомогательные скрипты.

install -v extras/eventrecorder.sh /lib/udev

Установим документацию, которая объясняет создание правил Udev:

install -v -m644 -D docs/writing_udev_rules/index.html \
    /usr/share/doc/udev-096/index.html

Создадим директорию для сохранения драйверов, которые могут загружаться udev:

install -dv /lib/firmware

10.51.2. Описание Udev

Установленные программы: udevcontrol, udevd, udevinfo, udevmonitor, udevsend, udevtest и udevtrigger
Установленные директории: /etc/udev

Короткие описания

udevcontrol

Настраивает опции для запуска демона udevd, например уровень логов

udevd

Демон, который упорядочивает запросы hotplug перед передачей их udev, таким образом мы избегаем некоторых неопределённых состояний

udevinfo

Позволяет пользователям запрашивать базу данных udev для получения информации о любом устройстве, находящемся в системе; также предоставляет путь для запроса любого устройства в дереве sysfs для помощи в создании правил udev

udevmonitor

Печатает события, принятые от ядра и события, которые udev посылает после обработки правил

udevsettle

Наблюдает за очередью событий Udev и выходит, если все текущие события выбраны

udevtest

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

udevtrigger

Проходит по дереву sysfs по устройствам, которые должны быть добавлены в систему

ata_id

Предоставляет Udev с уникальной строкой и дополнительной информацией (uuid, label) для устройства ATA

cdrom_id

Печатает возможности накопителя CDROM или DVDROM

create_floppy_devices

Создаёт все возможные устройства дисководов, основанные на типе CMOS

dasd_id

Читает метку из s390 блочного устройства

edd_id

Определяет дисковые накопители x86

firmware.sh

Скрипт для загрузки прошивки устройства

path_id

Предоставляет кратчайший уникальный аппаратный путь к устройству

scsi_id

Восстанавливает или генерирует уникальный SCSI идентификатор

usb_id

Определяет блочное USB устройство

vol_id

Исследует тип файловой системы и читает метку и uuid

/etc/udev

Содержит конфигурационные файлы udev, права доступа к устройтсвам и правила для именования устройств

/lib/udev

Содержит вспомагательные программы udev и статические устройства, которые копируются в /dev при загрузке

10.52. Util-linux-2.12r

Пакет Util-linux содержит ряд различных утилит. Некоторые из этих утилит используются для монтирования, размонтирования, форматирования, разбиения и обслуживания дисков, открытия портов tty и вызова сообщений ядра.

10.52.1. Замечания о совместимости с FHS

FHS рекомендует использовать директорию /var/lib/hwclock вместо обычной /etc в качестве места для расположения файла adjtime. Для обеспечения FHS-совместимости программы hwclock, выполним следующее:

sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
    hwclock/hwclock.c
mkdir -pv /var/lib/hwclock

10.52.2. Установка Util-linux

Util-linux выпадает при компилировании с новыми версиями заголовков ядра Linux. Следующий патч исправляет эту проблему:

patch -Np1 -i ../util-linux-2.12r-cramfs-1.patch

Следующий патч исправляет проблему сборки с GCC 4.1.1:

patch -Np1 -i ../util-linux-2.12r-gcc4_fixes-1.patch

Следующий патч исправляет swapon.c, который пытается найти переменную R_OK но заголовка, включающего R_OK, нет:

patch -Np1 -i ../util-linux-2.12r-missing_header-1.patch

Подготавливаем Util-linux к компиляции:

./configure

Компилируем пакет:

make HAVE_KILL=yes HAVE_SLN=yes

Описание параметров команды make:

HAVE_KILL=yes

Это предостережёт программу kill (уже установленную с Procps) от повторной сборки.

HAVE_SLN=yes

Это предостережёт программу sln (статически скомпонованный ln, уже установленный с Glibc) от повторной сборки.

В этом пакете тестов нет.

Установим пакет и переместим бинарник logger в /bin, так как это необходимо для пакета CLFS-Bootscripts:

make HAVE_KILL=yes HAVE_SLN=yes install
mv -v /usr/bin/logger /bin

10.52.3. Описание Util-linux

Установленные программы: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, flock, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, pg, pivot_root, ramsize (ссылка на rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (ссылка на rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (ссылка на swapon), swapon, tailf, tunelp, ul, umount, vidmode (ссылка на rdev), whereis и write

Короткие описания

agetty

Открывает порт tty, запрашивает имя пользователя и запускает программу login

arch

Возвращает архитектуру машины

blockdev

Позволяет вызвать ioctls блочного устройства из командной строки

cal

Отображает простой календарь

cfdisk

Используется для манипуляций с таблицей разделов указанного устройства

chkdupexe

Ищет дубликаты исполняемых файлов

col

Фильтрует перевернутые строки, поступающие с ввода

colcrt

Используется для фильтрации вывода nroff для CRT терминалов

colrm

Отфильтровывает указанные колонки

column

Форматирует указанный файл в несколько колонок

ctrlaltdel

Устанавливает функцию для комбинации клавиш Ctrl+Alt+Del для аппаратного или программного сброса

cytune

Используется для настройки параметров драйверов последовательного порта для карт Cyclades

ddate

Выдает Discordian дату или конвертирует указанную дату по Григорианскому календарю в Discordian дату

dmesg

Выводит загрузочные сообщения ядра

elvtune

Используется для настройки работы и взаимодействия блочных устройств

fdformat

Низкоуровневое форматирование дискеты

fdisk

Манипулирует таблицами разделов указанного устройства

flock

Достигает блокирования файла, a затем выполняет команду с удержанной блокировкой

fsck.cramfs

Проверяет целостность файловой системы Cramfs на указанном устройстве

fsck.minix

Проверяет целостность файловой системы Minix на указанном устройстве

getopt

Анализирует параметры командной строки

hexdump

Отображает заданный файл в шестнадцатиричном или другом указанном формате

hwclock

Читает или устанавливает аппаратные часы системы (также называемые RTC- или BIOS-часами)

ipcrm

Удаляет указанный рессурс IPC

ipcs

Отображает статус IPC

isosize

Возвращает размер файловой системы iso9660

line

Копирует строку

logger

Добавляет указанное сообщение в системный лог

look

Выводит строки, начинающиеся с указанной строки

losetup

Устанливает и управляет loop устройствами

mcookie

Генерирует "магические" (128-битные случайные шестнадцатиричные числа) ключи для xauth

mkfs

Создаёт файловую систему на устройстве (обычно на разделе жёсткого диска)

mkfs.bfs

Создаёт файловую систему SCO bfs

mkfs.cramfs

Создаёт файловую систему cramfs

mkfs.minix

Создаёт файловую систему Minix

mkswap

Инициализирует указанное устройство или файл для использования в качестве свопа

more

Фильтр для постраничного вывода текста. Но less намного лучше

mount

Присоединяет файловую систему на указанном устройстве к указанной директории в дереве системных файлов

namei

Показывает символические ссылки в указанных путях

pg

Постранично отображает текстовый файл

pivot_root

Делает указанную файловую систему корневой для текущих процессов

ramsize

Используется для установки размера RAM-диска в загрузочной карте

raw

Используется для создания сырого символьного устройства Linux на блочном устройстве

rdev

Используется для запроса и установки корневого устройства и других параметров карты загрузки

readprofile

Считывает профильную информацию ядра

rename

Переименовывает указанные файлы, заменяет указанную строку на другую

renice

Изменяет приоритет выполнения работающего процесса

rev

Переворачивает строки в указанном файле

rootflags

Устанавливает параметры корневой файловой системы в загрузочном образе

script

Создаёт скрипт терминальной сессии

setfdprm

Устанавливает пользовательские параметры дискеты

setsid

Запускает указанную программу в новой сессии

setterm

Устанавливает атрибуты терминала

sfdisk

Манипулирует таблицами разделов дисков

swapoff

Отключает устройства или файлы свопа

swapon

Подключает устройства или файлы свопа и отображает уже подключённые

tailf

Отслеживает прирост лог файла. Отображает последние 10 строк этого файла затем продолжает отображение любого нового текста в лог файле по мере его создания

tunelp

Настраивает параметры принтера

ul

Фильтр для перевода знаков подчёркивания в escape-последовательности подчёркивания для текущего терминала

umount

Отключает файловую систему от дерева системных файлов

vidmode

Устанавливает видеорежим в карте загрузки

whereis

Возвращает местоположение бинарников, исходников или man-страниц для указанной команды

write

Посылает сообщение указанному пользователю, если пользователь не отключил эту возможность

10.53. Vim-7.0

Пакет Vim содержит мощный текстовый редактор.

Альтернативы для Vim

Если Вы предпочитаете другие редакторы — такие как Emacs, Joe или Nano — загляните на http://www.linuxfromscratch.org/blfs/view/svn/postlfs/editors.html для получения инструкций по установке.

10.53.1. Установка Vim

Сначала распакуем оба архива vim-7.0.tar.bz2 и (опционально) vim-7.0-lang.tar.gz в одну и ту же директорию.

Следующий патч содержит обновления от разработчиков. Разработчик Vim выпускает эти патчи только для устранения серьёзных проблем.

patch -Np1 -i ../vim-7.0-fixes-5.patch

Изменим положение по умолчанию для файла конфигурации vimrc на /etc:

echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

Подготавливаем Vim к компиляции:

./configure --prefix=/usr --enable-multibyte

Описание параметров команды configure:

--enable-multibyte

Этот опциональный, но очень рекомендуемый ключ включает поддержку дополнений для редактирования файлов в мультибайтных кодировках символов. Это необходимо при использовании локалей с мультибайтными кодировками символов. Этот ключ также полезен для возможности редактирования текстовых файлов, изначально созданных в таких дистрибутивах Linux, как Fedora Core, который использует UTF-8 в качестве основной кодировки символов.

Компилируем пакет:

make

Для проверки результата выполним: make test. Этот тест выводит на экран большое количество хаотических символов, которые могут означать проблему с установками текущего терминала. Однако, запуск теста здесь является опциональным.

Устанавливаем пакет:

make install

Многие пользователи используют vi вместо vim. Некоторые программы, например vigr и vipw, также используют vi. Для возможности запуска vim, когда пользователи по привычке вводят vi, создадим ссылку:

ln -sv vim /usr/bin/vi

По умолчанию документация Vim установлена в /usr/share/vim. Следующая ссылка позволяет документации быть доступной через /usr/share/doc/vim-7.0. Сделаем её совместимой с положением документации для других пакетов:

ln -sv ../vim/vim70/doc /usr/share/doc/vim-7.0

Если Вы собираетесь устанавливать систему X Window, то надо будет перекомпилировать Vim после установки X. Vim содержит хорошую GUI версию редактора, который использует X и некоторые другие библиотеки при установке. Для более подробной информации прочитайте документацию по Vim и страницу по установке Vim в книге BLFS на http://www.linuxfromscratch.org/blfs/view/svn/postlfs/editors.html#postlfs-editors-vim.

10.53.2. Настройка Vim

По умолчанию vim запускается в режиме совместимости с vi. Это может быть новым для пользователей, которые пользовались другими редакторами в прошлом. Установка режима “несовместимости” включена ниже для выделения того факта, что будет использоваться новое поведениие редактора. Также напомним тем, кто захочет переключиться в режим “совместимости”, что это должно быть первой установкой в файле конфигурации. Так нужно, поскольку это изменяет другие установки и отмена должна следовать после этой установки. Создадим основной файл конфигурации vim, выполнив следующую команду:

cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc

set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
  set background=dark
endif

" End /etc/vimrc
EOF

Строка set nocompatible делает так, что vim ведёт себя более полезно (по умолчанию), чем в vi-совместимой манере. Удалите “no” для сохранения старого поведения vi. Строка set backspace=2 разрешает забой через конец строки, автоотступ и начало вставки. Строка syntax on включает подсветку синтаксиса vim. Наконец, секция if с set background=dark корректирует догадку vim о цвете заднего плана на некоторых эмуляторах терминала. Это даёт подсветку в лучшей цветовой схеме для использования с черным задним планом этих программ.

Документация о других доступных опциях может быть получена запуском следующей команды:

vim -c ':options'

10.53.3. Описание Vim

Установленные программы: efm_filter.pl, efm_perl.pl, ex (ссылка на vim), less.sh, mve.awk, pltags.pl, ref, rview (ссылка на vim), rvim (ссылка на vim), shtags.pl, tcltags, vi (ссылка на vim), view (ссылка на vim), vim, vim132, vim2html.pl, vimdiff (ссылка на vim), vimm, vimspell.sh, vimtutor и xxd

Короткие описания

efm_filter.pl

Фильтр для создания файла ошибки, который может быть прочитан vim

efm_perl.pl

Реформатирует сообщения об ошибках интерпретатора Perl для использования в режиме “quickfix” для vim

ex

Запускает vim в режиме ex

less.sh

Скрипт, запускающий vim с less.vim

mve.awk

Обрабатывает ошибки vim

pltags.pl

Создаёт файл тегов кода perl для использования vim

ref

Проверяет написание параметров

rview

Урезанная версия view; нет поддержки shell-команд и view не может быть приостановлен

rvim

Урезанная версия vim; нет поддержки shell-команд и vim не может быть приостановлен

shtags.pl

Генерирует файл тегов для скриптов perl

tcltags

Генерирует файл тегов для кода TCL

view

Запускает vim в режиме только для чтения

vi

Ссылка на vim

vim

Редактор

vim132

Запускает vim в режиме 132-колоночного терминала

vim2html.pl

Конвертирует документацию vim в HTML

vimdiff

Редактирует две или три версии файла в vim и показывает различия

vimm

Включает модель ввода DEC locator на удалённом терминале

vimspell.sh

Просматривает файл и генерирует синтаксические выражения, необходимые для подсветки в vim. Этот скрипт требует старую Unix команду spell, которая не поддерживается ни в CLFS, ни в BLFS

vimtutor

Обучает основным командам и горячим клавишам vim

xxd

Отображает бинарник в шестнадцатиричном фрмате. Он также может работать в обратном направлении, что позволяет использовать его для патча бинарников

10.54. Aboot-0.9b

Пакет aboot содержит загрузчик Alpha.

10.54.1. Установка aboot

Следующий патч исправляет проблемы сборки с GCC 4.1.1:

patch -Np1 -i ../aboot-0.9b-kernel26_gcc4_fixes-4.patch

Компилируем пакет:

make

Устанавливаем пакет:

make install

10.54.2. Описание aboot

Установленные программы: abootconf, e2writeboot, isomarkboot, swriteboot

Короткие описания

abootconf

Устанавливает номер раздела, который содержит файл конфигурации для вторичного загрузчика.

e2writeboot

Может быть использован для записи вторичного загрузчика на ext2 форматированную файловую систему (обычно на флоппи диске).

isomarkboot

Делает загружаемым iso образ.

swriteboot

Используется для записи вторичного SRM загрузчика на жёсткий диск.

10.55. Об отладочных символах

Большинство программ и библиотек по умолчанию компилируются с символами отладки (с опцией -g для gcc). Это означает, что когда отлаживается программа или библиотека, которая была собрана с включением отладочной информации, то отладчик может передать Вам не только адреса в памяти, но и имена переменных и функций.

Исключение отладочных символов существенно уменьшает размер программы или библиотеки. Чтобы получить представление о том, сколько места занимает отладочная информация, посмотрите следующее:

  • бинарник bash с отладочными символами: 1200 KБ

  • бинарник bash без отладочных символов: 480 KБ

  • файлы Glibc и GCC (/lib и /usr/lib) с отладочными символами: 87 MБ

  • файлы Glibc и GCC без отладочных символов: 16 MБ

Размер может немного меняться в зависимости от используемых компилятора и библиотеки C. Но размер между программами и библиотеками, собранными с отладочной информацией и без таковой может различаться в 2-5 раз.

Большинство людей никогда не используют отладчик, и при удалении отладочных символов освободится довольно много места на диске. В следующей части будет показано, как удалить все отладочные символы из программ и библиотек. Дополнительная информация по оптимизации системы может быть найдена в http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.

10.56. Сжатие

Если предполагаемый пользователь не програмист и не планирует заниматься отладкой программ, то место, занимаемое системой, может быть уменьшено примерно на 200 MБ удалением отладочной информации из бинарников и библиотек.

Большинство людей, использующих команды, описанные ниже, не испытывают затруднений. Поскольку очень просто сделать опечатку и сделать новую систему непригодной, то перед запуском команды strip рекомендуется сделать резервную копию текущего состояния системы.

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

logout

Затем перезайдите:

chroot ${CLFS} /tools/bin/env -i \
    HOME=/root TERM=${TERM} PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin \
    /tools/bin/bash --login

Теперь бинарники и библиотеки могут быть безопасно сжаты:

/tools/bin/find /{,usr/}{bin,lib,sbin} -type f \
   -exec /tools/bin/strip --strip-debug '{}' ';'

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

Если дисковое пространство очень компактно, то опция --strip-all может быть использована на бинарниках в /{,usr/}{bin,sbin} для получения дополнительных свободных мегабайт. Не применяйте эту опцию на библиотеках — они будут разрушены.

Глава 11. Установка системных скриптов загрузки

11.1. Вступление

Эта глава описывает установку системных загрузочных скриптов и их правильную настройку. Большинство этих скриптов будут работать без изменений, но некоторые требуют дополнительные файлы конфигурации, потому что они работают с аппаратно-зависимой информацией.

Стиль загрузочных скриптов System-V применяется в этой книге, так как он широко используется. Дополнительно есть совет, описывающий BSD-стиль загрузочных скриптов, который доступен на http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt. Поиск в списках рассылки LFS для “depinit” также часто даёт дополнительный выбор.

Если Вы используете альтернативный стиль загрузочных скриптов, то пропустите эту главу и переходите к главе Обеспечение загрузки СLFS системы.

11.2. CLFS-Bootscripts-1.0

Пакет СLFS-Bootscripts содержит набор скриптов для запуска/остановки системы CLFS во время загрузки/выключения.

11.2.1. Установка CLFS-Bootscripts

Устанавливаем пакет:

make install

11.2.2. Описание CLFS-Bootscripts

Установленные скрипты: checkfs, cleanfs, console, functions, halt, ifdown, ifup, localnet, mountfs, mountkernfs, network, rc, reboot, sendsignals, setclock, static, swap, sysklogd и template.

Короткие описания

checkfs

Проверяет файловые системы перед их монтированием (исключая журналируемые и сетевые файловые системы)

cleanfs

Удаляет файлы, которые не должны быть сохранены между перезагрузками, например в /var/run/ и /var/lock/; он пересоздаёт /var/run/utmp и удаляет возможно присутствующие файлы /etc/nologin, /fastboot и /forcefsck

console

Загружает раскладку клавиатуры и устанавливает экранный шрифт

functions

Содержит функции, разделяемые различными сскриптами, такие как ошибка и статус проверки

halt

Выключает систему

ifdown

Помагает скрипту network при выключении сетевых устройств

ifup

Помагает скрипту network при включении сетевых устройств

localnet

Устанавливает имя хоста системы и локальное петлевое устройство

mountfs

Монтирует все файловые системы, исключая сетевые или помеченные как noauto

mountkernfs

Монтирует файловые системы ядра, такие как proc

network

Настраивает сетевые интерфейсы, такие как сетевые карты, и устанавливает шлюз по умолчанию (там где применяется)

rc

Ведущий скрипт; он отвечает за запуск всех остальных скриптов по одному в последовательности, определённой именами ссылок

reboot

Перезагружает систему

sendsignals

Останавливает все процессы перед перезагрузкой или выключением системы

setclock

Переустанавливает часы ядра на локальное время, если аппаратные часы не установлены на время UTC

static

Предоставляет необходимую функциональность для назначения статических IP адресов сетевым интерфейсам

swap

Включает и выключает файлы и разделы подкачки

sysklogd

Запускает и останавливает демоны ведения логов ядра и системы

template

Заготовка для создания собственных скриптов для других демонов

11.3. Udev Rules-1.0-3

Пакет Udev Cross-LFS rules содержит необходимый набор правил для начальной работы системы.

11.3.1. Установка Udev-Rules

Устанавливаем пакет:

make install

11.3.2. Описание Udev Rules

Установленные правила: 05-udev-early.rules, 35-helper.rules, 40-modprobe.rules, 50-udev.rules, 55-sound.rules, 60-persistent-disk.rules, 61-persistent-input.rules, 90-user.rules, 95-debug.rules, load_floppy_module.sh, show_event_log, udev и udev_retry

Короткие описания

05-udev-early.rules

Правила, которые в процессе загрузки запускаются раньше других. Эти правила проверяют способность сделать соединение событий hotplug с сетью и подтверждают, что sysfs готова перед запуском других правил.

35-helper.rules

Правила, использующие вспомогательные программы.

40-modprobe.rules

Правила, использующие modprobe для загрузки модулей ядра.

50-udev.rules

Создают базовые системные устройства и права доступа.

55-sound.rules

Дают правильные права доступа аудио устройствам и восстанавливают уровни.

60-persistent-disk.rules

Позволяют постоянное именование дисковых накопителей.

61-persistent-input.rules

Позволяют постоянное именование устройств ввода.

90-user.rules

Правила, описываемые пользователем.

95-debug.rules

Правила для отладки udev.

load_floppy_module.sh

Проверяет наличие флоппи накопителя перед загрузкой модуля флоппи накопителя в память.

show_event_log

Отображает сообщения лога Udev из /var/log/messages.

udev

Будет написано.

11.4. Как эти стартовые скрипты работают?

Linux использует специальные средства загрузки, называемые SysVinit, которые основаны на концепции уровней запуска. Они могут сильно различаться от одной системы к другой и мы не можем сказать, что скрипты из <подставите сюда имя любого дистрибутива> будут работать на CLFS. У CLFS свой подход к этим скриптам, но они также соответствуют стандартам.

SysVinit (с этого момента мы будем называть его “init” работает, используя схему уровней запуска. Всего есть семь (от 0 до 6) уровней запуска (точнее, есть больше уровней запуска, но они предназначены для специальных целей и обычно не используются. Документация по init содержит более полную информацию по этому вопросу) и каждый из них сообщает компьютеру, что ему делать при запуске соответствующего уровня. Уровень запуска по умолчанию - 3. Вот описание разных уровней загрузки и их назначение:

0: выключение компьютера
1: однопользовательский режим
2: многопользовательский режим без поддержки сети
3: многопользовательский режим с поддержкой сети
4: зарезервирован или используется как 3
5: тоже самое, что и 4, но обычно для графического входа в систему (например xdm из
X-ов или kdm из KDE)
6: перезагрузка компьютера

Для изменения уровня запуска используется команда init [runlevel], где [runlevel] нужный уровень запуска. Например, для перезагрузки компьютера можно использовать команду init 6. Это и делает команда reboot, а команда halt является аналогом init 0.

Есть ряд директорий в /etc/rc.d, которые выглядят как rc?.d (где ? является уровнем запуска) и rcsysinit.d, которые содержат ряд символических ссылок. Часть из них начинается с K, другие начинаются с S, затем идут две цифры уровня инициализации. K означает остановку (kill) сервиса, а S - запуск (start). Цисло от 00 до 99 означает порядок, в котором запускаются скрипты; чем меньше номер, тем раньше вызывается скрипт. Когда init переключается на другой уровень загрузки, то одни сервисы останавливаются, другие запускаются.

Сами скрипты расположены в /etc/rc.d/init.d. Они проделывают всю работу, а ссылки только указывают на них. Ссылки остановки и запуска указывают на один и тот же скрипт в /etc/rc.d/init.d. Это возможно благодаря тому, что скрипты запукаются с различными параметрами, такими как start, stop, restart, reload и status. Когда обрабатывается ссылка К, то соответствующий скрипт вызывается с аргументом stop. Если же обрабатывается ссылка S, то скрипт вызывается с параметром start.

Но есть одно исключение. Ссылки, начинающиеся с S в директориях rc0.d и rc6.d вызываются только с параметром stop для остановки чего-либо. Это понятно, потому что когда Вы собираетесь перезагрузить или отключить систему, то Вам не надо ничего запускать, а только остановить систему.

Вот описание параметров, которые можно передавать скриптам запуска:

start

Запуск сервиса.

stop

Остановка сервиса.

restart

Сервис останавливается и запускается заново.

reload

Это команда для обновления настроек сервиса. Она обычно вызывается после изменения конфигурационного файла скрипта, но сервису не нужно перезапускаться.

status

Показывает, запущен ли сервис и какой у него PID.

Вы спокойно можете настраивать и изменять процесс загрузки (после установки Вашей системы CLFS). Файлы, описываемые здесь, являются только примерами и, возможно, Вы сделаете их лучше.

11.5. Поддержка устройств и модулей в СLFS системе

В главе Установка основных системных программ мы установили пакет Udev. Сначала мы детально расмотрим, как это работает и короткую историю предыдущих методов поддержки устройств.

Системы Linux в основном традиционно используют метод создания статических устройств, из-за чего создаётся огромное количество нод устройств в директории /dev (иногда буквально сотни нод), не смотря на наличие соответствующих реальных аппаратных устройств. Это типично для работы скрипта MAKEDEV, который содержит большое количество вызовов к программе mknod с уместными старшими и младшими номерами устройств для каждого возможного устройства, которое может существовать в мире.

Используя метод udev, только те устройства, которые обнаружены ядром, получат ноды устройств, созданные для них. Поскольку эти ноды устройств будут создаваться при каждой загрузке системы, они будут сохраняться в tmpfs (файловой системе, которая размещается непосредственно в памяти и не занимает места на диске). Ноды устройств не требуют много места на диске, поэтому используемая ими память незначительна.

11.5.1. История

В феврале 2000 года новая файловая система, названная devfs, была добавлена в ядро 2.3.46 и стала доступной в стабильных ядрах серии 2.4. Хотя сама она присутствовала в исходниках ядра, метод динамического создания устройств никогда не получал подавляющую поддержку разработчиков ядра.

Основные проблемы к такому подходу, заимствованные devfs - это способ поддержки определения, создания и именования устройств. Возможно, последняя проблема именования нод устройств была более критичной. Обычно принималось, что имена устройств доступны для конфигурации, затем политика именования устройств должна быть передана системному администратору, не навязана ему любым разработчиком. Файловая система devfs также страдала от обстоятельств, связанных с её разработкой, и не могла быть исправлена без обоснования пересмотра ядра. Для неё также не хватало новых разработчиков.

С разработкой нестабильной ветки ядра 2.5, в конце выпущенной как серия 2.6 стабильных ядер, появилась новая виртуальная файловая система, названная sysfs. Работа sysfs - это экспорт видимой для процессов системной структуры в пространстве пользователя. С таким пространством пользователя замена devfs стала более реальной.

11.5.2. Внедрение Udev

11.5.2.1. Sysfs

Файловая система sysfs была коротко упомянута выше. Одно может удивлять, как sysfs знала о присутствующих в системе устройствах и какие номера устройств должны быть использованы. Драйвера, которые были вкомпилированы прямо в ядро, регистрировали свои объекты при помощи sysfs, поскольку они определялись ядром. Для драйверов, скомпилированных в виде модулей это произойдёт после загрузки модулей. Как только файловая система sysfs примонтирована (в /sys), данные, встроеные в драйвера и зарегистрированные sysfs, становятся доступными для процессов пространства пользователя и для udev для создания нод устройств.

11.5.2.2. Стартовый скрипт Udev

Стартовый скрипт S10udev заботится о создании этих нод устройств во время загрузки Linux. Скрипт сбрасывает обработчик событий с умолчального значения /sbin/hotplug. Это выполняется так как ядру больше не нужно вызывать внешний бинарник. Вместо этого udevd будет прослушивать сокет netlink насчёт событий, которые подымаются ядром. Затем стартовый скрипт копирует любые статические ноды устройств, которые находятся в /lib/udev/devices, в /dev. Это необходимо, так как некоторые устройства, директории и символические ссылки необходимы перед тем, как станут доступными процессы поддержки динамических устройств на начальных этапах загрузки системы. Создание статических нод устройств в /lib/udev/devices также предоставляет простое окружение для устройств, которые не поддерживаются инфраструктурой поддержки динамических устройств. Затем стартовый скрипт запускает демон Udev, udevd, который будет действовать на любые получаемые события. В конце стартовый скрипт заставляет ядро переигрывать события для любых устройств, которые уже зарегистрированы, а затем ожидает, когда udevd поддержит их.

11.5.2.3. Создание нод устройств

Для получения правильных младшего и старшего номеров для устройства Udev обращается к информации, предоставляемой sysfs в /sys. Например, /sys/class/tty/vcs/dev содержит строку “7:0”. Эта строка используется udevd для созданиия ноды устройства со старшим номером 7 и младшим 0. Имена и права доступа нод, создаваемых в директории /dev, устанавливаются, используя правила, описанные в файлах в директории /etc/udev/rules.d/. Они пронумерованы в стиле, похожем на стартовые скрипты CLFS. Если udevd не может найти правила для создаваемых устройств, то по умолчанию будут установлены права доступа 660 и владелец root:root. Документация по синтаксису файла конфигурации правил Udev доступна в /usr/share/doc/udev-096/index.html.

11.5.2.4. Загрузка модулей

Драйверы устройств, скомпилированные как модули, могут содержать псевдонимы, встроенные в них. Псевдонимы видны в выводе программы modinfo и обычно связаны с шинно-специфичными идентификаторами устройств, поддерживаемыми модулем. Например, драйвер snd-fm801 поддерживает PCI устройства с ID производителя 0x1319 и ID устройства 0x0801, и имеет псевдоним “pci:v00001319d00000801sv*sd*bc04sc01i*”. Для большинства устройств драйвер шины экспортирует псевдоним драйвера, который будет поддерживать устройство через sysfs. То есть, файл /sys/bus/pci/devices/0000:00:0d.0/modalias может содержать строку “pci:v00001319d00000801sv00001319sd00001319bc04sc01i00”. Правила, которые устанавливает CLFS, заставят udevd вызвать /sbin/modprobe с содержанием переменной окружения события MODALIAS (которая будет тем же, что и содержание файла modalias в sysfs), поэтому загружаются все модули, чьи псевдонимы соответствуют этой строке после маски расширения.

В этом примере это означает, что в дополнение к snd-fm801, будет загружен устаревший (и нежелательный) драйвер forte, если он доступен. Смотрите ниже описание путей, при которых загрузка нежелательных драйверов будет предотвращена.

Ядро само по требованию способно загрузить модули для сетевых протоколов, файловых систем и поддержки локализаций.

11.5.2.5. Поддержка динамических устройств и устройств с горячим подключением

Когда Вы подключаете устройство, такое как Universal Serial Bus (USB) MP3 проигрыватель, ядро определяет, что устройство подключилось и генерирует событие. Это событие затем будет поддержано udevd как описано выше.

11.5.3. Проблемы с созданием устройств

Есть несколько известных проблем при автоматическом создании нод устройств:

11.5.3.1. Драйвер ядра не загружен автоматически

Udev будет загружать модуль, только если он имеет шинно-специфичный псевдоним и драйвер шины правильно экспортирует необходимые псевдонимы в sysfs. В других случаях, Udev произведёт загрузку модуля другими способами. С Linux-2.6.17.13, Udev загружает правильно написанные драйверы для устройств INPUT, IDE, PCI, USB, SCSI, SERIO и FireWire.

Чтобы определить, имеет ли требуемый драйвер устройства необходимую поддержку для Udev, запустите modinfo с именем модуля в качестве аргумента. Теперь попробуйте определить директорию устройства в /sys/bus и проверьте наличие в ней файла modalias.

Если файл modalias присутствует в sysfs, то драйвер поддерживает устройство и может общаться с ним напрямую, но не имеет псевдонима, это ошибка в драйвере. Загрузка драйвера из Udev без помощи и ожидание результата должно быть исправлено позже.

Если файла modalias нет в уместной директории в /sys/bus, то это означает, что разработчики ядра ещё не добавили поддержку modalias для этого типа шины. В Linux-2.6.17.13 это случай с шиной ISA. Исправление этой проблемы ожидается в следующих версиях ядра.

Udev вообще не подразумевал загрузку драйверов-“обёрток”, таких как snd-pcm-oss, и не-аппаратных драйверов, как loop.

11.5.3.2. Драйвер ядра не загружен автоматически и Udev не предназначен для его загрузки

Если модуль-“обёртка” только расширяет функциональность, предоставляемую некоторым другим модулем (т.е., snd-pcm-oss расширяет функциональность snd-pcm, делая звуковые карты доступными для приложений OSS), то настройте modprobe для загрузки обёртки после того, как Udev загрузит основной модуль. Это делается “установкой” строки в /etc/modprobe.conf. Например:

install snd-pcm /sbin/modprobe -i snd-pcm ; \
    /sbin/modprobe snd-pcm-oss ; true

Если интересующий модуль не является обёрткой и полезен сам по себе, то настройте стартовый скрипт S05modules для загрузки этого модуля во время запуска системы. Чтобы это сделать, добавьте имя модуля в файл /etc/sysconfig/modules в отдельную строку. Это также работает с модулями-обёртками, но в этом случае не оптимально.

11.5.3.3. Udev загружает нежелательный модуль

Одно из двух, или не собирайте модуль, или пометьте его в чёрном списке в файле /etc/modprobe.conf, как это выполнено с модулем forte в примере ниже:

blacklist forte

Такие модули могут быть загружены вручную при помощи команды modprobe.

11.5.3.4. Udev создаёт устройство некорректно или делает неправильные ссылки

Обычно это происходит если правило неожиданно подбирает устройство. Например, плохо написанное правило может противопоставить SCSI диск (как требовалось) и соответствующее обобщённое SCSI устройство (неправильно) по производителю. Найдите нарушенное правило и сделайте его более специфичным.

11.5.3.5. Правило Udev работает ненадёжно

Это может быть другим проявлением предыдущей проблемы. Если это не так и Ваше правило использует атрибуты sysfs, то это может быть проблемой тайминга ядра, которая будет исправлена в следующих ядрах. Сейчас Вы можете обойти это созданием правила, которое ожидает использованного атрибута sysfs и добавляет его в файл /etc/udev/rules.d/10-wait_for_sysfs.rules. Пожалуйста, сообщите разработчикам CLFS если Вы сделали так и это помогло.

11.5.3.6. Udev не создаёт устройство

Дальнейший текст подразумевает, что драйвер собран статически в ядре или уже загружен как модуль и что Вы уже проверили, что Udev не создаёт неправильно именованные устройства.

Udev не имеет информацию, необходимую для создания ноды устройства если драйвер ядра не экспортирует свои данные в sysfs. Это встречается наиболее часто со сторонними драйверами, не входящими в дерево ядра. Создайте статическую ноду устройства в /lib/udev/devices с подходящими старшим/младшим номерами (смотрите файл devices.txt внутри документации ядра или в документации, предоставляемой производителем стороннего драйвера). Статическая нода устройства будет скопирована в /dev стартовым скриптом S10udev.

11.5.3.7. Порядок именования устройств изменяется после перезагрузки

Это факт того, что Udev, по замыслу, поддерживает события и загружает модули параллельно и, таким образом, в непродиктованном порядке. Это никогда не будет “исправлено”. Вы не должны полагаться на стабильность имён устройств ядра. Вместо этого создайте свои собственные правила, которые делают символические ссылки со стабильными именами, основанными на некоторых стабильных атрибутах устройств, таких как серийный номер или вывод различных утилит *_id, установленных с Udev. Для примеров смотрите Разделе 11.13, “Создание специальных символических ссылок на устройства” и Разделе 11.14, “Настройка скрипта network”.

11.5.4. Полезное чтение

Дополнительная полезная документация доступна на следующих сайтах:

11.6. Настройка скрипта setclock

Скрипт setclock считывает время с внутренних часов Вашего компьютера, также известных как часы BIOS или CMOS. Если аппаратные часы установлены на UTC, то этот скрипт конвертирует время аппаратных часов в локальное время, используя файл /etc/localtime, (который говорит программе hwclock, в каком часовом поясе находится пользователь). Нет способа автоматического определения того, установленны ли внутренние часы Вашего компьютера в UTC или нет, поэтому нам надо будет это настроить самим.

Если Вы не помните, установлены ли аппаратные часы на время UTC, то определите это запуском команды hwclock --localtime --show. Это скажет, какое текущее время установлено относительно аппаратных часов. Если это время соответствует установленному на Ваших собственных часах, то аппаратные часы установлены на местное время. Если вывод hwclock показывает не местное время, то, скорее всего, это время UTC. Проверьте это добавлением или исключением правильного количесва часов для часового пояса в это время hwclock. Например, если Вы живёте в часовом поясе MST, который известен как GMT -0700, то добавте семь часов к местному времени.

Измените значение переменной UTC ниже на значение 0 (ноль), если аппаратные часы не установлены на время UTC.

Создадим новый файл /etc/sysconfig/clock запуском следующей команды:

cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF

Хорошие советы по настройке времени в системе CLFS находятся на http://www.linuxfromscratch.org/hints/downloads/files/time.txt. Они содержат информацию по временным зонам, UTC и переменной окружения TZ.

11.7. Настройка консоли Linux

Этот раздел описывает настройку стартового скрипта console, который устанавливает раскладку клавиатуры и консольный шрифт. Если не-ASCII символы (британский фунт и символ Евро примеры не-ASCII символов) не будут использованы и используется клавиатура US, то можете пропустить этот раздел. Без файла конфигурации стартовый скрипт console не будет ничего делать.

Скрипт console использует /etc/sysconfig/console в качестве файла конфигурации. Решите, какой шрифт и раскладка клавиатуры будут использованы. Языково-специфичный HOWTO поможет в этом (смотрите http://www.tldp.org/HOWTO/HOWTO-INDEX/other-lang.html. Подготовленный файл /etc/sysconfig/console с известными настройками для некоторых стран был установлен в пакете CLFS-Bootscripts, значит подходящий раздел может быть раскоментирован, если есть поддерживаемая страна. Если всё ещё сомневаетесь, обратитесь в директорию /usr/share/kbd для получения доступных раскладок клавиатуры и экранных шрифтов. Прочтите мануалы для loadkeys(1) и setfont(8) и определите корректные аргументы для этих программ. После определения создайте файл конфигурации следующей командой:

cat >/etc/sysconfig/console <<"EOF"
KEYMAP="[arguments for loadkeys]"
FONT="[arguments for setfont]"
EOF

Например, для испанских пользователей, желающих использовать символ Евро, (доступный нажатием AltGr+E), будут корректными следующие установки:

cat >/etc/sysconfig/console <<"EOF"
KEYMAP="es euro2"
FONT="lat9-16 -u iso01"
EOF

Замечание

Строка FONT выше корректна только для таблицы символов ISO 8859-15. Если используется ISO 8859-1, то вместо Евро будет символ фунт и корректная строка FONT должна быть такой:

FONT="lat1-16"

Если переменная KEYMAP или FONT не установлена, то скрипт console будет загружать соответствующую программу.

В некоторых раскладках клавиатуры кнопки Backspace и Delete посылают символы, отличные от соответствующих символов в раскладке клавиатуры по умолчанию, встроенной в ядро. Это путает некоторые приложения. Например Emacs при нажатии Backspace отображает свою подсказку (вместо удаления символа перед курсором). Проверим эффективность используемой раскладки клавиатуры (это работает только для i386 раскладок):

zgrep '\W14\W' [/path/to/your/keymap]

Если код 14 является клавишей Backspace вместо Delete, создайте следующий отрезок раскладки клавиатуры для устранения этой проблемы:

mkdir -pv /etc/kbd && cat > /etc/kbd/bs-sends-del <<"EOF"
                  keycode  14 = Delete Delete Delete Delete
              alt keycode  14 = Meta_Delete
        altgr alt keycode  14 = Meta_Delete
                  keycode 111 = Remove
    altgr control keycode 111 = Boot
      control alt keycode 111 = Boot
altgr control alt keycode 111 = Boot
EOF

Скажем скрипту console загружать этот отрезок после загрузки основной раскладки клавиатуры:

cat >>/etc/sysconfig/console <<"EOF"
KEYMAP_CORRECTIONS="/etc/kbd/bs-sends-del"
EOF

Для вкомпилирования раскладки клавиатуры прямо в ядро вместо установки её каждый раз при загрузке скриптом console, следуйте инструкциям, описанным в Разделе 12.3, “Linux-2.6.17.13.”. Делайте это, если уверены, что клавиатура всегда будет работать так, как ожидается, даже когда загрузитесь в эксплуатационной моде (переход init=/bin/sh в ядро), потому что скрипт console не будет запускать экранный шрифт автоматически. Это не составит много проблем так как ASCII символы будут поддерживаться корректно и маловероятно, что пользователю было бы необходимо полагаться на не-ASCII символы в течении эксплуатационной моды.

Так как раскладку клавиатуры будет устанавливать ядро, то можно убрать переменную KEYMAP в файле /etc/sysconfig/console. Если потребуется, она может быть оставлена на месте без последствий. Её сохранение может быть полезным при возможности загузки нескольких различных ядер, когда трудно узнать, что эта раскладка вкомпилирована во все ядра.

11.8. Настройка скрипта sysklogd

Скрипт sysklogd вызывает программу syslogd с параметром -m 0. Этот параметр отключает периодическую отметку времени, которую syslogd по умолчанию пишет в лог-файл каждые 20 минут. Для включения этой периодической отметки времени отредактируйте скрипт sysklogd, выполнив соответствующие изменения. Для более полной информации смотрите man syslogd.

11.9. Создание файла /etc/inputrc

Файл /etc/inputrc используется в планировании клавиатуры для специфических ситуаций. Этот файл является стартовым файлом, используемым библиотекой Readline, связанной с вводом и используемой Bash и большинством других оболочек.

Большинству людей не нужны специфичные для пользователя переназначения клавиш, поэтому команда ниже создаёт глобальный /etc/inputrc, используемый всеми. Если Вы позднее решите, что Вам нужно заменить установки по умолчанию, то Вы можете создать файл .inputrc в домашней директории пользователя с изменёнными назначениями клавиш.

Для большей информации по редактированию файла inputrc, смотрите info bash в разделе Readline Init File. info readline также хороший источник информации.

Ниже приведён базовый глобальный файл inputrc с коментариями, объясняющими действия некоторых опций. Заметьте, что коментарии не могут быть в той же строке, что и команда. Создадим файл при помощи следующей команды:

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <[email protected]>

# Не выводим ничего в первой строке
set horizontal-scroll-mode Off

# Разрешает 8-и битный ввод
set meta-flag On 
set input-meta On

# Выключаем конвертацию 8-ого бита
set convert-meta Off

# Оставляем 8-ой бит для экрана
set output-meta On

# ничего, видимый или слышимый
set bell-style none

# Все следующее - карта соответствий escape-последовательностей значений, 
# содержащихся внутри первого аргумента, к специфическим функциям 
# readline

"\eOd": backward-word
"\eOc": forward-word

# Для консоли linux
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# Для xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# Для Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line

# End /etc/inputrc
EOF

11.10. Файлы загрузки оболочки Bash

Программа-оболочка /bin/bash (далее называемая “оболочкой”) при запуске использует набор стартовых файлов для создания окружения. Каждый файл имеет специфичное использование. Файлы в директории /etc предоставляют глобальные установки. Если эквивалентные файлы присутствуют в домашней диретории, то они могут заменить глобальные установки.

Интерактивнвя регистрация оболочки запускается после успешного входа, используя /bin/login, который читает файл /etc/passwd. Интерактивнвя нерегистрированная оболочка запускается из командной строки (т.е. [prompt]$/bin/bash). Неинтерактивная оболочка обычно присутствует при загрузке стартовых скриптов. Она неинтерактивная потому, что она выполняет скрипт и не ожидает ввода от пользователя между выполнением команд.

Для большей информации смотрите info bash, раздел Bash Startup Files and Interactive Shells.

Файлы /etc/profile и ~/.bash_profile читаются, когда оболочка работает в режиме интерактивной регистрации.

Основной файл /etc/profile, описанный ниже, устанавливает некоторые переменные окружения, необходимые для поддержки различных языков. Правильная их установка даст следующий результат:

  • Вывод программ транслируется на нужном языке

  • Правильная классификация символов в буквы, цифры и другие классы. Это необходимо bash для правильного применения не-ASCII символов в командной строке при не-английской локали

  • Правилиный алфавитный порядок сортировки

  • Предпочтительный размер страницы по умолчанию

  • Правильное форматирование монетарной величины, времени и даты

Этот скрипт также устанавливает переменную окружения INPUTRC, которая заставляет Bash и Readline использовать ранее созданный файл /etc/inputrc.

Замените [ll] ниже на двух-буквенный код для требуемого языка (т.е. “en”) и [CC] на двух-буквенный код страны (т.е. “GB”). [charmap] необходимо заменить на каноническую кодировку для Вашей выбранной локали.

Список всех локалей, поддерживаемых Glibc, может быть получен запуском следующей команды:

locale -a

Локали могут иметь синонимы, т.е. “ISO-8859-1” также может быть как “iso8859-1” и “iso88591”. Некоторые приложения не могут правильно поддерживать разные синонимы, поэтому безопаснее выбирать каноническое имя выбранной локали. Для определения канонического имени выполните следующую команду, где [locale name] это вывод, выданный locale -a для Вашей предпочтительной локали (в нашем примере “en_GB.iso88591”).

LC_ALL=[locale name] locale charmap

Для локали “en_GB.iso88591” приведенная выше команда выводит:

ISO-8859-1

В результате в конце locale устанавливаеся “en_GB.ISO-8859-1”.

LC_ALL=[locale name] locale country
LC_ALL=[locale name] locale language
LC_ALL=[locale name] locale charmap
LC_ALL=[locale name] locale int_curr_symbol
LC_ALL=[locale name] locale int_prefix

Команды выше должны напечатать имя страны и языка, кодировку символов, используемую в локали, местную валюту и префикс для набора телефонного номера для текущей страны. Если команды выше будут выпадать с сообщением, похожим на одно из показанных ниже, то это означает, что Ваша локаль не была установлена в Главе 10 или не поддерживается установкой Glibc по умолчанию.

locale: Cannot set LC_* to default locale: No such file or directory

Если это произошло, то Вы должны установить выбранную локаль, используя команду localedef, или обдумать выбор другой локали. Дальнейшие инструкции подразумевают, что сообщений об ошибках от Glibc нет.

Некоторые пакеты вне CLFS также могут не достаточно поддерживать Вашу выбранную локаль. Один из примеров это библиотека X (часть системы X Window), которая выводит следующее сообщение об ошибке:

Внимание: locale not supported by Xlib, locale set to C

Иногда это возможно исправить удалением названия кодовой таблицы из описания локали, так как это не меняет кодовую таблицу, которую Glibc ассоциирует с локалью (это можно проверить запуском команды locale charmap в обеих локалях). Например, может понадобиться изменить "de_DE.ISO-8859-15@euro" на "de_DE@euro" для того, чтобы эта локаль была признана Xlib.

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

Как только правильные установки локали будут определены, создадим файл /etc/profile:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=[ll]_[CC].[charmap]
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF

Замечание

Локали “C” (по умолчанию) и “en_US” (рекомендована для англоязычных пользователей США) отличаются.

Установка раскладки клавиатуры, экранного шрифта и локале-связанных переменных окружения является только шагом интернационализации, нужным для поддержки локалей, использующих обычные однобайтовые кодировки и направление письма слева направо. Более комплексные вещи (включая UTF-8 основанные локали) требуют дополнительных шагов и дополнительных патчей, так как много приложений имеют склонность работать неправильно в таких условиях. Эти шаги и патчи не включены в книгу CLFS и такие локали не поддерживаются CLFS.

11.11. Настройка скрипта localnet

Часть скрипта localnet устанавливает имя хоста. Для этого надо настроить файл /etc/sysconfig/network.

Создадим файл /etc/sysconfig/network и укажем имя хоста запуском следующей команды:

echo "HOSTNAME=[clfs]" > /etc/sysconfig/network

[clfs] надо заменить на желаемое имя компьютера для вызова. Вам не надо здесь вводить Fully Qualified Domain Name (FQDN - полное доменное имя). Эту информацию мы позже укажем в файле /etc/hosts.

11.12. Создание файла /etc/hosts

Если сетевая карта должна быть настроена, то Вам надо определить IP-адреса, FQDN и возможные псевдонимы в файле /etc/hosts. Его синтакс следующий:

<IP address> myhost.example.org aliases

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

  Класс Сети
  A     10.0.0.0
  B     172.16.0.0 through 172.31.0.255
  C     192.168.0.0 through 192.168.255.255

Корректным IP адресом может быть 192.168.1.1. Корректным FQDN для этого IP может быть www.linuxfromscratch.org (не рекомендуется, так как это зарегистрированное доменное имя и может означать проблемы с сервером доменных имен).

Даже если Вы не собираетесь использовать сетевую карту, то Вам всё равно надо указать FQDN. Это важно для правильной работы ряда важных программ.

Создадим файл /etc/hosts, выполнив следующую команду:

cat > /etc/hosts << "EOF"
# Begin /etc/hosts (версия с сетевой картой)

127.0.0.1 localhost
[192.168.1.1] [<HOSTNAME>.example.org] [HOSTNAME]

# End /etc/hosts (версия с сетевой картой)
EOF

Значения [192.168.1.1] и [<HOSTNAME>.example.org] должны быть изменены для специфичных пользователей или требований (если IP адреса назначены сетевым/системным администратором и машина будет соединена с другой сетью).

Если сетевая карта не будет настраиваться, создайте файл /etc/hosts, выполнив следующую команду:

cat > /etc/hosts << "EOF"
# Begin /etc/hosts (версия без сетевой карты)

127.0.0.1 [<HOSTNAME>.example.org] [HOSTNAME] localhost

# End /etc/hosts (версия без сетевой карты)
EOF

11.13. Создание специальных символических ссылок на устройства

11.13.1. Символические ссылки CD-ROM

Некоторые программы, которые Вы можете захотеть установить позже (различные медиа проигрыватели) ожидают наличие символических ссылок /dev/cdrom и /dev/dvd. Также может быть удобным помещение ссылок на эти символические ссылки в /etc/fstab. Для каждого из Ваших CD-ROM накопителей найдите соответствующую директорию в /sys (т.е., это может быть /sys/block/hdd) и запустите команду, похожую на следующую:

udevtest /block/hdd

Смотрите на строки, содержащие вывод различных *_id программ.

Есть два подхода к созданию символических ссылок. Первый подход использует имя модели и серийный номера, а второй основан на положении устройства на шине. Если Вы решили использовать первый подход, то создайте файл, похожий на следующий:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
    ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
    ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"

EOF

Замечание

Хотя примеры в этой книге работают правильно, осознавайте, что Udev не признаёт обратный слэш для продолжения строки. При изменении правил Udev при помощи редактора убедитесь, что оставили каждое правило в одной физической строке.

При таком способе символические ссылки останутся корректными даже если Вы переместите накопитель в другое положение на шине IDE, но символическая ссылка /dev/cdrom не будет создана, если Вы замените старый SAMSUNG CD-ROM на новый накопитель.

Ключ SUBSYSTEM=="block" необходим для избежания подбора обобщённых SCSI устройств. Без него, в случае со SCSI CD-ROM, символические ссылки иногда будут указывать на корректные устройства /dev/srX, a иногда на /dev/sgX, что не правильно.

Второй подход:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

При таком способе символические ссылки останутся корректными даже если Вы замените накопитель на другую модель, но поместите его на старое место. Ключ ENV{ID_TYPE}=="cd" подтвердит, что символическая ссылка исчезает, если Вы поместите что-то другое, чем CD-ROM в это место на шине.

Конечно, возможно совмещать эти подходы.

11.13.2. Поведение с дублированными устройствами

Как объяснено в Разделе 11.5, “Поддержка устройств и модулей в СLFS системе”, порядок, в котором устройства с одинаковыми функциями появляются в /dev, является достаточно случайным. Т.е., если у Вас есть USB вэб камера и TВ тюнер, то иногда /dev/video0 ссылается на камеру, а /dev/video1 ссылается на тюнер, a иногда после перезагрузки порядок меняется на противоположный. Для всех случаев оборудования, исключая звуковые и сетевые карты, это исправляется созданием правил udev для нестандартных постоянных символических ссылок. Случай сетевых карт описан отдельно в Разделе 11.14, “Настройка скрипта network”, a настройка звуковых карт может быть найдена в BLFS.

Для каждого из Ваших устройств, которое может иметь такую проблему (даже если проблема отсутствует в Вашем текущем дистрибутиве Linux), найдите соответствующую директорию в /sys/class или /sys/block. Для видео устройств это может быть /sys/class/video4linux/videoX. Вычислите атрибуты, которые определяют устройство уникально (обычно работают ID производителя и продукта и/или серийные номера):

udevinfo -a -p /sys/class/video4linux/video0

Затем напишите правила, создающие символические ссылки, т.е.:

cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF

# Persistent symlinks for webcam and tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

В результате устройства /dev/video0 и /dev/video1 по-прежнему ссылаются случайно на тюнер и камеру (и, таким образом, никогда не должны быть использованы напрямую), но есть символические ссылки /dev/tvtuner и /dev/webcam, которые всегда указывают на корректное устройство.

Больше информации по написанию правил Udev может быть найдено в /usr/share/doc/udev-096/index.html.

11.14. Настройка скрипта network

Этот раздел нужен только в том случае, если Вы собираетесь настраивать сетевую карту.

Если сетевая карта использоваться не будет, то Вам не надо создавать файлы конфигурации сетевой карты. В этом случае Вам надо удалить все ссылки network из всех директорий с уровнями запуска (/etc/rc.d/rc*.d).

11.14.1. Создание стабильных имён для сетевых интерфейсов

Инструкции в этом разделе являются опциональными если у Вас есть только одна сетевая карта.

С Udev и модульными сетевыми драйверами нумерация сетевых интерфейсов по умолчанию между перезагрузками не устойчива, так как драйверы загружаются параллельно, то есть в случайном порядке. Например, на компьютере, имеющем две сетевых карты, произведённые Intel и Realtek, сетевая карта от Intel может стать eth0, а карта Realtek становится eth1. В некоторых случаях после перезагрузки карты нумеруются по другому. Чтобы этого избежать, создайте правила Udev, которые назначают стабильные имена сетевым картам, основываясь на их MAC адресах или положениям на шине.

Если Вы решите использовать MAC адреса для определения Ваших сетевых карт, найдите адреса при помощи следующей команды:

grep -H . /sys/class/net/*/address

Для каждой сетевой карты (но не для интерфейса loopback) придумайте описывающее имя, такое как “realtek”, и создайте правила Udev, похожие на следующие:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:e0:4c:12:34:56", \
    NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:a0:c9:78:9a:bc", \
    NAME="intel"
EOF

Замечание

Хотя примеры в этой книге работают правильно, осознавайте, что Udev не признаёт обратный слэш для продолжения строки. При изменении правил Udev при помощи редактора убедитесь, что оставили каждое правило в одной физической строке.

Если Вы решили в качестве ключа использовать положение на шине, то создайте правила Udev, похожие на следующие:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0c.0", \
    NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0d.0", \
    NAME="intel"
EOF

Эти правила всегда будут переименовывать сетевые карты на “realtek” и “intel”, независимо от оригинальной нумерации, предоставляемой ядром (т.е.: оригинальные интерфейсы “eth0” и “eth1” больше не будут присутствовать пока Вы не поместите такие “описывающие” имена в ключ NAME). Используйте описывающее имя из правил Udev вместо “eth0” в файле конфигурации сетевого интерфейса ниже.

Заметьте, что правила выше работают не для всех установок. Например, MAC-основанные правила прерываются при использовании мостов или VLAN, так как мосты и VLAN имеют те же MAC адреса, что и сетевая карта. Первое хочет переименовать только интерфейс сетевой карты, не мост или VLAN интерфейс, но пример правила изменяет оба. Если Вы используете такие виртуальные интерфейсы, то у Вас есть два потенциальных решения. Первое - это добавление ключа DRIVER=="?*" после SUBSYSTEM=="net" в MAC-основанных правилах, который остановит подбор виртуальных интерфейсов. Известно, что это приводит к неудаче с некоторыми старыми Ethernet картами, потому что они не имеют переменной DRIVER в событии и, таким образом, правило не отождествляется с такими картами. Другим решением является переключение на правила, которые используют в качестве ключа положение на шине.

Вторым известным неработающим случаем является работа с беспроводными картами, использующими MadWifi или HostAP драйверы, так как они создают как минимум два интерфейса с одинаковыми MAC адресами и положениями на шине. Например, драйвер Madwifi создаёт оба интерфейса athX и wifiX, где X это цифра. Для различения этих интерфейсов добавьте подходящий параметр KERNEL, такой как KERNEL=="ath*" после SUBSYSTEM=="net".

Здесь могут быть другие случаи, когда правила, описанные выше, не работают. В данный момент ошибки по этой теме всё ещё отсылаются распространителям Linux, а решения, которое покрывает все возможные случаи, нет.

11.14.2. Создание конфигурационных файлов сетевого интерфейса

Интерфейсы, которые будут запущены или остановлены скриптом network, описываются в директории /etc/sysconfig/network-devices. Эта директория содержит файлы вида ifconfig.xyz, где “xyz” является именем сетевого интерфейса (например eth0 или eth0:1). Файлы в этой директории описывают атрибуты для этих интерфейсов, например их IP адреса, маски подсети и т.д.

Следующая команда создаст пример ipv4 файла для устройства eth0:

cd /etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
EOF

Значения переменных надо будет изменить на правильные для Вашей системы. Если переменная ONBOOT установлена в “yes”, то скрипт network поднимет этот интерфейс при загрузке системы. Если же будет установлено что-либо другое, то этот интерфейс будет проигнорирован скриптом.

Переменная SERVICE описывает метод получения IP адресов. Скрипты загрузки CLFS имеют модульный формат назначения IP адресов, а созданные дополнительные файлы в директории /etc/sysconfig/network-devices/services позволяют использовать другие методы назначения IP. Это использовано для Dynamic Host Configuration Protocol (DHCP) - протокола динамической конфигурации хоста, который описан в книге BLFS.

Переменная GATEWAY должна содержать IP адрес шлюза по умолчанию, если он есть. Если его нет - закоментируйте эту переменную.

Переменная PREFIX нужна для описания количества бит, использованных в подсети. Каждый октет в IP адресации содержит 8 бит. Если сетевая маска IP подсети равна 255.255.255.0, то она использует первые три октета (24 бита) для описания номера сети. Если сетевая маска равна 255.255.255.240, то она использует первые 28 бит. Префиксы длиннее 24 бит используются DSL и кабельными провайдерами интернет сервисов (ISP). В этом примере (PREFIX=24) сетевая маска равна 255.255.255.0.

11.14.3. Создание файла /etc/resolv.conf

Если система подключена к интернет, то ей требуются некоторые обозначения разрешённых имен сервисов доменных имён (Domain Name Service - DNS) для разложения доменных имён интернет на IP адреса и наоборот. Это достигается размещением IP адресов DNS сервера, доступного от ISP или системного администратора, в /etc/resolv.conf. Создадим этот файл, выполнив следующее:

cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain [Your Domain Name]
nameserver [IP address of your primary nameserver]
nameserver [IP address of your secondary nameserver]

# End /etc/resolv.conf
EOF

Замените [IP address of the nameserver] на наиболее подходящие для установки IP адреса DNS. Здесь часто бывает более чем одно значение (вторичные сервера требуются для увеличения надёжности). Если Вам надо или Вы хотите только один DNS сервер, удалите вторую строку nameserver из файла. IP адрес также может быть маршрутизатором локальной сети.

Глава 12. Обеспечение загрузки СLFS системы

12.1. Вступление

Пришло время сделать CLFS систему загружаемой. Эта глава обсуждает создание файла fstab, сборку ядра для новой CLFS системы и установку загрузчика, чтобы CLFS система могла быть выбрана для загрузки при старте.

12.2. Создание файла /etc/fstab

Файл /etc/fstab используется рядом программ для определения того, какие разделы будут монтированы по умолчанию, какие файловые системы должны быть проверены и т.д. Создадим новую таблицу файловых систем так, как показано здесь:

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type   options          dump  fsck
#                                                         order

/dev/[xxx]     /            [fff]  defaults         1     1
/dev/[yyy]     swap         swap   pri=1            0     0
proc           /proc        proc   defaults         0     0
sysfs          /sys         sysfs  defaults         0     0
devpts         /dev/pts     devpts gid=10,mode=620  0     0
shm            /dev/shm     tmpfs  defaults         0     0
# End /etc/fstab
EOF

Замените [xxx], [yyy] и [fff] на более подходяшие для системы значения, например hda2, hda5 и ext2. За более полной информацией обратитесь к man 5 fstab.

Точка монтирования /dev/shm для tmpfs добавлена для обеспечения поддержки POSIX-разделяемой памяти. Ваше ядро должно быть собрано со встроенной поддержкой этой системы (более подробно об этом смотрите в следующем разделе). Имейте в виду, что только небольшое количество программного обеспечения использует POSIX-разделяемую память. Поэтому точка монтирования /dev/shm является опциональной. Для более подробной информации смотрите Documentation/filesystems/tmpfs.txt в дереве исходников ядра.

12.3. Linux-2.6.17.13

Пакет Linux содержит ядро Linux и файлы заголовков.

12.3.1. Установка ядра

Сборка ядра разбита на несколько шагов — конфигурация, компилирование и установка. Если Вам не нравится способ установки, описаный в этой книге, то посмотрите файл README в директории с исходниками ядра на предмет альтернативы.

Следующий патч исправляет проблему инициализации с сетевым драйвером tulip:

patch -Np1 -i ../linux-2.6.17.13-tulip-1.patch

Следующий патч исправляет некоторое ассемблирование в ядре:

patch -Np1 -i ../linux-2.6.17.13-alpha_io_fix-1.patch

Подготовимся к компилированию запуском следующей команды:

make mrproper

Это позволит убедиться, что дерево исходников будет абсолютно чистым. Команда разработки ядра рекомендует запускать эту команду перед каждым компилированием ядра. Вы не можете быть абсолютно уверены в отсутствии лишних файлов даже после распаковки исходников.

Если в Разделе 11.7, “Настройка консоли Linux,” было решено компилировать раскладку клавиатуры в ядре, то выполните команду ниже:

loadkeys -m /lib/kbd/keymaps/[path to  keymap] > \
    drivers/char/defkeymap.c

Например, если используется русская клавиатура, то используйте /usr/share/kbd/keymaps/i386/qwerty/ru1.map.gz (один из вариантов).

Отконфигурируем ядро через меню-подобный интерфейс. Пожалуйста отметьте, что для стартового скрипта udev "rtc" и "tmpfs" должны быть включены и вкомпилированы в ядро, а не в виде модуля. BLFS имеет некоторую информацию относительно особых требований конфигурации ядра для пакетов вне CLFS на http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index:

make menuconfig

Альтернативно, make oldconfig может быть более подходящим в некоторых ситуациях. Смотрите файл README для большей информации.

При желании, пропустите конфигурацию ядра копированием файла конфигурации .config из хост системы (подразумевает его доступность) в корневую директорию распакованных исходников ядра. Хотя мы это не рекомендуем. Чаще лучше исследовать всё меню конфигурации и создать новую конфигурацию ядра.

Скомпилируем образ ядра и модули:

make

Если Вы будете использовать модули, то может понадобиться файл /etc/modprobe.conf. Информация по модулям и конфигурации ядра находится в документации ядра в директории Documentation. Также может быть интересна man страница modprobe.conf(5).

Будьте осторожны при чтении другой документации, так как обычно она применима только к ядрам 2.4.x. Как мы давно знаем, проблемы конфигурации ядра, специфичные для Hotplug и Udev, не документированы. Проблема в том, что Udev будет создавать ноды устройств только если Hotplug или созданный пользователем скрипт вставит соответствующий модуль в ядро и не все модули определяются Hotplug. Заметьте, что утверждения, похожие на указанное ниже, в файле /etc/modprobe.conf не работают с Udev:

alias char-major-XXX some-module

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

Установим модули, если ядро их использует:

make modules_install

После завершения компилирования ядра требуются дополнительные шаги для завершения установки. Некоторые файлы необходимо скопировать в директорию /boot.

Используйте следующую команду для установки ядра:

cp vmlinux /boot/clfskernel-2.6.17.13

System.map это файл карты символов для ядра. Он содержит карту точек входа в каждую функцию API ядра. Используйте следующую команду для установки этого файла:

cp System.map /boot/System.map-2.6.17.13

Файл конфигурации ядра .config, созданный после выполнения команды make menuconfig, содержит все выбранные опции конфигурации для только что откомпилированного ядра. Хорошей идеей будет сохранение этого файла:

cp .config /boot/config-2.6.17.13

Важно отметить, что файлы в директории исходников ядра не принадлежат root. Хотя пакет был распакован пользователем root (так как мы в chroot), файлы имеют ID пользователя и группы, какие они имели на компьютере при упаковывании. Обычно это не является проблемой для остальных пакетов поскольку дерево исходников удаляется после установки ядра, хотя часто оно сохраняются очень долго. В связи с этим имеется вероятность, что пользователь с таким же ID, как у собранного пакета исходников ядра, получит права доступа на запись в директории исходников ядра.

Если дерево исходников ядра планируется сохранить, выполните chown -R 0:0 на директории linux-2.6.17.13 для передачи всех файлов пользователю root.

Внимание

Некоторая документация ядра рекомендует создание символической ссылки с /usr/src/linux на директорию с исходниками ядра. Это особенность для ядер до серии 2.6 и эта ссылка не должна быть создана в CLFS системе, так как может привести к проблемам для пакетов, которые Вы можете захотеть собрать после завершения сборки CLFS системы.

Также, заголовки в системной директории include должны быть всегда теми же, с какими была скомпилирована Glibc (из пакета Linux-Headers) и никогда не должны быть заменены заголовками ядра.

12.3.2. Описание Linux

Установленные файлы: config-[linux-version], clfskernel-[linux-version] и System.map-[linux-version]

Короткие описания

config-[linux-version]

Содержит все выбранные настройки ядра

clfskernel-[linux-version]

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

System.map-[linux-version]

Список адресов и символов; карта точек входа и адреса каждой функции API ядра и структур данных ядра.

12.4. Обеспечение загрузки СLFS системы

Создадим файл aboot.conf, описывающий меню загрузки aboot:

cat > /etc/aboot.conf << "EOF"
# Begin /etc/aboot.conf
0:1/boot/clfskernel-2.6.17.13 root=/dev/sda1
# End /etc/aboot.conf
EOF

Теперь сделаем aboot загружаемым:

swriteboot -f3 /dev/sda /boot/bootlx
abootconf /dev/sda 1

Глава 13. Конец

13.1. Конец

Сделано! Новая CLFS ситстема установлена! Мы желаем Вам больших успехов с Вашей новой блестящей персонально собранной Linux системой.

Возможно, хорошей идеей будет создание файла /etc/clfs-release. Имея этот файл, Вам будет очень просто (и нам, если Вы попросите о помощи на некотором этапе) определить установленную версию CLFS. Создайте этот файл запуском:

echo 1.0.0 > /etc/clfs-release

13.2. Регистрация

Вы хотите зарегистрироваться как пользователь СLFS по окончании прочтения книги? Посетите http://www.linuxfromscratch.org/cgi-bin/lfscounter.cgi и зарегистрируйтесь как пользователь СLFS, введя Ваше имя и первую используемую Вами версию СLFS.

13.3. Перезагрузка системы

Если Вы собрали финальную систему, используя метод загрузки, то просто запустите shutdown -r now для перезагрузки, используя Ваше новое ядро вместо текущего минимального. Если Вы использовали Chroot, то нужно сделать несколько дополнительных шагов.

Система, которую Вы создали по этой книге, достаточно минимальна и, вероятнее всего, не будет иметь функциональность, необходимую Вам в дальнейшем. Установку некоторых дополнительных пакетов из книги BLFS Вы продолжите самостоятельно после перезагрузки в Вашу новую CLFS систему. Установив текстовый интернет браузер, например Lynx, Вы сможете легко просматривать книгу BLFS в одном виртуальном терминале, а собирать пакет в другом. Также пакет GPM позволит Вам выполнять операции копирования/вставки между виртуальными терминалами. Наконец, если Вы в ситуации, в которой конфигурация со статическим IP не удовлетворяет Вашим сетевым требованиям, то установка пакета Dhcpcd или PPP на этом этапе также может быть полезной.

Теперь, когда мы установили всё необходимое программное обеспечение, настало время перезапустить компьютер. Сначала выйдем из chroot окружения:

logout

Затем размонтируем виртуальные файловые системы:

umount ${CLFS}/dev/pts
umount ${CLFS}/dev/shm
umount ${CLFS}/dev
umount ${CLFS}/proc
umount ${CLFS}/sys

Отмонтируем сам раздел CLFS:

umount ${CLFS}

Если было создано несколько разделов, то Вам надо отмонтировать их все перед отмонтированием основного, как здесь:

umount ${CLFS}/usr
umount ${CLFS}/home
umount ${CLFS}

Теперь перезагрузим систему командой:

shutdown -r now

Подразумевая, что загрузчик был установлен так, как описано ранее, CLFS 1.0.0 будет загружен автоматически.

После перезагрузки система CLFS готова к использованию и Вы можете начать устанавливать дополнительные программы.

13.4. Что теперь?

Мы благодарим Вас за прочтение книги СLFS и надеемся, что Вы нашли в ней много полезного для себя и провели время с пользой.

Теперь, когда установка системы CLFS закончена, Вы наверное спросите “Что дальше?”. Для ответа на этот вопрос мы составили список ресурсов, который Вам может оказаться полезным.

  • Поддержка

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

    • Freshmeat.net (http://freshmeat.net/)

      Freshmeat может сообщить Вам (по электронной почте) о новых версиях пакетов, установленных в Вашей системе.

    • CERT (Computer Emergency Response Team)

      CERT имеет списки рассылки, которые публикуют предупреждения безопасности относительно разных операционных систем и приложений. Информация для подписавшихся находится на http://www.us-cert.gov/cas/signup.html.

    • Bugtraq

      Bugtraq это полностью раскрытый компьютерный список рассылки по безопасности. Он публикует свеже обнаруженные проблемы безопасности, a иногда и потенциальные исправления для них. Информация для подписавшихся находится на http://www.securityfocus.com/archive.

  • После Linux From Scratch

    Книга После Linux From Scratch описывает процедуру установки большого списка программ, не вошедших в книгу CLFS. Проект BLFS находится по адресу http://www.linuxfromscratch.org/blfs/.

  • Советы LFS

    Советы LFS являются набором небольших разъяснительных документов, составленных волонтёрами из сообщества LFS. Эти советы можно найти на http://www.linuxfromscratch.org/hints/list.html.

  • Списки рассылки

    Есть ряд списков рассылки CLFS в которые Вы можете обратиться за помощью. Смотрите Chapter 1 - Mailing Lists для более полной информации.

  • Проект документации Linux

    Целью проекта документации Linux (TLDP) является сотрудничество с целью создания документации по Linux. LDP содержит большую коллекцию различных HOWTO, руководств и man-страниц; всё это Вы найдёте на http://www.tldp.org/.

Часть VI. Приложения

Appendix A. Список сокращений

ABI

Application Binary Interface

ALFS

Automated Linux From Scratch

ALSA

Advanced Linux Sound Architecture

API

Application Programming Interface

ASCII

American Standard Code for Information Interchange

ATA

Advanced Technology Attachment (see IDE)

BIOS

Basic Input/Output System

bless

manipulate a filesystem so that OF will boot from it

BLFS

Beyond Linux From Scratch

BSD

Berkeley Software Distribution

chroot

change root

CLFS

Кросс-компилированный Linux From Scratch

CMOS

Complementary Metal Oxide Semiconductor

COS

Class Of Service

CPU

Central Processing Unit

CRC

Cyclic Redundancy Check

DHCP

Dynamic Host Configuration Protocol

DNS

Domain Name Service

EGA

Enhanced Graphics Adapter

ELF

Executable and Linkable Format

EOF

End of File

EQN

equation

EVMS

Enterprise Volume Management System

ext2

second extended file system

FAQ

Frequently Asked Questions

FHS

Filesystem Hierarchy Standard

FIFO

First-In, First Out

FQDN

Fully Qualified Domain Name

FTP

File Transfer Protocol

GB

Gibabytes

GCC

GNU Compiler Collection

GID

Group Identifier

GMT

Greenwich Mean Time

HTML

Hypertext Markup Language

IDE

Integrated Drive Electronics

IEEE

Institute of Electrical and Electronic Engineers

IO

Input/Output

IP

Internet Protocol

IPC

Inter-Process Communication

IRC

Internet Relay Chat

ISO

International Organization for Standardization

ISP

Internet Service Provider

KB

Kilobytes

LED

Light Emitting Diode

LFS

Linux From Scratch

LSB

Linux Standard Base

MB

Megabytes

MBR

Master Boot Record

MD5

Message Digest 5

NIC

Network Interface Card

NLS

Native Language Support

NNTP

Network News Transport Protocol

NPTL

Native POSIX Threading Library

OF

Open Firmware

OSS

Open Sound System

PCH

Pre-Compiled Headers

PCRE

Perl Compatible Regular Expression

PID

Process Identifier

PTY

pseudo terminal

QA

Quality Assurance

QOS

Quality Of Service

RAM

Random Access Memory

RPC

Remote Procedure Call

RTC

Real Time Clock

SCO

The Santa Cruz Operation

SATA

Serial ATA

SGR

Select Graphic Rendition

SHA1

Secure-Hash Algorithm 1

SMP

Symmetric Multi-Processor

TLDP

The Linux Documentation Project

TFTP

Trivial File Transfer Protocol

TLS

Thread-Local Storage

UID

User Identifier

umask

user file-creation mask

USB

Universal Serial Bus

UTC

Coordinated Universal Time

UUID

Universally Unique Identifier

VC

Virtual Console

VGA

Video Graphics Array

VT

Virtual Terminal

Appendix B. Благодарности

Мы хотим поблагодарить следующих людей и организации за их вклад в проект Linux From Scratch.

  • Gerard Beekmans <gerard AT linuxfromscratch D0T org> – инициатор Linux From Scratch, организатор проекта LFS

  • Matthew Burgess <matthew AT linuxfromscratch D0T org> – лидер проекта LFS, технический редактор LFS, зведующий релиза LFS

  • Archaic <archaic AT linuxfromscratch D0T org> – технический редактор LFS, лидер проекта HLFS, редактор BLFS, советов и координатор проекта патчей

  • Nathan Coulson <nathan AT linuxfromscratch D0T org> – координатор LFS-Bootscripts

  • Bruce Dubbs <bdubbs AT linuxfromscratch D0T org> – лидер проекта BLFS

  • Manuel Canales Esparcia <manuel AT linuxfromscratch D0T org> – координатор LFS/BLFS/HLFS XML и XSL

  • Jim Gifford <jim AT linuxfromscratch D0T org> – технический редактор LFS, лидер проекта патчей

  • Jeremy Huntwork <jhuntwork AT linuxfromscratch D0T org> – технический редактор LFS, координатор LFS LiveCD, лидер проекта ALFS

  • Anderson Lizardo <lizardo AT linuxfromscratch D0T org> – координатор скриптов Web-сайта

  • Ryan Oliver <ryan AT linuxfromscratch D0T org> – координатор LFS инструментария

  • James Robertson <jwrober AT linuxfromscratch D0T org> – координатор Bugzilla

  • Tushar Teredesai <tushar AT linuxfromscratch D0T org> – редактор BLFS Book, советов и лидер проекта патчей

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

Переводчики

  • Manuel Canales Esparcia <macana AT lfs-es D0T com> – испанский проект перевода LFS

  • Johan Lenglet <johan AT linuxfromscratch D0T org> – французский проект перевода LFS

  • Anderson Lizardo <lizardo AT linuxfromscratch D0T org> – португальский проект перевода LFS

  • Thomas Reitelbach <tr AT erdfunkstelle D0T de> – немецкий проек перевода LFS

Координаторы зеркал

Северо-американские зеркала

  • Scott Kveton <scott AT osuosl D0T org> – lfs.oregonstate.edu

  • Mikhail Pastukhov <miha AT xuy D0T biz> – lfs.130th.net

  • William Astle <lost AT l-w D0T net> – ca.linuxfromscratch.org

  • Jeremy Polen <jpolen AT rackspace D0T com> – us2.linuxfromscratch.org

  • Tim Jackson <tim AT idge D0T net> – linuxfromscratch.idge.net

  • Jeremy Utley <jeremy AT linux-phreak D0T net> – lfs.linux-phreak.net

Южно-американские зеркала

Европейские зеркала

  • Barna Koczka <barna AT siker D0T hu> – hu.linuxfromscratch.org

  • UK Mirror Service – linuxfromscratch.mirror.ac.uk

  • Martin Voss <Martin D0T Voss AT ada D0T de> – lfs.linux-matrix.net

  • Guido Passet <guido AT primerelay D0T net> – nl.linuxfromscratch.org

  • Bastiaan Jacques <baafie AT planet D0T nl> – lfs.pagefault.net

  • Roel Neefs <lfs-mirror AT linuxfromscratch D0T rave D0T org> – linuxfromscratch.rave.org

  • Justin Knierim <justin AT jrknierim D0T de> – www.lfs-matrix.de

  • Stephan Brendel <stevie AT stevie20 D0T de> – lfs.netservice-neuss.de

  • Antonin Sprinzl <Antonin D0T Sprinzl AT tuwien D0T ac D0T at> – at.linuxfromscratch.org

  • Fredrik Danerklint <fredan-lfs AT fredan D0T org> – se.linuxfromscratch.org

  • Parisian sysadmins <archive AT doc D0T cs D0T univ-paris8 D0T fr> – www2.fr.linuxfromscratch.org

  • Alexander Velin <velin AT zadnik D0T org> – bg.linuxfromscratch.org

  • Dirk Webster <dirk AT securewebservices D0T co D0T uk> – lfs.securewebservices.co.uk

  • Thomas Skyt <thomas AT sofagang D0T dk> – dk.linuxfromscratch.org

  • Simon Nicoll <sime AT dot-sime D0T com> – uk.linuxfromscratch.org

Азиатские зеркала

  • Pui Yong <pyng AT spam D0T averse D0T net> – sg.linuxfromscratch.org

  • Stuart Harris <stuart AT althalus D0T me D0T uk> – lfs.mirror.intermedia.com.sg

Австралийские зеркала

  • Jason Andrade <jason AT dstc D0T edu D0T au> – au.linuxfromscratch.org

Члены предыдущей команды проекта

  • Christine Barczak <theladyskye AT linuxfromscratch D0T org> – редактор LFS Book

  • Timothy Bauscher

  • Robert Briggs

  • Ian Chilton

  • Jeroen Coumans <jeroen AT linuxfromscratch D0T org> – разработчик Web-сайта, координатор FAQ

  • Alex Groenewoud – технический редактор LFS

  • Marc Heerdink

  • Mark Hymers

  • Seth W. Klein – координатор FAQ

  • Nicholas Leippe <nicholas AT linuxfromscratch D0T org> – координатор Wiki

  • Simon Perreault

  • Scot Mc Pherson <scot AT linuxfromscratch D0T org> – координатор LFS NNTP Gateway

  • Alexander Patrakov <semzx AT newmail D0T ru> – технический редактор LFS

  • Greg Schafer <gschafer AT zip D0T com D0T au> – технический редактор LFS

  • Jesse Tie-Ten-Quee – технический редактор LFS

  • Jeremy Utley <jeremy AT linuxfromscratch D0T org> – технический редактор LFS, координатор Bugzilla, координатор LFS-Bootscripts

  • Zack Winkles <zwinkles AT gmail D0T com> – технический редактор LFS

Особая благодарность за пожервования для нас

  • Dean Benson <dean AT vipersoft D0T co D0T uk> за некоторую финансовую помощь

  • Hagen Herrschaft <hrx AT hrxnet D0T de> за пожертвование системы 2.2 ГГц P4, теперь запущенную под именем Lorien

  • VA Software, кто от имени Linux.com пожертвовал рабочую станцию VA Linux 420 (разновидность StartX SP2)

  • Mark Stone за пожертвование Belgarath, сервера linuxfromscratch.org

Appendix C. Зависимости

Каждый пакет, собираемый в CLFS, связан с одним или более другими пакетами в порядке сборки и правильной установки. Некоторые пакеты даже участвуют в круговых зависимостях, то есть, первый пакет зависит от второго, а тот зависит от первого. Из за этих зависимостей важна последовательность сборки пакетов для CLFS системы. Целью этой страницы является документирование зависимостей каждого пакета, собираемого в CLFS.

Для каждого собираемого пакета мы имеем список из трёх типов зависимостей. Первый список содержит необходимые пакеты для сборки и установки пакета. Второй список содержит необходимые пакеты для проведения тестов. Последний список показывает необходимость наличия пакетов до сборки и установки текущего пакета в окончательное место. В большинстве случаев, это потому, что эти пакеты имеют встроенные пути к бинарникам внутри их скриптов. Если не собирать в определённом порядке, то это может привести к наличию путей к /tools/bin/[бинарник], помещённых внутри скриптов, установленных в финальной системе. Это абсолютно не желательно.

Autoconf

Инсталяция зависит от: Bash, Coreutils, Grep, M4, Make, Perl, Sed и Texinfo
Тестирование зависит от: Automake, Diffutils, Findutils, GCC и Libtool
Должен быть установлен ранее: Automake

Automake

Инсталяция зависит от: Autoconf, Bash, Coreutils, Gettext, Grep, M4, Make, Perl, Sed и Texinfo
Тестирование зависит от: Binutils, Bison, Bzip2, DejaGNU, Diffutils, Expect, Findutils, Flex, GCC, Gettext, Gzip, Libtool и Tar. Также может использовать другие пакеты, которые не установлены в CLFS.
Должен быть установлен ранее: Ничего

Bash

Инсталяция зависит от: Bash, Bison, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Patch, Readline, Sed и Texinfo
Тестирование зависит от: Diffutils и Gawk
Должен быть установлен ранее: Ничего

Binutils

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, File, GCC, Gettext, Glibc, Grep, Make, Perl, Sed и Texinfo
Тестирование зависит от: DejaGNU и Expect
Должен быть установлен ранее: Ничего

Bison

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, M4, Make и Sed
Тестирование зависит от: Diffutils и Findutils
Должен быть установлен ранее: Flex, Kbd и Tar

Bzip2

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make и Patch
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

CLFS-Bootscripts

Инсталяция зависит от: Bash, Coreutils, Make и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Coreutils

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Patch, Perl, Sed и Texinfo
Тестирование зависит от: Diffutils
Должен быть установлен ранее: Bash, Diffutils, Findutils, Man-DB и Udev

DejaGNU

Инсталяция зависит от: Bash, Coreutils, Diffutils, GCC, Grep, Make и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Diffutils

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Patch, Sed и Texinfo
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Expect

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Patch, Sed и Tcl
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

E2fsprogs

Инсталяция зависит от: Bash, Binutils, Coreutils, Gawk, GCC, Gettext, Glibc, Grep, Gzip, Make, Sed и Texinfo
Тестирование зависит от: Diffutils
Должен быть установлен ранее: Util-Linux

File

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed и Zlib
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Findutils

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Sed и Texinfo
Тестирование зависит от: DejaGNU, Diffutils и Expect
Должен быть установлен ранее: Ничего

Flex

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, M4, Make, Patch, Sed и Texinfo
Тестирование зависит от: Bison и Gawk
Должен быть установлен ранее: IPRoute2, Kbd и Man-DB

Gawk

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Patch, Sed и Texinfo
Тестирование зависит от: Diffutils
Должен быть установлен ранее: Ничего

Gcc

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Patch, Perl, Sed, Tar и Texinfo
Тестирование зависит от: DejaGNU и Expect
Должен быть установлен ранее: Ничего

Gettext

Инсталяция зависит от: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make, Sed и Texinfo
Тестирование зависит от: Diffutils, Perl и Tcl
Должен быть установлен ранее: Automake

Glibc

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Gzip, Make, Perl, Sed и Texinfo
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Grep

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Patch, Sed и Texinfo
Тестирование зависит от: Diffutils и Gawk
Должен быть установлен ранее: Man-DB

Groff

Инсталяция зависит от: Bash, Binutils, Bison, Coreutils, Gawk, GCC, Glibc, Grep, Make, Patch, Sed и Texinfo
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Man и Perl

Gzip

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Patch, Sed и Texinfo
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Man-DB

Iana-Etc

Инсталяция зависит от: Coreutils, Gawk и Make
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Perl

Inetutils

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Ncurses, Patch, Sed и Texinfo
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Tar

IProute2

Инсталяция зависит от: Bash, Bison, Coreutils, Flex, GCC, Glibc, Make и Linux-Headers
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Kbd

Инсталяция зависит от: Bash, Binutils, Bison, Coreutils, Flex, GCC, Gettext, Glibc, Gzip, Make, Patch и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Less

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Libtool

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed и Texinfo
Тестирование зависит от: Findutils
Должен быть установлен ранее: Ничего

Linux-Headers

Инсталяция зависит от: Coreutils и Findutils
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Linux Kernel

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Mktemp, Module-Init-Tools, Ncurses и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

M4

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make и Sed
Тестирование зависит от: Diffutils
Должен быть установлен ранее: Autoconf и Bison

Man-DB

Инсталяция зависит от: Bash, Binutils, Bzip2, Coreutils, Flex, GCC, Gettext, Glibc, Grep, Groff, Gzip, Less, Make и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Make

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed и Texinfo
Тестирование зависит от: Perl
Должен быть установлен ранее: Ничего

Mktemp

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Patch и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Module-Init-Tools

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Sed и Zlib
Тестирование зависит от: File, Findutils и Gawk
Должен быть установлен ранее: Ничего

Ncurses

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Bash, GRUB, Inetutils, Less, Procps, Psmisc, Readline, Texinfo, Util-Linux и Vim

Patch

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Perl

Инсталяция зависит от: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Groff, Make и Sed
Тестирование зависит от: Iana-Etc и Procps
Должен быть установлен ранее: Autoconf

Procps

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make и Ncurses
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Psmisc

Инсталяция зависит от: Bash, Coreutils, GCC, Gettext, Glibc, Grep, Make, Ncurses и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Readline

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Ncurses, Patch, Sed и Texinfo
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Bash

Sed

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Sed и Texinfo
Тестирование зависит от: Diffutils и Gawk
Должен быть установлен ранее: E2fsprogs, File, Libtool и Shadow

Shadow

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, Gettext, Glibc, Grep, Make и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Sysklogd

Инсталяция зависит от: Binutils, Coreutils, GCC, Glibc, Make и Patch
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Sysvinit

Инсталяция зависит от: Binutils, Coreutils, GCC, Glibc, Make и Sed
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Tar

Инсталяция зависит от: Bash, Binutils, Bison, Coreutils, GCC, Gettext, Glibc, Grep, Inetutils, Make, Patch, Sed и Texinfo
Тестирование зависит от: Diffutils, Findutils и Gawk
Должен быть установлен ранее: Ничего

Tcl

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Texinfo

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Patch и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Tree

Инсталяция зависит от: Coreutils, GCC и Make
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Udev

Инсталяция зависит от: Binutils, Coreutils, GCC, Glibc и Make
Тестирование зависит от: Findutils, Perl и Sed
Должен быть установлен ранее: Ничего

Udev Rules

Инсталяция зависит от: Bash, Coreutils, Make и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Util-Linux

Инсталяция зависит от: Bash, Binutils, Coreutils, E2fprogs, GCC, Gettext, Glibc, Grep, Make, Ncurses, Patch, Sed и Zlib
Тестирование зависит от: Тестов нет
Должен быть установлен ранее: Ничего

Vim

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Zlib

Инсталяция зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make и Sed
Тестирование зависит от: Ничего
Должен быть установлен ранее: File, Module-Init-Tools и Util-Linux

Appendix D. Зависимости Sparc

Эта страница содержит информацию о зависимостях для пакетов, специфичных для Alpha.

Aboot

Инсталяция зависит от: Bash, Binutils, Coreutils, Diffutils, ELFtoaut, GCC, Glibc, Grep, Make, Ncurses, Sed и Patch
Тестирование зависит от: Ничего
Должен быть установлен ранее: Ничего

Указатель

Пакеты

Программы

Библиотеки

Скрипты

Другое




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру