6.11. Glibc-2.3.4-20040701

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/Kiev. Затем создадим файл /etc/localtime запуском:

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

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

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

--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

Библиотека для работы с числами с плавающей запятой Института "Electrical and Electronic Engineers" (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

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