=== Procedure install FreeBSD 7.0 en remote avec RAID GEOM ou non === DISCLAIMER: Je suis responsable d'aucune perte de donnees ni de rien d'autre que ce soit, utilisez ce tutorial a vos risques et perils. Note: Seul FreeBSD i386 fonctionne sur les dedibox XL, amd64 n'y fonctionne pas. Cassez vous les dents si vous voulez dessus, j'ai abandonne de trouver pourquoi sans kvm ip pour voir l'erreur. Par contre amd64 fonctionne sur les dedibox standard v2 (les Celeron 220). 1/ Partie facile: Il faut generer avec depenguinator un iso MFS. Au choix: Faites le votre ou prenez le mien comme suit ci dessous... <<< Methode votre iso MFS Faites un Google sur depenguinator et debrouillez vous pour ca et ensuite continuez ce tutorial apres le reboot section /2, ou alors... --- Ma methode iso MFS i386 Allez dans un repertoire avec au moins 100m de libre (un ramfs c'est tres bien). - Sur le rescue Linux Dedibox: /var/run en root - Sur un FreeBSD: mdmfs -s 100m md /mnt && cd /mnt # wget ftp://hyrule.folays.net/pub/obediance_i386.img (C'est juste une image depenguinator que j'ai genere depuis OpenBSD et tweake un peu pour utilier devices.hints pour setter la config reseau). # dd if=obediance_i386.img skip=52592 count=1 of=hints Editez le fichier hints, arrangez vous pour qu'il ait un format valide et qu'il fasse 512 octets et se termine par un \n, afin de rajouter ces valeurs (tweakez les pour votre setup) (en gros c'est un device.hints): Note: vous pouvez par exemple completer les 512 octets par des lignes commencant par un "#" avec des espaces dedans. Vous pouvez faire ca comme ca: root@celestis:/var/run# cat << EOF > bli obediance.router="88.191.80.1" obediance.interfaces="re0" obediance.if.re0.mac="00:e0:f4:19:e6:7f" obediance.if.re0.ip="88.191.80.x" obediance.if.re0.mask="255.255.255.0" EOF root@celestis:/var/run# dd if=bli of=hints conv=notrunc Note: l'interface de la dedibox XL s'apelle re0 et de la standard v2 sis0, et de la pro em0. dd if=hints seek=52592 count=1 conv=notrunc of=obediance_i386.img --- Ma methode iso MFS amd64 Faites pareil qu'au dessus avec l'image obediance_amd64_v2.img et en remplacant les valeurs de skip= et seek= par 204 . DEPRECATED: J'ai pas reteste l'amd64.img mais dans la pratique les autres images ont tres bien marche. UPDATE: Faite bien attention a utiliser amd64_v2.img car l'ancienne ne vous permettait malheureusement pas de prendre la main car suite a une erreur de manip, master.passwd et authorized_keys etaient vide. Sorry :). >>> dd l'image sur le dur dans /dev/mirror/gm0 ou /dev/ad4 ou /dev/sda selon votre hebergeur. dd le sur le dur, puis rebootez votre box et connectez vous en SSH. UPDATE: Utilisez http://hyrule.folays.net/id_rsa-yaifo comme cle SSH pour vous connecter en Root. Une fois connecte, fait ceci ASAP pour eviter que d'autres personnes se connectent avec cette cle qui est du coup publique: obediance# passwd (pour changer votre mot de passe) obediance# rm ~/.ssh/authorized_keys (Et supprimez aussi l'utilisateur "obediance" de master.passwd) Ces utilisateurs ont ete bien sur rajoutes que sur l'image d'install, le FreeBSD que vous allez installer est vierge de toute modification. Je prendrai le temps de rajouter un device.hints pour setter un password ou cle SSH perso plus tard... /2 Apres reboot de la becane se connecter en ssh et puis mounter un ramfs de 600M dans /mnt "mdmfs -s 600m md /mnt" Si vous avez moins d'1Go de ram il faudra faire autrement, recuperer seuleument le netinstall pour son mfsroot et detarrer la distrib depuis un ftp ou alors mounter un nfs avec l'iso dessus (bref debrouillez vous). aller dans /mnt et fetcher 7.0-RELEASE-amd64-disc1.iso (ou i386) (sur ftp.free.fr c'est bien par exemple :)) si vous avez un debit de merde, pensez a passer en 1000baseTX full-duplex si vous avez une connectivite gigE :). mounter l'iso via: "mdconfig -a -t vnode -f ./7.0-RELEASE-amd64-disc1.iso" (ou i386) la commande devrait retourner MDX (md3 md4 ... etc) "mkdir /mnt/iso" "mount -t cd9660 /dev/md3 /mnt/iso" "cp iso/boot/mfsroot.gz ./" "gunzip mfsroot.gz" mounter l'image fs: "mdconfig -a -t vnode -f ./mfsroot" "mkdir mfs" "mount /dev/md4c /mnt/mfs" "ln -s . mfs/usr" "mkdir mfs/tmp" "mkdir mfs/iso" "chflags -R uchg mfs" "chflags nouchg mfs/tmp" "chflags nouchg mfs/var" Voir la liste des disques: # geom disk list Maintenant, posez des labels sur vos disques: celestis# geom label load (useless on freebsd 7.0) # geom label label -v drive0 /dev/ad4 # glabel label -v drive1 /dev/ad8 Verifiez (enfin, si vous voulez...): # glabel list # ls -laF /dev/label/ Si vous voulez un RAID-1 (mirror): # gmirror clear /dev/ad4 (ca peut ne pas passer si y'avait aps de GEOM metadata) # gmirror clear /dev/ad8 (ca peut ne pas passer si y'avait pas de GEOM metadata) # kldload iso/boot/kernel/geom_mirror.ko # geom mirror label -v -b round-robin gm0 /dev/label/drive0 # gmirror list # ls -laF /dev/mirror/ Remplacez par la suite les commandes /dev/mirror/gm0 par /dev/label/drive0 si vous avez pas voulu du RAID. Initialiser le secteur 0 (histoire d'etre bien sur de tout effacer): # dd if=/dev/zero of=/dev/mirror/gm0 count=1000 # fdisk -I /dev/mirror/gm0 Initialiser le secteur 0 # fdisk -i /dev/mirror/gm0 Faitez votre table des partitions, je recommande vivement une partition de 2G inutile (size 4194304 correct automatically yes :)), (par exemple Linux ext2fs type/131) au tout debut du disque, ce qui permettra en cas de crash du system, de pouvoir reuploader a nouveau au debut du disque votre propre rescue de 2G. Si vous choisissez de faire ca, apres avoir mis une partition de 2G, ... <<< obediance# fdisk -p /dev/mirror/gm0 > fdisk.conf obediance# cat fdisk.conf # /dev/mirror/gm0 g c60801 h255 s63 p 1 0x83 63 4192902 a 1 Trouvez la taille de votre disque (gmirror list si vous avez choisi RAID, ou glabel list, ligne Providers/Mediasize) Par exemple: "Providers: \n 1. Name: mirror/gm0 \n Mediasize: 500107860992 (466G)" Calculez le start sector de la 2eme partition: Start sector de la slice precedente + sa size Par exemple dans le fdisk.conf: "p 1 0x83 63 4192902" => 63 + 4192902 = 4192965 Calculez le end sector de la 2eme partition: Mediasize/512 - 4192965 = 972580201 On rajoute donc: obediance# echo "p 2 165 4192965 972580201" >> fdisk.conf Changez aussi le "a 1" en "a 2" dans le fdisk.conf pour changer la partition active. Et changez-le de place et mettez le a la fin. Si si, faites-le. obediance# fdisk -f fdisk.conf /dev/mirror/gm0 obediance# fdisk /dev/mirror/gm0 Verifiez au moins que la 2eme partition commence apres la 1ere, CHS'ement parlant..., et que la 2eme partition est active. Vous pouvez aussi essayez de rajouter la 2eme partition avec fdisk -u2 /dev/mirror/gm0, c'est tout aussi chiant de faire les calculs... >>> Remplacez par la suite les commandes /dev/{mirror/gm0,label/drive0}s2 par /dev/{mirror/gm0,label/drive0}s1 si vous avez pas voulu de la partition rescue. Maintenant on cree le disklabel: "dd if=/dev/zero of=/dev/mirror/gm0s2 bs=512 count=32" "bsdlabel -w -B /dev/mirror/gm0s2" "bsdlabel -e /dev/mirror/gm0s2" Vous pouvez mettre * en start pour specifier "apres la precedente" et aussi en size pour specifier "tout ce qui reste". Specifiez "4.2BSD" pour les filesystem et "swap" pour le swap dans la colonne fstype Faites vos jeux^Wpartitions. Vous pouvez specifier des human-readable size (ex. 10g) pour les size. celestis# newfs -L root /dev/mirror/gm0s2a # or "tunefs -L home /dev/mirror/gm0s2a" ensuite pour changer le label... celestis# glabel label -v swap /dev/mirror/gm0s2b celestis# swapon /dev/label/swap celestis# newfs -L var /dev/mirror/gm0s2d celestis# newfs -L tmp /dev/mirror/gm0s2e celestis# newfs -L home /dev/mirror/gm0s2f celestis# newfs -L space /dev/mirror/gm0s2g celestis# ls -laF /dev/label/ /dev/ufs/ :) mounter le / et les sous-mounts (?) de la destination dans /mnt/mfs/mnt => celestis# mount /dev/ufs/root /mnt/mfs/mnt celestis# mkdir mfs/mnt/{var,tmp,home,space} (Un pour chaque point de mountage) celestis# mount /dev/ufs/home /mnt/mfs/mnt/home obediance# mount /dev/ufs/var /mnt/mfs/mnt/var obediance# mount /dev/ufs/tmp /mnt/mfs/mnt/tmp celestis# cat << EOF > termcap xterm|xterm-color|X11 terminal emulator:ti@:te@:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:kH=\EOF:@7=\EOF:kI=\E[2~:kh=\EOH:*6=\EOF:kP=\E[5~:kN=\E[6~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:Km=\E[M:li#24:co#80:am:kn#12:km:mi:ms:xn:AX:bl=^G:is=\E[!p\E[?3;4l\E[4l\E>:rs=\E[!p\E[?3;4l\E[4l\E>:le=^H:AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:al=\E[L:dc=\E[P:dl=\E[M:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:ho=\E[H:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l:ks=\E[?1h\E=:ke=\E[?1l\E>:kD=\E[3~:kb=^H:sf=\n:sr=\EM:st=\EH:ct=\E[3g:sc=\E7:rc=\E8:eA=\E(B\E)0:as=\E(0:ae=\E(B:ml=\El:mu=\Em:up=\E[A:nd=\E[C:md=\E[1m:me=\E[m:mr=\E[7m:so=\E[7m:se=\E[27m:us=\E[4m:ue=\E[24m:ti=\E[?1049h:te=\E[?1049l:vi=\E[?25l:ve=\E[?25h:ut:Co#8:pa#64:op=\E[39;49m:AB=\E[4%dm:AF=\E[3%dm: EOF celestis# setenv TERM xterm celestis# setenv TERMCAP `cat termcap` celestis# mount -t devfs devfs /mnt/mfs/dev celestis# mount -t cd9660 /dev/md3 mfs/iso celestis# chroot mfs /sbin/sysinstall a partir de la on devrait etre dans le GUI freebsd comme si on avait booter un vrai cd. Si jamais vous avez voulu vous passer de tout ce qui precedete niveau partition/slice, concernant les partitions que vous verrez deja existantes, en fait faut pas oublier que c'est juste celle qu'on vient de dd'er et qui fait ~ 55 mo. A la limite vous auriez pu vous servir de sysinstall pour creer les partitions dans le cas de setup non-RAID (y'a que ca qui permet de mettre des human-readable size), et NE PAS OUBLIER de setter la 2eme partition si vous choissisiez bootmanager (le bootmanager freebsd utilise pas le flag BIOS active) Concernant les partitions (PBR) sur le GEOM, c'est a la main vous avez pas le choix, sysinstall est buggue a mort pour ca, et va vous eraser le sector 0, donc a la main. On va installer la distrib (base kernels man etc...), 2 methodes: <<< Je conseille celle-ci: celestis# chroot mfs /sbin/sysinstall selectionner dans les Options /mnt comme repertoire de destination, installer via Custom ou Configure les sets voulus (vous pouvez tout mettre y compris les ports SAUF Xorg, on fera apres...), Par contre SURTOUT ne pas faire de "All" ni dans le menu Distributions ni dans le menu Distributions/Custom (rajoutez a la main), si vous le faites et que vous enlevez Xorg derriere, il essaeira quand meme de le mettre (tout du moins de faire des pkg_add...). et mettre /iso comme repertoire source pour le media de distribution. Surtout ne touchez pas a la fenetre, ni resize, ni Ctrl-Z, je crois que sysinstall handle tout les signaux et se vautre. --- Autre methode sans sysinstall... celestis# setenv DESTDIR /mnt/mfs/mnt celestis# cd /mnt/mfs/iso/7.0-RELEASE celestis# cd base && ./install.sh ; cd .. celestis# cd kernels && ./install.sh GENERIC ; cd .. >>> Maintenant on continue d'installer mais cette fois avec le mfs/mnt/sysinstall, obediance# mount -t cd9660 /dev/md3 /mnt/mfs/mnt/media celestis# mount -t devfs devfs /mnt/mfs/mnt/dev obediance# chroot mfs/mnt sysinstall Mettez /media comme media d'installation dans "Media", vous pouvez maintenant installer le distrib set Xorg + les packages qui sont sur le CD. Et on peut configurer Root Password, User Management, Time Zone Pour Networking, Selectionner Interfaces, surtout ne pas faire faire de dhcp ou down/up les interfaces., puis faire SSHd. celestis# cat << EOF > /mnt/mfs/mnt/etc/fstab /dev/ufs/root / ufs rw 1 1 /dev/label/swap none swap sw 0 0 /dev/ufs/var /var ufs rw 0 2 /dev/ufs/tmp /tmp ufs rw 0 2 /dev/ufs/home /home ufs rw 0 2 /dev/ufs/space /space ufs rw 0 2 EOF celestis# cat << EOF > /mnt/mfs/mnt/boot/loader.conf kernel="GENERIC" geom_label_load="YES" geom_mirror_load="YES" #vfs.root.mountfrom="ufs:adXsXY" EOF editer le fichier /mnt/mfs/mnt/etc/ssh/sshd_config pour permitrootlogin=yes Rebootez :) Si vous voulez du RAID mirroring, faites ceci pour inserer le 2eme dur dans l'array: celestis# glabel label -v drive1 ad8 celestis# gmirror insert -v gm0 /dev/label/drive1 celestis# gmirror status celestis# gmirror list === GEOM SETUP RAID 1 (apres installation donc sur un live filesystem...) ==== Cette opration permet de passer en GEOM raid un freebsd sans reinstaller, de plus sur un filesystem en utilisation... (donc forcement dangereux) Je ne conseille pas de faire ca car GEOM se sert du dernier 512-block sector du consumer pour stocker des informations sur le label etc... en fesant ceci votre definitions de slices/partitions (par rapport au provider) aura une taille de 512 bytes en trop, et ca m'etonnerait pas qu'un jour ca puisse vous retomber sur la gueule. Cette partie n'est donc pas a realiser si vous avez suivi la precedente qui supporte le GEOM RAID mirroring depuis le debut. De plus elle est completement outdated je l'ai pas testee depuis longtemps et je ne conseille pas de la realiser a distance. Elle ne va probablement pas marcher out-of-the-box. # geom label load # geom mirror load # sysctl -w kern.geom.debugflags=16 Le flag ci-dessus est dangereux et permets par la sute de taper en hard dans les providers qui sont deja mountes. # geom label label -v drive0 /dev/ad4 Reboot pour avoir le nouveau label disponible (on l'avait mis en hard la). celestis# echo 'geom_mirror_load="YES"' >> /mnt/mfs/mnt/boot/loader.conf celestis# geom mirror label -v -b round-robin gm0 /dev/label/drive0 then change in fstab each "ad" to a "gm", insert a mirror after /dev. => exmaple: /dev/ad0s1a => /dev/mirror/gm0s1a APRES REBOOT: # mountroot> ufs:/dev/mirror/gm0s1a celestis# gmirror insert gm0 /dev/ad2 GEOM_MIRROR: Device gm0: provider ad2 detected. GEOM_MIRROR: Device gm0: rebuilding provider ad2. celestis# gmirror list | more celestis# gmirror status #then set the mirror device to drive0: #celestis# geom label label -v drive0 /dev/mirror/gm0 \=== What we should see=== GEOM_MIRROR: Device gm0 created (id=2125638583). GEOM_MIRROR: Device gm0: provider ad0 detected. GEOM_MIRROR: Device gm0: provider ad2 detected. GEOM_MIRROR: Device gm0: provider ad0 activated. GEOM_MIRROR: Device gm0: provider ad2 activated. GEOM_MIRROR: Device gm0: provider mirror/gm0 launched. Mounting root from ufs:/dev/mirror/gm0s1a % df -h % swapinfo