Этот раздел является необязательным. Если предполагаемый пользователь не является программистом и не планирует выполнять какую-либо отладку системного программного обеспечения, размер системы можно уменьшить примерно на 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.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
Большое количество файлов будет помечено как ошибочные, потому что формат файла не распознан. Эти предупреждения можно смело игнорировать. Они указывают на то, что файлы являются скриптами, а не двоичными файлами.