Mots-clé : linux

Compilation du serveur JACK

Ouf ! J’ai enfin réussi à compiler une version du serveur JACK 1.9.6.
A chaque fois il me disait qu’il manquait quelque chose, et je devais l’installer.
Voilà comment ça s’est passé : j’ai récupéré la dernière version de JACK, puis je l’ai décompressée et je suis allé dans le répertoire en shell :
cd ~/Bureau/jack-1.9.6
De là, j’ai commencé à essayer de compiler :
> sudo ./waf clean && sudo ./waf configure --alsa
A chaque fois, il y avait des lignes où il me disait « no » au lieu de « yes », par exemple :
Checking for alsa >= 1.0.18 : ok
Checking for libfreebob >= 1.0.0 : no
Checking for libffado >= 1.999.17 : no
Checking for header sndfile.h : no

Alors voici la solution pour la plupart des choses manquantes : il faut installer la version de développement.
Donc (1) demander de chercher parmi tous les packages existants : prenons l’exemple avec sndfile :
sudo apt-cache search sndfile
Et là malheureusement il trouve plein de fichiers. Alors on filtre en précisant qu’on ne veut que du « développement » = « dev » :
sudo apt-cache search sndfile | grep dev
Et là il ne reste plus que deux lignes :

libsndfile1-dev - Development files for libsndfile;
mffm-libsndfilew-dev - wrapper for the libsndfile

Avec ces deux lignes, il faut prendre la plus « logique », ici donc la première, et installer en copiant collant le premier mot, ici « libsndfile1-dev » :
sudo apt-get install libsndfile1-dev

Vous continuez comme ça jusqu’à ce que vous n’ayez plus que des « yes » partout.
Ensuite, il se peut que vous ayez l’erreur :
«Unknown driver "alsa"»

La solution est simple (mais encore une fois il fallait la trouver) : il vous faut lors de la configuration de la compilation, préciser qu’il faut ajouter le driver « alsa » :
sudo ./waf clean && sudo ./waf configure --alsa
Et enfin l’ordre qui devrait fonctionner jusqu’au bout :
sudo ./waf install
Ensuite, peut être que vous êtes dans le même cas que moi à savoir que sous Ubuntu, vous avez installé la version « officielle ». Cette dernière est installée dans /usr/bin :
/usr/bin/jackd
Mais la nouvelle que vous venez tout juste de compiler a peut être été installée ailleurs !
Mettez à jour la liste de tous les fichiers de votre ordinateur :
> sudo updatedb
Et cherchez tous les fichiers « jackd » :

> sudo locate /jackd | grep ckd$ | more
/etc/default/jackd
/home/olivier/Bureau/jack-1.9.6/build/default/linux/jackd
/home/olivier/Téléchargements/jackd
/usr/bin/jackd
/usr/local/bin/jackd
/usr/share/doc/jackd
>

Vous voyez qu’il y en a deux qui semblent identiques. Voyons en détail :

> l /usr/bin/jackd
-rwxr-xr-x 1 root root 23096 2010-02-23 17:48 /usr/bin/jackd
olivier@olivier-laptop:~/Bureau/jack-1.9.6$ l /usr/local/bin/jackd
-rwxr-xr-x 1 root root 18727 2011-01-08 00:26 /usr/local/bin/jackd
>

Eh oui, effectivement, celui que vous avez compilé se trouve dans « /usr/local/bin » et le vieux dans « /usr/bin »
Donc il vous suffira de changer la ligne de commande du JACK Audio Connexion Kit :
/usr/bin/pasuspender -- /usr/local/bin/jackd
Et enfin, halleluja, tout fonctionnera !

Un très grand merci à LinuxMAO où j’ai trouvé cette information.

Enfin tout ça n’est que pour réussir à faire tourner une dernière version du serveur JACK…
C’est marrant avec Linux. Parce qu’on a toujours l’impression que c’est compliqué, mais au final on maitrise tellement mieux la chose que c’est bien plus agréable en fait que sur Windows, où, lorsqu’il arrive quelque chose qui ne fonctionne pas, on ne sait jamais comment le corriger… et pourtant ça fait 17 ans que je suis exclusivement sous Windows !

