Configuration de papillon
papillon
est une kimsufi louée chez OVH.
1. Matériel
% sysctl hw.ncpu hw.model hw.ncpu: 1 hw.model: Intel(R) Celeron(R) CPU 2.66GHz % sysctl hw.physmem hw.physmem: 2125561856
Sortie complète de dmesg(8)
plus bas.
1.1. Étiquetage des disques
Personne n'aime utiliser des noms tels que ad4s1b
pour désigner ses
disques. FreeBSD a deux moyens pour attribuer des étiquettes au
disques : ou bien des étiquettes spécifiques au système de fichiers
utilisé, ou alors des étiquettes, gérées par glabel(8)
(qui utilise
geom(4)
en dessous).
Les étiquettes de glabel
peuvent être temporaires (créées avec
glabel create
), ou permanentes (avec glabel label
). Ces étiquettes
sont indépendantes du système de fichiers utilisé (peuvent même être
utilisées sur de la swap). Dans le cas des étiquettes permanentes, on
écrit dans le dernier bloc de la partition l'étiquette (et donc la
partition perd un bloc). C'est pas très joli… Dans le cas de la
swap, il n'y a cependant pas d'autres solutions.
Les autres étiquettes sont mises avec tunefs(8)
(dans le cas d'UFS,
sinon avec e2fsprogs
, etc.), en modifiant le super-bloc.
Pour une partition normale, il suffit de la démonter puis de passer un
coup de tunefs -L MYLABEL adXsYa
. Par contre, pour la partition racine,
la documentation semble suggérer qu'il suffit de passer en mode simple
utilisateur puis de remonter en lecture seule. Dans mes essais, cela
ne marche pas, il m'a fallu faire un redémarrage complet en mode
simple utilisateur (sur papillon, cela s'est terminé par un démarrage
sur le disque réseau).
Une fois les partitions étiquettées, elles apparaissent dans
/dev/ufs/MYLABEL
. On peut obtenir la correspondance entre les
étiquettes et les partitions avec glabel status
.
On peut utiliser les nœuds de /dev/ufs
partout où un outil attend
une partition, en particulier dans fstab(5)
.
2. Logiciel
papillon
tourne sous FreeBSD 8.1. Installée par OVH en 7.1, mise à
jour en 7.2, 8.0, 8.1.
2.1. Configuration réseau
En ip4, il y a une adresse « principale » plus des adresses failover.
Pour FreeBSD, ces adresses supplémentaires doivent avoir un masque de
/32
. Cela se configure facilement dans rc.conf
:
defaultrouter="203.0.113.254" ifconfig_vr0="inet 203.0.113.72 netmask 255.255.255.0 broadcast 203.0.113.255" ifconfig_vr0_alias0="198.51.100.43 netmask 255.255.255.255"
En ip6, les alias n'ont pas de longueur de préfixe. Pour configurer
ces adresses, le plus propre est d'utiliser /etc/rc.d/network_ipv6
(l'autre solution est d'ajouter aux lignes précedentes quelque
chose comme ifconfig_vr0_alias1="inet6 2001:... alias
). La configuration
donne ceci :
ipv6_enable="YES" ipv6_network_interfaces="vr0" ipv6_ifconfig_vr0="2001:db8:1:8248::1 prefixlen 64" rtsold_enable="YES" # Parfois les routeurs d'OVH arretent d'envoyer des RA ; dans ce cas # on hard-code le next hop #ipv6_defaultrouter="fe80::21e:79ff:fe1e:d400%vr0" # Alias publiques pour les jails ipv6_ifconfig_vr0_alias0="2001:db8:1:8248::25" ipv6_ifconfig_vr0_alias1="2001:db8:1:8248::53" ipv6_ifconfig_vr0_alias2="2001:db8:1:8248::80"
Pour les prisons, on voudra également un réseau privé pour qu'elles
communiquent entre elles. On peut ou bien réutiliser lo0
, ou alors
créer une deuxième interface de loopback, ce que j'ai fait.
It is only possible to start multiple jails with the same IP address, if none of the jails has more than this single overlapping IP address assigned to itself.
Puisqu'on n'a pas beaucoup d'adresses ip4, cela signifie qu'une adresse ip4 sera partagée par plusieurs prisons, et donc elles ne pourront avoir que cette adresse ip4. Par conséquent, notre réseau privé entre prisons se fera en ip6. Il sera configuré ainsi :
cloned_interfaces="lo1" ipv6_network_interfaces="${ipv6_network_interfaces} lo1" ipv6_ifconfig_lo1="inet6 fd93:c8e5:9cb3:666::1 prefixlen 64" ipv6_ifconfig_lo1_alias1="fd93:c8e5:9cb3:666::25" ipv6_ifconfig_lo1_alias2="fd93:c8e5:9cb3:666::53" ipv6_ifconfig_lo1_alias3="fd93:c8e5:9cb3:666::80"
Les interfaces dans $cloned_interfaces
sont crées avec ifconfig
${ifn} create
dans /etc/rc.d/netif
(utiliser $create_args_lo1
s'il y a besoin de passer des arguments supplémentaires à
ifconfig(8)
).
2.2. Prisons
Les services sont divisés en quelques prisons : www
pour le site
Web, ns
pour le serveur de nom, mail
pour le courrier. Une prison
fBSD est très légère. Pour ns
par exemple, elle est limitée à
syslogd
, cron
et named
.
On utilise ezjail pour gérer les prisons. Le principe est de partager
le « /
» des prisons (et de le monter en ro). Pour créer une
nouvelle prison :
ezjail-admin create -f default MYJAIL ip1[,ip2,...]
Cela va :
- ajouter un fichier
/usr/local/etc/ezjail/MYJAIL
; - créer les points de montage nécessaires ;
- ajouter un fichier
/etc/fstab.MYJAIL
qui montera (nullfs(4)
) les systèmes de fichiers nécessaires ; - copier le contenu de la saveur par défaut, et s'arranger pour que le
script
ezjail.flavour
à la racine soit lancé au premier allumage.
La (ou les) ip données à ezjail-admin create
doivent exister avant
de lancer la commande. Toutes les prisons ont la même adresse ip4,
plus une adresse ip6 (propre) sur vr0
et une adresse ip6 sur lo1
.
L'une des prisons utilise pgSQL, il est donc nécessaire d'autoriser l'IPC SysV et d'augmenter la taille des sémaphores.
ezjail affiche un avertissement qui n'a pas lieu d'être lorsqu'on attribue une ip6 à une prison. Un patch pour corriger cet avertissement existe, pas encore intégré en amont.
Sans -f default
, la saveur par défaut n'est pas installée.
2.3. Pare-feu
Rien d'extraordinaire, utilisation de pf sur la machine hôte.
3. dmesg(8)
Copyright (c) 1992-2011 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 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC 2011 [email protected]:/usr/obj/usr/src/sys/GENERIC i386 Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: Intel(R) Celeron(R) CPU 2.66GHz (2666.66-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0xf49 Family = f Model = 4 Stepping = 9 Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> Features2=0x651d<SSE3,DTES64,MON,DSCPL,TM2,CNXT-ID,CX16,xTPR> AMD Features=0x20000000<LM> AMD Features2=0x1<LAHF> TSC: P-state invariant real memory = 2147483648 (2048 MB) avail memory = 2082496512 (1986 MB) ACPI APIC Table: <AMI_ OEMAPIC > ioapic0 <Version 0.3> irqs 0-23 on motherboard ioapic1 <Version 0.3> irqs 24-47 on motherboard kbd1 at kbdmux0 acpi0: <AMI_ OEMRSDT> on motherboard acpi0: [ITHREAD] acpi0: Power Button (fixed) acpi0: reservation of 0, a0000 (3) failed acpi0: reservation of 100000, 7f700000 (3) failed Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpitimer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0 cpu0: <ACPI CPU> on acpi0 pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0 pci0: <ACPI PCI bus> on pcib0 agp0: <VIA 3327 (P4M890) host to PCI bridge> on hostb0 agp0: aperture size is 32M pcib1: <ACPI PCI-PCI bridge> at device 1.0 on pci0 pci1: <ACPI PCI bus> on pcib1 vgapci0: <VGA-compatible display> mem 0xc0000000-0xdfffffff,0xfb000000-0xfbffffff irq 16 at device 0.0 on pci1 pcib2: <ACPI PCI-PCI bridge> irq 27 at device 2.0 on pci0 pci2: <ACPI PCI bus> on pcib2 pcib3: <ACPI PCI-PCI bridge> irq 31 at device 3.0 on pci0 pci3: <ACPI PCI bus> on pcib3 atapci0: <VIA 8237A SATA150 controller> port 0xec00-0xec07,0xe880-0xe883,0xe800-0xe807,0xe480-0xe483,0xe400-0xe40f,0xe000-0xe0ff irq 21 at device 15.0 on pci0 atapci0: [ITHREAD] ata2: <ATA channel 0> on atapci0 ata2: [ITHREAD] ata3: <ATA channel 1> on atapci0 ata3: [ITHREAD] atapci1: <VIA 8237A UDMA133 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xfc00-0xfc0f at device 15.1 on pci0 ata0: <ATA channel 0> on atapci1 ata0: [ITHREAD] ata1: <ATA channel 1> on atapci1 ata1: [ITHREAD] isab0: <PCI-ISA bridge> at device 17.0 on pci0 isa0: <ISA bus> on isab0 vr0: <VIA VT6102 Rhine II 10/100BaseTX> port 0xd800-0xd8ff mem 0xfaeffc00-0xfaeffcff irq 23 at device 18.0 on pci0 vr0: Quirks: 0x0 vr0: Revision: 0x7c miibus0: <MII bus> on vr0 rlphy0: <RTL8201L 10/100 media interface> PHY 1 on miibus0 rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto vr0: Ethernet address: 00:1b:fc:19:17:31 vr0: [ITHREAD] pcib4: <ACPI PCI-PCI bridge> at device 19.0 on pci0 pci4: <ACPI PCI bus> on pcib4 acpibutton0: <Power Button> on acpi0 atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0 uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 uart0: [FILTER] pmtimer0 on isa0 orm0: <ISA Option ROM> at iomem 0xc9800-0xcdfff pnpid ORM0000 on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> irq 1 on atkbdc0 kbd0 at atkbd0 atkbd0: [GIANT-LOCKED] atkbd0: [ITHREAD] ppc0: parallel port not found. p4tcc0: <CPU Frequency Thermal Control> on cpu0 Timecounter "TSC" frequency 2666663110 Hz quality 800 Timecounters tick every 1.000 msec ad4: 476940MB <Seagate ST3500418AS CC38> at ata2-master UDMA100 SATA 1.5Gb/s Trying to mount root from ufs:/dev/ufs/root pid 45213 (emacs) is using legacy pty devices - not logging anymore Security policy loaded: TrustedBSD MAC/BSD Extended (macbsdextended) Security policy unload: TrustedBSD MAC/BSD Extended (macbsdextended) MCA: Bank 0, Status 0xcc00000120040189 MCA: Global Cap 0x0000000000180204, Status 0x0000000000000000 MCA: Vendor "GenuineIntel", ID 0xf49, APIC ID 0 MCA: CPU 0 COR OVER GCACHE L1 SNOOP error MCA: Address 0x1015b00 MCA: Misc 0x140002d800aa0 MCA: Bank 1, Status 0x8000002000000135 MCA: Global Cap 0x0000000000180204, Status 0x0000000000000000 MCA: Vendor "GenuineIntel", ID 0xf49, APIC ID 0 MCA: CPU 0 COR DCACHE L1 DRD error