Deblan blog

Tag #Debian

Alsa, Debian et le Dell XPS 15

Un bref article pour poser la configuration d'Alsa qui permet de gérer des sorties sons simultanées avec plusieurs logiciels. En effet, dans l'article traitant du Dell XPS récemment acquis, j'expliquais comment configurer Alsa mais j'avais toujours des problèmes quand 2 logiciels tentaient de produire un son en même temps.

Dans ~/.asoundrc :

pcm.!default { 
    type plug
    slave.pcm "dmixer"
} 

ctl.!default {  
    type hw
    card 1
} 

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:1,0"
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
    }
    bindings {
        0 0
        1 1
    }
}

ctl.dmixer {
    type hw
    card 1
}

Il me reste à résoudre la gestion du micro et je devrais arriver au bout des problèmes.

Edit : le micro fonctionne très bien, seul skype ne sait pas jouer avec…


Debian + XPS 15 (9530)

Mon agence m'a acheté le dernier XPS 15 de Dell (9530). C'est une belle machine, autant à l'extérieur qu'à l'intérieur...Cependant, aussi jolie soit-elle, installer Debian dessus n'a pas été de tout repos. Livrée avec Windows 8 et des Gigas d'espace disque monopolisés par les partitions EFI, Windows 8 et les partitions de restauration, j'ai commencé par faire le grand ménage en virant tout.

J'ai installé Debian dessus, je me suis confronté à l'éternel problème des matériels plus ou moins reconnus. J'ai quand même eu de la chance car une grande partie d'entre eux l'était.

Il faut savoir que ce laptop n'a pas de port ethernet, ainsi, il m'a été nécessaire d'utiliser un adapteur USB/Ethernet. Sachez que Debian Wheezy pète une pile avec l'USB3 et les dongles USB2. Faute au kernel ? Sans doute, mais je n'ai pas voulu perdre de temps avec ces conneries donc j'ai migré sur la SID. Le kernel est donc plus récent et j'ai écarté des problèmes de connectivité.

Après l'installation, j'ai rencontré 3 problèmes majeurs :

  • pas d'interface wifi
  • pas de son
  • mplayer lisait les vidéos de manière saccadée
  • mon touchpad ne me permettait pas de faire un middle click : pas pratique du tout pour faire des copiés/collés

Le Wifi

Il a suffit d'installer le paquet iwlwifi et tout est rentré dans dans l'ordre. Ça implique d'avoir paramétré les dépots non-free (@see).

Le son

Ce souci de son m'a littéralement fait rager. Le problème est simple en fait : la sortie HDMI est considérée comme une carte son et Alsa la positionne comme carte par défaut. Pour résoudre le problème, j'ai installé pulseaudio (et ça m'a fait mal aux fesses) et j'ai placé la conf suivante dans mon ~/.asoundrc :

Edit : Pulseaudio ne sert à rien en fait....sauf poser des problèmes donc il a été supprimé.

pcm.!default { 
    type hw 
    card 1 
} 

ctl.!default { 
    type hw 
    card 1 
} 

Au démarrage de mon WM (i3), j'exécute pulseaudio comme suit :

exec pulseaudio --start

Et j'ai également cet init d'Alsa :

exec alsactl init -c 1

Mplayer

Pour pouvoir lire des vidéos avec mplayer2, voici la conf que j'ai écrite dans ~/.mplayer2/config

[default]
vo=x11
vc=ffh264vdpau,ffmpeg12vdpau,
zoom=1

Le Touchpad

Pour "activer" le middle click sur le touchpad, j'ai transpiré quelques heures. Encore une fois, le problème est simple (et la solution également) :

  • le touchpad n'a qu'un seul boutton
  • c'est la position du clique qui détermine si on fait un clique gauche, un clique droit ou bien le clique du mileu (middle click)

Synclient (en ligne de commande) permet de connaître les valeurs attribuées par Synaptics pour les paramètres du touchpad. Il s'avère que par défaut, le middle click a tout à 0, c'est à dire qu'aucune position de clique ne permet de détecter ce fameux clique.

Il suffit donc de modifier ces valeurs et tout devrait rentrer dans l'ordre. Voici ce que j'exécute au lancement du WM :

exec synclient MiddleButtonAreaLeft=2700
exec synclient MiddleButtonAreaRight=3500

Un bout de scotch pour repérer au touché cette position (entre les clique gauche et le clique droit) et l'affaire est bouclée.

Edit. Dans /etc/X11/xorg.conf (à créer si besoin) :

Section "InputClass"
    Identifier      "SynPS/2 Synaptics TouchPad"
      Driver          "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Option          "SHMConfig"             "on"
    Option          "Emulate3Buttons"       "on"
EndSection

J'espère que ça pourra aider :)


Un énième miroir Debian

Ce billet n'intéressera sans doute que moi mais peu importe ^^ Comme vous le savez peut-être, quand vous utilisez une distribution Linux, l'ensemble des logiciels (paquets) sont placés sur des serveurs un peu partout dans le monde. On est donc capable de gérer personnellement un dépôt et ça permet plein de choses : se placer uniquement dans un intranet et être capable de fournir un ensemble de paquets, reteindre certains outils ou bien en ajouter, mais on peut surtout répartir un peu plus la charge de téléchargement sur le globe. En effet, quand un grand nombre de personnes font leurs téléchargements sur les mêmes serveurs, on imagine très facilement les pertes de bande passantes.

Ainsi, j'ai décidé de partager un peu de mes serveurs pour aider un peu plus la communauté Debian. J'ai installé deux miroirs : le premier est celui de la documentation officielle de la distribution :

Le second est une première étape vers la création d'un serveur de dépot. J'ai placé sur mon serveur l'ensemble des ISO CD de Debian stable. J'ai limité les images à la version i386 pour des raisons d'espace disque. J'espère bien évidement étendre le serveur à plus d'architectures et migrer en un dépot de paquets.


Android : partage de connexion internet

Les locaux de l'UTBM où je fais mes cours du CNAM fournit le nécessaire pour se connecter à Internet. Cependant, il y a de fortes restrictions sur le réseau (le débit et les ports ouverts vers l'extérieur). Comme je dois être capable d'intervenir sur l'ensemble des services hébergés par l'agence, j'ai du utiliser la connexion 3G de mon Android pour accéder à Internet.

