Taltan.blog.bkp

samedi, septembre 2 2006

Script de génération automatique de galeries PhpWebGallery

PhpWebGallery est une trés bonne application web PHP (sous licence GPL), qui permet de créer facilement une galerie de photos en ligne. Elle est proposée en standard dans les modules des pages perso de FREE. le hic c'est que la génération de galerie n'est pas automatique et la nomenclature des fichiers est trés précise. Sous Windows on a phpMyVignettes mais rien en GUI sous Linux (à ma connaissance). après quelques recherches j'ai trouvé pas mal de scripts qui réalisent ça mais rien que me colle vraiment, alors j'en ai adapté plusieurs pour avoir un résultat perso :

Script PhpWebGallery_create_v2.0.sh => Génération automatique de galeries au format PhpWebGallery (génération répertoire, miniatures, photos pwg_high, ...), à intégrer dans les nautilus script (s'applique aux fichiers selectionnés, ne les modifie pas ), nécessite le paquet Imagemagick et zenity

pwg_script.png

Maj : 17/07/2007

  1. Demande du nom de la galerie
  2. Crée les dossier $GALERY_NAME , $GALERY_NAME/THUMB_DIR et $GALERY_NAME/REAL_DIR dans le dossier courant
  3. Traite les images originales et les copie dans le dossier $GALERY_NAME/THUMB_DIR, 3 choix possibles
    1. Aucun, déplacement de l'original
    2. Augmente la compression en gardant la résolution originale
    3. Réduit la résolution originale sans compression à $REAL_L et $REAL_H
  4. Création des images affichées dans la galerie (à 800x600, variable PICT_L et PICT_H) dans le dossier $GALERY_NAME
  5. Création des miniatures (à 128x96, variable THUMB_L et THUMB_H) dans le dossier $GALERY_NAME/THUMB_DIR
#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr                                                            #
############################################################################################
# Script PhpWebGallery_create_v2.0.sh                                                      #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Inspiré du script Rep2Thumb.sh de Gothico                                                #
#    http://forum.phpwebgallery.net/viewtopic.php?id=5522                                  #
# Inspiré du script gallery.sh de wiloo                                                    #
#    http://forum.phpwebgallery.net/viewtopic.php?pid=37829                                #
############################################################################################
# Script de création de galerie pour PhpWebGallery                                         #
# A intégrer dans les nautilus script (applicable aux fichiers selectionnés)               #
# Création de miniatures                                                                   #
# Création de photos redimensionnées                                                       #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet imagemagick : http://doc.ubuntu-fr.org/imagemagick                #
#  - Nécessite le paquet zenity                                                            #
#    => sudo apt-get install imagemagick zenity                                            #
############################################################################################
# 02/09/06 - v1.0 - Création                                                               #
# 17/09/07 - v2.0 - Ajout différents tests avant exécution                                 #
#                 - Ajout de l'interface zenity                                            #
############################################################################################
########################################################################
## CONFIGURATION                                                      ##
########################################################################
# vérifie si imagemagick est installé
which convert 2>/dev/null
if [ $? != 0 ]
then
        zenity --error --title="Erreur" --text="La paquet Imagemagick n'est pas installé"
fi
#teste si au moins 1 fichier est selectioné
if [ $# -eq 0 ]; then
        zenity --error --title="Erreur" --text="Selectionner au moins 1 fichier"
        exit 1
fi
# Chemin complet de la galerie à créer
GALLERY_PATH="`pwd`"
##
# Nom de la galerie
while [ ! "$GALERY_NAME" ] # Réafficher la fenetre tant que l'utilisateur n'a pas fait de choix
do
        GALERY_NAME=`zenity --title "Nom de la galerie" --entry --text "Entrer le nom de la galerie"`
        if  [ $? != 0 ]; then
                exit 1
        fi
                [ $? -ne 0 ] && exit 2 # Annulation
done
# Nom du répertoire à créer pour les miniatures
# ("thumbnail" par défaut dans phpwebgallery)
THUMB_DIR="thumbnail"
# Nom du répertoire à créer pour les images tailles réelles
# ("pwg_high" par défaut dans phpwebgallery)
REAL_DIR="pwg_high"
# Préfixe des miniatures
THUMB_PREFIX="TN-"
## L pour Largeur
## H pour Hauteur
# Taille des photos miniatures
THUMB_L="128"
THUMB_H="96"
# Taille des photos à afficher dans phpwebgallery
PICT_L="800"
PICT_H="600"
# Taille des photos images tailles réelles dans REAL_DIR
REAL_L="1280"
REAL_H="1024"
# Garder les données EXIF ou non
# Avec EXIF => ""
# Sans EXIF => "-strip"
EXIF=""
# Choix du traitement pour l'image en taille réelle

while [ ! "$TRAIT_REAL_CHOICE" ] # Réafficher la fenetre tant que l'utilisateur n'a pas fait de choix
do
        TRAIT_REAL_CHOICE=`zenity --list --width=500 --height=200 \
                --title="Choisissez le type de traitement pour l'image en taille réelle" \
                --column="N°" --column="Description" \
                a "Aucun, déplacement de l'original" \
                b "Augmente la compression en gardant la résolution originale" \
                c "Réduit la résolution originale sans compression"`
        ###### Choix -> Sortie boucle ######
        if  [ $? != 0 ]; then
                exit 1
        fi
        [ $? -ne 0 ] && exit 2 # Annulation
done

if [ $TRAIT_REAL_CHOICE == "a" ] # Déplacement de l'original dans le répertoire configuré pour les mages tailles réelles
        then
        trait_real ()
        {       
        cp "$parametre" "$GALLERY_PATH/$GALERY_NAME/$REAL_DIR/$parametre"
        }
fi
if [ $TRAIT_REAL_CHOICE == "b" ] # Augmente la compression en gardant la résolution originale
        then
        trait_real ()
        {       
        convert -density 72 $EXIF "$GALLERY_PATH/$parametre" "$GALLERY_PATH/$GALERY_NAME/$REAL_DIR/$parametre"
        }
fi
if [ $TRAIT_REAL_CHOICE == "c" ] # Réduit la résolition originale sans compression
        then
        trait_real ()   
        {       
        convert $EXIF -resize $REAL_SIZE "$GALLERY_PATH/$parametre" "$GALLERY_PATH/$GALERY_NAME/$REAL_DIR/$parametre"
        }
fi
########################################################################
## TRAITEMENT DES IMAGES                                              ##
########################################################################
# Création des miniatures dans le répertoire configuré
mkdir "$GALLERY_PATH/$GALERY_NAME"
mkdir "$GALLERY_PATH/$GALERY_NAME/$THUMB_DIR"
mkdir "$GALLERY_PATH/$GALERY_NAME/$REAL_DIR"
numParam=1
erreur=0
nb_param="$#"
for parametre in "$@";
do
        # Orientation de la photo
        L="`identify "$parametre" | cut -d\ -f3 | cut -dx -f1`"
        H="`identify "$parametre" | cut -d\ -f3 | cut -dx -f2`"
        if [ $L -gt $H ]
                then
                        THUMB_SIZE="${THUMB_L}x${THUMB_H}"
                        PICT_SIZE="${PICT_L}x${PICT_H}"
                        REAL_SIZE="${REAL_L}x${REAL_H}"
                else
                        THUMB_SIZE="${THUMB_H}x${THUMB_L}"
                        PICT_SIZE="${PICT_H}x${PICT_L}"
                        REAL_SIZE="${REAL_H}x${REAL_L}"
        fi
        echo "${numParam}. Traitement de $parametre : .... OK "
        # traitement pour l'image en taille réelle
        trait_real $parametre
        # Création des images affichées dans la galerie
        convert -density 72 $EXIF -resize $PICT_SIZE "$GALLERY_PATH/$GALERY_NAME/$REAL_DIR/$parametre" "$GALLERY_PATH/$GALERY_NAME/$parametre";
        # Création des miniatures dans le répertoire configuré pour les miniature   
        convert -thumbnail $THUMB_SIZE -density 72 "$GALLERY_PATH/$GALERY_NAME/$parametre" "$GALLERY_PATH/$GALERY_NAME/$THUMB_DIR/$THUMB_PREFIX$parametre";

        let $[numParam += 1]
        if [ $numParam -gt "$#" ] ; then
                echo "-----------------------------------------"               
                echo "Fin de traitement : $# fichiers "
                echo "-----------------------------------------"
                echo "OK, vous pouvez fermer !"
        fi
done | zenity --text-info --title "PhpWebGallery_create" --width=500 --height=500

NB : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos photos, histoire de voir que tout se passe bien ;)

mardi, juin 27 2006

Conversion de fichiers audio

Combien de fois je me suis retrouvé avec des fichiers musicaux illisibles sur mon baladeur MP3, à me demander quel soft utiliser pour pour les convertir. Alors oui, il y a l'artillerie lourde des applications GUI (Graphic User Interface) avec moult clics et suivant, suivant, ..., alors qu'une simple ligne de commande peut résoudre cette problématique. Ci dessous quelques exemples (non exhaustif) des ces possibilités :

Convertir OGG --> MP3

MP3 à 192kbs, les .mp3 sont stockés dans un répertoire à part (mp3), nécessite les outils ogg (vorbis-tools) et le codec lame

$ sudo apt-get install lame vorbis-tools
$ cd "le répertoire qui contient les fichiers ogg"
$ mkdir mp3; for i in *.ogg; do new_name=`echo "$i" | sed s/.ogg/.mp3/g`; ogg123 -d wav -f - "$i" | lame -h -m s -b 192 - > mp3/"$new_name"; done

Convertir MP3 --> OGG

Les .ogg sont stockés dans un répertoire à part (ogg), nécessite les outils ogg (vorbis-tools) et le MPEG layer 1/2/3 audio player (mpg123)

$ sudo apt-get install mpg123 vorbis-tools
$ cd "le répertoire qui contient les fichiers ogg"
$ mkdir ogg; for i in *.mp3; do new_name=`echo "$i" | sed s/.mp3/.ogg/g`; mpg123 -b 10000 -s "$i" | sox -t raw -r 44100 -s -w -c2 - ogg/temp.wav; oggenc ogg/temp.wav -o ogg/"$new_name"; done; rm -f ogg/temp.wav

Convertir MPC --> WAV

Les .wav sont stockés dans un répertoire à part (wav), nécessite le codec lame et le décodeur mppdec

$ cd "le répertoire qui contient les fichiers mpc"
$ mkdir wav; for i in *.mpc; do new_name=`echo "$i" | sed s/.mpc/.wav/g`; mppdec-static "$i" wav/"$new_name"; done

Convertir WAV --> MP3

Ici MP3 à 160kbs, les .mp3 sont stockés dans un répertoire à part (mp3), nécessite le codec LAME

$ cd "le répertoire qui contient les fichiers wav"
$ mkdir mp3; for i in *.wav; do new_name=`echo "$i" | sed s/.wav/.mp3/g`; lame --abr 160 "$i" "new_name" ; done

Convertir WAV --> OGG

Ici OGG à average bitrate" de 202 kb/s environ, les .ogg sont stockés dans un répertoire à part (ogg), nécessite les outils ogg (vorbis-tools), plus d'info sur le Petit Linux

$ cd "le répertoire qui contient les fichiers wav"
$ for i in *.wav; do oggenc -q 6 $i ; done

Convertir WMA --> MP3

MP3 à 192kbs, les .mp3 sont stockés dans un répertoire à part (mp3), nécessite mplayer et le codec lame

$ sudo apt-get install lame mplayer
$ cd "le répertoire qui contient les fichiers wma"
$ mkdir mp3 ;for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$i" && lame -m j -h --vbr-new -b 192 audiodump.wav -o "`basename "$i" .wma`.mp3"; done; rm -f audiodump.wav ; mv *.mp3 mp3/

Couper un fichier MP3

Ici MP3 à 128kbs, nécessite le codec LAME, la première commande génére un fichier temporaire audiodump.wav à supprimer par la suite ici coupe le MP3 à partir de 27 mins 50 sec du début pendant 09 min 48 s

$ cd "le répertoire qui contient le fichier à couper"
$ mplayer -vc null -vo null -ao pcm -ss 00:27:50 -endpos 00:09:48 mon_fichier.mp3 ; lame --abr 128 audiodump.wav mon_fichier_coupé.mp3

Liens : http://giminik.developpez.com/articles/debian-gnu-linux/gravure-audio-ligne-commande

vendredi, juin 9 2006

Script de sauvegarde des fichiers DotClear

J'ai effectué ma première mise à jour DotClear aujourd'hui, le passage de la version 1.2.4 à 1.2.5. La mise à jour se fait d'ailleurs simplement en installant un plugin de mise à jour vers DotClear 1.2.5. Avant toutes mises à jour il faut sauvegarder ses pages et sa base. Voila donc une ébauche de script qui permet d'automatiser la sauvegarde des fichiers DotClear, en résumé :

  • Sauvegarde des dossiers conf, share, images, themes et ecrire/tools
  • Créer une archive de la forme 2006_06_09_14:14:10_DC.tar.gz
  • Utilise wget et l'accès FTP de l'hébergeur (ici FREE)
#!/bin/bash
###############################################################################
# NOM: /etc/scripts/dc_backup.sh
# COMMENTAIRE : script de sauvegarde distant des fichier dotclear
# Sauvegarde des dossiers conf, share, images, themes et ecrire/tools
# Utilise wget et l'accès FTP de l'hébergeur (ici FREE)
###############################################################################
# 09/06/2006 # Maj 09/06/2006
###############################################################################
# Variables
###############################################################################
ftp_url="ftpperso.free.fr"                        # URL du serveur FTP
ftp_user="utilsateur"               # Utilisateur FTP   
ftp_pass="mot de passe"     # Mot de passe
save_dir="conf share images themes ecrire/tools"        # Dossiers à sauvegarder
gz_file_path="/home/user/bkp"            # emplacement du fichier backup

cd /tmp
for i in $save_dir
do
        wget -r -np ftp://$ftp_user:$ftp_pass@$ftp_url/$i/*
done
tar -cvzf $gz_file_path/`date "+%Y_%m_%d_%H:%M:%S"`_DC.tar.gz $ftp_url
rm -rf /tmp/$ftp_url

jeudi, juin 8 2006

Netfilter scripts de configuration iptables

Voila 3 scripts qui permettent de réaliser un firewall minimaliste mais efficace testé sous Debian et Ubuntu (transposable sur tout autre distrib basé sur Debian ou non d'ailleurs avec des petites modifications). Le script d'initialisation des tables iptables sont largement inspirés de ceux trouvés ici http://olivieraj.free.fr/fr/linux/programme/netfilter_cfg/

Ces scripts sont prévus pour une machine personnelle sur la quelle peut tourner les services http, ftp et ssh accessible depuis l'internet, la machine en question est derrière une freebox v4 en mode routeur et le DHCP est activé (fixé sur adresse MAC)

network.png

Maj 12/08/2006

/etc/scripts/iptables_init.sh

Script d'initialisation des tables iptables, à placer dans le dossier /etc/scripts. Les variables globales sont à rensengner selon l'environnement

#!/bin/sh -norc
###############################################################################
# NOM: /etc/scripts/iptables_init.sh
# COMMENTAIRE : Utilisation du suivi de connexion (ip_conntrack)
###############################################################################
###############################################################################
# Variables globales
###############################################################################
echo "  + ============== INITIALISATION DES TABLES NETFILTER ==============="
# Parametrage du reseau local (LAN = Local Area Network)
DHCP=1            ; # 1:DHCP actif / 0:DHCP inactif pour l'attribution d'IP local
VMWARE=1                        ; # 1:VmWare actif / 0:VmWare inactif
VMWARE_ETH1=vmnet1            ; # Interface reseau virtuelle VmWare 1
VMWARE_LAN_NET1=192.168.218.0/24; # Reseau interne VmWare 1
VMWARE_IP1=192.168.218.1        ; # IP Interface reseau virtuelle VmWare 1
VMWARE_BCAST1=192.168.218.255   ; # Adresse de broadcast Interface reseau virtuelle VmWare 1
VMWARE_ETH2=vmnet8            ; # Interface reseau virtuelle VmWare 2
VMWARE_LAN_NET2=172.16.120.0/24 ; # Reseau interne VmWare 2
VMWARE_IP2=172.16.120.1  ; # IP Interface reseau virtuelle VmWare 2
VMWARE_BCAST2=172.16.120.255    ; # Adresse de broadcast Interface reseau virtuelle VmWare 2
LAN_ETH=eth0            ; # Interface reseau interne
LAN_IP=192.168.0.1            ; # Adresse reseau interne
LAN_NETWORK=192.168.0.0/24      ; # Reseau interne
LAN_BROADCAST=192.168.0.255     ; # Adresse de broadcast interne
MULE_TCP_PORT=8270            ; # Port TCP utilise par *mule       
MULE_UDP_PORT=8271            ; # Port UDP utilise par *mule
FTP_SRV=0                     ; # Serveur FTP local 1:actif / 0:inactif
FTP_SRV_PORT=21   ; # Port d'ecoute du serveur FTP local
SSH_SRV=0                     ; # Serveur SSH local 1:actif / 0:inactif
SSH_PORT=22               ; # Port d'ecoute du serveur SSH local
WEB_SRV=0                     ; # Serveur WEB local 1:actif / 0:inactif
WEB_PORT=80               ; # Port d'ecoute du serveur SWEB local
###############################################################################
### Initialisation des tables
###############################################################################
# Initialise la table Filter (par defaut tout les echanges sont refuses)
echo "  + Initialisation de la table Filter"
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT   DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT  DROP

# Initialise la table NAT (par defaut tout les echanges sont actives)
echo "  + Initialisation de la table NAT"
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P OUTPUT      ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Initialise la table Mangle (par defaut tout les echanges sont actives)
echo "  + Initialisation de la table MANGLE"
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING  ACCEPT
iptables -t mangle -P INPUT       ACCEPT
iptables -t mangle -P FORWARD     ACCEPT
iptables -t mangle -P OUTPUT      ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# Desactivation du NAT (fonction routeur)
echo "  + Desactivation du NAT"
echo 0 > /proc/sys/net/ipv4/ip_forward

###############################################################################
### Creation des regles de filtrages
###############################################################################
# Autorise l'interface loopback à dialoguer avec elle-meme
echo "  + Regles du localhost"
iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT
iptables -t filter -A INPUT  -i lo -p all -j ACCEPT

# Autorise les connexions avec le reseau LAN connecte à l'interface $LAN_ETH
echo "  + Regles du reseau local ($LAN_ETH - $LAN_IP - $LAN_NETWORK)"
# Connexions firewall <-> reseau
iptables -t filter -A OUTPUT -o $LAN_ETH -s $LAN_IP -d $LAN_NETWORK -m state --state ! INVALID -j ACCEPT
iptables -t filter -A INPUT  -i $LAN_ETH -s $LAN_NETWORK -d $LAN_IP -m state --state ! INVALID -j ACCEPT
 
# Connexions firewall <-> broadcast reseau
iptables -t filter -A OUTPUT -o $LAN_ETH -s $LAN_IP -d $LAN_BROADCAST -m state --state ! INVALID -j ACCEPT
iptables -t filter -A INPUT  -i $LAN_ETH -s $LAN_NETWORK -d $LAN_BROADCAST -m state --state ! INVALID -j ACCEPT

# Autorise l'attribution d'IP par DHCP
if [ "$DHCP" == "1" ]; then
echo "  + DHCP actif"
iptables -A INPUT  -i $LAN_ETH -s 0.0.0.0 -d 255.255.255.255 \
                                -p udp --sport bootpc --dport bootps -m state --state NEW,ESTABLISHED -j ACCEPT
else
  echo "  + DHCP desactive" 
fi

# Autorise le dialogue avec les interfaces virtuelles VmWare
if [ "$VMWARE" == "1" ]; then
echo "  + VmWare actif"
        echo "  + Regles du reseau local ($VMWARE_ETH1 - $VMWARE_IP1 - $VMWARE_LAN_NET1)"
        # Connexions firewall <-> reseau VMWARE_LAN_NET1
        iptables -t filter -A OUTPUT -o $VMWARE_ETH1 -s $VMWARE_IP1 -d $VMWARE_LAN_NET1 -m state --state ! INVALID -j ACCEPT
        iptables -t filter -A INPUT  -i $VMWARE_ETH1 -s $VMWARE_LAN_NET1 -d $VMWARE_IP1 -m state --state ! INVALID -j ACCEPT
        # Connexions firewall <-> broadcast reseau VMWARE_LAN_NET1
        iptables -t filter -A OUTPUT -o $VMWARE_ETH1 -s $VMWARE_IP1 -d $VMWARE_BCAST1 -m state --state ! INVALID -j ACCEPT
        iptables -t filter -A INPUT  -i $VMWARE_ETH1 -s $VMWARE_LAN_NET1 -d $VMWARE_BCAST1 -m state --state ! INVALID -j ACCEPT
        echo "  + Regles du reseau local ($VMWARE_ETH2 - $VMWARE_IP2 - $VMWARE_LAN_NET2)"
        # Connexions firewall <-> reseau VMWARE_LAN_NET2
        iptables -t filter -A OUTPUT -o $VMWARE_ETH2 -s $VMWARE_IP2 -d $VMWARE_BCAST2 -m state --state ! INVALID -j ACCEPT
        iptables -t filter -A INPUT  -i $VMWARE_ETH2 -s $VMWARE_LAN_NET2 -d $VMWARE_BCAST2 -m state --state ! INVALID -j ACCEPT
        # Connexions firewall <-> broadcast reseau VMWARE_LAN_NET2
        iptables -t filter -A OUTPUT -o $VMWARE_ETH2 -s $VMWARE_IP2 -d $VMWARE_LAN_NET2 -m state --state ! INVALID -j ACCEPT
        iptables -t filter -A INPUT  -i $VMWARE_ETH2 -s $VMWARE_LAN_NET2 -d $VMWARE_IP2 -m state --state ! INVALID -j ACCEPT
else
  echo "  + VmWare desactive" 
fi

# Autorise l'acces au serveur FTP local depuis l'internet
if [ "$FTP_SRV" == "1" ]; then
echo "  + Serveur FTP actif"
iptables -A INPUT  -i $LAN_ETH -d $LAN_IP -p tcp --dport $FTP_SRV_PORT -m state --state ! INVALID           -j ACCEPT
iptables -A OUTPUT -o $LAN_ETH -s $LAN_IP -p tcp --sport $FTP_SRV_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT
else
  echo "  + Serveur FTP desactive" 
fi

# Autorise l'acces au serveur SSH local depuis l'internet
if [ "$SSH_SRV" == "1" ]; then
echo "  + Serveur SSH actif"
iptables -A INPUT  -i $LAN_ETH -d $LAN_IP -p tcp --dport $SSH_PORT -m state --state ! INVALID           -j ACCEPT
iptables -A OUTPUT -o $LAN_ETH -s $LAN_IP -p tcp --sport $SSH_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT
else
  echo "  + Serveur SSH desactive" 
fi

# Autorise l'acces au serveur SWEB local depuis l'internet
if [ "$WEB_SRV" == "1" ]; then
echo "  + Serveur WEB actif"
iptables -A INPUT  -i $LAN_ETH -d $LAN_IP -p tcp --dport $WEB_PORT -m state --state ! INVALID           -j ACCEPT
iptables -A OUTPUT -o $LAN_ETH -s $LAN_IP -p tcp --sport $WEB_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT
else
  echo "  + Serveur WEB desactive"
fi


###############################################################################
# Regles de connexion à Internet
# Seul les connexions initialises par la machine sont autorisees
# C'est le suivit de connexion
###############################################################################

# Chargement des modules pour le suivi de connexion
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
echo "  + Regles pour Internet (Initie par soft locale --> ALL_IP:ALL_PORT)"
iptables -A OUTPUT -o $LAN_ETH -s $LAN_IP -d 0.0.0.0/0 -p all -m state --state ! INVALID           -j ACCEPT
iptables -A INPUT  -i $LAN_ETH -s 0.0.0.0/0 -d $LAN_IP -p all -m state --state RELATED,ESTABLISHED -j ACCEPT

# Overture des ports d'aMule
echo "  + Regles pour la mule (Port TCP=$MULE_TCP_PORT / Port UDP=$MULE_UDP_PORT)"

iptables -A INPUT -i $LAN_ETH -p tcp -d $LAN_IP --dport $MULE_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i $LAN_ETH -p udp -d $LAN_IP --dport $MULE_UDP_PORT -m state --state ! INVALID -j ACCEPT

# Regles pour le Multiposte FREE
echo "  + Regles pour le Multiposte FREE"
iptables -A INPUT -i $LAN_ETH -p udp -s 212.27.38.253 --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o $LAN_ETH -p udp -d 212.27.38.253 --sport 1024:65535 -j ACCEPT

# Log des paquets rejetes dans /var/log/messages
echo "  + Regles log des paquets rejetes ([IN/FO/OU_PKTS_DROP]==>)"
iptables -A INPUT -j LOG --log-prefix="[IN_PKTS_DROP]==> "
iptables -A FORWARD -j LOG --log-prefix="[FO_PKTS_DROP]==> "
iptables -A OUTPUT -j LOG --log-prefix="[OU_PKTS_DROP]==> "

echo "  + ======================== SCRIPT TERMINE! ========================="
echo "  + Afficher la configuration de la table filter : 'iptables -L -n -v'"
echo "  + Ou 'iptables -L -n -v -t nat ou mangle' pour les autres tables"
echo "  + =================================================================="

Voila le resultat de lexécution du script

$ /etc/scripts/iptables_init.sh
Starting FIREWALL...
  + ============== INITIALISATION DES TABLES NETFILTER ===============
  + Initialisation de la table Filter
  + Initialisation de la table NAT
  + Initialisation de la table MANGLE
  + Desactivation du NAT
  + Regles du localhost
  + Regles du reseau local (eth0 - 192.168.0.1 - 192.168.0.0/24)
  + DHCP actif
  + VmWare actif
  + Regles du reseau local (vmnet1 - 192.168.218.1 - 192.168.218.0/24)
  + Regles du reseau local (vmnet8 - 172.16.120.1 - 172.16.120.0/24)
  + Serveur FTP desactive
  + Serveur SSH desactive
  + Serveur WEB desactive
  + Regles pour Internet (Initie par soft locale --> ALL_IP:ALL_PORT)
  + Regles pour la mule (Port TCP=8270 / Port UDP=8271)
  + Regles pour le Multiposte FREE
  + Regles log des paquets rejetes ([IN/FO/OU_PKTS_DROP]==>)
  + ======================== SCRIPT TERMINE! =========================
  + Afficher la configuration de la table filter : 'iptables -L -n -v'
  + Ou 'iptables -L -n -v -t nat ou mangle' pour les autres tables
  + ==================================================================
0

/etc/script/iptables_stat.sh

Script, à placer dans le dossier /etc/scripts, qui affiche des stats d'utilisation de iptables, download et upload global , flux droppé

#!/bin/sh
###############################################################################
# NOM: /etc/scripts/iptables_stat.sh
# COMMENTAIRE : Statistiques d'utilisation de iptables
###############################################################################
###############################################################################
# Variables globales
###############################################################################
LAN_ETH=ETH0            ; # Interface réseau interne
LAN_IP=192.168.0.1            ; # Adresse réseau interne
LAN_NETWORK=192.168.0.0/24      ; # Réseau interne
###############################################################################
clear
echo '============ STATISTIQUES FLUX RESEAU ============'
###############################################################################
# Variables globales
###############################################################################
echo
echo '====> Flux Ok (bytes)'
echo
echo "   - [DOWNLOAD] $LAN_ETH <-- INTERNET :"`iptables -L -n -v | grep "0.0.0.0/0            $LAN_IP         state RELATED,ESTABLISHED" | cut -c6-12`
echo "   - [UPLOAD]   $LAN_ETH --> INTERNET :"`iptables -L -n -v | grep "$LAN_IP          0.0.0.0/0           state NEW,RELATED,ESTABLISHED,UNTRACKED" | cut -c6-12`
echo "   - [DOWNLOAD] $LAN_ETH <-- LAN      :"`iptables -L -n -v | grep "$LAN_NETWORK       $LAN_IP" | cut -c6-12`
echo "   - [UPLOAD]   $LAN_ETH --> LAN      :"`iptables -L -n -v | grep "$LAN_IP          $LAN_NETWORK" | cut -c6-12`
echo
echo '====> Flux global Dropé'

echo
echo "   - [DOWNLOAD] $LAN_ETH <-- LAN : pakets ="`iptables -L -n -v | grep IN_PKTS_DROP | cut -c0-6`
echo "                               octets ="`iptables -L -n -v | grep IN_PKTS_DROP | cut -c6-12`
echo "   - [UPLOAD]   $LAN_ETH --> LAN : pakets ="`iptables -L -n -v | grep OU_PKTS_DROP | cut -c0-6`
echo "                               octets ="`iptables -L -n -v | grep OU_PKTS_DROP | cut -c6-12`
echo
echo '=================================================='

Voila le résultat

$ /etc/scripts/iptables_stat.sh
============ STATISTIQUES FLUX RESEAU ============

====> Flux Ok (bytes)

   - [DOWNLOAD] ETH0 <-- INTERNET : 34M
   - [UPLOAD]   ETH0 --> INTERNET : 2330K
   - [DOWNLOAD] ETH0 <-- LAN      : 0
   - [UPLOAD]   ETH0 --> LAN      : 10980

====> Flux global Dropé

   - [DOWNLOAD] ETH0 <-- LAN : pakets = 0
                               octets = 0
   - [UPLOAD]]   ETH0 --> LAN : pakets = 93
                               octets = 12600

==================================================

/etc/init.d/firewall

Script d'initialisation du firewall, rêgles iptable, au démarage de la machine. Utilisation possible start|stop|restart|status|panic|stats

  • start : no comment
  • stop : no comment
  • restart : no comment
  • status : affiche les rêgles iptables actives
  • panic : bloque tous par défaut et log les paquets droppé dans /var/log/messages
  • stats : lance le script iptables_stat.sh
#!/bin/sh
# Start/stop the FIREWALL.

case "$1" in
start)  echo "Starting FIREWALL..."
        /etc/scripts/iptables_init.sh
        echo $?
        ;;
