ปกติแล้ว Proxmox VE เอง จะมี Template สำเร็จไว้ให้เราดาวน์โหลดใช้งานกัน แต่ถ้าเรามีโปรแกรมเฉพาะ แล้วต้องการสร้าง Template ไว้ใช้เอง จะทำยังไง อยากรู้วิธีก็มาลองกันเลย ในขั้นตอนการสร้าง OpenVZ Template มีขั้นตอนหลักๆอยู่ 3 ขั้นตอนด้วยกัน
- Installation ติดตั้ง OS ที่จะนำมาใช้เป็น Template บน physical server หรือ virtual server
- Transferring โอนย้าย OS ที่ติดตั้งไปยัง OpenVZ virtual server (container) ในที่นี้ย้ายไปบน Proxmox
- Modify ปรับแต่ง OS ที่ transfer มาให้ตามความต้องการและสร้างเป็น Template
เริ่มในส่วน Installation ก่อน
เครื่อง guest
สำหรับตัวอย่างจะใช้ CentOS เวอร์ชัน 6-x86_64 เป็นระบบปฎิบัติการในการสร้าง Template
ในขั้นตอนแรกให้ทำการติดตั้ง CentOS ลงบนเครื่อง Proxmox VE แบบ Container หรือ VM ตามปกติ
หลังจากติดตั้ง CentOS ลงเครื่อง Proxmox VE เรียบร้อย ให้ทำการติดตั้ง openssh, oepnssh-server,rsync และทำการ update และ upgrade CentOS ด้วยคำสั่ง
$ yum update
$ yum upgrade
$ yum install openssh openssh-server rsync
ติดตั้ง package อื่นลงไปตามความต้องการเพื่อนำไปใช้งาน หรือ ลบ package ที่ไม่จำเป็นออกเช่น
$ yum install vim
$ yum remove matahari matahari-lib qpid-cpp-server
$ clean rpm db
$ yum clean all
ต่อไปในส่วน Transfer to OpenVZ
ที่เครื่อง Host
ขั้นตอนต่อมาคือการโอนย้ายระบบปฏิบัติการที่ทำการติดตั้งแล้วมายัง OpenVZ container ทำการ sshเข้าเครื่อง Proxmox VE เมื่อเข้ามาแล้วให้สร้าง symbolic link ไปยัง Path : /var/lib/vz เพื่อง่ายต่อการปรับแต่งด้วยคำสั่ง
$ ln -s /var/lib/vz /vz
จากนั้นกำหนด container id(CTID) ที่ยังไม่ได้ใช้งานให้ OpenVZ template ในตัวอย่างจะกำหนดให้ CTID ของเครื่อง OpenVZ template เป็น 100 โดยใช้คำสั่ง
$ CTID=100
เพื่อให้แน่ใจว่ากำหนด CTID ถูกต้องให้ลองใช้คำสั่ง
$ echo $CTID
ที่หน้าจอต้องแสดง CTID = 100 ตามที่เรากำหนด
เพื่อไม่ให้ CTID ชนกับตัวอื่น เราสามารถตรวจสอบ CTID ที่ใช้งานอยู่ได้ด้วยคำสั่ง ดังนี้
vzlist -a
ลำดับต่อมาสร้าง directory เพื่อเก็บไฟล์ของเครื่อง OpenVZ template
$ mkdir /vz/private/$CTID
หลังจากสร้าง directory เรียบร้อยแล้วลำดับต่อมาทำโอนย้ายข้อมูลจาก CentOS ที่เราติดตั้งบน physical server หรือ virtual server มายังเครื่อง proxmox ด้วยคำสั่ง
$ sudo rsync -arvpz --exclude=/dev --exclude=/mnt --exclude=/proc --exclude=/sys
--exclude=/tmp -e ssh root@xx.xx.xx.xx:/ /vz/private/$CTID/
สำหรับ ip xx.xx.xx.xx คือ ip ของเครื่อง CentOS ต้นแบบที่เราจะนำมาปรับแต่งโดยการโอนย้าย
จากนั้น Modify the transferred fles
ที่เครื่อง Host
Container จะไม่ได้รับ ttys ที่แท้จริง , ให้ทำการ disable getty ก่อน
$ sed -i -e 's/^[0-9].*getty.*tty/#&/g' /vz/private/$CTID/etc/inittab
ปรับแต่ง fstab และ Disk partition ที่ไม่ต้องการในเครื่อง container ให้ลบ content ใน /vz/private/$CTID/etc/fstab ทั้งหมดและแทนที่ด้วย
$ echo "none /dev/pts devpts rw 0 0" > /vz/private/$CTID/etc/fstab
$ echo "proc /proc proc defaults 0 0" >> /vz/private/$CTID/etc/fstab
สร้าง directory เพิ่มเติม /dev, /mnt, /proc, /sys, /tmp
$ mkdir /vz/private/$CTID/dev
$ mkdir /vz/private/$CTID/mnt
$ mkdir /vz/private/$CTID/proc
$ mkdir /vz/private/$CTID/sys
$ mkdir /vz/private/$CTID/tmp
กำหนด permission เป็น 0755 สำหรับ directory ที่สร้างใหม่และ directory อื่นๆ
สร้าง directory devpts
$ mkdir /vz/private/$CTID/dev/pts
สร้าง /etc/udev/devices
$ mkdir /vz/private/$CTID/etc/udev/devices
กำหนด permission ให้ directory /tmp และ /var/tmp
$ chmod 1777 /vz/private/$CTID/tmp
$ chmod 1777 /vz/private/$CTID/var/tmp
Disable Network interface เมื่อเปิดเครื่อง ให้ ONBOOT= “NO” ใช้คำสั่ง
$ sed -i -e 's/ONBOOT="yes"/ONBOOT="no"/g' /vz/private/$CTID/etc/sysconfg/networkscripts/ifcfg-eth*
ลบ HWADDR จาก network interface
$ sed -i -e 's/^\(HWADDR=.*\)$//g' /vz/private/$CTID/etc/sysconfg/network-scripts/ifcfgeth*
เปลี่ยน PROMPT = yes เป็น PROMPT = no ใน sysconfg/init
$ sed -i -e 's/PROMPT=yes/PROMPT=no/g' /vz/private/$CTID/etc/sysconfg/init
นำคอมเม้นออกจากไฟล์ rc.conf
$ sed -i -e 's/^\(console.*\)$/#\1/g' /vz/private/$CTID/etc/init/rc.conf
ปรับปรุง Disk quota
$ rm -f /vz/private/$CTID/etc/mtab
$ ln -s /vz/private/$CTID/proc/mounts /etc/mtab
ลบ ssh host keys ของ CentOS เดิม
$ rm -f /vz/private/$CTID/etc/ssh/ssh_host_*
ลบ boot และ kernel
$ rm -rf /vz/private/$CTID/boot/*.*
$ for i in `rpm -q kernel`; do rpm -e --nodeps $i; done
ลบข้อมูลของในส่วนชื่อ hostname, และ DNS confg เดิมของเครื่องต้นแบบ
$ rm /vz/private/$CTID/etc/resolv.conf
$ touch vz/private/$CTID/etc/resolv.conf
$ rm /vz/private/$CTID/etc/hostname
เคลียร์ log fles
$ rm /vz/private/$CTID/var/log/messages
$ rm /vz/private/$CTID/var/log/boot.log
$ rm /vz/private/$CTID/var/log/yum.log
$ rm /vz/private/$CTID/var/log/anaconda.syslog
สร้าง Template
ที่เครื่อง Host
เข้าไปที่ Path ที่เก็บ container template
$ cd /vz/privte/$CTID
แพ็คไฟล์ template ดัวยคำสั่ง
$ tar -czvf /vz/template/cache/centos-6-x86_64_custom.tar.gz ./
จากนั้น template ก็พร้อมนำไปใช้งานได้แล้ว