From 2203e654b389586650d553251b04544a34f189bf Mon Sep 17 00:00:00 2001 From: Sn4il Date: Mon, 2 Sep 2024 15:54:35 +0300 Subject: LFS 12.2 --- lfs-12.1-sysv/chapter08/glibc.html | 1314 ------------------------------------ 1 file changed, 1314 deletions(-) delete mode 100644 lfs-12.1-sysv/chapter08/glibc.html (limited to 'lfs-12.1-sysv/chapter08/glibc.html') diff --git a/lfs-12.1-sysv/chapter08/glibc.html b/lfs-12.1-sysv/chapter08/glibc.html deleted file mode 100644 index 277785f..0000000 --- a/lfs-12.1-sysv/chapter08/glibc.html +++ /dev/null @@ -1,1314 +0,0 @@ - - - - - - 8.5. Glibc-2.39 - - - - - - - - -

- 8.5. Glibc-2.39 -

-
-
-

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

-
-
-
- Приблизительное время сборки: - 12 SBU -
-
- Требуемое дисковое - пространство: 3.1 GB -
-
-
-
-
-

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

-

- Некоторые программы Glibc используют не совместимый с FHS каталог - /var/db для хранения своих данных во - время выполнения. Примените следующий патч, чтобы эти программы - хранили свои данные в каталогах, совместимых с FHS: -

-
patch -Np1 -i ../glibc-2.39-fhs-1.patch
-

- Документация Glibc рекомендует выполнять компиляцию в отдельном - каталоге: -

-
mkdir -v build
-cd       build
-

- Убедитесь, что утилиты ldconfig и sln будут установлены в - /usr/sbin: -

-
echo "rootsbindir=/usr/sbin" > configparms
-

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

-
../configure --prefix=/usr                            \
-             --disable-werror                         \
-             --enable-kernel=4.19                     \
-             --enable-stack-protector=strong          \
-             --disable-nscd                           \
-             libc_cv_slibdir=/usr/lib
-
-

- Значение параметров настройки: -

-
-
- --disable-werror -
-
-

- Отключает параметр -Werror, передаваемый GCC. Это необходимо - для запуска набора тестов. -

-
-
- --enable-kernel=4.19 -
-
-

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

-
-
- --enable-stack-protector=strong -
-
-

- Этот параметр повышает безопасность системы за счет - добавления дополнительного кода для проверки переполнения - буфера. Обратите внимание, что Glibc всегда явно - переопределяет параметры GCC по умолчанию, поэтому необходимо - всегда указывать эту опцию, несмотря на то, что мы уже - указали --enable-default-ssp для - GCC. -

-
-
- --disable-nscd -
-
-

- Параметр отключает сборку демона кэша службы имен, который - больше не используется. -

-
-
- libc_cv_slibdir=/usr/lib -
-
-

- Эта переменная устанавливает правильную библиотеку для всей - системы. Мы не хотим, чтобы использовалась lib64 -

-
-
-
-

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

-
make
-
- [Важно] -

- Важно -

-

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

-
-

- Как правило, несколько тестов не проходят. Ошибки тестирования, - перечисленные ниже, можно игнорировать. -

-
make check
-

- Вы можете увидеть, что ряд тестов завершились неудачей. Набор - тестов Glibc в некоторой степени зависит от хост-системы. Несколько - ошибок из более чем 5000 тестов можно игнорировать. Список наиболее - распространенных проблем последних версий LFS: -

-
-
    -
  • -

    - Известно, что io/tst-lchmod не работает в среде - chroot LFS. -

    -
  • -
  • -

    - Известно, что некоторые тесты, например nss/tst-nss-files-hosts-multi и - nptl/tst-thread-affinity* - завершаются неудачей из-за тайм-аута (особенно когда система - работает относительно медленно и/или набор тестов запущен в - несколько потоков). Эти тесты могут быть идентифицированы с - помощью следующей команды: -

    -
    grep "Timed out" -l $(find -name \*.out)
    -

    - Можно повторно запустить отдельный тест, увеличив таймаут с - помощью команды TIMEOUTFACTOR=<factor> make test - t=<test - name>. Например, TIMEOUTFACTOR=10 make test - t=nss/tst-nss-files-hosts-multi перезапустит - nss/tst-nss-files-hosts-multi, - увеличив начальный таймаут в 10 раз. -

    -
  • -
  • -

    - Кроме того, некоторые тесты могут завершиться неудачно при - использовании относительно старой модели процессора - (например, elf/tst-cpu-features-cpuinfo) или - версии ядра хоста (например, stdlib/tst-arc4random-thread). -

    -
  • -
-
-

- На этапе установки 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-2.39) в работающей системе LFS вам необходимо - принять некоторые дополнительные меры предосторожности, чтобы - избежать поломки системы: -