stop)   echo "Stopping FIREWALL..."
        echo "  + Initialisation de la table FILTER"
        /sbin/iptables -t filter -F
        /sbin/iptables -t filter -X
        /sbin/iptables -t filter -P INPUT   ACCEPT
        /sbin/iptables -t filter -P FORWARD ACCEPT
        /sbin/iptables -t filter -P OUTPUT  ACCEPT
        echo "  + Initialisation de la table NAT"
        /sbin/iptables -t nat -F
        /sbin/iptables -t nat -X
        /sbin/iptables -t nat -P PREROUTING  ACCEPT
        /sbin/iptables -t nat -P OUTPUT      ACCEPT
        /sbin/iptables -t nat -P POSTROUTING ACCEPT
        echo "  + Initialisation de la table MANGLE"
        /sbin/iptables -t mangle -F
        /sbin/iptables -t mangle -X
        /sbin/iptables -t mangle -P PREROUTING  ACCEPT
        /sbin/iptables -t mangle -P INPUT       ACCEPT
        /sbin/iptables -t mangle -P FORWARD     ACCEPT
        /sbin/iptables -t mangle -P OUTPUT      ACCEPT
        /sbin/iptables -t mangle -P POSTROUTING ACCEPT 
        echo $?
        ;;
restart)   
        $0 stop     

        $0 start
        ;;
