08/10/2009
200910081111 netbsd xen install
Netbsd 5.0.1 et Xen
Le contexte:
- HP ProLiant DL140
- 2 Xeon HT (32 bits)
- 4 Go de RAM
- 80 Go IDE (récup)
- 5 adresses IP
- le tout derrière un squid
A la différence de nombreux tutos où on ne voit que les commandes qui marchent, je vais essayer de partager mes erreurs et mes réflexions.
Installation
Je ne vais pas recopier http://www.netbsd.org/docs/guide/en/chap-exinst.html mais une lecture attentive ne fera pas de mal.
Mes adaptations:
- Figure 3.5. MBR partitions
J'ai choisi 'b: Use the entire disk'
Concernant les partition, un / et un swap suffiront pour l'instant.
Par contre, / sera formaté en ffsv2 et mounté avec l'option log (Figure 3.15. Disklabel partition editing)
- Figure 3.6. Full or custom installation
Full, on sait jamais. Pour être honnête, vu le nombre de réinstallation que j'ai fait, j'ai parfois (souvent :) sélectionné Custom avec les sets pré-sélectionnés.
NetBSD est toujours aussi simple/rapide à installer.
Configuration
Un reboot plus tard et voila le dmesg./etc/rc.conf: hostname=netbsd.domain.tld ifconfig_bge0="inet 10.50.0.40 netmask 255.255.255.0" defaultroute="10.50.0.100" sshd=YES /etc/ssh/sshd_config: PermitRootLogin yes netbsd# /etc/rc.d/network restart netbsd# /etc/rc.d/sshd restart
Packages
Tant que je suis en mode découverte, pourquoi ne pas essayer pkgin ?netbsd# export ftp_proxy=http://proxy.domain.tld:3128/ netbsd# export http_proxy=http://proxy.domain.tld:3128/ netbsd# pkg_info netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/pkgin-0.2.5.tgz pkg_add: Can't process ftp://ftp.fr.netbsd.org:21/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/sqlite3*: Protocol error pkg_add: no pkg found for 'sqlite3>=3.2.7nb1', sorry. pkg_add: Can't install dependency sqlite3>=3.2.7nb1 pkg_add: 1 package addition failedOn va lui donner un coup de main:
netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/sqlite3-3.6.14.2.tgz
bin/sqlite3
include/sqlite3.h
include/sqlite3ext.h
lib/libsqlite3.la
lib/libsqlite3.a
lib/libsqlite3.so
lib/libsqlite3.so.0
lib/libsqlite3.so.0.8.6
lib/pkgconfig/sqlite3.pc
man/man1/sqlite3.1
Package sqlite3-3.6.14.2 registered in /var/db/pkg/sqlite3-3.6.14.2
netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/pkgin-0.2.5.tgz
Running install with PRE-INSTALL for pkgin-0.2.5.
bin/pkgin
man/man1/pkgin.1
share/examples/pkgin/repositories.conf.example
Executing '/bin/mkdir -p '/usr/pkg'/etc/pkgin'
Running install with PRE-INSTALL for pkgin-0.2.5.
pkgin-0.2.5: copying /usr/pkg/share/examples/pkgin/repositories.conf.example to /usr/pkg/etc/pkgin/repositories.conf
Package pkgin-0.2.5 registered in /var/db/pkg/pkgin-0.2.5
#========================================================================
$NetBSD: MESSAGE,v 1.1.1.1 2009/06/08 13:58:26 imil Exp $
First steps before using pkgin.
. Modify /usr/pkg/etc/pkgin/repositories.conf to suit your platform
. Initialize the database :
# pkgin update
#========================================================================
netbsd# vi /usr/pkg/etc/pkgin/repositories.conf
netbsd# pkgin update
processing local summary...
updating database: 100%
downloading pkg_summary.bz2: 100%
processing remote summary (ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/)...
updating database: 100%
Installation de Xen
On garde sous les yeux:
- http://www.netbsd.org/ports/xen/howto.html
- http://www.netbsdfr.org/wiki/doku.php?id=tips:xen3_current
netbsd# pkgin install xentools33 calculating dependencies for xentools33... nothing to upgrade. 8 packages to be installed: ncurses-5.7nb1 readline-6.0 libffi-3.0.8nb2 python25-2.5.4nb1 py25-xml-0.8.4nb2 py25-readline-0nb4 py25-curses-0nb4 xentools33-3.3.1nb6 (14M to download, 59M to install) proceed ? [y/N] y ... netbsd# cp /usr/pkg/share/examples/rc.d/* /etc/rc.d/ netbsd# chmod 755 /etc/rc.d/xen* netbsd# cd /dev && sh MAKEDEV xen netbsd# pkgin install xenkernel33 calculating dependencies for xenkernel33... nothing to upgrade. 1 packages to be installed: xenkernel33-3.3.1nb1 (828K to download, 828K to install) proceed ? [y/N] y ... netbsd# cp /usr/pkg/xen3-kernel/xen.gz /
On récupère depuis ftp://ftp.fr.netbsd.org/pub/NetBSD/NetBSD-5.0.1/i386/binary/kernel/
Tout le monde est là:netbsd# ls / .cshrc cdrom libexec proc usr .profile dev mnt rescue var altroot etc netbsd root xen.gz bin kern netbsd-INSTALL_XEN3_DOMU.gz sbin boot lib netbsd-XEN3_DOM0.gz stand boot.cfg libdata netbsd-XEN3_DOMU.gz tmp netbsd# cat /boot.cfg menu=Boot normally:boot netbsd menu=Boot single user:boot netbsd -s menu=Disable ACPI:boot netbsd -2 menu=Disable ACPI and SMP:boot netbsd -12 menu=Boot Xen dom0:load /netbsd-XEN3_DOM0.gz console=pc;multiboot /xen.gz dom0_mem=256M -s menu=Drop to boot prompt:prompt default=1 timeout=5 netbsd# rebootOn choisit manuellement la cinquième entrée et chocapik:
Mismatch between XEN and DOM0 kernel
On va lire [http://archive.netbsd.se/?ml=port-xen&a=2008-08&t=8360302], puis [http://www.netbsd.org/ports/xen/] et on se dit qu'on va attendre: "A new kernel XEN3PAE_DOM0 should show up in the next HEAD autobuild."
et c'est (re)parti:
netbsd# pkgin remove xenkernel33 netbsd# pkgin remove xentools33 netbsd# pkgin install xenkernel3 netbsd# pkgin install xentools3 netbsd# cp /usr/pkg/xen3-kernel/xen.gz / netbsd# reboot
On choisit la cinquième entrée du menu de boot et hop un dmesg
netbsd# cp /usr/pkg/share/examples/rc.d/* /etc/rc.d/ netbsd# chmod 755 /etc/rc.d/xen* netbsd# echo "xend=YES" >> /etc/rc.conf netbsd# echo "xenbackendd=YES" >> /etc/rc.conf netbsd# echo "xendomains=YES" >> /etc/rc.conf netbsd# xend start netbsd# xenbackendd netbsd# cat /etc/ifconfig.bridge0 create !brconfig $int add bge0 up
On modifie le script /usr/pkg/etc/xen/scripts/vif-bridge
netbsd# grep xbridge= /usr/pkg/etc/xen/scripts/vif-bridge
#xbridge=$(xenstore-read "$xpath/bridge")
xbridge=bridge0
Configuration des domU
netbsd# mkdir -p /home/xen netbsd# dd if=/dev/zero of=/home/xen/netbsd-001.img bs=1m count=2k netbsd# grep -v "^#" /usr/pkg/etc/xen/netbsd-001 kernel = "/netbsd-INSTALL_XEN3_DOMU.gz" memory = 128 name = "netbsd-001" vif = [ 'bridge=bridge0' ] disk = [ 'file:/home/xen/netbsd-001.img,xbd0a,w', 'file:/home/xen/i386cd-5.0.1.iso,xbd1d,r' ] root = "/dev/xbd0a"
Roulement de tambour:
netbsd# xm create -c /usr/pkg/etc/xen/netbsd-001 Error: Device 0 (vif) could not be connected. Hotplug scripts not working
On active le bridge0 sinon les domU ne se lance pas:
netbsd# /etc/rc.d/network restartOn installe tranquillou, minimal, depuis le cd qui est en _xbd1d_ et pas _cd0a_, et on finit par un
netbsd-001# halt -p
ctrl+] pour quitter la console du domU. On bascule sur le kernel normal:
netbsd# grep ^kernel /usr/pkg/etc/xen/netbsd-001 kernel = "netbsd-XEN3_DOMU.gz"
On boote le domU et voilà-t-y pas qu'il demande sur quoi booter :( On modifie /usr/pkg/etc/xen/netbsd-001
netbsd# grep ^root /usr/pkg/etc/xen/netbsd-001 root = "xbd0a"
Si au prochain reboot du dom0 pas de xen, on n'oublie pas de modifier l'entrée par défaut de /boot.cfg:
netbsd# grep ^default /boot.cfg default=5
Poufinage domU
On a donc une image d'un domU non configurée. Pourquoi ne pas en profiter ?
netbsd# dd if=/home/xen/netbsd-001.img of=/home/xen/_netbsd.img
On pourra rapidement (re)faire un domU:
netbsd# dd if=/home/xen/_netbsd.img of=/home/xen/netbsd-002.img netbsd# sed -e 's/001/002/' /usr/pkg/etc/xen/netbsd-001 > /usr/pkg/etc/xen/netbsd-002
Reste à commenter les lignes screen de /etc/wscons.conf et garder uniquement la console on dans /etc/ttys. Un peu de configuration:
netbsd-001# tail /etc/rc.conf ifconfig_bge0="inet 10.50.0.41 netmask 255.255.255.0" defaultroute="10.50.0.100" hostname="netbsd-001.domain.tld" sshd=YES powerd=YES netbsd-001# cat /etc/resolv.conf domain domain.tld search domain.tld nameserver 192.168.0.2 nameserver 192.168.0.1 nameserver 192.168.0.3
Pour démarrer automatiquement notre domU:
netbsd# echo 'xendomains="netbsd-001"' >> /etc/rc.conf
A venir
Un seul disque n'est pas suffisant pour une mise en production. Je vais donc rajouter un disque et refaire une installation sur du raid 1 (mirroir).
Les fichiers utilisés comme device pour les domU je n'aime pas car on superpose les couches:
disque -> partition -> file system -> partition -> file system
dom0 dom0 domU domU
On ne dispose pas encore de LVM ni de ZFS (mais c'est en cours). Vu la quantité de RAM et le nombre d'IP disponibles, je vais pouvoir affecter une (des) partitions à mes 4 domU:
disque -> partition -> file system
dom0 dom0
-> partition -> file system
domU domU
-> partition -> file system
domU domU
-> partition -> file system
domU domU
-> partition -> file system
domU domU
Le dom0 doit être un peu mieux configuré: sshd, pf, ntp, cache dns, centralisation des logs, un petit smartmontool, du symon (ou munin) et deux trois trucs qui facilitent la vie. En attendant un controleur SATA et deux disques de plus grosse capacité, amusez-vous bien avec NetBSD et Xen !
16/06/2008
200806160800 freebsd kimsufi install jail
Mon premier billet
Prélude
Pour mon premier billet, je vais décrire l'installation de mon serveur. Après avoir pris un domaine chez gandi.net, j'ai commandé mon serveur dédié chez ovh (livré avec un peu de retard :) avec FreeBSD 7.0. Installation de la version 32 bits par défaut et un partitionnement des plus simple:ks34581# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad4s1a / ufs rw 1 1 /dev/ad4s1b /home ufs rw 2 2 /dev/ad4s1d swap swap sw 0 0 proc /proc procfs rw 0 0
Depuis le manager je réinstalle la version 64 bits. J'en profite pour activer mon compte de backup.
Configuration de base
Modification du mot de passe rootks34581# passwdSuppression des getty inutiles
ks34581# grep "getty Pc" /etc/ttys ttyv0 "/usr/libexec/getty Pc" cons25 on secure ttyv1 "/usr/libexec/getty Pc" cons25 off secure ttyv2 "/usr/libexec/getty Pc" cons25 off secure ttyv3 "/usr/libexec/getty Pc" cons25 off secure ttyv4 "/usr/libexec/getty Pc" cons25 off secure ttyv5 "/usr/libexec/getty Pc" cons25 off secure ttyv6 "/usr/libexec/getty Pc" cons25 off secure ttyv7 "/usr/libexec/getty Pc" cons25 off secure ks34581# kill -HUP 1Heure locale
ks34581# cp /usr/share/zoneinfo/Europe/Paris /etc/localtimeDésactivation du module linux
ks34581# kldunload linux ks34581# echo 'linux_enable="NO"' >> /etc/rc.confActivation de ZFS
ks34581# kldload zfs ks34581# echo 'zfs_enable="YES"' >> /etc/rc.confActivation de lo1 (pour les jails)
ks34581# ifconfig lo1 create ks34581# ifconfig lo1 inet 172.16.0.254 netmask 255.255.255.0 ks34581# echo 'network_interfaces="lo0 vr0 lo1"' ks34581# echo '/sbin/ifconfig lo1 create' > /etc/start_if.lo1 ks34581# echo 'ifconfig_lo1="inet 172.16.0.254 netmask 255.255.255.0"' >> /etc/rc.conf ks34581# echo '172.16.0.254 kimsufi.mondomaine.tld' >> /etc/hostsssh sur interface publique
ks34581# echo 'sshd_flags="-o ListenAddress=syslog en mode local"' >> /etc/rc.conf
ks34581# echo 'syslogd_flags="-ss"' >> /etc/rc.confnamed ip v4 only
ks34581# echo 'named_flags="-4"' >> /etc/rc.confnamed sur interface privée
ks34581# grep 172.16.0.254 /etc/named/named.conf
listen-on { 127.0.0.1; 172.16.0.254; };
Sauvegarde
Pour l'instant, un simple backup ftp fera l'affaire. Je commence par automatiser l'accès au backup:ks34581# cat >> /root/.netrc machine backup loginUn script sans prétention:password ^D ks34581# chmod 600 /root/.netrc ks34581# echo " backup" >> /etc/hosts`
ks34581# cat /root/bin/backup.sh #!/bin/sh set -- $(date "+%Y%m%d") TBZ=kimsufi-$1.tbz tar cjf $HOME/tmp/$TBZ -T $HOME/etc/backup.cfg 2>/dev/null cd $HOME/tmp echo "put $TBZ" | ftp -V backupUn fichier de configuration minimal:
ks34581# cat /root/etc/backup.cfg /etc/rc.conf /etc/ttys /etc/start_if.lo1 /etc/namedb/named.conf /root/.netrc /root/etc/backup.cfg /root/bin/backup.shTous les jours à 2h45 du matin:
ks34581# echo '45 2 * * * $HOME/bin/backup.sh' >> /root/.crontab ks34581# crontab .crontab ks34581# echo '/root/.crontab' >> /root/etc/backup.cfg
Courriel
Pour l'instant, l'installation de base de FreeBSD me permet d'envoyer des courriels. J'ajuste la configuration de sendmail pour que les jails puissent en profiter. Une jail smtp est prévue pour plus tard.ks34581# cd /etc/mail ks34581# echo 'root:Pour pouvoir être utilisé par les jails, sendmail doit écouter sur 172.16.0.254:' >> aliases ks34581# make aliases
ks34581# sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /etc/mail/submit.cf ks34581# echo 'sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=172.16.0.254"' >> /etc/rc.conf ks34581# echo '/etc/mail/submit.cf' >> $HOME/etc/backup.cfgIl doit aussi accepter de relayer les jails:
ks34581# cat /etc/mail/relay-domains ks34581.kimsufi.com localhost 127.0.0.1 .mondomaine.tld ks34581# make restart ks34581# echo '/etc/mail/relay-domains' >> /root/etc/backup.cfg
Pf
Les jails seront sur le réseau 172.16.0.x, interface lo1. Pour accèder à ces jails du NAT s'impose:ks34581# echo 'pf_enable="YES"' >> /etc/rc.conf ks34581# echo 'pflog_enable="YES"' >> /etc/rc.confUn (trop) simple /etc/pf.conf:
ext_if="vr0"
int_if="lo1"
set block-policy return
set loginterface $ext_if
set skip on lo0
scrub in
nat on $ext_if from !($ext_if) -> ($ext_if:0)
block log on $ext_if
antispoof quick for { lo0 $int_if }
pass in on $ext_if inet proto tcp from any to ($ext_if) port ssh
pass quick on $int_if
pass out on $ext_if
Seul le ssh du kimsufi est accessible. Je rajouterai les règles rdr et pass au fur et à mesure. Je
croise les doigts (un pf.conf qui bloque est si vite arrivé :) et hop:
ks34581# pfctl -n -f /etc/pf.conf ks34581# /etc/rc.d/pf start ks34581# echo '/etc/pf.conf' >> /root/etc/backup.cfg
Jail et Zfs
J'utilise Zfs pour définir les partitions de mes jails. N'ayant qu'une seule partition physique à ma disposition, je ne peux pas utiliser les fonctions mirror, raid, raidz ... Je ne compte que sur mes backup !ks34581# umount /home ks34581# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad4s1a / ufs rw 1 1 #/dev/ad4s1b /home ufs rw 2 2 /dev/ad4s1d swap swap sw 0 0 proc /proc procfs rw 0 0 ks34581# zpool create zfs /dev/ad4s1b ks34581# zfs create zfs/jailJ'active les jails. jail_list est volontairement vide afin de ne pas démarer automatiquement une jail tant qu'elle n'est pas validée (un reboot du serveur est si vite arrivé :)
ks34581# cat >>/etc/rc.conf jail_enable="YES" jail_list="" jail_set_hostname_allow="NO" # pour postgresql et symon jail_sysvipc_allow="YES" ^DUn script pour simplifier l'installation d'une jail:
ks34581# cat /root/bin/mk_jail.sh
1 #!/bin/sh
2
3 JROOT=zfs/jail
4 FTP=ftp://ftp.fr.freebsd.org/pub/FreeBSD
5 CFG=$HOME/tmp/sysinstall.cfg
6 IFNAME=lo1
7
8 NAME=$1
9 SIZE=$2
10 HOSTNAME=$3
11 IP=$4
12
13 zfs create -o quota=${SIZE}M $JROOT/$NAME
14 zfs create -o quota=512M $JROOT/$NAME/tmp
15 zfs create -o quota=512M $JROOT/$NAME/var
16
17 cat <$CFG
18 installRoot=/$JROOT/$NAME
19 _ftpPath=$FTP
20 mediaSetFTP
21 dists=base
22 distSetCustom
23 installCommit
24 EOF
25
26 sysinstall configFile=$CFG loadConfig
27
28 cat <> /etc/rc.conf
29 jail_${NAME}_rootdir=/$JROOT/$NAME
30 jail_${NAME}_hostname=$HOSTNAME
31 jail_${NAME}_ip=$IP
32 jail_${NAME}_interface=$IFNAME
33 jail_${NAME}_devfs_enable="YES"
34 jail_${NAME}_devfs_ruleset="devfsrules_jail"
35 EOF
36
37 echo "$IP $HOSTNAME" >> /etc/hosts
38
39 cat < /$JROOT/$NAME/etc/rc.conf
40 sshd_enable="YES"
41 sshd_flags="-o ListenAddress=$IP"
42 syslogd_flags="-ss"
43 sendmail_enable="NONE"
44 EOF
45
46 cat <> /$JROOT/$NAME/etc/hosts
47 $IP $HOSTNAME
48 213.251.173.2 backup
49 172.16.0.254 kimsufi.mondomaine.tld
50 EOF
51
52 cat < /$JROOT/$NAME/etc/resolv.conf
53 nameserver 172.16.0.254
54 EOF
55
56 sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /$JROOT/$NAME/etc/mail/submit.cf
57
58 cp /etc/localtime /$JROOT/$NAME/etc
- lignes 3-6: quelques variables
- lignes 8-11: configuration de la jail
- lignes 13-15: création des partitions
- lignes 17-24: je scripte l'utilisation de sysinstall pour l'installation d'un système de base.
- ligne 26: installation du système de base
- lignes 28-35: configuration du démarrage de la jail côté serveur
- ligne 37: en attendant de configurer le named du serveur
- lignes 39-44: services lancés au démarrage de la jail
- lignes 46-50: configuration réseau de la jail
- lignes 52-54: utilisation du named du serveur
- ligne 56: le sendmail de la jail va utiliser le sendmail du serveur
- ligne 58: heure locale
ks34581# /root/bin/mk_jail.sh toto 4096 toto.mondomaine.tld 172.16.0.1
Je vérifie que tout se passe bien à coup de:
- jls
- jexec <id> /bin/tcsh
- ps
- sockstat -4
- tail /var/log/messages
ks34581# grep jail_list /etc/rc.conf jail_list="toto"Si toto.mondomaine.tld pointe bien vers l'adresse publique du serveur, il ne reste plus que la configuration de pf: ks34581# cat /etc/pf.conf
[ snip ] rdr pass on $ext_if proto tcp to port 65080 -> 172.16.0.1 port ssh rdr pass on $ext_if proto tcp to port http -> 172.16.0.1 port http pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port ssh pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port http [ snip ]
Ici la jail ayant pour ip 172.16.0.1 fait tourner un serveur web et son serveur ssh est accessible depuis ip.publique.du.kimsufi port 65080
A faire
- jouer avec named et les views (publique / jail)
- jail lighttpd + symon
- jail postgresql
- jail smtp+dspam
- jail dev
- limiter la taille des billet :)
- poufiner la conf de nanoblogger
![Validate my Atom 1.0 feed [Valid Atom 1.0]](/valid-atom.png)
![Validate my RSS feed [Valid RSS]](/valid-rss-rogers.png)