Thủ thuật công nghệ

Cách tạo template OpenVZ trên Debian Wheezy (Testing)

Cách tạo template OpenVZ trên Debian Wheezy (Testing)

 Trong bài viết trước, các bạn đã được hướng dẫn cách cài đặt và sử dụng OpenVZ trên CentOS 6.0. Sau khi đã quen thuộc với công nghệ OpenVZ, hôm nay chúng ta sẽ tiến hành tạo một template OpenVZ cho Debian Wheezy (Debian Testing), từ đó bạn có thể sử dụng để tạo máy ảo Debian Wheezy trong OpenVZ.

<>Bạn cũng có thể thực hiện hướng dẫn này để tạo template cho Debian Lenny hoặc các phiên bản Ubuntu gần đây.

Cách tạo template OpenVZ trên Debian Wheezy (Testing)

Chuẩn bị hệ thống Host

<>Lưu ý các bước này cần thực hiện trên hệ thống máy chủ!

Trước tiên chúng ta tiến hành cài đặt deboostrap cho Wheezy guest:

apt-get install debootstrap

Tiếp theo hãy chắc chắn rằng /vz là một symlink tới /var/lib/vz:

ln -s /var/lib/vz /vz

Bây giờ chúng ta cài đặt phiên bản 64-bit của Debian Wheezy trong thư mục /vz/private/777 (với 777 là container ID của Wheezy guest; bạn có thể thay bằng con số khác nếu muốn).

debootstrap --arch amd64 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/

Giả sử chúng ta muốn tạo một template cho i386, câu lệnh sẽ như sau:

debootstrap --arch i386 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/

Hãy chắc chắn rằng bạn sử dụng một mirror Debian gần với mình nhất. Ở đây chúng tôi dùng mirror từ Đức: ftp://ftp.de.debian.org/debian/; bạn có thể thay thế de bằng mã quốc gia của mình, chẳng hạn ftp://ftp.fr.debian.org/debian/ (Pháp) hoặc ftp://ftp.us.debian.org/debian/ (Mỹ).
Sau đó mở /etc/sysctl.conf:

vi /etc/sysctl.conf

Và thêm vào như dưới đây để thiết lập:

[...]
### 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

Chạy lệnh:

sysctl -p

để những thay đổi có hiệu lực.

Tiếp theo chúng ta áp dụng một cấu hình OpenVZ cơ bản cho container:

vzctl set 777 --applyconfig basic --save

Một cảnh báo sau đây xuất hiện, hãy bỏ qua nó.

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:~#

Dòng lệnh cuối cùng đã tạo ra một /etc/vz/conf/777.conf cho nội dung của chúng ta. Tiếp theo cần thêm biến OSTEMPLATE cho nó:

sh -c 'echo OSTEMPLATE="debian-7.0"' >> /etc/vz/conf/777.conf

Bạn có thể thay thế debian-7.0 bởi giá trị thích hợp cho distribution của mình để sử dụng template mới. Ví dụ: debian-6.0 cho Debian Squeeze hoặc ubuntu-11.04 cho Ubuntu 11.04.

