近期有些网友想要了解CentOS7安装socat3.0新版rpm包(epel替代)的相关情况,小编通过整理给您分析,根据自身经验分享CentOS7安装socat3.0新版rpm包(epel替代)有关知识。
CentOS7安装socat3.0新版rpm包(epel替代)
服务器里缺个趁手的端口转发工具,yum一搜还是老掉牙的1.7,想装socat 3.0却提示“No package available”?别急,CentOS7默认仓库早就停更,epel也没把新版往里塞。今天这篇就手把手教你绕过epel,自己撸一个干净、可回滚的socat 3.0 rpm包,全程十分钟,复制粘贴就能跑。
为什么非3.0不可?
老版本打UDP转发偶尔丢包,SSL库还停留在openssl 1.0,碰到TLS 1.3直接罢工。3.0把内部缓冲区拉到512k,支持异步DNS,还能直接跑SOCKS5 over QUIC。一句话:**同样跑一条转发指令,cpu降三成,延迟少一半**。
提前排雷:系统环境检查
先确认你手里这台是x86_64,内核≥3.10,gcc≥4.8,否则后面编译会花式报错。一条命令搞定:
uname -m && gcc --version | head -1
如果gcc版本不够,用devtoolset-9一键升级,别硬刚源码,省时省力。
三步打包:比epel更稳的“私仓”方案
1. 拉源码,下干净spec
直接去GitHub取tag 3.0.0的tar.gz,同时把fedora rawhide里的socat.spec拽下来。spec文件已经写好了%build、%check,省得自己手写。
wget https://github.com/socat/socat/archive/v3.0.0.tar.gz
wget https://src.fedoraproject.org/rpms/socat/raw/rawhide/f/socat.spec
2. 装依赖,一次到位
CentOS7缺一堆devel包,别想着跳过,缺哪个rpmbuild都会甩脸子。直接批量:
yum -y install gcc make openssl-devel libnl3-devel readline-devel tcp_wrappers-devel rpm-build
3. rpmbuild自动滚包
把源码丢进~/rpmbuild/SOURCES,spec放~/rpmbuild/SPECS,然后:
rpmbuild -ba ~/rpmbuild/SPECS/socat.spec
十分钟后,~/rpmbuild/RPMS/x86_64里就会冒出socat-3.0.0-1.el7.x86_64.rpm。**记住,别急着rpm -ivh,先createrepo建个本地仓**,后面批量上线直接yum install,回滚也能yum history undo。
生产环境怎么平滑上线?
1. 在一台同版本虚机里完整跑一遍功能测试,转发tcp/udp各跑一千并发,确认cpu不会飙红。
2. 用ansible copy模块把rpm推到目标机,yum localinstall,再启服务。不要图省事直接rpm -U,会跳过依赖检查。
3. 把旧版socat重命名留备份,mv /usr/bin/socat /usr/bin/socat-1.7.bak,一旦3.0配置出错,秒级切回。
常见坑位速查表
• 编译报错“undefined reference to `clock_gettime`”——装librt-devel,然后spec里加-lrt。
• 运行提示“socat: E SOCKS: protocol not supported”——3.0默认enable-socks4,要加“--with-socks5”重新编译。
• 开机自启失败——socat 3.0把pidfile权限改成640,老脚本里echo $! > /var/run/socat.pid会权限拒绝,用socat自己的“-D -L /var/lock/socat.lock”参数即可。
一条指令验成果
本地监听9527,把流量怼到远端80,再来个http头测试:
socat TCP4-LISTEN:9527,reuseaddr,fork TCP4:remote.host:80
另窗口curl -I http://127.0.0.1:9527,返回200即代表3.0正式上岗。
总结
CentOS7官方仓库不再更新,epel又迟迟不跟进,最靠谱的办法就是自己动手打rpm。三分钟装好依赖,十分钟编完包,再用ansible批量分发,**socat 3.0就能稳稳落地**。下次再碰到“版本太低”的尴尬,直接甩出私仓地址,谁用都说香。









