PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

crowd42 : Slacker, un conky inspiré de Slackware

jeudi 9 mai 2013 à 02:08

Pour les amateurs des scripts conky, en voilà un qui devrait sûrement vous plaire, notamment pour son côté old school. Je l’ai déniché sur le site deviantart, son auteur s’est inspiré de la distribution Slackware (ne connaissant pas trop cette distro, je ne vois pas lien avec elle).

Pour installer ce conky, rien de plus simple. Télécharger cette archive depuis ce lien. Ensuite décompressez la dans votre répertoire personnel, en prenant le soin de renommer conkyrc en .conkyrc.

conky slacker

Enjoy it ;)

Cet article Slacker, un conky inspiré de Slackware est apparu en premier sur crowd42.

Gravatar de crowd42
Original post of crowd42.Votez pour ce billet sur Planet Libre.

Chimrod : De fcron à cron

jeudi 9 mai 2013 à 00:00
Pavement

Image: Toni Verdú Carbó (creativecommons)

Debian Wheezy est sortie, et cette nouvelle version a fait un peu de ménage dans les paquets disponibles. Parmi ceux-ci, fcron a disparu. Il s’agit du gestionnaire de tâche planifiées que j’utilisais jusqu’alors. Ce petit guide a pour vocation de vous expliquer comment migrer la configuration.

Fcron avait l’avantage de pouvoir gérer l’arrêt de la machine, et lancer les tâches en attente lors du redémarrage. Quand on s’auto-héberge, cela permet de prendre en charge les coupures inopinées, et se passer du couple cron/anacron. Debian a fait le choix de préférer ce dernier couple plutôt que fcron, voici donc un petit guide pour passer de l’un a l’autre.

Migration?

Pour commencer, pas de panique, le paquet est supprimé des dépôts, mais reste parfaitement fonctionnel sur votre machine. Vous n’avez donc pas besoin de vous précipiter, tout va continuer de tourner tout seul comme auparavant. Vous pouvez même choisir de ne pas migrer et continuer à l’utiliser. Toutefois, si des failles de sécurités sont trouvées sur le programme, aucune mise à jour ne sera effectuée: c’est à vous de vous tenir informé du développement de l’application et de faire l’installation.

La transformation

Voici un script python qui se charge de faire la migration d’un fcrontab vers un crontab. Il ne fait que générer les fichiers de configuration, et n’enregistre rien sur le système. Le script va lire les fcrontab enregistrées dans le répertoire /var/spool/fcron/ et génère en sortie les crontab correspondantes pour chacun de ces utilisateurs.

Usage

Le programme doit être lancé en root pour pouvoir lire les fichiers présents dans le répertoire /var/spool/fcron/ ainsi que les fcrontabs des différents utilisateurs du système:

$ mkdir crontabs
$ cd crontabs
$ sudo python ~/fcron2cron.py

Il y a beaucoup moins de paramètres chez cron que fcron, il est toutefois possible de convertir quelques instructions:

Les options

Les seules options possibles dans cron sont celles qui concernent le mail:

mail(bool) devient MAILTO=”“ si bool est à false mailto(string) devient MAILTO=”string”

Les autres options sont ignorées[1].

Les directives

Les directives hourly, daily[2], weekly, monthly sont transformées en leur équivalent dans cron, ainsi que leur équivalent mid-*ly. Les directives mins, hours, days, mons, dow ne sont pas prises en compte et sont ignorées dans la ligne générée.

L’édition

Le programme ne fait pas l’insertion de la crontab dans le système, ainsi, dans le cas ou une telle crontab existe déjà, elle ne sera pas écrasée. C’est à l’adminstrateur de mettre le paramétrage à jour. Une fois le script lancé, des fichiers UTILISATEUR.crontab vont être générés.

Si l’utilisateur n’a pas de crontab correspondante, il est possible de le charger directement avec la commande suivante:

# crontab -u ${USER} ${USER}.crontab

Si l’utilisateur possède déjà une crontab, il va falloir éditer le fichier pour le faire correspondre. Maintenant qu’il ne reste plus que ça à faire, il est temps de se remonter les manches et y aller à la main! Une fois que les modifications sont faites, vous pouvez désinstaller fcron de votre système.

Notes

[1] Y compris les options en début de commande (ligne débutant par &)
[2] nightly est traité de la même manière

Gravatar de Chimrod
Original post of Chimrod.Votez pour ce billet sur Planet Libre.

Articles similaires

Uggy : Monter une image disque (.img) contenant plusieurs partitions

mercredi 8 mai 2013 à 23:35

Le RaspberryPi nécessite 2 partitions et les OS sont généralement founis en .img

J'avais besoin de comparer certains fichiers entre mon installation Rasbian et la distribution Raspbmc.

Je télécharge donc raspbmc-final.img sur mon laptop puis:

$ mkdir mount
$ sudo fdisk -l raspbmc-final.img

Disk raspbmc-final.img: 1363 MB, 1363148800 bytes
4 heads, 32 sectors/track, 20800 cylinders, total 2662400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d692e

