If it works, Dante will fix it !

Aller au contenu | Aller au menu | Aller à la recherche

IT

IT related posts

Fil des billets - Fil des commentaires

samedi 17 août 2013

Did you know ?

If you like to use aliases, for example:

alias du="du -sh"

But time to time you want to bypass the alias:

'du'

but you already are at the end of a long command line

du file1 file2 file4 file5 folder1 folder2| #My cursor is the pipe

And your are too lazy to do home-quote-rightarrow-rightarrow-quote

'du' file1 file2...

You can just keep the single quotes to bypass the alias at the beginning:

''du file1 file2 ...

vendredi 21 mai 2010

Routage d'une application spécifique a travers un réseau OpenVPN

Voila un probleme sur lequel je m'étais penché il y a quelques mois (une douzaine?) de cela et que j'ai pu résoudre seulement récemment. Avec les 3-Strikes laws votées dans les différents pays[1], les services de VPN anonymes sont de plus a la mode. En particulier avec la sortie de Ipredator, service de VPN anonyme fourni par les créateurs et administrateur de ThePirateBay. Citons aussi UltraVPN et BlackVPN.

Comment ca marche ?

Le principe de ces services et de vous fournir un accès a un serveur OpenVPN ce qui vous permez d'avoir vos communication chiffrée de votre poste au serveur VPN et un anonymat garanti car ils[2] ne stockent pas de log ainsi la relation entre votre IP VPN et votre IP public ne peux-etre faite.

Cependant, lorsque vous faites passer tout votre trafic par un VPN, vous gagnez en latence et perdez en débit du haut de l'ajout d'un intermédiaire et du chiffrement des données. De plus vous vous trouvez avec une IP étrangere ce qui peut-etre genant dans certains cas.

Router seulement certaines applications

Ce que l'on souhaite, c'est pouvoir choisir quelles applications faire passer par le VPN (navigateur webs...) et quelles applications utilisent la connexion directe (ssh...). Pour cela on va utiliser une seconde table de routage, le module owner accompagnée de quelques regles iptables et les capacités de scripting d'openvpn.

La configuration

La box est une ubuntu, n'importe quelle distribution Linux fera l'affaire, il est possible de faire la même avec pf sur des systèmes *BSD (c'est meme plus facile) mais cela ne sera pas traité ici.

OpenVPN

Il s'agit d'une connexion a un serveur OpenVPN. On reprend le fichier de configuration par le prestataire en y ajoutant quelques lignes :

...
# On stock le user/password dans un fichier externe
# Login sur la première ligne, password sur la deuxième
auth-user-pass <nomvpn>_userpass
# On ne récupère pas les routes fournies
# Car on ne souhaite pas utiliser le VPN comme default gateway sur la main table de routage
route-nopull

# On autorise l'exécution de scripts perso
script-security 2
# On utilise des scripts a exécuter au démarrage et a l'arrêt de la connexion
up /usr/local/vpn/<nomvpn>-up
down /usr/local/vpn/<nomvpn>-down

Ne pas oublier de générer le fichier d'authentification, user et password sont fournis par le prestataire :

echo -e "<user>\n<password>" > /etc/openvpn/<nomvpn>_userpass

Routage

La c'est la grosse manipulation qui permet de configurer une table de routage spécifique a ce VPN et de faire passer le trafic d'un gid donné a travers le VPN.

Script de up

ce script sera exécuté par OpenVPN a l'établissement de la connexion avec le serveur distant. Les scripts sont appelés avec les arguments suivants par OpenVPN (voir le man) :

cmd tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [ init | restart ]
#!/bin/bash

TUNDEV=$1
TUNIP=$4
# Ici on met le réseau du VPN, pour le connaitre veuillez vous connecter au VPN avec la 
# configuration fournie sans le "route-nopull" et faire un ifconfig sur l'interface tun créée
# Faites pareil pour la gateway avec un `route`
VPNNET="10.8.0.0/24" 
VPNGW="108.0.1"

EXTIF=eth0
VPNNAME=<nomvpn>
MARK=100 # spécifique a ce VPN, vous choisissez, mettez en un différent par vpn

# On commence par nettoyer au cas ou OpenVPN aurait violemment redémarré dans le passé
echo "- Flushing iptables"
iptables -t mangle -D OUTPUT -o $EXTIF -m owner --uid-owner $VPNNAME -j MARK --set-mark $MARK
iptables -t nat -D POSTROUTING -m mark --mark $MARK -j MASQUERADE
iptables -t nat -D POSTROUTING -m mark --mark $MARK -j SNAT --to-source $TUNIP
echo "- Flushing iproutes"
ip route flush table $VPNNAME
ip rule del fwmark $MARK
echo "- Flushing rp_filter"
for f in all $TUNDEV
do echo 1 > /proc/sys/net/ipv4/conf/$f/rp_filter ; done

echo "+ adding iptables"
# On marque tous les paquets appartenant au group $VPNNAME
iptables -t mangle -A OUTPUT -o $EXTIF -m owner --gid-owner $VPNNAME -j MARK --set-mark $MARK
iptables -t nat -A POSTROUTING -m mark --mark $MARK -j MASQUERADE
# L'IP source des paquets doit etre changée vu que l'on va les faire passer par l'interface VPN tun
iptables -t nat -A POSTROUTING -m mark --mark $MARK -j SNAT --to-source $TUNIP

echo "+ adding iproutes"
echo " + net ${NET} on main table"
ip route add $VPNNET dev $TUNDEV proto kernel scope link src $TUNIP
echo " + net ${NET} on ${VPNNAME} table"
ip route add $VPNNET dev $TUNDEV proto kernel scope link src $TUNIP table ${VPNNAME}
echo " + gw"
ip route add default via $VPNGW dev $TUNDEV table ${VPNNAME}
ip rule add fwmark $MARK table ${VPNNAME}
ip route flush cache table ${VPNNAME}
ip route flush cache

echo "+ adding rp_filter" # ca c'est la commande magique
for f in all $TUNDEV
do echo 0 > /proc/sys/net/ipv4/conf/$f/rp_filter ; done

echo "+ adding dns" # On utilise les DNS de google qui ont une meilleure latence quelque soit la position du serveur VPN
echo "nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 213.186.33.99
" > /etc/resolv.conf

Script de down

#!/bin/bash

TUNDEV=$1
TUNIP=$4
VPNNET="10.8.0.0/16"
VPNGW="10.8.0.1"
EXTIF=eth0
VPNNAME=<nomvpn>
MARK=100 # spécifique au vpn, meme que pour le up

echo "- Flushing iptables"
iptables -t mangle -D OUTPUT -o $EXTIF -m owner --gid-owner $VPNNAME -j MARK --set-mark $MARK
iptables -t nat -D POSTROUTING -m mark --mark $MARK -j MASQUERADE
iptables -t nat -D POSTROUTING -m mark --mark $MARK -j SNAT --to-source $TUNIP
echo "- Flushing iproutes"
ip route flush table $VPNNAME
ip rule del fwmark $MARK
echo "- Flushing rp_filter"
for f in all $TUNDEV
do echo 1 > /proc/sys/net/ipv4/conf/$f/rp_filter ; done

echo "+ flushing dns"
echo "nameserve XXX.XXX.XXX.XXX # votre nameserver habituel, au choix
" > /etc/resolv.conf

L'utilisation

Ainsi, tout les processus lancés avec le gid <vpnname> se verront routés a travers le VPN. Pour lancer une telle application, vous pouvez paramétrer le groupid dans le configuration de votre application, comme pour tinyproxy par exemple avec Group <vpnname> dans le fichier tinyproxy.conf.

Ou vous pouvez directement aller sur http://mire.ipadsl.net/ avec links et sudo:

sudo -g <vpnname> links mire.ipadsl.net

Cependant n'oubliez pas de modifier votre fichier sudoers pour autoriser dante a executer des programmes avec le gid <vpnname>:

visudo
...
dante   ALL=(:<vpnname>) NOPASSWD: ALL

Notes

[1] France et Angleterre pour l'instant, l'ACTA est en train de préparer un paquet telecom international pour aider les gouvernements a se prémunir contre la violation de droits d'auteur sur l'Internet

[2] Du moins c'est le cas pour BlackVPN et Ipredator

samedi 17 octobre 2009

ZFS et USB 2. Resilvering et vdev failure

Comme indiqué dans mon billet précédent, je possède des disques durs USBs utilisés dans un zpool[1].

Il peut arriver qu'on ai des erreurs ZFS: vdev I/O failure lors du resilvering d'un disque entier. Et ce, au remplacement d'un disque dur USB ou à celui d'un disque SATA en couple avec un disque dur USB.

Cela a pour conséquences le freeze du zpool et des utilitaires zfs, et aussi de la led du boitier USB dans mon cas (elle reste rouge en mode "activité"). La manière la plus simple de débloquer la situation est de rebooter le boitier USB. Une fois le disque dur redémarré, le resilvering reprend depuis le début... et on se retrouve ainsi coincé dans une boucle sans fin.

Pour éviter ce genre de problème, on peut modifier la propriété failmode du zpool concerné. Pour cela, on l'export puis l'import en modifiant la propriété de la façon suivante :

zpool export tank
zpool import -o failmode=continue tank

Par défaut[2], le mode est wait. Ce qui fait que lors d'une erreur I/O, le système attend que l'utilisateur rebranche ou remplace le disque concerné et effectue un zpool replace/clear. Or dans notre cas, il s'agit d'une erreur ponctuelle causée par le boitier USB ou le driver umass.

Une fois le resilvering complété, vous pouvez exporter puis importer le zpool sans options pour repasser en failmode wait. Si jamais vous avez régulièrement ce genre d'erreurs, vous pouvez laisser votre zpool en failmode continue mais cela peut cacher l'apparition d'un vrai problème matériel.

Notes

[1] Je déconseille ce genre d'utilisation, préférez acquérir une carte pci-e e-sata avec les boitiers qui vont bien par exemple.

[2] Sous FreeBSD-7.2

ZFS et USB. Erreur sur la synchronisation du cache

J'ai un vieux serveur que j'utilise comme entité de stockage et sauvegarde. La carte mère n'étant pas très récente (A7N8X-X), il n'y a pas de port SATA à disposition. J'ai donc acheté une carte promise TX4 qui marche à perfection. Manquant d'espace, je me suis aussi procuré deux boitiers externes USB Cooler Master X-Craft 350.

Le tout est dans un même zpool avec une configuration mirror.

Seul souci : les disques durs USB flood mon dmesg avec l'erreur suivante :

(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:20,0
(da0:umass-sim0:0:0:0): Invalid command operation code
(da0:umass-sim0:0:0:0): Unretryable error

Pour m'en débarrasser il m'a suffit d'indiquer au driver umass le fait que ces disques ne supporte pas l'opération SYNCHRONIZE CACHE.

J'ai tout d'abord récupéré les codes vendor et product du chipset sata des boitiers.

lsusb # Présent dans le port sysutils/usbutils
Bus /dev/usb Device /dev/ugen2.2: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
Bus /dev/usb Device /dev/ugen5.2: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge

Voici donc mes deux boitiers externes, 152d correspond au code vendor et 2338 au code product Je vais ensuite éditer le fichier /usr/src/sys/dev/usb/usbdevs :

Y ajouter le vendor JMicron :

...
vendor UBIQUAM          0x1529  UBIQUAM Co., Ltd.
vendor JMICRON          0x152d  JMicron Technology Corp.
vendor UBLOX            0x1546  U-blox
...

Et la catégorie lui correspondant avec le produit JM20337 :

/* Jaton products */
....

/* JMicron products */
product JMICRON JM20337         0x2338  Hi-Speed USB to SATA & PATA Combo Bridge

/* JVC products */
....

Ensuite, dans /usr/src/sys/dev/usb/storage/umass.c J'indique que ce produit ne support pas la synchronisation du cache :

{USB_VENDOR_JMICRON, USB_PRODUCT_JMICRON_JM20337, RID_WILDCARD,
        UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
        NO_SYNCHRONIZE_CACHE
},
{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_L3, RID_WILDCARD,
...

Puis on recompile et réinstalle le kernel:[1]

cd /usr/src
make buildkernel
make installkernel

Et on redémarre dessus.

Notes

[1] Il est aussi possible de ne faire recompiler que le module umass avec l'option MODULES_OVERRIDE, voir le handbook pour plus de détails.

Mise à Jour Freebsd de 7.2 à 8.0-RC1 avec une racine en ZFS

Les mises à jour avec une racine ZFS ne sont jamais évidentes. En ce qui concerne le passage de FreeBSD 7 à 8 il y a une petite astuce à connaître. En effet le userland 7 n'étant pas compatible avec le kernel 8, il n'est pas possible d'utiliser les utilitaires zfs lors du premier redémarrage sur le nouveau kernel; démarrage qui se fait en mode single user.

Ainsi, pour monter la racine de votre système, veuillez tapez la commande suivante :

mount -t zfs tank/racine /

Au lieu de vous battre avec la commande zfs et l'erreur de mémoire qui en résulte. Pour rappel, la mise à jour peut être binaire ou source.

samedi 31 janvier 2009

Affichage cassé lors d'un make config

Il s'agit du genre de bug spécifique à ma personne :)

Pour information :

make -j8 config

Casse l'affichage et ne permet pas de sélectionner les options. Pour y remédier, il est intéressant de rajouter le code suivant dans votre /etc/make.conf :

.if !(make(*install) || make(package))
MAKE_ARGS+=-j8
.endif

Bon, le second problème qui peut arriver est que certaines applications n'aiment pas la compilation en parallèle, donc pour les exclure :

.if ${.CURDIR:M*/converters/libiconv} || ${.CURDIR:M*/devel/gperf} || ${.CURDIR:M*/lang/perl5.8} || ${.CURDIR:M*/x11-toolkits/gtk20} || ${.CURDIR:M*/lang/python25}
MAKE_ARGS:=${MAKE_ARGS:C/-j8//}
.endif

Et voilà !

dimanche 21 décembre 2008

Migration d'une gentoo LVM-Reiserfs à une Freebsd ZFS - Partie II

Suite du : post précédent, mais en beaucoup plus simple. Maintenant on veut accéder à notre lvm avec des logical volumes formatés en reiserfs.

LVM sous FreeBSD

Sachez tout d'abord que si lvm est bel est bien supporté sous FreeBSD, cela n'est vrai que sur la branche 7.0-STABLE (et -CURRENT). Or il ne va sans dire que ses branches restent expérimentales.
C'est pourquoi je vous propose de mettre en -STABLE que les sources du kernel, afin de bénéficier temporairement du module geom_linux_lvm qui nous intéresse. Ensuite, on retournera sur un kernel -RELEASE.

Le Module Kernel

Il se nomme geom_linux_lvm, et n'est disponible que dans la branche -STABLE au moment de l'édition du billet.

Un kernel -STABLE

Vous devez avoir le kernel 7.0-STABLE de FreeBSD. Pour cela, utiliser le fichier /usr/share/example/cvsup/stable-supfile et cvsup, Using CVSup. Remplacez-y le nom de l'hôte par un des mirroirs cvsup, commentez src-all et décommentez src-base, src-sys et src-crypto.

La recompilation

Pour recompiler le noyau, soit vous ajoutez la ligne options GEOM_LINUX_LVM dans le fichier de config du kernel en même temps que la ligne options KVAPAGES=512. Soit vous ajoutez geom_linux_lvm_load="YES" dans le /boot/loader.conf.

Une fois le noyau recompilé et le système redémarré, vous verrez apparaître un dossier /dev/linux_lvm avec dedans les logical volumes de votre lvm.

Le LVM

Pour connaitre les détails, et donc les disques utilisés par le volume group, exécuter :
geom linux_lvm list

Vous n'avez plus qu'à les monter :

mkdir -p /vg/lv1
mount -t reiserfs -o ro /dev/linux_lvm/vg-lv1 /vg/lv1

Dans le cas où le système de fichiers soit reiserfs.

Le zpool mirror

Ensuite, vous pouvez créer votre zpool tank en faisant attention de le créer sur les bons disques :

fdisk -BI /dev/da2
fdisk -BI /dev/da3
bsdlabel -w /dev/da2s1
bsdlabel -w /dev/da3s1
zpool create tank da2s1 da3s1

Puis vous créez vos dossier zfs dans ce zpool, transférez les fichiers du lvm au zpool. Et vous finalisez votre zpool (attention, le volume group du lvm va être détruit !) :

fdisk -BI /dev/da0
fdisk -BI /dev/da1
bsdlabel -w /dev/da0s1
bsdlabel -w /dev/da1s1
zpool attach tank da2s1a da0s1a
zpool attach tank da3s1a da1s1a

Pensez tout de même à vérifiez que les disques durs mis en mirror ensembles (da0 et da2, da1 et da3) sont bien ceux de taille correspondante. Au pire, vous pouvez vous en sortir avec un offline puis un replace.

Le zpool raidz

Ainsi, vous avez deux zpool, system et tank, tout deux en mirror sur votre système. Cela est plutôt inutile, il aurait mieux fallu rajouter les disques dans le zpool system.

Sauf si vous voulez avoir un zraid sur le zpool tank. Malheureusement, on peut pas créer de zraid en attachant des disques. Pour cela il va falloir ruser avec la méthode des fichiers blocs que je vais décrire.

Les fichiers blocs.

Pour cela, on va créer deux fichiers blocs qui vont servir à créer le zpool en raidz, puis on les mettra offline pour finalement les remplacer.

dd if=/dev/zero of=/home/disk1.img bs=1M count=1 seek=409600
dd if=/dev/zero of=/home/disk2.img bs=1M count=1 seek=768000
mdconfig -a -t vnode -u 1 -f /home/disk1.img
mdconfig -a -t vnode -u 2 -f /home/disk2.img
fdisk -BI /dev/da2
fdisk -BI /dev/da3
bsdlabel -w /dev/da2s1
bsdlabel -w /dev/da3s1
zpool create tank raidz md1 da2s1a raidz md2 da3s1a
zpool offline tank md1 md2
mdconfig -d -u1 -u2
rm /home/disk*.img

Finalisation

Puis on copie les fichiers et on remplace md1 et md2 par les disques qui étaient dans le lvm :

fdisk -BI /dev/da0
fdisk -BI /dev/da1
bsdlabel -w /dev/da0s1
bsdlabel -w /dev/da1s1
zpool replace tank md1 da0s1a
zpool replace tank md2 da1s1a

En étant sûr que les tailles correspondent.

Vous pouvez faire de même si vous avez 6 disques, répartis en 2 zraid.

jeudi 11 décembre 2008

Migration d'une gentoo LVM-Reiserfs à une Freebsd ZFS - Partie I

Le but de ce post est principalement de me faire un pense-bête car avant d'effectuer la migration sur la machine finale, je vais d'abord tenter de reproduire cette configuration dans une virtualbox kvm, étant donné que virtualbox supporte très mal freebsd sur un hôte linux.

Recommandations

Attention, même si le but de ce post est d'éviter de devoir acheter plus de stockage afin de faire des backups, il est à suivre à vos risques et périls. De plus, je recommande vivement la lecture préalable des liens suivants :

La configuration initiale

Configuration système :

  • Gentoo 32bit
  • Athlon XP
  • 1 Go de Ram

Stockage

  • 1 disque dur de 120Go : Racine + Home
  • 1 disque dur de 400Go: lvm
  • 1 disque dur de 750Go : lvm

Les logical volumes du lvm sont tous formatés en reiserfs.

La configuration finale

Configuration système :

  • FreeBSD 7.0 (i386)
  • 3 Go de Ram (pour subvenir aux besoins de ZFS)

Stockage

  • 2 disques durs de 160Go (ad0 et ad1)
    • Pour remplacer le vieux de 120
    • Contiendra le /boot et le premier zpool : system
  • 2 disques durs de 400Go (ad2 et ad4): zpool tank
  • 2 disques durs de 750Go (ad3 et ad5) : zpool tank

Zpools

Il y aura 2 zpools. Le premier system sera en mirroring, contiendra l'ensemble des partitions systèmes (/, /var, /tmp...) et le /home.
Le second tank Contiendra les données déjà présentes dans le lvm. Il sera en z-raid, sachant qu'à terme, deux autres disques durs de 400Go et 750 Go seront rajoutés (en attendant, ce sera la même chose qu'un mirror).

Ce qu'il y a à faire

La difficulté réside dans l'installation de la racine freebsd dans un zpool mirror, mais aussi le paramétrage du boot manager : gestion intelligente de la présence de /boot sur les disques en mirroring) et enfin, la sauvegarde des données : données présentes sur du lvm/reiserfs, espace disque limité, création des zpool avec un seul disque.

Première installation

Du fait que les librairies pour zfs ne semblent pas être présentes sur le livecd, je n'ai pas trouvé d'autre solution que d'installer FreeBSD de façon normale pour ensuite créer le zpool system et y copier les fichiers.

Donc on va installer freebsd sur ad0 (le plus grand!), il n' a pas de consigne particulière si ce n'est que les fichiers correspondront à l'installation finale.
Pour le partitionnement, j'ai tout mis en automatique, cela me permettra de faire la même séparation dans le zpool system (/,/var,/tmp,/usr).
J'ai choisi l'ensemble de paquet "User", car on aura besoin des sources du kernel pour le recompiler. Penser à installer :

  • editor/vim-lite (sans les gui) si besoin
  • net/rsync
  • screen (non présent sur le cd)

Tuning du système

Une fois le système installé, on va tout d'abord le tuner pour faire marcher zfs (cf. TuningZFS). Cela comprend une recompilation du kernel. Vous devez donc d'abord récupérer les sources du kernel. Dans le cas où vous voudriez ensuite faire marcher un lvm, veuillez prendre les sources du kernel avec cvsup pour avoir celles de la 7.0-STABLE, il vous faut src-base, src-sys et src-crypto.

On ajoute dans le /boot/loader.conf ceci :
zfs_load="YES"
vm.kmem_size="512M"
vm.kmem_size_max="512M"
vfs.zfs.arc_max="100M"

On recompile le kernel en rajoutant la ligne options KVA_PAGES="512" et options GEOM_LINUX_LVM (si besoin) dans le fichier de config et on ajoute zfs_enable="YES" dans le /etc/rc.conf.

Ensuite, on reboot.

Création du zpool system

On créé zpool system sur ad1 (160-2), pour cela suit les instructions de ZFSOnRoot, il peut-être intéressant d'avoir le swap hors du ZFS tout comme le /boot (cf. ZFS Best Practices Guide).

Partitionnement de ad1 (160-2)

On initialise le disque avec un seul slice bootable :

fdisk -BI /dev/ad1

Puis on créé les partitions dans le slice ad1s1 :

bsdlabel -wB /dev/ad1s1
bsdlabel -e /dev/ad1s1

Ceci permet d'avoir un /boot a de 512Mo, un swap b de 2Go et le reste d pour le zpool system :

# /dev/ad1s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 0 unused 2048 16384
b: 4142688 1048576 swap
c: * 0 unused 0 0 # "raw" part, don't edit
d: * * unused 2048 16384

Ensuite on créé le zpool system :

zpool create system ad1s1d

On indique au bootloader où se trouve la racine et on active zfs en ajoutant :

vfs.root.mountfrom="zfs:system"
dans le /boot/loader.conf

On créé le répertoire qui contiendra le /boot :

mkdir /system/bootdir1
cd /system
ln -s bootdir1/boot /system/boot

On formate /dev/ad1s1a :

newfs /dev/ad1s1a
mount /dev/ad1s1a /system/bootdir1

J'ai ensuite suivi les instructions de cette page ZFSQuickStartGuide. J'ai ainsi créé les dossiers tmp,var,home et usr dans le zpool system.

zfs create system/usr
zfs create system/tmp
zfs create system/var
zfs create system/home

Puis j'ai copié les fichiers depuis ad0 avec vers le zpool :

rsync -Pia --exclude=system --exclude=boot /* /system/
cp -Rp /boot /system/bootdir1/

Puis on oublie pas de configurer les points de montages de toutes les partitions :

zfs set mountpoint=/tmp system/tmp
zfs set mountpoint=/usr system/usr
zfs set mountpoint=/home system/home
zfs set mountpoint=/var system/var

On modifie le fstab du nouveau système /system/etc/fstab afin qu'il ne contienne que ceci :
/dev/ad1s1b none swap sw 0 0
/dev/ad1s1a /bootdir1 ufs rw 1 1
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

Puis on paramètre le point de montage en legacy pour que le ZFS ne tente de le monter tout seul :

umount /system/bootdir1/
zfs set mountpoint=legacy system

Et enfin, on reboot sur 160-2 (ad1), un paramétrage du bios est sûrement nécessaire pour qu'il ignore 160-1. Il n'y a plus qu'à croiser les doigts.

Finalisation du zpool system

Ensuite, on recopie le bsdlabel de ad1 sur ad0 en ce qui concerne le bsdlabel : bsdlabel -wB /dev/ad0s1
bsdlabel /dev/ad1s1 > savedlabel
bsdlabel -R /dev/ad0s1 savedlabel

Puis on attache le disque en mirror :
zpool attach system ad1s1d ad0s1d
(L'ordre des partitions est important).

Et on rajoute le swap se trouvant sur ad0 et le boot dans /etc/fstab :

mkdir /bootdir0
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a /bootdir0 ufs rw 1 1

On effectue une copie :
cp -Rp /bootdir1/boot /bootdir0/

Et on va privilégier le /boot se trouvant sur ad0 :

rm -f /boot
ln -s /bootdir0/boot /boot

Il faudra donc penser à mettre à jour bootdir1 si on modifie le /boot.

Malheureusement, si un disque crash, la Freebsd ne sera pas capable de booter sans intervention, car le fait de ne pas arriver à monter des partitions dans le fstab bloque le processus de démarrage. Celui-ci peut-être repris et la FreeBSD démarrée, mais pas sans une intervention humaine. Seule solution trouvée à ce jour : enlever les swap et /boot du fstab et ajouter un script rc.d qui se charge de faire les swapon et les mount au démarrage.

/etc/rc.d/my_mountfs :
#!/bin/sh

. /etc/rc.subr

name="my_mountfs"
start_cmd="${name}_start"
stop_cmd="${name}_stop"

my_mountfs_start()
{
swapon /dev/ad1s1b
swapon /dev/ad0s1b
mount /dev/ad0s1a /bootdir0
mount /dev/ad1s1a /bootdir1
}

my_mountfs_stop()
{
swapoff /dev/ad1s1b
swapoff /dev/ad0s1b
umount /dev/ad0s1a
umount /dev/ad1s1a
}

load_rc_config $name
run_rc_command "$1"

mardi 6 février 2007

UT2004 en Français Sous gentoo

Le saviez-vous?

ut2004 est disponible dans le portage:

eix ut2004 donne:

[I] games-fps/ut2004
Available versions: 3369-r4
Installed versions: 3369-r4(00:26:05 09.01.2007)(-dedicated opengl)
Homepage: http://www.unrealtournament2004.com/
Description: Editor's Choice Edition plus Mega Pack for the critically-acclaimed first-person shooter

* games-fps/ut2004-action
Available versions: (~)1
Homepage: http://www.ateamproductions.net/
Description: UT2004 Action - Action movie mod

* games-fps/ut2004-airbuccaneers
Available versions: 1.6-r1
Homepage: http://ludocraft.oulu.fi/airbuccaneers/
Description: UT2004 Air Buccaneers - pirate-style conversion with flying wooden ships
... Found 23 matches.

On peut y voir des démos, des mods, des bonus mega-pack. etc.. etc..

De plus, si vous mettez et montez votre DVD UT2004 sous gentoo ou n'importe quel autre Distri linux, un menu d'installation graphique vous sera proposé.

En bon geek, prenons la version dans le portage:
emerge ut2004
On vous demandera, le DVD ou les CDs durant l'installation puis la clé CD à la fin. Sauf que... ut est en anglais, no soucy, on le met en français:

Deux méthodes:ut n'a jamais été lancé, et on veut faire une modification globale, en root, on fait:
vim /opt/ut2004/System/Default.ini
Puis on modifie Language=int
en
Language=frt

Ou alors,

ut a déjà été lancé ou on veut faire la modification pour un seul utilisateur, dans ce cas :
@vim ~/.ut2004/System/UT2004.ini
Et même manip.

Have a good time!

jeudi 1 février 2007

La puissance de rsync/cron/ssmtp (ou comment faire des backups réguliers avec rapport par mail)

Sauvegardez ! Qu'il disait, et raison, il avait.
Et oui, récemment, j'ai perdu mon /home, en voulant agrandir ma partition (je me suis dit, "agrandir, ça ne craint rien"), et ben faut croire que j'avais tord, surtout quand on agrandit à gauche[1].
Heureusement, j'avais un backup datant de... Novembre (époque où j'ai acheté mon disque dur sata seagate 7200 400Go, que je recommande) après avoir reformaté (oui, ma partition était irrécupérable), et tout reparamétré, je me suis penché sur la solution d'une sauvegarde hebdomadaire de tout mon système. On me conseilla cron et rsync.

RSYNC

Il s'agit d'un utilitaire en ligne de commande qui permet une copie avancée de fichiers, d'un emplacement distant ou local à un autre emplacement. Voici mon exemple, et après, les explications.

bckdir1=`date +%Y-%m-%d`
bckdir="/mnt/reminiscence/racine.bk/root-$bckdir1"
rsync --force --ignore-errors --delete --delete-excluded --exclude=var/spool/* --exclude=mnt/* --exclude=var/tmp/* --exclude=proc/* --exclude=tmp/* --exclude=dev/* --exclude=sys/* --backup --backup-dir="$bckdir" -Pia /* /mnt/reminiscence/racine.bk/root/

Donc un petit fichier backup.sh avec lequel je sauvegarde / et /home.

alors, les options importantes:

  • --exclude permet de ne pas sauvegarder des éléments, comme les répertoires temporaires (/tmp,/sys,/proc...) et les autres partitions (/mnt). On peut faire plus court (cf. man rsync)
  • --backup enregistre les fichiers déjà existant avant de les écraser avec les nouveaux fichiers
  • --backup-dir met ces fichiers dans le dossier spécifié
  • -P (Progress) montre la progression
  • -a (archive) sauvegarde les droits et autres caractéristiques et ce, récursivement (il descend dans les répertoires)
  • -i (itemize-changes) donne un résumé des opérations effectuées


donc, quand je lance backup.sh (ne pas oublier de faire chmod +x pour pouvoir l'exécuter) rsync,

  • regarde s'il y a des fichiers intrus dans le répertoire /mnt/reminiscence/racine.bk/root/,
  • les efface (--delete),
  • regarde si il y a des fichiers exclus présents dans /mnt/../racine.bk.root/ (--exclude et --delete-excluded),
  • regarde les fichiers qui ont été modifiés depuis la dernière sauvegarde (date de modification),
  • les déplace de /mnt/.../root/ dans le dossier /mnt/../root-AA-MM-DD/ (--backup et --backup-dir),
  • puis déplace les nouveaux fichiers de / dans /mnt/../root/.

Bon, déjà, on a un beau script de backup, plus d'infos sur ce site: linuxfocus.org.

CRON

Je suppose que tout le monde en a entendu parler, il s'agiger d'un logiciel permettant de faire des tâches programmées. Plus d'info dans la merveilleuse doc gentoo.

En ce qui me concerne, j'ai choisis le cron de Vixie:
emerge sys-process/vixie-cron
emerge sys-process/cronbase
cronbase permettant d'avoir accès à tout plein d'outils.

Ensuite, on fait
crontab -e
pour éditer votre fichier de tâches, sachez qu'il y a un fichier de tâche par utilisateur, par conséquent, cette commande permet de configurer de le fichier de tâche de l'utilisateur courant. il est possible de modifier la crontab d'un autre utilisateur en faisant crontab -u utilisateur -e.

On s'attaque maintenant à la syntaxe du crontab. C'est pas très dur, une ligne par tâche:

min heure jour mois jour_de_la_semaine tache
avec

  • min qui va de 0 à 59
  • heure de 0 à 23
  • jour de 1 à 31
  • mois de 1 à 12 ou jan,feb...
  • jour_de_la_semaine de 0 à 7 ou de sun à sat (0 et 7 correspondent au dimanche)
  • tache la tâche à exécuter.

Et maintenant, comment on les utilise:

  • '*' effectue la tâche tout les "champ renseigné" (sans les ' )
  • 5 effectue la tâche le 5 du "champ renseigné"
  • 2,3 effectue la tâche le 2 et le 3
  • 3-5 effectue la tâche le 3,4,5
  • /10 indique un pas de 10, par exemple */10 * * * * effectue la tâche toutes 10 minutes ou 1-7/2 effectue la tâche le 1,3,5 et 7

Ce qui est bien avec vixie-cron, c'est que l'on peut utiliser les variables d'environnement dans la tâche, comme $HOME. On peut aussi les forcer comme par exemple:

SHELL=/bin/bash
On oblige cron à utiliser bash comme shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin
les dossiers d'exécutables
MAILTO=root
On verra tout à l'heure ;-)
HOME=/root
on dit que le home, ben c'est /root (là où se trouve mon script backup.sh en l'occurrence)

Et enfin pour une sauvegarde tout les lundi à 12h30, on fait:

30 12 * * 1 $HOME/backup.sh

SSMTP

Bon, c'est bien beau tout ça, mais comment être sûr que la sauvegarde est bien effectuée, et puis, pourquoi mettre l'option -i ou -P (quoique, P, on peut l'enlever) si on est pas devant l'écran pour regarder? Il existe ssmtp, qui est un MTA, permettant d'installer un pseudo serveur mail, mais sans l'installer, enfin... c'est pas un serveur mail, car il ne permet que d'envoyer les mails.

On l'installe:

emerge mail-mta/ssmtp

et on configure:

vim /etc/ssmtp/ssmtp.conf

Ou avec tout autre éditeur de texte (bouh emacs) et on met:

root=votreadresse@domaine
adresse de l'utilisateur qui recevra les mails pour les users d'uid<1000
mailhub=smtp.votrefai.fr
le serveur smtp que vous utilisez habituellement
rewriteDomain=methrilla@free.fr
c'est sensé remplir le champ "de:" ou "from:" mais ça marche pas très bien chez moi.

vous pouvez tout de suite tester votre config en lançant un mail en étant root:

ssmtp votreadresse@domaine.fr
subject: test
corps du message
.
le point final sur une ligne. Et là, mystère, j'avoue n'avoir toujours pas compris comment quitter ssmtp correctement, apparemment, avec "quit" puis un blanc, mais cela ne marche pas toujours[2].
Ce qui importe, c'est qu'après le "." final, le mail est envoyé, consulter votre boite mail, si il est là, c'est bon, si vous recevez un message d'erreur de votre fai, c'est presque bon, si il n'y a rien, c'est pas bon du tout.

Maintenant, vous comprenez pourquoi j'avais mis un mailto=ROOT, cela permettra de recevoir toutes les sorties (stdout et stderr) en mail. Si il y a des tâches pour lesquelles vous ne voulez pas de mail, il suffit de mettre un >/dev/null en fin de ligne.

À vos sauvegardes !

Notes

[1] En effet, les données relatives au filesystem se trouve à gauche dans la partition (soit au début) donc si on veut l'agrandir, il faut décaler toutes les données à gauche et agrandir à droite.

[2] En faisant un ssmtp -s recipient@domaine et à la fin . puis quit et plusieurs fois "entrée", ça à l'air de quitter à tous les coups, bizarre...

dimanche 14 janvier 2007

Multiposte avec VLC sous Gentoo

Bonjour!vlc

Voici une petite astuce pour regarder la télé sur l'ordinateur à l'aide de vlc et de votre freebox. Et ce, quelque soit votre OS.

On installe, vlc, si on compile, il faut aussi les librairies live555. Et si on a un vrai routeur (la freebox, un linksys avec kernel linux un peu boosté...) on a plus qu'à faire

vlc http://mafreebox.freebox.fr/freeboxtv/playlist.m3u

où qu'à ouvrir vlc, puis

Fichier -> Ouvrir un fichier (avancé...) -> Réseau -> HTTP/HTTPS/FTP/MMS

et on met

http://mafreebox.freebox.fr/freeboxtv/playlist.m3u

On peut même sauvegarder la playliste sur son ordi ^^.

Sauf... sous gentoo, en effet, il y a un bug avec les lib live555 et vlc : https://bugs.gentoo.org/show_bug.cgi?id=160320 Pour le résoudre (méthode facile[1]):

On a besoin du useflag "live" pour vlc, tant qu'on y est, mettons l'ensemble des useflags conseillés:

echo "media-video/vlc dvd ffmpeg mpeg mad wxwindows aac dts a52 ogg flac theora oggvorbis matroska freetype bidi xv svga gnutls stream vlm httpd cdda vcd dio live" >> /etc/portage/package.use

Ensuite, on cache les versions instables de live, qui ne marche pas avec vlc:

echo ">media-plugins/live-2005.11.11" >> /etc/portage/package.mask

Et hop c'est partit!

emerge vlc

On retrouve les options dans input/codec > demuxers > RTP/RTSP > option avancées. Pour la freebox, rien ne doit être coché et le port client doit être à -1. Pour les routeurs moins avancées, on choisit ici le port udp que l'on ouvrira dans le routeur ;-)

y a plus qu'à coder en mattant la télé!

Notes

[1] Il y a une méthode plus sophistiquée, mais qui apparement permet d'avoir les dernières versions des librairies livedotcom, elle se trouve dans l'un des posts du bugreport

jeudi 7 septembre 2006

Truth happens

Voici une vidéo ma foi très sympatique sur le monde libre[1]. Distribuée par red hat


En voici une autre sur le choix et la dernière: inevitable.
Vous trouverez ici la première encodé en ogg theora. Et plus d'infos sur ces vidéos et d'autres versions de celles-ci[2].

Notes

[1] en effet, j'utilise un codec proprio pour valoriser le monde libre (bouh! t'es nul) Désolé, mais je ne connais pas de codec libre permettant une mise en place simple d'un blog vidéo. Si vous en connaissez un, contactez-moi

[2] Dans le cas où vous n'arriviez pas à lire les miennes

mardi 15 août 2006

Windows Vista Fears XGL

vidéo sur arrêt du cubeXGL? Windows Vista? qu'est-ce donc que tout ça? alors d'abord, Windows Vista (anciennement Longhorn) est le prochain OS de Microsoft, la sortie fut repoussée maintes fois, au jour d'aujourd'hui elle est prévu pour janvier 2007. Cet OS est axé encore plus design, notamment avec l'aero glass, pour avoir un bureau en 3D super stylé. Personnellement, j'ai été surpris la première fois, mais en testant ses effets pseudo 3D, et en naviguant dans des menus que je trouve de plus en plus complexes, je ne trouve pas Vista si révolutionnaire que ça.
minimisation
D'un autre côté, il y a xgl, qu'est-ce donc qu'Xgl?[1] ben c'est une application qui utilise opengl[2] pour faire tourner le bureau... le bureau? Mais qu'est ce qui peut être gourmand en calcul dans un bureau? Ben xgl, lui est gourmand! En effet, avec différents effets, de "gak" lorsque les fenêtres se déplacent, ou encore, une répartition des bureaux sur un cube, et enfin, une gestion des transparences intuitives; on obtient un environnement ergonomique et pratique, super fun et super classe. des vidéos: ici et plus d'infos
ALT+TAB

Notes

[1] attention, je résume!

[2] i.e. opengl permet d'utiliser le processeur de ta carte graphique pour les calculs 3D, ce qui permet de libérer le processeur de ta carte mère, et donc ton ordi tourne plus vite!

vendredi 2 juin 2006

Dapper Drake ou une Révolution

Le canard PimpantUn magnifique texte sur la sortie de Ubuntu Dapper Drake LTS (Long Time Support), à lire absolument!
Le voici

lundi 29 mai 2006

Dapper Drake

UbuntuJ-3 avant la Sortie de Dapper Drake, la prochaine Version stable d'Ubuntu. Première version proposée aux entreprises. Il s'agit d'une grande étape dans l'évolution de Ubuntu. Les cds sont toujours gratuits, on les commande ici (frais de ports aussi gratuits). Commandez-en, testez avec le livecd (qui, soit dit en passant, ne modifie rien à la configuration de l'ordinateur, il suffit juste de démarrer l'ordi avec le cd dans le lecteur pour gouter aux joies du monde libre.

C'est gratuit, pratique, beau, libre... n'hésitez pas, juste pour essayer.

Vous pouvez toujours me demandez des cds, j'en distribuerais avec joie.

Et pendant ce temps là, le TIPE recule....

mardi 23 mai 2006

Ubuntu

Ubuntu[1]

- qu'est-ce donc que cette bête-là?
- Il s'agit d'une distribution Linux/Debian.
- Une quoi?
- Un Système d'exploitation dont le noyau est linux et qui se base sur la distribution Debian.
- XD
- Tu connais Windows?
- Oui :D
- Ben c'est pareil, en différent! Windows® est un système d'exploitation, d'exploitation de ton ordinateur, et du matériel qu'il comprend. En installant Windows®, tu as accès aux ressources matérielles, mais aussi aux nombreux logiciels qui permettent de faire tout ce que tu peux envisager avec ton ordi (écrire, naviguer sur le web, regarder une vidéo, jouer à un jeux...).
- et Ubuntu?
- ben c'est la même chose, il a le même rôle que Windows®, sauf qu'il n'est pas développé par Microsoft®, et qu'il est libre, c'est-à-dire, qu'il est gratuit, et tout le monde peut avoir accès au code source[2] de cet OS. Ainsi, n'importe qui peut améliorer, modifier, personnaliser, corriger ce programme.
- Mais qui c'est qui le créé alors?
- Des développeurs, certains sont employés chez Canonical Ltd., société fondée par Marc Shuttleworth pour la création d'Ubuntu[3], et le reste (et la major partie) sont des gens comme toi et moi, qui contribuent au développement de Ubuntu et des logiciels qu'il comprend.
- Pourquoi devrais-je l'adopter?
- Ben tout simplement pour avoir un OS plus stable, plus sécurisé, moins cher (gratuit en fait) et surtout plus fun! Enfin, si tu le trouve pas fun, tu peux toujours le personnaliser à ton image. Pour plus d'infos sur les qualités d'Ubuntu, et plus généralement linux, visite ce site: why linux is better?
- Ok. Mais réinstaller tout mon ordi... pffff... c'est trop compliqué!
- Au contraire! Déjà, ubuntu est beaucoup plus intuitif que Windows[4]. Et tu n'as pas besoin d'installer Ubuntu, tu peux utiliser un Livecd[5]. Tu démarre ton ordi avec le livecd dans le lecteur, et là, tu peux utiliser linux sur ton ordi[6] sans rien modifier à ta configuration actuelle.
- Et si j'ai un mac?
- Ubuntu marche aussi sur les macs, lors du téléchargement, il suffit juste de choisir le bon fichier: PPC (powerpc) Pour les macs, 64 pour les processeurs 64 bits, et i386 pour tout le reste! Il ne te reste plus qu'à essayer!!!


Quelques liens:

Le site officiel d'Ubuntu
La communauté francophone d'ubuntu
Le bug n°1
Une trés bonne description d'Ubuntu Elle date un peu, mais elle est toujours valable!

Notes

[1] Prononcez "oubountou"

[2] Ce que l'on peut illustrer par la recette d'un programme. Chez Microsoft, seul les employés y ont accès. Plus d'infos ici

[3] Création faite dans le but de corriger le bug n°1 de l'informatique: l'omniprésence de Microsoft dans le monde de l'informatique (et donc l'unicité de l'offre qui provoque une unification de la demande)

[4] Peut-être que tu trouves ça normal, mais est-ce réellement intuitif que de cliquer sur le menu démarrer pour arrêter son ordi?

[5] Tu peux télécharger le .iso ici (à graver avec ton graveur préféré). Kubuntu, c'est aussi ubuntu mais avec un environnement graphique différent (KDE au lieu de Gnome)

[6] Enfin, y a juste quelques étapes de configuration avant, mais c'est très facile (et moins long qu'une install windows)