Ubuntu 22.04 安装 Apache mod_perl 2.0.12 指南

在 Ubuntu 22.04 服务器上通过 apt 在线安装 Apache mod_perl 2.0.12(libapache2-mod-perl2 2.0.12-1build1),并给出 deb 离线安装、模块启用、版本确认与卸载方式

Apache mod_perlApache mod_perl2026/10/11

Ubuntu 22.04 安装 Apache mod_perl 2.0.12 指南

目标:在 Ubuntu 22.04 服务器上安装 Apache mod_perl 2.0.12(apt 包 libapache2-mod-perl2 2.0.12-1build1),覆盖 apt 在线与 deb 离线两种安装方式,并完成模块启用、版本确认与验证;已在 Ubuntu 22.04.5(Apache/2.4.52 + Perl v5.34.0)实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(jammy,x86_64)
  • Apache HTTP Server:Apache/2.4.52 (Ubuntu)
  • Perl:v5.34.0(built for x86_64-linux-gnu-thread-multi)
  • mod_perl:2.0.12(apt 包 libapache2-mod-perl2 2.0.12-1build1)
  • 模块文件:/usr/lib/apache2/modules/mod_perl.so
  • 服务控制:apache2ctl -k restart(本环境未启用 systemd 服务托管,统一用 apache2ctl 直接控制 Apache 进程)
  • 示例账号:root

二、前置条件

  • 服务器可访问 Ubuntu 22.04 官方软件源(离线环境见「五、离线安装方案」)。
  • 以 root 或具备 sudo 权限的账号执行安装命令。

三、版本选型说明

Ubuntu 22.04 官方仓库内置 mod_perl 2.0.12(包名 libapache2-mod-perl2),与仓库自带的 Apache/2.4.52、Perl 5.34.0 配套,依赖关系由 apt 自动解决,推荐直接使用。

安装方式软件包是否需联网适用场景
apt 在线安装(推荐)libapache2-mod-perl2 2.0.12-1build1是可联网服务器,最简最稳
deb 离线安装同上(手动下载 deb 及依赖)否内网隔离/离线环境

版本确认方法(安装后任选其一):

  • dpkg -l libapache2-mod-perl2:显示包版本 2.0.12-1build1;
  • Apache 启动横幅(/var/log/apache2/error.log):Apache/2.4.52 (Ubuntu) mod_perl/2.0.12 Perl/v5.34.0 configured -- resuming normal operations。

⚠️ 注意:该包未随附 ModPerl::Version.pm,perl -MModPerl::Version 不可用,以 dpkg 包版本或 Apache 启动横幅为准。

四、在线安装方案(apt 官方仓库,推荐)

4.1 更新软件源

export DEBIAN_FRONTEND=noninteractive
apt-get update

回显(要点):

Get:18 个,Fetched 49.0 MB

4.2 安装 Apache、mod_perl 与 Perl

apt-get install -y apache2 libapache2-mod-perl2 perl wget

回显(要点):

Setting up libapache2-reload-perl (0.13-3) ...

libapache2-mod-perl2 安装时自动生成模块加载文件 /etc/apache2/mods-available/perl.load。

验证用 curl 不在 wget 的依赖中,单独安装:

apt-get install -y curl

4.3 确认版本

apache2 -v

回显:

Server version: Apache/2.4.52 (Ubuntu)
Server built:   2026-10-05T17:25:19
perl -v

回显(首两行):

This is perl 5, version 34, subversion 0 (v5.34.0) built for x86_64-linux-gnu-thread-multi
(with 78 registered patches, see perl -V for more detail)

4.4 确认 mod_perl 模块已加载

apache2ctl -M | grep -i perl

回显:

perl_module (shared)

模块加载文件 /etc/apache2/mods-available/perl.load 内容:

LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

五、离线安装方案(deb 包)

适用于内网隔离、无法访问软件源的服务器。

5.1 在可联网机器下载 deb 包及依赖

mkdir -p /root/modperl-debs && cd /root/modperl-debs
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances libapache2-mod-perl2 | grep "^[a-z]" | sort -u)

