Ubuntu 22.04 安装 ZNC 1.10.3 指南

在 Ubuntu 22.04 上以源码编译与 apt 两种方案安装 ZNC 1.10.3,完成 systemd 托管、Web UI 与本地 IRC 网络接入的端到端实测验证。

ZNCZNCIRCUbuntu 22.04即时通信2026/10/30

Ubuntu 22.04 安装 ZNC 1.10.3 指南

目标:在 Ubuntu 22.04 服务器上从零安装 ZNC(高级 IRC bouncer)并用 systemd 托管为常驻服务。提供两条实测安装方案——方案 A 源码编译安装官方最新稳定版 1.10.3、方案 B apt 仓库安装(22.04 仓库为 1.8.2-2ubuntu0.1),覆盖配置生成、systemd 启动、webadmin 验证与 IRC 客户端接入验证。全部命令与回显均在 Ubuntu 22.04.5 LTS 实测通过,ZNC 1.10.3 经内网 ngIRCd 26.1(irc.lan)完成端到端收发与 Buffer 回放验证。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64),内核自带 systemd
  • 目标软件:ZNC 1.10.3(方案 A,官方源码编译,安装前缀 /usr/local);ZNC 1.8.2-2ubuntu0.1(方案 B,Ubuntu 仓库)
  • 编译依赖:build-essential、cmake、pkg-config、libssl-dev、zlib1g-dev、libicu-dev、gettext
  • 监听端口:8145(SSL,Web 管理与 IRC 客户端共用一个监听端口)
  • 数据目录:/var/lib/znc(专用系统用户 znc 的主目录,配置文件位于 /var/lib/znc/configs/znc.conf)
  • 上游 IRC 服务器(用于接入验证):内网 ngIRCd 26.1,主机名 irc.lan,端口 6667(文中 001 回显里的 client.lan 为该服务器侧 CloakHost 配置产生的主机掩码,与 ZNC 侧配置无关)

二、前置条件

  1. 一台可联网的 Ubuntu 22.04 服务器,具备 sudo 权限的普通用户或 root(本文示例命令默认 root 视角执行)。
  2. 磁盘与内存:源码编译峰值内存约数百 MB,1 GB 内存 + 2 GB 空闲磁盘即可完成编译;运行期 ZNC 常驻内存约 2~10 MB(本文实测 systemd 显示 2.1M 量级,随用户/频道数增长)。
  3. 网络出站可达 znc.in(下载源码)与 archive.ubuntu.com(安装依赖)。本文实测 znc.in 直连下载正常(约 2.3 MB 源码包,无需代理);若你的网络直连官方源受阻,请自行切换下载渠道后核对 sha256。
  4. 若服务器启用了防火墙(ufw/安全组),需放行 ZNC 监听端口(本文用 8145)。
  5. 计划接入的上游 IRC 网络地址(公网网络如 irc.libera.chat,或自建 ircd),安装完成后在 makeconf 或 webadmin 中配置。

三、版本选型说明

渠道版本获取方式说明
官方源码(推荐)1.10.3(2026-09-13 发布,安全修复版)znc.in/releases/archive/znc-1.10.3.tar.gz最新稳定版,含 1.10 系全部 IRCv3 能力(SASL 3.1/3.2、message-tags、chghost 等)与安全修复(CVE-2026-82373)
Ubuntu 22.04 仓库1.8.2-2ubuntu0.1apt install znc维护版,含发行版安全 backport,无 1.10 新特性
Ubuntu 24.04 仓库1.9.0-2build3apt install znc仅 noble 用户参考

关键差异(实查 ChangeLog.md 与官方 Releases,查询日期 2026-10-30):1.10.3 修复卸载模块时的 use-after-free(CVE-2026-82373),并要求 webadmin 调用方改用新的内部 API;1.10.0 起新装默认加载 corecaps 与 saslplainauth 模块。生产环境建议直接上 1.10.3(方案 A);仅求仓库包稳妥、不需要 IRCv3 新能力的可用方案 B,后续通过重新编译升级。两个方案的完整对比见第六章。

四、方案 A:源码编译安装 ZNC 1.10.3(推荐,官方最新版)

本章从系统依赖开始,完成「下载→校验→编译→安装→专用用户→配置生成→systemd 托管→验证」的完整闭环。

4.1 安装编译依赖

apt-get update && apt-get install -y build-essential cmake pkg-config libssl-dev zlib1g-dev libicu-dev gettext wget openssl curl

实测输出节选(末尾):

