Pour les scripts : c'est ici

J’ai fait mon CV et une lettre de motivation type en latex, vu la réutilisabilité j’ai voulu un peu automatiser la compilation grace à make, comme il peut être source d’inspiration à n’importe qui je le donne.

#############
# Makefile               #
# Date : 09/01/08    #
#############

# Améliore la portabilité du makefile (sans être nécéssaire avec GNU Make)
SHELL = /bin/sh

# Redéfinition des suffixes pour pouvoir utiliser les rêgles implicites
SUFFIXES = .tex .dvi .pdf
.SUFFIXES: $(SUFFIXES) .

PDFLATEX = pdflatex -interaction=batchmode
LATEX = latex -interaction=batchmode

# Définitions des commandes de compilation
COMPILER_PDF = $(PDFLATEX) $<
COMPILER_DVI = $(LATEX) $<

# Permet de générer les deux pdf ou dvi en une seule commande
pdf : motivation.pdf CV.pdf
dvi : motivation.dvi CV.dvi

# rêgles implicites les fichiers du type *.tex sont les dépendances
# et *.pdf sont les cibles
.tex.pdf :
	$(COMPILER_PDF)

# voir plus haut
.tex.dvi :
	$(COMPILER_DVI)

# Netoyage des fichiers annexes
clean :
	@rm -v *.aux *.log *~

purge : clean
	@rm -i *.dvi *.pdf[/code]

Et pour compiler :
[code]$ make dvi # pour générer deux fichiers dvi
$ make pdf # pour générer deux fichiers pdf
$ make clean # supprime les fichiers annexes
$ make purge # supprime les fichiers annexes et les fichiers de sortie

[Edit : J’ai ajouté l’usage de rêgles implicites, la portabilité et des commentaires]

Bonjour,

Si vous n’avez ni gnome ni kde, vous n’avez peut etre pas de verrouillage d’écran au moment de rebooter votre pc précedemment hiberné. Voici un moyen, parmi beaucoup d’autres, d’y remédier.

Tout d’abord il vous faut xlockmore et acpitool, xlockmore est actuellement indisponible sous etch mais vous pouvez le trouver ici tout pret : cure.nom.fr/blog/archives/14 … -etch.html .

Une fois le paquet installé, utilisez le script suivant :

#!/bin/sh
su <votre nom d'utilisateur> -c "xlock -mode blank &"
sleep 2
acpitool -S

Il vous suffit de lancer ce script en root. En espérant que ca puisse en aider quelques uns :wink:

Sur geckozone.org j’ai eu vent de SpreadFox Japan. Jusque là rien d’interessant, mais ça va suivre.

Ils ont une mascotte très jolies et chaque moi ils édites un wallpaper avec dessus un p’tit calendrier.
Moi ze suis un tête en l’aire donc je me suis dit que ce serait bien de scripter ça pour que chaque moi il me télécharge le dernier fond d’écran (c’est du python pour deux raisons : on a pas encore de scripts python ici et je veux maitriser un peu plus ce langage).

#!/usr/bin/python
# -!- coding: utf-8 -!-

import os, os.path
import urllib, sys
import time
import datetime

if 2 == len(sys.argv) and sys.argv[1] == '--help' :
    print os.path.basename(sys.argv[0]) + " renvoie 0 en cas de succes et 1 au cas où le wallpaper est déjà téléchargé."
    sys.exit(0)

os.chdir(os.getenv('HOME') + '/.wallpaper/firefox')

today = datetime.date.today()
file = today.strftime("%Y-%m") + '.png'

if not os.path.isfile ('./' + file) :
    sys.exit(1)

url = 'http://www.foxkeh.com/downloads/wallpapers/' + today.strftime('%Y%m') + '/1280-1024-c.png'
urllib.urlretrieve(url, file)

os.system ('/usr/bin/gconftool-2 -s /desktop/gnome/background/picture_filename -t string ' + os.getcwd() + '/' + file)