-
-
    -
  • -

    - Обновление Glibc в системе LFS до версии 11.0 не - поддерживается. Пересоберите LFS, если вы используете такую - старую систему, но вам нужна более новая Glibc. -

    -
  • -
  • -

    - При обновлении системы LFS до версии 12.0 установите - Libxcrypt следуя - инструкции Раздел 8.26, - «Libxcrypt-4.4.36.». В дополнение к обычной установке - Libxcrypt, вы ДОЛЖНЫ следовать примечанию со страницы - Libxcrypt, чтобы установить libcrypt.so.1* (заменив libcrypt.so.1 из предыдущей установки - Glibc). -

    -
  • -
  • -

    - При обновлении системы LFS до версии 12.1 удалите программу - nscd: -

    -
    rm -f /usr/sbin/nscd
    -
  • -
  • -

    - Обновите ядро и перезагрузитесь, если оно старше 4.19 - (проверьте текущую версию с помощью uname -r) или, если вы - хотите обновить имеющееся ядро, выполните действия из - Раздел 10.3, «Linux-6.7.4.» -

    -
  • -
  • -

    - Обновите заголовочные файлы API ядра, если они старше 4.19 - (проверьте текущую версию с помощью cat - /usr/include/linux/version.h) или, если вы - просто хотите обновить их, следуйте Раздел 5.4, - «Заголовочные файлы Linux-6.7.4 API» (но удалив - $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-2.39/localedata/SUPPORTED (он включает все - локали из списка выше и многие другие), выполнив команду: -

-
make localedata/install-locales
-

- Затем используйте команду localedef для создания и - установки локалей, не перечисленных в файле glibc-2.39/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. -

-
-
-
-

- 8.5.2. Настройка Glibc -

-
-

- 8.5.2.1. Добавление 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
-
-
-

- 8.5.2.2. Добавление данных о часовом поясе -

-

- Установите и настройте часовой пояс следующим образом: -

-
tar -xf ../../tzdata2024a.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). -

-
-
-

- 8.5.2.3. Настройка - динамического загрузчика -

-

- По умолчанию, динамический загрузчик (/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
-
-
-
-

- 8.5.3. Содержимое - пакета 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 -

-
-

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

-
-

- getconf -

-
-

- Отображает настройки системы для специфичных переменных - файловой системы -

-
-

- getent -

-
-

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

-
-

- iconv -

-
-

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

-
-

- iconvconfig -

-
-

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

-
-

- ldconfig -

-
-

- Настраивает привязки времени выполнения динамического - компоновщика -

-
-

- ldd -

-
-

- Сообщает, какие общие библиотеки требуются каждой - программе или общей библиотеке -

-
-

- lddlibc4 -

-
-

- Помогает ldd работать с - объектными файлами. Он не существует на более новых - архитектурах, таких как x86_64 -

-
-

- locale -

-
-

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

-
-

- localedef -

-
-

- Компилирует спецификации локали -

-
-

- makedb -

-
-

- Создает простую базу данных на основе текстового ввода -

-
-

- mtrace -

-
-

- Читает и интерпретирует файл трассировки памяти; - отображает сводку в удобочитаемом формате -

-
-

- pcprofiledump -

-
-

- Создает дамп информации, генерируемой при профилировании - ПК -

-
-

- pldd -

-
-

- Перечисляет динамические общие объекты, используемые - запущенными процессами. -

-
-

- sln -

-
-

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

-
-

- sotruss -

-
-

- Отслеживает вызовы процедур общей библиотеки указанной - команды -

-
-

- sprof -

-
-

- Читает и отображает данные профилирования общих объектов. -

-
-

- tzselect -

-
-

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

-
-

- xtrace -

-
-

- Отслеживает выполнение программы, отображая выполняемую в - данный момент функцию -

-
-

- zdump -

-
-

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

-
-

- zic -

-
-

- Компилятор часовых поясов -

-
-

- ld-*.so -

-
-

- Вспомогательная программа для исполняемых файлов общей - библиотеки -

-
-

- libBrokenLocale -

-
-

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

-
-

- libanl -

-
-

- Библиотека-заглушка, не содержащая функций. Ранее это - была библиотека асинхронного поиска имен, функции которой - теперь находятся в libc -

-
-

- libc -

-
-

- Основная библиотека C -

-
-

- libc_malloc_debug -

-
-

- Включает проверку выделения памяти при предварительной - загрузке -

-
-

- libdl -

-
-

- Библиотека-заглушка, не содержащая функций. Ранее была - библиотекой интерфейса динамической компоновки, функции - которой теперь находятся в libc -

-
-

- libg -

-
-

- Библиотека-заглушка без функций. Раньше была библиотекой - среды выполнения для g++ -

-
-

- libm -

-
-

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

-
-

- libmvec -

-
-

- Библиотека векторных математических вычислений, - подключаемая по мере необходимости при использовании - libm -

-
-

- libmcheck -

-
-

- Включает проверку выделения памяти при подключении к -

-
-

- libmemusage -

-
-

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

-
-

- libnsl -

-
-

- Библиотека сетевых служб, которая в настоящее время - устарела -

-
-

- libnss_* -

-
-

- Модули Name Service Switch, содержащие функции для - разрешения имен хостов, имен пользователей, имен групп, - псевдонимов, служб, протоколов и т. д. Загружаются - libc в соответствии с - конфигурацией в /etc/nsswitch.conf -

-
-

- libpcprofile -

-
-

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

-
-

- libpthread -

-
-

- Библиотека-заглушка, не содержащая функций. Ранее - содержала функции, обеспечивающие большинство - интерфейсов, заданных POSIX.1c Threads Extensions - (расширения реализации потоков) и интерфейсы семафоров, - указанных в POSIX.1b Real-time Extension (расширения - реального времени), теперь эти функции находятся в - libc -

-
-

- libresolv -

-
-

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

-
-

- librt -

-
-

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

-
-

- libthread_db -

-
-

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

-
-

- libutil -

-
-

- Библиотека-заглушка, не содержащая функций. Ранее - содержал код для «стандартных» функций, используемых - во многих утилитах Unix. Эти функции теперь находятся в - libc -

-
-
-
-
- - - -- cgit v1.2.3