tomo_stoneのメモ帳

ついったーに収まらないやつはこちら

Raspberry Piでコンテナ(LXC/LXD)を使う

これの続きです。 tomo-stone.hatenablog.com

やったこと

  • Linux Containers(LXC)のインストール
  • snapパッケージを導入する準備
  • LXDのインストール・セットアップ

LXDはSnappyというパッケージ管理システムでインストールします。 (Ubuntuならaptで入る)

環境

インストール作業

  • 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