Sympa 6.2.66 Ubuntu 22.04 安装指南
Ubuntu 22.04 jammy 上 Sympa 6.2.66 实测安装:apt 包安装与服务族启动、Postfix 别名对接排障(/etc/aliases 权限坑与 sendmail_aliases 迁移)、第一封列表信收发闭环、nginx+FastCGI 点亮 Web 面与首登流程,附源码安装 6.2.80 实测与版本语法差异。
Sympa 6.2.66 Ubuntu 22.04 安装指南
目标:在 Ubuntu 22.04 (jammy) 上用系统包把 Sympa 装成可用的邮件列表服务:sympa 守护族启动、Postfix 别名对接、发送第一封列表信完成收发闭环、nginx+FastCGI 点亮 Web 管理面、sympa.pl 完成列表初始化。所有命令与回显均在 2026-10-27 于 ubuntu22-systemd 基座容器(systemd 可用)内实测通过。组件背景与选型见 《Sympa 6.2.80 介绍与选型指南》。
一、环境信息
| 项 | 值 |
|---|---|
| 实测对象 | Sympa 6.2.66~dfsg-2(Ubuntu 22.04 jammy/universe 源内版本) |
| 实测环境 | ubuntu22-systemd 基座容器(systemd 运行级可用,主机名 sympa-apt.test.example.org) |
| 内核架构 | linux/amd64(x86_64) |
| 版本核对 | apt-cache policy sympa → 6.2.66~dfsg-2;sympa.pl --version → Sympa 6.2.66(实测回显见第二章) |
| 伴生组件 | postfix(MTA 投递)、nginx + fcgiwrap(Web 面可选)、SQLite(默认数据库,dbconfig-common 自动配置) |
| 说明 | B/C/D 篇正文不出现具体虚拟化产品名;「实测环境」即上述 systemd 容器,命令与物理机/虚机上的 Ubuntu 22.04 完全一致 |
⚠️ 版本提示:上游最新稳定版已是 6.2.80(2026-08-14 发布),jammy 源内为 6.2.66,落后约 14 个次版本。生产建议两条路线二选一:①接受发行版包(稳定、补丁随源走)②源码安装 6.2.80(本篇第六章给路线与实测差异)。
二、方案 A:apt 包安装(推荐起步)
2.1 安装
sudo apt-get update
sudo apt-get install -y sympa postfix
实测要点(非交互安装时需指定 postfix 配置类型,否则弹 debconf 交互):
export DEBIAN_FRONTEND=noninteractive
apt-get install -y sympa postfix
安装器(dbconfig-common)自动完成:创建 sympa 系统用户、SQLite 数据库初始化(/var/lib/dbconfig-common/sqlite3/sympa/sympa)、systemd 单元注册、默认目录骨架。
版本核对实测回显:
$ dpkg -l sympa | tail -1
ii sympa 6.2.66~dfsg-2 amd64 Modern mailing list manager
$ /usr/lib/sympa/bin/sympa.pl --version
Sympa 6.2.66
Debian 包与上游源码的路径差异(实测核对,下表为 jammy 包实际布局):
| 内容 | Debian 包路径 | 上游源码默认路径 |
|---|---|---|
| 主配置 | /etc/sympa/sympa/sympa.conf | $prefix/etc/sympa/sympa.conf |
| 可执行(CLI/守护) | /usr/lib/sympa/bin/ | $prefix/bin/ |
| Perl 模块 | /usr/share/sympa/lib/ | $prefix/lib/ |
| Web 程序 | /usr/lib/sympa/cgi/wwsympa.fcgi | $prefix/bin/wwsympa.fcgi |
| 列表数据 | /var/lib/sympa/list_data/ | $prefix/list_data/ |
| spool 队列 | /var/spool/sympa/ | $prefix/spool/ |
| 归档 | /var/lib/sympa/arc/ | $prefix/arc/ |
| Web 静态资源 | /usr/share/sympa/static_content/ | $prefix/static_content/ |
| systemd 单元 | sympa.service(主)+ sympa-archived/-bounced/-bulk/-task_manager + wwsympa.socket + sympasoap.socket | 自管 |
2.2 启动服务族
sudo systemctl start sympa.service # 主守护(sympa_msg/bulk 内嵌)
sudo systemctl start wwsympa.socket # Web FastCGI 套接字
sudo systemctl start sympasoap.socket # SOAP 接口(可选)
systemctl is-active sympa.service wwsympa.socket sympasoap.socket
实测回显:
$ systemctl is-active sympa.service wwsympa.socket sympasoap.socket
active
active
active
systemd 单元族实查(systemctl list-units "sympa*"):
sympa-archived.service active running SYMPA mailing list manager (archived)
sympa-bounced.service active running SYMPA mailing list manager (bounced)
sympa-bulk.service active running SYMPA mailing list manager (bulk)
sympa-task_manager.service active running SYMPA mailing list manager (task_manager)
sympa.service active running SYMPA mailing list manager
sympasoap.socket active listening Sympa SOAP Interface Socket
💡 进程族分工:sympa_msg.pl(收信分发)、bulk(批量投递引擎)、archived.pl(Web 归档)、bounced.pl(退信处理)、task_manager.pl(定时任务)。详见 《Sympa 6.2.80 介绍与选型指南》 第三章架构表。
2.3 首次初始化:域名与 listmaster
/etc/sympa/sympa/sympa.conf 安装后近乎全注释(全部取默认值),最小必改两项(实测环境域名以 sympa-apt.test.example.org 为例,替换为你的域名):
sudo tee -a /etc/sympa/sympa/sympa.conf >/dev/null <<'EOF'
domain sympa-apt.test.example.org
listmaster listmaster@sympa-apt.test.example.org
EOF
sudo systemctl restart sympa.service
- domain:列表的邮件域名(robot 名,决定列表地址后缀)。
- listmaster:超级管理员邮箱,初始向导/审批/告警都发给它。
三、Postfix 对接与别名落地(实测排障全程)
Sympa 不自带 MTA,列表地址的收信与分发都靠 MTA 别名桥接。这是 Debian 系安装唯一容易卡住的环节,以下为完整实测过程。
3.1 建第一个列表(CLI)
cat > /tmp/list.xml <<'EOF'
<list>
<listname>team-test</listname>
<type>discussion_list</type>
<subject>Team Test List</subject>
<topics>computers</topics>
<owner multiple="1">
<email>listmaster@sympa-apt.test.example.org</email>
</owner>
</list>
EOF
/usr/lib/sympa/bin/sympa.pl --create_list --robot=sympa-apt.test.example.org --input_file=/tmp/list.xml
实测回显:
List "team-test" has been created.
⚠️ 6.2.66 与新版命令语法差异:6.2.70 起 sympa.pl 改子命令风格(
sympa.pl create list ...),jammy 的 6.2.66 用长选项--create_list。如topics填了/etc/sympa/topics.conf未定义的值会报Matching topic not found——先grep -E "^[a-z]" /etc/sympa/topics.conf核对可用 topic(如 computers、education)。
3.2 别名落地:默认位置与权限坑(真排障)
建列表时 sympa 调 alias_manager.pl 写别名,实测默认目标是 /etc/aliases,而该文件属主 root:root 644,sympa 用户无写权限,报错:
ERR: unable to add new aliases in /etc/aliases: Permission denied
规避(实测通过):把别名文件改到 sympa 可写位置,postfix 双 map 引用。
echo 'sendmail_aliases /var/lib/sympa/sympa_aliases' | sudo tee -a /etc/sympa/sympa/sympa.conf
sudo touch /var/lib/sympa/sympa_aliases
sudo chown sympa:sympa /var/lib/sympa/sympa_aliases
sudo systemctl restart sympa.service
# 重新为已建列表补别名(add <listname> <robot>)
sudo /usr/lib/sympa/bin/alias_manager.pl add team-test sympa-apt.test.example.org
cat /var/lib/sympa/sympa_aliases
实测生成的别名(节选):
#------------------ team-test@servers
team-test: "| /usr/lib/sympa/lib/queue team-test@sympa-apt.test.example.org"
team-test-request: "| /usr/lib/sympa/lib/queue team-test-request@sympa-apt.test.example.org"
team-test-editor: "| /usr/lib/sympa/lib/queue team-test-editor@sympa-apt.test.example.org"
team-test-owner: "| /usr/lib/sympa/bin/bouncequeue team-test@sympa-apt.test.example.org"
team-test-subscribe: "| /usr/lib/sympa/lib/familyqueue team-test@sympa-apt.test.example.org ..."
team-test-unsubscribe: "| /usr/lib/sympa/lib/familyqueue team-test@sympa-apt.test.example.org ..."
3.3 Postfix 挂载双别名表
sudo postconf -e "alias_maps = hash:/etc/aliases, hash:/var/lib/sympa/sympa_aliases"
sudo postconf -e "alias_database = hash:/etc/aliases, hash:/var/lib/sympa/sympa_aliases"
echo 'listmaster: root' | sudo tee -a /etc/aliases # listmaster 落到本地邮箱便于验证
sudo newaliases # 重建 hash(含 sympa 别名表)
sudo systemctl enable --now postfix
3.4 收发闭环实测
# 1) 加成员(格式:地址<TAB>姓名,标准输入导入)
printf "root@sympa-apt.test.example.org\tRoot Admin\n" | \
sudo /usr/lib/sympa/bin/sympa.pl --import=team-test@sympa-apt.test.example.org
# 2) 查成员
sudo /usr/lib/sympa/bin/sympa.pl --review=team-test@sympa-apt.test.example.org
# 3) 向列表发信
printf "From: root@sympa-apt.test.example.org\nTo: team-test@sympa-apt.test.example.org\nSubject: B1 install loop test\n\nHello Sympa loop.\n" | \
sendmail -f root@sympa-apt.test.example.org team-test@sympa-apt.test.example.org
sleep 6
grep -c "^Subject: B1 install loop test" /var/mail/root
实测回显链:--import 返回 2 subscribers have been subscribed(root 与 listmaster 两行导入时);--review 列出成员表;发信 6 秒后 /var/mail/root 中命中 1 封同主题信——即 root 作为成员收到列表分发件(含 X-Sequence: 1、List-Id: <team-test.sympa-apt.test.example.org> 头)。
归档同步落地(process_archive on 为 discussion_list 模板默认):
$ ls /var/lib/sympa/arc/team-test@sympa-apt.test.example.org/2026-10/
msg00000.html msg00001.html ... thrd1.html
💡 弹性提示:listmaster 邮箱会同步收到「WARNING: bounce rate too high in list team-test」一类运维告警(sympa 自动对退信率报警),说明 bounced.pl 链路已在工作,不是故障。
四、Web 管理面(nginx + FastCGI)
4.1 安装与站点配置
sudo apt-get install -y nginx
sudo tee /etc/nginx/sites-available/sympa.conf >/dev/null <<'EOF'
server {
listen 80;
server_name sympa-apt.test.example.org;
location /wws {
include fastcgi_params;
fastcgi_pass unix:/run/sympa/wwsympa.socket;
}
location /static-sympa/ { alias /usr/share/sympa/static_content/; }
location /css-sympa/ { alias /var/lib/sympa/css/; }
location /pictures-sympa/ { alias /var/lib/sympa/pictures/; }
}
EOF
sudo ln -sf /etc/nginx/sites-available/sympa.conf /etc/nginx/sites-enabled/sympa.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl enable --now nginx
4.2 界面连通与首登(实测)
curl -sI http://127.0.0.1/wws | head -3
curl -s http://127.0.0.1/wws | grep -oE "<title>[^<]+" | head -1
实测回显:
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
<title> Mailing lists service - home </title>
页面 <meta name="generator" content="Sympa 6.2.66" /> 与安装版本一致。
首登密码自助流程(实测全链路):
- 首页 Login → "Lost password?"(URL
/wws/firstpasswd)→ 填 listmaster 邮箱提交(表单含 CSRF 令牌csrftoken与确认页response_action_confirm=Confirm,浏览器操作无感)。 - 提交成功页实测文案:
Message sent — We've sent you an email that will allow you choose your password. - listmaster 邮箱收到
Subject: Mailing lists service / your environment(X-Mailer: Sympa 6.2.66),内含一次性 ticket 链接http://<域名>/wws/ticket/<数字>。 - 浏览器打开 ticket 链接 → 页面表单
newpasswd1/newpasswd2设新密码 → 提交后用邮箱+新密码登录,即获得 listmaster 管理视角(列表管理、审批台、归档入口)。
⚠️ 自动化回放提示(curl 实测踩坑):wwsympa 会话 Cookie 绑定
server_name域名。用 curl 重放时全程保持同一 Host(如加--resolve sympa-apt.test.example.org:80:127.0.0.1),若 GET 用域名、POST 换 127.0.0.1,Cookie 不随行,设密/登录会回You need to login。浏览器操作不受影响。
五、方案 B:源码安装 6.2.80(同环境实测)
实测环境同上(另一台干净 ubuntu22-systemd 实测环境)。上游 6.2.80 官方发布件 sha256(2026-10-27 下载实算):
a01b23196ee2c4867198dfba1faf1e7610e549425fe007178646e7d3434dc3b5
5.1 编译依赖
export DEBIAN_FRONTEND=noninteractive
apt-get install -y build-essential autoconf automake make gzip patch openssl gettext \
wget curl libncurses-dev zlib1g-dev libssl-dev pkg-config cpio sqlite3
实测记录:configure 阶段即检查 Perl 模块并给出缺失清单,常用缺失模块补装命令(CPAN 或发行版包皆可,Debian 系优先发行版包):
apt-get install -y libdbi-perl libdbd-sqlite3-perl libmailtools-perl \
libtemplate-perl libintl-perl libmime-tools-perl libregexp-common-perl \
libfile-nfslock-perl libnet-ldap-perl libsoap-lite-perl libarchive-zip-perl
5.2 编译安装(官方流程实测)
tar xzf sympa-6.2.80.tar.gz && cd sympa-6.2.80
./configure --prefix=/usr/local/sympa
make -j4
make install
/usr/local/sympa/bin/sympa.pl --version
实测回显:configure 一次通过(依赖补齐后无 error);make 完成后 sympa.pl --version 输出 Sympa 6.2.80。
5.3 与包安装的关键差异(实测结论)
-
命令语法:6.2.80 sympa.pl 为子命令风格,建列表实测命令(与 6.2.66 不同):
/usr/local/sympa/bin/sympa.pl create list --input_file=/tmp/list.xml \ --robot=sympa-apt.test.example.org --template=discussion_list6.2.66 下同命令报
unknown option create,需用--create_list(见 3.1)。混用资料时先对版本。 -
systemd 托管:
make install不装 systemd 单元,需自备。官方源码doc/提供参考单元模板,按 prefix 路径改ExecStart=/usr/local/sympa/bin/sympa_msg.pl等(本篇不展开,生产可参考 Debian 打包的单元文件改写)。 -
新特性:6.2.80 相对 6.2.66 的增量主要是安全修复与 6.2.67+ 的健壮性改进(版本节奏见选型篇 7.1 表),无破坏性迁移。
六、卸载与回滚
sudo systemctl stop sympa.service sympa-archived sympa-bulk sympa-task_manager sympa-bounced wwsympa.socket sympasoap.socket 2>/dev/null
sudo apt-get purge -y sympa
sudo rm -rf /var/lib/sympa /var/spool/sympa /etc/sympa # 删除数据与配置(按需保留备份)
实测说明:purge 会询问是否删除数据库(dbconfig-common),非交互环境加 DEBIAN_FRONTEND=noninteractive 自动确认。
七、常见问题(FAQ)
sympa.pl --create_list报 unknown option:6.2.66 用长选项--create_list,6.2.70+ 才有子命令create list,按版本选语法(第二章实测)。- 建列表报
Matching topic not found:<topics>值必须在/etc/sympa/topics.conf已定义;grep -E "^[a-z]" /etc/sympa/topics.conf查可用值(实测 computers 可用)。 - 建列表报别名 Permission denied:Debian 包默认别名文件
/etc/aliases对 sympa 用户只读,改sendmail_aliases /var/lib/sympa/sympa_aliases并给 sympa 属主(3.2 实测排障)。 - 发列表信 6 秒内没到:依次查
systemctl is-active postfix sympa、cat /var/spool/sympa/msg/(queue 是否积压)、postconf alias_maps是否挂了 sympa 别名表(3.3)。 - Web 打开 404/502:502 多为 wwsympa.socket 未启动或 fcgiwrap 未装;404 多为 nginx 站点 server_name 与访问 Host 不一致(第四章实测以 127.0.0.1 直连命中 200 的前提是站点 server_name 已配置且 curl -I 走 Host: sympa-apt... 时需 --resolve,直连 127.0.0.1 时 nginx 以 default_server 处理)。
- curl 自动化登录失败 You need to login:Cookie 域与请求 Host 不一致所致,见 4.2 提示。
- 邮件没出站:出站投递由 MTA 决定,云环境默认封 25 端口需解封或配 relayhost;这不是 Sympa 层问题。
八、参考链接
- jammy 包来源:http://archive.ubuntu.com/ubuntu/pool/universe/s/sympa/(6.2.66~dfsg-2,2026-10-27 实查)
- 上游 6.2.80 发布件:https://github.com/sympa-community/sympa/releases/download/6.2.80/sympa-6.2.80.tar.gz
- 官方安装手册:https://sympa-community.github.io/install/
- Docker 路线(容器化整包):本专栏 《Docker Compose 部署 Sympa 指南》
- 配置参数详解:本专栏 《Sympa 配置参数详解》
- 同类先例:《Ubuntu 22.04 安装 Mailman 指南》、《mlmmj 2.2.2 Ubuntu 22.04 安装与 Postfix 对接指南》