memo varnish purge

varnishadm -S /etc/varnish/secret -T :6082 "url.purge .*"
varnishadm -S /etc/varnish/secret -T :6082 'purge req.http.host == "blog.hio.fr"'
varnishadm -S /etc/varnish/secret -T :6082 'purge req.url ~ .(xml|txt)'

pureftpd_adduser.sh

#!/bin/bash
# ftp
ftp_root="/home/ftp"
ftp_host="ftp.host.com"
ftp_port="21"
ftp_user=$1
ftp_passwd=`pwgen -y 12 1`
ftp_owner="www-data:www-data"
ftp_perm="555"
ftp_uid="33"
ftp_gid="33"
# mysql
mysql_user="PUREUSER"
mysql_db_name="DBNAME"
mysql_table="TABLE"
mysql_passwd="PASSWORD"
# lftp
lftp_bin="/usr/bin/lftp"
 
function usage {
    echo "Usage:"
    echo "$0 ftp_user"
}
 
if [[ $1 == "" ]]; then
    usage
    exit 1
fi
 
if [ ! -d "$ftp_root/$ftp_user" ]; then
    echo "create user home dir $ftp_root/$ftp_user"
    mkdir $ftp_root/$ftp_user
    chown $ftp_owner $ftp_root/$ftp_user
    chmod $ftp_perm $ftp_root/$ftp_user
    echo "create user $ftp_user"
    mysql -u"$mysql_user" -p"$mysql_passwd" <<EOF
INSERT INTO $mysql_db_name.$mysql_table (User, status, Password, Uid, Gid, Dir, ULBandwidth, DLBandwidth, comment, ipaccess, QuotaSize, QuotaFiles) VALUES ('$ftp_user', '1', MD5('$ftp_passwd'), '$ftp_uid', '$ftp_gid', '$ftp_root/$ftp_user', '0', '0', '', '*', '0', '0');
EOF
    echo "## FTP USER ##"
    echo "host: $ftp_host"
    echo "port: $ftp_port"
    echo "login: $ftp_user"
    echo "password: $ftp_passwd"
 
    echo "## TEST ACCOUNT ##"
    if [ -f "$lftp_bin" ]; then
	$lftp_bin -u $ftp_user,$ftp_passwd localhost -e "ls;quit"
    else
	echo "lftp ($lftp_bin) not found"
    fi
    echo "done."
else
    echo "user $ftp_user already exists"
fi

fix_db_host.sh

#!/bin/bash
www_dir="/home/www"
for i in `ls $www_dir`
do
    mkdir -p /tmp/$i/
    sed -e 's/old.database.com/new.database.com/g' $i/wp-config.php > /tmp/$i/wp-config.php
    mv /tmp/$i/wp-config.php $www_dir/$i/wp-config.php
    rmdir /tmp/$i/
done

migrate_wordpress.sh

#!/bin/bash
# SSH
ssh_host="source.host.tld"
ssh_user="hio"
ssh_port="22"
ssh_key="/home/hio/.ssh/id_rsa"
www_dir="/www/blogs/"
# WWW
vhost_template="/home/hio/blog.vhost"
blog=$1
vhost_server_name=$2
# REMOTE
remote_tmp_dir="/home/hio/tmp"
remote_mysql_root="root"
remote_mysql_password="password"
# LOCAL
local_tmp_dir="/tmp"
local_mysql_root="root"
local_mysql_password="password"
 
if [ ! -f "$blog/wp-config.php" ]; then
    echo 'COPY WORDPRESS FILES...'
    scp -r -P$ssh_port -i$ssh_key $ssh_user@$ssh_host:/$www_dir/$blog .
    db_host=`grep 'DB_HOST' $blog/wp-config.php|awk -F "'" '{print $4}'`
    db_name=`grep 'DB_NAME' $blog/wp-config.php|awk -F "'" '{print $4}'`
    db_user=`grep 'DB_USER' $blog/wp-config.php|awk -F "'" '{print $4}'`
    db_password=`grep 'DB_PASSWORD' $blog/wp-config.php|awk -F "'" '{print $4}'`    
    echo "DB_HOST: $db_host"
    echo "DB_NAME: $db_name"
    echo "DB_USER: $db_user"
    echo "DB_PASSWORD: $db_password"
 
    echo "DUMP REMOTE DB TO $remote_tmp_dir/$db_name.sql"
    ssh -i$ssh_key $ssh_user@$ssh_host -p $ssh_port <<EOF>> /dev/null 2>&1
