WSL2上のUbuntu22.04をAzure Arcを使ってAzureの管理下におく

# はじめに

最近Azureをちょこちょこ触っている＆衝動買いでPCを買ってクリーンな環境が手に入ったので、WSL上のUbuntuをArc管理できるのかなーと思って試したらできた話。

# 背景情報

## Azure Arcとは

要はオンプレの端末をAzureクラウドの管理下に置く仕組み。

https://azure.microsoft.com/ja-jp/products/azure-arc/#overview

ただこれには制約があって、デーモンの管理にsystemdが必要で、WSLは使えないという記載がある。


>注意
>Linux では、Azure Arc 対応サーバーは複数のデーモン プロセスをインストールします。 これらのプロセスの管理には systemd の使用のみがサポートされています。 一部の環境では、systemd がインストールされていない、または使用できない場合があります。その場合、ディストリビューションがサポートされている場合でも、Arc 対応サーバーはサポートされません。 これらの環境には、Linux 用 Windows サブシステム (WSL) と、Kubernetes や Docker などのほとんどのコンテナーベースのシステムが含まれます。 Azure Connected Machine エージェントは、コンテナーを実行するノードにはインストールできますが、コンテナー自体の内部にはインストールできません。

https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/prerequisites


## Windows Subsystem for Linux(WSL) とは

要はWindows上でLinuxを動かす仕組み。はるか昔にデュアルブートやらvirtual boxやらなにやらで大変苦労していたが、いまだとWindowsの機能で達成できるのでお手軽＆安定している。

https://learn.microsoft.com/ja-jp/windows/wsl/about

そして、このWSLは昨年からsystemdに対応している。

https://forest.watch.impress.co.jp/docs/news/1441775.html


で、あれば実は動かせるんじゃね？ということで試してみた。


# やり方

結構すんなり入ったので実はそんなに苦労していない。（最初のwindows OS updateが一番時間かかった）

## 環境

- OS:Windows 11 Pro 22H2 22621.1105
-
```powershell:powershell
>wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.1105
```

```bash:bash on WSL
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
```
## 手順


### WSLでのsystemdの有効化

手順はとても簡単で、2行分の設定ファイルを作って再起動するだけ。

systemdを有効化する設定ファイルをWSLの設定ファイルとして書く。ファイルはないので作成することになる。

```bash:bash
$ sudo nano /etc/wsl.conf
```

```bash:bash
$ cat /etc/wsl.conf
[boot]
systemd=true
```

設定を反映するためにWSLを再起動する。
Windows側でWSLをいったん落とす。

```powershell:powershell
PS> wsl --shutdown
```

その後Ubuntuを適当に起動（スタートメニューのショートカットとか）して、systemdが起きているかテストする。

```bash:bash
$ systemctl
```
これでunitが見えればOK。

参考:https://crieit.net/posts/systemd-supported-in-wsl


### ArcにUbuntuを参加させる

こちらもお手軽で、Azure portalにいわれたことを順番にやっていけばいい。

まずはportal上でazure arcのサーバのページに飛ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/aa6e17c7-d4fa-c51c-499c-f2b220308d18.png)

追加をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/d76116ce-ffe0-9ed6-a119-654f6815cc9c.png)

単一サーバーの追加を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/bf31de8b-ef60-bb7e-137b-3ac048e74d80.png)

前提条件を確認される。
さすがにHTTPでインターネットに出れない環境でこの話はしないと思うので大丈夫だと思う。
次へをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/e9b8a6c1-dcc8-4fa2-e0b3-5dd1a27801a8.png)

リソースグループはなければ適当に作る。
あくまでUbuntuなのでオペレーティングシステムはLinuxを選択。
接続方法はパブリックエンドポイントにした。
※プロキシ環境化ならプロキシサーバーを選ぶ。この後生成されるスクリプトで良しなに生成してくれる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/d9dae010-9495-e503-490d-8466ed913291.png)


タグは特にいじらず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/8e614024-9a60-ee2f-c834-4672b4af50f6.png)

ここまでくると、Azure Arcのエージェント導入用のスクリプトが生成される。
あとはこれをUbuntu上で実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/a3cd92fe-133d-47b2-59ce-cd04de66f2a3.png)

さて、実行してしばらくたつと、認証用のコードがUbuntu上で表示される。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/800921b7-0a6f-fb9c-7d90-e49363e8011a.png)

言われたとおりに認証用ページにブラウザでアクセスする。

https://microsoft.com/devicelogin

認証コードを打ち込む。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/bd80fc36-c9aa-5d59-778e-844446341215.png)

azure portalにログインしているアカウントなどを聞かれた後、問題なければデバイスが追加される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/07c13e99-6e3e-7280-11a2-43c0841cfede.png)

Ubuntu側でもこの間表示が変わり、下記みたいなログがでればよさそう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/c7e18ba7-4dde-c4ea-00f8-7d5ff0b1838e.png)

Azure portal上でもリソースを確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/540423cf-9abe-db92-1978-1ca6d6a55aa1.png)

以上。

# おわりに

公式でWSLは使えない、と記載されている割には案外お手軽だった。
ただ、込み入ったことをするとあれこれできない可能性もあるのでその辺は試す必要があると感じた。