linux 容器(LXC) 第8章 之创建模板
转:https://blog.csdn.net/shichaog/article/details/38037903所谓的模板就是一个原型,依据该原型可以创建一系列类似的LXC虚拟机,如果使用lxc-1.0.0.3自带的模板,那么该原型只提供最基本的配置,如果想使用vim,对不起,没有,如果想使用gcc,抱歉,依然没有,如果想使用mysql,更是没有。这里所说的模板制作,只是一个比较简单的最基础..
转:https://blog.csdn.net/shichaog/article/details/38037903
所谓的模板就是一个原型,依据该原型可以创建一系列类似的LXC虚拟机,如果使用lxc-1.0.0.3自带的模板,那么该原型只提供最基本的配置,如果想使用vim,对不起,没有,如果想使用gcc,抱歉,依然没有,如果想使用mysql,更是没有。这里所说的模板制作,只是一个比较简单的最基础的制作,有点类似嵌入式系统的最小系统的概念,只保留最最基本的应用,在这基础之上,添加一些应用就可以了。
创建的步骤如下:
/tmp/exclude目录下创建一个临时的目录:
.bash_history
lost+found
/dev/*
/mnt/*
/tmp/*
/proc/*
/sys/*
/usr/src/*
进入/tmp/exclude目录下:
tar --numeric-owner -czvf /tmp/centos-5.5-x86_64-image.tgz ./
mkdir -p /var/lxc/centos
cd /var/lxc/centos/
tar xvzf /tmp/centos-5.5-x86_64-image.tgz
更改防火墙设置中的两项 etc/sysconfig/iptables-config
IPTABLES_MODULES=""
IPTABLES_MODULES_UNLOAD="no"
编写创建设备文件的脚本 /var/lxc/fix_dev.sh:
#!/bin/bash
# Makes default devices needed in lxc containers
# modified from http://lxc.teegra.net/
ROOT=$(pwd)
DEV=${ROOT}/dev
if [ $ROOT = '/' ]; then
printf "\033[22;35m\nDO NOT RUN ON THE HOST NODE\n\n"
tput sgr0
exit 1
fi
if [ ! -d $DEV ]; then
printf "\033[01;33m\nRun this script in rootfs\n\n"
tput sgr0
exit 1
fi
rm -rf ${DEV}
mkdir ${DEV}
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
exit 0
当然这一步关系到创建后的最终原型,具体来说,就是这里的模板是最简单的,当然也可以拷贝当前文件系统的一些文件目录,如/bin /sys等等。例如将mysql安装好了,那么/bin 或者/usr/bin目录下就会有相应的mysqldump等命令,这时再在/u01等相关目录下创建相应的mysql需要用到的文件,然后将/u01复制到该目录下,那么创建的模板中就可以使用mysql了,这一过程中我试过chroot命令。
创建文件:
root@servukas:/var/lxc/centos# sh ../fix_dev.sh
具体的centos目录下的内容如下,bin等目录是后加进去的,这个方法可以用来添加入mysql等原来模板不能提供的一些应用:
创建模板的配置文件,如果看过lxc1.0.03的配置文件,就可以知道其分了两个部分,一个是所谓的comm,一个是所谓的centos,同理这里采用了两个文件,具体配置文件如下:
Config文件:
network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.hwaddr = fe:93:0c:fb:02:3a
lxc.rootfs = /var/lxc/centos
#lxc.rootfs = /usr/local/var/lib/lxc/CN/rootfs
# Include common configuration
lxc.include = /var/lxc/centos/centos.common.conf
lxc.arch = i686
lxc.utsname = CN
lxc.autodev = 0
centos.common.conf
lxc.devttydir = lxc
lxc.tty = 4
lxc.pts = 1024
# Mount entries
#lxc.mount = /var/lxc/centos.fstab
lxc.mount.auto = proc:mixed sys:ro
# Ensure hostname is changed on clone
lxc.hook.clone = /usr/local/share/lxc/hooks/clonehostname
xc.cap.drop = mac_admin mac_override setfcap setpcap
lxc.cap.drop = sys_module sys_nice sys_pacct
lxc.cap.drop = sys_rawio sys_time
# Control Group devices: all denied except those whitelisted
lxc.cgroup.devices.deny = a
# Allow any mknod (but not reading/writing the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
lxc.cgroup.devices.allow = c 1:3 rwm # /dev/null
lxc.cgroup.devices.allow = c 1:5 rwm # /dev/zero
lxc.cgroup.devices.allow = c 1:7 rwm # /dev/full
lxc.cgroup.devices.allow = c 5:0 rwm # /dev/tty
lxc.cgroup.devices.allow = c 1:8 rwm # /dev/random
lxc.cgroup.devices.allow = c 1:9 rwm # /dev/urandom
lxc.cgroup.devices.allow = c 136:* rwm # /dev/tty[1-4] ptys and lxc console
lxc.cgroup.devices.allow = c 5:2 rwm # /dev/ptmx pty master
模板已经创建好,使用方法如下:
和博客一简介那篇文章相比,这里没有使用-t centos参数,-t 表示template,也就是模板,看上述配置文件的黄色两行就可以看出,这里使用了设计的模板,其中#开始的是注释,#后的为使用模板是的文件系统路径。这里列出来是为了突出两种情况下的最大区别。所以没有依赖于centos模板。
灰色的两行,第一行是config包含的comm配置文件,第二行表示下面即配置文件的开始。
更多推荐
所有评论(0)