walk-hoary

Archives pour la catégorie scripting

Quelques astuces bash

Il arrive souvent de vouloir manipuler des process par des petits scripts automatisés. J’ai condensé ici quelques mémos qui me servent occasionnelement.

Lancer mpd si celui ci n’est pas lancé :

if [ -z $(pidof mpd) ]; then
	mpd &
fi

Mettre en priorité CPU basse un programme déjà lancé (19 = la plus basse, -20 = la plus haute)

renice -n 19 -p $(pidof mpd)

Mettre en priorité IO basse un programme (7 = la plus basse, 0 = la plus haute)

ionice -n 7 -p $(pidof mpd)

Tags: , , ,

Être averti des connexions SSH

Vous avez un serveur SSH, il peut être  interessant d’être notifié lorsque quelqu’un se connecte sur votre serveur / votre machine.

Remplacez votre@email par l’email voulu.

Voici un bout de code à mettre à la fin de votre ~/.bashrc des comptes concernés :

SSH_CONNECTION_CLIENT_IP=`echo $SSH_CONNECTION | cut -d" " -f1`
SSH_CONNECTION_CLIENT_HOSTNAME=`host $SSH_CONNECTION_CLIENT_IP | cut -d" " -f5`
SSH_CONNECTION_CLIENT_PORT=`echo $SSH_CONNECTION | cut -d" " -f2`
SSH_CONNECTION_SERVEUR_IP=`echo $SSH_CONNECTION | cut -d" " -f3`
SSH_CONNECTION_SERVEUR_HOSTNAME=`host $SSH_CONNECTION_SERVEUR_IP | cut -d" " -f5`
SSH_CONNECTION_SERVEUR_PORT=`echo $SSH_CONNECTION | cut -d" " -f4`
SSH_CONNECTION_LOGIN=`whoami`
SSH_CONNECTION_HOST=`hostname`
SSH_CONNECTION_HEURE=`date`
SSH_CONNECTION_LOAD=`cat /proc/loadavg`
SSH_CONNECTION_OS=`cat /proc/version | cut -d"#" -f1`
SSH_CONNECTION_LISTWHO=`who`
echo -e "Accès Shell sur $SSH_CONNECTION_LOGIN@$SSH_CONNECTION_HOST depuis $SSH_CONNECTION_CLIENT_IP ($SSH_CONNECTION_CLIENT_HOSTNAME)
------------------------------------
IP client     : $SSH_CONNECTION_CLIENT_IP :$SSH_CONNECTION_CLIENT_PORT ($SSH_CONNECTION_CLIENT_HOSTNAME)
IP Serveur    : $SSH_CONNECTION_SERVEUR_IP :$SSH_CONNECTION_SERVEUR_PORT ($SSH_CONNECTION_SERVEUR_HOSTNAME)
Heure serveur : $SSH_CONNECTION_HEURE
Load average  : $SSH_CONNECTION_LOAD
OS            : $SSH_CONNECTION_OS
Connexions    :
$SSH_CONNECTION_LISTWHO
------------------------------------" | mail -s "Accès Shell sur Accès Shell sur $SSH_CONNECTION_LOGIN@$SSH_CONNECTION_HOST depuis $SSH_CONNECTION_CLIENT_IP ($SSH_CONNECTION_CLIENT_HOSTNAME)" votre@email &

Tags: , ,

Créer un patch

Voici deux commandes toutes simples lorsque vous souhaitez diffuser une modification d’un code ou l’appliquer :

Vous souhaitez diffuser une modification d’un code

Soit monFichier.php un fichier modifié en ayant pris soin d’avoir sa version « normale » disons sous le nom monFichier.php.original et monPatch.diff le patch de sortie que va être crée.

diff -c monFichier.php.original monFichier.php > monPatch.diff

Vous souhaitez appliquer un patch

patch < monPatch.diff

A retenir

Vous pouvez concaténer les patch dans un seul fichier (Et donc les visualiser par un editeur de texte).

L’option -p pour patch permet de situer où appliquer le patch. (-p 1 : repertoire courant, -p 0 : repertoire courant et recursivement les autres, -p 2 : appliquer dans le repertoire courant en ignorant le premier niveau dans le patch…).

