Table des matières
ZoneMinder: mise à jour pour la version 1.28
On a déjà vu la procédure d'installation pour la version “1.27
” par là, et c'est la même chose, sauf quelques détails…
~~READMORE~~
# cd /usr/local/src
Le source:
# wget https://github.com/ZoneMinder/ZoneMinder/archive/v1.28.1.tar.gz # tar xvzf v1.28.1.tar.gz
# cd ZoneMinder-1.28.1/ # ln -s distros/debian
# dpkg-checkbuilddeps
Là, ça me dit que des dépendances sont manquantes: je les installe. Exemple:
# aptitude search libvlccore-dev ... etc ...
Maintenant que toutes les dépendances sont là, j'ai eu un problème sur l'étape suivante: la compilation.
Il semblerait que le patch là “./debian/patches/01_vendor-perl.diff
” soit inutile.
Donc je le désactive comme ceci:
# sed -i -e '/01_vendor-perl.diff/d' ./debian/patches/series
Maintenant, ça devrait compiler.
# dpkg-buildpackage
Avant d'installer, une petite dépendance est encore manquante:
# aptitude install libexpect-perl liburi-encode-perl
Maintenant, on peut installer:
# cd ..
Virer la version actuellement en service:
# dpkg -r zoneminder
(en laissant la configuration en place bien sûr…)
Installer la nouvelle:
# dpkg -i zoneminder_1.26.5-1_amd64.deb # aptitude install # dpkg-reconfigure zoneminder
A part quelques petits warnings et autres packages récalcitrant, aucun problème grave a signaler.
Voila.
Boucle Event en Perl
En Perl, je vais proposer un simple exemple pour utiliser le module "AnyEvent".
Ce module permet de créer une boucle d'Event…
En C, c'est "libev" qui est (toujours?) utilisé…
Cette manière de programmer est parfois obligatoire pour ajouter des fonctionnalités a un framework , un peu comme ajouter des méthodes à un objet.
On n'a pas a savoir comment l'objet fonctionne, et on a juste a y insérer ses petites fonctionnalités dedans.
Dans d'autres situations, c'est pour avoir un programme qui ne bloque pas sur des traitements “long”… DNS , Socket , …
~~READMORE~~
#!/usr/bin/env perl use strict; use warnings; use AnyEvent; # Exemple: (libev) Event en Perl # # Intro: http://search.cpan.org/~mlehmann/AnyEvent-7.08/lib/AnyEvent/Intro.pod # Source: http://search.cpan.org/~mlehmann/AnyEvent/lib/AnyEvent.pm $|=1; my $count = 0; # cv -> Condition Variable my $cv; # Créer un event sur timer, execute 1 fois my $w1 = AE::timer( 3, 0, sub { print "Event: hello 3 (once)\n"; } ); # Créer un event sur timer, execute toutes les secondes my $w2 = AE::timer( 3, 1, sub { print "Event: hello 3 (for each second)\n"; # si une condition est atteinte, alors quitter la boucle event. $cv->send('hello','world',AE::now) if (++$count%5)==0; } ); # Un event associe a un signal my $w3 = AE::signal USR1 => sub { print STDERR "Signal: coucou\n"; }; # Un event associe au signal ^C my $w4 = AE::signal INT => sub { die "break"; }; # Eventuellement, autre chose a faire... #my $w5 = AE::idle( sub { sleep(1); } ); print "Waiting 3 secondes before first events...\n"; foreach ( 0 .. 2 ) { # Créer la "Condition Variable" # (la recreer a chaque fois que la Condition Variable est devenu vrai) $cv = AE::cv; # Attendre le "send" associe a ce "cv" my @bla = $cv->recv; # <-- event loop # On a recupere les parametres du "send" print "recv: " , join('|',@bla), "( $count )\n"; } undef $cv; #undef $w5; undef $w4; undef $w3; undef $w2; undef $w1; print "Fin.\n"; # -------------------------- # EOF
Résultat:
Waiting 3 secondes before first events... Event: hello 3 (once) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) recv: hello|world|1403760002.88818( 5 ) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) recv: hello|world|1403760007.8882( 10 ) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) Event: hello 3 (for each second) recv: hello|world|1403760012.8882( 15 ) Fin.
Xen PCI Passthrough
Xen avec le toolstack “XL
” (qui vient avec Debian Jessie
par défaut).
Le but est d'importer une carte PCI dans une machine virtuelle.
Dans un premier exemple, c'est une carte WIFI.
~~READMORE~~
"hostapd" et entropie
Lorsqu'on a un système qui manque de données aléatoire, on peut installer le service “haveged” .
Exemple, avec mon “hostapd” qui râle:
... random: Only 17/20 bytes of strong random data available from /dev/random random: Not enough entropy pool available for secure operations WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects ...
# cat /proc/sys/kernel/random/entropy_avail 367
Une solution:
# aptitude install haveged
# cat /proc/sys/kernel/random/entropy_avail 1913
Voila.
<< Billets récents | Anciens billets >>
<html>
</html>Historique du blog<html>
</html> <html><table style=“border:0px ; empty-cells:hide” border=0 width=“100%”> <tr><td style=“border:0px; text-align: right”> <a href=“https://twitter.com/thierry_jaouen” class=“twitter-follow-button” data-show-count=“false” data-lang=“fr” data-size=“large”>Suivre @thierry_jaouen</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=“platform.twitter.com/widgets.js”;fjs.parentNode.insertBefore(js,fjs);}}(document,“script”,“twitter-wjs”);</script> </td> <td style=“border:0px; text-align: right”> <a title=“RSS Feed” href=“/feed.php”><img border=“0” src=“/pub/img/icon-feed-25.png”></a> </td></tr> </table></html>