介绍
之前我们写过一个解决Debian12报错缺少依赖libssl1.1 ,小白手贱又升级了Debian13……发现自己编译的nginx又跑不起来了……
错误如下:
nginx: error while loading shared libraries: libpcre.so.3: No such file or directory
错误原因
我的nginx
是用 PCRE v1(libpcre3,soname=libpcre.so.3) 编出来的;Debian 13 默认只带 PCRE2(libpcre2-…),于是动态链接器找不到 libpcre.so.3
就直接崩……
解决方案
一把梭
wget https://snapshot.debian.org/archive/debian/20230625T210322Z/pool/main/p/pcre3/libpcre3_8.39-15_amd64.deb
sudo apt install ./libpcre3_8.39-15_amd64.deb
稳妥方案
先试是否官方仓库还留着(有就一步到位):
apt update
apt install -y libpcre3
如果提示找不到包(Debian 13 很可能没有),就从 Debian 12(bookworm)拉一个只这一个包下来,做交叉安装(尽量安全):
# 1) 临时加 bookworm 源
echo 'deb [arch=amd64] http://deb.debian.org/debian bookworm main' \
> /etc/apt/sources.list.d/bookworm-compat.list
# 2) 降低它的优先级,避免系统被回滚
cat >/etc/apt/preferences.d/pcre3.pref <<'EOF'
Package: *
Pin: release n=bookworm
Pin-Priority: 50
Package: libpcre3
Pin: release n=bookworm
Pin-Priority: 990
EOF
# 3) 更新并只安装 libpcre3
apt update
apt install -y -t bookworm libpcre3
如果只缺 libpcre.so.3
,装完就会消失;若还缺别的(如 libssl.so.*
、libcrypto.so.*
),按同样办法补齐对应版本。
注意事项
- 这种办法 属于“手动拉旧库”,和之前
libssl1.1
的做法一样。短期能跑,长期可能有安全风险。 - 如果
nginx
还缺其他旧库(比如libssl.so.1.1
、libcrypto.so.1.1
),也需要同样的办法装回来。 - 更干净的办法是:要么改用 Debian 13 自带
nginx
(基于 PCRE2),要么自己重编xd-nginx
让它静态链接或用 PCRE2。