mkdir -p $remote_tmp_dir
cd $remote_tmp_dir
mysqldump --user=$remote_mysql_root --password=$remote_mysql_password -c $db_name > $remote_tmp_dir/$db_name.sql
EOF
 
    echo "GET REMOTE DB $remote_tmp_dir/$db_name.sql TO $local_tmp_dir"
    scp -i$ssh_key -P$ssh_port $ssh_user@$ssh_host:$remote_tmp_dir/$db_name.sql $local_tmp_dir
    echo "CREATE USER '$db_user'@'localhost' IDENTIFIED BY '$db_password';"
    echo "CREATE DATABASE $db_name;"
    echo "GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'localhost' WITH GRANT OPTION;"
    mysql -u"$local_mysql_root" -p"$local_mysql_password" <<EOF
CREATE USER '$db_user'@'localhost' IDENTIFIED BY '$db_password';
CREATE DATABASE $db_name;
GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'localhost' WITH GRANT OPTION;
EOF
 
    echo "IMPORT DUMP $local_tmp_dir/$db_name.sql TO DATABASE $db_name"
    mysql -u"$local_mysql_root" -p"$local_mysql_password" $db_name < $local_tmp_dir/$db_name.sql
 
    echo "REMOVE LOCAL/REMOTE $db_name DUMP"
    rm $local_tmp_dir/$db_name.sql
    ssh -i$ssh_key $ssh_user@$ssh_host -p $ssh_port <<EOF>> /dev/null 2>&1
rm $remote_tmp_dir/$db_name.sql
EOF
 
fi
 
if [ ! -f "/etc/apache2/sites-available/$vhost_server_name" ]; then
    echo "CREATE VHOST FOR $vhost_server_name"
    cat $vhost_template|sed "s/%BLOG_NAME%/"$vhost_server_name"/g" > /etc/apache2/sites-available/$vhost_server_name;
fi
 
if [ ! -f "/etc/apache2/sites-enabled/$vhost_server_name" ]; then
    echo "LINK /etc/apache2/sites-enabled/$vhost_server_name /etc/apache2/sites-available/$vhost_server_name"
    ln -s /etc/apache2/sites-available/$vhost_server_name /etc/apache2/sites-enabled/$vhost_server_name
fi
 
chown www-data:www-data -R $blog
<VirtualHost *:8080>
ServerAdmin romain.bureau@bayard-presse.com
DocumentRoot /home/www/%BLOG_NAME%/
ServerName %BLOG_NAME%
ErrorLog ${APACHE_LOG_DIR}/%BLOG_NAME%-error.log
CustomLog ${APACHE_LOG_DIR}/%BLOG_NAME%-access.log combined
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
<directory /home/www/%BLOG_NAME%/>
Options -Indexes +ExecCGI
AllowOverride All
order allow,deny
Allow from all
</directory>
</VirtualHost>
cd /var/www
bash /home/hio/migrate_wordpress.sh blog.hio.fr blog.hio.fr

Comment minifier le js et css d’un projet symfony simplement

Comment minifier le css et le javascript de son projet symfony

On telecharge yuicompressor chez yahoo yuicompressor

pour des besoin de pure fainéantise, on créé le minify.sh a coter de l’exécutable symfony, on met le .jar de yuicompressor dans le même répertoire ou ailleurs mais il faudra le changer dans le script dans se cas là :)

emacs ou vim minify.sh et on colle ça dedant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
yui='./yuicompressor-2.4.2.jar' # le path du .jar de yuicompressor
css='./web/css/style.min.css' # le path du css minifier
js='./web/js/be-geek.min.js' # le path du js minifier
 
if [ -f "$css" ]; then
    echo "rm: $css"
    rm $css
fi
 
if [ -f "$css.gz" ]; then
    echo "rm: $css.gz"
    rm $css.gz
fi
 
