以下の内容はhttps://usage-automate.hatenablog.com/entry/2025/04/05/144345より取得しました。


ContainerLabでSRLinuxを起動する(Almalinux × Podman)

概要

ContainerLabはネットワークOSをコンテナ化し、それらをユーザー定義の柔軟なトポロジーで接続して仮想ラボ環境を構築するためのツールです。

今回はWSL2上のAlmaLinuxで動かしてみたので内容を残したいと思います。

環境

WSL2上でAlmaLinux 9.38(Shamrock Pampas Cat)を起動
コンテナの実行環境はPodmanを利用します(事前にインストール済み)

SELinuxは無効化しています

手順

  1. インストール さっそくインストールを実施します。
    公式ドキュメントを確認 containerlab.dev

セットアップ用のスクリプトを実行してみますがエラーが出てしまいました。 OSはUbuntu/Debian/REHL/CentOS/Rockyのみしかサポートしてないようです。

$ curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"
This is not a supported OS. (Debian, Ubuntu, Fedora, Rocky, CentOS, RHEL)

気を取り直してPackage managerからインストールを試みます。
リポジトリを追加し、gpgcheckをオフにしてからdnf installで取得します。

$ sudo dnf config-manager -y --add-repo "https://netdevops.fury.site/yum/" && \
echo "gpgcheck=0" | sudo tee -a /etc/yum.repos.d/netdevops.fury.site_yum_.repo

$ sudo dnf install containerlab
AlmaLinux 9 - AppStream                                                                                   6.1 kB/s | 4.2 kB     00:00    
AlmaLinux 9 - AppStream                                                                                   9.1 MB/s |  15 MB     00:01    
AlmaLinux 9 - BaseOS                                                                                      5.7 kB/s | 3.8 kB     00:00    
AlmaLinux 9 - BaseOS                                                                                      7.5 MB/s |  17 MB     00:02    
AlmaLinux 9 - Extras                                                                                      4.7 kB/s | 3.3 kB     00:00    
AlmaLinux 9 - Extras                                                                                       18 kB/s |  13 kB     00:00    
cuda-rhel9-x86_64                                                                                          42 kB/s | 3.5 kB     00:00    
cuda-rhel9-x86_64                                                                                         1.7 MB/s | 2.6 MB     00:01    
Extra Packages for Enterprise Linux 9 - x86_64                                                             21 kB/s |  16 kB     00:00    
Extra Packages for Enterprise Linux 9 - x86_64                                                            9.7 MB/s |  23 MB     00:02    
created by dnf config-manager from https://netdevops.fury.site/yum/                                       128 kB/s | 246 kB     00:01    
Dependencies resolved.
==========================================================================================================================================
 Package                         Architecture              Version                      Repository                                   Size
==========================================================================================================================================
Installing:
 containerlab                    x86_64                    0.67.0-1                     netdevops.fury.site_yum_                     17 M

Transaction Summary
==========================================================================================================================================
Install  1 Package

Total download size: 17 M
Installed size: 46 M
Is this ok [y/N]: y
Downloading Packages:
containerlab_0.67.0_linux_amd64.rpm                                                                       2.7 MB/s |  17 MB     00:06    
------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                     2.7 MB/s |  17 MB     00:06     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                  1/1 
  Installing       : containerlab-0.67.0-1.x86_64                                                                                     1/1 
warning: Unable to get systemd shutdown inhibition lock: Could not activate remote peer.

  Running scriptlet: containerlab-0.67.0-1.x86_64                                                                                     1/1 
groupadd: group 'clab_admins' already exists
Please run the command 'sudo usermod -aG clab_admins <insert your username here> && newgrp clab_admins' to ensure that you are part of the Container admin group. You can check this by running 'groups'.

  Verifying        : containerlab-0.67.0-1.x86_64                                                                                     1/1 

Installed:
  containerlab-0.67.0-1.x86_64                                                                                                            

Complete!

無事にインストールが完了しました。

containerlabコマンドが利用可能になりました。
エイリアスとしてclabも登録されていますので、clabでも起動が可能です。

$ clab
deploy container based lab environments with a user-defined interconnections

Usage:
  containerlab [command]

Aliases:
  containerlab, clab

Available Commands:
  completion  generate completion script
  config      configure a lab
  deploy      deploy a lab
  destroy     destroy a lab
  exec        execute a command on one or multiple containers
  generate    generate a Clos topology file, based on provided flags
  graph       generate a topology graph
  help        Help about any command
  inspect     inspect lab details
  redeploy    destroy and redeploy a lab
  save        save containers configuration
  tools       various tools your lab might need
  version     Show containerlab version or upgrade