Running hooks in /etc/ca-certificates/update.d ...
done.

依赖项说明:build-essential 提供编译器与 make;cmake 是 1.9+ 版本的唯一构建系统;libssl-dev 提供全链路 TLS 能力(必装,否则无 SSL);zlib1g-dev 提供日志压缩;libicu-dev 提供字符集转换(编码支持)。验证依赖就绪:

cmake --version | head -1

实测输出:

cmake version 3.22.1

4.2 下载源码并校验

mkdir -p /usr/local/src && cd /usr/local/src
wget https://znc.in/releases/archive/znc-1.10.3.tar.gz
sha256sum znc-1.10.3.tar.gz

实测输出:

68f3f6641b480c041010c5596e1234043e05c9137eda06233845017603095f5b  znc-1.10.3.tar.gz

⚠️ 下载渠道说明:官方源 znc.in 实测直连可用(2026-10-30);sha256 校验值以官方发布页/你的下载实测为准,务必核对一致再继续。

tar xf znc-1.10.3.tar.gz && cd znc-1.10.3 && mkdir build && cd build

4.3 CMake 配置与编译

cmake -DWANT_SYSTEMD=ON ..

实测输出节选(能力汇总表与收尾):

| SSL       : yes        |
| IPv6      : yes        |
| Async DNS : yes        |
| Perl      : no         |
| Python    : no         |
| Tcl       : no         |
| Cyrus     : no         |
| Charset   : yes        |
| Zlib      : yes        |
| i18n      : no         |
| Argon2    : no         |
+------------------------+

Now you can run 'make' to compile ZNC

-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/znc-1.10.3/build

能力表解读:SSL/IPv6/Charset/Zlib 全部 yes 即为推荐形态;Perl/Python/Tcl 对应模块脚本解释器扩展(modperl/modpython/modtcl),如需 Python/Perl 模块开发再另行安装 python3-dev+swig / libperl-dev 后重新 cmake;-DWANT_SYSTEMD=ON 表示一并生成 systemd 单元文件。

make -j$(nproc)

实测输出节选(末尾):

[100%] Built target msg_after_all
 Use 'make install' to install ZNC to '/usr/local'.

4.4 安装到系统

make install

实测输出节选(末尾):

 You can use '/usr/local/bin/znc --makeconf'
 to generate a config file.

 If you need help with using ZNC, please visit our wiki at:
   http://znc.in
/usr/local/bin/znc --version

实测输出:

ZNC 1.10.3 - https://znc.in
IPv6: yes, SSL: yes, DNS: threads, charset: yes, i18n: no, Argon2: no

版本行与能力行与 cmake 汇总一致,说明安装成功。

4.5 systemd 单元落位

-DWANT_SYSTEMD=ON 会让构建系统尝试把 znc.service 装到系统单元目录,但实测发现其落位路径存在缺陷(构建脚本捕获 pkg-config 输出时把末尾换行一并带入,目录名被写入了一个换行符)。安装后先实查单元文件实际位置:

find / -name "znc.service" -not -path "/proc/*" 2>/dev/null

实测输出:

/usr/local/src/znc-1.10.3/build/znc.service
/usr/lib/systemd/system
/znc.service

第二行实际是一个含换行的异常路径(/usr/lib/systemd/system<换行>/znc.service)。处置:把构建产物中的正式单元手工放置到 /etc/systemd/system/(站点级单元的标准位置),并清理异常路径:

mv "/usr/lib/systemd/system
/znc.service" /etc/systemd/system/znc.service
rmdir "/usr/lib/systemd/system
"
cat /etc/systemd/system/znc.service

实测输出(官方单元模板,@CMAKE_INSTALL_FULL_BINDIR@ 已被替换为实际安装路径):

[Unit]
Description=ZNC, an advanced IRC bouncer
After=network.target

[Service]
ExecStart=/usr/local/bin/znc -f --datadir=/var/lib/znc
User=znc

[Install]
WantedBy=multi-user.target

单元文件解读:-f 前台运行交由 systemd 托管;--datadir=/var/lib/znc 指定数据目录(配置/证书/用户数据都集中在此,便于备份);User=znc 要求存在同名系统用户(下一步创建)。

⚠️ 如果你不使用 WANT_SYSTEMD,也可以完全照抄上面这份单元内容手工创建 /etc/systemd/system/znc.service,效果一致;软件本身的安装不受该单元落位问题影响。

4.6 创建专用系统用户

useradd --system --create-home --home-dir /var/lib/znc --shell /usr/sbin/nologin znc
id znc

