Containerlab部署安装PNETLab模拟器-pnet模拟器-仿真模拟器-pnet-pnetlabcontainerlab模拟器论坛PNETLab模拟器-pnet模拟器-仿真模拟器-pnet-pnetlab模拟器PNETLab模拟器-pnet模拟器-仿真模拟器-pnet-pnetlabPNETLAB模拟器

Containerlab部署安装

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(使用软件包存储库)
  • ghCLI 工具

该脚本已在以下作系统上进行了测试:

  • 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 版本上运行)

要一次安装所有组件,请在任何支持的作系统上运行以下命令:

curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"

默认情况下,这也会在系统上配置 sshd 以增加最大身份验证尝试次数,这样未知密钥就不会锁定 ssh 尝试。可以通过在运行上面所示的命令之前将环境变量 “SETUP_SSHD” 设置为 “false” 来关闭此行为。可以使用如下所示的命令设置和导出环境变量。

export SETUP_SSHD="false"

要完成安装并启用 sudo-less 命令执行,请运行或注销并重新登录。dockernewgrp docker

Containerlab 还设置为无 sudo作,执行快速安装脚本的用户会自动获得对特权命令的访问权限。有关更多信息,请参阅 Sudo-less作

要安装单个组件,请将函数名称指定为脚本的参数。例如,要仅安装 :docker

curl -sL https://containerlab.dev/setup | sudo -E bash -s "install-docker"

如果你没有自己的 shell 配置,并且想要一个稍微好一点的 bash PS1 提示符,你也可以运行这个脚本:

curl -sL https://containerlab.dev/setup | sudo -E bash -s "setup-bash-prompt"

注销并重新登录以查看新的两行提示:

[*][clab][~]
└──>

安装脚本#

Containerlab 可以使用安装脚本进行安装,该脚本会检测作系统类型并安装相关软件包:

注意:

Containerlab 通过 deb/rpm 包分发,因此只有类似 Debian 和 RHEL 的发行版才能利用包安装。
其他系统可以遵循手动安装过程。

下载并安装最新版本(可能需要):sudo

bash -c "$(curl -sL https://get.containerlab.dev)"

包管理器#

可以通过公共 APT/YUM 存储库安装官方 containerlab 版本。

echo "deb [trusted=yes] https://netdevops.fury.site/apt/ /" | \
sudo tee -a /etc/apt/sources.list.d/netdevops.list

sudo apt update && sudo apt install containerlab
手动安装软件包
软件包安装程序会将二进制文件放入目录中并创建符号链接。符号链接允许用户在使用 containerlab: 时节省键入时间。Containerlab 还设置为无 sudo作,并且当前用户(即使通过 调用包管理器)会自动被授予对特权 Containerlab 命令的访问权限。
有关更多信息,请参阅 Sudo-less作
containerlab/usr/bin/usr/bin/clab -> /usr/bin/containerlabclab <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 版本可以通过以下方式提取:

docker pull ghcr.io/srl-labs/clab

要选择从版本 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

docker run --rm -it --privileged \
# <run options omitted>
-w $(pwd) \
ghcr.io/srl-labs/clab deploy -t somelab.clab.yml

手动安装#

如果 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

升级#

要升级到最新的可用版本,请发出以下命令2containerlab

sudo -E containerlab version upgrade

此命令将获取安装脚本并将该工具升级到最新版本。如果 GitHub 速率限制,请向 upgrade 命令提供 env var 和个人 GitHub 令牌。GITHUB_TOKEN

或者,如果按照 Package managers 部分的说明添加了 containerlab 存储库,则使用 leverage / utilities。aptyum

从源#

要从源代码构建 containerlab:

要从源代码构建 containerlab,请在其根目录下克隆存储库和问题。go build

卸载#

要在通过安装脚本或软件包安装 containerlab 时卸载它:

apt remove 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 setsebool -P selinuxuser_execmod 1

无 Sudo作#

Containerlab 需要 root 权限才能执行某些作。

为了简化使用,默认情况下,Containerlab 安装为 SUID 二进制文件3,以允许无 sudo作。

为手动构建/安装的 Containerlab 启用 sudo-less作

此外,为了防止未经授权的用户通过 Containerlab 获得 root 级权限,特权 Containerlab 命令的使用在 Unix 用户组成员资格检查之后进行控制。特权 Containerlab 命令只能由属于该组的用户执行。
默认情况下(从版本开始),Unix 组是在 Containerlab 的初始安装期间创建的,并且安装 Containerlab 的用户会自动添加到此用户组。还需要访问特权 Containerlab 命令的其他用户也应添加到此用户组。
clab_admins0.63.0clab_admins

属于此组的用户仍可以执行非特权命令,例如:

  • exec (需要组成员资格)docker
  • 生成
  • 检查 (需要组成员身份)docker
  • 版本 (无升级)

非特权命令以运行 Containerlab 命令的用户身份执行。特权命令在运行时以 root 身份执行。
仅当默认容器运行时 Docker 时,才支持非特权命令执行。

要允许主机上的任何用户使用所有 Containerlab 命令,只需删除 Unix 组即可。clab_admins

危险

与组非常相似,该组的任何用户都可以有效地获得运行 Containerlab 的系统的 root 级权限。dockerclab_admins

如果此组不存在并且二进制文件仍设置了 SUID 位,则任何可以运行 Containerlab 的用户都应被视为具有 root 权限。

禁用 sudo-less作,只需在 Containerlab 二进制文件上取消设置 SUID 标志:

sudo chmod u-s `which containerlab`

只要空文件存在,Containerlab 安装程序就不会尝试设置 SUID 标志或创建组。
此文件是在首次安装 Containerlab 或更高版本期间自动创建的。
clab_admins/etc/containerlab/suid_setup_done0.63.0


  1. 大多数容器化 NOS 需要 >1 个 vCPU。RAM 大小取决于实验室大小。不应在内核中禁用 IPv6。

  2. 仅当从软件包安装时可用

  3. SUID 或 “set user ID” 是可以在 Unix 系统上设置的特殊权限位。SUID 二进制文件以文件所有者身份运行,而不是以执行用户身份运行。

参考:翻译来自官方部署安装文档 点击前往

请登录后发表评论

    没有回复内容