Dimitri A. homeUNIX Attribution-NonCommercial-ShareAlike 3.0 application/xhtml+xml FR-68 Colmar 48.075821 7.34175

homeUNIX

Le blog-note auto-hébergé d'un switcher... avec de vrais morceaux d'informatique (Mac OS X, AppleScript, GNU/Linux, Ubuntu, logiciels libres...) et des tranches de vie numérique, depuis 2007

Installer Ruby on Rails

Ruby on Rails

On ne peut pas dire que l'installation d'une environnement (simpliste) destiné à accueillir une application RoR relève d'une grande difficulté. Cependant, à l'heure actuelle, les paquets comme rails et rubygems sont périmés sous Debian comme sous Ubuntu, aussi l'utilisation du gestionnaire de paquets ne pourra suffire.

La première étape étant d'installer une version récente de rubygems, qui permettra à son tour d'installer une version à jour de rails :

wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
tar -xvf rubygems-1.8.10.tgz
cd rubygems-1.8.10
sudo ruby setup.rb
sudo gem update --system
sudo gem install rails

La deuxième étape, est la configuration du serveur web… par facilité, habitude, etc ; on a choisi Apache. On installera « Phusion Passenger » :

sudo gem install passenger
sudo passenger-install-apache2-module

Créer un fichier de configuration Apache, par exemple :

sudo vim /etc/apache2/conf.d/passenger

Et y coller les lignes indiquées à la fin de l’exécution de passenger-install-apache2-module, par exemple, avec un installation utilisant ruby1.8 :

LoadModule passenger_module \
    /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9
PassengerRuby /usr/bin/ruby1.8

Éditer la config Apache pour, par exemple, rails-blog :

sudo vim /etc/apache2/sites-available/rails-blog
<Virtualhost *:80>
   ServerName   blog.example.com
   DocumentRoot /var/rails/blog/public/

   <Directory /var/rails/blog/public>
      Options ExecCGI FollowSymLinks
      AllowOverride all
      Order allow,deny
      Allow from all

      RailsEnv production
   </Directory>
</Virtualhost>

Billet en cours de rédaction…

Commenter (0)

Elisp: try-require

Petite fonction sympa, trouvée au hasard de recherches de fichiers « dot emacs » :

;;-----------------------------------------------------------------
;; try-require: attempt to load a feature/library, failing silently
;;-----------------------------------------------------------------
(defvar missing-packages-list nil
  "List of packages that `try-require' can't find.")

