🍉
Ubuntu (on WSL2)でsnapを動かす
WSL2のUbuntuでsnapを使ってパッケージ(ここではmicrok8s)をインストールしようとしたところ
$ sudo snap install microk8s --classic
error: cannot communicate with server: Post http://localhost/v2/snaps/microk8s: dial unix /run/snapd.socket: connect: no such file or directory
というエラーに遭遇。
起きていることの背景
- snap (Snappy)というパッケージマネージャーでmicrok8sをインストールしようとしているが、snapが動くためにはsnapdが動いている必要がある
- snapdが動くためにはinitdではなくsystemdというデーモン経由でBashが立ち上がる必要があるが、WSL2ではinitdでBashが立ち上がっているためsystemdが存在しない
やること
- genieというパッケージを導入してWSL2でsystemdをpid=1の状態で起動する(つまり最初に起動するスーパーデーモンにする)
- apt-get install でsnapdをインストールする
- snapdを起動する
具体的な手順
genieに必要な.NET Coreランタイムをインストールする
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-3.1
最新版のgenieをgithubから取得する
Releases · arkane-systems/genie (github.com)
(debファイルをダウンロードする)
1.26の場合:
wget https://github.com/arkane-systems/genie/releases/download/1.26/systemd-genie.deb
- debファイルからインストールを行う
$ sudo dpkg -i systemd-genie.deb
- genieを起動する
単純にはUbuntu内で
genie -s
でよい。
ps aux | less
などでsystemdがPID 1になっていることを確認できる。
毎回systemdをスーパーデーモンとして自動起動したい場合はスタートアップのタスクに登録する等の方法があるが、今回はsnapのインストールができればよいため省略。
- snapdを起動する
sudo service snapd start
sudo service snapd status
で確認できる。
- microk8sのインストール
sudo snap install microk8s --classic
毎回自動起動したい場合
以下を.bashrcや.zshrcに追記しておくのが良いらしい(genie公式のWikiより)
# Are we in the bottle?
if [[ ! -v INSIDE_GENIE ]]; then
echo "Starting genie:"
exec /usr/bin/genie -s
fi
参考:
コラム - WSLで始めるUbuntu | 第22回 WSL2の新機能を試してみよう|CTC教育サービス 研修/トレーニング (ctc-g.co.jp)
Discussion