Written by
arstercz
-
二进制文件及 rpm 打包二三事
近期通过 rpm 打包工具的时候注意到 rpm 文件大小比原始的二进制文件小很多. 大部分情况下这是因为工具包含 debug 符号表的原因, 不过在禁止 rpm 生成 debug package 后还会存在此类现象. 本文则主要记录 rpm strip
相关的几点事项.
当前工具结构
如下所示, 以 kvrocks 的工具 kvrocks2redis 为例, debug 相关的接近 410M:
size --format SysV kvrocks2redis
kvrocks2redis :
section size addr
.interp 28 4195040
.note.gnu.build-id 36 4195068
.note.ABI-tag 32 4195104
.gnu.hash 352 4195136
.dynsym 8544 4195488
.dynstr 3688 4204032
.gnu.version 712 4207720
.gnu.version_r 400 4208432
.rela.dyn 600 4208832
.rela.plt 8112 4209432
.init 26 4218880
.plt 5424 4218912
.text 11325402 4224384
.fini 9 15549788
.rodata 752940 15552512
.eh_frame_hdr 226852 16305452
.eh_frame 1136328 16532304
.gcc_except_table 342545 17668632
.tdata 2640 18016816
.tbss 31632 18019456
.init_array 1432 18019456
.fini_array 8 18020888
.data.rel.ro 37632 18020896
.dynamic 544 18058528
.got 176 18059072
.got.plt 2728 18059264
.data 11392 18062016
.bss 2404384 18073408
.comment 104 0
.debug_aranges 225936 0
.debug_info 257585038 0
.debug_abbrev 2862704 0
.debug_line 18885262 0
.debug_frame 96 0
.debug_str 35317122 0
.debug_loc 88205914 0
.debug_ranges 18617104 0
.debug_macro 218706 0
Total 438222584
strip
strip 之后大小为 14M
➜ ls -hl kvrocks2redis
-rwxr-xr-x 1 root root 420M Oct 29 21:21 kvrocks2redis
➜ strip --strip-unneeded kvrocks2redis
➜ ls -hl kvrocks2redis
-rwxr-xr-x 1 root root 14M Oct 31 12:35 kvrocks2redis
优缺点
对于很稳定的工具而言, 可以考虑进行 strip, 方便工具的分发部署. 如果工具不稳定, bug 及崩溃频率较多, 不建议 strip, 保留 debug 信息方便跟踪调试. 另外折中一点的方式是分发部署 strip 之后的工具, 崩溃调试时更换为 debug 版本.
rpm 打包
spec 中可以选择任一方式禁止 strip:
# Turn off strip'ng of binaries
%global __strip /bin/true
或
%global __os_install_post %{nil}
另外也可以开启 debug_package(默认开启)
, 这样 rpm 就会分别生成 rpm
及对应 rpm debug
两个包. 按需使用即可.