Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


< 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 >

lundi 13 septembre 2010

PostgreSQL 8.4 / PostGIS 1.5.1 / PgRouting 1.0.3/ Osm2PgRouting sous Debian Lenny

Le but ici est d'installer le triplet PostgreSQL/PostGIS/PgRouting sous une Debian Lenny.

REMARQUE: Les paquets .deb fournis sous Debian Lenny n'étant pas très à jour, notamment pour PostGIS (comme pour des projets pour ffmpeg ou mplayer), et au lieu de me tourner vers les backports de Debian, je propose ici de recompiler les sources afin de valider une installation assez récente.

de recompiler

0. Création d'un domU Debian Lenny sous Xen (facultatif)

Cette section est utile uniquement pour avoir une Debian Lenny vierge afin de valider l'installation. Si vous possédez une Debian Lenny fraîchement installé, vous pouvez passer à la prochaine section. Les tests sont ici effectués sur une machine minimale avec juste 512M de RAM

Fichier xen-tools.conf

melina:~# grep -vE '^(#|$)' /etc/xen-tools/xen-tools.conf
lvm = xen-vm
install-method = debootstrap
size   = 20Gb      # Disk image size.
memory = 512Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = lenny     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway   = 192.168.2.253
netmask   = 255.255.255.0
broadcast = 192.168.2.255
passwd = 1
accounts = 1
kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`
arch = i386
mirror = http://ftp.us.debian.org/debian/
ext3_options   = noatime,nodiratime,errors=remount-ro
ext2_options   = noatime,nodiratime,errors=remount-ro
xfs_options    = defaults
reiser_options = defaults
serial_device = hvc0
disk_device = xvda
output    = /etc/xen/machines
extension = .cfg

Création du domU

melina:~# xen-create-image --force --hostname=melina-xen08 --ip=192.168.2.233 \
--mac=00:e3:ad:76:c7:8b --config=/etc/xen-tools/xen-tools.conf --role=udev

General Information
--------------------
Hostname       :  melina-xen08
Distribution   :  lenny
Partitions     :  swap            128Mb (swap)
                  /               20Gb  (ext3)
Image type     :  full
Memory size    :  512Mb
Kernel path    :  /boot/vmlinuz-2.6.32-bpo.5-xen-686
Initrd path    :  /boot/initrd.img-2.6.32-bpo.5-xen-686

Networking Information
----------------------
IP Address 1   : 192.168.2.233 [MAC: 00:e3:ad:76:c7:8b]
Netmask        : 255.255.255.0
Broadcast      : 192.168.2.255
Gateway        : 192.168.2.253

Removing /dev/xen-vm/melina-xen08-swap - since we're forcing the install
Removing /dev/xen-vm/melina-xen08-disk - since we're forcing the install

Creating swap on /dev/xen-vm/melina-xen08-swap
Done

Creating ext3 filesystem on /dev/xen-vm/melina-xen08-disk
Done
Installation method: debootstrap
Done

Running hooks
Done

Role: udev
	File: /etc/xen-tools/role.d/udev
Role script completed.

Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
All done


Logfile produced at:
	 /var/log/xen-tools/melina-xen08.log

Démarrage du domU

On démarre en mode console
xm create /etc/xen/machines/melina-xen08.cfg -c

1. Répertoire pour les sources et paquets .deb requis

C'est dans le répertoire /opt/sources_gis que je mettrais les sources téléchargées
melina-xen08:~# mkdir -pv /opt/sources_gis
mkdir: création du répertoire `/opt/sources_gis'
apt-get install bzip2 gcc  bison flex libreadline5-dev zlib1g-dev make g++ libbz2-dev python patch \
cmake libxml2-dev libexpat1-dev subversion-tools
avec
  1. libexpat1-dev, subversion-tools: pour la compilation de osm2pgrouting
  2. libxml2-dev pour la compilation de PostGIS

2. PostgreSQL 8.4.4

