1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
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>
|