Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
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/) указывается: "Данная библиотека предоставляет собой реализацию |
Система сборки пакета 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 с используемого по умолчанию директория |
Откомпилируйте пакет:
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 | |
Этот параметр необходим для того, чтобы принудительно удалить уже существующую символическую ссылку. Причина копирования файла вместо использования символической ссылки состоит в том, что нужно закрыть ситуацию, когда |
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 | Компилятор часового пояса |
| Программа-хелпер, используемая при выполнении совместно используемых библиотек |
| Используется внутри Glibc для того, чтобы заставить работать определенные программы (например, некоторые приложения Motif). Дополнительную информацию смотрите в комментариях в файле |
| Обработчик сигналов об ошибках сегментации, используемый в catchsegv |
| Библиотека асинхроннного поиска имен |
| Обеспечивает мобильность, необходимую для того, чтобы в Linux запускать определенные программы Berkeley Software Distribution (BSD) |
| Главная библиотека С |
| Используется внутри Glibc для обработки интернационализированных доменных имен в функции |
| Криптографическая библиотека |
| Библиотека интерфейса динамической компоновки |
| Фиктивная библиотека, в которой нет функций. Ранее была библиотека времени выполнения g++ |
| Компоновка с этим модулем заставляет использовать правила обработки ошибок так, как это определено согласно Institute of Electrical and Electronic Engineers — IEEE (Институт инженеров электротехники и электроники). По умолчанию используется обработка ошибок POSIX.1 |
| Математическая библиотека |
| При компоновке с этим модулем осуществляется контроль выделения памяти |
| Используется в memusage для помощи в сборе информации об использовании программой памяти |
| Библиотека сетевых служб |
| Библиотеки смены службы имен (Name Service Switch), в которых находятся функции для работы с именами хостов, именами пользователей, именами групп, алиасами, сервисами, протоколами и так далее. |
| Содержит функции профилирования, используемые для отслеживания времени, потраченного процессором в конкретных строках исходного кода |
| Библиотека потоков POSIX |
| Содержит функции создания, пересылки и интерпретации пакетов, используемых на серверах доменных имен в сети интернет |
| Содержит функции, реализующие различные службы RPC |
| Содержит функции, реализующие большую часть интерфейсов, определяемых в POSIX.1b Realtime Extension |
| Содержит функции, используемые для сборки отладчиков для мультипоточных программ |
| Содержит код "стандартных" функций, используемых во многих различных утилитах Unix |
Предыдущий раздел: | Оглавление | Следующий раздел: |
Пакет Man-pages-3.32 | Перенастройка инструментального набора |