Flags:
  -d, --debug count        enable debug mode
  -h, --help               help for containerlab
      --log-level string   logging level; one of [trace, debug, info, warning, error, fatal] (default "info")
      --name string        lab name
  -r, --runtime string     container runtime
      --timeout duration   timeout for external API requests (e.g. container runtimes), e.g: 30s, 1m, 2m30s (default 2m0s)
  -t, --topo string        path to the topology file
      --vars string        path to the topology template variables file

Use "containerlab [command] --help" for more information about a command.

2. トポロジーファイルの作成

続いてcontainerlabでデプロイする環境を登録するトポロジーファイルを作成します。 ファイルは.clab.yml or .clab.yamlで作成します。中身はYAMLファイルです。
今回はタイトル通りにSRLinuxで構築します。
トポロジーで定義したイメージファイルが存在しない場合、起動時にpullする動きになります。

name: demo

mgmt:
  network: podman_clab_mgmt
  ipv4-subnet: 172.20.1.0/24
  ipv4-gw: 172.20.1.254

topology:
  kinds:
    nokia_srlinux:
      image: ghcr.io/nokia/srlinux:25.3.1
  nodes:
    leaf1:
      kind: nokia_srlinux
      type: ixrd2l
      mgmt-ipv4: 172.20.1.2

mgmtはマネジメントネットワークでホストからアクセスする際のネットワークになります。
指定をしない場合、172.20.20.0/24で作成されます。

ipv4-gwを指定しない場合、サブネットで利用可能な最初のIPが自動的にアサインされるようです。

typeはノードがエミュレートするハードウェアバリアントを定義できるものです。
SRLinuxで定義できるtypeは以下で確認ができます。今回はデフォルト値のixrd2を選択しました。

containerlab.dev

※typeはCiscoのIOLなどはL2かRTかの選択などにも利用されるようでノードにより使い方は様々なようです。

3. ラボの起動

clab deployコマンドでラボを起動します。
-tのオプションで作成したトポロジーファイルを指定することも可能です。
省略した場合、カレントディレクトリの中から*.clab.(yaml|yaml)のファイルが選択されます

$ clab deploy -t topo.clab.yml 
20:45:53 INFO Containerlab started version=0.67.0
20:45:53 INFO Parsing & checking topology file=topo.clab.yml
Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

実行が失敗しました、ContainerLabのデフォルトのコンテナ実行エンジンはDockerのためPodmanで動かすことをオプションで指定する必要があります。 コマンド起動時に--runtime or -rpodmanを与えるか、環境変数CLAB_RUNTIMEpodmanを定義することで 指定が可能です。

$ clab deploy -t topo.clab.yml -r podman
20:46:17 INFO Containerlab started version=0.67.0
20:46:17 INFO Parsing & checking topology file=topo.clab.yml
Error: unable to connect to Podman socket: Get "http://d/v5.4.0/libpod/_ping": dial unix /run//podman/podman.sock: connect: no such file or directory

ランタイムを指定しても失敗してしまいました。
Podmanで動かす場合は、Podmanサービスを有効にする必要があるようです。

containerlab.dev

$ sudo systemctl enable podman
Created symlink /etc/systemd/system/default.target.wants/podman.service → /usr/lib/systemd/system/podman.service.
$ sudo systemctl start podman

再度起動

$ clab deploy -t topo.clab.yml -r podman
20:47:34 INFO Containerlab started version=0.67.0
20:47:34 INFO Parsing & checking topology file=topo.clab.yml
Trying to pull ghcr.io/nokia/srlinux:25.3.1...
Getting image source signatures
Copying blob sha256:006a9eaa09f95444739324470ae5cb3f613568a540c349c41d45d6093404c6ea
Copying config sha256:afd4d4a4aee01b70439d89631eb313a8012c3844145f8be7531d696be263936b
Writing manifest to image destination
20:48:15 INFO Creating lab directory path=/home/usaen/clab/clab-demo
20:48:15 INFO Running postdeploy actions kind=nokia_srlinux node=leaf1
20:48:27 INFO Adding host entries path=/etc/hosts
20:48:27 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-demo.conf
╭─────────────────┬──────────────────────────────┬─────────┬────────────────╮
│       Name      │          Kind/Image          │  State  │ IPv4/6 Address │
├─────────────────┼──────────────────────────────┼─────────┼────────────────┤
│ clab-demo-leaf1 │ nokia_srlinux                │ running │ 172.20.0.1     │
│                 │ ghcr.io/nokia/srlinux:25.3.1 │         │ N/A            │
╰─────────────────┴──────────────────────────────┴─────────┴────────────────╯

無事起動しました。
コンテナイメージは、rootのpodman imagesに格納されるようでした。

実行が完了するとclab-トポロジーネームディレクトリが作成されます。
中にはAnsibleインベントリやNornirインベントリなどが作成されます。

起動時に-dオプションをつけると詳細なログの出力が可能です。

