Tags

arm arpaname bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp diffusion dns dnsmasq 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

20/08/2014

[ xen openbsd ]

201408202000 xen openbsd

Un domU OpenBSD à ma façon

Pour la recette d'aujourd'hui il nous faudra:

Le matériel

C'est un HP Compaq 6710b:

Le logiciel

L'installation de NetBSD est des plus classique:

  PV Name               /dev/rwd0e
  VG Name               vg0
  PV Size               127.06 GiB / not usable 3.27 MiB
  --- Logical volume ---
  LV Name                /dev/vg0/openbsd-001
  VG Name                vg0
  ...
  LV Size                20.00 GiB
  ...

Les extensions de virtualisation sont bien présentes:

dsx@dom0>sudo xl dmesg
(XEN) Xen version 4.2.4 (pbulk@) (gcc (NetBSD nb2 20110806) 4.5.3) Fri Apr  4 12:02:16 UTC 2014
...
(XEN) VMX: Supported advanced features:
(XEN)  - APIC MMIO access virtualisation
(XEN)  - APIC TPR shadow
(XEN)  - Virtual NMI
(XEN)  - MSR direct-access bitmap
(XEN) HVM: ASIDs disabled.
(XEN) HVM: VMX enabled
...
dsx@dom0>sudo xl info | grep hvm
virt_caps              : hvm
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 

Le réseau

Le dom0 possède:

Comme j'ai la main sur mon réseau, ma passerelle possède une route vers 10.40.20/24. J'ai aussi les entrées DNS suivantes:

dsx@dom0>dig dom0-gw.bsdsx.fr +short
10.40.20.1
dsx@dom0>dig dom0.openbsd.bsdsx.fr +short
10.40.20.1

La recette du jour

J'aime les installations en mode texte. J'aime les installations au travers du réseau. J'aime les consoles série. Je vais donc installer un domU OpenBSD 5.5 en pxe et console série en étant connecté en ssh au portable.

Préparation

Comme je risque de faire plusieurs essais / tests / installations, je prépare la récupération des sets:

dsx@dom0>ls /xen/http/dom0.openbsd.bsdsx.fr/pub/OpenBSD/5.5/amd64/
INSTALL.amd64 SHA256.sig    bsd           bsd.rd        etc55.tgz     index.txt     pxeboot       xbase55.tgz   xfont55.tgz   xshare55.tgz
SHA256        base55.tgz    bsd.mp        comp55.tgz    game55.tgz    man55.tgz     site55.tgz    xetc55.tgz    xserv55.tgz

Qui dit pxe dit dhcp et tftp. Pour le dhcp, c'est du classique:

dsx@dom0>cat /etc/dhcpd.conf
subnet 10.40.20.0 netmask 255.255.255.0 {
    option routers 10.40.20.1;
    option domain-name-servers 172.16.10.20, 172.16.10.21;
    option domain-name "bsdsx.fr";

    pool {
        max-lease-time 28800;
        range 10.40.20.10 10.40.20.199;
        deny unknown-clients;

        host openbsd-001 {
            hardware ethernet 00:16:3e:00:12:04;
            fixed-address 10.40.20.12;
            filename "pxeboot";
            next-server 10.40.20.1;
        }
    }
}

Pour le tftp et le http, c'est inetd qui vient à la rescousse:

dsx@dom0>grep -v ^# /etc/inetd.conf
dom0-gw:http    stream  tcp   nowait:600  _httpd  /usr/libexec/httpd  httpd -V -v /xen/http /xen/http/_default
dom0-gw:tftp    dgram   udp   wait        root    /usr/libexec/tftpd  tftpd -l -s /xen/tftpboot

Je restreint l'écoute des service à une seule ip et j'utilise la fonctionnalité 'virtualhost' de httpd

Il me reste à peupler le tftp:

dsx@dom0>ls -Rl /xen/tftpboot/
total 17092
-rw-r--r--  1 dsx  wheel  8643177 Aug 23 13:06 bsd.rd
drwxr-xr-x  2 dsx  wheel      512 Aug 24 08:42 etc
-rw-r--r--  1 dsx  wheel    80436 Aug 23 13:06 pxeboot

