Archlinux Template creation

From OpenVZ Virtuozzo Containers Wiki
Revision as of 21:22, 11 December 2012 by Zootboy (talk | contribs) (clarified the mkarchroot method and added a link.)
Jump to: navigation, search

Instructions manually create a minimal Archlinux (0.8) "Voodoo" OS Template.

Prerequisites

I used a modified archbootstrap script which can be found at http://forzza.systs.org/openvz-misc/

Yellowpin.svg Note: This link is currently broken
Yellowpin.svg Note: One can use mkarchroot (provided by devtools) in place of archbootstrap if building the template on Archlinux. See Disussion for a bash script to do this. The script makes it easy to build an image on an arch machine, then copy the zipped template over to your VZ host.

Edit settings of script "archbootstrap" :

ARCH="i686"
IGNORE="rp-pppoe ppp wireless_tools xfsdump xfsprogs reiserfsprogs lshwd usbutils pciutils pcmciautils module-init-tools mdadm mkinitcpio libusb jfsutils lvm2 lilo cryptsetup device-mapper dhcpcd hwdetect dmapi gen-init-cpio grub"
umark PACMAN_OPTS (remove '#')


Yellowpin.svg Note: I suggest to place the build for OpenVZ templates to /vz/template/, schema: /vz/template/$DIST/$VERSION/$ARCH/

Built this OS-Template with:

CT0_dist Debian
CT0_ARCH i386
DIST arch
VERSION 0.8
ARCH depends on CT0 settings above

bootstrapping Archlinux

Syntax:

CT0_# /usr/bin/archbootstrap /vz/template/$DIST/$VERSION/$ARCH/ [MIRROR]
Yellowpin.svg Note: Please use mirrors! A full list of Archlinux mirrors: http://wiki.archlinux.org/index.php/Mirror

enter the Build with chroot

All the commands below are executed from the root shell. I this howto "chroot" is used to enter as NEWROOT, a BUILD-VE must not be created!

CT0_# chroot /vz/template/$DIST/$VERSION/$ARCH/

setting DNS server

For the chroot BUILD we also need to specify a DNS for it:

BUILD_# mv /etc/resolv.conf.pacorig /etc/resolv.conf

update and install packages

Update (sync) pacman cache and update installed packages

BUILD_# pacman -Syu

Install openssh (client and server) , quota-tools and iproute

BUILD_# pacman -S openssh quota-tools iproute

fix /etc/mtab

Add symlink /proc/mount /etc/mtab

BUILD_# ln -s /proc/mounts /etc/mtab

fix /etc/inittab

Remove getty lines from inittab:

BUILD_# sed -i -e '/getty/d' /etc/inittab

create device nodes

Create device nodes at /dev, like console, full, null, zero, urandom, ptmx and fifo of initctl

BUILD_# mknod -m 600 /dev/console c 5 1
BUILD_# mknod -m 666 /dev/tty c 5 0
BUILD_# mknod -m 666 /dev/full c 1 7
BUILD_# mknod -m 600 /dev/initctl p
BUILD_# mknod -m 666 /dev/null c 1 3
BUILD_# mknod -m 666 /dev/ptmx c 5 2 
BUILD_# mkdir pts
BUILD_# mknod -m 666 /dev/random c 1 8
BUILD_# mknod -m 444 /dev/urandom c 1 9 
BUILD_# mknod -m 666 /dev/zero c 1 5

sysinit script modification

Remove deleting of /etc/mtab in /etc/rc.sysinit and add mounting of /dev/pts

BUILD_# nano /etc/rc.sysinit
[...]
/bin/rm -f /etc/mtab
[...]

to

[...]
#/bin/rm -f /etc/mtab
/bin/mount -t devpts none /dev/pts
[...]

modify the main configuration file

BUILD_# nano /etc/rc.conf


# Localization
LOCALE="en_US.utf8"
HARDWARECLOCK="localtime"
# example : German KEYMAP and Timezone to Berlin
TIMEZONE="Europe/Berlin"
KEYMAP="de-latin1-nodeadkeys"
CONSOLEFONT=
CONSOLEMAP=
USECOLOR="yes"
# Network settings
HOSTNAME="localhost"
# DAEMONS
# Add openssh to DAEMONS, start at bootup ; ssh-keys are build on first VE start !!!
DAEMONS=(syslog-ng network netfs crond ssh)

enable ssh connections

Yellowpin.svg Note: All connection are disabled to VE, see /etc/hosts.deny, only affected server built-in with libwrap

Allow ssh:

BUILD_# echo "ssh: ALL : ALLOW" >> /etc/hosts.allow

lock (disable) the root account

BUILD_# passwd -l root

exit the chroot to CT0

BUILD_# exit

build a exclude list

Shrink the OS-Template, so not all files needed in a VE - OS - TEMPLATE

Remove unused pacman backup files:

CT0_# find ./ -name '*.pacorig' > ../exclude.list-$ARCH

/etc/resolv.conf is added by vzctl:

CT0_# echo "etc/resolv.conf" >> ../exclude.list-$ARCH

Don't add downloaded pkg to ostemplate:

CT0_# find ./var/cache/ -name '*.tar.gz' >> ../exclude.list-$ARCH

We dont need no logs and history:

CT0_# find ./var/cache/ -name '*.tar.gz' >> ../exclude.list-$ARCH
CT0_# find ./root/.bash_history >> ../exclude.list-$ARCH

create OS template

CT0_# tar --numeric-owner -X ../exclude.list-$ARCH -czf /vz/template/cache/arch-0.8-$ARCH-minimal.tar.gz ./

use the OS template

CT0_# vzctl create <VEID> --ostemplate arch-0.8-$ARCH-minimal ...

update the OS template

To update a template is really easy, enter the build with chroot, performing upgrade task

CT0_# chroot /vz/template/$DIST/$VERSION/$ARCH/ 'pacman -Syu'

Update the exclude list, and pack upgraded OS - Template

Links