%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; Документация 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 \ --disable-nscd \ libc_cv_slibdir=/usr/lib Значение параметров настройки: --disable-werror Отключает параметр -Werror, передаваемый GCC. Это необходимо для запуска набора тестов. --enable-kernel=&min-kernel; Этот параметр сообщает системе сборки, что Glibc может использоваться с ядрами старше &min-kernel;. Это значение используется для создание обходных путей на случай, если системный вызов, представленный в более поздней версии, нельзя будет использовать. --enable-stack-protector=strong Этот параметр повышает безопасность системы за счет добавления дополнительного кода для проверки переполнения буфера. Обратите внимание, что Glibc всегда явно переопределяет параметры GCC по умолчанию, поэтому необходимо всегда указывать эту опцию, несмотря на то, что мы уже указали для GCC. --disable-nscd Параметр отключает сборку демона кэша службы имен, который больше не используется. libc_cv_slibdir=/usr/lib Эта переменная устанавливает правильную библиотеку для всей системы. Мы не хотим, чтобы использовалась lib64 Скомпилируйте пакет: make В этом разделе набор тестов для Glibc считается критически важным. Ни в коем случае не пропускайте его. Как правило, несколько тестов не проходят. Ошибки тестирования, перечисленные ниже, можно игнорировать. make check Вы можете увидеть, что ряд тестов завершились неудачей. Набор тестов Glibc в некоторой степени зависит от хост-системы. Несколько ошибок из более чем 5000 тестов можно игнорировать. Список наиболее распространенных проблем последних версий LFS: Известно, что io/tst-lchmod не работает в среде chroot LFS. Известно что тест stdlib/tst-arc4random-thread завершается неудачей, если ядро хоста относительно старое. Некоторые тесты, например, nss/tst-nss-files-hosts-multi не работают на относительно медленных системах из-за внутреннего тайм-аута. Кроме того, некоторые тесты могут завершиться неудачно при использовании относительно старой модели процессора или версии ядра хоста. На этапе установки Glibc будет жаловаться на отсутствие файла /etc/ld.so.conf, хотя это безобидное сообщение, предотвратить его появление можно с помощью команды: touch /etc/ld.so.conf Исправьте Makefile, чтобы пропустить устаревшую проверку работоспособности, которая завершается неудачей в современной конфигурации Glibc: sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile При обновлении Glibc до новой минорной версии (например, с Glibc-2.36 до Glibc-&glibc-version;) в работающей системе LFS вам необходимо принять некоторые дополнительные меры предосторожности, чтобы избежать поломки системы: Обновление Glibc в системе LFS до версии 11.0 не поддерживается. Пересоберите LFS, если вы используете такую старую систему, но вам нужна более новая Glibc. При обновлении системы LFS до версии 12.0 установите Libxcrypt следуя инструкции . В дополнение к обычной установке Libxcrypt, вы ДОЛЖНЫ следовать примечанию со страницы Libxcrypt, чтобы установить libcrypt.so.1* (перезаписав libcrypt.so.1 из предыдущей установки Glibc). При обновлении системы LFS до версии 12.1 удалите программу nscd: rm -f /usr/sbin/nscd Если система (до LFS 12.1) основана на Systemd, необходимо также отключить и остановить службу nscd прямо сейчас: systemctl disable --now nscd Обновите ядро и перезагрузитесь, если оно старше &min-kernel; (проверьте текущую версию с помощью uname -r) или, если вы хотите обновить имеющееся ядро, выполните действия из Обновите заголовочные файлы API ядра, если они старше &min-kernel; (проверьте текущую версию с помощью cat /usr/include/linux/version.h) или, если вы просто хотите обновить их, следуйте (но удалив $LFS из команды cp). Выполните установку DESTDIR и обновите общие библиотеки Glibc в системе с помощью одной команды install: make DESTDIR=$PWD/dest install install -vm755 dest/usr/lib/*.so.* /usr/lib Крайне важно строго следовать описанным выше шагам, если вы не совсем понимаете, что делаете. Любое неожиданное отклонение может сделать систему полностью непригодной для использования. ВЫ ПРЕДУПРЕЖДЕНЫ. Затем продолжайте выполнять команды make install, sed для /usr/bin/ldd и команды для установки локалей. Как только они будут выполнены, перезагрузите систему. Установите пакет: make install Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd: sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd Затем установите локали, которые дадут возможность системе отвечать на разных языках. Ни одна из локалей не требуется системе, но если некоторые из них отсутствуют, то наборы тестов ряда пакетов будут пропускать важные тестовые сценарии. Отдельные локали можно установить с помощью программы 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 C -f UTF-8 C.UTF-8 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 C -f UTF-8 C.UTF-8 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 cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files systemd group: files systemd shadow: files systemd hosts: mymachines resolve [!UNAVAIL=return] files myhostname 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, 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, 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/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 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 Библиотека-заглушка, не содержащая функций. Ранее это была библиотека асинхронного поиска имен, функции которой теперь находятся в libc libanl libc Основная библиотека C libc libc_malloc_debug Включает проверку выделения памяти при предварительной загрузке libc_malloc_debug 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.1c Threads Extensions (расширения реализации потоков) и интерфейсы семафоров, указанных в POSIX.1b Real-time Extension (расширения реального времени), теперь эти функции находятся в libc libpthread libresolv Содержит функции создания, пересылки и интерпретации пакетов, используемых на серверах доменных имен в сети интернет libresolv librt Содержит функции, реализующие большую часть интерфейсов, определяемых в POSIX.1b Real-time Extension (расширения реального времени) librt libthread_db Содержит функции, полезные для сборки отладчиков для многопоточных программ libthread_db libutil Библиотека-заглушка, не содержащая функций. Ранее содержал код для стандартных функций, используемых во многих утилитах Unix. Эти функции теперь находятся в libc libutil