Vous pouvez gzipper pour gagner en place tel que

diff gnagna1.c gnagna2.c > gzip gnagna.diff.gz

et

zcat gnagna.diff.gz | patch

Tags: , ,

Une netinstall sans internet, pourquoi des mises à jour non plus ?

Il est temps que je vous présente un script que j’utilise dans le GUL auquel je participe : un script pour squid.

Le but final ? C’est de réaliser des installs, de boots par le réseau et faire les dernières mises à jours lorsque la connexion internet est médiocre voir même innexistante.

Pour ça, on utilise déjà squid qui permet de « cacher » les fichiers téléchargés, mais nous utilisons aussi des dépots locaux sur un poste que nous gardons le plus à jour possible lors de l’install-party. Le script ne fait que traduire à squid les emplacement équivalents locaux pour des url normalement sur internet.

Ainsi, http://archive.ubuntu.com/dists/ devient http://10.9.0.72/ubuntu/dists/ pour squid. C’est donc transparent pour les utilisateurs.

Vous êtes intéressés, rendez vous sur la page du projet :

http://projects.qth.fr/projects/squidrepository

Tags: , , ,

Une connexion FTP en local comme si vous y étiez !

Vous cherchez à monter une ressource distante ? Qu’elle soit ftp, ssh, gmail, samba : fuse est une solution !

Je vous indique ici la ligne à ajouter dans le fstab pour monter une ressource FTP dans un répertoire que vous aurez au préalablement crée et choisi vos droits.

curlftpfs#ftp://freebox:motdepasse@hd1.freebox.fr /média/freeboxhd fuse user 0 0

Ceci a été utilisé sous Hardy (Ubuntu 8.04) en ayant pris soin d’installer curlftpfs

curlftpfs#ftp://freebox:motdepasse@hd1.freebox.fr /media/freeboxhd fuse user 0 0

Essayez donc fusible, une interface graphique pour gérer tout ça. (Non testé !)

Tags: , , ,

Compressez vos photos et videos sorties de votre APN

Si comme moi votre appareil photo numérique ne compresse pas beaucoups vos photos, encore moins vos videos ? Voici une solution faisant appel à un script maison :  La recompression en masse des photos jpeg placeés en paramètres.

Compresser des photos en masse

Ce script vous coutera l’installation des paquets jhead et libjpeg-progs sous Ubuntu

script  compress-images.sh

#!/bin/bash
test -f compress1imagePerteExif.sh
if [ ! $? -eq 0 ]
then
echo "Il vous manque le fichier compress1imagePerteExif.sh dans le repertoire courant"
exit 2
fi
while read line
do
echo COMPRESSION DE "$line" .....
ls -l "$line"
jhead -cmd "./compress1imagePerteExif.sh &i" "$line"
ls -l "$line"
echo --------------------------
echo `date` $line >> images-compressees.txt
done

script compress1imagePerteExif.sh

#!/bin/sh
djpeg "$1" | cjpeg -quality 50 -optimise -progressive > "$1"bak
mv "$1"bak "$1"

Voilà !! Usage du script en 2 étapes :

Notez les chemins de vos photos à compresser dans un fichier

find . | grep jpg$ > maliste.txt

Compressez vos fichiers

cat maliste.txt | ./compress-images.sh

Voilà, la compression prendre 1 à 3s par photos généralement.

Pour les vidéos c’est largement plus simple

L’encodage en 2 pass vous nécéssitera mencoder.

Script compress-videos.sh

#!/bin/bash
while read line
do
echo COMPRESSION DE "$line" ..... \
ls -l "$line"
rm divx2pass.log
mencoder -oac mp3lame -ovc xvid -xvidencopts pass=1 -o /dev/null "$line"
mencoder -oac mp3lame -ovc xvid -xvidencopts pass=2:bitrate=800 -o "$line".avi "$line"
rm divx2pass.log
rm "$line"
ls -l "$line".avi
echo --------------------------
echo `date` $line >> videos-compressees.txt
done

L’usage est le même.

Tags: , ,

Je n'aime pas les boîtes noires.