sys.exit(0)

puis

0 20 4 * * /home/haha/bin/wall.py

La gestion de la ligne de commande est très basique mais je pense que ça suffit pour un script comme celui-ci. Peut être que j’y ajouterais des option pour choisir le type de wallpaper téléchargé.

Ça ne fonctionne que sous Gnome au fait.

Si vous avez des remarques. :slightly_smiling:

En quoi ce script ne fonctionne que sous gnome ?

Je ne crois pas que KDE par exemple utilise gconf et s’il l’utilise je doute qu’il ai un chemin content gnome. Je cherche un moyen d’être plus portable avec une API python qui lisserais le wm (comme pour le navigateur par défaut quoi).

yop bon je poste un petit bout de script qui m’arrange quand sa gèle (ce qui est rare), et donne la prioriter a ce que j’utilise vraiment, ce qui m’éviter de me faire ch*** a virer-activer/désactiver/ré-activer etc sans arret
bref un compromis que je place dans /etc/init.d
je place aux début un sleep (qui n’est pas dans ce code car pas indispensable) qui attent que tout les processus ce lance.
Je me suis inspirer de ce que fran.b :smt006 m’avais proposer pour ré-affecter les sous-processus
car certin processus (père) change la valeur des (enfants)

Commentaire:
vous pouvez ajouté une re-direction pour les erreurs 2>/dev/null (1 pour les voire et pas le reste comme l’exemple)

Ci-dessous:provoque des erreurs car grep trouve pas toujours le nom (décalage de collonne avec awk)

ps aux

Je suis passer a

ps -T -C $N -o spid=

la variable N = [nom du processus] Placée ici de marnière volontaire, mai pas indispensable.
de même pour P pour la valeur du renice

#!/bin/sh
function autorenice () {
	(
	N=$1
	P=$2
#	echo "Renice de $N valeur $P"
#	ps aux | grep $1 | awk '{print $2}' | xargs renice $2 2>/dev/null
	ps -T -C $N -o spid= |awk '{print $1}' | xargs renice $P
	)
}
autorenice "avahi-daemon" "19"
autorenice "cron" "20"
autorenice "bash" "8"
autorenice "dbus-daemon" "10"
autorenice "dbus-launch" "10"
autorenice "dhcdbd" "4"
autorenice "dhclient" "4"
autorenice "evolution-alarm-notify" "19"
autorenice "evolution-data-server" "19"
autorenice "freshclam" "20"
autorenice "gdm" "5"
autorenice "gnome-panel" "2"
autorenice "gnome-screensaver" "19"
autorenice "gnome-settings-daemon" "19"
autorenice "gnome-terminal" "8"
autorenice "hald" "15"
autorenice "hald-runner" "15"
autorenice "hald-addon-input" "14"
autorenice "hald-addon-acpi" "19"
autorenice "hald-addon-storage" "19"
autorenice "portmap" "10"
autorenice "metacity" "1"
autorenice "NetworkManager" "4"
autorenice "NetworkManagerDispatcher" "4"
autorenice "nautilus" "5"
autorenice "smbd" "19"
autorenice "sshd" "19"
autorenice "syslogd" "10"
autorenice "system-tools-backends" "10"
autorenice "getty" "-2"
autorenice "udevd" "-6"
autorenice "x-session-manager" "8"
autorenice "Xorg" "5"
exit 0
Forbidden

You don't have permission to access / on this server.
Apache/2.2.4 (Ubuntu) mod_perl/2.0.2 Perl/v5.8.8 Server at tv.freebox.fr Port 80

Free a des serveurs Ubuntu :wink:

Mon script plus haut ne fonctionne plus. Le site a changé ses url pour permettre d’avoir un calendrier qui commence le dimanche et un autre qui commence le lundi.
J’ai aussi fait une 'tite modife pour crée le rep s’il n’existe pas.

