samedi 4 juillet 2009

Configuration de Fedora pour le JDK de Sun

Par défaut, Fedora s'installe avec une implémentation "open" de Java (openjdk). Il se peut que pour une raison "xyz" vous souhaitiez utiliser le Java de Sun. On peut éviter la désinstallation de l'implémentation par défaut openjdk et faire coexister pacifiquement plusieurs Java en utilisant la commande alternatives. Sans entrer trop dans les détails, la commande alternatives va permettre de basculer d'une implémentation sur l'autre en redirigeant un ensemble de liens symboliques.
Concrètement, pour réaliser une migration en douceur, vous installer votre JDK de Sun, et ensuite, vous lancer le script suivant que vous aurez préalablement adapté :
-------------------------------------------------------
#!/bin/bash
JDK=/usr/java/jdk1.6.0_14
/usr/sbin/alternatives \
--install /usr/bin/java java $JDK/bin/java 250673 \
--slave /usr/bin/rmiregistry rmiregistry $JDK/bin/rmiregistry \
--slave /usr/share/man/man1/java.1 java.1 $JDK/man/man1/java.1 \
--slave /usr/share/man/man1/rmiregistry.1 rmiregistry.1 $JDK/man/man1/rmiregistry.1 \
--slave /usr/lib/jvm/jre jre $JDK/jre \
--slave /usr/lib/jvm-exports/jre jre_exports $JDK/jre/lib
/usr/sbin/alternatives \
--install /usr/bin/javac javac $JDK/bin/javac 250673 \
--slave /usr/bin/javadoc javadoc $JDK/bin/javadoc \
--slave /usr/bin/javah javah $JDK/bin/javah \
--slave /usr/bin/jar jar $JDK/bin/jar \
--slave /usr/bin/rmic rmic $JDK/bin/rmic \
--slave /usr/lib/jvm/java java_sdk $JDK \
--slave /usr/lib/jvm-exports/java java_sdk_exports $JDK/lib \
--slave /usr/share/man/man1/javac.1 javac.1 $JDK/man/man1/javac.1 \
--slave /usr/share/man/man1/javadoc.1 javadoc.1 $JDK/man/man1/javadoc.1 \
--slave /usr/share/man/man1/javah.1 javah.1 $JDK/man/man1/javah.1 \
--slave /usr/share/man/man1/jar.1 jar.1 $JDK/man/man1/jar.1 \
--slave /usr/share/man/man1/rmic.1 rmic.1 $JDK/man/man1/rmic.1

ln -s $JDK/jre/lib/amd64/libjavaplugin_jni.so /home/mdupont/.mozilla/plugins/libjavaplugin_jni.so

-------------------------------------------------------
Dans ce script, vous devrez adapter la valeur de la variable JDK (deuxième ligne), pour qu'elle contienne le chemin du Java de Sun. Vous devrez aussi changer le nom d'utilisateur (mdupont) à la dernière ligne (qui sert à installer le plugin pour Firefox).
Une fois, le script lancé, il ne vous reste qu'à taper la commande suivante :
alternatives --config java
et entrer 250673 pour sélectionner le Java souhaité (vous aurez sans doute compris que ce nombre est arbitraire dans le script, et qu'il doit simplément être différent des nombres attribués aux autres alternatives...)
Et voilà ! Comme disait ma grand-mère dans son dialecte : "én sakwê tfé". A+

jeudi 2 juillet 2009

Sauvegarde avec rsync en SSH

Imaginons que vous vouliez sauvegarder vos données sur une machine distance accessible en SSH. Appelons cette machine ordi.domaine.net. et supposons que vous y disposiez d'un compte mdupont. La commande rsync permet très facilement de faire cela. Voici le code d'un script que j'utilise pour effectuer mes propres sauvegardes :
------------------------------------------------------------------------------
#!/bin/bash
rsync -avz -R -e ssh --delete --delete-excluded /home/mdupont --exclude Music --exclude .gvfs --exclude Videos mdupont@ordi.domaine.net:/home/mdupont/backups/pcboulot/
------------------------------------------------------------------------------
Placez ce code dans un fichier que vous nommerez par exemple backup.sh et rendez ce fichier exécutable avec la commande chmod u+x backup.sh.
Si vous lancez ce script, rsync va effectuer une commade ssh (en fait plutôt un scp) sur la machine distante, et donc un mot de passe va être demandé pour l'utilisateur mdupont, ce qui peut être génant si vous souhaitez automatiser vos backups avec cron par exemple. La solution simple et sûre pour éviter cela est de copier la clef publique de mdupont dans son fichier ~/.ssh/authorized_keys sur la machine distante. Le -R va faire en sorte que les fichiers soient sauvés avec leur chemin complet.
Analysons maintenant la commande rsync donnée ci-dessus :
  • L'option -a signie que l'on va effectuer la copie des données en mode "archive", ce qui veut dire que liens symboliques, les permissions, les ownerships, etc. seront conservés sur la destination du backup.
  • L'option -v sert, comme d'habitude, à rendre la commande verbeuse.
  • L'option -z est elle aussi très sympa puisque elle active la compression des données avant transfert, ce qui permet d'épargner de la bande passante et d'accélérer le backup.
  • L'option --exclude permet d'indiquer le nom d'un fichier que l'on veut exclure de la sauvegarde. Remarquez que l'on peut mettre plusieurs exclude et que le nom du fichier exclu est relatif au répertoire source.
  • Le --delete va avoir pour effet de supprimer sur la destination tout fichier absent de la source.
  • Dans le même ordre d'idée, --delete-excluded va faire supprimer de la destination les fichiers exclus (voir option --exclude).
Remarquez aussi l'absence de "trailing slash" dans le nom de la source, ce qui précise que l'on veut copier le répertoire ainsi que son contenu. Si on ajoute un slash à la fin de la source, alors rsync ne copie que le contenu du répertoire, et pas le répertoire lui-même.

Et maintenant, la cerise sur le gâteau : automatisons l'exécution du script grâce à cron ! Pour cela, il faut lancer la commande :
crontab -u mdupont -e
Cette commande sert à éditer avec vi le crontab de l'utilisateur mdupont. Pour info, le résultat de cette commande sera la création d'un fichier /var/spool/cron/mdupont. Mettez la ligne suivante dans le crontab :
2 * * * * /home/mdupont/backup.sh >/home/mdupont/backup.log 2>&1
Cela aura pour effet de lancer le script de backup toutes les heures et 2 minutes et d'afficher le résultat dans un fichier log.

Voilà une bien longue explication, mais je n'ai fait que couvrir une partie de toutes les possibilités de rsync !

A bientôt !