如何创建一个Debian Wheezy(测试)OpenVZ模板

如何创建一个Debian Wheezy(测试)OpenVZ模板 本教程解释如何为Debian创建一个OpenVZ模板 Wheezy(Debian Testi ...

如何创建一个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.0Ubuntu 11.04ubuntu- 11.04。

接下来,我们从我们的子网添加一个免费IP到新容器,并设置至少一个Nameservers,以便容器可以访问Internet。 我在192.168.0.x网络,所以我分配IP 192.168.0.110到容器,我使用谷歌的域名服务器( 8.8.8.88.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"
[...]