status)   
        /sbin/iptables -L -n -v
        ;;
panic)   
        echo "Starting PANIC FIREWALL !!!..."
        /sbin/iptables -t filter -F
        /sbin/iptables -t filter -X
        /sbin/iptables -t filter -P INPUT   DROP
        /sbin/iptables -t filter -P FORWARD DROP
        /sbin/iptables -t filter -P OUTPUT  DROP
        /sbin/iptables -A INPUT -j LOG --log-prefix="[IN_PKTS_PANIC_DROP]==> "
        /sbin/iptables -A FORWARD -j LOG --log-prefix="[FO_PKTS_PANIC_DROP]==> "
        /sbin/iptables -A OUTPUT -j LOG --log-prefix="[OU_PKTS_PANIC_DROP]==> "
        echo $?
        ;;
stats) 
        /etc/scripts/iptables_stat.sh  
        ;;   
*)      echo "Usage: /etc/init.d/firewall start|stop|restart|status|panic|stats"
        exit 1
        ;;
esac
exit 0

Sous Ubuntu pour exécuter le firewall au démarrrage du système il faut faire un lien symbolique vers le srcipt dans le dossier /etc/rc2.d, sans oublier de les rendre exécutable

$ sudo chmod +x /etc/scripts/firewall
$ sudo chmod +x /etc/scripts/iptables_stat.sh
$ sudo chmod +x /etc/scripts/iptables_init.sh
$ sudo ln -s /etc/scripts/firewall /etc/rc2.d/S88firewall
$ ll /etc/rc2.d/S99firewall

