%general-entities; ]> glibc &glibc-version;
&glibc-url;
Glibc-&glibc-version; Glibc <para>Пакет Glibc содержит основную библиотеку C. Эта библиотека предоставляет основные процедуры для выделения памяти, поиска в каталогах, открытия и закрытия файлов, чтения и записи файлов, обработки строк, сопоставления с образцом, арифметики и так далее</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&glibc-fin-sbu;</seg> <seg>&glibc-fin-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>Установка пакета Glibc Некоторые программы Glibc используют не совместимый с FHS каталог /var/db для хранения своих данных во время выполнения. Примените следующий патч, чтобы эти программы хранили свои данные в каталогах, совместимых с FHS: patch -Np1 -i ../&glibc-fhs-patch; Исправьте проблему безопасности, обнаруженную разработчиками: sed '/width -=/s/workend - string/number_length/' \ -i stdio-common/vfprintf-process-arg.c Документация Glibc рекомендует выполнять компиляцию в отдельном каталоге: mkdir -v build cd build Убедитесь, что утилиты ldconfig и sln будут установлены в /usr/sbin: echo "rootsbindir=/usr/sbin" > configparms Подготовьте Glibc к компиляции: ../configure --prefix=/usr \ --disable-werror \ --enable-kernel=&min-kernel; \ --enable-stack-protector=strong \ --with-headers=/usr/include \ libc_cv_slibdir=/usr/lib Значение параметров настройки: --disable-werror Отключает параметр -Werror, передаваемый GCC. Это необходимо для запуска набора тестов. --enable-kernel=&min-kernel; Этот параметр сообщает системе сборки, что Glibc может использоваться с ядрами старше &min-kernel;. Это значение используется для создание обходных путей на случай, если системный вызов, представленный в более поздней версии, нельзя будет использовать. --enable-stack-protector=strong Этот параметр повышает безопасность системы за счет добавления дополнительного кода для проверки переполнения буфера. --with-headers=/usr/include Сообщает системе сборки местоположение заголовочных файлов API ядра libc_cv_slibdir=/usr/lib Эта переменная устанавливает правильную библиотеку для всей системы. Мы не хотим, чтобы использовалась lib64 Скомпилируйте пакет: make В этом разделе набор тестов для Glibc считается критически важным. Ни в коем случае не пропускайте его. Как правило, несколько тестов не проходят. Ошибки тестирования, перечисленные ниже, можно игнорировать. make check Вы можете увидеть, что ряд тестов завершились неудачей. Набор тестов Glibc в некоторой степени зависит от хост-системы. Несколько ошибок из более чем 5000 тестов можно игнорировать. Список наиболее распространенных проблем последних версий LFS: Известно, что io/tst-lchmod не работает в среде chroot LFS. Известно, что misc/tst-ttyname не работает в среде chroot LFS. Известно что тест stdlib/tst-arc4random-thread завершается неудачей, если ядро хоста относительно старое. Некоторые тесты, например, nss/tst-nss-files-hosts-multi не работают на относительно медленных системах из-за внутреннего тайм-аута. На этапе установки Glibc будет жаловаться на отсутствие файла /etc/ld.so.conf, хотя это безобидное сообщение, предотвратить его появление можно с помощью команды: touch /etc/ld.so.conf Исправьте Makefile, чтобы пропустить ненужную проверку работоспособности, которая завершается неудачей в неполной среде LFS: sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile Установите пакет: make install Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd: sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd Установите файл настроек и создайте рабочий каталог nscd: cp -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd Установите файлы поддержки systemd для nscd: install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf install -v -Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service Затем установите локали, которые дадут возможность системе отвечать на разных языках. Ни одна из локалей не требуется системе, но если некоторые из них отсутствуют, то наборы тестов ряда пакетов будут пропускать важные тестовые сценарии. Отдельные локали можно установить с помощью программы 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 POSIX -f UTF-8 C.UTF-8 2> /dev/null || true 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 el_GR -f ISO-8859-7 el_GR localedef -i en_GB -f ISO-8859-1 en_GB localedef -i en_GB -f UTF-8 en_GB.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_ES -f ISO-8859-15 es_ES@euro 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 is_IS -f ISO-8859-1 is_IS localedef -i is_IS -f UTF-8 is_IS.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f ISO-8859-15 it_IT@euro localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i se_NO -f UTF-8 se_NO.UTF-8 localedef -i ta_IN -f UTF-8 ta_IN.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030 localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 Кроме того, установите локаль для вашей страны, языка и набора символов. В качестве альтернативы, установите сразу все локали перечисленные в файле glibc-&glibc-version;/localedata/SUPPORTED (он включает все локали из списка выше и многие другие), выполнив команду: make localedata/install-locales Затем используйте команду localedef для создания и установки локалей, не перечисленных в файле glibc-&glibc-version;/localedata/SUPPORTED, когда они вам понадобятся. Например, для некоторых тестов в этой главе потребуются следующие две локали: localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true Glibc теперь использует libidn2 для разрешения интернационализированных доменных имен. Если такая функция необходима, то инструкцию по установке libidn2 можно найти на странице BLFS libidn2. Настройка Glibc /etc/nsswitch.conf /etc/localtime Добавление nsswitch.conf Необходимо создать файл /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 Добавление данных о часовом поясе Установите и настройте часовой пояс следующим образом: tar -xf ../../tzdata&tzdata-version;.tar.gz ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/{posix,right} for tz in etcetera southamerica northamerica europe africa antarctica \ asia australasia backward; do zic -L /dev/null -d $ZONEINFO ${tz} zic -L /dev/null -d $ZONEINFO/posix ${tz} zic -L leapseconds -d $ZONEINFO/right ${tz} done cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO Значение команд zic: zic -L /dev/null ... Создаёт часовые пояса posix без секунд координации. Обычно их помещают как в zoneinfo так и в zoneinfo/posix. Часовые пояса POSIX должны быть прописаны в zoneinfo, иначе различные тесты будут сообщать об ошибках. На встраиваемых системах с небольшим диском, где часовые пояса никогда не будут обновляться, можно сэкономить примерно 1.9 MB не используя каталог posix, однако некоторые приложения или наборы тестов могут вызывать сбои. zic -L leapseconds ... Создаёт правильные часовые пояса с секундами координации. На встраиваемых системах с небольшим диском, где часовые пояса никогда не будут обновляться, а правильность времени неважна, можно выиграть примерно 1.9 MB, исключив каталог right. zic ... -p ... Создаёт файл posixrules. Используется New York, потому что POSIX требует соответствия правил летнего времени с правилами США. Один из способов определить местный часовой пояс — запустить следующий скрипт: tzselect После нескольких вопросов о местоположении скрипт выдаст наименование часового пояса (например America/Edmonton). В файле /usr/share/zoneinfo перечислены и другие возможные часовые пояса, такие как Canada/Eastern или EST5EDT, которые не распознаются скриптом, но могут быть использованы. Создайте файл /etc/localtime выполнив: ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime Замените <xxx> на имя выбранного часового пояса (например, Europe/Moscow). Настройка динамического загрузчика /etc/ld.so.conf По умолчанию, динамический загрузчик (/lib/ld-linux.so.2) ищет в каталоге /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 EOF Динамический загрузчик может выполнить поиск в каталоге и включить содержимое найденных там файлов. Обычно такие файлы состоят из одной строки и содержат путь к библиотеке. Чтобы добавить эту возможность, выполните следующие команды: cat >> /etc/ld.so.conf << "EOF" # Add an include directory include /etc/ld.so.conf.d/*.conf EOF mkdir -pv /etc/ld.so.conf.d Содержимое пакета Glibc Установленные программы Установленные библиотеки Созданные каталоги gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, ld.so (symlink to ld-linux-x86-64.so.2 or ld-linux.so.2), locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump и zic ld-linux-x86-64.so.2, ld-linux.so.2, libBrokenLocale.{a,so}, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so, libcrypt.{a,so}, libdl.{a,so.2}, libg.a, libm.{a,so}, libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.so.1, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libpcprofile.so, libpthread.{a,so.0}, libresolv.{a,so}, librt.{a,so.1}, libthread_db.so и libutil.{a,so.1} /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/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd и /var/lib/nss_db Краткое описание gencat Создает каталоги сообщений gencat getconf Отображает настройки системы для специфичных переменных файловой системы getconf getent Получает записи из административной базы данных getent iconv Выполняет преобразование набора символов iconv iconvconfig Создает быстрозагружаемые файлы настроек модуля iconv iconvconfig ldconfig Настраивает привязки времени выполнения динамического компоновщика ldconfig ldd Сообщает, какие общие библиотеки требуются каждой программе или общей библиотеке ldd lddlibc4 Помогает ldd работать с объектными файлами. Он не существует на более новых архитектурах, таких как x86_64 lddlibc4 locale Выводит различную информацию о текущей локали locale localedef Компилирует спецификации локали localedef makedb Создает простую базу данных на основе текстового ввода makedb mtrace Читает и интерпретирует файл трассировки памяти; отображает сводку в удобочитаемом формате mtrace nscd Демон, который обеспечивает кеширование наиболее распространенных запросов к службе имен nscd pcprofiledump Создает дамп информации, генерируемой при профилировании ПК pcprofiledump pldd Перечисляет динамические общие объекты, используемые запущенными процессами. pldd sln Статически скомпонованная программа ln sln sotruss Отслеживает вызовы процедур общей библиотеки указанной команды sotruss sprof Читает и отображает данные профилирования общих объектов. sprof tzselect Запрашивает у пользователя информацию о текущем местоположении системы и выводит описание соответствующего часового пояса. tzselect xtrace Отслеживает выполнение программы, отображая выполняемую в данный момент функцию xtrace zdump Выдает дамп часового пояса zdump zic Компилятор часовых поясов zic ld-*.so Вспомогательная программа для исполняемых файлов общей библиотеки ld-&glibc-version;.so libBrokenLocale Используется внутри Glibc как грубый хак для запуска сломанных программ (например, некоторые приложения Motif). Прочитайте комментарии в glibc-&glibc-version;/locale/broken_cur_max.c для получения дополнительной информации libBrokenLocale libanl Библиотека асинхронного поиска имен libanl libc Основная библиотека C libc libc_malloc_debug Включает проверку выделения памяти при предварительной загрузке libc_malloc_debug libcrypt Криптографическая библиотека libcrypt libdl Библиотека-заглушка, не содержащая функций. Ранее была библиотекой интерфейса динамической компоновки, функции которой теперь находятся в libc libdl libg Библиотека-заглушка без функций. Раньше была библиотекой среды выполнения для g++ libg libm Математическая библиотека libm libmvec Библиотека векторных математических вычислений, подключаемая по мере необходимости при использовании libm libmvec libmcheck Включает проверку выделения памяти при подключении к libmcheck libmemusage Используется memusage для сбора информации об использовании памяти программой libmemusage libnsl Библиотека сетевых служб, которая в настоящее время устарела libnsl libnss_* Модули Name Service Switch, содержащие функции для разрешения имен хостов, имен пользователей, имен групп, псевдонимов, служб, протоколов и т. д. Загружаются libc в соответствии с конфигурацией в /etc/nsswitch.conf libnss_* libpcprofile Содержит функции профилирования, используемые для отслеживания времени, потраченного процессором в конкретных строках исходного кода libpcprofile libpthread Библиотека-заглушка, не содержащая функций. Ранее содержал функции, обеспечивающие большинство интерфейсов, указанных в POSIX.1b Realtime Extension, теперь эти функции находятся в libc libpthread libresolv Содержит функции создания, пересылки и интерпретации пакетов, используемых на серверах доменных имен в сети интернет libresolv librt Содержит функции, реализующие большую часть интерфейсов, определяемых в POSIX.1b Realtime Extension librt libthread_db Содержит функции, полезные для сборки отладчиков для многопоточных программ libthread_db libutil Библиотека-заглушка, не содержащая функций. Ранее содержал код для стандартных функций, используемых во многих утилитах Unix. Эти функции теперь находятся в libc libutil