Raspberry Piでコンテナ(LXC/LXD)を使う
これの続きです。 tomo-stone.hatenablog.com
やったこと
- Linux Containers(LXC)のインストール
- snapパッケージを導入する準備
- LXDのインストール・セットアップ
LXDはSnappyというパッケージ管理システムでインストールします。
(Ubuntuならapt
で入る)
環境
ハードウェア
- Raspberry Pi 3B ("+"じゃないほう)
- Raspberry Pi 3B ("+"じゃないほう)
OS
インストール作業
LXCのインストール
# apt install lxc
snapパッケージを導入する準備
# apt install snapd
LXDのインストール
# snap install lxd
ユーザを
lxd
グループに追加する- 私の場合
tomostone
というユーザ名なので...... # gpasswd -a tomostone lxd
- 私の場合
※これで$ lxd --version
みたいにしてエラーが出なければOKなのですが、
私の場合はエラーが出たので対処しました。
トラブルシューティング
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
共有ライブラリのエラーらしいです。
libarmmem.so
を無効化する/etc/ld.so.preload
# /usr/lib/arm-linux-gnueabihf/libarmmem.so ← コメントアウトする
問題なく動きはしましたが.......
今ひとつ理解できていないので、どなたか教えて頂けるとうれしいです。
あと、LXDは自分でビルドしたほうが早かったかも......?
LXDの初期設定
- 今回はブリッジインタフェースを使うように設定しました。
tomostone@raspberrypi:~$ sudo lxd init Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: Name of the storage backend to use (btrfs, ceph, dir, lvm) [default=btrfs]: Create a new BTRFS pool? (yes/no) [default=yes]: Would you like to use an existing block device? (yes/no) [default=no]: Size in GB of the new loop device (1GB minimum) [default=100GB]: Would you like to connect to a MAAS server? (yes/no) [default=no]: Would you like to create a new local network bridge? (yes/no) [default=yes]: no Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes Name of the existing bridge or host interface: br0 Would you like LXD to be available over the network? (yes/no) [default=no]: yes Address to bind LXD to (not including port) [default=all]: Port to bind LXD to [default=8443]: Trust password for new clients: Again: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: y ... /* ↑を`y`にすると設定が出力される */
確認してみる
コンテナの作成
sandbox
という名前でUbuntu 16.04のコンテナを立てる例$ lxc launch ubuntu:16.04 sandbox
コンテナの一覧を表示
tomostone@raspberrypi:~$ lxc list +---------+---------+-----------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------+---------+-----------------------+------+------------+-----------+ | sandbox | RUNNING | 192.168.116.69 (eth0) | | PERSISTENT | | +---------+---------+-----------------------+------+------------+-----------+
例えば$ lxc exec sandbox bash
とすることで、コンテナのシェルが使えます。
「IPアドレスを固定したい」みたいなときも、コンテナ側から設定すればOKです。
このあと
コンテナを利用して、色々なサーバを立ててみます。
先ずはファイルサーバとかですかね。
参考にしたページ
Linux Containers - LXD - イントロダクション
Raspberry pi, libarmmem.so (cannot open shared object file) error - Stack Overflow