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包?

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 下载]#

centos安装wireshark命令行 centos离线安装wireshark_docker

五、Docker镜像

现在我把编译环境做成一个docker镜像,可以通过docker pull worker24h/centos7-wireshark-build进行下载编译。通过docker search wireshark --limit 100 可以查看到。docker search默认显示25条记录,可以通过--limit指定最大显示条数。