(defun try-require (feature)
  "Attempt to load a library or module. Return true if the
library given as argument is successfully loaded. If not, instead
of an error, just add the package to a list of missing packages."
  (condition-case err
      ;; protected form
      (progn
        (message "Checking for library `%s'..." feature)
        (if (stringp feature)
            (load-library feature)
          (require feature))
        (message "Checking for library `%s'... Found" feature))
    ;; error handler
    (file-error  ; condition
     (progn
       (message "Checking for library `%s'... Missing" feature)
       (add-to-list 'missing-packages-list feature))
     nil)))

Exemple d'utilisation :

(when (try-require 'tex-site)
  ;; some basic customizations
  (setq TeX-auto-save t)
  (setq TeX-parse-self t)
  (setq-default TeX-master nil)
)

Commenter (0)

Exporter son environnement (bash)

Bash

Il se peut que l'on ait besoin de partager son environnement entre plusieurs shells ; en règle générale ça ne pose pas de souci puisque chaque shell hérite de l'environnement de son parent… or si un shell graphique est démarré à l'aide d'un gestionnaire d'affichage l'environnement défini dans un .bashrc ou un .zshrc a peu de chances d'être importé/sourcé.

C'est pourquoi, Openbox permet de définir des variables d'environnement dans l'autostart.sh ; puis dans la version 3.5, un fichier environment a même spécialement été prévu à cet effet :

environment is sourced by openbox-session at startup. It contains environment variables to be set in Openbox's context. Any variables you set here will be visible to Openbox itself and anything you start from its menus. Upgrading to Openbox 3.5 […]
There is a new config file called environment that you should copy from /etc/xdg/openbox to ~/.config/openbox

Cependant, les scripts exécutés par openbox respectent la syntaxe shell de type sh, si l'on veut utiliser des syntaxes provenant d'un shell un peu plus avancé celles-ci ne seront pas compatibles. Ce qui interdit, par exemple, de sourcer son .bashrc.

Reste, alors, la possibilité de dupliquer la configuration : ce qui est rapidement assez lourd…

Pour utiliser dans le script environment de openbox, j'ai décidé d'écrire une petite fonction destinée à exporter l'environnement vers un fichier temporaire qui sera ensuite lui même sourcé, de manière à partager les variables d'un environnement vers l'autre :

set_bash_env() {
    TMPFILE=$(mktemp -t "setenv.${UID}.XXXXXXXXXX") || return 1
    bash -c 'unset PS1; env' | sort | \
	sed -e "s/=/='/" -e "s/\$/'/" -e 's/^/export /' \
	-e 's/^export UID=.*$//g' -e 's/^$//g' > "$TMPFILE"
    . "$TMPFILE"
}

Comme nous sommes dans un shell sh, contrairement à bash, par défaut, la variable d'environnement UID n'est pas définie :

export UID=$(id -u "${USER}" 2>/dev/null)

Ce billet traite d'Openbox, cependant ce billet montre surtout comment partager un environnement entre deux shells distincts ne partageant aucune parenté ; il peut, je pense, être facilement adapté à d'autres situations similaires.

Commenter (0)

Gmail Notifier 1.7.0 (Linux)

Gmail Notifier

La précédente mise à jour était qualifiée de « grosse », il se pourrait que l'on puisse qualifier celle-ci de « énorme », même si en définitive, elle n'implémente aucune nouvelle fonctionnalité, mais çà c'est une tradition ! Donc, cette nouvelle mise à jour abandonne définitivement l'utilisation de egg.trayicon qui avait été discutée et, dans un premier temps, était refusée car elle semblait trop lourde.

Nouveauté, le numéro de version abandonne l'utilisation des lettres (a, b, c…). Ça commençait à devenir pénible à gérer et, surtout, n'apportait aucune information significative. Ainsi, gmail-notifier passe de la version 1.6.6* à 1.7.0, parce que même si ce n'est pas vraiment visible en surface (et c'est un peu le but), les modifications ont été majeures ; de plus, j'ai utilisé entre ces deux versions les « versions intermédiaires » qui n'ont, finalement, jamais vu le jour.

La compatibilité avec Xfce (4.8.0) a été améliorée, par exemple avec xfce4-panel, évitant que l'extension .py ne soit affichée (capture).

Une autre nouveauté est un profonde modification de l'installation via les sources avec make… qui a aujourd'hui un « impact visuel » plus satisfaisant, à mon goût, et qui peut être localisée dans la langue de l’utilisateur (capture). D'une façon similaire, les modules nécessaires sont vérifiés grâce à une nouvelle routine qui me satisfait plus que ce qui se faisait précédemment. Il manque cependant la notification des dépendances recommandées/optionnelles, qui même si elles sont gérées ne sont, pour le moment, pas affichées en cas de défaut ; par exemple : setproctitle.

Capture d'écran

capture d'écran globale de Gmail Notifier avec xfce4-panel et notification-daemon, GNU/Linux Ubuntu 11.04

Installation

Je rappelle la procédure d'installation (avec wget et make), puisque depuis, l'URL a sensiblement été modifiée, même si les anciennes URL restent, dans l'ensemble, compatibles avec les nouvelles :

wget http://devblog.homeunix.me/share/linux/projects/gmail-notifier/LATEST -O gmail-notifier.tar.gz
tar -xvf gmail-notifier.tar.gz
cd gmail-notifier-*
make
sudo make install

Pour tout commentaire, suggestion, remarque… et bien, il y a un formulaire de commentaires sous ce billet, au cas où :wink:.

Commenter (0)

Compilation : emacs (git)

emacs-snapshot

Bon, depuis quelques temps, déjà, j'essaie tant bien que mal d'utiliser emacs en démon/serveur. Ces derniers temps, j'ai été confronté à un « petit » problème, à savoir des crashs plus ou moins aléatoires de emacs, ce qui peut être assez rageant, dépendamment de la quantité de documents ouverts et de l'état de l'édition de ceux-ci… dans un premier temps, j'ai pensé, à tort, avoir cerné le bug.

Donc, dans mon esprit, ça semblait être un bug relatif à Debian/Ubuntu ; aussi ai-je décidé de me tourner vers les sources… pour tenter de compiler un programme exempt de modifications et, donc, de bugs supplémentaires. Exit le paquet emacs-snapshot-gtk, exit (aussi) le paquet emacs32-gtk testé pour voir si il y avait une différence ; et direction le EmacsWiki pour la lecture de Emacs For Mac OS, histoire de savoir où trouver des sources récentes.

J'ai finalement jeté mon dévolu sur les sources git :

git clone git://git.savannah.gnu.org/emacs.git

Après plusieurs semaines d'essais, il s'avère que les crashs se reproduisent de façon tout aussi aléatoire… même si, finalement, je peux facilement en déclencher : seulement en changeant de thème d'icônes. Et, c'est ce qui m'a fait pensé à un problème relatif à GTK. C'est alors que j'ai décidé de jouer avec le ./configure, pour finalement arriver à çà :

./configure --without-dbus --without-gconf --with-x-toolkit=athena --without-toolkit-scroll-bars

L'option la plus importante étant, évidemment, d'utiliser Athena à la place de GTK, et là je peux changer de thème d'icônes sans que mon démon ne crashe ainsi que l'ensemble de ses clients (ou l'inverse ?).

La suppression de dbus et gconf, c'est du bonus ; mais, je ne pense pas qu'ils soient réellement indispensables au fonctionnement de emacsemacs utilise encore un toolkit graphique pour gérer la scrollbar (l'option du ./configure est un peu déroutante, à mon sens) ; toolkit qui est assez hideux soit dit en passant (capture).

Et donc, pour personnaliser les couleurs de la scrollbar, ainsi que la position :

     (set-scroll-bar-mode 'right)
     (custom-set-faces
      '(scroll-bar ((t (:foreground "#C7C7C7" :background "white")))))

Et, par exemple, pour customiser la largeur de la scrollbar :

     (ignore-errors
       (setq default-frame-alist
             (append
              '((scroll-bar-width . 8)))))

En définitive, il semblerait que ce soit l'implémentation de GTK dans emacs qui soit bien foireuse ; on verra dans quelques temps ce que ça donne avec GTK3. En effet, en utilisant un « composite manager » à chaque changement de bureau virtuel les frames semblaient redessiner, et ce de manière fort visible, leur contenu… phénomène qui semble avoir disparu avec l'utilisation du toolkit Athena. Et pour finir, une capture d'écran.

Commenter (0)

obpipemenu-xdgmenu (XDG menu dynamique)

Openbox Pipe Menu

Je me suis décidé à créer un nouvel « Openbox Pipe Menu », parce que les menus dynamiques pour les applications peuvent être utiles… même si, personnellement, je ne les utilise que très rarement. Le menu utilise une certains nombre d'attributs supplémentaires qui ne font nativement pas partie de la spécification des menus. Cependant, j'ai conçu mon propre système de menus ; après avoir utilisé et modifié, pendant un temps, myGtkMenu.

Ainsi, ai je conçu une implémentation indépendante du « root menu » de Openbox, globalement compatible avec celle d'origine, de façon à utiliser une interface avec GTK+ et à supporter un plus grand nombre d'attributs, comme par exemple les icônes.

Capture d'écran

obpipemenu-xdgmenu

Usage

Actuellement, les syntaxe pouvant être utilisées de façon à implémenter ce pipe menu, dans un menu.xml, sont les suivantes :

obpipemenu-xdgmenu
obpipemenu-xdgmenu 'Internet'
obpipemenu-xdgmenu '/etc/xdg/menus/applications.menu'
obpipemenu-xdgmenu '/etc/xdg/menus/applications.menu' 'Internet'

À ce niveau, comme on peut facilement le deviner, il utilise, par défaut, le menu /etc/xdg/menus/applications.menu, permettant de facilement avoir un menu « applications » contenant l'ensemble des catégories :

    <menu id="applications" label="Applications"
	  icon="start-here"
	  localizable="true"
	  execute="obpipemenu-xdgmenu" />

Commenter (0)

Utiliser Dnsmasq avec Network Manager (suite)

réseau

Suite du précédent billet et retours. Et oui, Network Manager peut-être cabalistique, à moins qu'il ne faille ingurgiter toute la documentation ? :confused:

Sinon, pourquoi s'entête-t-il, par défaut, à placer l'adresse de ma passerelle dans les nameserver de mon resolv.conf, là où dhclient ne commet pas une erreur aussi sotte ? Extrait de la sortie générée par nm-tool :

nm-tool | grep 'IPv4 Settings' -A9
  IPv4 Settings:
    Address:         192.168.1.196
    Prefix:          24 (255.255.255.0)
    Gateway:         192.168.1.1

    DNS:             127.0.0.1
    DNS:             192.168.1.1
    DNS:             192.168.1.102
    DNS:             8.8.4.4

Et, un extrait des informations envoyées par mon serveur DHCP :

dhcptool -i eth0 -o discover | egrep '192\.168(\.1){2}($|[[:blank:]])'
sip:        192.168.1.1
gip:        192.168.1.1
Option 054: 192.168.1.1 
Option 003: 192.168.1.1 
Option 006: 192.168.1.1 192.168.1.102 8.8.4.4

J'ai pas mal cherché, et ce, à de nombreuses reprises si il n'y avait pas un souci avec dhclient, par exemple, ou autre… pourquoi Network Manager s'entête-t-il à utiliser l'adresse de la passerelle dans les nameserver ? D'autant que, celle-ci n'est définitivement pas, dans mon cas, un serveur DNS.

De plus Network Manager semble outrepasser la configuration de dhclient, si bien que la seule seule solution pour manipuler les nameserver semble être d'utiliser un script… comme je l'avais déjà fait dans le précédent billet. Cependant, comme on l'a vu, précédemment, Network Manager utilise l'adresse de la passerelle en tant que nameserver, aussi aurait-il été nécessaire de modifier le script précédent… le problème, c'est que les scripts « shell » sont peu adaptés (dépendances et, surtout, évolutivité).

trouver une alternative à dnsmasq

Par dessus le marché, le fonctionnement de dnsmasq a fini par ne plus me satisfaire ; notamment parce que dnsmasq essaie aussi de faire serveur DHCP… que c'est un peu contraire à la philosophie UNIX ; et c'est, surtout, une source de problèmes avec network-manager. Les solutions de cache DNS ne manquent, heureusement, pas… on pourra, au moins, citer djbdns et nscd, après avoir rapidement testé l'une puis l'autre, aucune des deux ne m'a convaincu de prime abord. Finalement, j'ai décidé de me pencher sur pdnsd.

installer pdnsd depuis les sources

Pour l'installation de pdnsd, n'étant pas satisfait par le « paquet debian » disponible via le gestionnaire de paquets, notamment parce que cette installation est source de problèmes et un peu « bloated » de par les dépendances plus ou moins inutiles, j'ai donc choisi d'installer pndsd depuis les sources git. À cela peu de complications, si ce n'est de lire les options du ./configure ; et, donc, nul besoin d'aller sur Clubic pour apprendre à compiler ou installer un logiciel depuis les sources :wink: :

groupadd pdnsd
useradd -d /var/cache/pdnsd -g pdnsd -s /bin/false pdnsd
sudo apt-get build-dep pdnsd
git clone git://gitorious.org/pdnsd/pdnsd.git
cd pdnsd
./configure --sysconfdir=/etc --with-default-id=pdnsd
make
sudo make install

Après çà, reste la configuration, on pourra s'aider, comme bien souvent, de l'ArchWiki, mais de nombreuses autres ressources sont disponibles.

Un exemple de fichier de configuration /etc/pdnsd.conf minimal :

global {
        cache_dir="/var/cache/pdnsd";
        run_as="pdnsd";
        server_ip = 127.0.0.1;  // Use eth0 here if you want to allow other
                                // machines on your network to query pdnsd.
        paranoid=on;
                                // query support for this to work.
        min_ttl=15m;       // Retain cached entries at least 15 minutes.
        max_ttl=1w;        // But at most one week
        timeout=10;        // Global timeout option (10 seconds).

}

server {

        // dbc (preferred)
        ip=172.20.1.62;
        ip=193.111.162.131;

        // tdc (normal)
        ip=193.162.153.164;
        ip=194.239.134.83;

        // diku (backup)
        ip=130.225.96.4;
        ip=130.225.96.3;

        timeout = 5;
        uptest = query;
        interval = 30m;      // Test every half hour.

}


source {
        owner=localhost;
        file="/etc/hosts";
}

Je vous fais grâce des commandes éculées pour vérifier que le cache est fonctionnel ; à la place, je donnerai deux commandes pour démarrer pdnsd, rapidement et sans avoir la nécessité d'utiliser un « service ». La première commande démarre pdnsd en mode verbeux dans un terminal :

sudo pdnsd -v3 -g

L'option -g peut être remplacée par debug=on (dans la section global).

La seconde commande, plus simple, pour démarrer en mode démon :

sudo pdnsd -d

Donc, en l'absence de script installé dans /etc/init.d/, on peut se contenter de démarrer pdnsd à l'aide de /etc/rc.local :

#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

. /lib/lsb/init-functions

log_daemon_msg 'Starting dns proxy daemon...'
test -x /usr/local/sbin/pdnsd && {
        test -f /var/cache/pdnsd/pdnsd.status || /usr/local/sbin/pdnsd -d
}
log_end_msg 0
exit 0

L'inconvénient, mais aussi l'avantage, d'utiliser le script /etc/rc.local est, comme ça l'est indiqué dans ses commentaires, il est exécuté après que l'ensemble des scripts de démarrage l'aient été. Si l'on veut altérer les DNS utilisés, et notamment utiliser 127.0.0.1 correspondant à notre pdnsd, il est nécessaire de lancer un script supplémentaire ou de redémarrer network-manager.

un script pour le « nettoyage » de resolv.conf

Le script peut se télécharger ainsi :

wget http://devblog.homeunix.me/share/linux/scripts/resolv-cleaner.py -O resolv-cleaner

Par défaut, il vérifie que les DNS renseignés dans le fichier /etc/resolv.conf sont bien joignables sur le port 53 (scan de port), si ce n'est pas le cas ceux-ci seront retirés du fichier. Il tente la même opération avec 127.0.0.1, si celui-ci répond il sera placé en première position, facilitant ainsi la mise en place d'un résolveur en local. Pour finir, il retire l'ensemble des lignes de commentaire, à l'exception de la première.

Un exemple de résultat attendu après l'exécution du script :

# Generated by NetworkManager
domain private
search private
nameserver 127.0.0.1
nameserver 192.168.1.102
nameserver 8.8.8.8

Exemple d'installation, de façon à utiliser le script via NetworkManager :

wget http://devblog.homeunix.me/share/linux/scripts/resolv-cleaner.py -O resolv-cleaner
chmod +x resolv-cleaner
sudo cp resolv-cleaner /usr/local/bin/
sudo ln -sf $(which resolv-cleaner) /etc/NetworkManager/dispatcher.d/02ifup

Commenter (0)

Encodage vidéo

Multimédia

Un nouveau billet, « fourre-tout », traitant d'encodage vidéo, et plus particulièrement d'encodage vidéo en ligne de commande. Ce billet pourrait faire suite, ou venir en complément à celui à propos d'extraction, conversion multimédia en « console » ; bien que le présent billet devrait être plus spécialisé.

Aujourd'hui, et notamment avec l'utilisation de HTML5 et de sa balise video, entraînant un meilleur support et une meilleur intégration de la vidéo dans les navigateurs web, la vidéo s'invite sur le web. On pense notamment au format webm, aussi commencerons nous par une commande permettant de réencoder au format webm en utilisant gst-launch :

gst-launch -t filesrc location=input.mp4 ! progressreport \
! decodebin name=decoder  decoder. \
! queue ! audioconvert ! vorbisenc quality=0.5 \
! queue !  webmmux name=muxer  decoder. \
! queue ! ffmpegcolorspace ! vp8enc quality=5 speed=2 \
! queue !  muxer. muxer. ! queue ! filesink location=output.webm

Commande qui gagnerait à être utilisée via un script. Cependant, à l'heure actuelle, peu nombreux sont les logiciels permettant d'encoder ou de réencoder au format webm, même si l'on peut signaler mkvmerge, qui en réalité ne fait que changer de container, aussi est-il nécessaire que les codecs utilisés dans le fichier d'entrée soient compatibles avec l'utilisation du container webm :

Error: The codec type 'AVC/h.264' cannot be used in a WebM compliant file.

Une alternative viable est de s'appuyer sur le format ogg, d'autant plus que celui-ci est supporté par un nombre croissant de navigateurs. Ainsi, on a un encodeur des plus efficace et des plus simples d'utilisation : ffmpeg2theora ; permettant, notamment, de redimensionner très facilement une vidéo.

ffmpeg2theora -x 400 output.mp4

Pour extraire, découper, une section précise d'un fichier vidéo :

ffmpeg -ss 00:00:09.0 -t 00:00:26.0 -i input.mp4 -acodec copy -vcodec copy -async 1 output.mp4

Commenter (0)

homeUNIX goes HTML5

Développement

Ça y est, après une phase de transition assez courte, notamment en intégrant certains éléments à l'aide d'un namespace… le présent blog intègre largement HTML5, ou plus précisément XHTML5 ; ce qui entraîne que les pages soient servies en tant que application/xhtml+xml.

Les modifications sur le balisage n'ont pas été vraiment drastiques, si ce n'est que la balise acronym a disparu de la spécification HTML5. Le passage à CSS3 a entraîné la disparation de nombreux div décoratifs utilisés pour créer des coins arrondis compatibles avec une majorité de navigateurs.

  <!-- begin top rounded corner styles -->
  <div class="rtop2">
    <div class="r1a"></div>
    <div class="r2a"></div>
    <div class="r3a"></div>
    <div class="r4a"></div>
  </div>
  <!-- end top rounded corner styles -->

  <!-- begin bottom rounded corner styles -->
  <div class="rbottom2">
    <div class="r4a"></div>
    <div class="r3a"></div>
    <div class="r2a"></div>
    <div class="r1a"></div>
  </div>
  <!-- end bottom rounded corner styles -->

Aujourd'hui ce sont les propriétés border-radius qui sont utilisées ; ainsi que les propriétés spécifiques à chaque navigateur, pour les navigateurs plus anciens.

Les formulaires de commentaires sont d'ores et déjà pourvu de certains nouveaux attributs ; comme, par exemple : required (évitant les vérifications en JavaScript).

Malheureusement l'attribut rel ne peut plus avoir qu'un certains nombre de valeurs définies même si les spécifications, sur ce point, me semblent encore assez vagues, ce qui est dommage pour lightbox, même si on peut assez facilement s'en accommoder, par exemple en utilisant jQuery avec un sélecteur CSS3.

D'une façon similaire, il devient très aisé d'insérer une vidéo, on pourra aussi lire ce billet traitant d'encodage vidéo et particulièrement de ogg et webm.

Pour démonstration, voir ce commentaire ; l'insertion de la vidéo se limitant à insérer un lien hypertexte pointant vers un fichier portant l'extension ogv. Il va de soi que JavaScript doit nécessairement être activé…

Commenter (1)

Utiliser Dnsmasq avec Network Manager

réseau

Peu de billets doivent à présent parler de dnsmasq sur ce blog ; cependant, c'est une habitude pour moi que de l'installer… cependant, il faut se rendre à l'évidence qu'il n'est pas forcément évident d'obtenir un comportement efficace de dnsmasq lorsque celui-ci est utilisé en collaboration avec un « gestionnaire de réseau ».

Exemple de resolv.conf généré par NetworkManager :

# Generated by NetworkManager
domain private
search private
nameserver 192.168.1.1
nameserver 192.168.1.102
nameserver 8.8.8.8
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 8.8.4.4

Malheureusement, en ce qui concerne NetworkManager, la documentation Ubuntu (anglophone) est réellement pauvre… voilà ce qui est écrit :

Note that the package dnsmasq interferes with Network Manager which can use dnsmasq-base to provide DHCP services when sharing an internet connection. Therefore, if you use network manager (fine in simple set-ups only), then install dnsmasq-base, but not dnsmasq. If you have a more complicated set-up, uninstall network manager, use dnsmasq, or similar software (bind9, dhcpd, etc), and configure things by hand.

Elle est, un peu, plus complète ici : NetworkManager Device Order and if-*.d Files.

La documentation de Archlinux est un peu plus loquace sur le sujet ; notamment en faisant référence au dossier /etc/NetworkManager/dispatcher.d/, cependant, je n'appréciais que très peu les scripts donnés en exemples… il y avait aussi divers blogs avec des scripts similaires. Donc, je me suis fait mon petit script perso à mettre dans mon dossier /etc/NetworkManager/dispatcher.d/ :

#!/bin/sh -
# -*- coding: utf-8 -*-
# @filepath /etc/NetworkManager/dispatcher.d/
# @filename 02ifup

main() {
    add='nameserver 127.0.0.1'
    con=$(cat /etc/resolv.conf   | \
        grep -v "$add" | \
        sed "1i${add}" | \
        sed 's/^#.*//' | sed '/^$/d' | \
	sed "1i# Generated by NetworkManager" | uniq)
    test -n "$con" && {
	echo "$con" > /etc/resolv.conf
    }
}

main

C'est un peu overkill, mais bon ; ça permet d'éviter l'usage d'un fichier temporaire, essaie d'éviter les doublons, les commentaires et les lignes vides sont supprimés… et ça fonctionne.

Ça m'évitera de chercher partout à la prochaine installation de dnsmasq au sein d'un « environnement Gnome traditionnel », à moins que Network Manager ne soit, bientôt, remplacé par ConnMan :wink:.

Commenter (1)