#!/usr/bin/python
# -!- coding: utf-8 -!-

import os, os.path
import urllib, sys
import time
import datetime

if 2 == len(sys.argv) and sys.argv[1] == '--help' :
    print os.path.basename(sys.argv[0]) + " renvoie 0 en cas de succes et 1 au cas où le wallpaper est déjà téléchargé."
    sys.exit(0)

rep = os.getenv('HOME') + '/.wallpaper/firefox'
if not os.path.isdir(rep):
    os.makedirs(rep)

os.chdir(rep)

today = datetime.date.today()
file = today.strftime("%Y-%m") + '.png'

if os.path.isfile ('./' + file) :
    sys.exit(1)

url = 'http://www.foxkeh.com/downloads/wallpapers/' + today.strftime('%Y%m') + '/1280x1024_cal_en_mon.png'
urllib.urlretrieve(url, file)

os.system ('/usr/bin/gconftool-2 -s /desktop/gnome/background/picture_filename -t string ' + os.getcwd() + '/' + file)

sys.exit(0)

Salut à tous!
Je vous propose un script sans prétention, mais efficace ^^ que j’ai fait pour rsyncer mon site vers mon disque dur.
Il utilise donc rsync et ssh pour le protocole de communication.

#!/bin/sh

RSYNC_OPTIONS='-av'
REMOTE_SHELL='ssh -p 22'
USER='username'
HOST='host.com'
SRC=${USER}@${HOST}':/home/votre_site_là_bas/www/'
DEST='/media/votre/disque/ici/www/'

############################
# Rsync Distant vers local #
############################
rsync ${RSYNC_OPTIONS} --rsh="${REMOTE_SHELL}" ${SRC} ${DEST}

############################
# Rsync Local vers distant #
############################
# Vous pouvez bien entendu inverser le sens du script pour
#+rsyncer depuis votre disque local vers le serveur distant
#+(Swapper $DEST et $SRC ferait plus propre)
# rsync ${RSYNC_OPTIONS} ${DEST} --rsh="${REMOTE_SHELL}" ${SRC}
exit 0

Nommez-le, puis
chmod +x script
et voilà!

EDIT relatif au post suivant: #!/bin/bash => #!/bin/sh
Merci à MisterFreez pour la précision =)

Juste une petite remarque. Change le shebang :

#!/bin/sh

C’est plus portable (comme tu n’utilise pas de proproiété propre à bash)

Ajoutes-y une gestion incrémentale afin d’éviter toute surprise !
J’avais posté un script python (dans cette rubrique) pour le backup où je gère justement cela.

Juste pour dire que pour l’incrémental il y a rdiff-backup qui est pas mal.

http://www.nongnu.org/rdiff-backup/

Qu’est ce que ça fout dans un fil sur les scripts perso ? T’as des actions dans rdiff-backup ?

excuses moi mais c’étais juste pour proposer une solution , tu peux supprimer si tu veux.

Un petit script qui peut servir, en fonction de ce post-ci: Installer Xen

#! /bin/bash
# 
# Description:
# ------------
#
# Script interactif de sauvegarde pour machine virtuelle Xen.
#
#####################################
# Dernière modification - 2008.03.22
#####################################

# Variables connues
VMS=$(find /etc/xen -type f | grep [*.cfg]$ )

# Chemin du fichier
	printf "================================================\n"
	printf "Quel est le chemin du fichier de configuration ?\n"
	printf "================================================\n\n\n"
	printf "Les fichiers trouvés dans /etc/xen:\n"
	printf "$VMS \n"
	
	read path_vm
		if [[ `ls "$path_vm" ` != "$path_vm" ]];
			then
				printf "Le chemin spécifié n'existe pas\n"
				exit 3
		fi
		if [ ! `echo -n "$path_vm" | grep "cfg$"` ]; 
			then 
				printf "\nVous devez entrer un chemin valide !\n"
				printf "Les fichiers disponible(s) se trouve dans /etc/xen/ par défaut\n"
				printf "\n"
				printf "`ls  /etc/xen/ `\n"; 
				exit 3
			else
				printf "Le chemin est ' "$path_vm" ' \n\n"
		fi

