tcpdump rpm方式安装细节
前言
挺久没更新了,先当成个博客来写吧,我是佛系更新,大家佛系随便看看就行,后续应该不会力求一定要高质量文章才发出来,就记录记录一个普普通通、平平凡凡的码农的生活。
问题背景
有些东西,说起来很简单,实操的时候,会发现存在各种细节。
前一阵排查一个线上问题,链路较长,排查这种问题基本就是靠日志,日志不足时,靠网络抓包,在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
相关文章
- CentOS+VMware安装与配置(一)
- MySQL 5.5软件下载和安装教程
- SpringBoot启动一下就停止了_win10安装boot运行失误
- linux安装svn服务器的两种方式(转载)「建议收藏」
- 甲烷传感器的工作原理以及正确安装方式
- docker安装mysql:5.7(利用数据卷挂载方式启动)
- 如何在微软官网以正版方式下载、安装和激活Microsoft Office办公软件
- 腾讯云轻量服务器怎么安装宝塔?教程来了
- Docker 管理面板:Fast Os Docker 简易安装教程
- 5分钟教你docker安装启动redis全教程(全新方式)
- macOS上Redis的安装与测试操作
- 安装MV Linux: 覆盖安装指南(mvlinux覆盖)
- Linux下快速配置PHP开发环境(linux下安装php环境)
- Linux系统的快速安装指南(linux的安装方式)
- 安装启动器偷懒方式:使用Cheat快速安装Linux启动器(cheat给linux)
- Linux软件安装: 快速、简单、高效(linux软件安装方式)
- 在Ubuntu上安装类Winamp的音频播放器Qmmp 0.9.0
- 实施Oracle客户端安装及部署指南(oracle的客户端)
- 不用光驱,安装Linux的新方式(无光驱安装linux)
- Linux下DB2客户端的安装部署(db2linux客户端)
- Linux下交叉编译安装简易指南(linux下交叉编译安装)
- MySQL二者择其一,两种安装方式(mysql 两种安装方式)
- Oracle无需安装监听服务器一种更简单的方式(oracle不装监听)
- Oracle11用户指南从安装到升级(oracle11用户手册)
- Android静默方式实现批量安装卸载应用程序的深入分析