cd /opt/sources_gis/
wget http://wwwmaster.postgresql.org/redir/357/h/source/v8.4.4/postgresql-8.4.4.tar.bz2
tar xvjf postgresql-8.4.4.tar.bz2 
cd postgresql-8.4.4
./configure --prefix=/opt/postgresql/8.4 && make && make install
echo /opt/postgresql/8.4/lib >> /etc/ld.so.conf.d/postgresql-8.4.conf

2. Geos 3.2

cd /opt/sources_gis/
wget http://download.osgeo.org/geos/geos-3.2.2.tar.bz2
tar xvjf geos-3.2.2.tar.bz2
cd geos-3.2.2
./configure --prefix=/opt/postgresql/8.4 && make && make install

3. Proj 4.7.0

cd /opt/sources_gis/
wget http://download.osgeo.org/proj/proj-4.7.0.tar.gz
tar xvzf proj-4.7.0.tar.gz 
cd proj-4.7.0
./configure --prefix=/opt/postgresql/8.4 && make && make install

4. PostGIS 1.5.1

cd /opt/sources_gis
wget http://postgis.org/download/postgis-1.5.1.tar.gz
tar xvzf postgis-1.5.1.tar.gz 
cd postgis-1.5.1
./configure --with-pgconfig=/opt/postgresql/8.4/bin/pg_config \
--with-geosconfig=/opt/postgresql/8.4/bin/geos-config --with-projdir=/opt/postgresql/8.4
make
make install
Remarque: Ici on aurait pu simplifier les options pour la compilation (configure) en mettant à jour la variable PATH
PATH=/opt/postgresql/8.4/bin:$PATH
ce qui éviterait de passer les différentes options à configure

5. PgRouting 1.03

5.1 GAUL

 cd /opt/sources_gis
wget http://prdownloads.sourceforge.net/gaul/gaul-devel-0.1849-0.tar.gz?download
 tar xvzf gaul-devel-0.1849-0.tar.gz\?download 
 cd gaul-devel-0.1849-0
 ./configure --enable-slang=no
 make && make install

5.2 Cmake et BOOST

cd /opt/sources_gis
wget http://kent.dl.sourceforge.net/sourceforge/boost/boost_1_33_1.tar.bz2
tar xvjf boost_1_33_1.tar.bz2 
cd boost_1_33_1
./configure
make
make install

5.3 CGAL

Il faut depuis un navigateur Web récupérer l'archive https://gforge.inria.fr/frs/download.php/10694/CGAL-3.3.1.tar.gz puis la copier sur la machine (par scp par exemple...)
cd /opt/sources_gis
tar xvzf CGAL-3.3.1.tar.gz
cd CGAL-3.3.1
./install_cgal --prefix=/usr/local/cgal --with-boost=n --without-autofind -ni /usr/bin/g++

5.4 PGROUTING

Pour la version 8.4 de PostgreSQL, il est nécessaire de patcher pgRouting. J'ai fait un patch (assez rapide pas trop soigné) disponible à http://www.davidgis.fr/download/patch-postgresql-8.4.pgrouting
cd /opt/sources_gis

wget http://files.postlbs.org/pgrouting/source/pgRouting-1.03.tgz
wget http://www.davidgis.fr/download/patch-postgresql-8.4.pgrouting
tar xvzf pgRouting-1.03.tgz
cd pgrouting
 patch -N -p1 < ../patch-postgresql-8.4.pgrouting 
patching file extra/driving_distance/src/alpha.c
patching file extra/driving_distance/src/drivedist.c
patching file extra/driving_distance/src/alpha.c
Reversed (or previously applied) patch detected!  Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file extra/driving_distance/src/alpha.c.rej
patching file core/src/dijkstra.c
patching file core/src/astar.c
patching file core/src/shooting_star.c
ln  -s /usr/local/include/boost-1_33_1/boost /usr/include/boost