lrwxrwxrwx 1 root root 19 2006-05-25 00:57 S88firewall -> ../scripts/firewall

mercredi, juin 7 2006

Les nautilus-scripts

Voila un fonctionnalité bien pratique dans gnome, les scripts nautilus. Il suffit de rajouter des scripts bash dans le dossier ~/.gnome2/nautilus-scripts pour les voir apparaitre dans le menu contextuel de nautilus. On peut par exemple utiliser un script de nettoyage des noms de fichier. Avec le scripts ~/.gnome2/nautilus-scripts/replace_space.sh on a :

nautilus-script01.png

Ce qui donne :

nautilus-script02.png

NB 1 : ne pas oublier de rendre les scripts exécutables

NB 2 : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos fichiers, histoire de voir que tout se passe bien ;)

Voila ceux dont je me sert le plus souvent (maj 12/04/2008) :

Encode_TS.sh :

Encode_TS_4-3.sh

Encoder en Xvid au format 4/3 avec ffmpeg un enregistrement .ts de Freebox HD

#!/bin/bash
encode_ts ()
{
        for parametre in "$@";
        do
        ext=`echo $parametre | awk -F "." '{print $NF}'`       
        avi_name=`echo ${parametre/$ext/avi}`      
        xterm -e "echo | /usr/bin/ffmpeg -i "$parametre" -r 29.97 -vcodec xvid -s 640x480 -aspect 4:3 -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -g 300 -acodec mp3 -ar 48000 -ab 128k -ac 2 "$avi_name""
        done
}

