Xubuntu 12.04 : un lightdm au look Unity …

Dans cet article, nous avions vu comment donner un look « unity » au lightdm de xubuntu 11.10.

La version de lightdm fournie avec xubuntu 12.04 LTS apporte quelque modifications dans la procédure.

Par défaut le look de lightdm est le suivant :

Pour donner le look unity, il faut installer les paquets suivants :

sudo apt-get install gnome-settings-daemon indicator-session-gtk2 unity-greeter ubuntu-mono light-themes

Puis modifier le fichier /etc/lightdm/lightdm.conf :

[SeatDefaults]
user-session=xubuntu
greeter-session=unity-greeter

Nous allons également télécharger un logo xubuntu :

sudo wget -O /usr/share/pixmaps/xubuntu.png http://www.be-root.com/downloads/xubuntu/xubuntu.png

Contrairement à la version packagée avec la 11.10, la configuration de unity-greeter ne se fait plus via des fichiers de configurations classiques mais via gsettings ou dconf-editor sous l’identité lightdm :

sudo xhost +SI:localuser:lightdm
sudo su lightdm -s /bin/bash
gsettings set com.canonical.unity-greeter background /usr/share/xfce4/backdrops/xubuntu-precise-right.png
gsettings set com.canonical.unity-greeter logo /usr/share/pixmaps/xubuntu.png

Si nous désirons ne pas afficher la grille (points blancs) sur l’écran de connexion, nous pouvons également taper :

gsettings set com.canonical.unity-greeter draw-grid false

L’apparence de ligthdm devient alors :

Installation de Apache/HTTPD 2.4.x à partir des sources

La fondation Apache a annoncé cette semaine la sortie d’une version majeure du célébre serveur Web, Apache/HTTPD. La branche 2.4.x apporte plusieurs nouvelles fonctionnalités et quelques changements notables.

Dans cet article, en attendant la mise à disposition des paquets dans les différents dépôts, nous allons installer cette version directement depuis les sources.

Nous nous sommes appuyé sur une distribution CentOS 6.2, installée en version minimale.

Le module MPM (Modules Multi-Processus) utilisé par défaut, est event. Pour le modifier, vous devez ajouter l’argument –with-mpm (par exemple, –with-mpm=prefork si vous souhaitez utiliser PHP avec son module DSO). Autre changement, les modules de Apache/HTTPD sont intégrés dynamiquement par défaut (DSO, Dynamic Shared Objects).

Pour commencer, nous allons installer les outils de compilation.

– Installez un client HTTP en ligne de commande : yum install wget
– Installez un compilateur C et l’utilitaire make : yum install gcc make

Notre utiliserons le répertoire /usr/local/src/ comme répertoire de travail. La version disponible lors de l’écriture de cet article, est la version 2.4.1.

– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Téléchargez la dernière version de la branche 2.4.x de Apache/HTTPD : wget http://mir2.ovh.net/ftp.apache.org/dist//httpd/httpd-2.4.1.tar.gz
– Décompressez l’archive de Apache/HTTPD dans ce répertoire : tar -xzf httpd-2.4.1.tar.gz
– Placez-vous dans le répertoire suivant : cd httpd-2.4.1

Les arguments dépendent bien évidemment de votre usage de Apache/HTTPD. Vous pouvez par exemple activer le module de réécriture d’URL (–enable-rewrite), le module de compression des pages retournées (–enable-deflate), … Dans ce cas, d’autres dépendances devront certainement être installer.

– Configurez : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir

checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu

Configuring Apache Portable Runtime library ...

checking for APR... no
configure: error: APR not found. Please read the documentation.

Un message d’erreur nous indique que APR n’a pas été trouvée. APR (Apache Portable Runtime) est nécessaire au serveur Web, Apache/HTTPD. APR était auparavant inclus dans la branche 2.2.x. Ce n’est plus le cas avec la branche 2.4.x.

Même chose pour APR-UTIL (Apache Portable Runtime Utility).

Il est possible d’utiliser le dépôt pour installer APR et APR-UTIL. Cependant, nous n’allons pas nous priver des dernières versions et allons récupérer directement leurs sources. D’autant plus que leur installation est gérée par Apache/HTTPD. Il suffit simplement de décompresser les sources dans le sous-répertoire srclib de Apache/HTTPD.

– Placez vous dans le répertoire /usr/local/src/ : cd ..
– Téléchargez les sources de la dernière version de APR : wget http://mirrors.ircam.fr/pub/apache//apr/apr-1.4.6.tar.gz
– Téléchargez les sources de la dernière version de APR-UTIL : wget http://mirrors.ircam.fr/pub/apache//apr/apr-util-1.4.1.tar.gz

– Décompressez l’archive de APR dans le répertoire srclib : tar -xzf apr-1.4.6.tar.gz -C httpd-2.4.1/srclib/
– Renommez le répertoire : mv httpd-2.4.1/srclib/apr-1.4.6 httpd-2.4.1/srclib/apr

