转: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配置文件,第二行表示下面即配置文件的开始。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