cmake -DWITH_TSP=ON -DWITH_DD=ON -DPOSTGRESQL_LIBRARIES=/opt/postgresql/8.4/lib/libpq.so \
-DPOSTGRESQL_INCLUDE_DIR=/opt/postgresql/8.4/include/server \
-DBoost_INCLUDE_DIR=/usr/include/boost/ \
-DCGAL_INCLUDE_DIR=/usr/local/cgal/include -DCGAL_LIBRARIES=/usr/local/cgal/lib/libCGAL.so  \
-DGAUL_INCLUDE_DIR=/usr/local/include -DGAUL_LIBRARIES=/usr/local/lib/libgaul.so
.so  -DGAUL_UTIL_LIBRARIES=/usr/local/lib/libgaul_util.so && make
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
Boost headers were found here: /usr/local/include/boost-1_33_1/boost/
Output directory for libraries is set to /opt/postgresql/8.4/lib
-- Found PGROUTING_CORE core: /opt/sources_gis/pgrouting/core/src
Installation directory for libraries is set to /opt/postgresql/8.4/lib and for SQL files is set to /usr/share/postlbs
Installation directory for libraries is set to /opt/postgresql/8.4/lib
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/sources_gis/pgrouting
Scanning dependencies of target routing_tsp
[  8%] Building C object extra/tsp/src/CMakeFiles/routing_tsp.dir/tsp.o
[ 16%] Building CXX object extra/tsp/src/CMakeFiles/routing_tsp.dir/tsp_solver.o
Linking CXX shared library ../../../lib/librouting_tsp.so
[ 16%] Built target routing_tsp
Scanning dependencies of target routing_dd
[ 25%] Building C object extra/driving_distance/src/CMakeFiles/routing_dd.dir/alpha.o
[ 33%] Building CXX object extra/driving_distance/src/CMakeFiles/routing_dd.dir/alpha_drivedist.o
[ 41%] Building CXX object extra/driving_distance/src/CMakeFiles/routing_dd.dir/boost_drivedist.o
[ 50%] Building C object extra/driving_distance/src/CMakeFiles/routing_dd.dir/drivedist.o
Linking CXX shared library ../../../lib/librouting_dd.so
[ 50%] Built target routing_dd
Scanning dependencies of target routing
[ 58%] Building C object core/src/CMakeFiles/routing.dir/dijkstra.o
[ 66%] Building C object core/src/CMakeFiles/routing.dir/astar.o
[ 75%] Building C object core/src/CMakeFiles/routing.dir/shooting_star.o
[ 83%] Building CXX object core/src/CMakeFiles/routing.dir/boost_wrapper.o
[ 91%] Building CXX object core/src/CMakeFiles/routing.dir/astar_boost_wrapper.o
[100%] Building CXX object core/src/CMakeFiles/routing.dir/shooting_star_boost_wrapper.o
Linking CXX shared library ../../lib/librouting.so
[100%] Built target routing
melina-xen08:/opt/sources_gis/pgrouting# echo /usr/local/cgal/lib/ >> /etc/ld.so.conf.d/cgal.conf
melina-xen08:/opt/sources_gis/pgrouting# ldconfig
melina-xen08:/opt/sources_gis/pgrouting# make install
[ 16%] Built target routing_tsp
[ 50%] Built target routing_dd
[100%] Built target routing
Install the project...
-- Install configuration: ""
-- Installing: /opt/postgresql/8.4/lib/librouting.so
-- Up-to-date: /usr/share/postlbs/routing_core.sql
-- Up-to-date: /usr/share/postlbs/routing_core_wrappers.sql
-- Up-to-date: /usr/share/postlbs/routing_topology.sql
-- Installing: /opt/postgresql/8.4/lib/librouting_tsp.so
-- Up-to-date: /usr/share/postlbs/routing_tsp.sql
-- Up-to-date: /usr/share/postlbs/routing_tsp_wrappers.sql
-- Installing: /opt/postgresql/8.4/lib/librouting_dd.so
-- Up-to-date: /usr/share/postlbs/routing_dd.sql
-- Up-to-date: /usr/share/postlbs/routing_dd_wrappers.sql

5.5 OSM2PGROUTING

