仮想環境を構築する理由は、気軽に仮想マシンを起動して設定を行い、気に入らない場合は気軽に破棄できるからです。 他にも動機としてはスナップショットをとったり、バックアップをとったり、デプロイを自動化するなどありますが自分はそこまで使いこなせていません。
仮想化技術は他にハイパーバイザー型のKVM/QEMUがありますが、ハードウェアをエミュレーションするハイパーバイザー型よりもコンテナ型仮想化のほうがリソースが潤沢ではないラズパイには適していると思います。
ブリッジネットワークの作成
参考:Debian 9: bridgeインターフェースの設定
今回は、ホストマシンと仮想マシンともにDHCPでIPアドレスを設定するブリッジネットワークを作成します。
1.ネットワークデバイス名の確認
ラズパイにSSH接続し、「ip a s」コマンドでネットワークデバイス名を確認します。ブリッジする有線LANは「eth0」であると確認できました。
2.bridge-utils のインストール
apt コマンドで必要なプログラムをインストールします。sudo apt install bridge-utils
3.ブリッジ設定
ネットワークの設定ファイルにブリッジの設定を追加しますsudo vi /etc/network/interfaces
ブリッジインターフェース「br0」を作成します。
以下の設定を追記します。
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
再起動してネットワーク設定を有効にします。
sudo reboot now
※実はこのときスペルミスで設定不良になり、再起動後にSSH接続できなくなりました。
USBメモリを別PCに接続してファイルを修正し、事なきを得ました。
LXDのインストール
参考:RaspbianにLXDを導入する
1.LXCをインストールします。
sudo apt install lxc
「LXD」は「LXC」コンテナ技術のラッパーインターフェースみたいなものなので両方インストールする必要がありますが、snapインストールで LXDパッケージをインストール指定してもLXCは自動的には追加されません。そのため、事前にインストールする必要があります。
LXCについてはraspbianのaptリポジトリからインストールします。
2.snapdをインストールします。
Debian系であるRaspbianはLXDをsnapインストールするみたいです。まずsnapdをインストールします。
sudo apt install snapd -y
3.LXDをsnapインストール
snapを使用してLXDをインストールします。sudo snap install lxd
インストールプロセスが完了後再起動します。
sudo reboot now
4.sudoの環境変数を修正します
snapインストールされたLXDの実行バイナリは「/snap/bin」に格納されています。インストール作業をしたユーザーの環境変数にパスは通っていますが、SUDOの環境変数には含まれていません。 そのため「/etc/sudoers」を「visudo」コマンドで修正する必要があります。
sudo visudo
secure_pathに「:/snap/bin」を追加します。
修正前:
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"
「visodo」を起動すると、「/etc/sudoers.tmp」が操作対象となっています。
保存する場合は「Ctrl+o」で別名保存を選び、ファイル名を「/etc/sudoers」に修正して上書き保存します。
5.「pi」ユーザーを「lxd」グループに追加
lxcコマンドを実行するとエラーが表示されます。ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
関連ソケットへの許可がrootとlxdグループのみとパーミッションが設定されているそうです。「pi」ユーザーでラズパイを操作しているのでLXDグループに追加します。
sudo gpasswd -a pi lxd
一旦ログオフしてログイン(再度SSH接続)すると、グループに追加した設定が有効になります。
6.LXDの初期設定
LXDの初期設定は下記のコマンドから初めます。sudo lxd init
「lxd init」設定内容
Would you like to use LXD clustering? (yes/no) [default=no]: yes Do you want to configure a new storage pool? (yes/no) [default=yes]: yes Name of the new storage pool [default=default]: default Name of the storage backend to use (btrfs, ceph, dir, lvm) [default=btrfs]: btrfs Create a new BTRFS pool? (yes/no) [default=yes]: yes Would you like to use an existing block device? (yes/no) [default=no]: no Size in GB of the new loop device (1GB minimum) [default=15GB]: 15GB Would you like to connect to a MAAS server? (yes/no) [default=no]: 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]: no Would you like stale cached images to be updated automatically? (yes/no) [default=yes] : yes Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: no
「Name of the existing bridge or host interface:」で、作成したブリッジインターフェースの「br0」を指定することでコンテナ仮想マシンもホストと同セグメントのネットワークに属することになります。
7.コンテナマシンの作成と実行
下記コマンドは、OSを「Ubuntu18.04」、名称を「ubuntu-sv」という仮想マシンを作成し、実行します。lxc launch ubntu:18.0 ubuntu-sv
0 件のコメント:
コメントを投稿