Ubuntu : installation du serveur JACK : comment faire

Voilà le résumé :

  • Je suis sous Ubuntu 10.04 ;
  • J’ai un piano avec deux prises MIDI (in et out) ;
  • J’ai acheté un adaptateur LogiLink USB Cable pour pouvoir transférer les informations de mon piano à mon PC et vice versa ;

Mon objectif est simple : faire en sorte que, quand j’appuie sur les touches du piano, ça se voie sur l’ordinateur.
Lancez le gestionnaire de paquets Synaptic.
Tapez « jack » dans « Recherche rapide ».
Une fois la liste affichée, sélectionnez pour l’installation : jackd, jack-tools, et celui auquel on ne pense pas mais qui est aussi important que le reste, j’ai nommé : qjackctl.

Voilà, une fois que tout est installé, il y a une nouvelle application qui est apparue dans le menu Applications => Sons et Video : c’est JACK Control.

La plupart des ordinateurs récents sous Linux ont un programme pour gérer le son qui est « PulseAudio ». Malheureusement il n’est pas compatible avec le serveur JACK. Donc il faut ajouter « /usr/bin/pasuspender — » qui va suspendre le programme « PulseAudio », pendant que le serveur JACK est actif. Bien sûr, dès que vous arrêterez le serveur, automatiquement le programme « PulseAudio » reprendra sa place de manière transparente. Que la vie est belle !
Ce qui suit ne concerne donc que les gens qui ont « PulseAudio », mais c’est la grande majorité.
Lancez le programme JACK Control (Applications => Sons et Video => JACK Control), et cliquez immédiatement sur le bouton « Réglages ».
Là, allez dans « Chemin du serveur », effacez tout et mettez :
/usr/bin/pasuspender -- /usr/bin/jackd

Voilà pour la première étape de « base ». Ensuite, je vais décrire comment compiler à la main une version plus récente du serveur JACK, afin de profiter des toutes dernières améliorations.

vim : l'efficacité par la preuve directe

Depuis que j’ai vu ces vidéos, je sors avec plein de femmes, j’ai plein d’argent, et je suis aimé de la France entière.

Si vous parlez couramment l’Anglais, il faut absolument que vous voyez les vidéos de ce qu’il est possible de faire avec vim et qu’on n’a pas forcément en tête.

http://vimcasts.org/

Laissez d’autre sites en commentaire si vous avez des liens intéressants. Je n’hésiterai pas à les valider !

Shell et tilde avec 'home' ou 'end' : la solution

Le solution a été trouvée ici.
Je vous la traduis en Français :
Il vous faut créer un fichier nommé .inputrc dans votre répertoire personnel, puis y ajouter les lignes suivantes :
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on


"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word

Linux mount : erreur 12. Solution à appliquer.

C’est la traduction d’un article trouvé ici.

Ci-suit comment appliquer un patch sur l’erreur assez commune « mount error 12 = Cannot allocate memory ».

[snip]
La bonne chose c’est que je l’ai corrigé, d’un point de vue Linux.
Et on est dans un groupe de discussion Linux.
Je vais donc être un bon citoyen (euh… « Internetoyen ») et expliquer comment j’ai fait afin d’aider éventuellement d’autres personnes qui se retrouveraient face à ce problème.
Il y a vraiment très peu de chose sur Internet, concernant ce sujet.

[snip]

Je fais mon article ici pour tous les autres qui pourraient être déstabilisés par cette erreur mount  :

mount error 12 = Cannot allocate memory

Ok, c’est qu’il devait sûrement y avoir quelque chose de mauvais dans la ligne de commande ou avec le système mount.cifs. C’est une erreur classique qui s’affiche sous Linux, lorsque vous tentez de monter un partage Windows XP, 2000, ou NT share et que ça ne fonctionne pas :

mount error 12 = Cannot allocate memory