## Traitement
encode_ts "$@"

Encode_TS_16-9.sh

Encoder en Xvid au format 16/9 avec ffmpeg un enregistrement .ts de Freebox HD

#!/bin/bash
encode_ts ()
{
        for parametre in "$@";
        do
        ext=`echo $parametre | awk -F "." '{print $NF}'`       
        avi_name=`echo ${parametre/$ext/avi}`      
        xterm -e "echo | /usr/bin/ffmpeg -i "$parametre" -r 29.97 -vcodec xvid -s 704x384 -aspect 16:9 -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -g 300 -acodec mp3 -ar 48000 -ab 128k -ac 2 "$avi_name""
        done
}

## Traitement
encode_ts "$@"

800x600_resize.sh :

Converti la taille en 800x600 des photos sélectionnées, nécessite le paquet imagemagick

sudo apt-get install imagemagick
#!/bin/bash
do_800x600 ()
{
for img in "$@";
do
        convert -resize 800x600 $img 800x600-$img
done
}
do_800x600 "$@"

play_TV.sh :

En DualHead joue avec mplayer la vidéo séléctionnée sur le deuxième display (TV par exemple)

#!/bin/bash
#play_TV.SH
export DISPLAY=:0.1
mplayer -vo xv -fs "$1"
export DISPLAY=:0.0