Les étapes de configurations sont simples et ne nécessitent pas des Km de documentation.

La première étape est la configuration de l'Android :

  • Télécharger et installer l'application EasyTether Lite pour la version gratuite et limitée ou bien EasyTether Pro qui est la version payante (moins de 10 euros)
  • Dans Paramètres » Applications » Développement, cochez la case « Débogage USB »
  • Lancer l'application EasyTether et activer l'USB

Du coté de votre machine, il faudra installer le driver adéquate et le reste de la configuration relève des outils presque basiques de votre système.

De mon coté, j'utilise Debian et la démarche est la suivante :

Note : l'ensemble des commandes ci-dessous est exécuté en root

prompt> wget "https://sites.google.com/site/easytether/easytether/easytether_0.7.1-3_i386.deb?attredirects=0&d=1" -O easy.deb
# version amd64 : https://sites.google.com/site/easytether/easytether/easytether_0.7.1-3_amd64.deb?attredirects=0&d=1
# @see: http://easytether.blogspot.com/2010/10/easytether-drivers.html
# @important: le driver n'est pas libre, c'est donc un potentiel danger pour la sécurité votre système
prompt> dpkg -i easy.deb
# brancher l'Android via l'USB est récupérer la sortie de la commande suivante :
prompt> easytether enumerate # Sortie similaire à "SH0B2PL08690"
prompt> screen easytether connect SH0B2PL08690
prompt> dhclient easytether0

Si vous souhaitez partager cette connexion internet via l'ethernet ou bien le wifi, vous devrez monter un réseau local entre les machines :

# Chez vous
prompt> ifconfig <INTERFACE RESEAU> 192.168.0.1 netmask 255.255.255.0
# Sur l'autre machine
prompt> ifconfig <INTERFACE RESEAU> 192.168.0.2 netmask 255.255.255.0
prompt> route add default gw 192.168.0.1

Puis vous devrez activer le routage de paquets sur l'interface adéquate :

# Cette commande n'est pas forcément nécessaire
prompt> /sbin/modprobe iptable_nat
# man sysctl pour rendre cette configuration permanente 
prompt> echo 1 > /proc/sys/net/ipv4/ip_forward 
prompt> iptables -A POSTROUTING -t nat -o easytether0 -j MASQUERADE

Rapport journalier d'un serveur avec les graphs Munin

Quand on a quelques serveurs à surveiller, il est intéressant de pouvoir rendre plus rapide certaines tâches. Une de nos préoccupations était d'avoir un rapport journalier de l'état de chaque serveur. L'idée est de connaître des informations plus ou moins basiques sur nos système et de recevoir une partie des graphs générés par Munin.

Nos contraintes étaient de ne pas installer un énième service, d'avoir une complète compréhension de l'outil utilisé et de rendre le rendu customisable. Du coup, c'est à coup de sendmail et d'une bonne doc que ça s'est terminé.

Je vais donc partager avec vous un script assez simple qui enverra un mail avec les informations que vous désirez.

Pour l'exemple, j'ai décidé d'afficher :

  • Le nom du serveur
  • La date à laquelle le rapport est généré
  • L'Uptime de la machine
  • La sortie de ifconfig
  • La sortie de df
  • La sortie de mount
  • Tous les graphs de Munin sauf ceux relatifs à la conso de bande passante des sites hébergés
Étape 1 : configurer quelques variables
#!/bin/sh

