Tags

arm arpaname autoinstall bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp diffusion dns dnsmasq dom0 domU dovecot fail-over fail2ban firefox fossil freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop liste makefile mikrotik ml150 mohawk nanojail netbook netbsd nginx ntp ntp.org openbsd openntpd openrd opensmtpd openwrt orke pkgng poudriere privee proxy pxe python rc.conf rescue reverse rmll routage route rrdcgi sendmail serial sieve sjail sl2009 ssd sshd symon unbound update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

30/04/2016

[ openbsd domU autoinstall ]

201604300915 openbsd domU autoinstall

Dans un précédent billet, j'ai décrit l'environnement d'un dom0 NetBSD. Voyons maintenant l'installation automatique d'un domU OpenBSD.

Le principe

D'après ma configuration DHCP/DNS, un domU avec une interface ayant pour adresse MAC 00:16:3e:00:10:00 démarrant en pxe sera configuré de la manière suivante:

TFTP

Extrait de /etc/inetd.conf:

dom0.vpro.bsdsx.fr:tftp    dgram   udp   wait        root    /usr/libexec/tftpd  tftpd -l -s /home/dsx/xen/tftpboot

Le répertoire /home/dsx/xen/tftpboot est peuplé comme suit:

dsx@vpro>ls -lR /home/dsx/xen/tftpboot/
lrwxr-xr-x  1 dsx  wheel       15 Dec 31 15:50 auto_install -> openbsd_pxeboot
lrwxr-xr-x  1 dsx  wheel        8 Feb 13 08:41 bsd.rd -> bsd58.rd
-rw-r--r--  1 dsx  wheel  7642500 Dec 31 10:23 bsd58.rd
drwxr-xr-x  2 dsx  wheel      512 Jan 24 11:34 etc
-rw-r--r--  1 dsx  wheel    81092 Dec 31 10:24 openbsd_pxeboot

/home/dsx/xen/tftpboot/etc:
-rw-r--r--  1 dsx  wheel  48 Dec 29 16:10 boot.conf
-rw-r--r--  1 dsx  wheel  16 Apr 30 09:45 random.seed

dsx@vpro>cat /home/dsx/xen/tftpboot/etc/boot.conf 
stty com0 115200
set tty com0
boot tftp:/bsd.rd

La documentation d'autoinstall nous indique que la prochaine étape sera de répondre à l'url http://172.18.0.1/00:16:3e:00:10:00-install.conf?path=5.8/amd64.

HTTP

Extrait de /etc/inetd.conf:

dom0.vpro.bsdsx.fr:http stream tcp nowait:600 _httpd /usr/libexec/httpd httpd -V -C conf /home/dsx/xen/http/_cgi-bin/conf.sh -v /home/dsx/xen/http /home/dsx/xen/http/_default

Petites explications:

Les sets d'installation d'OpenBSD se trouvent dans un hôte virtuel:

dsx@vpro>ls xen/http/openbsd.vpro.bsdsx.fr/pub/OpenBSD/5.8/amd64/
INSTALL.amd64         bsd                   game58.tgz            site58-open-10.tgz    xshare58.tgz
SHA256                bsd.mp                index.txt             xbase58.tgz
SHA256.sig            bsd.rd                man58.tgz             xfont58.tgz
base58.tgz            comp58.tgz            pxeboot               xserv58.tgz

conf.sh

Ce script est le coeur de l'installation automatique. A partir de l'url http://172.18.0.1/00:16:3e:00:10:00-install.conf?path=5.8/amd64, il va:

Configuration d'un domU

dsx@vpro>cat -n xen/etc/open-10.cfg
 1  builder='hvm'
 2  memory=256
 3  name='open-10'
 4  vif=[ 'mac=00:16:3e:00:10:00, bridge=bridge0, model=virtio', 'mac=00:16:3e:01:10:00, bridge=bridge1, model=virtio' ]
 5  disk=[ '/dev/vg_sata/open-10-sata,,hda' ]
 6  boot='c'
 7  serial='pty'
 8  vnc=0
 9  on_poweroff='destroy'
