Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Archlinux Template creation

2,492 bytes added, 04:44, 21 February 2013
Added updated script and notice re: outdated instructions
Instructions manually create a minimal Archlinux (0.8) "Voodoo" OS TemplateScript & archived instructions for creating an Arch container.
== Prerequisites Script ==
I used Script for creating a modified archbootstrap minimal Arch Linux template adapted from the script which can be found at httpin [[Talk:Archlinux_Template_creation|Disussion]].<pre>#!/bin/forzzabash -x DISTRO=archVERSION=2013 # set up base system plus:# syslinux (necessary? i don't think it is...)# vim (because nano is lame)# openssh# ...any other package from standard Arch repos..systs.org/openvzPACKS="base base-misc/devel syslinux openssh vim"
Edit settings of script "archbootstrap" MIRROR1=http://mirror.umoss.org/archlinuxMIRROR2=http://mirror.rit.edu/archlinux
<pre>if [[ ${1} == 64 ]]; then ARCH=x86_64else if [[ ${1} == 32 ]]; then ARCH="i686"IGNORE= else echo "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 grubUsage: ${0} 32|64" exit 1 fifi
umark PACMAN_OPTS (remove '#')</pre>ROOT=${DISTRO}-${VERSION}-${ARCH}
{{Note|I suggest to place the build for OpenVZ templates to /vz/template/, schema: /vz/template/TEMPLATE=$DIST(pwd)/$VERSION/$ARCH/}{ROOT}.tar.gz
<pre>if [[ "$(whoami)" == "root" ]]; thenBuilt this OS-Template echo "Building template: ${ROOT}"else echo "This script must be run as root (or with:sudo)" exit 1fi
VE0_dist Debiancat <<EOF > pacman.confVE0_ARCH i386[options]HoldPkg = pacman glibcSyncFirst = pacmanArchitecture = ${ARCH}
DIST arch[core]VERSION 0Server = ${MIRROR1}/\$repo/os/${ARCH}Server = ${MIRROR2}/\$repo/os/${ARCH}Include = /etc/pacman.d/mirrorlist[extra]Server = ${MIRROR1}/\$repo/os/${ARCH}Server = ${MIRROR2}/\$repo/os/${ARCH}Include = /etc/pacman.8d/mirrorlist[community]Server = ${MIRROR1}/\$repo/os/${ARCH}Server = ${MIRROR2}/\$repo/os/${ARCH depends on VE0 settings above}<Include = /pre>etc/pacman.d/mirrorlistEOF
mkarchroot -C pacman.conf ${ROOT} ${PACKS}
== bootstrapping Archlinux ==if [[ $? -ne 0 ]]; then echo "Build failed". exit 1fi
Syntax:chmod 666 ${ROOT}/dev/nullchmod 666 ${ROOT}/dev/zeromknod -m 666 ${ROOT}/dev/random c 1 8mknod -m 666 ${ROOT}/dev/urandom c 1 9mkdir -m 755 ${ROOT}/dev/ptsmkdir -m 1777 ${ROOT}/dev/shmmknod -m 666 ${ROOT}/dev/tty c 5 0mknod -m 666 ${ROOT}/dev/full c 1 7mknod -m 600 ${ROOT}/dev/initctl pmknod -m 666 ${ROOT}/dev/ptmx c 5 2
VE0_# /usr/bin/archbootstrap /vz/template/$DIST/$VERSION/$ARCH/ [MIRROR]
{{Note|Please use mirrors ! A full list of Archlinux mirrors : http:/# we don't need any getty entries in a containersed 's/wiki^.archlinux*getty.org*$/index.php/Mirror}' -i ${ROOT}/etc/inittab
cd ${ROOT}
tar czvf ${TEMPLATE} .
== enter the Build with chroot ==echo "Created template: ${ROOT}"</pre>
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!== Manual Instructions ==
VE0_# chroot /vz/template/$DIST/$VERSION/$ARCH/The instructions below are informative but out of date and likely '''will not''' work with an Arch system built after 2011.
=== Prerequisites ===
=== setting DNS server ===I used a modified archbootstrap script which can be found at http://forzza.systs.org/openvz-misc/{{Note | This link is currently broken}}{{Note | One can use mkarchroot (provided by devtools) in place of archbootstrap if building the template on Archlinux. See [[Talk:Archlinux_Template_creation|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.}}
For the chroot BUILD we also need to specify a DNS for itEdit settings of script "archbootstrap" :
BUILD_# mv /etc/resolv.conf.pacorig /etc/resolv.conf 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 '#')
=== update and install packages ===
Update (sync) pacman cache and update installed packages{{Note|I suggest to place the build for OpenVZ templates to /vz/template/, schema: /vz/template/$DIST/$VERSION/$ARCH/}}
BUILD_# pacman Built this OS-SyuTemplate with:
{| class="wikitable"
|| [[CT0]]_dist || Debian
|-
|| [[CT0]]_ARCH || i386
|-
|| DIST || arch
|-
|| VERSION || 0.8
|-
|| ARCH || depends on CT0 settings above
|}
Install openssh (client and server) , quota-tools and iproute=== bootstrapping Archlinux ===
BUILD_# pacman -S openssh quota-tools iprouteSyntax:
CT0_# /usr/bin/archbootstrap /vz/template/$DIST/$VERSION/$ARCH/ [MIRROR]
=== fix {{Note|Please use mirrors! A full list of Archlinux mirrors: http:/etc/mtab ===wiki.archlinux.org/index.php/Mirror}}
Add symlink /proc/mount /etc/mtab=== enter the Build with chroot ===
BUILD_# ln All the commands below are executed from the root shell. I this howto "chroot" is used to enter as NEWROOT, a BUILD-s /proc/mounts /etc/mtabVE must not be created!
CT0_# chroot /vz/template/$DIST/$VERSION/$ARCH/
=== fix /etc/inittab = setting DNS server ====
Remove getties from inittabFor the chroot BUILD we also need to specify a DNS for it:
BUILD_# sed -i -e 'mv /gettyetc/d' resolv.conf.pacorig /etc/inittabresolv.conf
==== update and install packages ====
=== create device nodes ===Update (sync) pacman cache and update installed packages
Create device nodes at /dev, like console, full, null, zero, urandom, ptmx and fifo of initctl BUILD_# pacman -Syu
BUILD_# mknod Install openssh (client and server) , quota-m 600 /dev/console c 5 1tools and iproute
BUILD_# mknod pacman -m 666 /dev/tty c 5 0S openssh quota-tools iproute
BUILD_# mknod -m 666 ==== fix /devetc/full c 1 7mtab ====
BUILD_# mknod -m 600 Add symlink /devproc/initctl pmount /etc/mtab
BUILD_# mknod ln -m 666 s /devproc/null c 1 3mounts /etc/mtab
BUILD_# mknod -m 666 ==== fix /devetc/ptmx c 5 2 inittab ====
BUILD_# mkdir ptsRemove getty lines from inittab:
BUILD_# mknod sed -m 666 i -e '/getty/d' /devetc/random c 1 8inittab
BUILD_# mknod -m 444 /dev/urandom c 1 9 ==== create device nodes ====
BUILD_# mknod -m 666 Create device nodes at /dev/, like console, full, null, zero c 1 5, 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
<pre> [...] /bin/rm -f /etc/mtab [...]</pre>
to
<pre> [...] #/bin/rm -f /etc/mtab /bin/mount -t devpts none /dev/pts [...]</pre>
==== modify the main configuration file ====
=== modify the main configuration file === BUILD_# nano /etc/rc.conf
BUILD_# nano /etc/rc.conf
<pre>
# Localization
LOCALE="en_US.utf8"
# Add openssh to DAEMONS, start at bootup ; ssh-keys are build on first VE start !!!
DAEMONS=(syslog-ng network netfs crond ssh)
</pre>
 
==== enable ssh connections ====
{{Note|All connection are disabled to VE, see /etc/hosts.deny, only affected server built-in with libwrap}}
Allow ssh : <pre>BUILD_# echo "ssh: ALL : ALLOW" >> /etc/hosts.allow}</pre>
BUILD_# echo "ssh: ALL : ALLOW" >> /etc/hosts.allow
==== lock (disable) the root account ====
BUILD_# passwd -l root
==== exit the chroot to CT0 ====
=== BUILD_# exit the chroot to VE0 ===
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:
Remove unused pacman backup files CT0_# find ./ -name '*.pacorig' > ../exclude.list-$ARCH
VE0_# find <code>/etc/resolv.conf</ -name '*.pacorig' code> ../exclude.list-$ARCHis added by vzctl:
CT0_# echo "etc/resolv.conf" >> ../exclude.list-$ARCH
/etc/resolv.conf is added by vzctlDon't add downloaded pkg to ostemplate:
VE0_ CT0_# echo "etcfind ./var/cache/resolv-name '*.tar.conf" gz' >> ../exclude.list-$ARCH
We dont need no logs and history:
dont add downloaded pkg to ostemplate: CT0_# find ./var/cache/ -name '*.tar.gz' >> ../exclude.list-$ARCH CT0_# find ./root/.bash_history >> ../exclude.list-$ARCH
VE0_# find ./var/cache/ -name '*.tar.gz' >> ../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 ./
we dont need no logs and historys=== use the OS template ===
VE0_ CT0_# find vzctl create <VEID> --ostemplate arch-0./var/cache/ 8-$ARCH-name '*.tar.gz' >> minimal ../exlcude.list-$ARCH
=== update the OS template ===
VE0_# find ./root/.bash_history >> ../exclude.list-$ARCHTo update a template is really easy, enter the build with chroot, performing upgrade task
 == create OS-Template == VE0_# tar -X ../exclude.list-$ARCH -czf /vz/template/cache/arch-0.8-$ARCH-minimal.tar.gz ./  == use the OS-Template == VE0_# 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 VE0_ CT0_# chroot /vz/template/$DIST/$VERSION/$ARCH/ 'pacman -Syu'
Update the exclude list, and pack upgraded OS - Template
=== Links ===
== Links == Archlinux wiki * [http://wiki.archlinux.org/index.php/Main_PageArch Linux Wiki]
[[Category: HOWTO]]
[[Category: Templates]]
Anonymous user