Centos默认提供的wireshark rpm包是1.10,这个版本太老了而且有很多bug,所以打算升级一下wireshark版本。可是无奈网上没有适合centos的rpm包,所以打算自己编译wireshark源码.如果希望编译windows下面的wireshak可移至这里查看。
一、升级cmake
在wireshark要求cmake版本是3.5以上,这里下载了一个最新版本cmake version 3.14.5。
1.1 执行bootstrap
./bootstrap --system-curl --prefix=/usr/
说明:
1) 这里指定curl为使用系统的curl,曾经遇到一个问题:cmake内部实现的curl版本太低导致无法在cmake过程中下载依赖包,所以指定使用系统中curl 。
2) 默认安装路径为/usr 直接覆盖原有的cmake。
3) 在执行bootstrap时候可能会出现依赖包找不到的问题,这个根据个人系统环境有关,例如我这里找不到zlib,curl,所以我通过yum install进行安装,具体命令如下:
yum install -y zlib zlib-devel curl curl-devel
1.2 执行make
make -j4 && make install
1.3 验证
sh-4.2# cmake --version
cmake version 3.14.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
sh-4.2#
我这里变异cmake比较方便,没出问什么困难问题。
1.4 如何制作cmake的RPM包?
在执行完bootstrap命令后,手动修改CMakeCache.txt文件,将CPACK_BINARY_RPM:BOOL=OFF修改为CPACK_BINARY_RPM:BOOL=ON在编译完成后执行make package。应该可以指定参数,但是我懒得研究如何指定参数,所以直接干脆点修改文件吧。
二、解决依赖
我这里是在一个比较干净的Docker容器内进行编译的,所以依赖的第三方库比较多,下面是我的环境中需要安装的第三方插件
yum install libgcrypt-devel glib2-devel glib2 flex \
libssh libssh-devel git byacc libpcap-devel \
qt5-qtbase qt5-qtbase-devel qt5-qttools qt5-qttools-devel \
qt5-qtmultimedia-devel qt5-qtsvg-devel rpm-build bison desktop-file-utils
编译wireshark需要python3.0版本,通过下面这些命令可以进行安装
yum install -y epel-release
yum install -y python34
注:
1) 如果系统中安装了python2,则需要修改软连接文件,使其重定向到python3.4。
2) 升级完python后可能导致yum命令不能使用,我们需要修改如下两个文件: /usr/bin/yum 和/usr/libexec/urlgrabber-ext-down
将文件中#!/usr/bin/python 修改为#!/usr/bin/python2.7。
三、编译
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
1) 如果想安装在本机那么就执行make && make install。
2) 如果想生成rpm包,则执行make package。
我这里需要编译出rpm包,所以执行的是make package,但是在执行make package时遇到一个错误:
error: Failed build dependencies:
cmake3 >= 3.5 is needed by wireshark-3.0.2-1.x86_64
非常奇怪,我的环境中已经有cmake3.14.5,到了这步还报错.最后没有办法只能修改wireshark.spec文件:
51 %if 0%{?rhel}
52 #BuildRequires: cmake3 >= 3.5
53 BuildRequires: python34
54 %else
55 #BuildRequires: cmake >= 3.5
56 BuildRequires: python3
57 %endif
227 %if 0%{?rhel}
228 cmake \
229 %else
230 %cmake \
231 %endif
将文件的52行和55行,BuildRequires cmake3 >= 3.5注释掉,将228行cmake3 修改成cmake。 后来我感觉是if判断是否为rhel有问题。反正无所谓了,只需要把这三处修改了就可以顺利编译出rpm包。
四、安装RPM
wireshark一共编译出三个rpm包:wireshark-3.0.2-1.x86_64.rpm、wireshark-qt-3.0.2-1.x86_64.rpm、wireshark-devel-3.0.2-1.x86_64.rpm。
将这三个rpm包拷贝到其他centos主机上进行安装,如果缺少依赖,只需要在各自的主机上安装依赖即可,我的主机为centos7.5,内核版本为:
[root@localhost 下载]# uname -a
Linux localhost.localdomain 3.10.0-957.12.1.el7.x86_64 #1 SMP Mon Apr 29 14:59:59 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost 下载]#
五、Docker镜像
现在我把编译环境做成一个docker镜像,可以通过docker pull worker24h/centos7-wireshark-build进行下载编译。通过docker search wireshark --limit 100 可以查看到。docker search默认显示25条记录,可以通过--limit指定最大显示条数。