apt-get download 按依赖展开结果将 libapache2-mod-perl2 及其全部依赖的 .deb 包下载到当前目录,随后整体拷贝到离线服务器。

⚠️ 注意:离线服务器系统版本须与下载机器一致(同为 Ubuntu 22.04),否则依赖包版本可能不兼容。

5.2 离线服务器安装

cd /root/modperl-debs
dpkg -i *.deb

若提示未满足的依赖,用 apt 自动修复:

apt-get install -f -y

5.3 验证

与「四、4.3/4.4」完全相同:apache2 -v、perl -v 确认版本,apache2ctl -M | grep -i perl 应输出 perl_module (shared)。

六、方案对比与选择建议

维度apt 在线安装deb 离线安装
是否需联网是否
安装方式apt-get install 自动解决依赖dpkg -i + apt-get install -f 修复
软件版本仓库 2.0.12-1build1与下载机器同版本
优点一条命令、依赖完整、可升级适合内网隔离环境
缺点依赖外网需另机准备 deb 包

选择建议:可联网服务器直接用 apt 在线安装;内网隔离环境用 deb 离线安装。

七、配置说明

7.1 启用 perl 模块

a2enmod perl

回显:

Module perl already enabled

7.2 确认模块加载文件

/etc/apache2/mods-available/perl.load(与 mods-enabled/ 下内容一致):

LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

7.3 配置 mod_perl 的模块搜索路径(关键)

mod_perl 解释器的 @INC 默认不含自定义 Perl 模块目录(如 /var/www/perl),直接使用会导致首次访问 500。需要追加全局搜索路径(完整指令说明见《Apache mod_perl 配置参数详解》):

cat > /etc/apache2/conf-available/perl-switches.conf <<'EOF'
PerlSwitches -I/var/www/perl
EOF
a2enconf perl-switches

⚠️ 注意:PerlSwitches 仅在 Apache 启动时生效,修改后必须完整重启(apache2ctl -k restart),reload 不生效。

八、注意事项

  • ServerName 未设置时,启动/检查会提示 AH00558: Could not reliably determine the server's fully qualified domain name,属提示性警告,不影响功能;设置全局 ServerName 指令为实际域名或 IP 后消除。
  • mod_perl 的 @INC 陷阱:自定义模块目录必须通过 PerlSwitches -I<目录> 加入,且修改后需完整重启。
  • 本环境服务控制使用 apache2ctl -k restart(未启用 systemd 托管);启用 systemd 的服务器也可用 systemctl restart apache2。

九、常见问题(FAQ)

Q1:如何确认 mod_perl 版本? dpkg -l libapache2-mod-perl2 显示 2.0.12-1build1;或查看 /var/log/apache2/error.log 启动横幅 Apache/2.4.52 (Ubuntu) mod_perl/2.0.12 Perl/v5.34.0。perl -MModPerl::Version 不可用(包未安装 ModPerl::Version.pm)。

Q2:apache2ctl -t 报 AH00558 是错误吗? 不是。AH00558 只是提示未设置 ServerName,回显 Syntax OK 表示配置正确。设置全局 ServerName 指令后消除。

Q3:访问 Perl 处理器报 500,error.log 提示 Can't locate Hello.pm in @INC? mod_perl 默认 @INC 不含自定义模块目录,需全局配置 PerlSwitches -I/var/www/perl 并完整重启(reload 不生效)。详见《Apache mod_perl 配置参数详解》FAQ。

Q4:curl 命令不存在? wget 不隐含 curl,单独安装:apt-get install -y curl。

Q5:安装后访问站点失败如何快速定位? 先 apache2ctl -t 检查配置语法,再查看 /var/log/apache2/error.log 尾部错误(tail -f /var/log/apache2/error.log)。

十、卸载方式

禁用模块与配置片段:

a2dismod perl
a2disconf perl-switches

卸载软件包(保留配置文件)或彻底清除:

apt-get remove -y libapache2-mod-perl2
apt-get purge -y libapache2-mod-perl2

清理不再需要的依赖:

apt-get autoremove -y

如需连 Apache 一并卸载:apt-get remove -y apache2。

十一、参考链接