シスコ CSLU アプリをコンテナで動かしてみた！

この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2024 の 2 日目として投稿しています。
2024 年版: https://qiita.com/advent-calendar/2024/cisco

# はじめに
シスコ製品はスマートライセンスというライセンス管理手法を使っています。スマートライセンスを登録する際、デバイスが直接インターネット上の管理サイトにアクセスできれば良いのですが、そうでない場合はオンプレミスで中継をするためのアプリケーションを使います。

今回使用する CSLU (Cisco Smart Licensing Utility) は、スマートライセンスの中でも SLP (Smart License using Policy) に対応している製品がインターネットに直接接続できないときに、オンプレミスで仲介するソフトウェアになります。

現在 CSLU は Windows 用の EXE、Debian 系のための deb、Redhat 系のための RPM の 3 つのファイル形式で提供されています。ということはコンテナで動くのではないかと思い、ここでは deb パッケージをコンテナで動かす方法をまとめます。

## 免責
本記事で紹介する方法はあくまでも試験的な動作確認を目的としています。商用での使用は正規のインストールガイドに沿った方法で実施をお願いいたします。また本記事を参考にしたことにより生じるいかなる問題に関しましても、筆者は一切責任を負いません。

## CSLU のダウンロード
CSLU ソフトウェア自体は、下記からダウンロードできます。deb パッケージは 90MB とそれほど大きくもありません。
https://software.cisco.com/download/home/286285506/type/286327971/release/2.3.0

![01-download-site.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156216/881d8d08-56c7-3df9-564d-0bb34a33b2e4.png)


## Ubuntu の準備
CSLU を動かすためには、ベースとなる Linux が必要です。さらに CSLU は GUI アプリのため、X サーバおよび Window Manager が必要です。これらを動かす良いコンテナがないか調べていたところ、@takahashiakari さんが素晴らしいイメージを作られていたので、これを使わせていただきます。

https://qiita.com/takahashiakari/items/f096e5bcdfecf3d5ba90


今回このイメージを使う理由は下記の通りです。
- Debian 系の Linux イメージであること
- X サーバおよび Window manager をインストール済みであること
- ブラウザ経由のVNCが使えること
- Dockerfile が公開されていること
- できるだけ軽いこと


## 実際の手順
ここからは実際の手順の詳細です。docker のホストは Ubuntu 24.04.01 サーバを使い、インストール直後から手順をまとめます。

まず docker をインストールします。これは snap 一行で完了です。簡単ですね。

```
$ sudo snap install docker
```

また docker コマンドを実行するたびに sudo を打つのは面倒なので、
下記を実施して一度再起動しておきます。

```
$ sudo groupadd docker
$ sudo usermod –g docker <username>
```

次に前述の Ubuntu イメージを取得、起動します。ポートを 2 つ公開していますが、それぞれ下記の用途です。
- 6080: ブラウザ経由での VNC 接続用
- 8182: デバイスからの SLP ライセンス登録用

```
$ docker run -itd --platform=linux/amd64 --name cslu-ubuntu -p 6080:6080 -p 8182:8182 akarita/docker-ubuntu-desktop
```


起動したらブラウザでのアクセスを試します。
http://[ip-address]:6080/vnc.html

アクセスしてターミナルを開けたら成功です。

![02-access.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156216/4b36aec8-9b6c-35c1-7eb8-c5bc59ec1a63.png)



## CSLU のインストールと起動
次に CSLU をコンテナにコピーします。ここでコピー先は /var など、root ユーザ以外でもアクセスできる場所にしておくことがポイントです。

```
$ docker cp CSLU_Installer_2.3.0_amd64.deb cslu-ubuntu:/var
```

:::note warn
/root など、root しかアクセスできない場所では動かないため注意が必要です
:::

# コンテナ内での操作
ここから先はコンテナ内での操作になります。
まず apt-get update 実行後、libgbm-dev をインストールしておきます。

```
# apt-get update
# apt-get install -y libgbm-dev
```

次に /var に移動して、CSLU パッケージをインストールします。

```
# apt-get install -y ./CSLU_Installer_2.3.0_amd64.deb
```

この時点で Xfce に CSLU application のメニューはできますが、このままでは起動しません。
コンテナでは root ユーザが基本になりますが、CSLU application を root で起動する際は no-sandbox オプションが必要だからです。そのために下記の作業を行います。

まず、cslu の実行ファイルを別の名前にします。ここでは cslu_app にします。

```
# cd /opt/CSLU
# mv cslu cslu_app
```

次に、下記のような bash スクリプトを cslu というファイル名で保存します。

```bash
#!/usr/bin/bash
/opt/CSLU/cslu_app --no-sandbox $1
```

そして、そのファイルに実行属性をつけます。

```
# chmod 755 cslu
```

これで Xfce のメニューから cslu を起動してみます。

![03-run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156216/a98ec24f-e70c-d642-2d51-659c2273ce22.png)


無事に起動したら成功です！

![04-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156216/611ec888-a538-a37e-32c4-a5fe71c81cdf.png)


その後 CSLU のマニュアルに従いログイン、Smart Account、Virtual Account を設定し、デバイスからの登録を行えば動作します。

![05-device.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156216/ac4d2a1d-5b32-e74e-f854-5711c1b6accd.png)



# 最後に
CSLU をコンテナで動かすというニーズはなかなかないかもしれませんが、これでスマートライセンスの活用がより容易になるといいなと思います。皆様、素晴らしい年末年始をお過ごしください。