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
Важно
В этом месте тестирование 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
Проинсталированные программы: 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
-
Описывает код для “стандартных” функций, используемых во многих
других Юникс утилитах