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邮件服务邮件列表2026/10/27

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" /> 与安装版本一致。

首登密码自助流程(实测全链路):

  1. 首页 Login → "Lost password?"(URL /wws/firstpasswd)→ 填 listmaster 邮箱提交(表单含 CSRF 令牌 csrftoken 与确认页 response_action_confirm=Confirm,浏览器操作无感)。
  2. 提交成功页实测文案:Message sent — We've sent you an email that will allow you choose your password.
  3. listmaster 邮箱收到 Subject: Mailing lists service / your environment(X-Mailer: Sympa 6.2.66),内含一次性 ticket 链接 http://<域名>/wws/ticket/<数字>。
  4. 浏览器打开 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_list
    

    6.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 层问题。

八、参考链接