Ce n’est pas un problème Linux… on s’en doute (sourire). Le problème vient de la machine Windows : c’est elle qui cause ce problème et qui refuse d’autoriser le « mount ». J’ai trouvé ce problème en faisant sous un terminal, tourner tail sur la liste des messages système d’un côté, et sous un autre terminal, tenter le mount pour voir quelles étaient les erreurs générées par la ligne de commande.

La commande qui génère l’erreur est :

[root@ohmster ~]# mount -t cifs //missy/ohmster_music /mnt/test -o username=my_user,password=my_password,rw
mount error 12 = Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)
[root@ohmster ~]#

Les résultats du tail qui m’ont montré l’erreur :

[root@ohmster samba]# tail -f /var/log/messages
Oct 23 21:15:40 ohmster kernel: CIFS VFS: cifs_mount failed w/returncode = -12
Oct 23 21:19:43 ohmster kernel: Status code returned 0xc0000205 NT_STATUS_INSUFF_SERVER_RESOURCES
Oct 23 21:19:43 ohmster kernel: CIFS VFS: cifs_mount failed w/return code = -12
[root@ohmster samba]#

Le message NT_STATUS est suffisamment explicite, c’est bel et bien la machine Windows qui est la cause du problème, pas la machine Linux.

Ci-suit comment appliquer un patch. Le patch Windows, bien sûr.

The Solution !

Regardez le log des Events sur la machine Windows machine qui pose problème. Cherchez une croix rouge, et le mot « Error » ou « Erreur ». La source est « Srv ». L’erreur ressemblera à :

The server's configuration parameter "irpstacksize" is too small for the server to use a local device. Please increase the value of this parameter.

Si vous avez cette erreur système sur la machine Windows, alors faites ce qui suit.

Modifiez (ou créez si nécessaire) la clé de registre :

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\IRPStackSize

Si la clé n’est pas présente, créez une clé de type DWORD, appelez la IRPStackSize. Validez.

Ensuite, qu’elle soit présente, ou que vous l’ayez crée, la procédure est la même :

  • Double-cliquez dessus pour l’éditer ;
  • Mettez le bouton radio sur Décimal afin d’être sur que c’est une valeur décimale (et non pas hexadécimale) ;
  • Entrez la valeur 15 ;
  • Redémarrez la machine.
  • Si cela ne fonctionne toujours pas :
    • Montez la valeur à 18 ;
    • Redémarrez la machine une nouvelle fois.

Le problème est résolu. Allez faire vos montages partagés Samba l’esprit tranquille.


~Ohmster

Si vous avez des commentaires / suggestions, n’hésitez pas à laisser un message !

Linux : astuces bashrc

Lorsqu’on lance un nouveau shell sous Linux, il exécute un fichier ~/.bashrc.
Dans ce fichier, on peut y mettre des choses intéressantes, notamment :

export HISTCONTROL=erasedups
export HISTSIZE=10000
shopt -s histappend

Cela signifie :

  • effacer les lignes de commande en double ;
  • se souvenir au plus de 10000 lignes de commande (on n’en a jamais assez en fait) ;
  • dire au shell d’ajouter tout cela au fichier historique existant (et non pas ré-écrire par dessus (ce qui est fait par défaut)).

Linux et Applications Windows : ça marche !

Je suis tout simplement impressionné.
En quelques clicks d’installation, j’ai installé « Wine ».
Tout a fonctionné du premier coup.
J’ai copié collé le répertoire dans lequel tournait notre application de téléphonie :
Et voilà le résultat :
Image petite du logiciel Windows sous Linux
Ça fonctionné du premier coup !
Je suis vraiment impressionné.
Donc, pour l’instant, tant que je n’ai pas besoin de fonctionnalités particulières, je reste sous Linux.
Je dois avouer que le seul programme qui me manque c’est Photoshop.
Pour tout le reste, je m’en passe allègrement !

Quand je clique sur arrêter pour arrêter le PC, c’est simple :

  • sous Windows, il met montre en main plus d’une minute, et encore… je ne suis même pas sûr qu’il s’arrête pour la simple et bonne raison qu’il y a des tonnes de programmes : un anti virus, un anti spam, le logiciel de téléphonie qui ne veut quitter sous aucun prétexte, le logiciel d’archivage, etc. et des fois ils se gênent tous entre eux ;
  • sous Linux, ça met 4 secondes montre en main, c’est véridique !

