1. LXC 的介绍
LXC (Linux Container)不是真正的虚拟化技术,它更像是一个 chroot 的环境。
在 http://lxc.sourceforge.net 可以获得关于 LXC 的更多信息 。
2. 安装 libvirt 堆栈
1
|
yum
install
libvirt libvirt-client python-virtinst
|
3. 配置 LXC 容器
假设你想配置一个完整的容器,就像进行一个最小化的 CentOS 6 安装一样。
请确保你机器上的 libvirtd 已经启动(service libvirtd start)。
我们将初始化一个 CentOS 6 x86_64 容器,假设,
-
根目录为 /var/lib/libvirt/lxc/centos-6-x86_64/
-
root 密码为will be MYROOTPASS
-
机器架构与主机相同,示例中为 x86_64
-
容器名称是 test
3.1. 在本机系统
1
2
3
4
|
mkdir
/var/lib/libvirt/lxc/centos-6-x86_64/etc/yum
.repos.d/ -p
cat
/etc/yum
.repos.d
/CentOS-Base
.repo |
sed
s/
'$releasever'
/6/g
>
/var/lib/libvirt/lxc/centos-6-x86_64/etc/yum
.repos.d
/CentOS-Base
.repo
yum groupinstall core --installroot=
/var/lib/libvirt/lxc/centos-6-x86_64/
--nogpgcheck -y
yum
install
plymouth libselinux-python --installroot=
/var/lib/libvirt/lxc/centos-6-x86_64/
--nogpgcheck -y
|
Selinux 注意:你需要创建一个规则以允许 virtd_lxc_t 使用 dbus:
1
2
3
4
5
6
7
8
|
module lxc 1.0;
require {
type
hald_t;
type
virtd_lxc_t;
class dbus send_msg;
}
#============= hald_t ==============
allow hald_t virtd_lxc_t:dbus send_msg;
|
http://wiki.centos.org/zh/HowTos/SELinux 页提供了优秀的指引文档,来指导我们完成以上步骤。
3.2. 在 chroot 文件系统中
以下均在 chroot 环境中操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
chroot
/var/lib/libvirt/lxc/centos-6-x86_64/
echo
MYROOTPASS |
passwd
root --stdin
#Fix root login on console
echo
"pts/0"
>>
/etc/securetty
sed
-i s/
"session required pam_selinux.so close"
/
"#session required pam_selinux.so close"
/g
/etc/pam
.d
/login
sed
-i s/
"session required pam_selinux.so open"
/
"#session required pam_selinux.so open"
/g
/etc/pam
.d
/login
sed
-i s/
"session required pam_loginuid.so"
/
"#session required pam_loginuid.so"
/g
/etc/pam
.d
/login
#Configuring basic networking
cat
>
/etc/sysconfig/network
<< EOF
NETWORKING=
yes
HOSTNAME=lxc1.
test
.centos.org
EOF
cat
>
/etc/sysconfig/network-scripts/ifcfg-eth0
<< EOF
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=
yes
EOF
#Enabling sshd
chkconfig sshd on
# Fixing root login for sshd
sed
-i s/
"session required pam_selinux.so close"
/
"#session required pam_selinux.so close"
/g
/etc/pam
.d
/sshd
sed
-i s/
"session required pam_loginuid.so"
/
"#session required pam_loginuid.so"
/g
/etc/pam
.d
/sshd
sed
-i s/
"session required pam_selinux.so open env_params"
/
"#session required pam_selinux.so open env_params"
/g
/etc/pam
.d
/sshd
# Leaving the chroot'ed filesystem
exit
|
3.3. 返回本机
# 现在从上面的文件系统创建 LXC 容器。
1
|
virt-
install
--connect lxc:
///
--name
test
--
ram
512 --vcpu 1 --filesystem
/var/lib/libvirt/lxc/centos-6-x86_64/
,/ --noautoconsole
|
你可以如此访问该 LXC 容器:
1
|
virsh console
test
|
又或者
1
|
ssh
-l root CONTAINER_IP
|
要取得 LXC 容器的 IP 地址,请在 dhcp 租约 /var/lib/libvirt/dnsmasq/default.leases 内查阅它的 MAC 地址(收录于 /etc/libvirt/lxc/test.xml)
3.4. 有关在 KVM 虚拟机器内运行 LXC 与缺省网络
当你在 KVM 虚拟机器内运行 LXC(两者皆采用 libvirt),缺省的 192.168.122.0/24 网络将会在 LXC 容器引导时产生冲突,你须要更改客端虚拟机器的 libvirtd(执行容器的那个)的 IP 范围来矫正问题。
1
2
3
|
service libvirtd stop
sed
-i
's/"192\.168\.122\./"192.168.120./'
/etc/libvirt/qemu/networks/default
.xml
service libvirtd start
|
Translation of revision 6
本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1343376,如需转载请自行联系原作者