Variante avec VLC

#!/bin/bash
export DISPLAY=:0.1
vlc -f "$1"
export DISPLAY=:0.0

play_XMMS.sh :

Joue dans XMMS tous le fichiers du dossier (et sous dossier) sélectionné

#!/bin/bash
xmms "$1"*

replace_space.sh :

Renomme les fichiers ou dossiers passés en paramètres en replaçant les espaces par des underscrores _

#!/bin/bash
# Renomme les fichiers ou dossiers passés en paramètres en replaçant les espaces par des underscrores _
numParam=1
for parametre in "$@"; do
        old_name="$parametre"
        new_name=`echo "$parametre" | tr -s ' ' '_'`
        mv "$old_name" "$new_name"
        let $[numParam += 1]
done

par2repair.sh :

Permettra de reconstituer le fichier original d’une archive manquante ou abîmée

#!/bin/sh
par2repair -q "$1" | zenity --text-info --title "PAR2" --width=500 --height=500

exif_photos_rename_v1.2.sh :

Mise à jour script exif_photos_rename_1.2, renommer les photos selon les données EXIF

#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script exif_photos_rename_v1.2.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 20061104_19.41_007.jpg             #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet exiftool : http://www.sno.phy.queensu.ca/~phil/exiftool/          #
#  - Nécessite le paquet zenity : http://library.gnome.org/users/zenity/index.html.fr      #
#    => sudo apt-get install libimage-exiftool-perl zenity                                 #
############################################################################################
# 15/07/07 - v1.0 - Création                                                               #
# 27/07/07 - v1.1 - Réorganisation                                                         #
#                 - Choix du début de numérotation, par défaut à 1                         #
# 09/07/08 - v1.2 - Remplacement de imagemagick par exiftool pour le traitement            #
#                 - Ajout boîte de dialogue de barre de progression en pourcentage         #
############################################################################################
## Variables
nb_param="$#"
erreur=0
typeset -i CNT=1
typeset -i CUR=0

