diff options
Diffstat (limited to 'lfs-12.2-sysv/chapter08/stripping.html')
-rw-r--r-- | lfs-12.2-sysv/chapter08/stripping.html | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/lfs-12.2-sysv/chapter08/stripping.html b/lfs-12.2-sysv/chapter08/stripping.html new file mode 100644 index 0000000..54c8779 --- /dev/null +++ b/lfs-12.2-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.84. Удаление отладочных символов + </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.2"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.2 + </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.2">Начало</a> + </li> + </ul> + </div> + <h1 class="sect1"> + <a id="ch-system-stripping" name="ch-system-stripping"></a>8.84. + Удаление отладочных символов + </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.2//general/valgrind.html"> + valgrind</a> или <a class="ulink" href= + "https://mirror.linuxfromscratch.ru/blfs/view/12.2//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. Проблемы с обновлением">Раздел 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.33 + 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.43.1.so + libsframe.so.1.0.0 + libhistory.so.8.2 + libncursesw.so.6.5 + libm.so.6 + libreadline.so.8.2 + libz.so.1.3.1 + libzstd.so.1.5.6 + $(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.2">Начало</a> + </li> + </ul> + </div> + </body> +</html> |