/xen/tftpboot/etc:
total 4
-rw-r--r--  1 dsx  wheel  48 Aug 24 08:42 boot.conf
dsx@dom0>cat /xen/tftpboot/etc/boot.conf
stty com0 115200
set tty com0
boot tftp:/bsd.rd

Exécution

La configuration du domU est assez simple:

builder = 'hvm'
memory = 256
name = 'openbsd-001.bsdsx.fr'
vif = [ 'mac=00:16:3e:00:12:04, bridge=bridge4, model=e1000' ]
disk = [ 'phy:/dev/mapper/vg0-openbsd--001,ioemu:xvda,rw' ]
boot = 'n'
serial = 'pty'
vnc = 0

Pas la peine de me faire remarquer qu'il eut été judicieux de remplacer e1000 par virtio:

dsx@dom0>ls /usr/pkg/share/xen/qemu/pxe*
/usr/pkg/share/xen/qemu/pxe-e1000.bin              /usr/pkg/share/xen/qemu/pxe-pcnet.bin
/usr/pkg/share/xen/qemu/pxe-ne2k_pci.bin           /usr/pkg/share/xen/qemu/pxe-rtl8139.bin

Il est temps de faire un premier essai:

dsx@dom0>sudo xl create /xen/etc/openbsd-hvm.cfg -c
Parsing config from /xen/etc/openbsd-hvm.cfg
xc: info: VIRTUAL MEMORY ARRANGEMENT:
  Loader:        0000000000100000->0000000000171de4
  TOTAL:         0000000000000000->000000000f800000
  ENTRY ADDRESS: 0000000000100000
xc: info: PHYSICAL MEMORY ALLOCATION:
  4KB PAGES: 0x0000000000000200
  2MB PAGES: 0x000000000000007b
  1GB PAGES: 0x0000000000000000
Daemon running with PID 5714
net0: 00:16:3e:00:12:04 on PCI00:03.0 (open)
  [Link:up, TX:0 TXE:0 RX:0 RXE:0]
DHCP (net0 00:16:3e:00:12:04).... ok
net0: 10.40.20.12/255.255.255.0 gw 10.40.20.1
Booting from filename "pxeboot"
tftp://10.40.20.1/pxeboot. ok
>> OpenBSD/amd64 PXEBOOT 3.23
cannot open tftp:/etc/random.seed: No such file or directory
booting tftp:/bsd.rd: 4190944+963509+2917168+0+520928 [100+342504+222489]=0xcbd590
entry point at 0x10001e0 [7205c766, 34000004, 24448b12, 55c8a304]
Copyright (c) 1982, 1986, 1989, 1991, 1993
  The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2014 OpenBSD. All rights reserved.  http://www.OpenBSD.org

OpenBSD 5.5 (RAMDISK_CD) #237: Wed Mar  5 09:43:42 MST 2014
    deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/RAMDISK_CD
real mem = 242933760 (231MB)
avail mem = 231628800 (220MB)
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xeb01f (11 entries)
bios0: vendor Xen version "4.2.4" date 07/10/2014
bios0: Xen HVM domU
acpi0 at bios0: rev 2
acpi0: sleep states S3 S4 S5
acpi0: tables DSDT FACP APIC HPET WAET SSDT SSDT
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 11, 48 pins
ioapic0: misconfigured as apic 0, remapped to apid 1
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM)2 Duo CPU T8100 @ 2.10GHz, 2095.13 MHz
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,SSSE3,CX16,SSE4.1,x2APIC,DEADLINE,NXE,LONG,LAHF,PERF
cpu0: 3MB 64b/line 8-way L2 cache
cpu0: apic clock running at 100MHz
acpiprt0 at acpi0: bus 0 (PCI0)
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel 82441FX" rev 0x02
"Intel 82371SB ISA" rev 0x00 at pci0 dev 1 function 0 not configured
pciide0 at pci0 dev 1 function 1 "Intel 82371SB IDE" rev 0x00: DMA, channel 0 wired to compatibility, channel 1 wired to compatibility
wd0 at pciide0 channel 0 drive 0: <QEMU HARDDISK>
wd0: 16-sector PIO, LBA48, 20480MB, 41943040 sectors
wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
pciide0: channel 1 disabled (no drives)
"Intel 82371AB Power" rev 0x01 at pci0 dev 1 function 3 not configured
vga1 at pci0 dev 2 function 0 "Cirrus Logic CL-GD5446" rev 0x00
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
em0 at pci0 dev 3 function 0 "Intel 82540EM" rev 0x03: apic 1 int 28, address 00:16:3e:00:12:04
isa0 at mainbus0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
com0: console
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
softraid0 at root
scsibus0 at softraid0: 256 targets
PXE boot MAC address 00:16:3e:00:12:04, interface em0
root on rd0a swap on rd0b dump on rd0b
erase ^?, werase ^W, kill ^U, intr ^C, status ^T