# Nom de la machine
	printf "================================================\n"
	printf "Le nom de la machine à sauvegarder ?\n"
	printf "================================================\n\n\n"
	printf "Les machines en cours de fonctionements:\n"
	printf "`xm list | grep ^[^Name*] | grep ^[^D*]`\n"
	printf "\n\n Les machines potentiellement opérationnelles: \n"
	printf "`echo -n "$VMS" | grep [*.cfg]$ | cut -d/ -f4 | cut -d. -f1`\n"
	
	read name_vm
		if [[ ! `echo -n "$name_vm"` ]];
			then 
				printf "\n Vous devez entrer un nom !\n\n\n"
				printf "La/Les Machine(s) disponible(s)\n"
				printf "\n"
				printf "`xm list` \n"
				exit 3
		fi

# Nom du volume groupe ( LVM )
	printf "================================================\n"
	printf "Quel est le chemin du disque ?\n"
	printf "================================================\n"
	printf "\t ( Volumes logique seulement (LVM) )\n\n\n"
	printf "Liste des volumes logiques:\n"
	printf "`lvdisplay | grep LV | grep Name | awk -F " " '{print$3}'`\n"
		
	read path_lv
	path_lv=`echo "$path_lv" | sed -e 's/^\ //g'`
		
		if [[ ! ` echo -n "$path_lv" ` ]];
			then 
				printf "\n Le chemin est vide ! \n\n\n"
				printf "Le(s) volume(s) logique(s) disponible(s) : \n"
				printf "`lvdisplay | grep $name_vm` \n"
				exit 3
		fi


# Redémarrage de la machine virtuelle après l'opération

	printf "Voulez-vous redémarrer la machine virtuelle après le backup"
	printf "(Oui/Non)O/N ? :" 
	
	read resp_on
	resp=`echo $resp_on | tr [":upper:"] [":lower:"]`
	
	if [[ ! `echo $resp | grep "[o\|n]\|[oui\|non]" ` ]];
		then
			printf "Vous devez répondre par Oui/Non !\n"
			exit 3
		fi

# Variable date
date=$(date)
date_c=$(date +%F)

# On lance le back up
	printf "\n\n\n==============================\n"
	printf "    BACKUP starting ...\n"
	printf "==============================\n\n\n"
	printf "Il est $date \nLe backup commence dans 30 secondes\n\n\n\n\n"
	sleep 30s
	printf "Wait...\n\n\n\n\n"	
	if [[ ! `xm list | grep $name_vm | cut -d\  -f1` ]]; 
		then
	 		`dd if=$path_lv of=/home/$name_vm-bkp-$date_c.img bs=1M  `
		else
			xm shutdown $name_vm && sleep 20s && dd if=$path_lv of=/home/$name_vm-bkp-$date_c.img bs=1M
	fi

# Redémarrage ?

	if [ `echo -n "$resp" | cut -c1` = "o" ];
		then
        		xm create $path_vm
			printf "\n\n\n=========================================================================\n"  
			printf "\tBack up fini à $date\n"
			printf "=========================================================================\n"
		else
			printf "\n\n\n=========================================================================\n"  
			printf "\tBack up fini à $date\n"
			printf "=========================================================================\n"
	fi
exit

Voici mon script netfilter. Je me suis largement inspiré de celui de ricardo pour pouvoir séparer le scripte des rêgles.

#!/bin/sh

CONFIG='/etc/parfeu'


IPTABLES='/sbin/iptables'
RESTORE='/sbin/iptables-restore'
SAVE='/sbin/iptables-save'

function secure ()
{
    if [ ! -f $CONFIG ]; then
        touch $CONFIG;
    fi
    chmod 500 $CONFIG
}