Linux : exemple php pratique pour grep, awk, sort, uniq et xargs

Ci-suivent quelques étapes qui expliquent l’utilisation des outils grep, awk, sort et uniq. C’est juste un exemple concret et pratique, n’imaginez pas un truc immense ! J’espère que cela vous donnera des idées, si un jour vous avez besoin de faire quelque chose dans le genre.

Objectif : lister tous les fichiers php du répertoire courant, qui font appel à l’ordre « date() ».

Donc :

  • Ordre « find » de Linux qui liste tous les fichiers d’un répertoire et de ses sous-répertoires :
    >find .
    ./robots.txt
    ./tarification2.php
    ./partenaire_demande.php
    ./img
    ./img/menu-gb_02-Carte-image_02_o.gif
    ./img/fleche_blc_fond_bleu.gif
    ./img/old_get_adobe_reader.gif
    ./img/menu-gb_02-Carte-image_05_o.gif
    ./img/ste_gestion_over.gif
    ./img/cbp_attest_ass_over.gif
    ./img/index_06.jpg
    [etc. etc.]
  • Ordre « grep » de Linux qui ne prend que les fichiers « qui se terminent par php » :
    >find . | grep php$
    ./img/index.php
    ./aore/verlogin.php
    ./aore/tarication2.php
    ./aore/img/iex.php
    ./aore/corats.php
    ./aore/ind.php
    ./aore/ccts.php
    [etc. etc.]
  • Ordre « xargs » de Linux qui dit « je vais te donner un programme (ici « grep »), et tu lui fais suivre ligne par ligne les résultats. Pour la note, « grep 'date(' [nom_de_fichier] » vérifie si dans le fichier [nom_de_fichier], il y a ‘date(‘ :
    >find . | grep php$ | xargs grep 'date('
    ./pe.php: $date=date("Y-m-d H:i:s");
    ./partde.php: $date_french=date("d-m-Y H:i:s");
    ./as/vergin.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php: $date=date("d-m-Y H:i:s");
    ./as/sis.php:$date=date("Y-m-d H:i:s");
    ./ae/sis.php:$date=date("Y-m-d H:i:s");
    ./ae/stre_cle.php:$date_heure = date("Y-m-d H:i:s");
    ./ae/stre_cle.php:$date = date("Y-m-d");
    [etc. etc.]
  • Ordre « awk » qui prend la ligne en cours, considère que les « : » sont les séparateurs (-F:), et n’affiche en sortie que le premier enregistrement ('{print $1}') pour chaque ligne :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}'
    ./re/vein.php
    ./re/ctrs.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./ae/mu.php
    ./ae/mu.php
    [etc. etc.]
  • Ordre « uniq » qui prend la totalité de ce qu’on lui passe, et supprime les doublons :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}' | uniq
    ./re/vein.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./ae/mu.php
    [etc. etc.]
  • Ordre « sort » qui trie par ordre alphabétique :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}' | uniq | sort
    ./ae/mu.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./re/vein.php
    [etc. etc.]

Et voilà ! Une minute pour taper cette commande, et on a la liste de tous les fichiers à vérifier pour être certain qu’il n’y aura plus de warnings() lors de l’utilisation de date() dans ces fichiers php.
Pour la note, j’ai eu besoin de faire ça parce que ces fichiers devaient avoir en tête l’initialisation préalable date_default_timezone_set(). Ces fichiers sont les fichiers d’un très vieux site qu’il faut faire fonctionner en mettant au minimum les mains dedans, c’est ce que j’ai tenté de faire (pour préserver aussi ma santé mentale).

(Update 6 février 2011)
Sur ce site ici qui me cite, il y a une réponse très intéressante : lorsqu’on connait bien l’ordre « find« , on peut résumer tout mon article en une seule ligne et un seul ordre :

find -iname "*.php" -exec grep "\Wdate(" "{}" \; -print