Ici on pourra consulter le détail de cet outil à http://pgrouting.postlbs.org/wiki/tools/osm2pgrouting
cd /opt/sources_gis/
svn checkout http://pgrouting.postlbs.org/svn/pgrouting/tools/osm2pgrouting/trunk osm2pgrouting
cd osm2pgrouting/
Il faut ensuite adapter le script Makefile. Voici un petit facile patch pour ce Makefile
melina-xen13:/opt/sources_gis/osm2pgrouting# cat ../patch.Makefile.osm2pgrouting 
--- osm2pgrouting/Makefile    2010-09-17 22:39:46.000000000 +0000
+++ osm2pgrouting_orig/Makefile    2010-09-17 22:39:16.000000000 +0000
@@ -1,17 +1,18 @@
 CC = g++
+POSTGRESQL_DIR = /opt/postgresql/8.4
 
 SRC = src/Export2DB.cpp src/math_functions.cpp src/Node.cpp src/OSMDocumentParserCallback.cpp src/Way.cpp src/OSMDocument.cpp src/Type.cpp src/Class.cpp src/Configuration.cpp src/ConfigurationParserCallback.cpp
 
 DEPS = src/XMLParser.cpp
 
-INC = -I./ -Isrc -I/usr/include/pgsql -I/usr/include/postgresql
+INC = -I./ -Isrc -I$(POSTGRESQL_DIR)/include -I/usr/include/boost
 
 MAIN = src/osm2pgrouting.cpp
 
 all:
     $(CC) -c $(SRC) $(INC) -ggdb3
     $(CC) -c $(DEPS) $(INC) -ggdb3
-    $(CC) -o osm2pgrouting $(MAIN) *.o $(INC) -lexpat -ggdb3 -lpq
+    $(CC) -o osm2pgrouting $(MAIN) *.o $(INC) -lexpat -ggdb3 -L$(POSTGRESQL_DIR)/lib -lpq
     rm *.o
 clean:
     rm osm2pgrouting
On modifie directement le Makefile ou on applique le patch
patch -p1 < ../patch.Makefile.osm2pgrouting
make

6. Mise en place de la base de données et tests

6.1 Création de l'utilisateur postgres

adduser postgres
On ajoute ensuite ces deux lignes dans le fichier /home/postgres/.bashrc
export PATH=/opt/postgresql/8.4/bin:$PATH
export PGDATA=/opt/postgresql/data

Création de la base de données testgis

melina-xen08:~# chmod 777 -R /opt/postgresql/
melina-xen08:~# su postgres
postgres@melina-xen08:/root$ initdb -A trust
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale fr_FR.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "french".

creating directory /opt/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 28MB
creating configuration files ... ok
creating template1 database in /opt/postgresql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

Success. You can now start the database server using:

    postgres -D /opt/postgresql/data
or
    pg_ctl -D /opt/postgresql/data -l logfile start
On démarre le serveur
postgres@melina-xen08:~$ pg_ctl start
server starting
postgres@melina-xen08:~$ LOG:  database system was shut down at 2010-09-13 13:54:50 UTC
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

postgres@melina-xen08:~$ 
On crée la base
createdb testgis

6.3 Ajouts des fonctionnalités de PostGIS et de PgRouting

createlang plpgsql testgis
psql -d testgis -f /opt/postgresql/8.4/share/contrib/postgis-1.5/postgis.sql
psql -d testgis -f /opt/postgresql/8.4/share/contrib/postgis-1.5/spatial_ref_sys.sql
psql  -d testgis -f /usr/share/postlbs/routing_core.sql
psql  -d testgis -f /usr/share/postlbs/routing_core_wrappers.sql
psql -d testgis -f /usr/share/postlbs/routing_tsp.sql
psql -d testgis -f /usr/share/postlbs/routing_tsp_wrappers.sql 
psql -d testgis -f /usr/share/postlbs/routing_dd.sql 
psql -d testgis -f /usr/share/postlbs/routing_dd_wrappers.sql 
psql -d testgis -f /usr/share/postlbs/routing_topology.sql

