summaryrefslogtreecommitdiff
path: root/lfs-12.1-sysv/chapter08/stripping.html
diff options
context:
space:
mode:
Diffstat (limited to 'lfs-12.1-sysv/chapter08/stripping.html')
-rw-r--r--lfs-12.1-sysv/chapter08/stripping.html224
1 files changed, 224 insertions, 0 deletions
diff --git a/lfs-12.1-sysv/chapter08/stripping.html b/lfs-12.1-sysv/chapter08/stripping.html
new file mode 100644
index 0000000..9832849
--- /dev/null
+++ b/lfs-12.1-sysv/chapter08/stripping.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
+ <title>
+ 8.83. Удаление отладочных символов
+ </title>
+ <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" />
+ <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" />
+ <link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
+ "text/css" media="print" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ </head>
+ <body class="lfs" id="lfs-12.1">
+ <div class="navheader">
+ <h4>
+ Линукс с нуля - Версия 12.1
+ </h4>
+ <h3>
+ Глава 8. Установка базового системного программного обеспечения
+ </h3>
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="aboutdebug.html" title=
+ "Об отладочных символах">Пред.</a>
+ <p>
+ Об отладочных символах
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="cleanup.html" title="Очистка">След.</a>
+ <p>
+ Очистка
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="chapter08.html" title=
+ "Глава 8. Установка базового системного программного обеспечения">Наверх</a>
+ </li>
+ <li class="home">
+ <a accesskey="h" href="../index.html" title=
+ "Линукс с нуля - Версия 12.1">Начало</a>
+ </li>
+ </ul>
+ </div>
+ <h1 class="sect1">
+ <a id="ch-system-stripping" name="ch-system-stripping"></a>8.83.
+ Удаление отладочных символов
+ </h1>
+ <div class="sect1" lang="ru" xml:lang="ru">
+ <p>
+ Этот раздел является необязательным. Если предполагаемый пользователь
+ не является программистом и не планирует выполнять какую-либо отладку
+ системного программного обеспечения, размер системы можно уменьшить
+ примерно на 2 ГБ, удалив отладочные символы и некоторые ненужные
+ записи таблицы символов из двоичных файлов и библиотек. Это не
+ вызывает никаких неудобств для обычного пользователя Linux.
+ </p>
+ <p>
+ Большинство людей, использующих приведенные ниже команды, не
+ испытывают никаких трудностей. Однако легко допустить опечатку и
+ сделать новую систему непригодной для использования. Поэтому перед
+ выполнением команды <span class=
+ "command"><strong>strip</strong></span> рекомендуется сделать
+ резервную копию системы LFS.
+ </p>
+ <p>
+ Команда <span class="command"><strong>strip</strong></span> с
+ параметром <em class="parameter"><code>--strip-unneeded</code></em>
+ удаляет все отладочные символы из двоичного файла или библиотеки.
+ Кроме этого, она удаляет все записи таблицы символов, ненужные
+ компоновщику (для статических библиотек) или динамическому
+ компоновщику (для динамически подключаемых двоичных файлов и общих
+ библиотек).
+ </p>
+ <p>
+ Отладочные символы из выбранных библиотек сжимаются с помощью
+ <span class="application">Zlib</span> и сохраняются в отдельных
+ файлах. Эта отладочная информация необходима при выполнении
+ регрессионных тестов, с помощью <a class="ulink" href=
+ "https://mirror.linuxfromscratch.ru/blfs/view/12.1//general/valgrind.html">
+ valgrind</a> или <a class="ulink" href=
+ "https://mirror.linuxfromscratch.ru/blfs/view/12.1//general/gdb.html">
+ gdb</a> позже, в BLFS.
+ </p>
+ <p>
+ Обратите внимание, что команда <span class=
+ "command"><strong>strip</strong></span> перезапишет двоичный файл или
+ библиотеку, которую она обрабатывает. Это может привести к сбою
+ процессов, использующих код или данные из файла. Если это затронет
+ сам процесс, выполняющий <span class=
+ "command"><strong>strip</strong></span>, удаляемый двоичный файл или
+ библиотека могут быть уничтожены; это может сделать систему полностью
+ непригодной для использования. Чтобы избежать этого, мы скопируем
+ некоторые библиотеки и двоичные файлы в <code class=
+ "filename">/tmp</code>, очистим их и переустановим с помощью команды
+ <span class="command"><strong>install</strong></span>. Прочтите
+ статью <a class="xref" href="pkgmgt.html#pkgmgmt-upgrade-issues"
+ title="8.2.1. Проблемы с обновлением">Раздел&nbsp;8.2.1, «Проблемы с
+ обновлением»</a>, чтобы понять, почему следует использовать команду
+ <span class="command"><strong>install</strong></span> здесь.
+ </p>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Имя загрузчика ELF — ld-linux-x86-64.so.2 в 64-битных системах. и
+ ld-linux.so.2 в 32-битных системах. Конструкция ниже выбирает
+ правильное имя для текущей архитектуры, исключая всё, что
+ заканчивается на <code class="literal">g</code>, если приведенные
+ ниже команды уже были выполнены.
+ </p>
+ </div>
+ <div class="admon important">
+ <img alt="[Важно]" src="../images/important.png" />
+ <h3>
+ Важно
+ </h3>
+ <p>
+ Если есть какой-либо пакет, версия которого отличается от версии,
+ указанной в книге (либо в соответствии с рекомендациями по
+ безопасности, либо в соответствии с личными предпочтениями), может
+ потребоваться обновить имя файла библиотеки в <code class=
+ "envar">save_usrlib</code> или <code class=
+ "envar">online_usrlib</code>. <span class="bold"><strong>В
+ противном случае система может стать полностью непригодной для
+ использования.</strong></span>
+ </p>
+ </div>
+ <pre class="userinput"><kbd class=
+ "command">save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
+ libc.so.6
+ libthread_db.so.1
+ libquadmath.so.0.0.0
+ libstdc++.so.6.0.32
+ libitm.so.1.0.0
+ libatomic.so.1.2.0"
+
+cd /usr/lib
+
+for LIB in $save_usrlib; do
+ objcopy --only-keep-debug --compress-debug-sections=zlib $LIB $LIB.dbg
+ cp $LIB /tmp/$LIB
+ strip --strip-unneeded /tmp/$LIB
+ objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
+ install -vm755 /tmp/$LIB /usr/lib
+ rm /tmp/$LIB
+done
+
+online_usrbin="bash find strip"
+online_usrlib="libbfd-2.42.so
+ libsframe.so.1.0.0
+ libhistory.so.8.2
+ libncursesw.so.6.4-20230520
+ libm.so.6
+ libreadline.so.8.2
+ libz.so.1.3.1
+ libzstd.so.1.5.5
+ $(cd /usr/lib; find libnss*.so* -type f)"
+
+for BIN in $online_usrbin; do
+ cp /usr/bin/$BIN /tmp/$BIN
+ strip --strip-unneeded /tmp/$BIN
+ install -vm755 /tmp/$BIN /usr/bin
+ rm /tmp/$BIN
+done
+
+for LIB in $online_usrlib; do
+ cp /usr/lib/$LIB /tmp/$LIB
+ strip --strip-unneeded /tmp/$LIB
+ install -vm755 /tmp/$LIB /usr/lib
+ rm /tmp/$LIB
+done
+
+for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
+ $(find /usr/lib -type f -name \*.a) \
+ $(find /usr/{bin,sbin,libexec} -type f); do
+ case "$online_usrbin $online_usrlib $save_usrlib" in
+ *$(basename $i)* )
+ ;;
+ * ) strip --strip-unneeded $i
+ ;;
+ esac
+done
+
+unset BIN LIB save_usrlib online_usrbin online_usrlib
+</kbd></pre>
+ <p>
+ Большое количество файлов будет помечено как ошибочные, потому что
+ формат файла не распознан. Эти предупреждения можно смело
+ игнорировать. Они указывают на то, что файлы являются скриптами, а не
+ двоичными файлами.
+ </p>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="aboutdebug.html" title=
+ "Об отладочных символах">Пред.</a>
+ <p>
+ Об отладочных символах
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="cleanup.html" title="Очистка">След.</a>
+ <p>
+ Очистка
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="chapter08.html" title=
+ "Глава 8. Установка базового системного программного обеспечения">Наверх</a>
+ </li>
+ <li class="home">
+ <a accesskey="h" href="../index.html" title=
+ "Линукс с нуля - Версия 12.1">Начало</a>
+ </li>
+ </ul>
+ </div>
+ </body>
+</html>