10  on_reboot='destroy'
11  autodisklabel=[ '/ 100M-* 75%', 'swap 10M-* 25%' ]
12  packages='fossil--'
13  install_site=[
14      'echo "sndiod_flags=NO" >> /etc/rc.conf.local',
15      'echo "permit nopass :wheel" >> /etc/doas.conf'
16  ]
17  # !!! ACHTUNG !!!
18  # les commentaires en fin de fichier sinon eval va pas marcher
19  # http://xenbits.xen.org/docs/unstable/misc/xl-disk-configuration.txt
20  # http://xenbits.xen.org/docs/unstable/misc/vbd-interface.txt

Fichier de réponse

Voici le fichier de réponse généré par conf.sh:

System hostname = $name
Network interfaces = em0
IPv4 address for em0 = $REMOTE_ADDR
Default IPv4 route = $HTTP_HOST
IPv6 address for em0 = $IPV6::$lastdigit
IPv6 default router = $IPV6::1
Password for root = '*************'
Start sshd(8) by default = yes
Do you expect to run the X Window System = no
Change the default console to com0 = yes 
Which speed should com0 use = 115200
Setup a user = dsx
Full name for user = Admin user
Password for user = *************
Allow root ssh login = no
Public ssh key for user = $ssh_key
What timezone are you in = Europe/Paris
Location of sets = http 
HTTP Server = openbsd.$SERVER_NAME
URL to autopartitioning template = http://$HTTP_HOST/autodisklabel.conf?mac=$mac&version=$version
Checksum test for site${version}-${name}.tgz failed. Continue anyway = yes
Unverified sets: site${version}-${name}.tgz. Continue without verification = yes

On peut voir que l'url de l'autopartitioning est aussi gérée par conf.sh. Notons que par design, on ne peut configurer qu'une seule interface réseau. La configuration de mes 2 interfaces se fait à l'aide de site${version}-${name}.tgz qui ne contient qu'un fichier install.site.

install.site

Ce fichier contient les instructions pour finaliser l'installation:

#!/bin/sh
set -x

ln /etc/hostname.em0 /etc/hostname.vio0
sed 's/\.0\./\.1\./' /etc/hostname.vio0 > /etc/hostname.vio1

sed '/^ttyC/ s/on/off/' /etc/ttys > /tmp/ttys.serial && mv /tmp/ttys.serial /etc/ttys

export ftp_proxy=http://dom0:3128
export http_proxy=http://dom0:3128
export PKG_PATH=ftp://ftp2.fr.openbsd.org/pub/OpenBSD/`uname -r`/packages/`uname -m`
pkg_add -r tcsh vim--no_x11 rsync-- fossil--
usermod -s /usr/local/bin/tcsh dsx
echo "sndiod_flags=NO" >> /etc/rc.conf.local
echo "permit nopass :wheel" >> /etc/doas.conf

Démarrage pxe

Le fichier de configuration du domU ne permet pas en l'état de booter en pxe. Le script suivant effectue les modifications nécessaires et démarre le domU avec les bonnes options:

 1  #!/bin/sh
 2  
 3  DOMU_CONFIG_PATH=/home/dsx/xen/etc
 4  
 5  TYPE=${1:-open}
 6  NUMBER=${2:-10}
 7  
 8  config_file=$DOMU_CONFIG_PATH/$TYPE-$NUMBER.cfg
 9  
10  if [ ! -f $config_file ]; then
11      echo "'$config_file': file not found. Exit."
12      exit 1
13  fi
14  
15  sudo xl list | grep --quiet --max-count=1 "$TYPE-$NUMBER"
16  if [ $? -eq 0 ]; then
17      echo "'$TYPE-$NUMBER' is running. Exit."
18      exit 1
19  fi
20  
21  sed -e 's/virtio/e1000/g' $config_file > /tmp/pxe_$TYPE-$NUMBER.cfg
22  
23  sudo xl create /tmp/pxe_$TYPE-$NUMBER.cfg -c 'boot="n"'

Les fichiers

conf.sh est disponible ici, le template d'install.site est et le résulat est .

Script started on Sun May  1 09:19:38 2016
...
Script done on Sun May  1 09:24:08 2016

Moins de 5 minutes, pas mal non ?

A faire

Passer en OpenBSD 5.9 :)


Lien vers ce billet