ESIEE Tips and Tricks: Installer des paquets dans son répertoire Home

Portrait de fira

Parfois on a besoin d'outils qui ne sont pas installés sur un PC, nottament à l'ESIEE!
Comment faire pour travailler avec ses outils et son environnement famillier dans ces conditions ?
C'est simple: il suffit d'installer les paquets dans son répertoire home.

Oulaaah Fira mais c'est possible ça?

Bien sur! Ce qu'on fait souvent lorsqu'il nous manque des applis, c'est de les compiler à la main, résoudre les dépendances à la main... bref un peu galère.
Je vais vous montrer une autre technique, qui si elle n'est pas magique, facilite grandement le travail.
Attention, c'est un peu du bricolage étant donné qu'on rajoute des trucs par dessus l'environnement du système, donc il faut que les deux soient compatibles.

Mais, je peux installer n'importe quoi comme ça ?

Oui et non. Techniquement on peut installer tout ce qui tourne en utilisateur (lire: pas besoin d'un démon système), en pratique il faut que l'application en question soit assez flexible pour fonctionner à un endroit non-standard pour l'utiliser.
Il m'a par exemple pour l'instant été impossible d'installer des gestionnaires de fenêtre comme ça, car ils s'attendent à trouver leur fichiers de config et resources dans le root de la machine (/) et pas dans la home.

Ok, ok, comment ca marche ?

Ca va passer surtout par des variables d'environnement a définir dans un premier temps.

  • PATH va définir ou chercher des éxecutables à lancer
  • LD_LIBRARY_PATH va définir ou chercher des librairies à linker dynamiquement
  • LDFLAGS est la liste des options à passer au linker pour lui indiquer ou récupérer les librairies au linkage (normalement fait dans /etc/ld.so.conf)
  • CFLAGS et CXXFLAGS sont les flags a passer à la compilation, respectivement pour GCC et G++, utilisé typiquement pour les répertoires d'inclusion
  • PKG_CONFIG_LIBDIR est la liste des paths vers les fichiers de configuration de pkgconfig (important si vous faites de la compilation)
  • MANPATH définit ou chercher les pages de manuel. On verra qu'on peut aussi utiliser le fichier .manpath pour ça.
  • http_proxy et https_proxy vont être néccessaire pour configurer le proxy de l'ESIEE pour utiliser toute les applications passant par HTTP

Oulah, c'est compliqué! Je fais quoi?

D'abord, il faut choisir ou on va installer cet "environnement secondaire" dans sa Home: personnellement j'ai choisi directement dans la home (donc $HOME/bin, $HOME/lib, $HOME/usr, etc) mais comme Minijackson le fait, il peut être plus judicieux de prendre un sous-répertoire type .local ...
Ensuite on crée un fichier pour charger ces variables d'environement automatiquement. A l'ESIEE on tourne sous TCSH, donc c'est .cshrc. Sinon on pourrait faire ça dans le .bashrc pour bash, etc etc.

Voici par exemple le contenu de mon fichier .cshrc :

setenv HOMEROOT $HOME
 
setenv PATH {$HOMEROOT}/bin:{$HOMEROOT}/usr/bin:{$PATH}
setenv LD_LIBRARY_PATH {$HOMEROOT}/lib:{$HOMEROOT}/usr/lib:{$HOMEROOT}/lib/x86_64-linux-gnu:{$HOMEROOT}/usr/lib/x86_64-linux-gnu
setenv LDFLAGS -L{$HOMEROOT}/lib:{$HOMEROOT}/usr/lib:{$HOMEROOT}/lib/x86_64-linux-gnu:{$HOMEROOT}/usr/lib/x86_64-linux-gnu
setenv CFLAGS -I{$HOMEROOT}/include:{$HOMEROOT}/usr/include:{$HOMEROOT}/include/python2.7
setenv PKG_CONFIG_LIBDIR {$HOMEROOT}/lib/pkgconfig:/usr/lib/pkgconfig
setenv http_proxy http://squid.esiee.fr:3128
setenv https_proxy $http_proxy

Ensuite il faut relancer le terminal pour prendre en compte les changements (et se relogger en graphique).

D'accord c'est fait. Et maintenant ?

Maintenant on va disposer de deux méthodes pour installer des applications supplémentaires:

  • Récupérer la source et la compiler. Au moment de faire ./configure, il faut alors indiquer --prefix=$HOMEROOT pour qu'ils soient installé dans notre environnement.
  • Hack moche, mais qui marche: utiliser apt et dpkg -X: apt-get download gedit && dpkg -X gedit*.deb $HOMEROOT
    Cela va extraire le contenu du paquet directement dans $HOMEROOT. Plus de prise de tête avec la compatibilité, vu qu'on utilise les paquets de la même distribution !

C'est cool, mais ca ne marche pas.

Il manque peut être des dépendances pour le paquet. Le plus simple est de le lancer dans un terminal pour voir ce qu'il peut manquer.
Si vous avez des problèmes de librairies, la commande ldd peut être utile pour débugguer: utilisez "which " pour savoir ou est l'executable correspondant, puis ldd dessus pour voir la liste des librairies.
Ensuite on peut utiliser "apt-cache depends " pour voir la liste des dépendances, et installer celles qui peuvent manquer sur le système de base.
Enfin dernière chose a faire attention, certains paquets dans le repository de l'ESIEE sont différents, donc on peut rencontrer des problèmes.

Ouah! C'est trop bien!

On peut installer beaucoup d'applications comme ça, bien qu'il faille chercher un peu pour résoudre les problèmes de resources sur certaines.
Un petit screen d'un exemple, une installation de Qemu dans Home qui boot une Pentoo

j'veux installer zsh, montre moi comment faire!

apt-get download zsh
apt-get download libncursesw5
apt-get download libtinfo5
dpkg -X zsh*.deb $HOMEROOT
dpkg -X libncursesw5* $HOMEROOT
dpkg -X libtinfo5* $HOMEROOT

Ensuite on rajoute une ligne dans au début du .zshrc pour indiquer ou charger les modules:
export MODULE_PATH=$HOMEROOT/usr/lib/zsh/$ZSH_VERSION
N'oubliez pas d'aussi recopier votre config de variables d'environnement pour l'utiliser aussi dans zsh.
Il y a surement d'autres variables a setter pour avoir la completion automatique par exemple.

Et voilà !

Je peux plus rien lancer!

Attention, il faut faire très attention quand l'on installe des paquets d'une autre distribution ou par compilation à la main: ca peut poser de gros problème si c'est des librairies standard qui sont en conflit avec la distribution.
Si on installe la glibc de cette façon par exemple, on s'expose à se retrouver avec toutes les applications Segfault'ant au lancement. Dans ce cas, unset LD_LIBRARY_PATH pour corriger le problème.

Génial, merci Fira !

Pas de problème!
N'hésitez pas a poser des questions ici si vous avez des problèmes ou faire part de votre expérience en installant des paquets.

Commentaires

Portrait de minijackson

C'est vrai que je trouve ça plus propre de mettre tout ça dans un dossier ~/.local parce que comme ça ça salit pas (ou moins) le dossier personnel.

C'est bien d'avoir mis les variables d'environnement, à chaque fois j'en oublie -_-"

--

Shirts are cool.

Portrait de paul

Beau résumé ! Xen semble peut-être moins à la mode, mais est massivement utilisé en entreprise.