RANCID 3.13 Ubuntu 22.04 安装指南
在 Ubuntu 22.04.5 LTS 上安装 RANCID 3.13:官方仓库在线与 deb 离线两种方案、Git 版本库初始化、router.db/.cloginrc 设备登记、cron 与 systemd timer 双调度方案、端到端采集验证与四条实测排障(2026-10-28 实测)。
RANCID 3.13 Ubuntu 22.04 安装指南
目标:在 Ubuntu 22.04.5 LTS 上从零安装并初始化 RANCID 3.13 配置备份套件:官方仓库在线安装与 deb 离线安装两种方案、版本库初始化(Git)、设备清单与登录凭据配置、cron 与 systemd timer 两种定时调度、端到端采集验证与卸载清理。全文命令与回显均于 2026-10-28 在 Ubuntu 22.04.5 LTS 环境逐条实测。本次实测无真实 Cisco/Juniper 设备,采集链路验证使用本地模拟设备(脚本位于 /opt/data/quzuo/tmp/rancid/sim_ios.py,监听 telnet 23 端口回放固定命令输出),真实设备行为以厂商命令为准。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(jammy),x86_64
- 软件版本:RANCID 3.13-1(Ubuntu 22.04 官方仓库 stable 版本)
- 安装位置:命令
/usr/lib/rancid/bin/(/usr/bin/rancid-run、/usr/bin/clogin为符号链接),配置/etc/rancid/,工作区/var/lib/rancid/,日志/var/log/rancid/ - 版本库类型:Git(
/var/lib/rancid/CVS/<组名>裸仓库) - 运行用户:安装时自动创建的
rancid(uid/gid 999) - 演示组名:
lab;演示设备:router1(模拟 Cisco IOS 2911,telnet 23) - 演示管理账号:
root/admin,密码q1w2e3r4(示例用途)
二、前置条件
安装 RANCID 前确认以下事项:
- 系统可访问 Ubuntu 官方仓库或其国内同步源(在线方案),或已备好 deb 包(离线方案);
- 已规划好设备清单:设备名称能被解析(DNS 或 /etc/hosts)、登录账号与密码、连接方式(telnet/SSH);
- 已决定版本库类型(cvs/svn/git,本篇用 git)与组划分(本篇演示一个组
lab); - 可选:本机已配置邮件投递(postfix/sendmail)——没有也不影响采集,只影响变更邮件通知(见十、常见问题 Q3)。
系统基础依赖(expect、perl 等)由 apt 自动解决,无需手工安装。
三、版本选型说明
| 版本 | 来源 | 说明 |
|---|---|---|
| 3.13-1 | Ubuntu 22.04 官方仓库 | 本篇实测版本;Debian/Ubuntu 打包维护,含 cron 脚手架 |
| 3.13-1 | Ubuntu noble/后续版本仓库 | 同上游版本 |
| 3.14 | 官网 ftp.shrubbery.net 源码包(2026-10-28 查询) | 上游最新稳定版,需自行编译 |
关键差异与选择:发行版仓库的 3.13-1 与上游 3.14 功能面差异很小(详见官网 CHANGES),生产环境优先用仓库版本——补丁与依赖随 apt 管理,且打包层已处理 rancid 用户、目录属主等细节;仅在需要 3.14 新特性或自定义补丁时才考虑官网源码编译。本篇以 3.13-1 为准。
四、在线安装方案(A:Ubuntu 官方仓库)
本方案适用于能访问 Ubuntu 软件源(直连或国内同步源)的服务器,从零到安装完成约 1 分钟。
4.1 更新仓库索引
sudo apt-get update
实测回显(国内同步源,节选):
Get:5 http://mirrors.aliyun.com/ubuntu jammy/main amd64 Packages [1,279 kB]
Fetched 30.1 MB in 4s (7,858 kB/s)
Reading package lists... Done
4.2 安装 RANCID 与 telnet 客户端
RANCID 的登录脚本默认通过系统的 telnet 客户端连接设备(SSH 方式则用 ssh 命令),Ubuntu 最小安装通常不带 telnet,必须一并安装:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y rancid telnet
实测回显(干净系统首次安装,节选首尾):
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
cvs expect iputils-ping libbsd0 libcap2-bin libcbor0.8 libedit2 libfido2-1
libgdbm-compat4 libgdbm6 libmd0 libpam-cap libperl4-corelibs-perl
libperl5.34 libtcl8.6 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6
libxext6 libxmuu1 netbase openssh-client perl perl-modules-5.34 tcl-expect
tcl8.6 tzdata xauth
The following NEW packages will be installed:
cvs expect iputils-ping libbsd0 ... rancid telnet tcl-expect tcl8.6 ...
0 upgraded, 32 newly installed, 0 to remove and 3 not upgraded.
Need to get 14.7 MB of archives.
After this operation, 71.7 MB of additional disk space will be used.
...
Setting up expect (5.45.4-2build1) ...
Setting up rancid (3.13-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
⚠️ 注意:安装脚本会自动创建系统用户
rancid(家目录/var/lib/rancid,登录 shell/bin/bash)。RANCID 的全部脚本禁止以 root 运行,采集必须以rancid用户身份执行(sudo -u rancid ...或su - rancid -c ...)。
4.3 验证安装
rancid -V
dpkg -l rancid | tail -1
ls /etc/rancid/
实测回显:
rancid 3.13
ii rancid 3.13-1 amd64 Really Awesome New Cisco confIg Differ
rancid.conf rancid.types.base rancid.types.conf
三条回显分别确认:版本号 3.13、包状态 ii(已安装)、三份核心配置文件就位。此时 RANCID 尚未可用,还需完成第七节的仓库初始化与设备登记。
五、离线安装方案(B:deb 包)
内网或受限网络环境下,可先在能上网的机器取回 deb 包,再拷贝到目标机安装。RANCID 3.13-1 及其依赖的 deb 可通过 apt-get download 批量下载。
5.1 在联网机上下载 deb 包
mkdir -p ~/rancid-deb && cd ~/rancid-deb
apt-get download rancid
apt-get download telnet
实测回显(在 Ubuntu 22.04.5 上):
Get:1 http://mirrors.aliyun.com/ubuntu jammy/universe amd64 rancid amd64 3.13-1 [200 kB]
Fetched 200 kB in 2s (111 kB/s)
⚠️ 注意:
apt-get download只下载当前包本身,不递归依赖。RANCID 依赖的 expect、libexpect-perl 等 20 余个包需一并下载(可在联网机上用apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances rancid telnet | grep "^\w")全量导出,或直接使用apt-offline工具)。本节演示核心包的安装方式。
5.2 拷贝到目标机并安装
cd ~/rancid-deb
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ./rancid_3.13-1_amd64.deb ./telnet_0.17-44build1_amd64.deb
预期结果:apt 会先安装 ./ 指定包的依赖,再安装这两个本地包,安装完成后的状态与在线方案完全一致(rancid -V 输出 rancid 3.13)。若依赖包未备齐,会报 Error: Unsatisfiable dependency,按报错补齐对应 deb 即可。
5.3 验证安装
rancid -V && dpkg -l rancid | tail -1
预期输出与 4.3 相同:rancid 3.13 与 ii rancid 3.13-1 ...。
六、方案对比与选择建议
| 维度 | 方案 A:官方仓库在线 | 方案 B:deb 离线包 |
|---|---|---|
| 是否需联网 | 需要仓库访问 | 目标机无需联网 |
| 版本 | 仓库当前版本 3.13-1 | 同源 deb,版本一致 |
| 依赖处理 | apt 自动解决 | 需自行备齐全量依赖 deb |
| 升级方式 | apt upgrade | 重新下载新版 deb 安装 |
| 适用场景 | 可联网服务器/VM | 内网隔离、安全审计环境 |
选择建议:能联网选方案 A(省心、依赖全自动);内网隔离环境选方案 B,并务必在联网机上用依赖递归方式备齐全部 deb 包。
七、配置说明
两个安装方案的后续配置完全一致,按以下顺序完成初始化。
7.1 编辑 rancid.conf
sudo vim /etc/rancid/rancid.conf
修改以下三处(其余参数保持默认,逐项含义见《RANCID 3.13 配置参数详解》):
# 版本库类型:cvs | svn | git,此处选 git
RCSSYS=git; export RCSSYS
# 组列表:每组一个独立目录、独立版本库、独立邮件列表
LIST_OF_GROUPS="lab"; export LIST_OF_GROUPS
# 密码过滤:NO | YES | ALL(生产建议 YES 或 ALL,本篇演示用 NO 保留密码以便对照)
FILTER_PWDS=NO; export FILTER_PWDS
逐项说明:RCSSYS 决定 rancid-cvs/rancid-run 使用哪个版本控制系统;LIST_OF_GROUPS 是 RANCID 一切目录与调度的根(有空格分隔多个组,如 "lab core dmz");FILTER_PWDS 控制配置入库时的密码脱敏档位。
7.2 初始化版本库与组目录
sudo -u rancid rancid-cvs
实测回显(节选):
hint: Using 'master' as the name for the initial branch. ...
Initialized empty Git repository in /var/lib/rancid/CVS/lab/
Cloning into '.'...
warning: You appear to have cloned an empty repository.
done.
[master (root-commit) 2a0d2f2] new
1 file changed, 3 insertions(+)
create mode 100644 configs/.gitignore
To /var/lib/rancid/CVS/lab
* [new branch] master -> master
[master d6da75c] new
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 router.db
验证目录骨架:
ls -la /var/lib/rancid/lab/
实测回显:
drwxr-x--- 4 rancid rancid 4096 .git
drwxr-x--- 2 rancid rancid 4096 configs
-rw-r----- 1 rancid rancid 0 router.db
-rw-r----- 1 rancid rancid 0 routers.all
-rw-r----- 1 rancid rancid 0 routers.down
-rw-r----- 1 rancid rancid 0 routers.up
说明:rancid-cvs 幂等可重复执行;组目录中的 routers.up/down/all 由采集过程自动维护,无需手工编辑。新增组时在 LIST_OF_GROUPS 补名字后再跑一次 rancid-cvs 即可。
7.3 登记设备(router.db)
每行一台设备,分号分隔三字段:设备名;设备类型;状态(设备名必须能解析;类型取自 /etc/rancid/rancid.types.base 中 80 余个类型之一,如 cisco、juniper;状态 up/down):
echo "router1;cisco;up" | sudo tee -a /var/lib/rancid/lab/router.db
sudo chown rancid:rancid /var/lib/rancid/lab/router.db
实测环境无真实 Cisco 设备,用本地模拟设备替代真实设备(脚本位于 /opt/data/quzuo/tmp/rancid/sim_ios.py,监听本机 23 端口,按 Cisco IOS 2911 回放 show version、show running-config 等固定输出,真实设备行为以厂商命令为准)。让设备名 router1 解析到本机:
echo "127.0.0.1 router1" | sudo tee -a /etc/hosts
7.4 配置登录凭据(.cloginrc)
该文件是所有 *login 脚本的凭据库,权限必须 0600:
sudo tee /var/lib/rancid/.cloginrc > /dev/null <<'EOF'
add user router1 {admin}
add password router1 {q1w2e3r4} {q1w2e3r4}
add method router1 {telnet}
EOF
sudo chown rancid:rancid /var/lib/rancid/.cloginrc
sudo chmod 600 /var/lib/rancid/.cloginrc
逐项说明:add user 登录用户名;add password 后两个花括号值分别是 VTY 密码与 enable 密码(两值相同时 Cisco 常见配置);add method 连接方式(telnet 或 ssh,SSH 时还可加 add cyphertype/add sshcmd)。凭据按"设备名 glob"从上到下匹配,* 可做兜底规则。
7.5 首轮采集验证
先单测登录脚本,确认凭据与连通性:
sudo -u rancid clogin -c "show version" router1
实测回显(本地模拟设备,节选):
router1
spawn telnet -K router1
Trying 127.0.0.1...
Connected to router1.
Escape character is '^]'.
User Access Verification
Username: admin
Password:
router1>enable
Password:
router1#
router1#terminal length 0
router1#terminal width 132
router1#show version
Cisco IOS Software, C2900 Software (C2900-UNIVERSALK9-M), Version 15.2(4)M7, RELEASE SOFTWARE (fc1)
...
Configuration register is 0x2102
router1#exit
再跑完整采集:
sudo -u rancid rancid-run
实测回显(日志文件 /var/log/rancid/lab.20261028.001725,节选):
starting: Wed Oct 28 00:17:25 UTC 2026
Trying to get all of the configs.
All routers successfully completed.
[master 0551223] new router
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 configs/router1
Added router1
ending: Wed Oct 28 00:17:32 UTC 2026
验证配置落盘与版本历史:
head -8 /var/lib/rancid/lab/configs/router1
sudo -u rancid git -C /var/lib/rancid/lab log --oneline | head -5
实测回显:
!RANCID-CONTENT-TYPE: cisco
!
!Chassis type: CISCO2911/K9
!
!Memory: main 487424K/36864K
!Memory: nvram 255K
!
!Processor ID: FTX1524ABCDE
0551223 new router
d6da75c new
2a0d2f2 new
采集成功的判定标准:日志含 All routers successfully completed.、configs/<设备名> 生成且首行是 !RANCID-CONTENT-TYPE: cisco、Git 历史出现 new router 提交。
八、定时调度
RANCID 是一次性批处理工具,靠调度器周期执行。以下两种方案二选一即可。
8.1 方案一:cron(包自带脚手架)
Debian/Ubuntu 包自带 /etc/cron.d/rancid,默认整段注释,取消注释即可启用每小时采集:
sudo vim /etc/cron.d/rancid
将文件改为(取消两行注释):
# run config differ hourly
1 * * * * rancid /usr/bin/rancid-run
# clean out config differ logs
50 23 * * * rancid find /var/log/rancid -type f -mtime +2 -exec rm {} \;
逐项说明:第一行在每小时的第 1 分钟以 rancid 用户跑一次全组采集;第二行每晚 23:50 清理 2 天前的采集日志,防止日志无限增长。修改后无需重启 cron(cron 每分钟重读 /etc/cron.d),验证服务在运行即可:
systemctl is-active cron
实测回显:
active
8.2 方案二:systemd timer
需要更精确的调度语义(如 RandomizedDelaySec 抖动、错峰、Persistent 补跑)时,用 systemd timer。写入两个单元文件:
sudo tee /etc/systemd/system/rancid-run.service > /dev/null <<'EOF'
[Unit]
Description=RANCID network device config collection
After=network-online.target
[Service]
Type=oneshot
User=rancid
ExecStart=/usr/bin/rancid-run
EOF
sudo tee /etc/systemd/system/rancid-run.timer > /dev/null <<'EOF'
[Unit]
Description=Hourly RANCID config collection
[Timer]
OnCalendar=hourly
RandomizedDelaySec=300
Persistent=true
[Install]
WantedBy=timers.target
EOF
启用并验证:
sudo systemctl daemon-reload
sudo systemctl enable --now rancid-run.timer
systemctl list-timers rancid-run.timer --no-pager
实测回显:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2026-10-28 01:00:09 UTC 35min left n/a n/a rancid-run.timer rancid-run.service
1 timers listed.
手动触发一次以验证链路(结果立即产生):
sudo systemctl start rancid-run.service
systemctl show rancid-run.service -p Result,ExecMainStatus
ls -t /var/log/rancid/ | head -1
实测回显:
Result=success
ExecMainStatus=0
lab.20261028.002410
⚠️ 注意:方案一与方案二不要同时启用,否则同一时刻可能出现两轮采集;rancid-run 自带
.run.lock锁文件可防并发,但会造成其中一轮直接退出。
九、常见问题(FAQ)
Q1:clogin 报 Error: telnet failed: couldn't execute "telnet": no such file or directory?
系统缺少 telnet 客户端。RANCID 的登录脚本靠它连接设备,安装并重试:
sudo apt-get install -y telnet
实测:安装包 telnet (0.17-44build1) 后 clogin 即可正常 spawn(spawn telnet -K router1)。
Q2:rancid-run 报 /usr/bin/rancid-run: 149: cannot create /var/lib/rancid/logs/lab.20261028.001705: Permission denied?
日志目录 /var/lib/rancid/logs 是指向 /var/log/rancid 的符号链接,该目录默认属主为 root,rancid 用户写不进去。修正属主后重跑:
sudo chown rancid:adm /var/log/rancid
实测:修正后 rancid-run 正常在 /var/log/rancid/ 生成 lab.<时间戳> 日志文件。这是 Debian/Ubuntu 打包的一个已知坑,所有新装环境都会遇到。
Q3:日志出现 /usr/sbin/sendmail: not found,影响采集吗?
不影响采集与版本库提交(配置照常入库),只是 diff 邮件发不出去。需要邮件通知时安装一个 MTA(如 postfix),或将邮件目标指向已有的内网邮件主机:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y postfix
实测:安装 postfix 并 systemctl start postfix 后,触发一次设备配置变更再采集,本地收到主题为 lab router config diffs 的邮件,正文为 git diff 格式的配置变更(+ ip route 192.168.20.0 255.255.255.0 192.168.10.2),投递记录在 /var/mail/rancid。
Q4:以 root 运行报 Do not run /usr/bin/rancid-run as root!?
RANCID 全家桶脚本禁止 root 运行(防止凭据文件与版本库属主混乱)。统一用 sudo -u rancid <命令> 或 su - rancid -c '<命令>' 执行。
Q5:设备明明在线,日志却报某台设备超时/失败?
按顺序排查:① sudo -u rancid clogin -c "show version" <设备名> 单测登录,报错会具体到账号或提示符;② router.db 的设备类型是否写对(cisco 设备写成其他类型会用错命令集);③ .cloginrc 的 glob 是否命中该设备名;④ 设备端 vty 会话数是否耗尽。定位到具体设备后可用 rancid-run -r <设备名> 单独重跑(不重跑全组)。
十、升级与卸载
升级:Ubuntu 仓库发布新版后 sudo apt-get update && sudo apt-get install --only-upgrade rancid;版本库与 router.db/.cloginrc 都在 /var/lib/rancid 与 /var/lib/rancid/.cloginrc,升级不触碰这些数据,跨大版本升级前建议先备份 /var/lib/rancid 整个目录。
卸载与清理(保留配置数据时先备份):
sudo systemctl disable --now rancid-run.timer 2>/dev/null # 用了 timer 方案才需要
sudo apt-get purge -y rancid
sudo rm -rf /var/lib/rancid /var/log/rancid /etc/rancid # purge 不一定清理数据目录,手工复核
说明:apt-get purge 会删除包文件,但 /var/lib/rancid(版本库与采集配置)是运行期产生的数据,卸载后需手工确认删除;/etc/cron.d/rancid 属包文件,purge 时自动移除。
十一、参考链接
- RANCID 官方网站:https://www.shrubbery.net/rancid/
- RANCID 3.14 源码包(FTP):ftp://ftp.shrubbery.net/pub/rancid/rancid-3.14.tar.gz
- Ubuntu 软件包页(rancid):https://packages.ubuntu.com/jammy/rancid
- Postfix 官方网站:https://www.postfix.org/
本系列其他篇目:
- 《RANCID 介绍与选型指南》——定位、架构与同类工具量化对比
- 《RANCID 3.13 配置参数详解》——rancid.conf 24 参数、router.db、.cloginrc
- 《RANCID 3.13 常用 CLI 与运维命令详解》——采集/登录/版本库/调度/排障命令面