2 DEBMIRROR=http://ftp.fr.debian.org/debian
3 RINSECONF=/etc/rinse/rinse.conf
5 RINSEPOSTINST=--after-post-install $(CURDIR)/local.rinse.api
8 ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
9 EXTRADEBPACKAGE=--include=ssh,less,htop,zsh,vim,debconf-utils
10 EXTRACOSPACKAGE=openssh-server,man,zsh,bind-utils,openssh-clients,php,wget
12 DEBOOTSTRAP=/usr/sbin/debootstrap
13 RINSE=extrapackage="$(EXTRACOSPACKAGE)" /usr/sbin/rinse
16 include ../config/default
18 # Optional local change
19 -include ../config/$(shell hostname)
21 # Local customization can be done using a local.<hostname> file
22 # This is convenient if you use local mirror
23 -include local.$(shell hostname)
26 @echo "Run make <target>"
27 @echo "Available targets are:"
28 @echo " make net : this will setup a /etc/vz/vznet.conf to register new virtual host to vmbr0 bridge"
29 @echo " See interfaces.sample to know how to setup a bridge"
30 @echo " make builddebiantemplate : build an openvz debian template (uses VEIDDEBTEMP=$(VEIDDEBTEMP))"
31 @echo " make buildcentostemplate : build an openvz centos template (uses VEIDCOSTEMP=$(VEIDCOSTEMP))"
33 @echo " make createdeb : build a debian openvz vm with ID=$(VEIDDEB) from the debian template"
34 @echo " make netdhcpdeb : set dhcp network for debian openvz vm with ID=$(VEIDDEB)"
35 @echo " make netstaticdeb: set static network for debian openvz vm with ID=$(VEIDDEB)"
37 @echo " make createcentos : build a centos openvz vm with ID=$(VEIDCOS) from the centos template"
38 @echo " make netdhcpcentos : set dhcp network for centos openvz vm with ID=$(VEIDCOS)"
39 @echo " make netstaticcentos: set static network for centos openvz vm with ID=$(VEIDCOS)"
41 @echo "Read Makefile for other targets"
43 builddebiantemplate: beroot builddebianvm
44 $(VZCTL) set $(VEIDDEBTEMP) --ostemplate debian-$(DEBVERS) --applyconfig basic --save
46 #rm $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/ssh/ssh_host_*
47 # Disable getty in /etc/inittab as openvz do not have that.
48 [ ! -f $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/inittab ] || (grep -q getty $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/inittab || \
49 sed -i -e '/getty/d' $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/inittab)
50 # Link /etc/mtab to /proc/mtab to make mount work as expected.
51 rm -f $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/mtab
52 ln -s /proc/mounts $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/mtab
54 #ln -sf /usr/share/zoneinfo/Europe/Paris $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/localtime
56 [ ! -f $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/hostname ] || rm $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/hostname
57 ## NOW uses vzctl set $(VEIDDEBTEMP) --hostname command
58 ##grep -q debian6.local $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/hosts || \
59 ## sed -i -e 's/localhost/debian6.local localhost/' $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/hosts
60 ##echo "debian6.local" > $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/hostname
62 [ -c $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/dev/ptmx ] || chroot $(VZPRIVATEDIR)/$(VEIDDEBTEMP) /bin/mknod /dev/ptmx c 5 2
63 [ -d $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/root/.ssh ] || mkdir -p $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/root/.ssh
64 cp $(SSHPUBKEY) $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/root/.ssh/authorized_keys
65 cp ssh/ssh_host_* $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/etc/ssh/
66 cd $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/ ; tar --numeric-owner -zcf $(VZTEMPLATEDIR)/cache/debian-$(DEBVERS)-$(ARCH)-minimal.tar.gz .
68 buildcentostemplate: beroot buildcentosvm
69 $(VZCTL) set $(VEIDCOSTEMP) --ostemplate centos-$(COSVERS) --applyconfig basic --save
70 #rm $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/ssh/ssh_host_*
71 # Disable getty in /etc/inittab as openvz do not have that.
72 [ ! -f $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/inittab ] || (grep -q getty $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/inittab || \
73 sed -i -e '/getty/d' $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/inittab)
75 sed -i -e '/start_udev/d' $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/rc.d/rc.sysinit
76 # Link /etc/mtab to /proc/mtab to make mount work as expected.
77 rm -f $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/mtab
78 ln -s /proc/mounts $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/mtab
80 #ln -sf /usr/share/zoneinfo/Europe/Paris $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/localtime
82 [ ! -f $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/hostname ] || rm $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/hostname
83 ## NOW uses vzctl set $(VEIDCOSTEMP) --hostname command
84 ##echo "127.0.0.1 centos5.local localhost.localdomain localhost" > $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/hosts
85 ##echo "centos5.local" > $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/hostname
86 ##echo "HOSTNAME=centos5.local" >> $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/sysconfig/network
88 [ -c $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/ptmx ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mknod /dev/ptmx c 5 2
89 [ -d $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/pts ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mkdir /dev/pts
90 [ -c $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/vz/private/50/dev/ttyp ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /sbin/MAKEDEV -d /vz/private/50/dev ttyp ptyp
91 -rm -f $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/null
92 [ -c $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/null ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mknod /dev/null c 1 3
93 chmod ugo+w $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/null
94 [ -c $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/random ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mknod -m 644 /dev/random c 1 8
95 -rm -f $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/urandom
96 [ -c $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/urandom ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mknod /dev/urandom c 1 9
97 chmod ugo+w $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/dev/urandom
98 [ -d $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/var/lock/rpm ] || chroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP) /bin/mkdir /var/lock/rpm
99 touch $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/fstab
100 grep -q devpts $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/fstab || \
101 echo "none /dev/pts devpts mode=0620 0 0" >> $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/fstab
102 [ -d $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/root/.ssh ] || mkdir $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/root/.ssh
103 cp $(SSHPUBKEY) $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/root/.ssh/authorized_keys
104 cp ssh/ssh_host_* $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/etc/ssh/
105 cd $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/ ; tar --numeric-owner -zcf $(VZTEMPLATEDIR)/cache/centos-$(COSVERS)-$(ARCH)-minimal.tar.gz .
107 builddebianvm: beroot $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/tmp/vzdebvm
109 $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/tmp/vzdebvm:
110 [ -d $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/tmp/vzdebvm ] || ($(DEBOOTSTRAP) --arch $(ARCH) $(EXTRADEBPACKAGE) $(DIST) $(VZPRIVATEDIR)/$(VEIDDEBTEMP) $(DEBMIRROR) && touch $(VZPRIVATEDIR)/$(VEIDDEBTEMP)/tmp/vzdebvm)
112 buildcentosvm: beroot $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/tmp/vzcentvm
114 $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/tmp/vzcentvm:
115 [ -d $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/tmp/vzcentvm ] || ($(RINSE) $(RINSEBPI) $(RINSEPOSTINST) --config $(RINSECONF) --arch $(ARCH) --distribution centos-5 --directory $(VZPRIVATEDIR)/$(VEIDCOSTEMP) && touch $(VZPRIVATEDIR)/$(VEIDCOSTEMP)/tmp/vzcentvm)
118 [ ! -d $(VZPRIVATEDIR)/$(VEID) ] || $(VZCTL) stop $(VEID)
119 [ ! -d $(VZPRIVATEDIR)/$(VEID) ] || $(VZCTL) destroy $(VEID)
120 -rm -f /etc/vz/conf/$(VEID).conf.destroyed
123 make cleanvz VEID=$(VEIDCOS)
126 make cleanvz VEID=$(VEIDDEB)
130 $(VZCTL) set $(VEIDDEB) --netif_add eth0 --save
132 grep -q "auto lo" $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces || \
133 echo "auto lo" >> $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces
134 grep -q "iface lo inet loopback" $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces || \
135 echo "iface lo inet loopback" >> $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces
136 grep -q "auto eth0" $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces || \
137 echo "auto eth0" >> $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces
138 grep -q "iface eth0 inet dhcp" $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces || \
139 echo "iface eth0 inet dhcp" >> $(VZPRIVATEDIR)/$(VEIDDEB)/etc/network/interfaces
140 # Setup dhclient extra
141 grep -q "^send host-name" $(VZPRIVATEDIR)/$(VEIDDEB)/etc/dhcp/dhclient.conf || \
142 echo "send host-name \"`hostname`-$(VEIDDEB)\";" >> $(VZPRIVATEDIR)/$(VEIDDEB)/etc/dhcp/dhclient.conf
145 $(VZCTL) set $(VEIDDEB) --hostname `hostname`-$(VEIDDEB) --save
146 $(VZCTL) set $(VEIDDEB) --ipadd $(IPDEBBASE).$(VEIDDEB) --save
147 $(VZCTL) set $(VEIDDEB) --nameserver $(IPDEBDNS) --save
149 netdhcpcentos: beroot
151 $(VZCTL) set $(VEIDCOS) --netif_add eth0 --save
153 echo "DEVICE=eth0" > $(VZPRIVATEDIR)/$(VEIDCOS)/etc/sysconfig/network-scripts/ifcfg-eth0
154 echo "BOOTPROTO=dhcp" >> $(VZPRIVATEDIR)/$(VEIDCOS)/etc/sysconfig/network-scripts/ifcfg-eth0
155 echo "ONBOOT=yes" >> $(VZPRIVATEDIR)/$(VEIDCOS)/etc/sysconfig/network-scripts/ifcfg-eth0
156 # Setup dhclient extra
157 [ -f $(VZPRIVATEDIR)/$(VEIDCOS)/etc/dhclient.conf ] || \
158 echo "send host-name \"`hostname`-$(VEIDCOS)\";" > $(VZPRIVATEDIR)/$(VEIDCOS)/etc/dhclient.conf
160 netstaticcentos: beroot
161 $(VZCTL) set $(VEIDCOS) --hostname `hostname`-$(VEIDCOS) --save
162 $(VZCTL) set $(VEIDCOS) --ipadd $(IPCOSBASE).$(VEIDCOS) --save
163 $(VZCTL) set $(VEIDCOS) --nameserver $(IPCOSDNS) --save
166 sysctl -w net.ipv4.ip_forward=1
167 sysctl -w net.ipv4.conf.default.forwarding=1
168 sysctl -w net.ipv4.conf.default.proxy_arp=0
169 sysctl -w net.ipv4.conf.all.rp_filter=1
170 sysctl -w kernel.sysrq=1
172 net: /etc/vz/vznet.conf
175 echo '#!/bin/bash' > /etc/vz/vznet.conf
176 echo 'EXTERNAL_SCRIPT="/usr/sbin/vznetaddbr"' >> /etc/vz/vznet.conf
179 # Prefered method is to change /etc/network/interfaces
180 #sudo brctl addbr vmbr0
181 #sudo ifconfig vmbr0 0
182 #sudo brctl addif vmbr0 eth0
184 createdeb: beroot cleandeb
185 $(VZCTL) create $(VEIDDEB) --private $(VZPRIVATEDIR)/$(VEIDDEB) --ostemplate debian-$(DEBVERS)-$(ARCH)-minimal
188 createcentos: beroot cleancentos
189 $(VZCTL) create $(VEIDCOS) --private $(VZPRIVATEDIR)/$(VEIDCOS) --ostemplate centos-$(COSVERS)-$(ARCH)-minimal
193 @[ $(shell id -u) = "0" ] || (echo "you should be root to run this" ; exit 1)
196 sudo $(VZCTL) start $(VEID)