Tiếp theo chúng ta thêm một địa chỉ IP miễn phí từ subnet cho container mới và thiết lập ít nhất một <>nameserver chứa container để truy cập vào Internet. Ở đây chúng tôi đang trong mạng 192.168.0.x, vì vậy sẽ gán 192.168.0.110 cho container, đồng thời sử dụng nameservers của Google (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

Kiểm tra nếu /var/lib/vz/private/777/dev/ptmx tồn tại:

ls -l /var/lib/vz/private/777/dev/ptmx

thì bạn sẽ thấy nội dung sau:

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:~#

Ngược lại, hãy tạo nó bằng cách:

mknod --mode 666 /var/lib/vz/private/777/dev/ptmx c 5 2

Khởi động container:

vzctl start 777

Và nhập vào:

vzctl enter 777

Chuẩn bị Container

Các bước tiếp theo phải được thực hiện trong Container!

Thiết lập biến PATH:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Mở /etc/apt/sources.list:

vi /etc/apt/sources.list

Và làm cho nó trông như thế này:

deb http://ftp.de.debian.org/debian wheezy main contrib
deb http://security.debian.org wheezy/updates main contrib

(một lần nữa hãy chắc chắn rằng bạn sử dụng một mirror Debian gần nhất với mình).

Cập nhật gói cơ sở dữ liệu:

apt-get update

Và cài đặt các bản cập nhật mới nhất:

apt-get upgrade

Bây giờ bạn có thể cài đặt toàn bộ các gói mà muốn cung cấp cho template OpenVZ. Thiết lập tối thiểu cho chúng như sau:

apt-get install ssh quota less vim-nox

Gán quyền chính xác cho thư mục /root:

chmod 700 /root

Ngoài ra, Nếu muốn bạn có thể vô hiệu hóa đăng nhập root:

usermod -L root

Tuy nhiên trong bài này chúng tôi vẫn sử dụng root nên bỏ qua lệnh này.

Tiếp theo chúng ta vô hiệu hóa getty, sync() cho syslog và sửa chữa /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

Loại bỏ những gói không muốn cung cấp cho template:

dpkg --purge modutils ppp pppoeconf pppoe pppconfig module-init-tools

Loại bỏ các liên kết startup hệ thống cho một vài dịch vụ:

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

Mỗi container được tạo từ template này cần có các cặp key SSH, vì vậy chúng ta sẽ xóa key SSH khỏi container:

rm -f /etc/ssh/ssh_host_*

Rồi tạo một script tự động tạo cặp key SSH cho lần đầu tiên khởi động:

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

Thực thi script này và thêm các liên kết cho hệ thống startup:

chmod a+x /etc/init.d/ssh_gen_host_keys
insserv /etc/init.d/ssh_gen_host_keys

Tiếp theo cần điều chỉnh lại timezone (múi giờ):

dpkg-reconfigure tzdata

Làm sạch bộ nhớ đệm cho các gói:

apt-get --purge clean

Thoát khỏi container

exit

Dọn dẹp, tạo Template và thử nghiệm

Các bước này phải thực hiện trên hệ thống máy chủ!

Bây giờ chúng ta sẽ loại bỏ IP address, nameservers, và hostname từ container:

vzctl set 777 --ipdel all --save
cat /dev/null > /vz/private/777/etc/resolv.conf
rm -f /vz/private/777/etc/hostname

Dừng các container:

vzctl stop 777

Chuyển tới thư mục container:

cd /vz/private/777

Tạo template:

tar --numeric-owner -zcf /vz/template/cache/debian-7.0-amd64-minimal.tar.gz .

(Lưu ý không được bỏ qua dấu chấm ở cuối lệnh).

Xem trong thư mục /vz/template/cache bạn sẽ tìm thấy template mới.

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#

Vậy là bạn đã tạo ra một template OpenVZ đầu tiên.

Bây giờ chúng ta sẽ tạo container từ template này để thử nghiệm. Ví dụ dùng ID 888:

vzctl create 888 --ostemplate debian-7.0-amd64-minimal

Khởi động nó:

vzctl start 888

Và kiểm tra xem có chạy thành công hay không bằng cách xem danh sách tiến trình của nó. Nếu không có danh sách nào chứng tỏ bạn đã thất bại.

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#

Sau khi kiểm tra hoạt động, chúng ta cho dừng lại và loại bỏ container thử nghiệm:

vzctl stop 888
vzctl destroy 888
rm /etc/vz/conf/888.conf.destroyed

Nếu không cần đến container nữa, tốt nhất hãy loại bỏ nó.

cd
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed

Nếu bạn muốn sử dụng template mới làm mặc định cho template khi tạo container (để không còn phải xác định --ostemplate debian-7.0-amd64-minimal trong lệnh vzctl create), có thể chỉnh sửa biến DEF_OSTEMPLATE trong /etc/vz/vz.conf:

vi /etc/vz/vz.conf

[...]
DEF_OSTEMPLATE="debian-7.0-amd64-minimal"
[...]

<>Các link tham khảo trong bài:

OpenVZ: http://openvz.org/
Debian: http://www.debian.org/