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