2019年6月4日火曜日

Ubuntu 18.04でLXC

Ubuntu 14.04で動かしていたKVMの仮想マシンのイメージは
問題に出くわしたもののUbuntu 18.04に持ってこれました。
LXCも大して変わらないかと思っていましたが…

まずはインストール。以下を実行します。
# apt install lxc
旧環境から"/var/lib/lxc/<ゲスト名>"ディレクトリを
まるごと新環境に持ってきます。ところが
# lxc-ls -f
を実行しても
Failed to load config for <ゲスト名>
と怒られます。試しに
# lxc-start -n <ゲスト名> -o debug -l debug
を実行してみると
lxc-start: <ゲスト名>: parse.c: lxc_file_for_each_line_mmap: 100 No such file or directory - Failed to open file "/usr/share/lxc/config/ubuntu.common.conf"
とのこと。確かにこのファイルはありません。
設定ファイル"/var/lib/lxc/<ゲスト名>/config"を見ると
このファイルは"lxc.include="で設定されています。
そこでそこを存在する"/usr/share/lxc/config/common.conf"に変更してみると
起動はできるようになったようだが、
# lxc-console -n <ゲスト名>
してもコンソールに繋がらない。
それでも"lxc-attach"ならアクセスでき
# lxc-attach -n <ゲスト名> ifconfig
とかやると返事が返って…
って、あれ? IPアドレスがIPv6しかない?
# lxc-info -n <ゲスト名> -i
してもやっぱりIPv4アドレスは無い。
その後よくよく調べてみると起動シーケンスで
立ち上げているはずのデーモン類が全く立ち上がってない!
この時点でポーティングは諦めました。
ポータビリティはLXCよりKVMの方が上なのかも。

ということでゲスト環境を新規作成することに。
これがまた14.04から随分変わっていて…
まず実行すべきは
# lxc-create -t download -n <ゲスト名>
でした。利用可能なゲストの種類が一覧されるので、
対話的に[Distribution:]に対して"ubuntu"、
[Release:]に対して"bionic"(Ubuntu 18.04のこと)、
[Architecture:]に対して"amd64"と入力すると
ダウンロードが始まります。

完了後は
# lxc-start -n <ゲスト名>
でゲストの起動はできますが、
以前のようにそのままコンソールに繋がりません。
結構あせりましたが、
# lxc-attach -n <ゲスト名>
でコンソールに入れました。
なおこれを実行するにはホスト側のroot権限が必要で、
その際ゲスト側のrootとして入れます。
ちなみにゲスト側のrootユーザにパスワードを設定していても
パスワード無しで入れる便利仕様になってます。

ここまででゲストの起動は可能となったので
いくつか設定をすることに。
まずは以下の感じでアカウント関連を。詳細の説明は省きます。
# passwd
# groupadd <グループ名>
# useradd -m -g <グループ名> -s /bin/bash -N <ユーザ名>
# passwd <ユーザ名>
# userdel -r ubuntu

次にネットワーク。
ホスト側の設定ファイル"/var/lib/lxc/<ゲスト名>/config"の
lxc.net.<番号>.type = veth
lxc.net.<番号>.flags = up
lxc.net.<番号>.link = <ホストのインターフェイス名>
lxc.net.<番号>.hwaddr = <ゲストのMACアドレス>
辺りを弄ります。ホストのブリッジに接続するのが一般的なので、
例えば
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br0
lxc.net.0.hwaddr = 00:11:22:33:44:55

lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.1.link = br1
lxc.net.1.hwaddr = 00:11:22:33:44:56
な感じになるでしょうか。
ゲストでは設定ファイル"/etc/netplan/10-lxc.yaml"を
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 192.168.1.2]
    eth1:
      dhcp4: true
のような感じでカスタマイズし、
# netplan apply
を実行して反映させます。

それからリモートログインできるようにsshサーバを
以下の手順で。
# apt install openssh-server
# update-rc.d ssh defaults
# reboot
これで最低限なんとかなるかな。

0 件のコメント:

コメントを投稿