function help ()
{
    echo "Usage : " $0 "[start|stop|restart|save|store]"
    exit -1
}

function restore ()
{
    $RESTORE < $CONFIG
}

function stop ()
{
    $IPTABLES -t filter -F
    $IPTABLES -t nat    -F
    $IPTABLES -t mangle -F
    $IPTABLES -t raw    -F
    $IPTABLES -t filter -P INPUT       ACCEPT
    $IPTABLES -t filter -P OUTPUT      ACCEPT
    $IPTABLES -t filter -P FORWARD     ACCEPT
    $IPTABLES -t nat    -P PREROUTING  ACCEPT
    $IPTABLES -t nat    -P POSTROUTING ACCEPT
    $IPTABLES -t nat    -P OUTPUT      ACCEPT
    $IPTABLES -t mangle -P PREROUTING  ACCEPT
    $IPTABLES -t mangle -P OUTPUT      ACCEPT
    $IPTABLES -t mangle -P POSTROUTING ACCEPT
    $IPTABLES -t mangle -P FORWARD     ACCEPT
    $IPTABLES -t mangle -P INPUT       ACCEPT
    $IPTABLES -t raw    -P OUTPUT      ACCEPT
    $IPTABLES -t raw    -P PREROUTING  ACCEPT
}

function save ()
{
    $SAVE > $CONFIG
}

secure

case $1 in
    'start' )
restore
    ;;
    'stop' )
stop
    ;;
    'restart' )
stop && restore
    ;;
    'save' )
save
    ;;
    'store' )
restore
    ;;
    * )
help
    ;;
esac

Le fichier des rêgles est dans /etc, je ne suis pas sur que ce soit sa place mais bon. J’interdit sa lecture à fin que d’autres utilisateurs ne voient pas d’éventuelles erreur sur les rêgles (oui je suis sur une machine avec personne d’autres dessus mais je préfère prendre de bonnes habitudes).

Puisqu’il y a des gens qui mettent des scripts iptables, j’en poste un que j’avais crée il y a “longtemps” :slightly_smiling:
http://pagesperso-orange.fr/remy.pagniez/admin/rc.firewall

Cela dit, j’ai abandonné iptables en production à cause de la lourdeur de la syntaxe. Je préfère nettement installer un FreeBSD avec pf :slightly_smiling:

Cela dit, le script ci-dessus fonctionne encore trés bien (je m’en sers chez moi)…

Entre PF et NF c’est une histoire de goût je trouve.
(mais je connais pas d’équivalent à Nufw pour pf)

Tout est histoire de goût! :slightly_smiling:

Je dois avouer que je n’ai jamais utilisé NuFw ou d’équivalent car je n’en ai pas encore eu le besoin et le temps. Cependant je sais que pf gère les authentification avec authpf, mais cela semble assez loin de ce que NuFw sait faire…
Les différences sont expliquées sur la page:
http://www.nufw.org/Foire-Aux-Questions.html

J’ai eu besoin de connaître la liste des adresses IP de mon réseau local ce soir pour trouver l’adresse IP du nouveau routeur. Je me suis donc fais un petit scaneur de réseau en perl.

#!/usr/bin/perl

use strict;
use Net::Ping;

$|++;
print "Scan de ordinateurs :\n";

my $nb = 0;
my $ping = Net::Ping->new("icmp", 0.3);

foreach my $i ( 1 .. 254 ){
  if ($ping->ping("192.168.1.".$i)){
    ++$nb;
    print "192.168.1.$i\n";
  }else{
    print '.';
  }
}
$ping->close();

print "Il y a $nb ordinateurs sur le réseau local.\n";

un timeout de 0.3 est nettement suffisant. Je me suis largement inspiré des perles de mongueurs (pour l’idée comme pour l’écriture)
articles.mongueurs.net/magazines … es-28.html