# destinataire du mail
TOADDR=moi@exemple.com
# le hostname de la machine
SERVER=$(/bin/hostname)
# la date courrante
DATE=$(date)
# la sortie de df avec des valeurs numériques lisibles
DF=$(df -h)
# l'uptime de la machine
UPTIME=$(uptime)
# les différents points de montage de la machine
MOUNT=$(mount)
# les infos sur les interfaces réseaux
IFCONFIG=$(/sbin/ifconfig)
# le sépérateur qui permettra d'envoyer en pièces jointes les graphs de Munin
BOUNDARY="-$(/bin/date | /usr/bin/md5sum | cut -d ' ' -f 1)"
Étape 2 : la création du contenu Html du mail :
(
cat << EOF
From: no-reply@$SERVER
To: $TOADDR
Subject: [$SERVER] Rapport journalier
Content-type: multipart/mixed;
  boundary="$BOUNDARY"

--$BOUNDARY
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>

<style type="text/css">
body {
	font-family:verdana;
	width:700px;
}

ul {
	padding:10px;
	margin:0;
	border:1px solid #CCC;
}

li {
	padding:0;
	margin:0 0 0 15px;
}

h2 {
	border-bottom:1px solid #333;
	background:#eee;
	padding:5px;
}
</style>

<h1>Rapport journalier</h1>

<ul>
        <li>Serveur : $SERVER</li>
        <li>Date : $DATE</li>
        <li>Uptime : $UPTIME</li>
</ul>

<h2>Reseau</h2>

<pre>$IFCONFIG</pre>

<h2>Point(s) de montage(s)</h2>

<pre>$MOUNT</pre>

<h2>Espace(s) disque(s)</h2>

<pre>$DF</pre>

</body>
</html>
EOF

echo
Étape 3 : la création des pièces jointes
cd /var/cache/munin/www/localhost/localhost/
for i in *day.png; do
        if [ "$(echo $i | cut -d _ -f 1)" != "apache" ]; then
                echo "--$BOUNDARY"
                echo "Content-type: image/png;"
                echo " name=\"$i\""
                echo "Content-Transfer-Encoding: base64"
                echo "Content-ID: <$i>"
                echo "Content-Disposition: attachement;"
                echo " filename=\"$i\""
                echo
                /usr/bin/base64 /var/cache/munin/www/localhost/localhost/"$i"
        fi
done

echo
echo "--$BOUNDARY--"
Étape 4 : l'envoie du mail
) | /usr/sbin/sendmail "$TOADDR"

Le script complet étant :

#!/bin/sh

# destinataire du mail
TOADDR=moi@exemple.com
# le hostname de la machine
SERVER=$(/bin/hostname)
# la date courrante
DATE=$(date)
# la sortie de df avec des valeurs numériques lisibles
DF=$(df -h)
# l'uptime de la machine
UPTIME=$(uptime)
# les différents points de montage de la machine
MOUNT=$(mount)
# les infos sur les interfaces réseaux
IFCONFIG=$(/sbin/ifconfig)
# le sépérateur qui permettra d'envoyer en pièces jointes les graphs de Munin
BOUNDARY="-$(/bin/date | /usr/bin/md5sum | cut -d ' ' -f 1)"

(
cat << EOF
From: no-reply@$SERVER
To: $TOADDR
Subject: [$SERVER] Rapport journalier
Content-type: multipart/mixed;
  boundary="$BOUNDARY"

--$BOUNDARY
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>

<style type="text/css">
body {
	font-family:verdana;
	width:700px;
}

ul {
	padding:10px;
	margin:0;
	border:1px solid #CCC;
}

li {
	padding:0;
	margin:0 0 0 15px;
}

h2 {
	border-bottom:1px solid #333;
	background:#eee;
	padding:5px;
}
</style>

<h1>Rapport journalier</h1>

<ul>
        <li>Serveur : $SERVER</li>
        <li>Date : $DATE</li>
        <li>Uptime : $UPTIME</li>
</ul>

<h2>Reseau</h2>

<pre>$IFCONFIG</pre>

<h2>Point(s) de montage(s)</h2>

<pre>$MOUNT</pre>

<h2>Espace(s) disque(s)</h2>

<pre>$DF</pre>

</body>
</html>
EOF

echo

cd /var/cache/munin/www/localhost/localhost/
for i in *day.png; do
        if [ "$(echo $i | cut -d _ -f 1)" != "apache" ]; then
                echo "--$BOUNDARY"
                echo "Content-type: image/png;"
                echo " name=\"$i\""
                echo "Content-Transfer-Encoding: base64"
                echo "Content-ID: <$i>"
                echo "Content-Disposition: attachement;"
                echo " filename=\"$i\""
                echo
                /usr/bin/base64 /var/cache/munin/www/localhost/localhost/"$i"
        fi
done

echo
echo "--$BOUNDARY--"
) | /usr/sbin/sendmail "$TOADDR"

Bien sûr, il ne reste plus qu'à lancer le script régulièrement. Pour ce faire, on va simplement créer une tâche cron qui exécutera le script à minuit :

0 0 * * * /chemin/vers/le/script