Add info about how to upgrade Glibc on a running system

Let's change our policy to match other "rolling release" distros and
ease the procedure to fix Glibc security vulnerabilities.

Squashed the commits in xry111/update-glibc branch to keep the history
clean.
This commit is contained in:
Poltern 2024-02-06 14:42:52 +05:00
parent e3dc880fe2
commit 1558778edf
2 changed files with 109 additions and 15 deletions

View File

@ -49,12 +49,12 @@
данные в каталогах, совместимых с FHS:</para>
<screen><userinput remap="pre">patch -Np1 -i ../&glibc-fhs-patch;</userinput></screen>
<!--
<para>Теперь исправьте две уязвимости безопасности и регрессию, из-за которой функция
posix_memalign() в некоторых условиях работает очень медленно:</para>
<screen><userinput remap="pre">patch -Np1 -i ../&glibc-upstream-fixes-patch;</userinput></screen>
-->
<para>Документация Glibc рекомендует выполнять компиляцию в отдельном каталоге:</para>
<screen><userinput remap="pre">mkdir -v build
@ -196,6 +196,110 @@ esac</userinput></screen>
<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>
Если система (до 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>
<para>Установите пакет:</para>
<screen><userinput remap="install">make install</userinput></screen>

View File

@ -60,19 +60,9 @@
</listitem>
<listitem>
<para>Если необходимо обновить Glibc до более новой версии (например, с Glibc-2.31
до Glibc-2.32), безопаснее заново собрать LFS. Хотя вы <emphasis>можете</emphasis>
пересобрать все пакеты с их зависимостями, мы не рекомендуем этого делать.</para>
</listitem>
<listitem>
<para>Переустановка той же версии Glibc (&glibc-version; для этого выпуска LFS),
но с исправлениями, должна быть безопасной, если эти исправления не изменяют ABI
и API. Когда в Glibc обнаруживается уязвимость системы безопасности, нам часто
приходится применять такие патчи, чтобы устранить уязвимости и переустановить Glibc.
Обратитесь к <ulink url='&lfs-root;lfs/advisories/'>рекомендациям по безопасности
LFS</ulink>, если вы получили предупреждение об опубликованной уязвимости в
системе безопасности Glibc, но не уверены, какие действия следует предпринять.</para>
<para>Если необходимо обновить Glibc до более новой версии (например, с Glibc-2.36
до Glibc-&glibc-version;) необходимо выполнить некоторые дополнительные действия,
чтобы избежать поломки системы. Подробности читайте в <xref linkend='ch-system-glibc'/>.</para>
</listitem>
<listitem> <para>Если пакет, содержащий общую библиотеку, обновляется и имя