实测输出:

uid=999(znc) gid=999(znc) groups=999(znc)

专用用户职责:ZNC 以 znc 身份运行,数据目录 /var/lib/znc 归属该用户,进程被入侵时影响面被限制在数据目录内。

4.7 交互式生成配置(znc --makeconf)

以 znc 用户身份运行 makeconf(--datadir 必须与 systemd 单元一致):

runuser -u znc -- /usr/local/bin/znc --makeconf --datadir=/var/lib/znc

以下按实际交互顺序整理(1.10.3 实测,方括号内为默认值,直接回车取默认;本文输入值加粗标出):

序交互提示(实测原文)本文输入说明
1-- Global settings --—全局设置段
2[ ?? ] Listen on port (1025 to 65534):8145监听端口(Web 与 IRC 客户端共用)
3[ ?? ] Listen using SSL (yes/no) [no]:yes监听启用 SSL(自签证书随后自动生成)
4[ ?? ] Listen using both IPv4 and IPv6 (yes/no) [yes]:no本文实测环境未启用 IPv6,选 no
5-- Admin user settings --—管理员用户段
6[ ?? ] Username (alphanumeric):admin管理用户名
7[ ?? ] Enter password: / [ ?? ] Confirm password:q1w2e3r4(两次)登录口令(输入不回显)
8[ ?? ] Nick [admin]:回车IRC 昵称
9[ ?? ] Alternate nick [admin_]:回车备用昵称
10[ ?? ] Ident [admin]:回车ident
11[ ?? ] Real name (optional):admin真实名字段
12[ ?? ] Bind host (optional):回车出站绑定主机,留空
13[ ?? ] Set up a network? (yes/no) [yes]:yes立即配置一个 IRC 网络
14-- Network settings -- [ ?? ] Name [libera]:local网络名(注意:1.10 系默认值已是 libera,1.8.2 时代为 freenode)
15[ ?? ] Server host (host only):irc.lan上游 IRC 服务器主机名
16[ ?? ] Server uses SSL? (yes/no) [no]:no上游是否 SSL(本文上游内网无证书)
17[ ?? ] Server port (1 to 65535) [6667]:回车上游端口 6667
18[ ?? ] Server password (probably empty):回车上游服务器密码,一般留空
19[ ?? ] Initial channels:#test初始频道
20[ ?? ] Launch ZNC now? (yes/no) [yes]:no交给 systemd 托管,不手动拉起

配置写盘后 makeconf 会打印连接提示(实测原文):

Writing config [/var/lib/znc/configs/znc.conf]...

To connect to this ZNC you need to connect to it as your IRC server
using the port that you supplied.  You have to supply your login info
as the IRC server password like this: user/network:pass.

Try something like this in your IRC client...
/server <znc_server_ip> +8145 admin:<pass>

To manage settings, users and networks, point your web browser to
https://<znc_server_ip>:8145/

若第 3 步选了 SSL,makeconf 会先自动生成自签证书(1.10 起证书 CN 自动取主机名):

runuser -u znc -- /usr/local/bin/znc --makepem --datadir=/var/lib/znc

实测输出:

Writing Pem file [/var/lib/znc/znc.pem]...
openssl x509 -in /var/lib/znc/znc.pem -noout -subject -dates

实测输出:

subject=OU = znc, CN = znc.lan, emailAddress = znc@znc.lan
notBefore=Oct 29 17:59:52 2026 GMT
notAfter=Oct 26 17:59:52 2036 GMT

证书有效期 10 年,CN 自动取自主机名。

4.8 systemd 托管启动与验证

systemctl daemon-reload
systemctl enable znc

实测输出:

Created symlink /etc/systemd/system/multi-user.target.wants/znc.service → /etc/systemd/system/znc.service.
systemctl start znc
systemctl is-active znc

实测输出:

active
systemctl status znc --no-pager -l | head -8

实测输出节选:

● znc.service - ZNC, an advanced IRC bouncer
     Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2026-10-29 17:50:09 UTC; 2s ago
       Docs: man:znc(1)
   Main PID: 5779 (znc)
      Tasks: 3 (limit: 2266)
     Memory: 2.1M
journalctl -u znc --no-pager -n 10 | tail -10

实测输出节选:

Loading global module [webadmin]...
Binding to port [+8145] using ipv4...
Loading user [admin]
Loading network [local]
Loading network module [simple_away]... [/usr/local/lib/znc/simple_away.so]
Adding 1 servers...
Loading user module [chansaver]...
Loading user module [controlpanel]...
Running in foreground [pid: 5779]
ZNC 1.10.3 - https://znc.in

