From 2203e654b389586650d553251b04544a34f189bf Mon Sep 17 00:00:00 2001 From: Sn4il Date: Mon, 2 Sep 2024 15:54:35 +0300 Subject: LFS 12.2 --- lfs-12.2-sysv/chapter08/stripping.html | 224 +++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 lfs-12.2-sysv/chapter08/stripping.html (limited to 'lfs-12.2-sysv/chapter08/stripping.html') 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 @@ + + + + + + 8.84. Удаление отладочных символов + + + + + + + + +

+ 8.84. + Удаление отладочных символов +

+
+

+ Этот раздел является необязательным. Если предполагаемый пользователь + не является программистом и не планирует выполнять какую-либо отладку + системного программного обеспечения, размер системы можно уменьшить + примерно на 2 ГБ, удалив отладочные символы и некоторые ненужные + записи таблицы символов из двоичных файлов и библиотек. Это не + вызывает никаких неудобств для обычного пользователя Linux. +

+

+ Большинство людей, использующих приведенные ниже команды, не + испытывают никаких трудностей. Однако легко допустить опечатку и + сделать новую систему непригодной для использования. Поэтому перед + выполнением команды strip рекомендуется сделать + резервную копию системы LFS. +

+

+ Команда strip с + параметром --strip-unneeded + удаляет все отладочные символы из двоичного файла или библиотеки. + Кроме этого, она удаляет все записи таблицы символов, ненужные + компоновщику (для статических библиотек) или динамическому + компоновщику (для динамически подключаемых двоичных файлов и общих + библиотек). +

+

+ Отладочные символы из выбранных библиотек сжимаются с помощью + Zlib и сохраняются в отдельных + файлах. Эта отладочная информация необходима при выполнении + регрессионных тестов, с помощью + valgrind или + gdb позже, в BLFS. +

+

+ Обратите внимание, что команда strip перезапишет двоичный файл или + библиотеку, которую она обрабатывает. Это может привести к сбою + процессов, использующих код или данные из файла. Если это затронет + сам процесс, выполняющий strip, удаляемый двоичный файл или + библиотека могут быть уничтожены; это может сделать систему полностью + непригодной для использования. Чтобы избежать этого, мы скопируем + некоторые библиотеки и двоичные файлы в /tmp, очистим их и переустановим с помощью команды + install. Прочтите + статью Раздел 8.2.1, «Проблемы с + обновлением», чтобы понять, почему следует использовать команду + install здесь. +

+
+ [Примечание] +

+ Примечание +

+

+ Имя загрузчика ELF — ld-linux-x86-64.so.2 в 64-битных системах. и + ld-linux.so.2 в 32-битных системах. Конструкция ниже выбирает + правильное имя для текущей архитектуры, исключая всё, что + заканчивается на g, если приведенные + ниже команды уже были выполнены. +

+
+
+ [Важно] +

+ Важно +

+

+ Если есть какой-либо пакет, версия которого отличается от версии, + указанной в книге (либо в соответствии с рекомендациями по + безопасности, либо в соответствии с личными предпочтениями), может + потребоваться обновить имя файла библиотеки в save_usrlib или online_usrlib. В + противном случае система может стать полностью непригодной для + использования. +

+
+
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
+
+

+ Большое количество файлов будет помечено как ошибочные, потому что + формат файла не распознан. Эти предупреждения можно смело + игнорировать. Они указывают на то, что файлы являются скриптами, а не + двоичными файлами. +

+
+ + + -- cgit v1.2.3