lfs-ru/chapter05/glibc.xml

246 lines
12 KiB
XML
Raw Normal View History

<?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-tools-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-tools-glibc">
<primary sortas="a-Glibc">Glibc</primary>
<secondary>tools</secondary>
</indexterm>
<sect2 role="package">
<title/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../chapter08/glibc.xml"
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&glibc-tmp-sbu;</seg>
<seg>&glibc-tmp-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка пакета Glibc</title>
2022-05-28 00:34:48 +03:00
<para>Во-первых, создайте символическую ссылку для соответствия требованиям
LSB. Кроме того, для совместимости с x86_64 создайте символическую ссылку,
2022-05-20 23:59:05 +03:00
необходимую для правильной работы загрузчика динамической библиотеки:</para>
<screen><userinput remap="pre">case $(uname -m) in
i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
;;
x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
;;
esac</userinput></screen>
<note>
<para>
Приведенная выше команда верна. Команда <command>ln</command> имеет несколько
2023-06-28 22:43:30 +03:00
вариантов синтаксиса, поэтому обязательно ознакомьтесь с <command>info coreutils ln</command>
и <ulink role='man' url='&man;ln.1'>ln(1)</ulink>, прежде чем сообщать об ошибке.
</para>
</note>
<para>Некоторые программы, использующие Glibc, применяют несовместимый с
FHS каталог <filename class="directory">/var/db</filename> для хранения
своих данных времени выполнения. Установите следующий патч, чтобы такие
программы хранили свои данные в местах, совместимых с FHS:</para>
<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
<para>В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге:</para>
<screen><userinput remap="pre">mkdir -v build
cd build</userinput></screen>
<para>Убедитесь, что утилиты <command>ldconfig</command> and <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 \
--host=$LFS_TGT \
--build=$(../scripts/config.guess) \
2023-08-12 19:15:35 +03:00
--enable-kernel=&min-kernel; \
--with-headers=$LFS/usr/include \
--disable-nscd \
libc_cv_slibdir=/usr/lib</userinput></screen>
<variablelist>
<title>Значение параметров настройки:</title>
<varlistentry>
<term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
<listitem>
<para>Комбинация этих опций указывает на то, что система сборки
Glibc настраивается на кросс-компиляцию с использованием кросс-компоновщика
и кросс-компилятора в <filename class="directory">$LFS/tools</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-kernel=&min-kernel;</parameter></term>
<listitem>
<para>Этот параметр позволяет Glibc выполнять компиляцию библиотеки
с поддержкой ядра &min-kernel; и более поздних версий. Поддержка более
старых ядер не включена.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--with-headers=$LFS/usr/include</parameter></term>
<listitem>
<para>Этот аргумент позволяет скомпилировать библиотеку с заголовочными файлами,
недавно установленными в каталоге $LFS/usr/include, таким образом, пакету будет
известно, какие функции есть у ядра, чтобы оптимизировать себя.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
<listitem>
<para>Этот аргумент гарантирует, что библиотека будет установлена
в /usr/lib вместо стандартного /lib64 на 64-битных машинах.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--disable-nscd</parameter></term>
<listitem>
<para>Параметр отключает сборку демона кэша службы имен, который больше не
используется.</para>
</listitem>
</varlistentry>
</variablelist>
<para>На этом этапе может появиться следующее предупреждение:</para>
<blockquote>
<screen><computeroutput>configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.</computeroutput></screen>
</blockquote>
<para>Отсутствующая или несовместимая программа <command>msgfmt</command>,
как правило, безвредна. <command>msgfmt</command> является частью пакета Gettext,
который должен предоставлять хост-дистрибутив.</para>
<note><para>Поступали сообщения о том, что этот пакет может не компилироваться
при <quote>параллельной сборке</quote>. Если это произойдет, повторно запустите команду
make с параметром <option>-j1</option>.</para></note>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>Установите пакет:</para>
<warning><para>Если переменная <envar>LFS</envar> настроена неправильно, и,
несмотря на рекомендации, вы выполняете сборку от имени пользователя
<systemitem class="username">root</systemitem>, следующая команда установит
2023-06-28 22:43:30 +03:00
только что собранный Glibc в вашу хост-систему, что, скорее всего, сделает её
непригодной для использования. Поэтому дважды проверьте, правильность настройки
2023-06-28 22:43:30 +03:00
среды и что вы вошли в систему не под учетной записью &root;, прежде чем
запускать следующую команду.</para></warning>
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
<variablelist>
<title>Значение опции <command>make install</command>:</title>
<varlistentry>
<term><parameter>DESTDIR=$LFS</parameter></term>
<listitem>
<para>Переменная make <envar>DESTDIR</envar> используется почти
всеми пакетами для определения места установки пакета. Если она
не задана, по умолчанию для установки используется корневой каталог (<filename
class="directory">/</filename>). Здесь мы указываем, что пакет должен
2023-06-28 22:43:30 +03:00
быть установлен в $LFS, который станет корневым каталогом в <xref linkend=
"ch-tools-chroot"/>.</para>
</listitem>
</varlistentry>
</variablelist>
2023-06-28 22:43:30 +03:00
<para>Исправьте жестко запрограммированный путь к исполняемому загрузчику в
<command>ldd</command>:</para>
<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</userinput></screen>
<caution>
<para>На этом этапе необходимо остановиться и убедиться, что основные функции
2022-05-20 23:59:05 +03:00
(компиляция и компоновка) нового кросс-тулчейна работают должным образом.
Чтобы выполнить проверку работоспособности, выполните следующие команды:</para>
2023-06-28 22:43:30 +03:00
<screen><userinput>echo 'int main(){}' | $LFS_TGT-gcc -xc -
readelf -l a.out | grep ld-linux</userinput></screen>
2023-09-22 10:49:29 +03:00
<para>Если все работает правильно, ошибок быть не должно и вывод последней
команды будет иметь вид:</para>
<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
<para>Обратите внимание, что для 32-разрядных машин имя интерпретатора будет
<filename>/lib/ld-linux.so.2</filename>.</para>
<para>Если выходные данные отображаются не так, как указано выше, или их вообще
2023-08-02 18:37:27 +03:00
нет, значит, что-то сделано неправильно. Разберитесь с проблемой и повторите шаги выше,
чтобы исправить ее. Эта проблема должна быть решена, прежде чем вы продолжите.</para>
<para>Как только все будет хорошо, удалите тестовый файл:</para>
<screen><userinput>rm -v a.out</userinput></screen>
</caution>
<note><para>Сборка пакетов в следующей главе послужит дополнительной проверкой
2022-05-20 23:59:05 +03:00
правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно
2023-06-22 21:45:00 +03:00
Binutils или GCC, не удается собрать, это указывает на то, что что-то
пошло не так с установленными ранее Binutils, GCC, или Glibc.</para></note>
2023-08-12 19:15:35 +03:00
<!--
<para>Теперь, когда наш кросс-тулчейн собран, завершите установку заголовочного
2023-06-28 22:43:30 +03:00
файла limits.h. Для этого запустите утилиту, предоставляемую разработчиками GCC:</para>
<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
2023-08-12 19:15:35 +03:00
-->
</sect2>
<sect2 role="content">
<title/>
<para>Подробная информация об этом пакете находится в
<xref linkend="contents-glibc" role="."/></para>
</sect2>
</sect1>