lfs-ru/chapter08/glibc.xml

1055 lines
50 KiB
XML
Raw Normal View History

2022-06-16 00:33:07 +03:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-system-glibc" role="wrap">
<?dbhtml filename="glibc.html"?>
<sect1info condition="script">
<productname>glibc</productname>
<productnumber>&glibc-version;</productnumber>
<address>&glibc-url;</address>
</sect1info>
<title>Glibc-&glibc-version;</title>
<indexterm zone="ch-system-glibc">
<primary sortas="a-Glibc">Glibc</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Пакет Glibc содержит основную библиотеку C. Эта библиотека предоставляет
основные процедуры для выделения памяти, поиска в каталогах, открытия и закрытия
2023-08-03 23:54:52 +03:00
файлов, чтения и записи файлов, обработки строк, сопоставления с образцом, арифметики
и так далее</para>
2022-06-16 00:33:07 +03:00
<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</title>
<para>Некоторые программы Glibc используют не совместимый с FHS каталог
<filename class="directory">/var/db</filename> для хранения своих данных во
время выполнения. Примените следующий патч, чтобы эти программы хранили свои
данные в каталогах, совместимых с FHS:</para>
<screen><userinput remap="pre">patch -Np1 -i ../&glibc-fhs-patch;</userinput></screen>
<!--
2024-05-13 09:54:36 +03:00
<para>Теперь исправьте уязвимость безопасности:</para>
<screen><userinput remap="pre">patch -Np1 -i ../&glibc-upstream-patch;</userinput></screen>
-->
2022-06-16 00:33:07 +03:00
<para>Документация Glibc рекомендует выполнять компиляцию в отдельном каталоге:</para>
<screen><userinput remap="pre">mkdir -v build
cd build</userinput></screen>
<para>Убедитесь, что утилиты <command>ldconfig</command> и <command>sln</command>
будут установлены в <filename class="directory">/usr/sbin</filename>:</para>
<screen><userinput remap="pre">echo "rootsbindir=/usr/sbin" &gt; configparms</userinput></screen>
<para>Подготовьте Glibc к компиляции:</para>
<screen><userinput remap="configure">../configure --prefix=/usr \
--disable-werror \
--enable-kernel=&min-kernel; \
2022-06-16 00:33:07 +03:00
--enable-stack-protector=strong \
--disable-nscd \
2022-06-16 00:33:07 +03:00
libc_cv_slibdir=/usr/lib</userinput></screen>
<variablelist>
<title>Значение параметров настройки:</title>
<varlistentry>
<term><parameter>--disable-werror</parameter></term>
<listitem>
<para>Отключает параметр -Werror, передаваемый GCC. Это необходимо для
запуска набора тестов.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-kernel=&min-kernel;</parameter></term>
<listitem>
2023-07-09 13:43:13 +03:00
<para>Этот параметр сообщает системе сборки, что Glibc может использоваться
2022-06-16 00:33:07 +03:00
с ядрами старше &min-kernel;. Это значение используется для создание обходных
путей на случай, если системный вызов, представленный в более поздней версии,
нельзя будет использовать.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-stack-protector=strong</parameter></term>
<listitem>
<para>Этот параметр повышает безопасность системы за счет добавления
дополнительного кода для проверки переполнения буфера. Обратите внимание, что
Glibc всегда явно переопределяет параметры GCC по умолчанию, поэтому необходимо
всегда указывать эту опцию, несмотря на то, что мы уже указали
<option>--enable-default-ssp</option> для GCC.</para>
2022-06-16 00:33:07 +03:00
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--disable-nscd</parameter></term>
<listitem>
<para>Параметр отключает сборку демона кэша службы имен, который больше не
используется.</para>
</listitem>
</varlistentry>
2022-06-16 00:33:07 +03:00
<varlistentry>
<term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
<listitem>
2023-08-03 23:54:52 +03:00
<para>Эта переменная устанавливает правильную библиотеку для всей системы. Мы
2022-06-16 00:33:07 +03:00
не хотим, чтобы использовалась lib64</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen>
<important>
<para>В этом разделе набор тестов для Glibc считается критически важным. Ни в
коем случае не пропускайте его.</para>
</important>
<para>Как правило, несколько тестов не проходят. Ошибки тестирования, перечисленные
ниже, можно игнорировать.</para>
<!-- Use remap="make" here to work around a jhalfs issue. -->
<!--<screen><userinput remap="make">case $(uname -m) in
i?86) ln -sfnv $PWD/elf/ld-linux.so.2 /lib ;;
x86_64) ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib ;;
esac</userinput></screen>
<note><para>The symbolic link above is needed to run the tests at this
stage of building in the chroot environment. It will be overwritten
in the install phase below.</para></note>
-->
<screen><userinput remap="test">make check</userinput></screen>
<para>Вы можете увидеть, что ряд тестов завершились неудачей. Набор тестов Glibc в
2023-07-09 13:43:13 +03:00
некоторой степени зависит от хост-системы. Несколько ошибок из более чем 5000 тестов
2022-06-16 00:33:07 +03:00
можно игнорировать. Список наиболее распространенных проблем последних версий LFS:</para>
<itemizedlist>
<listitem>
<para>Известно, что <emphasis>io/tst-lchmod</emphasis> не работает в среде chroot LFS.</para>
</listitem>
<listitem>
<para>Известно, что некоторые тесты, например
<emphasis>nss/tst-nss-files-hosts-multi</emphasis> и
<emphasis>nptl/tst-thread-affinity*</emphasis>
завершаются неудачей из-за тайм-аута (особенно когда система работает относительно
медленно и/или набор тестов запущен в несколько потоков).
Эти тесты могут быть идентифицированы с помощью следующей команды:</para>
<screen><userinput remap="test">grep "Timed out" $(find -name \*.out)</userinput></screen>
<para>Можно повторно запустить отдельный тест, увеличив таймаут с помощью команды
<command>TIMEOUTFACTOR=<replaceable>&lt;factor&gt;</replaceable>
make test t=<replaceable>&lt;test name&gt;</replaceable></command>.
Например, <command>TIMEOUTFACTOR=10 make test
t=nss/tst-nss-files-hosts-multi</command> перезапустит
<emphasis>nss/tst-nss-files-hosts-multi</emphasis>, увеличив начальный таймаут
в 10 раз.</para>
2022-06-16 00:33:07 +03:00
</listitem>
<listitem>
<para>Кроме того, некоторые тесты могут завершиться неудачно при использовании
относительно старой модели процессора (например,
<emphasis>elf/tst-cpu-features-cpuinfo</emphasis>) или версии ядра хоста (например,
<emphasis>stdlib/tst-arc4random-thread</emphasis>).</para>
2022-06-16 00:33:07 +03:00
</listitem>
</itemizedlist>
<para>На этапе установки Glibc будет жаловаться на отсутствие файла
<filename>/etc/ld.so.conf</filename>, хотя это безобидное сообщение, предотвратить
его появление можно с помощью команды:</para>
<screen><userinput remap="install">touch /etc/ld.so.conf</userinput></screen>
<!-- https://sourceware.org/bugzilla/show_bug.cgi?id=21911 -->
<para>Исправьте Makefile, чтобы пропустить устаревшую проверку работоспособности,
которая завершается неудачей в современной конфигурации Glibc:</para>
2022-06-16 00:33:07 +03:00
<screen><userinput remap="install">sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile</userinput></screen>
<important>
<para>
При обновлении Glibc до новой минорной версии (например, с Glibc-2.36 до
Glibc-&glibc-version;) в работающей системе LFS вам необходимо принять некоторые
дополнительные меры предосторожности, чтобы избежать поломки системы:
</para>
<itemizedlist>
<listitem>
<!-- There are two reasons we don't support this:
1. Upgrading on a system with separate /lib and /usr/lib is
tricky.
2. With Glibc prior to 2.34 libc.so.6 etc. are symlinks to
libc-2.33.so etc., again causing the upgradation tricky.
The Glibc NEWS file explicit states they no longer use
symlinks for the ABI names to avoid upgradation
issues. -->
<para>
Обновление Glibc в системе LFS до версии 11.0 не поддерживается. Пересоберите LFS,
если вы используете такую старую систему, но вам нужна более новая Glibc.
</para>
</listitem>
<!-- https://sourceware.org/pipermail/libc-alpha/2024-January/154095.html -->
<listitem>
<para>
При обновлении системы LFS до версии 12.0 установите
<application>Libxcrypt</application> следуя инструкции
<xref role='.' linkend='ch-system-libxcrypt'/>. В дополнение к обычной установке
<application>Libxcrypt</application>, <emphasis role='bold'>вы ДОЛЖНЫ следовать
примечанию со страницы Libxcrypt, чтобы установить
<filename class='libraryfile '>libcrypt.so.1*</filename> (заменив
<filename class='libraryfile'>libcrypt.so.1</filename> из предыдущей установки
Glibc)</emphasis>.
</para>
</listitem>
<!-- Otherwise on lfs-systemd nscd will fail to start on boot,
and on both lfs-sysv and lfs-systemd useradd etc. will try
to start nscd, then nscd will fail to start as well and
produce some spurious error message. -->
<listitem>
<para>
При обновлении системы LFS до версии 12.1 удалите программу <command>nscd</command>:
</para>
<screen role='nodump'><userinput>rm -f /usr/sbin/nscd</userinput></screen>
<para revision='systemd'>
Если система (до LFS 12.1) основана на Systemd, необходимо также отключить и
остановить службу <command>nscd</command> прямо сейчас:
</para>
<screen revision='systemd' role='nodump'><userinput>systemctl disable --now nscd</userinput></screen>
</listitem>
<listitem>
<para>
Обновите ядро и перезагрузитесь, если оно старше &min-kernel; (проверьте текущую
версию с помощью <command>uname -r</command>) или, если вы хотите обновить имеющееся
ядро, выполните действия из <xref linkend='ch-bootable-kernel' role='.'/>
</para>
</listitem>
<listitem>
<para>
Обновите заголовочные файлы API ядра, если они старше &min-kernel; (проверьте
текущую версию с помощью <command>cat /usr/include/linux/version.h</command>)
или, если вы просто хотите обновить их, следуйте <xref linkend='ch-tools-linux-headers'/>
(но удалив <envar>$LFS</envar> из команды <command>cp</command>).
</para>
</listitem>
<!-- This is to ensure we don't start a process at the time point
where some Glibc shared libraries are updated but the others
are not. Such mismatches can cause programs crash on startup,
esp. a mismatch between ld-linux-x86-64.so.2 and
libc.so.6. Note that a crash in the installation process
will leave the system in a state with the mismatch forever,
unrecoverable without the help of another distro. -->
<listitem>
<para>
Выполните установку <envar>DESTDIR</envar> и обновите общие библиотеки
Glibc в системе с помощью одной команды <command>install</command>:
</para>
<screen role='nodump'><userinput>make DESTDIR=$PWD/dest install
install -vm755 dest/usr/lib/*.so.* /usr/lib</userinput></screen>
</listitem>
</itemizedlist>
<para>
Крайне важно строго следовать описанным выше шагам, если вы не совсем понимаете,
что делаете. <emphasis role='bold'>Любое неожиданное отклонение может сделать систему
полностью непригодной для использования. ВЫ ПРЕДУПРЕЖДЕНЫ.</emphasis>
</para>
<para>
Затем продолжайте выполнять команды <command>make install</command>, <command>sed</command>
для <filename>/usr/bin/ldd</filename> и команды для установки локалей. Как только
они будут выполнены, перезагрузите систему.
</para>
</important>
2022-06-16 00:33:07 +03:00
<para>Установите пакет:</para>
<screen><userinput remap="install">make install</userinput></screen>
<para>Исправьте жестко заданный путь к исполняемому загрузчику в скрипте
<command>ldd</command>:</para>
<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd</userinput></screen>
<!--
2022-06-16 00:33:07 +03:00
<para>Установите файл настроек и создайте рабочий каталог
<command>nscd</command>:</para>
<screen><userinput remap="install">cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd</userinput></screen>
<para revision="systemd">Установите файлы поддержки systemd для
<command>nscd</command>:</para>
<screen revision="systemd"><userinput remap="install">install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf
install -v -Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service</userinput></screen>
-->
2023-07-09 13:43:13 +03:00
<para>Затем установите локали, которые дадут возможность системе отвечать на разных
языках. Ни одна из локалей не требуется системе, но если некоторые из них отсутствуют,
то наборы тестов ряда пакетов будут пропускать важные тестовые сценарии.</para>
2022-06-16 00:33:07 +03:00
<para>Отдельные локали можно установить с помощью программы
<command>localedef</command>. Например, вторая команда
<command>localedef</command> приведенная ниже, объединяет определение независимой от
набора символов локали
<filename>/usr/share/i18n/locales/cs_CZ</filename>
с набором символов
<filename>/usr/share/i18n/charmaps/UTF-8.gz</filename>
и добавляет результат в файл
<filename>/usr/lib/locale/locale-archive</filename>.
Следующие инструкции установят минимальный набор локалей, необходимый для
оптимального охвата тестов</para>
<screen role="nodump"><userinput remap="locale-test">localedef -i C -f UTF-8 C.UTF-8
2022-06-16 00:33:07 +03:00
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</userinput></screen>
<para>Кроме того, установите локаль для вашей страны, языка и набора символов.</para>
<para>В качестве альтернативы, установите сразу все локали перечисленные в файле
<filename>glibc-&glibc-version;/localedata/SUPPORTED</filename>
(он включает все локали из списка выше и многие другие), выполнив команду:</para>
<screen><userinput remap="locale-full">make localedata/install-locales</userinput></screen>
<para>Затем используйте команду <command>localedef</command> для создания и
установки локалей, не перечисленных в файле
<filename>glibc-&glibc-version;/localedata/SUPPORTED</filename>, когда они вам
понадобятся. Например, для некоторых тестов в этой главе потребуются
следующие две локали:</para>
<screen role="nodump"><userinput remap="locale-full">localedef -i C -f UTF-8 C.UTF-8
2022-06-16 00:33:07 +03:00
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true</userinput></screen>
2023-08-03 23:54:52 +03:00
<note><para>Glibc теперь использует libidn2 для разрешения интернационализированных
2022-06-16 00:33:07 +03:00
доменных имен. Если такая функция необходима, то
инструкцию по установке libidn2 можно найти на странице
<ulink url="&blfs-book;general/libidn2.html">BLFS libidn2</ulink>.
</para></note>
</sect2>
<sect2 id="conf-glibc" role="configuration">
<title>Настройка Glibc</title>
<indexterm zone="conf-glibc">
<primary sortas="e-/etc/nsswitch.conf">/etc/nsswitch.conf</primary>
</indexterm>
<indexterm zone="conf-glibc">
<primary sortas="e-/etc/localtime">/etc/localtime</primary>
</indexterm>
<sect3>
<title>Добавление nsswitch.conf</title>
<para>Необходимо создать файл <filename>/etc/nsswitch.conf</filename>, потому
что настроенный по умолчанию Glibc плохо работает в сетевой среде.
</para>
2023-08-03 23:54:52 +03:00
<para>Создайте новый фай <filename>/etc/nsswitch.conf</filename>, выполнив
2022-06-16 00:33:07 +03:00
следующие действия:</para>
<screen revision='sysv'><userinput>cat &gt; /etc/nsswitch.conf &lt;&lt; "EOF"
2022-06-16 00:33:07 +03:00
<literal># 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</literal>
EOF</userinput></screen>
<screen revision='systemd'><userinput>cat &gt; /etc/nsswitch.conf &lt;&lt; "EOF"
<literal># 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
2022-06-16 00:33:07 +03:00
# End /etc/nsswitch.conf</literal>
EOF</userinput></screen>
</sect3>
<sect3>
2023-07-09 13:43:13 +03:00
<title>Добавление данных о часовом поясе</title>
2022-06-16 00:33:07 +03:00
<para>Установите и настройте часовой пояс следующим образом:</para>
<screen><userinput>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</userinput></screen>
<variablelist>
<title>Значение команд zic:</title>
<varlistentry>
<term><parameter>zic -L /dev/null ...</parameter></term>
<listitem>
<para>Создаёт часовые пояса posix без секунд координации. Обычно их помещают как в
<filename class="directory">zoneinfo</filename> так и в
<filename class="directory">zoneinfo/posix</filename>. Часовые пояса
POSIX должны быть прописаны в <filename class="directory">zoneinfo</filename>,
иначе различные тесты будут сообщать об ошибках.
На встраиваемых системах с небольшим
диском, где часовые пояса никогда не будут обновляться, можно сэкономить примерно
1.9 MB не используя каталог
<filename class="directory">posix</filename>, однако некоторые приложения или
2023-07-09 13:43:13 +03:00
наборы тестов могут вызывать сбои.</para>
2022-06-16 00:33:07 +03:00
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>zic -L leapseconds ...</parameter></term>
<listitem>
<para>Создаёт правильные часовые пояса с секундами координации.
На встраиваемых системах с небольшим
диском, где часовые пояса никогда не будут обновляться, а правильность времени
2023-08-03 23:54:52 +03:00
неважна, можно выиграть примерно 1.9 MB, исключив каталог
<filename class="directory">right</filename>.</para>
2022-06-16 00:33:07 +03:00
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>zic ... -p ...</parameter></term>
<listitem>
<para>Создаёт файл <filename>posixrules</filename>. Используется New York,
потому что POSIX требует, чтобы правила перехода на летнее время соответствовали
правилам США.</para>
2022-06-16 00:33:07 +03:00
</listitem>
</varlistentry>
</variablelist>
<para>Один из способов определить местный часовой пояс — запустить следующий скрипт:</para>
<screen role="nodump"><userinput>tzselect</userinput></screen>
<para>После нескольких вопросов о местоположении скрипт выдаст наименование
часового пояса (например <emphasis>America/Edmonton</emphasis>). В файле
<filename class='directory'>/usr/share/zoneinfo</filename> перечислены и другие
возможные часовые пояса, такие как
2023-08-03 23:54:52 +03:00
<emphasis>Canada/Eastern</emphasis> или <emphasis>EST5EDT</emphasis>, которые не
2022-06-16 00:33:07 +03:00
распознаются скриптом, но могут быть использованы.</para>
<para>Создайте файл <filename>/etc/localtime</filename> выполнив:</para>
<screen><userinput>ln -sfv /usr/share/zoneinfo/<replaceable>&lt;xxx&gt;</replaceable> /etc/localtime</userinput></screen>
<para>Замените <replaceable>&lt;xxx&gt;</replaceable> на имя выбранного часового пояса
(например, Europe/Moscow).</para>
</sect3>
<sect3 id="conf-ld" role="configuration">
<title>Настройка динамического загрузчика</title>
<indexterm zone="conf-ld">
<primary sortas="e-/etc/ld.so.conf">/etc/ld.so.conf</primary>
</indexterm>
<para>По умолчанию, динамический загрузчик (<filename
class="libraryfile">/lib/ld-linux.so.2</filename>) ищет
в каталоге <filename class="directory">/usr/lib</filename>, нужные для работы программ
библиотеки. Однако, если библиотеки находятся в другом
2022-06-16 00:33:07 +03:00
каталоге, то его необходимо указать в файле <filename>/etc/ld.so.conf</filename>, чтобы
динамический загрузчик мог их найти. Два каталога - <filename
2022-06-16 00:33:07 +03:00
class="directory">/usr/local/lib</filename> и <filename
class="directory">/opt/lib</filename> часто используются для дополнительных библиотек,
поэтому добавьте их в пути поиска для динамического загрузчика.</para>
<para>Создайте новый файл <filename>/etc/ld.so.conf</filename> выполнив:</para>
<screen><userinput>cat &gt; /etc/ld.so.conf &lt;&lt; "EOF"
<literal># Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
</literal>
EOF</userinput></screen>
<para>Динамический загрузчик может выполнить поиск в каталоге и включить содержимое
найденных там файлов. Обычно такие файлы состоят из одной строки и содержат путь к
библиотеке. Чтобы добавить эту возможность, выполните следующие команды:</para>
<screen role="nodump"><userinput>cat &gt;&gt; /etc/ld.so.conf &lt;&lt; "EOF"
<literal># Add an include directory
include /etc/ld.so.conf.d/*.conf
</literal>
EOF
mkdir -pv /etc/ld.so.conf.d</userinput></screen>
</sect3>
</sect2>
<sect2 id="contents-glibc" role="content">
<title>Содержимое пакета Glibc</title>
<segmentedlist>
<segtitle>Установленные программы</segtitle>
<segtitle>Установленные библиотеки</segtitle>
2023-05-24 09:00:49 +03:00
<segtitle>Созданные каталоги</segtitle>
2022-06-16 00:33:07 +03:00
<seglistitem>
<seg>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,
2022-06-16 00:33:07 +03:00
pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace,
2023-07-09 13:43:13 +03:00
zdump и zic</seg>
2022-06-16 00:33:07 +03:00
<seg>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},
2022-06-16 00:33:07 +03:00
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},
2023-07-09 13:43:13 +03:00
libthread_db.so и libutil.{a,so.1}</seg>
2022-06-16 00:33:07 +03:00
<seg>/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</seg>
2022-06-16 00:33:07 +03:00
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="gencat">
<term><command>gencat</command></term>
<listitem>
<para>Создает каталоги сообщений</para>
<indexterm zone="ch-system-glibc gencat">
<primary sortas="b-gencat">gencat</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="getconf">
<term><command>getconf</command></term>
<listitem>
<para>Отображает настройки системы для специфичных переменных файловой
системы</para>
<indexterm zone="ch-system-glibc getconf">
<primary sortas="b-getconf">getconf</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="getent">
<term><command>getent</command></term>
<listitem>
<para>Получает записи из административной базы данных</para>
<indexterm zone="ch-system-glibc getent">
<primary sortas="b-getent">getent</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="iconv">
<term><command>iconv</command></term>
<listitem>
<para>Выполняет преобразование набора символов</para>
<indexterm zone="ch-system-glibc iconv">
<primary sortas="b-iconv">iconv</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="iconvconfig">
<term><command>iconvconfig</command></term>
<listitem>
<para>Создает быстрозагружаемые файлы настроек модуля <command>iconv</command></para>
<indexterm zone="ch-system-glibc iconvconfig">
<primary sortas="b-iconvconfig">iconvconfig</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ldconfig">
<term><command>ldconfig</command></term>
<listitem>
<para>Создаёт необходимые привязки и кэш динамических библиотек, который
используется компоновщиком для связывания во время выполнения</para>
2022-06-16 00:33:07 +03:00
<indexterm zone="ch-system-glibc ldconfig">
<primary sortas="b-ldconfig">ldconfig</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ldd">
<term><command>ldd</command></term>
<listitem>
<para>Сообщает, какие общие библиотеки требуются каждой программе
или общей библиотеке</para>
<indexterm zone="ch-system-glibc ldd">
<primary sortas="b-ldd">ldd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="lddlibc4">
<term><command>lddlibc4</command></term>
<listitem>
<para>Помогает <command>ldd</command> работать с объектными файлами. Он
не существует на более новых архитектурах, таких как x86_64</para>
<indexterm zone="ch-system-glibc lddlibc4">
<primary sortas="b-lddlibc4">lddlibc4</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="locale">
<term><command>locale</command></term>
<listitem>
<para>Выводит различную информацию о текущей локали</para>
<indexterm zone="ch-system-glibc locale">
<primary sortas="b-locale">locale</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="localedef">
<term><command>localedef</command></term>
<listitem>
<para>Компилирует спецификации локали</para>
<indexterm zone="ch-system-glibc localedef">
<primary sortas="b-localedef">localedef</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="makedb">
<term><command>makedb</command></term>
<listitem>
<para>Создает простую базу данных на основе текстового ввода</para>
<indexterm zone="ch-system-glibc makedb">
<primary sortas="b-makedb">makedb</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="mtrace">
<term><command>mtrace</command></term>
<listitem>
<para>Читает и интерпретирует файл трассировки памяти; отображает
сводку в удобочитаемом формате</para>
<indexterm zone="ch-system-glibc mtrace">
<primary sortas="b-mtrace">mtrace</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pcprofiledump">
<term><command>pcprofiledump</command></term>
<listitem>
<para>Создает дамп информации, генерируемой при профилировании ПК</para>
<indexterm zone="ch-system-glibc pcprofiledump">
<primary sortas="b-pcprofiledump">pcprofiledump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pldd">
<term><command>pldd</command></term>
<listitem>
<para>Перечисляет динамические общие объекты, используемые запущенными процессами.</para>
<indexterm zone="ch-system-glibc pldd">
<primary sortas="b-pldd">pldd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="sln">
<term><command>sln</command></term>
<listitem>
<para>Статически скомпонованная программа <command>ln</command></para>
<indexterm zone="ch-system-glibc sln">
<primary sortas="b-sln">sln</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="sotruss">
<term><command>sotruss</command></term>
<listitem>
<para>Отслеживает вызовы процедур общей библиотеки указанной команды</para>
<indexterm zone="ch-system-glibc sotruss">
<primary sortas="b-sotruss">sotruss</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="sprof">
<term><command>sprof</command></term>
<listitem>
<para>Читает и отображает данные профилирования общих объектов.</para>
<indexterm zone="ch-system-glibc sprof">
<primary sortas="b-sprof">sprof</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="tzselect">
<term><command>tzselect</command></term>
<listitem>
<para>Запрашивает у пользователя информацию о текущем местоположении системы
и выводит описание соответствующего часового пояса.</para>
<indexterm zone="ch-system-glibc tzselect">
<primary sortas="b-tzselect">tzselect</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="xtrace">
<term><command>xtrace</command></term>
<listitem>
<para>Отслеживает выполнение программы, отображая выполняемую в
данный момент функцию</para>
<indexterm zone="ch-system-glibc xtrace">
<primary sortas="b-xtrace">xtrace</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="zdump">
<term><command>zdump</command></term>
<listitem>
<para>Выдает дамп часового пояса</para>
<indexterm zone="ch-system-glibc zdump">
<primary sortas="b-zdump">zdump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="zic">
<term><command>zic</command></term>
<listitem>
<para>Компилятор часовых поясов</para>
<indexterm zone="ch-system-glibc zic">
<primary sortas="b-zic">zic</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ld.so">
<term><filename class="libraryfile">ld-*.so</filename></term>
<listitem>
<para>Вспомогательная программа для исполняемых файлов общей библиотеки</para>
<indexterm zone="ch-system-glibc ld.so">
<primary sortas="c-ld.so">ld-&glibc-version;.so</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libBrokenLocale">
<term><filename class="libraryfile">libBrokenLocale</filename></term>
<listitem>
<para>Используется внутри Glibc как грубый хак для запуска
сломанных программ (например, некоторые приложения Motif). Прочитайте
комментарии в <filename>glibc-&glibc-version;/locale/broken_cur_max.c</filename>
для получения дополнительной информации</para>
<indexterm zone="ch-system-glibc libBrokenLocale">
<primary sortas="c-libBrokenLocale">libBrokenLocale</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libanl">
<term><filename class="libraryfile">libanl</filename></term>
<listitem>
<para>Библиотека-заглушка, не содержащая функций. Ранее это была библиотека
асинхронного поиска имен, функции которой теперь находятся в
<filename class='libraryfile'>libc</filename></para>
2022-06-16 00:33:07 +03:00
<indexterm zone="ch-system-glibc libanl">
<primary sortas="c-libanl">libanl</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libc">
<term><filename class="libraryfile">libc</filename></term>
<listitem>
<para>Основная библиотека C</para>
<indexterm zone="ch-system-glibc libc">
<primary sortas="c-libc">libc</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libc_malloc_debug">
<term><filename class="libraryfile">libc_malloc_debug</filename></term>
<listitem>
<para>Включает проверку выделения памяти при предварительной загрузке</para>
<indexterm zone="ch-system-glibc libc_malloc_debug">
<primary sortas="c-libc_malloc_debug">libc_malloc_debug</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libdl">
<term><filename class="libraryfile">libdl</filename></term>
<listitem>
<para>Библиотека-заглушка, не содержащая функций. Ранее была библиотекой
интерфейса динамической компоновки, функции которой теперь находятся в
<filename class="libraryfile">libc</filename></para>
<indexterm zone="ch-system-glibc libdl">
<primary sortas="c-libdl">libdl</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libg">
<term><filename class="libraryfile">libg</filename></term>
<listitem>
<para>Библиотека-заглушка без функций. Раньше была библиотекой среды выполнения
для <command>g++</command></para>
<indexterm zone="ch-system-glibc libg">
<primary sortas="c-libg">libg</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libm">
<term><filename class="libraryfile">libm</filename></term>
<listitem>
<para>Математическая библиотека</para>
<indexterm zone="ch-system-glibc libm">
<primary sortas="c-libm">libm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libmvec">
<term><filename class="libraryfile">libmvec</filename></term>
<listitem>
<para>Библиотека векторных математических вычислений, подключаемая по мере
необходимости при использовании <filename class='libraryfile'>libm</filename></para>
<indexterm zone="ch-system-glibc libmvec">
<primary sortas="c-libmvec">libmvec</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libmcheck">
<term><filename class="libraryfile">libmcheck</filename></term>
<listitem>
<para>Включает проверку выделения памяти при подключении к</para>
<indexterm zone="ch-system-glibc libmcheck">
<primary sortas="c-libmcheck">libmcheck</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libmemusage">
<term><filename class="libraryfile">libmemusage</filename></term>
<listitem>
<para>Используется <command>memusage</command> для сбора информации об использовании
памяти программой</para>
<indexterm zone="ch-system-glibc libmemusage">
<primary sortas="c-libmemusage">libmemusage</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnsl">
<term><filename class="libraryfile">libnsl</filename></term>
<listitem>
<para>Библиотека сетевых служб, которая в настоящее время устарела</para>
<indexterm zone="ch-system-glibc libnsl">
<primary sortas="c-libnsl">libnsl</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnss">
<term><filename class="libraryfile">libnss_*</filename></term>
<listitem>
<para>Модули Name Service Switch, содержащие функции для разрешения имен
хостов, имен пользователей, имен групп, псевдонимов, служб, протоколов и т. д.
Загружаются <filename class='libraryfile'>libc</filename> в соответствии с
конфигурацией в <filename>/etc/nsswitch.conf</filename></para>
<indexterm zone="ch-system-glibc libnss">
<primary sortas="c-libnss">libnss_*</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libpcprofile">
<term><filename class="libraryfile">libpcprofile</filename></term>
<listitem>
<para>Содержит функции профилирования, используемые для отслеживания времени,
потраченного процессором в конкретных строках исходного кода</para>
<indexterm zone="ch-system-glibc libpcprofile">
<primary sortas="c-libpcprofile">libpcprofile</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libpthread">
<term><filename class="libraryfile">libpthread</filename></term>
<listitem>
<para>Библиотека-заглушка, не содержащая функций. Ранее содержала функции,
обеспечивающие большинство интерфейсов, заданных POSIX.1c Threads Extensions
(расширения реализации потоков) и интерфейсы семафоров, указанных в POSIX.1b
Real-time Extension (расширения реального времени), теперь эти функции находятся
в <filename class="libraryfile">libc</filename></para>
2022-06-16 00:33:07 +03:00
<indexterm zone="ch-system-glibc libpthread">
<primary sortas="c-libpthread">libpthread</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libresolv">
<term><filename class="libraryfile">libresolv</filename></term>
<listitem>
<para>Содержит функции создания, пересылки и интерпретации пакетов,
используемых на серверах доменных имен в сети интернет</para>
<indexterm zone="ch-system-glibc libresolv">
<primary sortas="c-libresolv">libresolv</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="librt">
<term><filename class="libraryfile">librt</filename></term>
<listitem>
<para>Содержит функции, реализующие большую часть интерфейсов,
определяемых в POSIX.1b Real-time Extension (расширения реального времени)</para>
2022-06-16 00:33:07 +03:00
<indexterm zone="ch-system-glibc librt">
<primary sortas="c-librt">librt</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libthread_db">
<term><filename class="libraryfile">libthread_db</filename></term>
<listitem>
<para>Содержит функции, полезные для сборки отладчиков для многопоточных программ</para>
<indexterm zone="ch-system-glibc libthread_db">
<primary sortas="c-libthread_db">libthread_db</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libutil">
<term><filename class="libraryfile">libutil</filename></term>
<listitem>
<para>Библиотека-заглушка, не содержащая функций. Ранее содержал код для
<quote>стандартных</quote> функций, используемых во многих утилитах Unix.
Эти функции теперь находятся в <filename class="libraryfile">libc</filename></para>
<indexterm zone="ch-system-glibc libutil">
<primary sortas="c-libutil">libutil</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>