– Décompressez l’archive de APR-UTIL dans le répertoire srclib : tar -xzf apr-util-1.4.1.tar.gz -C httpd-2.4.1/srclib/
– Renommez le répertoire : mv httpd-2.4.1/srclib/apr-util-1.4.1 httpd-2.4.1/srclib/apr-util

– Placez-vous dans le répertoire contenant les sources de Apache/HTTPD : cd httpd-2.4.1
– Configurez à nouveau : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir

checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

Un autre message d’erreur nous apprend que pcre-config n’a pas été trouvé. PCRE (Perl Compatible Regular Expressions) est aussi un pré-requis au serveur Web, Apache/HTTPD. Il n’est plus inclus avec la branche 2.4.x.

– Installez les paquets suivants : yum install pcre pcre-devel

– Placez-vous dans le répertoire suivant : cd httpd-2.4.1
– Configurez : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir
– Compilez : make
– Installez : make install

La version 2.4.1 de Apache/HTTPD est maintenant installée sur votre système (/usr/local/httpd/).

Il ne vous reste plus qu’à modifier le fichier de configuration de Apache/HTTPD (/etc/httpd/conf/httpd.conf) à votre convenance. La configuration devra être adaptée.

LightDM sous Ubuntu 11.10 : Problème avec les homedirs NFS et l’option root_squash

LightDM 1.0.6 est le gestionnaire de connexions fourni par défaut sous (X)ubuntu 11.10.
Hors il s’avère qu’il est impossible de démarrer une session lorsque le répertoire personnel de l’utilisateur cherchant à se logguer se trouve sur un partage NFS possédant dans ses options d’export l’option root_squash et que les droits du répertoire personnels sont à 700.

L’option root_squash permet d’éviter que le root de la machine cliente ait les droits root sur le serveur NFS en mappant son UID(0) vers l’UID de l’utilisateur Nobody.

En regardant le code source de lightdm 1.0.6, dans le fichier session.c, nous y voyons :

    /* Change working directory */
    if (chdir (user_get_home_directory (user)) != 0)
    {
        g_warning ("Failed to change to home directory %s: %s", user_get_home_directory (user), strerror (errno));
        _exit (EXIT_FAILURE);
    }

    /* Change to this user */
    if (getuid () == 0)
    {
        if (initgroups (user_get_name (user), user_get_gid (user)) < 0)
        {
            g_warning ("Failed to initialize supplementary groups for %s: %s", user_get_name (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }

        if (setgid (user_get_gid (user)) != 0)
        {
            g_warning ("Failed to set group ID to %d: %s", user_get_gid (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }

        if (setuid (user_get_uid (user)) != 0)
        {
            g_warning ("Failed to set user ID to %d: %s", user_get_uid (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }
    }

Nous voyons donc que changement de répertoire a lieu avant le changement d’UID/GID. Sur un système classique cela ne pose pas de soucis car le root a toujours le droit de traverser un répertoire.
Cependant, du fait de l’option root_squash au niveau du partage NFS, ceci n’est plus vrai et donc le programme s’arrête suite à la vérification de la condition (chdir (user_get_home_directory (user)) != 0).

Pour venir à bout de ce problème, nous avons trois possibilités :

– Enlever l’option root_squash mais ceci ajoute une brèche dans la sécurité du service NFS
– Passer les droits sur les répertoires personnels des utilisateurs en 701. De cette manière, l’utilisateur root mappé pourra traverser le répertoire et donc cela ne générera plus d’erreur. Cela peut néanmoins être contraignant s’il y a beaucoup de homedirs à traiter.
– Modifier le code source de LightDM pour inverser la procédure :

    /* Change to this user */
    if (getuid () == 0)
    {
        if (initgroups (user_get_name (user), user_get_gid (user)) < 0)
        {
            g_warning ("Failed to initialize supplementary groups for %s: %s", user_get_name (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }

        if (setgid (user_get_gid (user)) != 0)
        {
            g_warning ("Failed to set group ID to %d: %s", user_get_gid (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }

        if (setuid (user_get_uid (user)) != 0)
        {
            g_warning ("Failed to set user ID to %d: %s", user_get_uid (user), strerror (errno));
            _exit (EXIT_FAILURE);
        }
    }
    /* Change working directory */
    if (chdir (user_get_home_directory (user)) != 0)
    {
        g_warning ("Failed to change to home directory %s: %s", user_get_home_directory (user), strerror (errno));
        _exit (EXIT_FAILURE);
    }

Ainsi, on change l’UID/GID avant de traverser le répertoire. En tout état de cause, un utilisateur doit avoir accès à son répertoire personnel et si ce n’est pas le cas, alors une erreur sera signalée.

Pour plus de facilité, j’ai reconstruis des paquets (X)ubuntu corrigeant cette erreur :

L’installation, après téléchargement des paquets se fait a l’aide de la commande :

sudo dpkg --install xxxxxxxx.deb