このエントリーをはてなブックマークに追加

4.1.3. lxc

4.1.3.1. 概要

lxcは、コンテナ型の仮想環境を構築するツールです。

4.1.3.2. LXCに依存するパッケージをインストール

必要なパッケージをインストールします。
ブリッジの作成にbridge-utils
debootstrapとdpkgはUbuntuのテンプレートを利用するときに必要です。
$ su -
$ yum groupinstall "Development Tools" -y
$ yum install wget libcap-devel bridge-utils dnsmasq docbook-utils -y
$ yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/dpkg-1.15.5.6-6.el6.x86_64.rpm -y
$ yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/debootstrap-1.0.19-2.el6.noarch.rpm -y

4.1.3.3. LXCのインストール

# cd /usr/local/src
# wget http://lxc.sourceforge.net/download/lxc/lxc-0.7.5.tar.gz
# tar zxvf lxc-0.7.5.tar.gz
# cd lxc-0.7.5
# ./configure
# make rpm
# rpm -ivh /root/rpmbuild/RPMS/x86_64/lxc-0.7.5-1.x86_64.rpm
# mkdir -p /var/lib/lxc

4.1.3.4. LXCの設定

LXCはSELinuxに対応していないので停止します。

# sed -i 's/SELINUX=enabled/SELINUX=disabled/' /etc/selinux/config
# setenforce 0

cgconfigの停止

# chkconfig cgconfig off
# service cgconfig stop

cgroupのマウント

# echo "lxc /cgroup cgroup defaults 0 0" >> /etc/fstab
# mkdir /cgroup
# mount lxc
ブリッジインターフェースの作成
lxcbr0とdnsmasqを利用した設定がうまくいかないので普通のブリッジインターフェースを利用した方法でLXCを利用します。
# cat << EOF > /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.10.60
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
EOF


# cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BRIDGE=br0
NM_CONTROLLED=no
ONBOOT=yes
EOF

ネットワークの設定を反映

# service network restart

4.1.3.5. CentOS6.3のテンプレート1

テンプレートにCentOSが含まれていませんので手動で作成する必要があります。
以下の作成手順では6.3が出来上がりますので他バージョンが必要であれば多少変更が必要です。
参考:http://wiki.1tux.org/wiki/Centos6/Installation/Minimal_installation_using_yum
スクリプトを作成したいのでプロンプトは入ってませんのでそのままコピペすればテンプレートが出来上がります。
但し名前は centos63_001 となっていますので適宜変更してください。
ユーザ名root、パスワードはpasswordでログインできます。
###prerequisite
mkdir /t

###prepare yum config file
cd /t
wget -c http://mirrors.kernel.org/centos/6.3/os/x86_64/Packages/centos-release-6-3.el6.centos.9.x86_64.rpm
rpm2cpio centos-release-6-3.el6.centos.9.x86_64.rpm | cpio -idm
sed -i 's/$releasever/6/g' ./etc/yum.repos.d/*
echo LANG="ja_JP.UTF-8" > /etc/sysconfig/i18n
yum --installroot=/t groupinstall base --nogpgcheck -y
#yum --installroot=/t install dhclient vim telnet ftp man-pages-ja --nogpgcheck -y
yum --installroot=/t install dhclient vi man-pages-ja --nogpgcheck -y
rm -rf centos-release-6-3.el6.centos.9.x86_64.rpm

###post-install configuration
###echo "root:root" | chroot /t chpasswd
chroot /t
echo password | passwd --stdin root

sed -i 's/^#baseurl/baseurl/g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's/$releasever/6.3/g' /etc/yum.repos.d/CentOS-Base.repo
sed -i '115,126s/^/#/' /etc/rc.d/init.d/halt

rm -f /dev/null

mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
mkdir -m 755 /dev/pts
mkdir -m 1777 /dev/shm
mknod -m 666 /dev/tty c 5 0
mknod -m 666 /dev/tty0 c 4 0
mknod -m 666 /dev/tty1 c 4 1
mknod -m 666 /dev/tty2 c 4 2
mknod -m 666 /dev/tty3 c 4 3
mknod -m 666 /dev/tty4 c 4 4
mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/full c 1 7
mknod -m 600 /dev/initctl p
mknod -m 666 /dev/ptmx c 5 2
chown root:tty /dev/tty*
chmod 1777 /dev/shm
chmod 755 /dev/pts

cp -a /etc/skel/. /root/.

cat > /etc/resolv.conf << END
# Google public DNS
nameserver 8.8.8.8
nameserver 8.8.4.4
END

cat > /etc/hosts << END
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
END

cat > /etc/sysconfig/network << END
NETWORKING=yes
HOSTNAME=localhost
END

cat > /etc/sysconfig/network-scripts/ifcfg-eth0  << END
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
END

cat > /etc/fstab << END
/dev/root               /                       rootfs   defaults        0 0
none                    /dev/shm                tmpfs    nosuid,nodev    0 0
END

cat > /etc/init/lxc-sysinit.conf << END
start on startup
env container

pre-start script
        if [ "x$container" != "xlxc" -a "x$container" != "xlibvirt" ]; then
                stop;
        fi
        telinit 3
        initctl start tty TTY=console
        exit 0;
end script
END

exit

tar zcvf /usr/local/src/centos6-lxc-root.tgz .

mkdir /var/lib/lxc/centos63_001
cd /var/lib/lxc/centos63_001
mkdir rootfs
cd rootfs
tar zxvf /usr/local/src/centos6-lxc-root.tgz --numeric-owner

cd /var/lib/lxc/centos63_001

cat >/var/lib/lxc/centos63_001/config << END
lxc.network.type=veth
#lxc.network.link=lxcbr0
lxc.network.link=br0
lxc.network.flags=up
lxc.utsname = centos63_001

lxc.tty = 1
lxc.pts = 1024
lxc.rootfs = /var/lib/lxc/centos63_001/rootfs
lxc.mount  = /var/lib/lxc/centos63_001/fstab
lxc.arch = x86_64
lxc.cap.drop = sys_module mac_admin

lxc.cgroup.devices.deny = a
# Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
#fuse
lxc.cgroup.devices.allow = c 10:229 rwm
#tun
lxc.cgroup.devices.allow = c 10:200 rwm
#full
lxc.cgroup.devices.allow = c 1:7 rwm
#hpet
lxc.cgroup.devices.allow = c 10:228 rwm
#kvm
lxc.cgroup.devices.allow = c 10:232 rwm
END
cat > fstab  << END
proc            /var/lib/lxc/centos63_001/rootfs/proc         proc    nodev,noexec,nosuid 0 0
sysfs           /var/lib/lxc/centos63_001/rootfs/sys          sysfs defaults  0 0
END
rm -rf /t

作成したテンプレートを起動

# lxc-start -n centos63_001

目次

前のトピックへ

4.1.2. oz

次のトピックへ

4.1.4. openvz

このページ