ようへいの日々精進XP

よかろうもん

test-kitchen + LXC 諸々メモ(2)※書きかけ

はじめに

  • 動かないコンテナが動くようにする為に調べた
  • コンテナの IP が取得出来ていないことが原因だった

参考


切り分け

コンテナの IP アドレスに関与していそうなコンポーネント

lxc-awesome-ephemeral

lxc-awesome-ephemeral で IP アドレスを扱っていそうな部分は以下の部分。

get_ip()
{
(略)
    # Grab all the public globally routed IPv4 and IPv6 addresses
    (sudo ip netns exec $NAME ip -4 addr show scope global && \
        sudo ip netns exec $NAME ip -6 addr show scope global) | grep inet | while read line; do
        ip=$(echo $line | awk '{print $2}' | cut -d '/' -f1)
        echo "$ip"
    done
(略)
}

尚、今回の環境では lxc-awesome-ephemeral にて LXC コンテナの IP アドレスは取得されていないことは確認した。

kitchen-lxc

kitchen-lxc で IP アドレスを扱っていそうな部分は以下の部分かと思われる。

      def container_ip(state)
        if config[:ipaddress]
          return config[:ipaddress]
        else
          30.times do
            leases = ::File.readlines(dhcp_lease_file).map { |line| line.split(" ") }
            p leases
            leases.each do |lease|
              return lease[2] if lease.include?(state[:container_id])
            end
            sleep 3
          end
        end
        raise ActionFailed, "Could not determine IP address for LXC container '#{state[:container_id]}'"
      end

dhcp_lease_file で定義されているのがデフォルトで /var/lib/misc/dnsmasq*leases となっている。尚、検証した環境では以下のようなファイル名となっている。

dnsmasq.lxcbr0.leases

これは LXC コンテナがホストの DHCP サーバーである dnsmasq から割り当てられた IP とホスト名が記録されるファイルとなっている。以下のような中身となっている。

1384078399 b2:6f:53:c4:9d:86 10.0.3.xxx default-wheezy-master-18c38f *
1384078331 be:76:51:8d:17:03 10.0.3.xxy default-wheezy-master-2de049 *
1384078312 ca:d6:f9:ac:79:68 10.0.3.xxz default-wheezy-master-d19105 *

フォーマットは下記の通り。

${タイムスタンプ} ${MAC アドレス} ${IP アドレス} ${ホスト名} ${Client-ID}

最終的な原因と解決策

原因

  • DHCP クライアントからホスト名送信されておらず dnsmasq.lxcbr0.leases にホスト名が記録されていなかった

解決策

基本的には コンテナの dhcpclient.conf の設定に以下が必要。

send host-name = gethostname();

但し、Debian 6(squeeze) の場合には isc-dhcp-client のバージョンアップが必要(かもしれない)で、今回は sid 版のパッケージを使って試した。

Debian 6(squeeze) で isc-dhcp-client の sid 版を使う

echo "deb http://ftp.de.debian.org/debian sid main" >> /etc/apt/sources.list
apt-get install libc6-dev
apt-get install isc-dhcp-client