Device Boot Start End Blocks Id System
raspbmc-final.img1 4096 147455 71680 c W95 FAT32 (LBA)
raspbmc-final.img2 151552 2662399 1255424 83 Linux

Si on veut monter la 1ère partition qui démarre au sector 4096, l'offset à utiliser est donc 512x4096=2097152

$ sudo mount -o loop,offset=2097152 raspbmc-final.img mount/
$ cat mount/cmdline.txt
dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2
$ sudo umount mount/

Si on veut monter la 2ème partition qui démarre au sector 151552, l'offset à utiliser est donc 512x151552=77594624

$ sudo mount -o loop,offset=77594624 raspbmc-final.img mount/
$ cat mount/etc/hostname
raspbmc
$ sudo umount mount/

man fdisk
[...] starting offset and the size of each partition is stored in two ways: as an absolute number of sectors [...]

man mount
[...] mount knows about four options, namely loop, offset, sizelimit and encryption [...]



[Edit:] Tassatux m'indique dans le commentaires que kpartx est créé a cet effet:

This tool, derived from util-linux' partx, reads partition tables on specified device and create device maps over partitions segments detected. It is called from hotplug upon device maps creation and deletion.

Voir les commentaires pour les informations supplémentaires.

Gravatar de Uggy
Original post of Uggy.Votez pour ce billet sur Planet Libre.

bazzanella : Ecrire vers un fichier distant

mercredi 8 mai 2013 à 23:01

Vous souhaitez écrire le contenu d’une variable contenant des double-quotes dans un fichier distant.

Vous avez une variable contenant des doubles quotes (« ) :

chaine="Bonjour \\"$LOGNAME\\" et bienvenue"
  1. chaine="Bonjour \\"$LOGNAME\\" et bienvenue"

le résultat d’affichage étant :
Bonjour "martin" et bienvenue

Vous souhaitez donc conserver les doubles quotes entourant votre login martin et écrire ce résultat dans un fichier distant :

ssh -p 22 -i /home/user1/.ssh/id_dsa user1@remoteserver "echo '$chaine' > /home/user1/file1.txt"
  1. ssh -p 22 -i /home/user1/.ssh/id_dsa user1@remoteserver "echo '$chaine' > /home/user1/file1.txt"

ou plus pratiquement en écrivant une fonction :

function write_var_to_remotefile () {
local var_param="${1}"
local remotepathfile_param="${2}"

if [ -z ${var_param} ]; then
  echo "write_var_to_remotefile : Argument 1 non fourni"
  exit 1;
fi

if [ -z ${remotepathfile_param} ]; then
  echo "write_var_to_remotefile : Argument 2 non fourni"
  exit 1;
fi

if [ -z ${PORT} ]; then
  echo "write_var_to_remotefile : Global variable PORT non fourni"
  exit 1;
fi

if [ -z ${PATHPRIVKEY} ]; then
  echo "write_var_to_remotefile : Global variable PATHPRIVKEY non fourni"
  exit 1;
fi

if [ -z ${REMOTESERVER} ]; then
  echo "write_var_to_remotefile : Global variable REMOTESERVER non fourni"
  exit 1;
fi

if [ -z ${REMOTEUSER} ]; then
  echo "write_var_to_remotefile : Global variable REMOTEUSER non fourni"
  exit 1;
fi

/usr/bin/ssh -p ${PORT} -i ${PATHPRIVKEY} ${REMOTEUSER}@${REMOTESERVER} "echo '${var_param}' > ${remotepathfile_param}"
}
  1. function write_var_to_remotefile () {
  2. local var_param="${1}"
  3. local remotepathfile_param="${2}"
  4.  
  5. if [ -z ${var_param} ]; then
  6.   echo "write_var_to_remotefile : Argument 1 non fourni"
  7.   exit 1;
  8. fi
  9.  
  10. if [ -z ${remotepathfile_param} ]; then
  11.   echo "write_var_to_remotefile : Argument 2 non fourni"
  12.   exit 1;
  13. fi
  14.  
  15. if [ -z ${PORT} ]; then
  16.   echo "write_var_to_remotefile : Global variable PORT non fourni"
  17.   exit 1;
  18. fi
  19.  
  20. if [ -z ${PATHPRIVKEY} ]; then
  21.   echo "write_var_to_remotefile : Global variable PATHPRIVKEY non fourni"
  22.   exit 1;
  23. fi
  24.  
  25. if [ -z ${REMOTESERVER} ]; then
  26.   echo "write_var_to_remotefile : Global variable REMOTESERVER non fourni"
  27.   exit 1;
  28. fi
  29.  
  30. if [ -z ${REMOTEUSER} ]; then
  31.   echo "write_var_to_remotefile : Global variable REMOTEUSER non fourni"
  32.   exit 1;
  33. fi
  34.  
  35. /usr/bin/ssh -p ${PORT} -i ${PATHPRIVKEY} ${REMOTEUSER}@${REMOTESERVER} "echo '${var_param}' > ${remotepathfile_param}"
  36. }

Gravatar de bazzanella
Original post of bazzanella.Votez pour ce billet sur Planet Libre.

Articles similaires

bazzanella : Fonctions BASH

