ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CentOS 7 EOL后软件安装指南:OpenSSH升级与Oracle 19c部署

CentOS 7 EOL后软件安装指南:OpenSSH升级与Oracle 19c部署 CentOS 7 这四个字对很多运维老哥来说可能比“新系统”四个字还亲切。2024年6月30日官方维护正式落幕但这丝毫不影响它留在成千上万台生产服务器里继续吭哧吭哧干活。打开搜索引擎跟它绑定的热搜词也早不是“怎么安装”而是一长串“怎么在它身上装新东西”升级 OpenSSH、装 Oracle 21c、装 Innovus、找一个能用的 Chrome 旧版 RPM。这些词放到一起暴露的是同一个真问题——系统老了软件包却不会停下来等我们。我最近正好把这几件事挨个过了一遍过程中踩了不少坑也摸清了一些规律。这篇文章就以我自己的实操为主线把“CentOS 7 上装新软件”这件事讲透哪些能装、哪些别硬装、哪些只能找旧版、哪些必须编译以及每一步背后的原因。适合正在 CentOS 7 上做维护、折腾安装包的读者也包括那些明知系统该换了、但短期内还得继续撑一段的团队。1. 停更之后CentOS 7 为什么反而更忙1.1 官方维护已经收官工作现场却还在CentOS 7 的整个生命周期其实拉得很长2014年发布到2020年其实已经把重心交棒给了 CentOS 8但 7 的更新一直持续到 2024 年中的 EOL。这个时间跨度比很多软件产品的寿命都长所以大量企业内部系统、科研环境、教学平台都把它当成了默认底座。停更意味着什么通俗讲就是 CentOS 官方仓库里不会再有新的 RPM 包了。CVE 漏洞不会有人自动帮你补内核也不会再有安全更新。可现实是服务器上的业务没法说停就停尤其是那种“数据库一跑就是十年”的老环境或者像 EDA芯片设计自动化这类对操作系统版本极其敏感的工具链CentOS 7 反而成了一个“稳定得不舍得多动一下”的运行平台。这就是矛盾的根源系统不更新了但新业务、新软件还在不断提要求。你装 OpenSSH 是因为要堵漏洞装 Oracle 是因为数据库要升级装 Innovus 是因为要跑芯片设计流程装 Chrome 是因为总得有个浏览器能用。于是大家不约而同地在搜索引擎里打出了同一类问题CentOS 7 上到底怎么把这些东西装起来。1.2 热搜词背后其实是四类典型需求我梳理了一下跟 CentOS 7 相关的热门搜索基本可以分成四条线搜索热词需求本质对应方案centos 7 升级 openssh安全加固EOL 后 CVE 无人修补编译安装新版 OpenSSH或使用第三方兼容仓库centos 7 oracle 21c数据库版本升级评估 19c 与 21c 的系统兼容性优先 EL7 官方支持版本centos 7 innovus 安装EDA 工具链在 EL7 上部署补齐系统依赖库配置 License 与运行环境centos 7 环境的 chromium 浏览器 安装日常办公/网页访问需求使用特定旧版 Chromium或找 120 左右的老 Chrome RPM这四条线看起来毫不相干但背后的技术逻辑有一个共同点CentOS 7 自带的 glibc 是 2.17而新软件大多已经按更高版本的系统基线来编译比如要求 GLIBC_2.28、要求新版 NSS、要求新版 OpenSSL。系统库里没有这些版本软件自然跑不起来。所以“在 CentOS 7 上装新软件”的核心难点从来不是“缺某个安装包”而是“系统底子跟不上软件的要求”。1.3 过渡期怎么“续命”EOL 之后常用的“续命”手段其实就三种第一使用第三方兼容仓库。比如 ELRepo、EuroLinux 的 EL7 仓库、Oracle Linux 7 的仓库它们会继续为 EL7 架构提供一部分安全更新和软件包。使用前要看清楚仓库的口碑和维护状态别为了装一个包把整个系统的包管理信任链破坏了。第二源码编译安装。适用于 OpenSSH、Nginx、某个小工具这类能够自行编译的软件优点是可控性强缺点是升级和依赖管理都得自己负责。第三找软件的老版本。比如 Chrome、Chromium 的旧版 RPM、老版本数据库客户端、旧版 EDA 工具它们编译时使用的系统基线恰好还在 CentOS 7 支持范围内。这三条路没有哪条是“最优解”只能说针对不同软件、不同场景挑一条最省力、最稳的路径。下面我就按这四条搜索热词一条一条讲实操。2. 升级 OpenSSH停更系统上的“外科手术”2.1 为什么必须自己动手CentOS 7 自带的是 OpenSSH 7.4这个版本在 2024 年曝出了高危漏洞 CVE-2024-6387也就是大家说的 regreSSHion可以让攻击者在特定条件下通过 SSH 服务远程执行任意代码。RHEL/CentOS 官方在 EOL 之后没有提供修复补丁这就形成一个很尴尬的局面系统还在跑SSH 还在对外提供服务但漏洞没人补。所以很多人的第一反应就是自己编译一个新版 OpenSSH。这个方向完全正确但必须清楚一个前提OpenSSH 是系统最核心的远程登录通道升级它就像做心脏手术一旦失败你连回服务器的路都没有。我个人的建议是动手前至少准备两条逃生通道。一是确保服务器有带外管理比如 IPMI、iDRAC可以进控制台二是先装好 telnet 服务做临时备用。我知道 telnet 不安全但它只是应急手段在 SSH 正常后立刻关闭风险可控。实际操作中防火墙只对内网 IP 放行 telnet 端口几分钟的事。2.2 源码编译的完整流程编译安装 OpenSSH 并不复杂核心是三步准备依赖、编译安装、替换配置。先说依赖在 CentOS 7 上用以下命令把编译工具和头文件装齐yum install -y gcc make zlib-devel openssl-devel pam-devel libselinux-develCentOS 7 自带的 OpenSSL 是 1.0.2k这个版本刚好满足 OpenSSH 9.x 的编译要求不需要动 OpenSSL。千万不要顺手去升级 OpenSSLOpenSSL 跟系统的很多服务深度耦合升级它比换 SSH 风险大得多。然后到 OpenSSH 官网下载源码包以 9.8p1 为例tar -zxvf openssh-9.8p1.tar.gz cd openssh-9.8p1 ./configure --prefix/usr --sysconfdir/etc/ssh --with-pam \ --with-privsep-path/var/empty/sshd --with-md5-passwords make -j$(nproc)configure 参数里有两个点值得提醒--prefix/usr是为了让新版 ssh/sshd/scp 直接覆盖系统原有的二进制路径。如果 prefix 设成/usr/local会出现一个很容易踩的坑系统自带的是 7.4你编译装的是 9.8但 systemd 服务文件里写死的路径可能还是/usr/sbin/sshd结果新版本根本没有生效。--with-pam保留 PAM 认证支持否则你 SSH 登录时会跳过密码策略、账户锁定这些系统配置安全等级不升反降。安装前把老的二进制备份一份cp /usr/sbin/sshd /usr/sbin/sshd.old make install安装完成后千万不要马上重启服务。运行sshd -t验证配置语法再手动跑一下sshd -D -E /tmp/sshd.log看看有没有报错。确认无误后重启systemctl restart sshd2.3 升级之后还会踩的坑我至少见过三次“升级完连不上”的情况原因各不相同但排查思路是一致的。最常见的坑是 SELinux。CentOS 7 默认强制 SELinux当你用新编译的/usr/sbin/sshd替换旧二进制后SELinux 的类型标签可能不对导致服务启动失败或连接被拒。简单的排查方式restorecon -Rv /usr/sbin/sshd /etc/ssh还不行的话看/var/log/audit/audit.log里的 AVC 拒绝记录再决定是调整策略还是临时setenforce 0验证。第二个坑是/var/empty/sshd目录权限。privilege separation 目录权限不对sshd 会一直报 “Missing privilege separation directory” 或者 “privilege separation user sshd does not exist”。确认这个目录存在且属主是 root权限是 755。第三个坑是会话中断。新版 OpenSSH 默认配置里有些算法变了旧的 SSH 客户端可能会在连接阶段卡住。我建议先开一个不中断的会话测试再退出当前会话或者干脆把sshd_config里旧配置里特殊写法先比对一遍。比如新版本对AuthorizedKeysCommand、HostKeyAlgorithms的处理更严格一些以前被宽容接受的写法现在会直接拒绝启动。每次改动后都用sshd -t过一遍再 reload 服务。3. 装 Oracle 21c 还是 19c“重武器”的选择题3.1 21c 吸引人但 CentOS 7 的舞台只适合 19c很多人搜“CentOS 7 Oracle 21c”多半是看到了 Oracle Database 21c 的版本号觉得既然最新就该上最新。但这里有个很现实的问题Oracle 21c 的官方支持矩阵里操作系统要求是 Oracle Linux 8 / RHEL 8压根没有 RHEL7/CentOS7 这一行。硬要在 CentOS 7 上装 21c会遇到一连串底层的缺失依赖的库要求和 glibc 版本匹配不上安装前检查大概率直接挂掉。而 Oracle 19c 是官方明确支持 RHEL7 / Oracle Linux 7 的版本在 CentOS 7 上装 19c从系统兼容性看是“顺理成章”的。所以我的建议非常直接如果你的服务器还是 CentOS 7别纠结选 19c。21c 你可以等系统迁移到 EL8/9 之后再考虑。3.2 依赖库和内核参数清单Oracle 19c 在 CentOS 7 上安装前建议把系统依赖一次性补齐。Oracle 官方给 RHEL7 准备过一个预检包oracle-database-preinstall-19c但它主要在 Oracle Linux 的仓库里CentOS 7 上用不了这个 RPM只能手动把依赖装齐。我记录过一份实际用到的依赖清单供参考yum install -y bc binutils compat-libcap1 compat-libstdc-33 \ gcc gcc-c glibc glibc-devel ksh libaio libaio-devel \ libgcc libstdc libstdc-devel libXext libXtst \ libX11 libXau libXi libXt make sysstat unixODBC unixODBC-devel有几个包在 CentOS 7 默认源里不一定能直接搜到比如compat-libstdc-33通常需要用老 EL7 的源或者 rpmfind 单独拉取。安装时留意一下架构别装成 i686。内核参数方面Oracle 19c 的安装前检查会关注共享内存、信号量等设置。我用的参数如下# /etc/sysctl.d/98-oracle.conf kernel.semmsl 32000 kernel.semmns 142400 kernel.semopm 32000 kernel.semmni 128 kernel.shmall 1073741824 kernel.shmmax 4398046511104 kernel.shmmni 4096 kernel.msgmax 8192 kernel.msgmnb 65536 kernel.msgmni 2878 fs.file-max 6815744 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576改完之后sysctl -p生效。安装过程中如果runInstaller检测的某条不满足先看提示不要盲目把参数往上调——Oracle 的检查脚本给出的阈值通常很明确按提示改就行。内存 swap 也有硬要求物理内存小于 2GB 时 swap 至少 2 倍物理内存2GB 到 8GB 之间 swap 约等于物理内存大于 8GB 时 swap 可以按物理内存的 75% 来给。云服务器上如果没配 swap安装 Oracle 很容易在内存检测那一步卡住。3.3 安装后怎么确认它跑起来了CentOS 7 上装完 19c验证无非三条命令su - oracle lsnrctl status sqlplus / as sysdba常见的问题是 listener 起不来、实例启动到一半报告内存不足。前者多半是/etc/hosts主机名解析有问题后者看 swap 和 kernel.shmmax 是否满足。Linux 上 Oracle 安装其实已经高度自动化了真正折腾人的反而是这些系统层面的边角料。操作系统本身不是越新越好而是和软件版本匹配时最省心。4. Innovus 这类 EDA 工具CentOS 7 反而是最顺的环境4.1 为什么 EDA 老环境离不开 EL7Innovus 是 Cadence 的数字后端布局布线工具在芯片设计流程里属于“大件”。这类 EDA 工具对操作系统的要求跟一般互联网应用完全两个方向它们不追求新功能追求的是稳定复现。Cadence、Synopsys、Mentor 这些厂商的安装文档里支持矩阵总是成片成片的 RHEL/CentOS 版本而且很多老流程就是绑定在 EL7 上的。为什么会出现热搜“CentOS 7 innovus 安装”因为芯片设计公司里确实有大量跑 Innovus 的机器还是 CentOS 7。工具链、PDK、工艺库、脚本体系全都按 EL7 环境调好了你贸然换到新系统整套流程可能跑不出同样的结果。所以这个场景下CentOS 7 不是“该淘汰的老系统”反而是“最稳定的运行时环境”。4.2 装 Innovus 的依赖与部署要点我在一台最小化安装的 CentOS 7 上装过 Innovus最大的坑其实不是工具本身而是系统依赖缺失。Cadence 的安装包往往假定系统里有一堆 X11 图形库和老的共享库但在最小化安装里这些都不在。建议先把这些依赖装齐yum install -y libXp libXrender libXext libXt libXmu libXft \ openmotif csh ksh lsb glibc-devel libgcc libstdc \ nss_196? # 注意EDA工具常要求32位兼容库 yum install -y glibc.i686 libgcc.i686 libstdc.i686 \ libXp.i686 libXext.i686 libXt.i686 libXrender.i686不同版本、不同工艺库对 32 位库的依赖不一样装之前先看安装文档里的“System Requirements”一节。有些工具用installUpdate脚本图形界面安装有些用uncompress解压后直接配置环境操作上会有差异。License 是另一个很容易卡住的地方。Innovus 启动时会读取CDS_LIC_FILE环境变量很多人在.bashrc里写成export CDS_LIC_FILE5280localhost结果 License 服务没起来工具界面一直报 “Failed to check out license”。先确认 License 服务端口通不通再确认环境变量和 license 文件里的 hostname、MAC 地址对得上。4.3 常见报错排查我遇到过一个特别典型的报错error while loading shared libraries: libXp.so.6: cannot open shared object file。这个在 CentOS 7 默认源里其实已经移除了libXp需要先启用 cr 仓库yum install libXp或者直接从在线仓库拉取。另外有些更老的 EDA 组件需要motif、libXmCentOS 7 里要用openmotif包来满足。还有图形界面问题。很多 EDA 工具通过 X11 转发来显示图形窗口使用 MobaXterm 或者 Xming 连接时如果DISPLAY环境变量没设对启动界面会闪退。先echo $DISPLAY再xclock这种小工具测试一下 X 通道”能出表盘说明 X 转发正常之后大概率是工具本身的字体配置或 GTK 主题兼容问题。“字体安装不全也是常见坑CentOS 7 自带的字体对 EDA 工具界面支持很一般装个dejavu-sans-fonts、xorg-x11-fonts-*能少很多对不齐的显示问题。一句话总结Innovus 在 CentOS 7 上不是“装不上”而是“依赖缺一不可”。把系统库补到位License 配好它跑起来比新系统上还稳。5. 浏览器需求CentOS 7 找 Chrome 旧版 RPM 的思路5.1 新版装不上的根因是 glibc如果说前面几个是“专业工具”Chrome/Chromium 就属于“日常刚需”。某天你登录工作后台发现只有浏览器能进或者某个视频会议要用 Chrome 内核的浏览器系统里只有 Firefox 老掉牙——于是搜“centos 7 环境的 chromium 浏览器 安装”就上了热搜。直接去 Chrome 官网下载最新版 rpm双击安装通常会报错最常见的错误就是version GLIBC_2.28 not foundCentOS 7 的 glibc 是 2.17而新版 Chrome 编译时要求更高的 glibc 版本。glibc 是整个 C 运行时的地基你几乎不可能在 CentOS 7 上手动升级它而不把系统搞坏——因为它跟几乎所有的二进制程序都有关系。所以正确的思路不是“升级 glibc”而是“找一个当时编译条件跟 CentOS 7 匹配的旧版 Chrome/Chromium”。5.2 去哪里找“120左右”的版本Chrome 官方下载页只会给出最新的 rpm旧版 rpm 不会挂在那里。但是 Chrome for Testing 项目和 Chromium 的官方快照仓库可以提供特定版本的二进制。实际操作上我给几条相对可靠的路子第一去 Chromium 官方快照的存储桶里按 Linux_x64 路径下载指定版本号的 Chromium 压缩包。这种版本不带自动更新和部分专有编解码器但作为办公浏览器足够了。缺点是界面、字体渲染上跟正式版有一些细微差异。第二在 rpmfind、pkgs.org 这类老包收录站点上能找到几个历史版本的 Chrome/Chromium rpm。搜索时指定版本号比如 120.0.6099.109 这种装上的概率比直接装最新版高很多。下载完了检查一下依赖缺什么再决定要不要补 NSS、libXss 之类的库。第三使用第三方 Copr 仓库里的 chromium 构建包。Copr 是 Fedora 生态里的个人构建平台有些维护者会专门为 EL7 编译旧版 Chromium。这个方案最省事但你要信任维护者的打包水平。至少看一下构建状态、安装量、仓库更新时间别随便装一个几个月没人维护的包。我个人的选择是如果只是浏览网页办公直接用 Chromium 旧版就行如果必须用到 Chrome 的某些专有条件再找 120 左右的稳定版 rpm。5.3 装上之后的三个典型问题装好之后并不是万事大吉。我记得第一次装完用 root 身份启动 Chromium界面秒退命令行里提示一堆沙箱错误。因为 Chrome/Chromium 的 sandbox 需要内核辅助而在某些受限环境下SUID sandbox无法正常工作常见的应对是加参数启动chromium-browser --no-sandbox但这里我必须说清楚--no-sandbox意味着放弃了浏览器最重要的隔离层只适合在可信的固定机器上应急。正常工作区还是想办法弄个普通用户跑或者调整 sandbox 的权限。第二个常见问题是启动时报缺 NSS 库。CentOS 7 默认的 nss 版本较老而新一点的 Chromium 需要新版 NSS 符号。解决办法是升级 nss、nss-util、nspr 这几个包从 EL7 第三方更新源拉。注意升级前检查依赖的兼容性。第三个问题是字体和中文显示。CentOS 7 上装完 Chromium网页里的中文字体经常发虚或变成方块大概率是系统中文字体没装。补一个wqy-microhei、cjkuni-uming-fonts这类字体包中文显示立刻正常。这些小问题看着不起眼但往往是“装完了但没法用”的最大拦路虎。6. 我在 EOL 系统上养成的几个“保命”习惯说了这么多具体安装最后聊聊我在 CentOS 7 这类 EOL 系统上折腾几年后的几个习惯。第一动手前一定留后路。编译升级 OpenSSH 前备份老二进制装数据库前做快照改内核参数前备份 sysctl.conf。这些动作多花不了几分钟出问题的时候能救命。有一次我编译 OpenSSH 后忘了restoreconSELinux 直接拦住了新 sshd要不是提前备份了二进制的策略上下文那台远程服务器就真的回不去了。第二yum 源的优先级要管好。EOL 系统上最忌讳手里一堆第三方源。CentOS 7 本身已经不动了如果为了装新包引入一堆不受信任的仓库等于把系统的供应链交给陌生人。我一般只在需要特定包时临时启用第三方源装完立刻禁用并且用yum versionlock锁住关键内核库版本避免把系统升级到不可预测的状态。第三尽早规划迁移路径但不要被“必须马上换”绑架。CentOS 7 停更是事实可现实中的迁移成本很高。比较务实的做法是把长期要跑的中间件、数据库、工具链都列一个清单标清楚哪些系统版本兼容、哪些必须依赖 EL7估算迁移成本后再决定节奏。Rocky Linux / AlmaLinux / Oracle Linux 都是比较平稳的承接目标用 Elevate 这类工具也能直接原地升级到 EL8/9但迁移之前先把本文提到的这些临时方案用顺确保业务不断档。反正我的体会是CentOS 7 已经进入“老骥伏枥”阶段能不动就不动必须动就找最稳的路。我们这些还在用它的人与其抱怨它旧不如把系统兼容性、工具链版本、替换路径都摸清楚。这比单纯跑一个yum update有价值得多——毕竟它在服役的最后几年里已经不会再有官方更新送上门了。
返回列表