☝️

WSLのUbuntuインストール時の設定をcloud-initで行う

2024/04/29に公開

最近リリースされたUbuntu 24.04 LTSでは、cloud-initを使用して設定をインストール時などで自動的に行うことができるようになりました。

https://jp.ubuntu.com/blog/canonical-releases-ubuntu-24-04-noble-numbat-jp

Ubuntu 24.04 LTS以降、WSLのUbuntuはcloud-initにより、複数の開発環境にわたってイメージのカスタマイズと標準化に対応します。

以下のチュートリアルを参考にしながら、この記事では例としてAPTミラーの設定をインストール時に行うようにします。

https://docs.cloud-init.io/en/latest/tutorial/wsl.html

環境

PS > wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
MSRDC バージョン: 1.2.5326
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26091.1-240325-1447.ge-release
Windows バージョン: 10.0.22621.2715

cloud-initの設定ファイルを作成

Ubuntuのインストール時の追加の設定をWindows側の%USERPROFILE%\.cloud-init\Ubuntu-all.user-dataにYAML形式で記述します。
モジュール一覧を見るとApt Configureモジュールでミラーの場所を設定できるので以下のような設定になります。

%USERPROFILE%\.cloud-init\Ubuntu-all.user-data
#cloud-config
apt:
  primary:
    - arches: [i386, amd64]
      uri: http://ftp.udx.icscoe.jp/Linux/ubuntu
  security:
    - arches: [i386, amd64]
      uri: http://security.ubuntu.com/ubuntu

Ubuntu 24.04 LTSをWSLにインストール

通常通りにインストールを行います。

PS > wsl --install Ubuntu-24.04
インストール中: Ubuntu 24.04 LTS
Ubuntu 24.04 LTS がインストールされました。
Ubuntu 24.04 LTS を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: holliy
New password:
Retype new password:
passwd: password updated successfully
Installation successful!

...

holliy@wsl:~$

設定の確認

読み込まれたYAMLの内容は以下のコマンドで確認できます。

$ sudo cloud-init query userdata
#cloud-config
apt:
  primary:
    - arches: [i386, amd64]
      uri: http://ftp.udx.icscoe.jp/Linux/ubuntu
  security:
    - arches: [i386, amd64]
      uri: http://security.ubuntu.com/ubuntu

表示される内容が有効であるかはこの出力からは分からないので、以下のコマンドで確認します。

$ sudo cloud-init schema --system --annotate
Valid schema user-data

Valid ~と表示されれば、設定は正常に読み込まれています。

参考

https://canonical-ubuntu-wsl.readthedocs-hosted.com/en/latest/tutorials/cloud-init/

Discussion