journal 确认:全局 webadmin 已加载、监听 +8145(SSL)、用户与网络按配置装载,进程前台运行由 systemd 看护。

4.9 接入验证:webadmin 与 IRC 客户端

webadmin 验证(服务器本地 curl 实测,浏览器访问同理,自签证书需信任例外):

curl -sk https://127.0.0.1:8145/ | grep -oE '<title>[^<]*|name="[a-z_]+"' | head -6

实测输出:

<title>ZNC - Web Frontend
name="submitted"
name="user"
name="pass"

带凭据登录(表单字段 submitted=1 + 用户名口令):

curl -sk -c /tmp/cj -o /dev/null -w "http_code=%{http_code}\n" -d "submitted=1" -d "user=admin" -d "pass=q1w2e3r4" https://127.0.0.1:8145/login
curl -sk -b /tmp/cj https://127.0.0.1:8145/ | grep -oE 'href="/mods/global/webadmin/[a-z]*">[^<]*' | head -5

实测输出:

http_code=302
href="/mods/global/webadmin/">webadmin
href="/mods/global/webadmin/settings">Global Settings
href="/mods/global/webadmin/edituser">Your Settings
href="/mods/global/webadmin/traffic">Traffic Info
href="/mods/global/webadmin/listusers">Manage Users

302 即登录成功,随后携带会话 Cookie 可访问管理菜单。

IRC 客户端接入验证:用任意 IRC 客户端连接 <服务器IP> +8145,凭据 admin:q1w2e3r4(多网络格式为 admin/local:q1w2e3r4)。本文以 openssl s_client 模拟客户端实测(生产中换成你的 IRC 客户端即可):

{ printf "PASS admin:q1w2e3r4\r\nNICK admin\r\nUSER admin 0 * :admin\r\n"; sleep 6; } | openssl s_client -quiet -connect 127.0.0.1:8145 2>/dev/null | head -12

实测输出(ZNC 已替我们连入上游 irc.lan 并完成注册,输出节选):

:irc.lan 001 admin :Welcome to the Internet Relay Network admin!~admin@client.lan
:irc.lan 002 admin :Your host is irc.lan, running version ngircd-26.1 (x86_64/pc/linux-gnu)
:irc.lan 003 admin :This server has been started Thu Oct 29 2026 at 17:47:03 (UTC)
:irc.lan 004 admin irc.lan ngircd-26.1 abBcCFiIoqrRswx abehiIklmMnoOPqQrRstvVz
:irc.lan 005 admin RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=#&+:10 :are supported on this server
:irc.lan 005 admin CHANNELLEN=50 NICKLEN=9 TOPICLEN=490 AWAYLEN=127 KICKLEN=400 MODES=5 MAXLIST=beI:50 EXCEPTS=e INVEX=I PENALTY FNC :are supported on this server
:irc.lan 251 admin :There are 1 users and 0 services on 1 servers
:irc.lan 254 admin 1 :channels formed
:irc.lan 255 admin :I have 1 users, 0 services and 0 servers
:irc.lan 265 admin 1 1 :Current local users: 1, Max: 1
:irc.lan 266 admin 1 1 :Current global users: 1, Max: 1
:irc.lan 250 admin :Highest connection count: 1 (1 connections received)

收到上游 001-005 注册序列即说明「客户端 → ZNC → 上游 IRC 服务器」链路全通。此时客户端会被自动拉入 makeconf 时配置的 #test 频道:

:admin!~admin@client.lan JOIN :#test
:irc.lan 353 admin = #test :@admin
:irc.lan 366 admin #test :End of /NAMES list.

离线消息回放、多客户端广播等行为级验证与更多管理入口见《ZNC 1.10.3 常用 CLI 命令与工具详解》;配置文件的完整字段解释见《ZNC 1.10.3 配置参数详解》。

本专栏配套文档:《ZNC 1.10.3 介绍与选型指南》、《ZNC 1.10.3 配置参数详解》、《ZNC 1.10.3 常用 CLI 命令与工具详解》。

五、方案 B:apt 仓库安装(Ubuntu 22.04 = 1.8.2)

不追求最新特性、只要仓库包稳妥维护时可用本方案。全程无需编译。

5.1 安装

apt-get update && apt-get install -y znc

实测输出节选(末尾):

