zl程序教程

您现在的位置是:首页 >  其他

当前栏目

tcpdump rpm方式安装细节

安装 方式 细节 RPM tcpdump
2023-06-13 09:17:00 时间

前言

挺久没更新了,先当成个博客来写吧,我是佛系更新,大家佛系随便看看就行,后续应该不会力求一定要高质量文章才发出来,就记录记录一个普普通通、平平凡凡的码农的生活。

问题背景

有些东西,说起来很简单,实操的时候,会发现存在各种细节。

前一阵排查一个线上问题,链路较长,排查这种问题基本就是靠日志,日志不足时,靠网络抓包,在linux上基本就是使用tcpdump。

但是,因为我们这边开发是没有线上机器权限的,所有线上操作都是要运维同事来执行,运维同事很忙,经常座位上围着一堆人,所以每次排查问题的时间很紧迫。

因为知道机器上没有tcpdump,我就自己在网上下载了一个tcpdump的rpm包,发给运维同事,然后在约好的时间,几个开发同事一起去他那边排查。运维同事登上跳板机,再登上主机,把rpm包传上去,一执行,结果报错了,tcpdump还依赖libpcap这个rpm。第一次安装就这么失败了,但也不能浪费这次定位的时间,只能先不抓包了,看看日志吧。

第一天靠日志也没分析出结果,第二天,这次做了准备工作,提前准备好了全部的包,这次怎么获取的呢?

在开发环境的centos 7.x机器上执行:

yum install --downloadonly --downloaddir=/root/download tcpdump

执行完成后,就在/root/download拿到了tcpdump的依赖包:

[root@strategy-stg-app-2 download]# ll
total 564
-rw-r--r-- 1 root root 141376 Jun 21 15:45 libpcap-1.5.3-11.el7.x86_64.rpm
-rw-r--r-- 1 root root 431300 Jun 21 15:45 tcpdump-4.9.2-3.el7.x86_64.rpm

这次发过去后,在某台机器上安装了,没问题,可以抓包,挺好。

然后,问题来了,前两天,又遇到一个问题,需要抓包,这次是另一台机器,于是按照老习惯,又把上面这两个包发过去了,结果这次马失前蹄,安装libpcap就报错了:

file /usr/lib64/libpcap.so.1.5.3 from install of libpcap-14:1.5.3-11.el7.x86_64 conflicts with file from package libpcap-14:1.5.3-8.el7.x86_64

我也懵了,还不知道怎么处理这类冲突问题,然后最后就是没能抓包,打乱了之前的问题排查思路。

我归结了下问题,其实就是,不管线上是什么机器,最好是对方给我们一个操作系统的版本号,我们就能对症下药,知道应该安装什么版本的tcpdump。

centos版本/查询对应版本的rpm

[root@xxx download]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

假设运维同事给了线上机器的版本后,我们如何决定安装什么版本的tcpdump呢?

我们要在开发环境也去搭建一个对应版本的机器来验证吗,理论上来说,是应该这样,但是,这也太重了。

我的方式是这样,我先查了下,centos目前有这么些版本:

https://en.wikipedia.org/wiki/CentOS#cite_note-123

有兴趣的同学观察下,标红的两列有对应关系的。

知道了机器的centos版本后,如何知道对应的tcpdump是什么版本呢?

这边有个rpm查询网站,http://rpm.pbone.net/

看下图,会发现centos 7.5和centos 7.6,搭载的tcpdump版本就是不一样的,一个是4.9.2-3,一个是4.9.2-4,

4.9.2表示version,而-3表示第三个Release,-4表示第4个Release,应该是有些小差别。

通过上面的方式,我们知道了应该使用什么版本的rpm,接下来,去通过什么方式获取呢,前面使用的如下方式,很可能只能获取到非对应版本的rpm:

yum install --downloadonly --downloaddir=/root/download tcpdump

如何才能拿到想要的版本的rpm呢?

目前,对于tcpdump这个来说,我觉得直接手动下载rpm也是一个可以接受的方式。

在手动下载之前,需要知道tcpdump有哪些依赖的rpm?

这个可以通过前面的这种方式:

yum install --downloadonly --downloaddir=/root/download tcpdump

或者下图这样,也能看个大概:

我们这里从上图看到的就是,如果要安装tcpdump的14:4.9.2-3版本,依赖的libpcap需要满足:

libpcap >= 14:1.5.3-10

此时,去找对应版本的rpm来下载就行了。

这里推荐个地址,找了很久才找到的、可以下载老版本rpm包的网站。

https://developer.aliyun.com/packageSearch?word=libpcap

冲突问题怎么解决

前言里提到的冲突问题,又如何解决?

file /usr/lib64/libpcap.so.1.5.3 from install of libpcap-14:1.5.3-11.el7.x86_64 conflicts with file from package libpcap-14:1.5.3-8.el7.x86_64

上面说了,centos 7.x会有对应的版本的tcpdump,tcpdump依赖libpcap,但是很可能,线上机器在安装别的什么软件的时候,就安装了一个低版本的libpcap(如上面报错中提到的14:1.5.3-8版本)。

14:1.5.3-8版本的rpm包中,包含的文件,也有/usr/lib64/libpcap.so.1.5.3;此时,我们再去安装高版本的libpcap,如14:1.5.3-11时,14:1.5.3-11里也包含了一个libpcap.so.1.5.3要解压到/usr/lib64目录,此时就可能覆盖旧版本的,此时就会报错。

如果我们不想覆盖旧版本,就只能去找个低版本的tcpdump来安装,也就是一个依赖的libpcap为14:1.5.3-8版本的tcpdump。

怎么找呢,就是去http://rpm.pbone.net/查看各个tcpdump,依赖的libpcap的版本。

资源网站

http://mirror.centos.org/centos/7/os/x86_64/Packages/

https://rpmfind.net/

https://pkgs.org/

http://rpm.pbone.net/

https://www.cnblogs.com/guigujun/p/7868748.html