必须使用宝塔7.0安装脚本并配置DNF仓库地址,因CentOS 9弃用yum、停用mirrors.centos.org且存在OpenSSL 3.x兼容问题,旧脚本无法正常安装。

CentOS 9 安装宝塔报 dnf 命令失败或仓库元数据错误
CentOS 9(含 Stream 9)已弃用 yum,全面转向 dnf 作为默认包管理器,但旧版宝塔安装脚本仍硬编码调用 yum 或未适配 DNF 的仓库结构,导致执行 dnf repolist 时返回空列表、Failed to download metadata 或直接卡死。
这不是网络问题,而是脚本逻辑与系统工具链不匹配。必须切换到官方适配 DNF 的新版安装入口。
- 先确认当前系统真实身份:
cat /etc/redhat-release或rpm -q centos-stream-release,避免误判为 CentOS 7/8 - 停止使用旧脚本:
http://download.bt.cn/install/install_6.0.sh在 CentOS 9 上已失效,强行运行会反复尝试yum install并报No module named yum - 改用官方最新兼容入口:
wget -O install.sh http://download.bt.cn/install/install_7.0.sh(截至 2026 年 4 月,7.0 系列是唯一正式支持 CentOS 9+ DNF 的主线) - 运行前手动预装基础依赖:
dnf install -y wget curl ca-certificates,避免脚本启动阶段因缺少wget直接退出
安装过程中提示 Could not resolve host: mirrors.centos.org
CentOS Stream 9 已完全停用 mirrors.centos.org,但部分宝塔脚本(尤其是缓存版本或镜像站转发)仍试图访问该域名,触发 DNS 解析失败。
这不是服务器 DNS 配置问题,而是源地址本身已下线。必须强制覆盖仓库基址。
- 临时生效:运行
export BT_REPO=https://vault.stream.centos.org/9-stream/BaseOS/x86_64/os/(BaseOS 地址)和export BT_REPO_APPSTREAM=https://vault.stream.centos.org/9-stream/AppStream/x86_64/os/ - 若使用华为云/腾讯云等厂商镜像,可设为:
export BT_REPO=https://mirrors.huaweicloud.com/centos-stream/9-stream/BaseOS/x86_64/os/ - 这些环境变量需在执行
bash install.sh前设置,且不能写入~/.bashrc后再新开终端——安装脚本不读取用户 shell 配置 - 验证是否生效:脚本运行后观察日志中是否出现
Downloading from vault.stream.centos.org或对应云厂商域名
bt restart 失败或 systemctl status bt 显示 inactive
CentOS 9 默认启用 systemd v252+,对 service 文件语法校验更严。旧版宝塔生成的 /usr/lib/systemd/system/bt.service 中存在已被废弃的字段(如 Type=simple 缺少 ExecStart、RestartSec=10 未声明单位),导致 systemd 拒绝加载。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
不能靠 systemctl daemon-reload 修复,必须替换 service 定义。
- 先检查实际 service 文件内容:
systemctl cat bt,重点看ExecStart行是否存在且路径正确(应为/www/server/panel/pyenv/bin/python而非旧版/usr/bin/python) - 若发现
ExecStart=为空或指向不存在路径,说明脚本未完成初始化,此时应中断安装、清理重试:bt uninstall && rm -rf /www - 成功安装后,手动重载并启用:
systemctl daemon-reload && systemctl enable --now bt,注意必须同时带--now,否则仅注册不启动 - 验证端口监听:
ss -tunlp | grep ':8888',若无输出,说明面板进程根本未拉起,不是防火墙问题
为什么换脚本后仍提示 OpenSSL 版本不兼容
CentOS Stream 9 默认搭载 OpenSSL 3.5.1,而宝塔部分 Python 扩展(如 pycurl)编译时链接的是 libssl.so.1.1,运行时报 ImportError: libssl.so.1.1: cannot open shared object file。
这不是安装脚本问题,是运行时 ABI 断层。官方 7.0 脚本虽适配 DNF,但未内置 OpenSSL 兼容层。
- 不要降级系统 OpenSSL——会破坏整个系统安全栈
- 优先尝试软链接方案(仅限测试环境):
ln -sf /usr/lib64/libssl.so.3 /usr/lib64/libssl.so.1.1,但需确认libcrypto.so.1.1同步处理 - 生产环境推荐切换发行版:Rocky Linux 9.x 与 RHEL 9 ABI 完全一致,且宝塔官方实测通过率超 95%,比硬扛 Stream 9 更省时间
- 若坚持用 Stream 9,需在安装后手动重建 Python 环境:
/www/server/panel/pyenv/bin/pip uninstall pycurl -y && PYCURL_SSL_LIBRARY=openssl /www/server/panel/pyenv/bin/pip install pycurl
真正卡住的点往往不在安装命令本身,而在系统底层组件(OpenSSL、systemd、DNF repo)与面板二进制的隐式耦合。每次重试前,先跑一遍 dnf repolist && openssl version -a && systemctl daemon-reload,比盲目换镜像源更有效。

















