前言
挺久没更新了,先当成个博客来写吧,我是佛系更新,大家佛系随便看看就行,后续应该不会力求一定要高质量文章才发出来,就记录记录一个普普通通、平平凡凡的码农的生活。
问题背景
有些东西,说起来很简单,实操的时候,会发现存在各种细节。
前一阵排查一个线上问题,链路较长,排查这种问题基本就是靠日志,日志不足时,靠网络抓包,在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来下载就行了。
冲突问题怎么解决
前言里提到的冲突问题,又如何解决?
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.toymoban.com/news/detail-798216.html
https://www.cnblogs.com/guigujun/p/7868748.html加粗样式文章来源地址https://www.toymoban.com/news/detail-798216.html
到了这里,关于【转载】tcpdump rpm方式安装细节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!