アクセス確認

clab inspectコマンドでラボの状態を確認可能です。 デフォルトでは、カレントディレクトリのラボの状態が表示されます。 -aオプションをつけることで、起動中のすべてラボの状態を見ることも可能です。

$ clab inspect -a -r podman
╭───────────────┬──────────┬─────────────────┬──────────────────────────────┬─────────┬────────────────╮
│    Topology   │ Lab Name │       Name      │          Kind/Image          │  State  │ IPv4/6 Address │
├───────────────┼──────────┼─────────────────┼──────────────────────────────┼─────────┼────────────────┤
│ topo.clab.yml │ demo     │ clab-demo-leaf1 │ nokia_srlinux                │ running │ 172.20.0.1     │
│               │          │                 │ ghcr.io/nokia/srlinux:25.3.1 │         │ N/A            │
╰───────────────┴──────────┴─────────────────┴──────────────────────────────┴─────────┴────────────────╯

podman exec -it コンテナ名 sr_cliでコンソールアクセスするが可能です。

$ sudo podman ps
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                    PORTS       NAMES
b1d50e511252  ghcr.io/nokia/srlinux:25.3.1  sudo bash -c touc...  21 minutes ago  Up 21 minutes (starting)              clab-demo-leaf1

$ sudo podman exec -it clab-demo-leaf1 sr_cli

SSHでアクセスする場合は、ssh admin@コンテナ名でアクセスが可能です。
初期パスワードはNokiaSrl1!です

Nokia SR Linux - containerlab

$ ssh admin@clab-demo-leaf1
Warning: Permanently added 'clab-demo-leaf1' (ED25519) to the list of known hosts.
................................................................
:                  Welcome to Nokia SR Linux!                  :
:              Open Network OS for the NetOps era.             :
:                                                              :
:    This is a freely distributed official container image.    :
:                      Use it - Share it                       :
:                                                              :
: Get started: https://learn.srlinux.dev                       :
: Container:   https://go.srlinux.dev/container-image          :
: Docs:        https://doc.srlinux.dev/25-3                    :
: Rel. notes:  https://doc.srlinux.dev/rn25-3-1                :
: YANG:        https://yang.srlinux.dev/v25.3.1                :
: Discord:     https://go.srlinux.dev/discord                  :
: Contact:     https://go.srlinux.dev/contact-sales            :
................................................................

(admin@clab-demo-leaf1) Password:

ラボの終了

ラボの終了はdestroyコマンドで実行します。

clab destroy -r podman
14:23:47 INFO Parsing & checking topology file=topo.clab.yml
14:23:47 INFO Parsing & checking topology file=topo.clab.yml
14:23:47 INFO Destroying lab name=demo
14:23:47 INFO Removing host entries path=/etc/hosts
14:23:47 INFO Removing SSH config path=/etc/ssh/ssh_config.d/clab-demo.conf

おまけ

PodmanでContainerLabを利用するのは実験的なサポートのようなので機能をフルに使えない可能性があります。
ラボを削除する際にmgmtで指定したブリッジが削除されずに、ラボの再起動がうまくいかなかったりします。
起動前に、ブリッジを削除すれば問題なく起動できました。

$ clab dep -r podman 
14:25:04 INFO Containerlab started version=0.67.0
14:25:04 INFO Parsing & checking topology file=topo.clab.yml
Error: subnet 172.20.1.0/24 is already used on the host or by another config
$ sudo nmcli dev del podman1
Device 'podman1' successfully removed.
$ sudo clab dep -r podman 
14:26:03 INFO Containerlab started version=0.67.0
14:26:03 INFO Parsing & checking topology file=topo.clab.yml
14:26:03 INFO Creating lab directory path=/home/usaen/clab/clab-demo
14:26:03 INFO Running postdeploy actions kind=nokia_srlinux node=leaf1
14:26:10 INFO Adding host entries path=/etc/hosts
14:26:10 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-demo.conf
╭─────────────────┬──────────────────────────────┬─────────┬────────────────╮
│       Name      │          Kind/Image          │  State  │ IPv4/6 Address │
├─────────────────┼──────────────────────────────┼─────────┼────────────────┤
│ clab-demo-leaf1 │ nokia_srlinux                │ running │ 172.20.1.2     │
│                 │ ghcr.io/nokia/srlinux:25.3.1 │         │ N/A            │

ラボを何度も作ったり壊したりする場合、 SSHでアクセスするのでknown_hostsの登録はスキップするように設定しておくのが楽でした。

おわり

無事に起動することができました。
RockyやRHELを利用する場合はスクリプト一発で終わるので非常に簡単です。

SRLinuxを利用してネットワークの勉強をしていこうと思います。




以上の内容はhttps://usage-automate.hatenablog.com/entry/2025/04/05/144345より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14