if [ -f "$js" ]; then
    echo "rm: $js"
    rm $js
fi
 
if [ -f "$js.gz" ]; then
    echo "rm: $js.gz"
    rm $js.gz
fi
 
for i in `ls ./web/css/`
do
    echo $i
    java -jar $yui --type css ./web/css/$i >> $css
done
 
for i in `ls ./web/js/`
do
    echo $i
    java -jar $yui --type js ./web/js/$i >> $js
done
 
echo "gzip $css > $css.gz"
gzip -c -n -3 $css > $css.gz
echo "gzip $js > $js.gz"
gzip -c -n -3 $js > $js.gz
 
echo 'done'

ensuite

bash minify.sh

ce qui nous donne

hio@jupiter:~/www/be-geek.com/trunk$ bash minify
rm: ./web/css/style.min.css
rm: ./web/css/style.min.css.gz
rm: ./web/js/be-geek.min.js
rm: ./web/js/be-geek.min.js.gz
jquery.lightbox-0.5.css
main.css
slides.css
style01.css
jquery.be-geek.js
jquery.lightbox-0.5.min.js
slides.jquery.js
gzip ./web/css/style.min.css > ./web/css/style.min.css.gz
gzip ./web/js/be-geek.min.js > ./web/js/be-geek.min.js.gz
done

et dans le view.yml, on vire les autres .js et .css et on ne met plus que les fichier .js et .css minifier

  stylesheets:    [style.min.css]
  javascripts:    [monjs.min.js]

voila c’était trop dur :)

BASH Comment tester si un repertoire existe

Voila un petit bout de bash pour tester l’existence d’un repertoire ou d’un fichier

1
2
3
4
5
#!/bin/bash
dir="/home/hio/test"
if [ -d "$dir" ]; then
    echo "$dir existe !"
fi

et en rajoutant un else ^^

1
2
3
4
5
6
7
#!/bin/bash
dir="/home/hio/test"
if [ -d "$dir" ]; then
    echo "$dir existe !"
else
    echo "$dir n'existe pas!"
fi

et en inversant le test on rajoute juste un « ! » devant le « -d »

1
2
3
4
5
6
7
#!/bin/bash
dir="/home/hio/test"
if [ ! -d "$dir" ]; then
    echo "$dir n'existe pas!"
else
    echo "$dir existe !"
fi

Voila, c’est pas tres compliquer ^^ et pour tester l’existence d’un fichier, on remplace juste le « -d » par un « -f »

iptables.sh

iptables.sh

#!/bin/bash
set -e
iptables="/sbin/iptables"
modprobe="/sbin/modprobe"
allowporttcp="80 443 6667 6669"
allowportudp="1194"
allowporttcptoip="7000"
whitelist="82.225.**.** 81.56.**.** 81.57.**.**"
blacklist="74.52.74.** 213.23.175.** 81.2.210.** 60.242.109.**"
 
