RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

Linux From Scratch. Версия 6.0

Глава 6. Установка основных системных программ

6.11. Glibc-2.3.4-20040701

Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т. д. Библиотека C используется для всех динамически скомпонованных программ.

Расчетное время сборки 12.3 SBU

Требуемое место на диске 784 MB

Glibc зависит от установки: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed и Texinfo.

6.11.1. Инсталлируем Glibc

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu ). Если Вы задали переменные окружения, такие как CFLAGS и CXXFLAGS, рекомендуется убрать их при сборке Glibc.

Система сборки Glibc является весьма самодостаточной и должна установится корректно, даже если Ваши spec-файл и компоновщик находятся в /tools. Мы не можем установить spec и компоновщик перед установкой Glibc потому, что тест автоконфинурации Glibc даст фиктивные результаты, а от этого зависит чистота сборки.

Документация по Glibc рекомендует собирать Glibc вне каталога с исходниками, в отдельном каталоге для сборки:

mkdir ../glibc-build
cd ../glibc-build

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


../glibc-2.3.4-20040701/configure --prefix=/usr --disable-profile \
                                  --enable-add-ons=nptl --with-tls \
                                  --with-__thread --enable-kernel=2.6.0 \
                                  --without-cvs --libexecdir=/usr/lib/glibc \
                                  --with-headers=/tools/glibc-kernheaders

Описание новых опций конфигурации:

--libexecdir=/usr/lib/glibc

Изменяем место установки программы pt_chown из места по умолчанию /usr/libexec в каталог /usr/lib/glibc.

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

make
[Important]

Важно

В этом месте тестирование Glibc будет очень уместно. Не пропускайте его.

Протестируем результаты:

make check

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

  • Тест math иногда не проходит при его запуске на системе с процессорами, отличными от новых Intel-совместимых или оригинальных AMD. Также это может произойти при некоторых установках оптимизации.

  • Тест gettext иногда не проходит из-за зависимостей от основной системы. Точная причина пока не ясна.

  • Тест atime иногда не проходит, когда раздел LFS смонтирован с опцией noatime .

  • Тест shm может не пройти, если в Вашей системе запущена файловая система devfs, но нет файловой системы tmpfs, смонтированной на /dev/shm. Это происходит, если отключена поддержка tmpfs в ядре.

  • При запуске на старом и медленном оборудовании некоторые тесты могут не пройти по тайм-ауту.

На этапе инсталляции Glibc может выдать предупреждение в конце об отсутствии /etc/ld.so.conf. Упредим это сообщение:

touch /etc/ld.so.conf

Устанавливаем пакет:

make install

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

make localedata/install-locales

Альтернативой запуску предыдущей команды для экономии времени является установка только определенных локалей, тех которые нужны. Это может быть достигнуто использованием команды localedef . Информацию об использовании этой команды можно получить из файла INSTALL в исходниках Glibc. Тем не менее, список локалей может быть существенным для некоторых тестов, в частности, теста libstdc++ из GCC. Следующие команды, используемые вместо вышеописаной install-locales, установят минимальный набор локалей для успешного завершения тестирований:


mkdir -p /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, не полностью поддерживаются некоторыми приложениями, описанными в книгах LFS и BLFS. Поскольку такие проблемы существуют и приводят к сбоям на некотрых локалях, LFS не может быть использована с локалями, использующими мультибайтные таблицы символов (включая UTF-8) или пишущиеся в порядке справа налево. Необходимы многочисленные неофициальные и нестабильные патчи для устранения этих проблем, поэтому LFS-разработчиками было решено не поддерживать таких комплексных локалей. Это применено также к локалям ja_JP и fa_IR: они были установлены только для прохождения тестов GCC и Gettext, а также программы watch (части пакета Procps), которые не работают корректно в них. Некоторые попытки обойти эти ограничения описаны в интернационально-связанных заметках.

Соберем документацию по linuxthreads, которая является большим описанием по threading API (применимой и к NPTL):

make -C ../glibc-2.3.4-20040701/linuxthreads/man

Проинсталлируем эту документацию:


make -C ../glibc-2.3.4-20040701/linuxthreads/man install

6.11.2. Конфигурация 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/Moskow. Затем создадим файл /etc/localtime запуском:


cp --remove-destination /usr/share/zoneinfo/[xxx] /etc/localtime

Замените [xxx] именем часового пояса, который выдаст tzselect (например, Europe/Moskow).

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

--remove-destination

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

6.11.3. Настройка динамического загрузчика

По умолчанию динамический загрузчик ( /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

6.11.4. Описание Glibc

Проинсталлированные программы: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, 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

Демон, который обеспечивает кэш для большинства известных имен запросов сервисов.

nscd_nischeck

Проверяет, необходим или нет безопасный режим для NIS+lookup.

pcprofiledump

Распечатывает информацию, сгенерированную PC profiling.

pt_chown

Программа-помощник к grantpt для установки владельца, группы и прав доступа ведомого псевдотерминала.

rpcgen

Генерирует C-код для встраивания в протокол вызова удаленной процедуры (Remote Procecure Call, RPC).

rpcinfo

Создает вызов RPC к RPC-серверу.

sln

Статически слинкованная программа ln.

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

Библиотека для работы с числами с плавающей запятой IEEE.

libm

Математическая библиотека.

libmcheck

Описывает запуск кода при загрузке.

libmemusage

Используется программой memusage для сбора информации об использовании памяти программами.

libnsl

Библиотека сетевых сервисов.

libnss

Библиотека Name Service Switch, описывающая функции для разбора имен хостов, имен пользователей, имен групп, алиасов, сервисов, протоколов и т. д.

libpthread

Библиотека потоков POSIX.

libresolv

Описывает функции для создания, посылки и интерпритации пакетов к серверам имен интернет.

librpcsvc

Описывает функции, предоставляющие разнообразные RPC-сервисы.

librt

Описывает функции, предоставляющие большинство из интерфейсов, специфицированных POSIX.1b Realtime Extension.

libthread_db

Описывает функции, полезные для построения отладчиков для multi-threaded программ.

libutil

Описывает код для “стандартных” функций, используемых во многих других утилитах.

Поиск

 

Найди своих коллег!