Welcome to the OpenBSD/amd64 5.5 installation program.
Starting non-interactive mode in 5 seconds...
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s
# halt
syncing disks... done

The operating system has halted.
Please press any key to reboot.

Quelques remarques:

La touche finale

Depuis la version 5.3, OpenBSD est capable d'utiliser les drivers virtio (que je ne peux pas utiliser pour le pxe). La version 5.5 amène une fonctionnalité bien pratique: autoinstall.

Après un peu de lecture, j'établis le plan suivant:

Le répertoire /xen/tftpboot:

dsx@dom0>ls -l /xen/tftpboot/
total 17092
lrwxr-xr-x  1 dsx  wheel        7 Aug 24 11:14 auto_install -> pxeboot
-rw-r--r--  1 dsx  wheel  8643177 Aug 23 13:06 bsd.rd
drwxr-xr-x  2 dsx  wheel      512 Aug 24 10:24 etc
-rw-r--r--  1 dsx  wheel    80436 Aug 23 13:06 pxeboot

Le fichier /xen/http/_default/install.conf:

System hostname = openbsd-001
Network interfaces = em0
IPv4 address for em0 = dhcp
Password for root = monsupermotdepasse
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 dsx = Admin user
Password for user = *************
Public ssh key for user = ssh-rsa AAAA...
What timezone are you in = Europe/Paris
Location of sets = http 
Server = dom0.openbsd.bsdsx.fr
Set name(s) = site55.tgz
Checksum test for site55.tgz failed. Continue anyway = yes
Unverified sets: site55.tgz. Continue without verification = yes

Le fichier site55.tgz est composé d'un unique script:

dsx@dom0>cat install.site 
#!/bin/sh
set -x
cp /etc/hostname.em0 /etc/hostname.vio0
export PKG_PATH=ftp://ftp.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 '%wheel        ALL=(ALL) NOPASSWD: SETENV: ALL' >> /etc/sudoers

sed '/^ttyC/ s/on/off/' /etc/ttys > /etc/ttys.serial && mv /etc/ttys.serial /etc/ttys
dsx@dom0>chmod +x install.site 
dsx@dom0>tar czvf /xen/http/dom0.openbsd.bsdsx.fr/pub/OpenBSD/5.5/amd64/site55.tgz install.site

Pour qu'il soit pris en compte il faut mettre à jour le fichier index.txt:

dsx@dom0>cd /xen/http/dom0.openbsd.bsdsx.fr/pub/OpenBSD/5.5/amd64/ && rm index.txt && ls -l > index.txt

J'ai préféré l'utilisation d'une clef pour me connecter en ssh, je n'ai donc pas de mot de passe valide ce qui m'oblige à rajouter une entrée dans /etc/sudoers. Un petit man pkg_add pour réviser les flavors afin d'installer mes paquets indispensables et c'est prêt.fichier autoinstall_55.tx, 177 lignes, 10Ko.

Le fichier de configuration du domU devient:

dsx@dom0>cat /xen/etc/openbsd-hvm.cfg
builder = 'hvm'
memory = 256
name = 'openbsd-001.bsdsx.fr'
vif = [ 'mac=00:16:3e:00:12:04, bridge=bridge4, model=virtio' ]
disk = [ 'phy:/dev/mapper/vg0-openbsd--001,xvda,rw' ]
boot = 'c'
serial = 'pty'
vnc = 0
on_reboot="destroy"

Pour finir

On ne peut pas dire qu'une installation d'OpenBSD prenne du temps ou soit difficile (une touche Entrée en état de marche semble le seul pré-requis). Mais avec l'autoinstall, on atteint un niveau de loutritude olympique. Et encore une fois, tout ça à l'aide de NetBSD et Xen :)


Lien vers ce billet