如何创建一个Debian Wheezy(测试)OpenVZ模板
本教程将介绍如何为Debian Wheezy(Debian测试)创建OpenVZ模板,您可以使用该模板在OpenVZ下创建虚拟Debian Wheezy机器。 我搜索了一个Debian Wheezy OpenVZ模板,但找不到一个,这就是为什么我决定自己创建。 本指南还可用于为最新的Ubuntu版本创建Debian Lenny模板和模板。
我不会保证这将为您工作!
1初步说明
本指南基于Debian模板创建 ,但已调整为Debian Wheezy。 我假设您正在使用基于Debian的OpenVZ主机,例如本指南所示: 在Debian Squeeze(AMD64)上安装和使用OpenVZ
2准备主机系统
主机系统:
这些步骤必须在主机系统上进行!
我们需要deboostrap
来安装Wheezy客人,所以确保安装:
apt-get install debootstrap
接下来确保/ vz
是/ var / lib / vz
的符号链接:
ln -s /var/lib/vz /vz
现在我们在/ vz / private / 777
目录中安装64位版本的Debian Wheezy(我将使用777
作为Wheezy guest的容器ID;您可以自由使用任何其他未使用的ID;例如,如果您使用ID 123
,将目录更改为/ vz / private / 123
)。
debootstrap --arch amd64 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/
如果要为i386创建模板,则该命令必须如下所示:
debootstrap --arch i386 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/
确保使用靠近您的Debian镜像。 我使用德国镜像ftp://ftp.de.debian.org/debian/
; 您可以将de
替换为您的国家/地区代码,例如ftp://ftp.fr.debian.org/debian/
for France或ftp://ftp.us.debian.org/debian/
for USA。
然后打开/etc/sysctl.conf
...
vi /etc/sysctl.conf
...并附加以下设置:
[...] ### OpenVZ settings # On Hardware Node we generally need packet # forwarding enabled and proxy arp disabled net.ipv4.conf.default.forwarding=1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.ip_forward=1 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # TCP Explict Congestion Notification net.ipv4.tcp_ecn = 0 # we do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 |
跑
sysctl -p
以使更改生效。
接下来,我们将基本的OpenVZ配置应用于我们的容器:
vzctl set 777 --applyconfig basic --save
您将看到以下可以忽略的警告:
root@server1:~# vzctl set 777 --applyconfig basic --save
WARNING: /etc/vz/conf/777.conf not found: No such file or directory
Saved parameters for CT 777
root@server1:~#
最后一个命令为我们的容器创建了一个新的/etc/vz/conf/777.conf。 我们需要添加OSTEMPLATE
变量,我们可以做如下操作:
sh -c 'echo OSTEMPLATE=\"debian-7.0\"' >> /etc/vz/conf/777.conf
将debian-7.0
替换为新模板使用的分发版本
的适当值,例如Debian Squeeze的debian-6.0
或Ubuntu 11.04
的ubuntu-
11.04。
接下来,我们从我们的子网添加一个免费IP到新容器,并设置至少一个Nameservers,以便容器可以访问Internet。 我在192.168.0.x
网络,所以我分配IP 192.168.0.110
到容器,我使用谷歌的域名服务器( 8.8.8.8
和8.8.4.4
):
vzctl set 777 --ipadd 192.168.0.110 --save
vzctl set 777 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save
接下来检查/ var / lib / vz / private / 777 / dev / ptmx
是否存在:
ls -l /var/lib/vz/private/777/dev/ptmx
产出应如下:
root@server1:~# ls -l /var/lib/vz/private/777/dev/ptmx
crw-rw-rw- 1 root tty 5, 2 Mar 4 12:53 /var/lib/vz/private/777/dev/ptmx
root@server1:~#
如果不存在,创建如下:
mknod --mode 666 /var/lib/vz/private/777/dev/ptmx c 5 2
现在我们开始容器了
vzctl start 777
...并输入:
vzctl enter 777
3准备容器
容器:
这些步骤必须在容器中进行!
设置PATH
变量如下:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
打开/etc/apt/sources.list
...
vi /etc/apt/sources.list
...并让它看起来如下(再次,请确保你使用的Debian镜像靠近你):
deb http://ftp.de.debian.org/debian wheezy main contrib deb http://security.debian.org wheezy/updates main contrib |
更新包数据库...
apt-get update
...并安装最新更新:
apt-get upgrade
现在,您可以使用OpenVZ模板安装所有要提供的软件包。 一小部分包可能如下:
apt-get install ssh quota less vim-nox
将正确的权限分配给/ root目录
:
chmod 700 /root
如果要禁用根登录,请运行
usermod -L root
就个人而言,我更喜欢登录root,所以我省略了这个命令。
接下来,我们禁用systy的getty,sync(),并修复/ etc / mtab
:
sed -i -e '/getty/d' /etc/inittab
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab
现在是删除您不想提供的所有包与您的模板的时间,例如如下所示:
dpkg --purge modutils ppp pppoeconf pppoe pppconfig module-init-tools
接下来我们删除几个服务的系统启动链接:
update-rc.d-insserv -f klogd remove
update-rc.d-insserv -f quotarpc remove
update-rc.d-insserv -f exim4 remove
update-rc.d-insserv -f inetd remove
从此模板创建的每个容器应该有自己的一对SSH密钥,因此我们删除此容器的SSH密钥...
rm -f /etc/ssh/ssh_host_*
...并创建一个脚本,在第一次引导时自动创建一对新的SSH密钥:
vi /etc/init.d/ssh_gen_host_keys
#!/bin/sh ### BEGIN INIT INFO # Provides: Generates new ssh host keys on first boot # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Generates new ssh host keys on first boot # Description: Generates new ssh host keys on first boot ### END INIT INFO ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N "" ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N "" insserv -r /etc/init.d/ssh_gen_host_keys rm -f \$0 |
使脚本可执行并添加系统启动链接:
chmod a+x /etc/init.d/ssh_gen_host_keys
insserv /etc/init.d/ssh_gen_host_keys
接下来调整你的时区:
dpkg-reconfigure tzdata
清理您的包缓存:
apt-get --purge clean
然后退出容器:
exit
4清理,创建模板和测试
主机系统:
这些步骤必须在主机系统上进行!
现在我们从容器中删除IP地址,Nameservers和主机名:
vzctl set 777 --ipdel all --save
cat /dev/null > /vz/private/777/etc/resolv.conf
rm -f /vz/private/777/etc/hostname
停止容器...
vzctl stop 777
...并转到容器目录:
cd /vz/private/777
现在我们创建我们的模板如下:
tar --numeric-owner -zcf /vz/template/cache/debian-7.0-amd64-minimal.tar.gz .
(不要忘记结束的点!)
看看/ vz / template / cache
目录,你应该在那里找到你的新模板(除了任何其他模板):
ls -lh /vz/template/cache
root@server1:/vz/private/777# ls -lh /vz/template/cache
total 194M
-rw-r--r-- 1 root root 80M Feb 7 2011 debian-6.0-amd64-minimal.tar.gz
-rw-r--r-- 1 root root 114M Sep 1 22:55 debian-7.0-amd64-minimal.tar.gz
root@server1:/vz/private/777#
恭喜,您刚刚创建了您的第一个OpenVZ模板!
现在让我们从这个模板创建一个容器来进行测试 - 我在这里使用容器ID 888
:
vzctl create 888 --ostemplate debian-7.0-amd64-minimal
开始吧
vzctl start 888
...并通过检查其进程列表来检查它是否正常运行 - 如果没有启动,您应该不会得到进程列表。
vzctl exec 888 ps ax
root@server1:/vz/private/777# vzctl exec 888 ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [2]
316 ? Sl 0:00 /usr/sbin/rsyslogd -c5
326 ? Ss 0:00 /usr/sbin/cron
335 ? Ss 0:00 /usr/bin/dbus-daemon --system
344 ? Ss 0:00 /usr/sbin/sshd
358 ? Rs 0:00 ps ax
root@server1:/vz/private/777#
好的,它按预期工作,所以我们可以停止并删除这个测试容器:
vzctl stop 888
vzctl destroy 888
rm /etc/vz/conf/888.conf.destroyed
我们也不需要我们创建我们的模板的容器,所以我们也可以删除它:
cd
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed
如果您希望在创建新容器时使用新模板作为默认模板(这样您就不需要
在vzctl create
命令中指定-ostemplate debian-7.0-amd64-minimal
),请将DEF_OSTEMPLATE
变量修改为/ etc / vz / vz.conf
如下:
vi /etc/vz/vz.conf
[...] DEF_OSTEMPLATE="debian-7.0-amd64-minimal" [...] |
5链接
- OpenVZ: http : //openvz.org/
- Debian: http : //www.debian.org/