6.4 Tutoriel intéressant

Pour les quelques tests nécessaires, je vous redirige vers un tutoriel assez bien fait http://www.utdallas.edu/~ama054000/rt_tutorial.html

vendredi 10 septembre 2010

Copier à froid un fichier sur un domU (LVM) tournant sous Windows XP ou Windows7

Objectifs

Mon but ici est de pouvoir copier un fichier sur un domU Windows XP ou Windows 7. Ici
  1. le domU est melina-xen10.
  2. le dom0 est melina

Le domU est sous l'OS Windows 7 avec le système sous un volume logique (LVM). Les manipulations fonctionnent aussi pour Windows XP. Je ne ferais pas ici de "snapshot à la LVM "car ce n'est pas vraiment l'idée de ce billet mais celà n'empêche pas d'y recourir dans le cadre d'une politique de sauvegarde de domU

Pré-requis

Depuis le dom0, on installe deux petits paquets bien utils pour la suite
apt-get install kpartx ntfs-3g
ntfs-3g tout le monde connaît.

Pour kpartx, voir plus loin dans ce billet

On jette un petite coup d'oeil sur le bureau du domU avant extinction


Bureau du domU avant extinction
Ensuite on éteint le domU.

Manipulations

  • On va utiliser kpartx. Ce dernier permet d'accèder à la table des partitions d'un volume logique et de créer les divers fichiers de périphérique associés à cette table.

    1. option -a pour référencer la table des partitions du volume logique au système du dom0
    2. option -v pour le mode verbeux
    melina:~# kpartx -va /dev/xen-vm/melina-xen10-disk-1
    add map xen--vm-melina--xen10--disk--1p1 (254:19): 0 204800 linear /dev/xen-vm/melina-xen10-disk-1 2048
    add map xen--vm-melina--xen10--disk--1p2 (254:20): 0 41734144 linear /dev/xen-vm/melina-xen10-disk-1 206848

    Les diverses paritions offertes et découvertes par kpartx dans le volume logique en question sont suffixés pX où X est le numéro de la Xème partition trouvé dans le volume logique

    Un petit check pour la route

    melina:~# ls -l /dev/mapper/xen--vm-melina--xen10--disk--*
    brw-rw---- 1 root disk 254, 16 sep 10 13:18 /dev/mapper/xen--vm-melina--xen10--disk--1
    brw-rw---- 1 root disk 254, 19 sep 10 13:19 /dev/mapper/xen--vm-melina--xen10--disk--1p1
    brw-rw---- 1 root disk 254, 20 sep 10 13:19 /dev/mapper/xen--vm-melina--xen10--disk--1p2
  • C'est /dev/mapper/xen--vm-melina--xen10--disk--1p2 qui va nous intéresser On la mounte
    melina:~# mount -t ntfs-3g /dev/mapper/xen--vm-melina--xen10--disk--1p2 /storage/montage/
    On checke
    melina:~# mount
    /dev/sda1 on / type ext3 (rw,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    procbususb on /proc/bus/usb type usbfs (rw)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    fusectl on /sys/fs/fuse/connections type fusectl (rw)
    /dev/sda2 on /home type ext3 (rw)
    /dev/sda3 on /opt type ext3 (rw)
    /dev/sda5 on /storage type ext3 (rw)
    none on /proc/xen type xenfs (rw)
    /dev/mapper/xen--vm-melina--xen10--disk--1p2 on /storage/montage type fuseblk (rw,allow_other,blksize=4096)
  • On copie un fichier pour la route
    melina:~# du -hs /storage/Denise_Milani/blue_bikini.mov
    101M	/storage/Denise_Milani/blue_bikini.mov
    melina:~# cp /storage/Denise_Milani/blue_bikini.mov /storage/montage/Users/david/Desktop/
  • On démounte le tout et déréférence les périphériques du système du dom0 (option d de kpartx)
    melina:~# umount /storage/montage/
    melina:~# kpartx -vd /dev/xen-vm/melina-xen10-disk-1 
    del devmap : xen--vm-melina--xen10--disk--1p2
    del devmap : xen--vm-melina--xen10--disk--1p1
    
  • On redémarre le domU pour vérifier

    Bureau du domU Le fichier blue_bikini.mov a été copié

mardi 7 septembre 2010

Retour à Castelnau-Le-Lez / Détente le long du Lez

Profitant de cette journée de mes vacances, ce lundi (hier), j'en ai profité pour refaire un tour sur Castelnau-Le-Lez, histoire de faire un petit retour, voir si le quartier avait changé.

A mon arrivée, j'ai pu constaté quelques travaux en cours, notamment

  1. devant la mairie où il y a un immeuble en construction à la place de l'ancien parking.
  2. le long du Lez où apparement les routes sont en rénovation.
Au bar de la place où je me suis arrêté pour prendre un rafraîchessement on retrouve toujours les mêmes de pute. Ca ca ne change pas. J'y ai pas porté attention. "Oh mais c'est toi?"..."On m'a dit que..."...J'en passe et des meilleurs, le genre d'allussions à des gens à qui t'a envie de leur foutre une raclée quand tu croises leur tronche.

Aujourd'hui j'ai sincèrement autre chose à foutre que de répondre à ce genre de questions à la con. J'ai même pas essayé d'engager la conversation. Après une heure de route, on essait de venir se rafraichir dans un lieu et il faut toujours qu'il y est un ??? pour venir te ....Enfin j'ai pu mon café et je suis parti

En passant, je me suis aussi arrêté dans le parc situé dans mon ancienne résidence.

En fumant une cigarrette, j'ai pu remarqué un petite vieux en train de regarder. Il faisait semblant (mimer) de donner à manger à l'oiseau qui était dans la cage situé sur son balcon, tout en gardant un oeil sur moi bien-sûr. A sa gueule, j'ai bien reconnu sa salle face. Mais c'est sûrement pas lui que j'étais venu voir. Non je voulais voir la gueule de l'autre fils de pute dont j'aurais du refaire le portrait en 2007. Au pire s'il est mort (vu son état déjà avancé à l'époque), tant mieux :)

Avant de rentrer, je me suis un peu promené le long du Lez, c'était un moment de détente absolu...J'étais venu en priorité pour me détendre comme je le faisais à l'époque à cet endroit. La magie du lieu a toujours opéré et a encore opéré :). Je ne connais meilleur endroit pour venir se ressourcer que celui-là. En face de moi, un canard perché sur la barricade en bois, terminait sa toillette en tentant de se sécher un peu. Sinon les bons moment:
  1. Croiser quelques visages et entamer la discussion avec des gens pour qui j'ai gardé un bon souvenir et un bon contact.
  2. prendre des nouvelles de personnes qui m'ont laissé un bon souvenir mais sans plus

Sur ces belles pensées, je suis ensuite rentré à Avignon. Posé à un café, j'ai un peu discuté avec un habitué quelques minutes. On discutait de tout et de rien (politique, économié etc...). Enfin bref, une discussion normale avec quelqu"un de normal sans plus

J'ai croisé un visage que je n'avais pas vu depuis un moment d'ailleurs (c'est surtout Simba à qui ca a fait plaisir).

Voili voilou, ma soirée je l'ai passé à regarder les premiers épisodes de la saison 9 de SmallVille avant que les pluies torrentielles de lundi/mardi soir ne captent mon attention.

dimanche 29 août 2010

FFmpeg: Performance de conversion pour WebM et nombre de CPU

On dispose pour ce test

  1. d'une petite machine avec Processeur Intel Core 2 Quad Q8200
  2. d'une version de ffmpeg compilée avec WebM

Test normal

On lance dans un script shell le contenu
begin_times=`date '+%s'`;
time /opt/multimedia-prod/bin/ffmpeg -y -i janadefi-daywith03.wmv -f webm -vcodec libvpx janadefi-daywith03.webm;
end_times=`date '+%s'`;duration_times=`expr $end_times - $begin_times`;
echo "Ecoulement approximatif de $duration_times secondes..."
On exécute le script. Pendant la converson, on lance depuis un autre shell
top -p $(pidof ffmpeg)
top - 16:45:13 up 6 days, 16:48,  2 users,  load average: 0.89, 0.61, 0.48
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.3%us,  0.7%sy,  0.3%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3115472k total,  3022124k used,    93348k free,   252360k buffers
Swap:  9124880k total,   137516k used,  8987364k free,  1991428k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
28815 root      20   0 42496  19m 3136 R  100  0.7   1:51.73 ffmpeg           
Ce qui se solde par
FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
  built on Aug 16 2010 21:38:36 with gcc 4.3.2
  configuration: --prefix=/opt/multimedia --enable-libvpx --enable-libdirac --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libfaad --enable-libfaadbin --enable-libfaac --enable-gpl --enable-nonfree --enable-pthreads --extra-cflags='-I$TOOLS_MULTIMEDIA_DIR/include/ -I$TOOLS_MULTIMEDIA_DIR/include/a52dec/ -I$TOOLS_MULTIMEDIA_DIR/include/lame/ -I$TOOLS_MULTIMEDIA_DIR/include/ -I$TOOLS_MULTIMEDIA_DIR/include/ao -I$TOOLS_MULTIMEDIA_DIR/include/libyasm -I$TOOLS_MULTIMEDIA_DIR/include/ogg -I$TOOLS_MULTIMEDIA_DIR/include/SDL -I$TOOLS_MULTIMEDIA_DIR/include/speex -I$TOOLS_MULTIMEDIA_DIR/include/vorbis -I$TOOLS_MULTIMEDIA_DIR/include/theora -I$TOOLS_MULTIMEDIA_DIR/include/schroedinger-1.0 -I$TOOLS_MULTIMEDIA_DIR/include/dirac -I$TOOLS_MULTIMEDIA_DIR/include/opencore-amrnb/ -I$TOOLS_MULTIMEDIA_DIR/include/opencore-amrwb/ -I/opt/multimedia/include/vpx' --extra-ldflags=-L/opt/multimedia/lib
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0
[wmv3 @ 0x92b8760]Extra data: 8 bits left, value: 0

Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.97 (30000/1001)
Input #0, asf, from 'janadefi-daywith03.wmv':
  Metadata:
    WM/ToolName     : Flip4Mac WMV Export Component for QuickTime (Mac)
    WM/ToolVersion  : 2326馀᐀둷櫴櫰券떶櫰嘘㤲ꦠꦰ흎착隨ք櫰
    title           : 
    author          : 
    copyright       : 
    comment         : 
  Duration: 00:06:08.03, start: 5.000000, bitrate: 3999 kb/s
    Stream #0.0: Audio: wmav2, 44100 Hz, 2 channels, s16, 64 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 640x480, 29.97 tbr, 1k tbn, 1k tbc
[libvpx @ 0x92ba250]v0.9.1
[wmv3 @ 0x92b8760]Extra data: 8 bits left, value: 0
Output #0, webm, to 'janadefi-daywith03.webm':
  Metadata:
    encoder         : Lavf52.64.2
    Stream #0.0: Video: libvpx, yuv420p, 640x480, q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
    Stream #0.1: Audio: libvorbis, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
frame=11035 fps= 29 q=0.0 Lsize=   18911kB time=368.20 bitrate= 420.8kbits/s    
video:15810kB audio:2881kB global headers:3kB muxing overhead 1.160188%

real	6m26.927s
user	6m26.480s
sys	0m0.360s
Ecoulement approximatif de 387 secondes...

Test avec nombre cpu=4

Cette fois-ci, on précise le paramètre threads fixé à 4
begin_times=`date '+%s'`;
time /opt/multimedia-prod/bin/ffmpeg -y -i janadefi-daywith03.wmv -threads 4 -f webm -vcodec libvpx janadefi-daywith03.webm;
end_times=`date '+%s'`;duration_times
`expr $end_times - $begin_times`;
echo "Ecoulement approximatif de $duration_times secondes..."
On surveille la répartition
root@monroe:~# top -p $(pidof ffmpeg)

top - 16:57:51 up 6 days, 17:01,  2 users,  load average: 1.28, 0.71, 0.56
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
Cpu0  : 19.3%us,  4.1%sy,  0.0%ni, 76.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 21.8%us,  0.7%sy,  0.0%ni, 77.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 33.5%us,  1.9%sy,  0.0%ni, 64.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  : 74.5%us,  1.0%sy,  0.0%ni, 24.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3115472k total,  3017096k used,    98376k free,   254076k buffers
Swap:  9124880k total,   137568k used,  8987312k free,  1985200k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
28942 root      20   0  129m  20m 3164 R  159  0.7   4:14.33 ffmpeg            

On obtient à la fin
FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
  built on Aug 16 2010 21:38:36 with gcc 4.3.2
  configuration: --prefix=/opt/multimedia --enable-libvpx --enable-libdirac --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-libx264 --enable-libxv
d --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libfaad --enable-libfaadbin --enable-libfaac --enable-gpl --enable-nonfree --enable-pthreads --extra-cflags='-I$TOOLS_MULTIME
IA_DIR/include/ -I$TOOLS_MULTIMEDIA_DIR/include/a52dec/ -I$TOOLS_MULTIMEDIA_DIR/include/lame/ -I$TOOLS_MULTIMEDIA_DIR/include/ -I$TOOLS_MULTIMEDIA_DIR/include/ao -I$TOOLS_MULTIMEDIA_DIR/include/libyasm -I$TOO
S_MULTIMEDIA_DIR/include/ogg -I$TOOLS_MULTIMEDIA_DIR/include/SDL -I$TOOLS_MULTIMEDIA_DIR/include/speex -I$TOOLS_MULTIMEDIA_DIR/include/vorbis -I$TOOLS_MULTIMEDIA_DIR/include/theora -I$TOOLS_MULTIMEDIA_DIR/inc
ude/schroedinger-1.0 -I$TOOLS_MULTIMEDIA_DIR/include/dirac -I$TOOLS_MULTIMEDIA_DIR/include/opencore-amrnb/ -I$TOOLS_MULTIMEDIA_DIR/include/opencore-amrwb/ -I/opt/multimedia/include/vpx' --extra-ldflags=-L/opt
multimedia/lib
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0
[wmv3 @ 0x92b8760]Extra data: 8 bits left, value: 0

Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.97 (30000/1001)
Input #0, asf, from 'janadefi-daywith03.wmv':
  Metadata:
    WM/ToolName     : Flip4Mac WMV Export Component for QuickTime (Mac)
    WM/ToolVersion  : 2326馀᐀둷櫴櫰券떶櫰嘘㤲ꦠꦰ흎착隨ք櫰
    title           : 
    author          : 
    copyright       : 
    comment         : 
  Duration: 00:06:08.03, start: 5.000000, bitrate: 3999 kb/s
    Stream #0.0: Audio: wmav2, 44100 Hz, 2 channels, s16, 64 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 640x480, 29.97 tbr, 1k tbn, 1k tbc
[libvpx @ 0x92ba250]v0.9.1
[wmv3 @ 0x92b8760]Extra data: 8 bits left, value: 0
Output #0, webm, to 'janadefi-daywith03.webm':
  Metadata:
    encoder         : Lavf52.64.2
    Stream #0.0: Video: libvpx, yuv420p, 640x480, q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
    Stream #0.1: Audio: libvorbis, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
frame=11035 fps= 42 q=0.0 Lsize=   18917kB time=368.20 bitrate= 420.9kbits/s    
video:15815kB audio:2881kB global headers:3kB muxing overhead 1.159740%

real	4m19.877s
user	6m49.020s
sys	0m19.650s
Ecoulement approximatif de 260 secondes...