Containerlab 作为适用于 amd64 和 arm64 架构的 Linux deb/rpm/apk 包分发,可以在几秒钟内安装在任何类似 Debian 或 RHEL 的发行版上。
先决条件#
要使 containerlab 工具成功运行,必须满足以下要求:
- 用户应具有运行 containerlab 的权限。
sudo
- 安装了 Linux 服务器/VM1 和 Docker。
- 加载无法从容器注册表下载的容器映像(例如 Nokia SR Linux、Arista cEOS)。如果本地不存在镜像,Containerlab 将尝试在运行时拉取镜像。
快速设置#
开始使用 containerlab 的最简单方法是使用快速安装脚本,该脚本一次性安装以下所有组件(或允许单独安装它们):
- docker (docker-ce), docker compose
- Containerlab(使用软件包存储库)
gh
CLI 工具
该脚本已在以下作系统上进行了测试:
- Ubuntu 20.04、22.04、23.10、24.04
- Debian 11 版、12 版
- 红帽企业 Linux 9
- CentOS Stream 9 版本
- Fedora Server 40(应该可以在 Fedora 的其他变体上使用)
- Rocky Linux 9.3、8.8(应该可以在任何 9.x 和 8.x 版本上运行)
要一次安装所有组件,请在任何支持的作系统上运行以下命令:
默认情况下,这也会在系统上配置 sshd 以增加最大身份验证尝试次数,这样未知密钥就不会锁定 ssh 尝试。可以通过在运行上面所示的命令之前将环境变量 “SETUP_SSHD” 设置为 “false” 来关闭此行为。可以使用如下所示的命令设置和导出环境变量。
要完成安装并启用 sudo-less 命令执行,请运行或注销并重新登录。docker
newgrp docker
Containerlab 还设置为无 sudo作,执行快速安装脚本的用户会自动获得对特权命令的访问权限。有关更多信息,请参阅 Sudo-less作。
要安装单个组件,请将函数名称指定为脚本的参数。例如,要仅安装 :docker
如果你没有自己的 shell 配置,并且想要一个稍微好一点的 bash PS1 提示符,你也可以运行这个脚本:
注销并重新登录以查看新的两行提示:
安装脚本#
Containerlab 可以使用安装脚本进行安装,该脚本会检测作系统类型并安装相关软件包:
注意:
Containerlab 通过 deb/rpm 包分发,因此只有类似 Debian 和 RHEL 的发行版才能利用包安装。
其他系统可以遵循手动安装过程。
包管理器#
可以通过公共 APT/YUM 存储库安装官方 containerlab 版本。
手动安装软件包
软件包安装程序会将二进制文件放入目录中并创建符号链接。符号链接允许用户在使用 containerlab: 时节省键入时间。Containerlab 还设置为无 sudo作,并且当前用户(即使通过 调用包管理器)会自动被授予对特权 Containerlab 命令的访问权限。
有关更多信息,请参阅 Sudo-less作。containerlab
/usr/bin
/usr/bin/clab -> /usr/bin/containerlab
clab <command>
sudo
窗户#
Containerlab 在由 Windows Subsystem Linux(又名 WSL)提供支持的 Windows 上运行,您可以直接或在 Devcontainer 中运行 Containerlab。打开 Windows 上的 Containerlab 文档了解更多详细信息。
苹果 macOS#
在 ARM(M1/M2/M3/etc)和 Intel 芯片组上都可以在 macOS 上运行 containerlab。长期以来,我们对 Mac 上的 M 芯片组有很多警告,但随着 ARM64 原生 NOS (如 Nokia SR Linux 和 Arista cEOS)的推出,由基于 x86_64 的 NOS 的 Rosetta 仿真提供支持,现在可以在基于 ARM 的 Mac 上运行 containerlab。
由于我们想详细分享在 macOS 上运行 containerlab 的经验,因此我们创建了一个单独的 – macOS 上的 Containerlab – 指南。
容器#
Containerlab 还提供容器包装。最新的 containerlab 版本可以通过以下方式提取:
要选择从版本 0.19.0 开始的任何已发布版本,请使用版本号作为标签,例如,docker pull ghcr.io/srl-labs/clab:0.19.0
由于 containerlab 本身部署容器并创建 veth 对,因此其运行指令稍微复杂一些,但它仍然是一个可复制粘贴的命令。
例如,如果您的 lab 文件包含在当前工作目录中 – – ,那么您可以按如下方式启动 containerlab 容器:$(pwd)
docker run --rm -it --privileged \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/run/netns:/var/run/netns \
-v /etc/hosts:/etc/hosts \
-v /var/lib/docker/containers:/var/lib/docker/containers \
--pid="host" \
-v $(pwd):$(pwd) \
-w $(pwd) \
ghcr.io/srl-labs/clab bash
在启动的容器中,您可以使用相同的命令来管理实验室。containerlab deploy/destroy/inspect
注意:
Containerlab 的 container 命令本身就是 ,因此您可以在不调用 shell 的情况下部署实验室,例如:containerlab
手动安装#
如果 linux 发行版无法安装 deb/rpm 包,可以从存档中安装 containerlab:
# get the latest available tag
LATEST=$(curl -s https://github.com/srl-labs/containerlab/releases/latest | \
sed -e 's/.*tag\/v\(.*\)\".*//')
# download tar.gz archive
curl -L -o /tmp/clab.tar.gz "https://github.com/srl-labs/containerlab/releases/download/v${LATEST}/containerlab_${LATEST}_Linux_amd64.tar.gz"
# create containerlab directory
mkdir -p /etc/containerlab
# extract downloaded archive into the containerlab directory
tar -zxvf /tmp/clab.tar.gz -C /etc/containerlab
# (optional) move containerlab binary somewhere in the $PATH
mv /etc/containerlab/containerlab /usr/bin && chmod a+x /usr/bin/containerlab
升级#
要升级到最新的可用版本,请发出以下命令2:containerlab
此命令将获取安装脚本并将该工具升级到最新版本。如果 GitHub 速率限制,请向 upgrade 命令提供 env var 和个人 GitHub 令牌。GITHUB_TOKEN
或者,如果按照 Package managers 部分的说明添加了 containerlab 存储库,则使用 leverage / utilities。apt
yum
从源#
要从源代码构建 containerlab:
要从源代码构建 containerlab,请在其根目录下克隆存储库和问题。go build
卸载#
要在通过安装脚本或软件包安装 containerlab 时卸载它:
SELinux#
当 SELinux 设置为强制模式时,containerlab 二进制文件可能无法执行并出现错误。这可能是因为 containerlab 二进制文件是使用 upx 压缩的,而 selinux 默认阻止它被解压缩。Segmentation fault (core dumped)
要解决此问题,请执行以下作:
sudo semanage fcontext -a -t textrel_shlib_t $(which containerlab)
sudo restorecon $(which containerlab)
或更全面的:
无 Sudo作#
Containerlab 需要 root 权限才能执行某些作。
为了简化使用,默认情况下,Containerlab 安装为 SUID 二进制文件3,以允许无 sudo作。
为手动构建/安装的 Containerlab 启用 sudo-less作
此外,为了防止未经授权的用户通过 Containerlab 获得 root 级权限,特权 Containerlab 命令的使用在 Unix 用户组成员资格检查之后进行控制。特权 Containerlab 命令只能由属于该组的用户执行。
默认情况下(从版本开始),Unix 组是在 Containerlab 的初始安装期间创建的,并且安装 Containerlab 的用户会自动添加到此用户组。还需要访问特权 Containerlab 命令的其他用户也应添加到此用户组。clab_admins
0.63.0
clab_admins
不属于此组的用户仍可以执行非特权命令,例如:
- exec (需要组成员资格)
docker
- 生成
- 图
- 检查 (需要组成员身份)
docker
- 救
- 版本 (无升级)
非特权命令以运行 Containerlab 命令的用户身份执行。特权命令在运行时以 root 身份执行。
仅当默认容器运行时 Docker 时,才支持非特权命令执行。
要允许主机上的任何用户使用所有 Containerlab 命令,只需删除 Unix 组即可。clab_admins
危险
与组非常相似,该组的任何用户都可以有效地获得运行 Containerlab 的系统的 root 级权限。docker
clab_admins
如果此组不存在并且二进制文件仍设置了 SUID 位,则任何可以运行 Containerlab 的用户都应被视为具有 root 权限。
要禁用 sudo-less作,只需在 Containerlab 二进制文件上取消设置 SUID 标志:
只要空文件存在,Containerlab 安装程序就不会尝试设置 SUID 标志或创建组。
此文件是在首次安装 Containerlab 或更高版本期间自动创建的。clab_admins
/etc/containerlab/suid_setup_done
0.63.0
没有回复内容