load () {
  #echo "Loading kernel modules..."
  #$modprobe ip_tables
  #$modprobe ip_conntrack
  #$modprobe iptable_filter
  #$modprobe ipt_state
  #echo "Kernel modules loaded."
 
    echo "Loading rules..."
    $iptables -P FORWARD DROP
    $iptables -P INPUT DROP
    $iptables -N blacklist
    $iptables -A INPUT -i eth0 -j blacklist
 
    for i in $allowporttcp
      do
      $iptables -A INPUT -p tcp -m tcp --destination-port $i -j ACCEPT
      echo "Allow port : $i/tcp"
    done
 
    for i in $allowportudp
      do
      $iptables -A INPUT -p udp -m udp --destination-port $i -j ACCEPT
      echo "Allow port : $i/udp"
    done
 
    for i in $allowporttcptoip
      do
      for j in $whitelist
	do
	$iptables -A INPUT -p tcp -m tcp --destination-port $i -s $j -j ACCEPT
	echo "Allow port : $i/tcp for $j"
      done
    done
 
    for i in $blacklist
      do
      $iptables -s $i -j DROP -A blacklist
      echo "$i blacklisted"
    done
 
    for i in /proc/sys/net/ipv4/conf/*/rp_filter;
      do
      echo 1 > $i
      echo "1 > $i"
    done
    $iptables -A INPUT -p icmp -j ACCEPT
    $iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
    $iptables -A INPUT -s 127.0.0.1 -j ACCEPT
  echo "Rules loaded."
}
 
blacklist () {
    $iptables -L blacklist -n
    $iptables -L blacklist
}
 
flush () {
    echo "Flushing rules..."
    $iptables -F
    $iptables -X
    $iptables -t mangle -F
    $iptables -t mangle -X
    $iptables -P INPUT ACCEPT
    $iptables -P FORWARD ACCEPT
    $iptables -P OUTPUT ACCEPT
    echo "Rules flushed."
}
 
case "$1" in
    start|restart)
	flush
	load
	;;
    stop)
	flush
	;;
    blacklist)
	blacklist
	;;
    *)
	echo "usage: start|stop|restart|blacklist."
	;;
esac
exit 0

Utilisation

iptables.sh start|stop|restart|blacklist

BASH Comment convertir du flac en mp3

Voila un petit script avec rien de révolutionnaire qui permet de convertir tout un répertoire de fichier au format flac en mp3

Les dépendances

sudo apt-get install id3v2 flac lame

Le script flac2mp3.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash                                                                                                                                                                         
output_dir="/data/sda1/music/CONVERTING_OUTPUT/$1"
lame_opts="--vbr-new -V 2 -b 128 -B 256"
flac_args="--silent -cd"
 
if [ ! -d "$output_dir" ]; then
    mkdir "$output_dir"
    echo "create dir: $output_dir"
fi
 
for file in *.flac
do
    ARTIST=`metaflac "$file" --show-tag=ARTIST | sed s/.*=//g`
    TITLE=`metaflac "$file" --show-tag=TITLE | sed s/.*=//g`
    ALBUM=`metaflac "$file" --show-tag=ALBUM | sed s/.*=//g`
    GENRE=`metaflac "$file" --show-tag=GENRE | sed s/.*=//g`
    TRACKNUMBER=`metaflac "$file" --show-tag=TRACKNUMBER | sed s/.*=//g`
    DATE=`metaflac "$file" --show-tag=DATE | sed s/.*=//g`
    flac $flac_args "$file" |lame $lame_opts - "$output_dir/${file%.flac}.mp3"
    id3v2 -t "$TITLE" -T "$TRACKNUMBER" -a "$ARTIST" -A "$ALBUM" -g "$GENRE" -y "$DATE" "$output_dir/${file%.flac}.mp3"
done

BASH Comment supprimer des repertoires vide

Une question simple avec une réponse tout aussi simple, comment qu’on fais pour virer un nombre N de répertoire vide sans devoir faire un ‘rm -rf’ a la main pour chaque répertoire.

Le find qui sert a supprimer tous les rpertoires vide d’un repertoire

find . -maxdepth 1 -type d -empty -exec sh -c 'rm -rf "{}" && echo "{}" deleted' \;

Je crée des répertoires bidon pour les tests :p

hio@fantasy:~/test$ mkdir {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,notemptydir} 
hio@fantasy:~/test$ echo maisblu > notemptydir/testfile
hio@fantasy:~/test$ ls -l
total 88
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 0
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 1
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 10
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 11
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 12
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 13
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 14
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 15
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 16
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 17
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 18
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 19
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 2
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 20
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 3
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 4
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 5
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 6
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 7
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 8
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 9
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 notemptydir

On execute le find ^^

 
hio@fantasy:~/test$  find . -maxdepth 1 -type d -empty -exec sh -c 'rm -rf "{}" && echo "{}" deleted' \;
./16 deleted
./10 deleted
./14 deleted
./15 deleted
./4 deleted
./17 deleted
./19 deleted
./2 deleted
./1 deleted
./7 deleted
./13 deleted
./3 deleted
./20 deleted
./12 deleted
./0 deleted
./18 deleted
./6 deleted
./8 deleted
./11 deleted
./5 deleted
./9 deleted
hio@fantasy:~/test$ ls -l
total 4
drwxr-xr-x 2 hio hio 4096 2009-06-15 22:09 notemptydir

Voila rien de bien sorcier ^^