mercredi 8 mai 2013 à 18:33

Vous pouvez améliorer vos scripts shell en bash en leur intégrant des fonctions.

Une fonction bash vous permet de ne pas répéter un bout de code dans votre programme. Vous pouvez également grouper vos fonctions dans des fichiers de bibliothèques via la directive source :

#!/bin/bash

source CheminDeVotreBibliotheque
…
  1. #!/bin/bash
  2.  
  3. source CheminDeVotreBibliotheque

Exemple de fonction bash :

#!/bin/bash

# Licence GPL
# Copyleft 2005 Thierry Bazzanella

function OuiNon {
local qst def rep
qst="${1:-'Oui ou Non ? '}"
def="${2}"
while :
do
read -p "${qst}" rep || exit 1
case "$(echo "${rep:-$def}" | tr '[a-z]' '[A-Z]')" in
O|OUI|Y|YES) return 0 ;;
N|NON|NO) return 1 ;;
"" ) : ;;
*) echo "Reponse invalide: ${rep}" ;;
esac
done
}

# avec un parametre
function tafonction {
echo "${1} Visiteur !"
return 7 # de 0 a 255 max
}

# Appel de ta fonction
tafonction "Coucou"
#Recuperation d'un code de retour de tafonction:
# doit etre declaree de suite apres l'appel de tafonction
CODERETOUR_TAFONCTION=$( echo $? )
VALEURRETOUR_TAFONCTION=$( tafonction "et bien" )

#Recuperation de la valeur du parametre
# Retourne par tafonction
# dans ton programme principal:
echo "Une autre valeur de retour est : $VALEURRETOUR_TAFONCTION"
echo "Le code de retour est $CODERETOUR_TAFONCTION"
# Avec echo cequetuveux dans tafonction te permet de recuperer
# une valeur quelconque sur l'entree standard
# Par contre le return 7 te permet de recuperer un code de retour numerique

# tu peux donc avec ces elements faire une fonction OuiNon de ton code
# et declarer le code de cette fonction une seule fois au debut
# de ton programme et l'appeler autant de fois que necessaire.

if OuiNon "Etes-vous favorable a l'utilisation des fonctions ? votre reponse => " Oui
then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
else echo "Ok, vous n'etes pas favorable. Bonjour la maintenance du code !"
fi

if OuiNon "Etes-vous favorable a l'utilisation de GNU/Linux ? votre reponse => " Oui
then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
else echo "Ok, vous n'etes pas favorable. Vous preferez ce bon vieux CP/M !"
fi
  1. #!/bin/bash
  2.  
  3. # Licence GPL
  4. # Copyleft 2005 Thierry Bazzanella
  5.  
  6. function OuiNon {
  7. local qst def rep
  8. qst="${1:-'Oui ou Non ? '}"
  9. def="${2}"
  10. while :
  11. do
  12. read -p "${qst}" rep || exit 1
  13. case "$(echo "${rep:-$def}" | tr '[a-z]' '[A-Z]')" in
  14. O|OUI|Y|YES) return 0 ;;
  15. N|NON|NO) return 1 ;;
  16. "" ) : ;;
  17. *) echo "Reponse invalide: ${rep}" ;;
  18. esac
  19. done
  20. }
  21.  
  22. # avec un parametre
  23. function tafonction {
  24. echo "${1} Visiteur !"
  25. return 7 # de 0 a 255 max
  26. }
  27.  
  28. # Appel de ta fonction
  29. tafonction "Coucou"
  30. #Recuperation d'un code de retour de tafonction:
  31. # doit etre declaree de suite apres l'appel de tafonction
  32. CODERETOUR_TAFONCTION=$( echo $? )
  33. VALEURRETOUR_TAFONCTION=$( tafonction "et bien" )
  34.  
  35. #Recuperation de la valeur du parametre
  36. # Retourne par tafonction
  37. # dans ton programme principal:
  38. echo "Une autre valeur de retour est : $VALEURRETOUR_TAFONCTION"
  39. echo "Le code de retour est $CODERETOUR_TAFONCTION"
  40. # Avec echo cequetuveux dans tafonction te permet de recuperer
  41. # une valeur quelconque sur l'entree standard
  42. # Par contre le return 7 te permet de recuperer un code de retour numerique
  43.  
  44. # tu peux donc avec ces elements faire une fonction OuiNon de ton code
  45. # et declarer le code de cette fonction une seule fois au debut
  46. # de ton programme et l'appeler autant de fois que necessaire.
  47.  
  48. if OuiNon "Etes-vous favorable a l'utilisation des fonctions ? votre reponse => " Oui
  49. then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
  50. else echo "Ok, vous n'etes pas favorable. Bonjour la maintenance du code !"
  51. fi
  52.  
  53. if OuiNon "Etes-vous favorable a l'utilisation de GNU/Linux ? votre reponse => " Oui
  54. then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
  55. else echo "Ok, vous n'etes pas favorable. Vous preferez ce bon vieux CP/M !"
  56. fi

Gravatar de bazzanella
Original post of bazzanella.Votez pour ce billet sur Planet Libre.

Articles similaires