## Fonctions début de numérotation
début_numerot ()
{
                numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
                if  [ $? != 0 ]; then
                        exit 1
                fi
                        [ $? -ne 0 ] && exit 2 # Annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
        for parametre in "$@";
        do
                old_name="$parametre"
                date_time=`exiftool "$parametre" | grep "Create Date"`
                extension=`echo $parametre | awk -F "." '{print $NF}'`
                aa=`echo $date_time | cut -d: -f2 | cut -c2-5`
                mm=`echo $date_time | cut -d: -f3`
                jj=`echo $date_time | cut -d: -f4 | cut -c1-2`
                hh=`echo $date_time | cut -d: -f4 | cut -c4-5`
                min=`echo $date_time | cut -d: -f5`     
                if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then
                        numero=00$numParam
                fi
                if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then
                        numero=0$numParam
                fi
                if [ $numParam -gt 100 ] ; then
                        numero=$numParam
                fi
                new_nane=`echo ${aa}${mm}${jj}_${hh}.${min}_${numero}.${extension}`
                cp "$old_name" "${new_nane}"

                if [ $? = 0 ] ; then   
                        echo "${old_name} => ${new_nane} .... OK" >> /tmp/exif_photos_rename.log
                        rm -f "$old_name"
                else
                        echo "Impossible de renommer $old_name .... NOK" >> /tmp/exif_photos_rename.log
                        let $[erreur += 1]
                fi           
                CUR=$CNT*100/$nb_param
                echo $CUR
                echo "#Traitement de $nb_param photos\n${old_name} => ${new_nane} ... en cours\n\nAvancement: $CUR %\n "               
                CNT=$CNT+1
                let $[numParam += 1]
        done
        nb_renomme=$(( $nb_param - $erreur ))
        if [ $erreur != 0 ] ; then
                touch /tmp/exif_photos_rename.err       
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\n _!!_ Cliquer sur Valider pour afficher le rapport de traitement _!!_\n"
                       
        else
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\nOK, vous pouvez fermer en cliquant sur Valider !\n"
        fi
}

## Fonctions affichage du rapport de traitement
affich_log ()
{
if [ -f /tmp/exif_photos_rename.err ] ; then
        cat /tmp/exif_photos_rename.log | zenity --text-info --title "/tmp/exif_photos_rename.log" --width=500 --height=500
fi
rm -f /tmp/exif_photos_rename.log
rm -f /tmp/exif_photos_rename.err
}

## Traitement
if [ "$#" -eq 0 ]; then
        zenity --error --title="error" --text="Selectioner au moins 1 fichier"
        exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --progress --title="exif_photos_rename" --percentage=0
affich_log

page 2 de 2 -