30/12/2012
201212301200 freebsd xen domU rescue
Un domU à la sauce FreeBSD
J'ai à ma disposition un ordinateur portable Dell Latitude D810 généreusement doté de 2 Go de ram, d'un disque accueuillant de 40 Go, le tout propulsé par un unique mais véloce Pentium Mobile se déplaçant à la vitesse supersonique de 1.73 GHz. Tout ça à la portée du premier quidam venu c'est fou, non ?
Devant cette débauche de puissance, on ne peut que s'incliner. Et installer un NetBSD 6.0 i386 parce que les serviettes oranges ça roxe. Quelles sont les origines de cette roxitude ? Une déscendance directe avec Unix (le vrai, le seul et l'unique, sorti des entrailles d'un PDP 11 il y a plus de 40 ans) ? 20 ans d'histoire (sans compter sa longue gestion au sein du CSRG, hébergé par l'University of Berkeley, California) ? Une accointance particulière avec le projet Xen ? Son récent support de LVM ? Une communauté française particulièrement impliquée (de par ses contributions de qualité et de ses rassemblements de haut niveau) ?
Nul doute que nous sommes en présence d'un OS du bien. Il est aisé de trouver moultes documentations relatives à son installation (dans le cas contraire n'hésitez pas à vous procurer le Gnu Linux Magazine France n°115) et l'ajout de Xen (version 4.1) est trivial. Mais un OS du bien c'est bien, deux c'est mieux. Je me propose donc de détailler les différentes étapes menant à l'obtention d'un domU FreeBSD 9.0.
Les caractéristiques de la machine et une volonté de parcourir des chemins peu fréquentés expliquent les choix suivants:
- pas de ZFS (car gourmand en ram et nous devons partager 2 Go entre Xen, le dom0 et nos domU)
- un espace disque limité par rapport aux capacités actuelles (mais on peut en faire des cochonneries avec 40 Go :)
- tenter de mimer OpenBSD (et son bsd.rd) et NetBSD (et son netbsd-INSTALL_XEN3PAE_DOMU.gz)
- pas de NFS (j'aime pô)
- laisser le dom0 le plus propre possible (pas de packages en plus et mollo sur l'espace disque)
- apprendre des trucs (pleins)
Le projet FreeBSD ne proposant pas de kernel xenifié tout prêt, il va falloir passer par les sources. Une machine (même virtuelle) avec un FreeBSD i386 (le kernel compilé depuis une machine X86_64 n'était pas reconnu comme PAE, pré-requis indispensable à l'utilisation de Xen 4.1), la bible sous les yeux, les sources en version 9.0 fraichement récupérés et nous voilà prêt à compiler 2 kernels:
- freebsd_XEN_DOMU
- freebsd-INSTALL_XEN_DOMU
Point de compilation sans configuration et un peu de lecture. Inutile de compiler l'ensemble des modules, les divers périphériques disponibles dans un domU sont tous identifiés et intégrés dans le kernel. Seul bémol: la présence des options de debug. On peut, sans être trop téméraire, s'en passer aisément (tout comme de nfs dont je ne suis pas un fervent adepte):
# cat /usr/src/sys/i386/conf/XEN_PROD include XEN ident XEN_PROD makeoptions DEBUG= makeoptions MODULES_OVERRIDE= nooptions SCTP # Stream Control Transmission Protocol nooptions NFSCL # New Network Filesystem Client nooptions NFSD # New Network Filesystem Server nooptions NFSLOCKD # Network Lock Manager nooptions NFS_ROOT # NFS usable as /, requires NFSCL # Debugging for use in -current nooptions KDB # Enable kernel debugger support. nooptions DDB # Support DDB. nooptions GDB # Support remote GDB. nooptions DEADLKRES # Enable the deadlock resolver nooptions INVARIANTS # Enable calls of extra sanity checking nooptions INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS nooptions WITNESS # Enable checks to detect deadlocks and cycles nooptions WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed # cd /usr/src # make buildkernel KERNCONF=XEN_PROD # ls -l /usr/obj/usr/src/sys/XEN_PROD/kernel -rwxr-xr-x 1 root wheel 3962117 Dec 28 17:27 /usr/obj/usr/src/sys/XEN_PROD/kernel
J'ai dit mollo sur l'espace disque. Je n'utiliserais donc pas les supports habituels (oui môssieur, même les 130 Mo du bootonly sont encore trop pour moi :)
FreeBSD-9.0-RELEASE-i386-bootonly.iso 131 582 KB FreeBSD-9.0-RELEASE-i386-disc1.iso 513 882 KB FreeBSD-9.0-RELEASE-i386-dvd1.iso 2 191 632 KB FreeBSD-9.0-RELEASE-i386-memstick.img 547 752 KB
Pour comprendre la suite des évènements, passons en revue les étapes de l'installation d'un OS du bien:
- boot du kernel
- obtention d'un shell
- préparation du support de destination
- installation du système
- configuration
Les étapes 2 à 5 sont souvent dévolues à un programme d'installation (le vénérable sysinstall ou le récent bsdinstall). Afin de mimer OpenBSD ou NetBSD, je souhaite construire un kernel contenant de quoi installer ma boule de geisha. Ce kernel contiendra un ramdisk, idéalement peuplé du programme d'installation. Mais là où le bât blesse, c'est que la page de manuel de sysinstall est claire:
This product is currently at the end of its life cycle and will eventually be replaced.
bsdinstall est quant à lui un script shell faisant appel à d'autres scripts ou programmes:
# ls -l /usr/libexec/bsdinstall/ total 200 -r-xr-xr-x 1 root wheel 1570 Jan 3 2012 adduser -r-xr-xr-x 1 root wheel 7356 Jan 3 2012 auto -r-xr-xr-x 2 root wheel 39888 Jan 3 2012 autopart -r-xr-xr-x 1 root wheel 2591 Jan 3 2012 checksum -r-xr-xr-x 1 root wheel 1680 Jan 3 2012 config -r-xr-xr-x 1 root wheel 8436 Jan 3 2012 distextract -r-xr-xr-x 1 root wheel 8452 Jan 3 2012 distfetch -r-xr-xr-x 1 root wheel 3446 Jan 3 2012 docsinstall -r-xr-xr-x 1 root wheel 2053 Jan 3 2012 hostname -r-xr-xr-x 1 root wheel 3851 Jan 3 2012 jail -r-xr-xr-x 1 root wheel 1747 Jan 3 2012 keymap -r-xr-xr-x 1 root wheel 8663 Jan 3 2012 mirrorselect -r-xr-xr-x 1 root wheel 2225 Jan 3 2012 mount -r-xr-xr-x 1 root wheel 6253 Jan 3 2012 netconfig -r-xr-xr-x 1 root wheel 3496 Jan 3 2012 netconfig_ipv4 -r-xr-xr-x 1 root wheel 4543 Jan 3 2012 netconfig_ipv6 -r-xr-xr-x 2 root wheel 39888 Jan 3 2012 partedit -r-xr-xr-x 1 root wheel 1635 Jan 3 2012 rootpass -r-xr-xr-x 1 root wheel 2895 Jan 3 2012 services -r-xr-xr-x 1 root wheel 1477 Jan 3 2012 time -r-xr-xr-x 1 root wheel 1810 Jan 3 2012 umount -r-xr-xr-x 1 root wheel 4700 Jan 3 2012 wlanconfig
Il serait assez laborieux de faire la liste de tous les binaires (et de leurs dépendances respectives) utilisés, car même s'ils sont tous compris dans "base", je ne vais pas faire rentrer la moitié de "base" dans un kernel.
Mes précédentes aventures m'ont fait découvrir le "rescue" et j'ai décidé d'approfondir cette piste. Un rapide coup d'oeil à "/rescue" nous apprend 2 choses:
- les outils ne manquent pas (gestion des disques durs, systèmes de fichier, configuration réseau, compression / décompression, restauration)
- le tout dans moins de 5 Mo
Les plus perspicaces auront remarqué l'absence de fetch, ftp ou nc. Aucun outil pour récupérer un fichier (au hasard base.txz). Casse la tienne comme dit si bien mon ami Béru, on va phalanger ça.
Après lecture de librescue/Makefile et rescue/Makefile, je configure la compilation de "rescue" de la sorte:
# cat /root/etc/src_xen_install.conf WITHOUT_RCMDS="yes" WITHOUT_TCSH="yes" WITHOUT_ATM="yes" #WITHOUT_INET6_SUPPORT="yes" WITHOUT_IPFILTER="yes" WITHOUT_IPX="yes" WITHOUT_ZFS="yes" WITHOUT_NIS="yes" WITHOUT_HESIOD="yes" #WITHOUT_OPENSSL="yes"
Au résultat:
# cd /usr/src/rescue/ # make SRCCONF=/root/etc/src_xen_install.conf obj # make SRCCONF=/root/etc/src_xen_install.conf # ls -l /usr/obj/usr/src/rescue/rescue/rescue -rwxr-xr-x 1 root wheel 3778132 Dec 29 08:53 /usr/obj/usr/src/rescue/rescue/rescue
Pour rajouter un binaire à notre "rescue", il faut malheureusement éditer rescue/Makefile. Inutile de sortir la tronçonneuse pour alléger la partie CRUNCH_PROGS_bin=, le gain ne serait que de quelques centaines de Ko. Si certains esprits chafouins avaient l'idée saugrenue d'objecter que fetch serait plus approprié, je leur souhaite bon courage avec la lib ssl.
# diff -u rescue/Makefile.orig rescue/Makefile --- rescue/Makefile.orig 2012-12-29 09:01:22.000000000 +0100 +++ rescue/Makefile 2012-12-29 12:50:24.000000000 +0100 @@ -206,6 +206,7 @@ CRUNCH_PROGS_usr.bin+= id CRUNCH_ALIAS_id= groups whoami +CRUNCH_PROGS_usr.bin+= ftp ################################################################## # Programs from stock /usr/sbin #
Au résultat:
# ls -l /usr/obj/usr/src/rescue/rescue/rescue -rwxr-xr-x 1 root wheel 3897468 Dec 29 12:52 /usr/obj/usr/src/rescue/rescue/rescue
Le "rescue" est prêt, reste à l'intégrer à notre kernel:
# dd if=/dev/zero of=/tmp/mfs_image bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes transferred in 0.017344 secs (302287859 bytes/sec)
# mdconfig -a -t vnode -f /tmp/mfs_image -u 0
# gpart create -s gpt md0
md0 created
# gpart add -t freebsd-ufs md0
md0p1 added
# newfs -O1 -o space -m 0 md0p1
/dev/md0p1: 5.0MB (10168 sectors) block size 32768, fragment size 4096
using 2 cylinder groups of 4.00MB, 128 blks, 256 inodes.
super-block backups (for fsck -b #) at:
64, 8256
# mount /dev/md0p1 /mnt
# mkdir /mnt/{rescue,dev,disk}
# cd /usr/src/rescue/
# make SRCCONF=/root/etc/src_xen_install.conf DESTDIR=/mnt DONTSTRIP=1 install
# cat /usr/src/sys/i386/conf/XEN_INSTALL
include XEN_PROD
ident XEN_INSTALL
options MD_ROOT # MD is a potential root device
options MD_ROOT_SIZE=5120 # 5M
makeoptions MFS_IMAGE=/tmp/mfs_image
options ROOTDEVNAME=\"ufs:/dev/md0p1\"
# umount /mnt
# mdconfig -d -u 0
# cd /usr/src
# make buildkernel KERNCONF=XEN_INSTALL
[ snip des trucs ]
>>> Kernel build for XEN_INSTALL completed on Sat Dec 29 13:40:32 CET 2012
--------------------------------------------------------------
# ls -l /usr/obj/usr/src/sys/XEN_INSTALL/kernel
-rwxr-xr-x 1 root wheel 9205179 Dec 29 13:40 /usr/obj/usr/src/sys/XEN_INSTALL/kernel
Il est temps d'immortaliser tout ce travail:
$ md5 freebsd* MD5 (freebsd-INSTALL_XEN_DOMU) = e763357ad52622ba5f5b2dcba9c5d373 MD5 (freebsd_XEN_DOMU) = 77d01b45d09e23a05962119f07765505 $ sha256 freebsd* SHA256 (freebsd-INSTALL_XEN_DOMU) = 9a2f935cbc6acebdd1a165d9b390822a303ad6db41db7c11ae5862e8e78ff9dd SHA256 (freebsd_XEN_DOMU) = d4fd2a4061ebe507e760ec4241354dbfaeafd97457faa17eba1b57b874e7e024
Une fois tout ce beau monde copié sur notre dom0, on peut passer à la configuration du domU freebsd. Je rappelle que LVM est désormais disponible sur nos serviettes oranges, autant en profiter (vg00 est mon volume group principal):
# lvm lvcreate --size 10G -n lv_freebsd vg00 Logical volume "lv_freebsd" created # lvm lvdisplay /dev/vg00/lv_freebsd --- Logical volume --- LV Name /dev/vg00/lv_freebsd VG Name vg00 LV UUID E2ReS2-e9mh-D1KB-EHXg-PcKz-QYbt-rRLIw6 LV Write Access read/write LV Status available # open 0 LV Size 10.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 0 Block device 169:2
La configuration du domU pour l'installation:
# cat /root/etc/freebsd.cfg kernel = '/root/xen/freebsd-INSTALL_XEN_DOMU' memory = '256' disk = [ 'phy:/dev/mapper/vg00-lv_freebsd,hda,w' ] name = 'xenfree.bsdsx.fr' vif = [ 'mac=00:16:3e:00:00:51,bridge=bridge0', 'mac=00:16:3e:00:01:51,bridge=bridge1' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' extra = 'console=hvc0,boot_verbose,kern.hz=100,vfs.root.mountfrom=ufs:/dev/md0p1'
2 mots concernant le réseau:
J'utilise xen en mode brouteur et pleins d'interfaces, une adaptation à votre propre utilisation est sans doute nécessaire.
Même si tout semble prévu, il n'est pas possible, depuis le rescue, d'utiliser dhclient. Cette possibilité nous aurait permis d'avoir un accès réseau "complet" (passerelle, serveurs de noms ...) et de pouvoir récupérer base.txz depuis les sites officiels. Il faudra donc se contenter de configurer manuellement une interface réseau (xn0) et utiliser des adresses ip en lieu et place de nom d'hôte. Je vais donc servir base.txz en utilisant les outils disponibles sur le dom0 (inetd et /usr/libexec/httpd):
$ grep ^http /etc/inetd.conf http stream tcp nowait:600 _httpd /usr/libexec/httpd httpd /var/www $ ls -l /var/www/freebsd/9.0/ total 105792 -rw-r--r-- 1 root wheel 54107736 Dec 17 21:47 base.txz # pkill -HUP inetd
Dernière recommandation: ne pas tenir compte du message suivant:
[XEN] hypervisor wallclock nudged; nudging TOD.
Il est temps de rentrer dans le vif du sujet:
# xm create /home/dsx/etc/freebsd.cfg -c
Using config file "/home/dsx/etc/freebsd.cfg".
Started domain xenfree.bsdsx.fr (id=23)
WARNING: loader(8) metadata is missing!
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-RELEASE-p5 #5: Sat Dec 29 16:45:44 CET 2012
dsx@dsxbsd001:/usr/obj/usr/src/sys/XEN_INSTALL i386
Xen reported: 1729.021 MHz processor.
Timecounter "ixen" frequency 1953125 Hz quality 0
CPU: Intel(R) Pentium(R) M processor 1.73GHz (1729.02-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0x6d8 Family = 6 Model = d Stepping = 8
Features=0xafe1fbff
Features2=0x180
AMD Features=0x100000
real memory = 268435456 (256 MB)
avail memory = 251011072 (239 MB)
[XEN] IPI cpu=0 irq=128 vector=RESCHEDULE_VECTOR (0)
[XEN] IPI cpu=0 irq=129 vector=CALL_FUNCTION_VECTOR (1)
[XEN] xen_rtc_probe: probing Hypervisor RTC clock
rtc0: on motherboard
[XEN] xen_rtc_attach: attaching Hypervisor RTC clock
xenstore0: on motherboard
xc0: on motherboard
Event timer "ixen" quality 600
Timecounters tick every 10.000 msec
[XEN] hypervisor wallclock nudged; nudging TOD.
xenbusb_front0: on xenstore0
xn0: at device/vif/0 on xenbusb_front0
xn0: Ethernet address: 00:16:3e:00:00:51
xn1: at device/vif/1 on xenbusb_front0
xn1: Ethernet address: 00:16:3e:00:01:51
xenbusb_back0: on xenstore0
xctrl0: on xenstore0
xbd0: 10240MB at device/vbd/768 on xenbusb_front0
xbd0: attaching as ad0
xn0: backend features:
xn1: backend features:
Timecounter "TSC" frequency 1729021000 Hz quality 800
Trying to mount root from ufs:/dev/md0p1 []...
rtc0: [XEN] xen_rtc_gettime
rtc0: [XEN] xen_rtc_gettime: wallclock 1355568504 sec; 833095242 nsec
rtc0: [XEN] xen_rtc_gettime: uptime 1291968 sec; 51658017 nsec
rtc0: [XEN] xen_rtc_gettime: TOD 1356860472 sec; 884753259 nsec
Dec 30 09:41:13 init: login_getclass: unknown class 'daemon'
cannot open /etc/rc: No such file or directory
Enter full pathname of shell or RETURN for /rescue/sh: [XEN] hypervisor wallclock nudged; nudging TOD.
Cannot read termcap database;
using dumb terminal settings.
# gpart create -s gpt ad0
ad0 created
# gpart add -t freebsd-swap -s 1G ad0
ad0p1 added
# gpart add -t freebsd-ufs ad0
ad0p2 added
# newfs ad0p2
/dev/ad0p2: 9216.0MB (18874296 sectors) block size 32768, fragment size 4096
using 13 cylinder groups of 740.00MB, 23680 blks, 47360 inodes.
super-block backups (for fsck -b #) at:
192, 1515712, 3031232, 4546752, 6062272, 7577792, 9093312, 10608832, 12124352,
13639872, 15155392, 16670912, 18186432
newfs: Cannot retrieve operator gid, using gid 0.
# mount /dev/ad0p2 /disk
# ifconfig xn0 up
xn0: link state changed to DOWN
xn0: link state changed to UP
# ifconfig xn0 inet 10.30.12.51 netmask 255.255.255.0
# ping -c 2 10.30.12.1
PING 10.30.12.1 (10.30.12.1): 56 data bytes
64 bytes from 10.30.12.1: icmp_seq=0 ttl=255 time=0.442 ms
64 bytes from 10.30.12.1: icmp_seq=1 ttl=255 time=0.146 ms
--- 10.30.12.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.146/0.294/0.442/0.148 ms
# cd /disk
# ftp -4 http://10.30.12.1/freebsd/9.0/base.txz
ftp: Can't lookup `10.30.12.1:http': servname not supported for ai_socktype
# ftp -4 http://10.30.12.1:80/freebsd/9.0/base.txz
Requesting http://10.30.12.1:80/freebsd/9.0/base.txz
54107736 bytes retrieved in 00:04 (11.12 MiB/s)
# md5 base.txz
MD5 (base.txz) = 38d2dca70b768f6992e1cf11af663f0b
# tar xzpf base.txz
# echo '# Device Mountpoint FStype Options Dump Pass#' > /disk/etc/fstab
# echo '/dev/ad0p1 none swap sw 0 0' >> /disk/etc/fstab
# echo '/dev/ad0p2 / ufs rw 1 1' >> /disk/etc/fstab
# sed -i '' '/^ttyv/d' /disk/etc/ttys
# echo 'xc0 "/usr/libexec/getty Pc" vt100 on secure' >> /disk/etc/ttys
Le premier ftp est juste là pour montrer que sans /etc/services, il faut connaitre les numéros de port par coeur :) Arrivé à ce stade, on peut se caresser le pubis. Le plus dur est fait, il nous reste l'étape 5 (configuration). On peut:
- récupérer des fichiers de configuration depuis le réseau
- faire un chroot /disk (mais attention, le terminal n'est pas configuré, vi ne va pas aimer)
- redémarrer le système: root ne possède pas de mot de passe
Je préfère personnellement la dernière solution, même si elle implique un reboot supplémentaire.
Le fichier de configuration final:
#kernel = '/home/dsx/xen/freebsd-INSTALL_XEN_DOMU' kernel = '/home/dsx/xen/freebsd_XEN_DOMU' memory = '256' disk = [ 'phy:/dev/mapper/vg00-lv_freebsd,hda,w' ] name = 'xenfree.bsdsx.fr' vif = [ 'mac=00:16:3e:00:00:51,bridge=bridge0', 'mac=00:16:3e:00:01:51,bridge=bridge1' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' #extra = 'console=hvc0,boot_verbose,kern.hz=100,vfs.root.mountfrom=ufs:/dev/md0p1' extra = 'console=hvc0,boot_verbose,kern.hz=100,vfs.root.mountfrom=ufs:/dev/ad0p2'
Pour conclure:
L'automatisation de l'installation peut se faire depuis un fichier /etc/rc que l'on aura pris soin de placer dans le ramdisk (attention à bien tout tester). Pour ma part, j'ai appris plein de trucs, donc mission accomplie :) Et cerise sur le gâteau, FreeBSD 9.1 est disponible !
Ps: les kernels sont disponibles ici.
27/05/2010
201005271934 freebsd guruplug arm
GuruPlug Server Plus et FreeBSD
Mon GuruPlug Server Plus a fini par arriver. Maintenant que mon OpenRD est opérationnel, j'ai pensé que le GuruPlug me ferait moins de misère. Et bien pas du tout. Pour les futurs acquéreurs: le GuruPlug JTAG Board c'est pas une option.
Pourtant mon plan était simple:
- une clef usb de 4Go (1 partition FAT + 1 slice FreeBSD contenant une simple partition)
- un make installword depuis l'OpenRD
- configuration du U-Boot
- joie et bonheur
Après plusieurs tentatives, j'ai fini par comprendre que ma clef était reconnue en tant que da2. Je recompile mon kernel avec l'option kivabien (options ROOTDEVNAME=\"ufs:/dev/da2s2a\").
Reboot et paf: re-fail. Le kernel boote, tente de mounter la racine mais, voire MAIS, la clef n'est pas encore détectée. Une première piste me conduit vers une impasse. Le grand Ternet étant fait de clickas et de clickous (de fil en aiguille quoi) je tombe sur ce patch. Mon ami Murphy en profite pour le rendre incompatible avec un FreeBSD 9.0 CURRENT. Je retrousse mes manches et c'est parti pour une scéance de $EDITOR (belle esquive de troll :).
Un reboot pour la route et je touche au but:guruplug# uname -srm FreeBSD 9.0-CURRENT arm
Il ne me reste plus qu'à rajouter un user, configurer le réseau et je vois la fin du tunnel. Et ben non. Murphy(ou un de ses potes) décide que le rj45/gigabit n'est pas compatible avec un boot. Il faut le voir pour le croire, ou alors et encore là. Et comme pour l'instant j'utilise un câble croisé entre mon portable (carte réseau giga) et le guruplug, re-re-fail.
Lueur d'espoir: mon switch est en 100Mbits donc je repousse la mise à jour d'une version plus récente de U-Boot.
Pour finir, la configuration du U-Boot:
Marvell>> printenv
bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact egiga1; ${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;
bootdelay=3
baudrate=115200
x_bootcmd_ethernet=ping 192.168.2.1
x_bootcmd_usb=usb start
x_bootcmd_kernel=nand read.e 0x6400000 0x100000 0x400000
x_bootargs=console=ttyS0,115200
x_bootargs_root=ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs
Marvell>> setenv bootcmd 'usb start;fatload usb 1 900000 kernel.bin;go 900000'
Marvell>> saveenv
Au chapitre des mauvaises nouvelles, le GuruPlug peut servir de chauffage d'appoint, mge1 est aux abonnés absents mais c'est en cours. Le lecteur de carte SD, la carte wifi, le bluetooth, ma clef usb fâchée avec le cache me réservent encore de belles soirées.
Dernier re-re-re-fail pour la route: si le GuruPlug JTAG Board est uniquement branché au GuruPlug, le bousin ne démarre pas.
Pour les curieux, un dmesg kivabien.
Update: c'est qui l'enfant de salaud qui m'a piqué mon adresse MAC ? Preuve que l'ipv6 c'est magique.> ifconfig mge0 mge0: flags=8843Update 2:metric 0 mtu 1500 options=8000b ether 00:00:00:00:00:00 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::845:3302:619b:ed0b%mge0 prefixlen 64 scopeid 0x1 inet6 2001:470:ca75:10:845:3302:619b:ed0b prefixlen 64 autoconf nd6 options=23 media: Ethernet autoselect (100baseTX ) status: active d531:~> ping6 -c 1 2001:470:ca75:10:845:3302:619b:ed0b PING 2001:470:ca75:10:845:3302:619b:ed0b(2001:470:ca75:10:845:3302:619b:ed0b) 56 data bytes 64 bytes from 2001:470:ca75:10:845:3302:619b:ed0b: icmp_seq=1 ttl=63 time=11.9 ms --- 2001:470:ca75:10:845:3302:619b:ed0b ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 11.969/11.969/11.969/0.000 ms
> grep mge0 /etc/rc.conf ifconfig_mge0="ether 00:50:43:aa:aa:aa" ifconfig_mge0_alias0="inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" ifconfig_mge0_ipv6="RTADV" > ifconfig mge0 mge0: flags=8843metric 0 mtu 1500 options=8000b ether 00:50:43:aa:aa:aa inet6 fe80::250:43ff:feaa:aaaa%mge0 prefixlen 64 scopeid 0x1 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 inet6 2001:470:ca75:10:250:43ff:feaa:aaaa prefixlen 64 autoconf nd6 options=23 media: Ethernet autoselect (100baseTX ) status: active
14/05/2010
201005141356 freebsd openrd arm
OpenRD et FreeBSD
Il y a quelques temps, j'ai craqué pour un OpenRD (bon, j'ai aussi pris un GuruPlug mais il n'est toujours pas arrivé).
La bête a rapidement ingéré un disque sata 2.5, il ne lui manquait plus qu'un FreeBSD et c'est là que ça se gâte.
La documentation officielle propose une installation sur NFS mais dans mon cas, c'est impossible car le FreeBSD que j'utilise est derrière une connexion ADSL. Il va donc falloir ruser. Je me dis que si j'arrive à obtenir un kernel avec une image disque contenant ce qu'il faut pour l'installation c'est gagné (un peu à la sauce OpenBSD et son bsd.rd).
Après quelques essais infructueux à base de (Pico/Nano)BSD, j'explore la voie du "rescue". Je finis par réaliser que le "rescue" se construit très bien avec le "make buildworld" et que je fais d'une pierre deux coups. Cette opération pouvant durer un certain temps, je désactive un maximum de chose dans /etc/src.conf. De plus, je vire de la compile ifmcstat dans /usr/src/usr.sbin/Makefile
U-Boot permet aussi de booter sur une clef usb et je prépare le plan suivant:
- make builworld + installworld
- make buildkernel avec un mfs
- make buildkernel
- sur une clef usb, copier les deux kernel + un tbz de l'arborescence du installworld
- booter sur le kernel mfs
- partitionner/formater le disque dur
- détar du tbz, copie du kernel
- configurer U-Boot
- prier
Est-il utile de préciser que ça ne va pas se passer comme une lettre à la poste ?
C'est parti :# setenv DESTDIR /zfs/arm/chroot # make buildworld TARGET_ARCH=arm # make installworld TARGET_ARCH=arm # make distrib-dirs TARGET_ARCH=arm # make distribution TARGET_ARCH=arm # tar cjvp -f /tmp/arm.tbz -C /zfs/arm/chroot/ .Je prépare mon image disque:
# dd if=/dev/zero of=/tmp/mfs_image bs=1k count=4096 # mdconfig -a -t vnode -f /tmp/mfs_image -u 0 # fdisk -B /dev/md0 # Do you want to change the boot code? [n] # Should we write new partition table? [n] y # disklabel -Brw /dev/md0 # newfs -O1 -o space -m 0 /dev/md0a # mount /dev/md0a /mnt # cd /mnt # mkdir rescue dev key disk # cd rescue # rsync -H /zfs/arm/chroot/rescue/* . # cd # umount /dev/md0a # mdconfig -d -u 0Je compile deux kernels:
# cp /usr/src/sys/arm/conf/DB-88F6XXX /usr/src/sys/arm/conf/OPENRD-MFS # cp /usr/src/sys/arm/conf/DB-88F6XXX /usr/src/sys/arm/conf/OPENRD # vi /usr/src/sys/arm/conf/OPENRD-MFS ident OPENRD-MFS ... options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols options FFS #Berkeley Fast Filesystem options MSDOSFS # MSDOS Filesystem options MD_ROOT # MD is a potential root device options MD_ROOT_SIZE=4096 # 4M makeoptions MFS_IMAGE=/tmp/mfs_image options ROOTDEVNAME=\"ufs:/dev/md0a\" options SYSVSHM #SYSV-style shared memory options SYSVMSG #SYSV-style message queues ... # cd /usr/src # make buildkernel TARGET_ARCH=arm KERNCONF=OPENRD-MFS # cp /usr/obj/arm/usr/src/sys/OPENRD/kernel.bin /tmp/mfs.bin # vi /usr/src/sys/arm/conf/OPENRD ident OPENRD ... options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols options FFS #Berkeley Fast Filesystem options MSDOSFS # MSDOS Filesystem options ROOTDEVNAME=\"ufs:/dev/ad0s1a\" options SYSVSHM #SYSV-style shared memory options SYSVMSG #SYSV-style message queues ... # cd /usr/src # make buildkernel TARGET_ARCH=arm KERNCONF=OPENRD # cp /usr/obj/arm/usr/src/sys/OPENRD/kernel.bin /tmp/Depuis ma Debian, je prépare ma clef usb:
$ sudo mkfs.msdos -c -F 16 /dev/sdb1 $ sudo mount -t msdos /dev/sdb1 /mnt $ cp arm.tbz *.bin /mnt $ ls -l /mnt -rw-r--r-- 1 dsx dsx 24243563 mai 13 08:27 arm.tbz -rwxr-xr-x 1 dsx dsx 2950452 mai 13 19:15 kernel.bin -rwxr-xr-x 1 dsx dsx 7145076 mai 12 19:47 mfs.binPour obtenir la console rendez-vous ici, et au départ j'ai utilisé un serveur tftp afin de préserver ma clef usb. Il sera lancé en mode standalone (sudo in.tftpd -L -s /home/dsx/).
$ sudo screen -c /dev/null /dev/ttyUSB1 115200
Marvell>> setenv ipaddr 192.168.1.1
Marvell>> setenv serverip 192.168.1.116
Marvell>> tftpboot 900000 mfs.bin
Using egiga0 device
TFTP from server 192.168.1.116; our IP address is 192.168.1.1
Filename 'mfs.bin'.
Load address: 0x900000
Loading: T #################################################################
...
###################
done
Bytes transferred = 7084148 (6c1874 hex)
Marvell>> go 900000
[ snip boot ]
May 9 18:30:18 init: login_getclass: unknown class 'daemon'
/etc/rc: Can't open /etc/rc: No such file or directory
Enter full pathname of shell or RETURN for /rescue/sh:
Cannot read termcap database;
using dumb terminal settings.
# ls
.snap dev disk key rescue
On retrouve nos différents répertoires qui nous serviront de point de montage:
# mount_msdos /dev/da0a /key
Si ici vous prenez des erreurs, vérifiez la présence de "options MSDOSFS" dans le fichier de configuration du kernel, ça peut faire gagner une après-midi. On peut ensuite supprimer le partitionnement du disque dur à grands coups de gpart delete et gpart destroy.
J'y ai passé plusieurs soirées mais impossible de créer une partition FAT avec gpart afin d'y placer kernel.bin. Le linux fourni ne m'a pas aidé non plus, pas de dosfstools d'installé.
# gpart show ad0
gpart: No such geom: ad0.
# gpart create -s mbr ad0
ad0 created
# gpart show ad0
=> 63 78165297 ad0 MBR (37G)
63 78165297 - free - (37G)
# gpart add -t freebsd ad0
ad0s1 added
# gpart create -s BSD ad0s1
ad0s1 created
# gpart show ad0s1
=> 0 78165297 ad0s1 BSD (37G)
0 78165297 - free - (37G)
# gpart add -i 1 -s 4G -t freebsd-ufs ad0s1
ad0s1a added
# gpart show ad0s1
=> 0 78165297 ad0s1 BSD (37G)
0 8388608 1 freebsd-ufs (4.0G)
8388608 69776689 - free - (33G)
# gpart add -i 2 -s 1G -t freebsd-swap ad0s1
ad0s1b added
# gpart show ad0s1
=> 0 78165297 ad0s1 BSD (37G)
0 8388608 1 freebsd-ufs (4.0G)
8388608 2097152 2 freebsd-swap (1.0G)
10485760 67679537 - free - (32G)
# gpart add -i 3 -s 1G -t freebsd-ufs ad0s1
gpart: index '3': File exists
# gpart add -i 4 -s 1G -t freebsd-ufs ad0s1
ad0s1d added
...
# gpart show ad0s1
=> 0 78165297 ad0s1 BSD (37G)
0 8388608 1 freebsd-ufs (4.0G)
8388608 2097152 2 freebsd-swap (1.0G)
10485760 2097152 4 freebsd-ufs (1.0G)
12582912 2097152 5 freebsd-ufs (1.0G)
14680064 2097152 6 freebsd-ufs (1.0G)
16777216 61388081 7 freebsd-ufs (29G)
# newfs /dev/ad0s1a
# newfs /dev/ad0s1d
# newfs /dev/ad0s1e
# newfs /dev/ad0s1f
# newfs /dev/ad0s1g
# mount /dev/ad0s1a /disk/
# cd /disk
# mkdir tmp var home usr
# cp /key/arm.tbz .
# tar xjvpf arm.tbz
Pour la petite histoire, mon disque était un peu HS et freezait de temps en temps lors du tar. J'ai passé un temps fou à diagnostiquer le problème pour finir par acheter un disque neuf.
Bien, il reste à configurer le tout:# echo '/dev/ad0s1a / ufs rw,sync 1 1' >> etc/fstab ... # echo '/dev/ad0s1g /usr ufs rw,sync 2 2' >> etc/fstab # echo 'hostname="openrd.bsdsx.fr"' >> etc/rc.conf ... # echo 'ifconfig_mge0_ipv6="RTADV"' >> etc/rc.confAu passage, la syntaxe ipv6 du /etc.rc.conf a évolué et je m'en suis aperçu un peu tard (encore du temps de perdu). Dernière configuration, U-Boot:
Marvell>> setenv bootcmd 'usb start;fatload usb 0:1 900000 kernel.bin;go 900000' Marvell>> saveenvLe résultat:
openrd# uname -a FreeBSD openrd.bsdsx.fr 9.0-CURRENT FreeBSD 9.0-CURRENT #8: Fri May 14 18:15:14 CEST 2010 root@k45.bsdsx.fr:/usr/obj/arm/usr/src/sys/OPENRD arm
Pour les curieux les différents fichiers sont disponibles. Bon, c'est pas le tout mais maintenant j'ai un "make buildworld" à faire et des ports à installer (encore des bonnes soirées en perspective).
Update: WITHOUT_MAKE c'est pas une bonne idée.
Update2: Romain m'avait bien dit que l'option "sync" dans /etc/fstab était une bonne idée. Après une dizaine de csup -g -L 2 /root/current tous plus foireux les uns que les autres, je confirme.
05/05/2009
200905052004 update freebsd openwrt blosxom
Mises à jour diverses et variées
Il y a des périodes comme ça, on a envie/besoin de changement(s). Petit récapitulatif:
kimsufi
Passage de FreeBSD 7.1 en 7.2. A moi les joies des jails multi ipv4/ipv6 !
fon2200
Passage d' OpenWRT 7.09 en 8.09. Toujours aussi simple une fois que l'on a accès à la console.
dg834g
Récupération d'un petit boitier modem/routeur wifi qui a rapidement ingurgité un OpenWrt 8.09. Seule ombre au tableau:root@dg384g:~# df -h Filesystem Size Used Available Use% Mounted on rootfs 1.2M 1.2M 0 100% / /dev/root 1.2M 1.2M 0 100% /rom tmpfs 6.2M 736.0k 5.5M 12% /tmp tmpfs 512.0k 0 512.0k 0% /dev /dev/mtdblock4 1.8M 760.0k 1.1M 41% /jffs mini_fo:/jffs 1.2M 1.2M 0 100% /
Un rootfs de 1.2 Mo rempli à 100% et un /tmp qui ne sert pas beaucoup. Je dois revoir ma copie.
shuttle K45
J'ai mis en place un petit NAS pour sauvegarder les photos et vidéos familiales. Au menu:
- 2 x 1 To en Raid 1
- FreeBSD
- Zfs
Un prochain billet décrira plus en détail l'histoire de cette machine.
Le blog
Il n'aura échappé à personne le changement radical de ce blog. On m'a fait découvrir blosxom et je suis tombé sous le charme de ces 444 lignes de perl. Du perl, rien que du perl, pas de dépendance. Le style est un peu brut de décoffrage mais j'y travaille :)
A venir:
- passage du linutop et des vieux portables en OpenBSD 4.5
- passage des foneras 2100 et de la fonera 2+ en OpenWrt 8.09
- peaufinage du blog
Bon, c'est pas le tout mais j'ai du boulot :)
Ps: pour les adeptes des flux rss/atom, c'est en cours.
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)