Bon, le résultat ne renvoie pas que les fichiers, mais il est bien formaté, c’est aussi très pratique. Voici un exemple de sortie de cet ordre :

  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
  echo '<li>Lancement des calculs à '.date("H:i:s").'.</li>';
  echo '<li>Terminé à '.date("H:i:s").'.</li>';
./_tests_unitaires/tarifs_generali/tarifs_2010.php
  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
./_tests_unitaires/verifs.php
  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
./_tests_unitaires/verifs_multi.php

Equivalent dos2unix

Sous Linux/Unix, Si vous cherchez à transformer un texte DOS (va de retro Satanas) en texte Unix, voici une solution rapide et efficace :

awk '{sub(/\r$/,"");print}' nom_fichier_dos > nom_fichier_unix
ou bien encore :
sed 's/.$//' nom_fichier_dos > nom_fichier_unix

Cette petite explication a été honteusement pompée ici, le but principal étant d’aider ceux qui ont du mal avec l’Anglais.

Linux Cron : mémo rapide / exemples concrets

Bon, pour tous ceux qui veulent utiliser cron, voici comment il fonctionne (c’est souvent le plus difficile à comprendre).

Toutes les minutes, le système vérifie s’il faut qu’il lance un programme. Comment fait-il sa vérification ?
C’est simple : il prend date + heure du moment et la décompose.
Prenons aujourd’hui et maintenant :

Samedi 27 février 2010, 1h44 du matin

Cela va être décomposé ainsi :

Minutes / Heures / Jour / Mois / Jour de la semaine
44      / 01     / 27   / 02   / 6

Et le système va lister toutes les tâches, et si les chiffres sont identiques, alors il l’exécute.
Exemple :

* * * * * root ping -c 1 google.fr > /dev/null

Le «*» signifie : «quelque que soit le chiffre, c’est valide».
Comparaison :

Minutes / Heures / Jour / Mois / Jour de la semaine
44      / 01     / 27   / 02   / 6
*       / *      / *    / *    / *

Tout correspond => exécution de la tâche !
Maintenant, des exemples qui vont vous servir :

# m h dom mon dow user  command
17 *  * * * root    [commande]

Lancer la commande toutes les fois où «minutes = 17» => lancer «[commande]» toutes les heures (00:17, 01:17, 02:17, 03:17 etc.).

# m h dom mon dow user  command
25 6  * * * root    [commande]

Lancer la commande toutes les fois où «minutes = 17» et «heure = 6» => lancer «[commande]» tous les jours à 6:17.

# m h dom mon dow user  command
47 6  * * 7 root    [commande]

Lancer la commande toutes les fois où «minutes = 47, heure = 6» et «jour de la semaine = 7» => lancer «[commande]» tous les dimanches à 6:47.

# m h dom mon dow user  command
52 6  1 * * root    [commande]

Lancer la commande toutes les fois où «minutes = 52, heure = 6» et «jour du mois = 1» => lancer «[commande]» tous premiers du mois à 6:52.

Un peu plus complexe mais plus pratique : on peut préciser des intervalles : «2-6» veut dire «de 2 à 6 inclus». Exemple :

# m h dom mon dow user  command
* 1-6 * * * root    [commande]

Lancer la commande toutes les fois où «heure est comprise entre 1 et 6» => lancer «[commande]» toutes les minutes, de une heure à six heures du matin (c’est un exemple concret puisque «[commande], c’est une commande d’une araignée Internet (spider) qui va vérifier des choses pendant que tout le monde dort).

Un peu plus complexe mais encore plus pratique : on peut préciser des intervalles : «*/4» veut dire «tous les multiples de 4». Exemple :

# m h dom mon dow user  command
*/4 1-6 * * * root    [commande]

Lancer la commande toutes les fois où «heure est comprise entre 1 et 6» et «la minute est un multiple de 4» => lancer «[commande]» toutes les quatre minutes, de une heure à six heures du matin (c’est un exemple concret puisque «[commande]», c’est une commande d’une araignée Internet (spider) qui va vérifier des choses pendant que tout le monde dort).

PS : oui oui il est bien 1:44 du matin et je n’arrive pas à dormir…