Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Электронные книги по ОС Linux
Linux From Scratch (version 6.8)
Назад Глава 6. Установка программ базовой системы Вперед

6.9. Пакет Glibc-2.13

В пакете Glibc находится основная библиотека C. В этой библиотеке находятся базовые процедуры распределения памяти, поиска в директориях, открытия и закрытия файлов, чтения и записи файлов, обработки строк, сравнения по образцам, арифметических операций и так далее.

Приблизительное время сборки: 16,9 SBU

Требуемое дисковое пространство: 637 MB

6.9.1. Установка пакета Glibc

Замечание

Для некоторых пакетов, не входящих в состав LFS, предлагается устанавливать библиотеку GNU libiconv с тем, чтобы можно преобразовывать данные из одной кодировки в другую. На главной странице проекта (http://www.gnu.org/software/libiconv/) указывается: "Данная библиотека предоставляет собой реализацию iconv(), предназначенную для использования в системах, в которых такой библиотеки нет, либо в которых такая библиотека не может осуществлять преобразование в кодировку и из кодировки Unicode". В Glibc предлагается реализация iconv()и можно преобразовывать данные вв кодировку и из кодировки Unicode, поэтому в системе LFS библиотека libiconv не требуется.

Система сборки пакета Glibc является самодостаточной и пакет будет прекрасно установлен даже в случае, если файл спецификаций компилятора и компоновщик по-прежнему указывают на директорий /tools. Спецификации и компоновщик не следует менять до установки пакета Glibc, поскольку не пройдут тесты Glibc autoconf и в результате не удастся получить чистую сборку пакета.

Когда запускается команда make install, скрипт, который называется test-installation.pl, выполнит небольшой тест проверки чистоты установки для нашей только что установленной библиотеки Glibc. Однако, поскольку наш набор инструментальных средств по-прежнему указывает на директорий test-installation.pl, этот тест будет выполняться над не той библиотекой Glibc. Мы можем заставить скрипт проверять библиотеку Glibc, которую мы только что установили, следующим образом:

DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" \
        scripts/test-installation.pl
unset DL

Кроме того, в скрипте test-installation.pl есть ошибка, в результате которой делается попытка скомпоновать тестовую программу с библиотекой, которая не установлена с помощью команды make install. Выполните следующую команду sed для того, чтобы это исправить:

sed -i -e 's/"db1"/& \&\& $name ne "nss_test1"/' scripts/test-installation.pl

В скрипте ldd, исполняемом в командной оболочке, используется синтаксис, специфичный для Bash. В случае, если установлен другой интерпретатор, например, /bin/sh, измените программу интерпретатора, используемого по умолчанию, на /bin/bash так, как это писано в главе Shells (Командные оболочки) в книге BLFS:

sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in

Исправьте ошибку, которая не позволяется делать сборку пакета Glibc с помощью компилятора GCC-4.5.2:

patch -Np1 -i ../glibc-2.13-gcc_fix-1.patch

Исправьте ошибку разбалансировки стека, которая возникает при некоторых обстоятельствах:

sed -i '195,213 s/PRIVATE_FUTEX/FUTEX_CLOCK_REALTIME/' \
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timed{rd,wr}lock.S

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

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

Как и в главе 5, для машин с архитектурой x86 добавьте в переменную CFLAGS флаги, необходимые для компилятора. Здесь также для компилятора gcc указываются режимы оптимизации библиотеки, повышающие скорость компиляции (-pipe) и увеличивающие производительность пакета (-O3).

case `uname -m` in
  i?86) echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" > configparms ;;
esac

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

../glibc-2.13/configure --prefix=/usr \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.22.5 --libexecdir=/usr/lib/glibc

Пояснение новых конфигурационных параметров:

--libexecdir=/usr/lib/glibc
 

Этот параметр изменяет месторасположение команды pt_chown с используемого по умолчанию директория /usr/libexec на директорий /usr/lib/glibc.

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

make

Важно

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

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

cp -v ../glibc-2.13/iconvdata/gconv-modules iconvdata
make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log

Вы, вероятно, увидите ожидаемый (игнорируемый) отказ теста posix/annexc. Кроме того, тестовый набор для Glibc в некоторой степени зависит от хост системы. Ниже приведен список наиболее часто встречающихся вопросов:

  • Иногда тесты nptl/tst-clock2, nptl/tst-attr3 и rt/tst-cpuclock2 не проходят. Причина не совсем понятна, но есть признаки того, что проблемы с тестами могут быть вызваны малым временем исполнения.
  • Математические тесты иногда также не проходят, когда они выполняются в системах, где процессор не является сравнительно новым фирменным Intel или соответствующим подлинным процессором AMD.
  • Если вы смонтировали раздел LFS с параметром noatime, тест atime проходить не будет. Как уже упоминалось в разделе 2.4 "Монтирование нового раздела", не используйте параметр noatime, когда собираете систему LFS.
  • Будучи запущенными на старом или и медленном оборудовании или в системе, которая находится под нагрузкой, некоторые тесты могут не проходить из-за того, что превышены таймауты. Измените команду make check и установите такое значение для TIMEOUTFACTOR, которое поможет устранить эти ошибки (например, TIMEOUTFACTOR=16 make -k check).

На стадии установки пакет Glibc будет жаловаться на отсутствие файла /etc/ld.so.conf. Это сообщение безвредное; предотвратить его появление можно следующим образом:

touch /etc/ld.so.conf

Установите пакет:

make install

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

