RaspbianにLXDを導入する

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite March 2018

RaspbianではaptコマンドでLXDパッケージを導入することができないようであるからSnappyというパッケージマネージャで以ってインストールするのがよいようである。先んじてaptコマンドでlxcとsnapdパッケージをインストールしておく。

$ sudo apt install lxc snapd
$ sudo snap install lxd

$ snap list
Name  Version    Rev   Tracking  Developer  Notes
lxd   3.0.0      6661  stable    canonical  devmode

lxdコマンドは/snap/binへ配置されるようであるからパスを通すぞと息巻いていたらすでに開通済みであり拍子抜けしたものである。どうやら/etc/profile.d/apps-bin-path.shがこの役割を担っているようであった。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin

$ cat /etc/profile.d/apps-bin-path.sh
# Expand the $PATH to include /snap/bin which is what snappy applications
# use
PATH=$PATH:/snap/bin

然し乍らsudoで実行する際には/etc/sudoersにあるsecure_pathの影響が及ぶからこのままでは「sudo: lxd: コマンドが見つかりません」と出て終いである。そうであるからsecure_pathにも/snap/binを追加する。

$ sudo visudo
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

そうしたらsudo lxd initで初期設定をおこなう。クラスタリングモードで実行するか否かやストレージなどに関する様々な問いかけがあるけれどもひとまずはすべてデフォルトのまま通した。

$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
(snip)

なんらかコンテナの操作をしようとするとこうである。パーミッションの設定がソケットファイルへの接続を許してくれない模様である。パーミッションを確認するとrootユーザとlxdグループにだけ読み書きを許すような情勢である。

$ lxc list
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first container, try: lxc launch ubuntu:16.04
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied

$ sudo ls -l /var/snap/lxd/common/lxd/unix.socket
srw-rw---- 1 root lxd 0  4月 11 21:50 /var/snap/lxd/common/lxd/unix.socket

このままではユーザpiがたいへん困るのでlxdグループに追加するとよい。なお続けざまにコンテナを操作しようとしても同じエラーメッセージを頂戴したので一旦ログアウトして再度ログインするとよさそうである。

$ sudo gpasswd -a pi lxd
ユーザ pi をグループ lxd に追加

これでコンテナの操作がほしいままになった。

参考:
Linux Containers – LXD – オンラインでの試用

Similar Posts:

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください