If it works, Dante will fix it !

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

mardi 20 août 2013

Nouveau blog

J'aime changer l'adresse de mon blog de façon régulière :) Voici la nouvelle adresse: http://rant.dantesk.net/

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"

samedi 2 août 2008

Site déménagé !

Bonjour !

Et bien, cela fait bien longtemps que je n'ai rien écrit ici !

Comme vous pouvez le voir, le site a été déménagé à cette nouvelle adresse.

En fait, j'ai profité de l'hébergement de blog par Gandi étant donné que j'ai mon nom de domaine chez eux. De plus, ils proposent un blog dotclear en version 2.0. La migration m'a donc été aisée.

J'espère avoir plus de temps pour mettre en ligne des articles. Ce sera principalement orienté GNU/Gentoo. Mon but étant de mettre en ligne des tips de configuration dont j'aurais l'impression d'être le seul à utiliser avec très prochainement un article sur openSSL et l'extension SubjectAltName. Mais aussi les scripts que j'utilise régulièrement, comme ceux me permettant la sauvegarde de mes DVDs préférés en x264/Ogg/mkv.

vendredi 16 mars 2007

Bienvenue !

Bienvenue sur le blog du domaine dantesk.net
Ce blog vous permettra de suivre l'avancée du domaine dantesk.net. À l'heure actuelle, seuls un ftp privé et un site avec mes photos -> http://photos.dantesk.net sont disponibles.

Ils sont tous les deux privés, c'est à dire, réservés à mon entourage le plus proche.

Retrouvez mon blog public sur Archange's Blog

à plus !

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

mardi 2 janvier 2007

Loi DADVSI 3

Voici un petit mail reçu de EucdInfo, je le cite et aprés, je vous explique ;-)

Publication du décret relatif au contournement d'une mesure technique à l'aide d'outils dédiés

Adresse permanente

Alors que la loi DADVSI (« droit d'auteur et droits voisins dans la société de l'information ») prévoit déjà des sanctions pénales pour le contournement d'une mesure technique réalisé par ses propres moyens, les contraventions applicables au contournement réalisé à l'aide d'un outil dédié attendaient la publication d'un décret. Celui-ci vient d'être publié au Journal Officiel.

Le décret sanctionnant pénalement le fait de détenir ou d'utiliser un outil dédié au contournement d'une mesure technique a été publié au Journal Officiel du 30 décembre 2006 (c'est le décret «n° 2006-1763 du 23 décembre 2006 relatif à la répression pénale de certaines atteintes portées au droit d'auteur et aux droits voisins»). Ces actes sont désormais passibles d'une contravention de 4e classe, et donc de 750 euros d'amende (maximum).

Avec la publication de ce décret la lecture d'un DVD avec un logiciel s'appuyant sur un moyen de contournement existant (comme DeCSS, utilisé par de très nombreux systèmes logiciels libres) est donc passible d'une contravention de 4ème classe. Ainsi donc lire un DVD, légalement acheté par exemple, sur un système d'exploitation libre devient un acte passible d'une amende.

Les membres de StopDRM qui s'étaient dénoncés notamment pour contournement de mesures techniques à l'aide d'outils dédiés sont également concernés.

Il reste d'autres décrets à paraître concernant la loi DADVSI, notamment celui instituant l'Autorité de régulation des mesures techniques (ARMT). Les Echos ont publié le 27 novembre cet avant-projet de décret. En attente également le décret demandant aux FAI (fournisseurs d'accès à Internet) l'envoi de messages d'avertissement aux internautes qui téléchargeraient illégalement.

Comme vous l'avez deviné, le plus important est en gras :D en résumé, le fait d'utiliser des logiciels contournant la protection de la plupart des DVDs est passible d'une amende de 750€. Mais quels sont ces logiciels? Ce sont ceux dont les éditeurs n'ont pas payé pour avoir la licence. D'aprés le site officiel (et d'après mon anglais) il faut débourser 500$ par an pour un dispositif permettant l'unique lecture de dvds cryptés et de 5200$ à 15500$ pour la duplication. Ainsi, il faut payer pour développer de tels logiciels. Windows et Apple payent. Et les éditeurs de logiciels gratuits? Pire, les logiciels libres tels que vlc (video lan client) ou mpc (media player classic) ne peuvent pas acheter cette licence[1].[2]

Vous voulez regarder un dvd[3] en toute légalité sur votre ordinateur? Windowsiens, windows media player ou rien[4], maqueux, quicktime ou rien, linuxiens, rien!


Plus d'info sur le cryptage css ici et , l'affaire DeCSS

Notes

[1] Comment font-ils alors? ils utilisent des librairies telles que libdvdcss basée sur des algorithmes tels que DeCSS

[2] En effet, le fait d'acheter cette licence permet de posséder une clé de décryptage à inclure dans le code, mais il est bien entendu interdit de la diffuser, or quand un logiciel est open-source ou libre, le code est diffusé, donc pas d'issue.

[3] Un dvd protégé, mais la plupart de ceux du commerce le sont!

[4] Je m'emporte, en fait, il existe de nombreux lecteurs légaux, mais ils sont pour la plupart payants (sauf bsplayer) et tous propriétaires.

vendredi 29 décembre 2006

Blog Mort?

Je réponds souvent (toujours?) aux commentaires qui sont postés sur mon site (autres que ceux des spammeurs :D) mais cela fait bien longtemps que je n'ai pas posté! Navré pour ce temps mort, je vais reprendre de plus belle mes écritures avec de nouvelles présentations d'animés, les cocktails les plus fous et des astuces gentoo (euh, oui, je ne suis sous ubuntu...) Merci aux lecteurs et Bonne fin d'année à vous!

dimanche 10 septembre 2006

Hellsing Ultimate: OAV

L'OAV 2 de Hellsing Ultimate et sortit, et est déjà fansubbé par plusieurs teams telles que la NeoRyu-Team, vous pourrez trouvez d'autres releases sur mononoke. En attendant, je vous propose le trailer de la série des OAVs[1]:

Notes

[1] Dispo ici en XviD

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

Une petite vidéo...

Une petite vidéo simpa pour tester la vidéo sur mon blog:

Man On Fire

Man On Fire (2004), Réalisateur:Tony Scott (Domino, Top Gun...)
Acteurs:
Denzel Washington (Malcolm X, Inside Man...)
Christopher Walken (Pulp fiction, Arrête-moi si tu peux, Sleepy Hollow...)
Dakota Fanning (La guerre des mondes)


Man on fire, thriller américain relatant des kidnapping à Mexico. Creasy (Denzel Washington) ex-marines devenu alcoolique devient le garde d'une corps de la jeune fille de pseudos bourgeois, jusqu'au jour où...
Man On Fire est tout d'abord un thriller, un vrai, un bon thriller. On entre très aisement dans l'intrigue, près à sursauté à chaque plan, attendant l'inattendu, je trouve ce film magnifique. De plus, Denzel Washington y est à la hauteur de sa réputation. Le montage de certaines scènes est assez spécial, ce qui nous met encore plus dans l'ambiance. De plus, le film est tiré d'un histoire vraie, ce qui lui donne un appui émotionnel. Si vous aimez D. Washington, les thrillers ou l'action, je ne peux que vous le conseiller! A voir sans hésitation!

affiche française

- page 1 de 2