Setting up znc-tcl (1.8.2-2ubuntu0.1) ...
Setting up znc-python (1.8.2-2ubuntu0.1) ...
Setting up znc-perl (1.8.2-2ubuntu0.1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...

注意:Ubuntu 会连带安装 znc-perl/znc-python/znc-tcl(解释器模块支持包)。验证版本:

znc --version

实测输出:

ZNC 1.8.2+deb2ubuntu0.1 - https://znc.in
IPv6: yes, SSL: yes, DNS: threads, charset: yes, i18n: yes, build: cmake

5.2 发行版 systemd 单元

仓库包自带单元文件 /lib/systemd/system/znc.service:

systemctl cat znc --no-pager

实测输出:

# /lib/systemd/system/znc.service
[Unit]
Description=ZNC, an advanced IRC bouncer
Documentation=man:znc(1)
After=network-online.target

[Service]
ExecStart=/usr/bin/znc -f --datadir=/var/lib/znc
User=_znc
PrivateTmp=true
NonBlocking=yes
ProtectSystem=full
ProtectHome=no
PrivateDevices=true
LimitNOFILE=1024

[Install]
WantedBy=multi-user.target

与源码版单元的差异:发行版用动态系统用户 _znc(安装时自动创建,实测 getent passwd _znc 返回 _znc:x:105:106::/var/lib/znc:/usr/sbin/nologin),并带 PrivateTmp/ProtectSystem 等加固项;数据目录同为 /var/lib/znc。

5.3 首次启动失败的必然现象与正确顺序

直接启动服务会失败——因为还没有配置文件。这是仓库包用户必经的一课,实测现象:

systemctl start znc
systemctl is-active znc

片刻后实查:

failed
journalctl -u znc --no-pager -n 6 | tail -6

实测输出:

Checking for list of available modules...
Opening config [/var/lib/znc/configs/znc.conf]... [ No such file ]
Restart ZNC with the --makeconf option if you wish to create this config.
Unrecoverable config error.
znc.service: Main process exited, code=exited, status=1/FAILURE
znc.service: Failed with result 'exit-code'.

结论:先 makeconf 生成配置,再启动服务。以 _znc 用户执行(--datadir 与单元文件保持一致):

runuser -u _znc -- /usr/bin/znc --makeconf --datadir=/var/lib/znc

交互问题与第四章 4.7 完全一致(唯一差异:该版本默认网络名提示为 [ ?? ] Name [freenode]:),按同样方式填写(端口 8145、SSL yes、用户 admin/q1w2e3r4、网络指向你的上游 IRC 服务器)。完成后启动并验证:

systemctl enable --now znc

实测输出节选:

Created symlink /etc/systemd/system/multi-user.target.wants/znc.service → /lib/systemd/system/znc.service.
systemctl is-active znc

实测输出:

active
ps -eo user,pid,cmd | grep [z]nc

实测输出:

_znc        1292 /usr/bin/znc -f --datadir=/var/lib/znc

webadmin 与客户端接入验证方法与 4.9 相同(1.8.2 实测同样通过:登录 302 → 管理菜单可见 → 客户端接入收到上游 001)。

六、方案对比与选择建议

维度方案 A:源码编译方案 B:apt 仓库
版本1.10.3(官方最新稳定,2026-09-13)1.8.2-2ubuntu0.1(发行版维护版)
是否需联网需(znc.in 下载源码 + apt 依赖)需(apt 仓库即可)
安装方式cmake + make,安装前缀 /usr/localapt 一条命令
systemd 单元来源官方模板手工落位 /etc/systemd/system/(⚠️ 见 4.5 落位实测)发行版自带 /lib/systemd/system/znc.service
运行用户自建系统用户 znc安装时自动创建 _znc
监听端口自定(本文 8145/SSL)自定(本文 8145/SSL)
优点最新 IRCv3 能力与安全修复;版本自主最快落地;随发行版自动更新
缺点编译耗时数分钟;升级需重新编译版本落后近两年,缺 1.10 系特性
适用生产长期托管 / 需要新特性内网试验 / 仓库版够用即安

选择建议:长期托管 IRC 身份选方案 A(本次实测的 1.10.3 在功能与安全上均有实质收益);临时内网使用或对版本无诉求选方案 B。两方案的数据目录与配置格式完全一致,后续从 1.8.2 迁移到 1.10.3 时保留 /var/lib/znc 即可。

七、配置说明

安装完成后的文件布局(方案 A 与 B 一致,均以 --datadir=/var/lib/znc 为根):

路径作用
/var/lib/znc/configs/znc.conf主配置文件(监听、用户、网络、频道、模块装载)
/var/lib/znc/znc.pem监听端 SSL 证书(makeconf/makepem 生成)
/var/lib/znc/users/每用户数据(moddata、log 模块日志等)
/usr/local/lib/znc/(方案 A)或 /usr/lib/znc/(方案 B)内置模块动态库 *.so
/etc/systemd/system/znc.service(方案 A)或 /lib/systemd/system/znc.service(方案 B)systemd 单元

配置变更三条途径:webadmin 网页、IRC 内 *status/*controlpanel 模块命令、直接编辑 znc.conf 后 Rehash——注意配置文件头部的警告(实测原文):// Do NOT edit this file while ZNC is running!,手工编辑务必配合 Rehash 并避免运行中写盘。逐参数详解见《ZNC 1.10.3 配置参数详解》。

常用运维命令速览(systemd 每次仅操作一个单元):

systemctl restart znc     # 重启(改单元文件后)
systemctl status znc      # 状态概览
journalctl -u znc -f      # 实时日志跟踪

命令全集与管理入口见《ZNC 1.10.3 常用 CLI 命令与工具详解》。

八、常见问题(FAQ)

Q1:systemctl start znc 后服务 failed,日志报 Unrecoverable config error. 首次启动前未生成配置。先执行 runuser -u <运行用户> -- znc --makeconf --datadir=/var/lib/znc(方案 A 用户 znc、方案 B 用户 _znc),再启动。实测日志见 5.3。

Q2:makeconf 时报 [ Unable to bind: Address already in use ] 端口被占用(常见:旧 ZNC 实例仍在运行,或与其他服务撞端口)。确认占用者后更换端口或停止旧实例:ss -ltnp | grep 8145。本文实测中,服务已在跑的情况下重复 makeconf 即复现此报错,换端口即可继续。

Q3:Unable to locate pem file / SSL 监听启动失败 SSL 监听需要 /var/lib/znc/znc.pem。用运行用户执行 znc --makepem --datadir=/var/lib/znc 生成(见 4.7),注意必须加 --datadir——不加时默认写到执行用户家目录的 ~/.znc 下,实测以 root 直接执行会在 /root/.znc/znc.pem 报 Unable to open(目录不存在)。

Q4:以 root 运行 znc 被拒绝 ZNC 拒绝 root 身份运行(安全设计)。务必用专用用户(方案 A 的 znc / 方案 B 的 _znc)执行 makeconf/makepem,服务进程由 systemd 的 User= 指定。

Q5:源码版如何升级版本? 下载新版本源码包到同一构建目录结构,重新 cmake .. && make && make install,然后 systemctl restart znc。数据目录 /var/lib/znc 与配置格式跨版本兼容(1.8.2 → 1.10.3 实测配置结构一致,仅新增默认模块)。

Q6:make uninstall 报错无法卸载? ZNC 的 CMake 工程没有提供 uninstall 目标,实测:make: *** No rule to make target 'uninstall'. Stop.。手动清理即可:systemctl disable --now znc 后删除 /usr/local/bin/znc、/usr/local/lib/znc/、/usr/local/share/znc/ 与数据目录 /var/lib/znc(详见第九章)。

九、卸载与清理

方案 B(apt):

systemctl disable --now znc
apt-get purge -y znc

实测输出节选:

Removing znc (1.8.2-2ubuntu0.1) ...
Purging configuration files for znc (1.8.2-2ubuntu0.1) ...
dpkg -l znc 2>&1 | tail -1

实测输出:

dpkg-query: no packages found matching znc

⚠️ purge 会顺带删除 _znc 用户;实测删除时可能输出 delgroup: '_znc' still has '_znc' as their primary group! 的提示,属于用户主组非空残留,可用 deluser --group _znc 复核清理;数据目录 /var/lib/znc 若仍存在按需删除。

方案 A(源码):先停用服务,再按 4.5 的单元位置删除单元文件并 daemon-reload,然后删除安装产物与数据目录:

systemctl disable --now znc
rm /etc/systemd/system/znc.service && systemctl daemon-reload
rm -f /usr/local/bin/znc
rm -rf /usr/local/lib/znc /usr/local/share/znc
rm -rf /usr/local/src/znc-1.10.3 /usr/local/src/znc-1.10.3.tar.gz
rm -rf /var/lib/znc            # 含全部用户配置与缓冲数据,确认无用后再删
userdel znc 2>/dev/null

十、参考链接