Отдельные локали можно установить с помощью программы localedef. Например, первая команда localedef, приведенная ниже, объединяет определение локали для независимого набора данных /usr/share/i18n/locales/cs_CZ с определением таблицы отображения символов /usr/share/i18n/charmaps/UTF-8.gz и добавляет результат в файл /usr/lib/locale/locale-archive. Следующие инструкции установят минимальный набор локалей, необходимых для выполнения оптимального набора тестов:

mkdir -pv /usr/lib/locale
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
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 en_US -f UTF-8 en_US.UTF-8
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 fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030

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

Либо сразу установите все локали, перечисленные в файле glibc-2.13/localedata/SUPPORTED (в нем находятся все локали, перечисленные выше, и многие другие), с помощью одной следующей локали:

make localedata/install-locales

Затем с помощью команды localedef создайте и установите локали, которые не указаны в файле glibc-2.13/localedata/SUPPORTED, в том маловероятном случае, когда таковые вам потребуются.

6.9.2. Конфигурирование пакета Glibc

Необходимо создать файл /etc/nsswitch.conf, поскольку хотя в пакете Glibc есть настройки, используемые по умолчанию в случае, когда этот файл отсутствует или поврежден, настройки 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

После ответов на несколько вопросов о вашем местоположении скрипт выведет имя часового пояса, например, America/Edmonton (America/Edmonton). Есть также ряд других возможных часовых поясов, которые перечисленные в файле /usr/share/zoneinfo, например, Canada/Eastern (Канада/Восточный) или EST5EDT, которые не определяются сценарием, но их также можно использовать.

Затем создайте файл /etc/localtime с помощью следующей команды:

cp -v --remove-destination /usr/share/zoneinfo/<xxx> \
    /etc/localtime

Замените <xxx> на имя выбранного часового пояса (например, Canada/Eastern).

Пояснение параметра команды cp:

--remove-destination
 

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

6.9.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.9.4. Описание пакета 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}, libc_nonshared.a, libcidn.so, libcrypt.{a,so}, libdl.{a,so}, libg.a, libieee.a, libm.{a,so}, libmcheck.a, libmemusage.so, libnsl.{a,so}, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.{a,so}, libpthread_nonshared.a, libresolv.{a,so}, librpcsvc.a, librt.{a,so}, libthread_db.so и libutil.{a,so}

Установленные директории: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/rpcsvc, /usr/include/sys, /usr/lib/gconv, /usr/lib/glibc, /usr/lib/locale, /usr/share/i18n, /usr/share/zoneinfo

Краткое описание

catchsegv

Может использоваться для трассировки стека, когда программа завершается из-за ошибки сегментации

gencat

Создает каталоги сообщений

getconf

Для определенных системных переменных изображаются системные конфигурационные значения.

getent

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

iconv

Выполняет преобразование набора символов

iconvconfig

Создает конфигурационные файлы для быстрой загрузки модуля iconv

ldconfig

Конфигурирование привязки времени исполнения для динамического компоновщика

ldd

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

lddlibc4

Облегчает доступ ldd к объектным файлам

locale

Выдает различную информацию о текущей локали

localedef

Компилирует спецификации, определяющие локали

mtrace

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

nscd

Демон, который обеспечивает кеширование наиболее общих запросов к службе имен

pcprofiledump

Выдает в дамп информацию, генерируемую при профилировании ПК

pt_chown

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

rpcgen

Генерирует код С для реализации протокола удаленного вызова процедур Remote Procedure Call (RPC)

rpcinfo

Осуществляет вызов RPC на сервер RPC

sln

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

sprof

Чтение и изображение данных профилирования совместно используемого объекта

tzselect

Задает пользователю вопросы о его месторасположении и выдает описание соответствующего часового пояса

xtrace

Трассирует исполнение программы путем печати функций, исполняемых в текущий момент

zdump

Выдает дамп часового пояса

zic

Компилятор часового пояса

ld.so

Программа-хелпер, используемая при выполнении совместно используемых библиотек

libBrokenLocale

Используется внутри Glibc для того, чтобы заставить работать определенные программы (например, некоторые приложения Motif). Дополнительную информацию смотрите в комментариях в файле glibc-2.13/locale/broken_cur_max.c

libSegFault

Обработчик сигналов об ошибках сегментации, используемый в catchsegv

libanl

Библиотека асинхроннного поиска имен

libbsd-compat

Обеспечивает мобильность, необходимую для того, чтобы в Linux запускать определенные программы Berkeley Software Distribution (BSD)

libc

Главная библиотека С

libcidn

Используется внутри Glibc для обработки интернационализированных доменных имен в функции getaddrinfo()

libcrypt

Криптографическая библиотека

libdl

Библиотека интерфейса динамической компоновки

libg

Фиктивная библиотека, в которой нет функций. Ранее была библиотека времени выполнения g++

libieee

Компоновка с этим модулем заставляет использовать правила обработки ошибок так, как это определено согласно Institute of Electrical and Electronic Engineers — IEEE (Институт инженеров электротехники и электроники). По умолчанию используется обработка ошибок POSIX.1

libm

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

libmcheck

При компоновке с этим модулем осуществляется контроль выделения памяти

libmemusage

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

libnsl

Библиотека сетевых служб

libnss

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

libpcprofile

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

libpthread

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

libresolv

Содержит функции создания, пересылки и интерпретации пакетов, используемых на серверах доменных имен в сети интернет

librpcsvc

Содержит функции, реализующие различные службы RPC

librt

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

libthread_db

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

libutil

Содержит код "стандартных" функций, используемых во многих различных утилитах Unix


Предыдущий раздел: Оглавление Следующий раздел:
Пакет Man-pages-3.32   Перенастройка инструментального набора



Комментарии