Articles taggés ubuntu
Et c’est parti pour ubuntu 12.04
3Je sais, je suis le dernier des mohicans. Je ne pense pas être un Fanboy mais j’aime beaucoup ce que fait Canonical pour Ubuntu. Je suis même adepte d’Unity, c’est pour dire !
Bien entendu, Unity est très jeune et souffre de plein de défauts. Mais j’y vois d’autres choses… Que je n’étalerai pas ici. Par contre y’a un truc qui me fait perdre énormément de temps, c’est le alt-tab par défaut qui centralise les fenêtres par type d’application. Je propose donc la solution pour changer ce comportement et récupérer un alt-tab plus « classique ».
Premièrement on installe le gestionnaire de compiz :
sudo apt-get install compizconfig-settings-manager
Ensuite lancez-le avec la commande :
ccsm
Puis recherchez « Ubuntu Unity Plugin ». Dans l’onglet « Switcher », désactivez les 4 premiers raccourcis (Alt-tab etc) en cliquant sur le raccourcis et en décochant la case « Activé ».
Revenez sur la page d’accueil de ccsm, pui recherchez et activez « Static Application Switcher ». Il y en a d’autre mais c’est celui qui me semble le plus stable et rapide. Bon… quand je dis stable je le dis vite parce qu’il plante compiz la première fois que vous le lancez (en tout cas chez moi avec une nvidia). Mais après ça c’est du tout bon
Enjoy Unity.
/etc sous GIT… tout en un paquet
0Si comme moi ça fait 3 ans que vous vous dites « faudrait que j’essaie de mettre mes /etc/ dans une gestion de version : ne remettez plus à plus tard !
aptitude install etckeeper
Ajouter un nouveau fichier de conf : « git add file »
Commiter : « git commit -m « Modif de tel parametre »
enjoy !
(principal usage : le undo
Next step : faire en sorte de centraliser les etc de mes serveurs sur un git principal, et fournir un accès externe bien sécurisé. Cela me permettra de récupérer « facilement » les fichiers de confs déjà ok sur d’autres serveurs.
Monter rapidement un OpenLDAP avec des comptes de tests
0Je ne suis pas expert sur le sujet de la gestion d’identités mais il y a une chose dont je suis sûr, c’est que si je veux profiter d’une grande communauté, OpenLDAP est un bon choix. Notre architecture shibboleth s’appuiera donc sur OpenLDAP comme Metadata provider.
Alors c’est parti pour l’installation d’un OpenLDAP avec un ou deux comptes de tests et de quoi modifier tout ça à la volée.
Installation
Il me faut deux choses : un OpenLDAP et un outil pour le modifier. Si sur de la prod j’apprécie ldapvi, j’vais tenter un clickodrôme : Apache Directory studio.
Il me semble que l’OpenLDAP fournit par la distrib est souvent naze, mais c’est du test, pas de la prod. L’objectif ici et d’arriver RAPIDEMENT à un résultat (pour rappel je suis sur ubuntu 11.04)
sudo aptitude install slapd ldap-utils
On ajoute ensuite les schémas classiques à notre annuaire fraichement installé :
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
Il reste à créer un fichier de configuration par défaut (changez ce qui est en gras), je l’appelle « initial.ldif » :
# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
#olcModuleload: back_hdb
# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=geekstuff,dc=fr
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=geekstuff,dc=fr
olcRootPW: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=geekstuff,dc=fr" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=geekstuff,dc=fr" write by * read
Le « {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL » doit être remplacé par un mot de passe chiffré. Je vous propose d’utiliser la commande slappasswd pour générer le votre à partir d’un mot de passe.
On importe maintenant ce fichier (oui je sais on a déjà configurer des choses via dpkg, mais là au moins je suis certain).
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f initial.ldif
Le tip du jour. Si vous avez l’erreur suivante :
ldap_add: Other (e.g., implementation specific) error (80) additional info: <olcModuleLoad> handler exited with 1
C’est parce que vous tentez de charger un module déjà chargé. Il suffit de commenter la ligne « olcModuleload: back_hdb » dans le fichier initial.ldif juste avant son import (en mettant un simple « # » devant la ligne). Je n’ai pas encore validé que le backend restait le bon après ce choix.
Vous devriez avoir ceci en retour :
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config" adding new entry "olcDatabase=hdb,cn=config"
Bon, avant de passer à la partie graphique, on va voir comment ajouter un utilisateur depuis un fichier de LDIF tel que celui ci-dessous. Il contient un groupe et un utilisateur (et il est pompé de la doc d’ubuntu-fr l’une de mes sources pour ce howto), je l’appelle import.ldif :
# Create top-level object in domain
dn: dc=geekstuff,dc=fr
objectClass: top
objectClass: dcObject
objectclass: organization
o: Geekstuff
description: Top domain geekstuff
# Admin user.
dn: cn=admin,dc=geekstuff,dc=fr
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
# Ci-dessous deux "ou" classiques en LDAP, il est preferable de les avoir.
dn: ou=people,dc=geekstuff,dc=fr
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=geekstuff,dc=fr
objectClass: organizationalUnit
ou: groups
dn: uid=elegall,ou=people,dc=geekstuff,dc=fr
objectClass: inetOrgPerson
uid: elegall
sn: Le Gall
givenName: Erwan
cn: Erwan Le Gall
displayName: Erwan Le Gall
userPassword: {SSHA}eeJU9hDKOAZCQK/OScKAbxt2OslkshaL
mail: elegall@localhost
o: Geekstuff
dn: cn=sales,ou=groups,dc=geekstuff,dc=fr
objectClass: groupOfNames
cn: sales
Et on l’inclue dans notre annuaire :
sudo ldapadd -x -D cn=admin,dc=geekstuff,dc=fr -W -f import.ldif
Ouf. Bon, en graphique plutôt ?
sudo aptitude install openjdk-6-jdk wget -O - http://archive.apache.org/dist/directory/studio/stable/1.5.3.v20100330/ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz.md5 2>/dev/null md5sum ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz # Vérifier l'intégrité du téléchargement tar xvzf ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330.tar.gz sudo mv ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330 /opt/ApacheDS ln -s /opt/ApacheDS/ApacheDirectoryStudio /usr/local/bin/ ApacheDirectoryStudio
It works !
Peupler l’annuaire
Sur ApacheDS, choisissez, cliquez sur le menu en bas à gauche et choisissez « Connexions ». Cliquez ensuite sur l’icone « LDAP ». Choisissez ensuite un nom pour votre connexion puis :
- Nom d’hôte : localhost
- Port : 389
- Choisir une connexion sans chiffrement
Testez les paramètres réseau et passez à l’étape suivante. Notre cn de connexion est « cn=admin,dc=geekstuff,dc=fr« , c’est à présent ce que l’on va renseigner.
Il suffit de valider pour profiter de la belle interface d’Apache Directory Studio. L’utilisation se passe de commentaires (et c’est assez pratique pour changer un ou deux attributs).
Ok. Ce tuto n’est pas des meilleurs (trop long et il faut que je le revalide entièrement). Je pense que j’en referais un avec quelques fichier et un script qui réalisera les étapes initiales, nécessaires à la génération du DIT et au remplissage de celui-ci. Quoi qu’il en soit, le prochain article traitera sans doute de l’interconnexion de l’IdP de Shibboleth avec notre annuaire LDAP fraîchement installé.
Shibboleth et jetty sur ubuntu 11.04
1Juste parce que je n’ai pas moyen de faire tourner une debian dans une VM sur mon desktop… Déjà que faire tourner un serveur d’appli c’est pas gagné.
Installation des prérequis
En gros, il s’agit du serveur d’authentification sur lequel les services renverront l’utilisateur. Pour simplifier, mon LDAP tournera sur la même machine.
Prérequis 1 : Un serveur d’appli Java
Parce que c’est plus fun, on le fait avec un jetty, ça me donne l’occase de regarder si c’est vraiment plus light que Tomcat. À la mode « le gars qui n’y connaît rien à java », j’installe la version fournie par ubuntu.
sudo aptitude install openjdk-6-jdk jetty [...] Le répertoire personnel `/usr/share/jetty' n'a pas été créé. * Not starting jetty - edit /etc/default/jetty and change NO_START to be 0 (or comment it out). [...]
Ok, démarrons les hostilités : Le coup du « Le répertoire personnel n’a pas été créé » c’est de la flûte : c’est le adduser qui devrait dire « le répertoire existe déjà ». Pour la seconde ligne, ça parle de soit non ?
sudo sed -i "s/NO_START=1/NO_START=0/" /etc/default/jetty
Ok, facile à installer Jetty. C’est pour ça que les devs doivent aimer en fait.
Bon, je me suis fais avoir. Après une lecture plus attentive de la doc de shibboleth, il me faut une version de jetty comprise entre la 7.0 et la 7.3.0 Ni plus, ni moins… C’est fun java hein ?
C’est reparti (après avoir fait un purge de mon paquet jetty initialement installé).
sudo aptitude install openjdk-6-jdk
C’est parti à la recherche d’un jetty compatible. On va prendre la 7.3.0 dans le doute :
wget http://dist.codehaus.org/jetty/jetty-hightide-7.3.0/jetty-hightide-7.3.0.v20110203.tar.gz wget -O - http://dist.codehaus.org/jetty/jetty-hightide-7.3.0/jetty-hightide-7.3.0.v20110203.tar.gz.md5 2>/dev/null md5sum jetty-hightide-7.3.0.v20110203.tar.gz
On vérifie le résultat et on continue :
tar xvzf jetty-hightide-7.3.0.v20110203.tar.gz sudo mv jetty-hightide-7.3.0.v20110203 /opt
vala… pas dur.
Prérequis 2 : un certificat ssl
Un petit rappel ne fait pas de mal, en plus sous ubuntu il n’y a rien à faire :
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/localhost.pem
Il faut simplement indiquer ne nom d’hôte… facile non ?
Installation de l’IdP
Ok, on est dans le vif du sujet. Il s’agit d’une webapp, l’installation n’a donc aucun intérêt. Je prends la dernière version à ce jour :
wget http://www.shibboleth.net/downloads/identity-provider/latest/shibboleth-identityprovider-2.3.0-bin.zip wget -O - http://www.shibboleth.net/downloads/identity-provider/latest/shibboleth-identityprovider-2.3.0-bin.zip.md5 2>/dev/null md5sum shibboleth-identityprovider-2.3.0-bin.zip
On continue en extrayant le contenu de l’archive :
jar -xf shibboleth-identityprovider-2.3.0-bin.zip cd shibboleth-identityprovider-2.3.0/ sudo sh ./install.sh
Ok si vous obtenez un :
Error: JAVA_HOME is not defined correctly.
Le truc habituel… le script d’installation vérifie que le fichier « /usr/bin/java » soit bien exécutable. Sauf que c’est un lien symbolique, donc il ne l’est pas. Le truc que je fais ? Je bourrine un peu en ajoutant cette ligne au début du script install.sh :
JAVA_HOME="/usr/lib/jvm/java-6-openjdk/jre"
On relance et on répond qu’on veut l’installer dans « /opt/shibboleth-idp » comme proposé par défaut (ça me va bien). On met à nouveau le nom d’hôte. Dernière question sur un mot de passe pour le keystore, attention, il s’affiche en clair quand vous le saisissez.
Maintenant on copie le war dans notre serveur d’appli, facile « cp » je commence à maîtriser j’crois :
sudo cp /opt/shibboleth-idp/war/idp.war /var/lib/jetty/webapps/
Et on déploie tout ça (magie des serveurs d’appli, toujours inconnue des admins classiques) :
sudo /etc/init.d/jetty start tail -n 2000 -f /var/log/jetty/*.stderrout.log
Et VLAN, malédiction du java (c’est là ou un admin classique commence à rouspéter « java quelle daube ») : une stacktrace. Mais pour une fois c’est parlant : « Error creating bean with name ‘shibboleth.OpensamlConfig’ defined in URL [file:/opt/shibboleth-idp/conf/internal.xml]« … Il suffit de configurer notre nouveau joujou.
Un peu de doc : https://wiki.shibboleth.net/confluence/display/SHIB2/IdPJetty7Prepare
export JETTY_HOME=/opt/jetty-hightide-7.3.0.v20110203/
mkdir $JETTY_HOME/lib/endorsed
ln -s /opt/shibboleth-idp/lib/*.jar $JETTY_HOME/lib/endorsed/
ln -s /opt/shibboleth-idp/lib/endorsed/* $JETTY_HOME/lib/endorsed/
cd $JETTY_HOME
echo "etc/shib-delegatessl.xml" >> start.ini
echo "-Djava.endorsed.dirs=${JETTY_HOME}lib/endorsed" >> start.ini
echo "-Xmx512m" >> start.ini # Ne pas hésiter à augmenter le 512 si on a plus de ram
echo "-XX:MaxPermSize=128m" >> start.ini
wget http://shibboleth.internet2.edu/downloads/maven2/edu/internet2/middleware/security/jetty7/jetty7-dta-ssl/1.0.0/jetty7-dta-ssl-1.0.0.jar -O ${JETTY_HOME}/lib/ext/jetty7-dta-ssl-1.0.0.jar
OK maintenant on créé le fichier $JETTY_HOME/etc/shib-delegatessl.xml et on le rempli avec les infos suivantes :
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <Call name="addConnector"> <Arg> <New class="edu.internet2.middleware.security.jetty7.DelegateToApplicationSslSelectChannelConnector"> <Set name="keystore">/opt/shibboleth-idp/credentials/idp.jks</Set> <Set name="password">PASSWORD</Set> <Set name="port">8443</Set> <Set name="maxIdleTime">30000</Set> <Set name="acceptors">2</Set> <Set name="acceptQueueSize">100</Set> </New> </Arg> </Call> </Configure>
Cela est utilisé pour écouter les connexion directes des services providers qui ne passeront pas par le serveur web. Si vous voulez plus de détail, je vous redirige vers la doc de shibboleth. Attention : dans le fichier ci-dessus j’ai repris le chemin du répertoire d’installation de l’IdP de shibboleth, si vous n’avez pas le même, pensez à le changer. Il faut également changer le « PASSWORD » avec le mot de passe rentré pour le keystore lors de l’installation de l’IdP.
Presque fini : on déclare l’emplacement du war pour que Jetty le déploie. Il faut éditer le fichier $JETTY_HOME/contexts/idp.xml avec les informations suivantes :
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="war">/opt/shibboleth-idp/war/idp.war</Set> <Set name="contextPath">/idp</Set> <Set name="extractWAR">false</Set> <Set name="copyWebDir">false</Set> </Configure>
Attention : encore une fois vous retrouvez le « /opt/shibboleth-idp » dans le contenu du fichier.
OK gogogo !
sudo java -jar start.jar
Pour vérifier : https://localhost:8080/idp/profile/Status : si le mot « ok » apparaît, c’est gagné.
Il reste à configurer le tout. Et ça fera sans doutes l’objet de mon prochain article. Seule différence : je ferais peut-être les manips sur un tomcat, pas parce que je n’aime pas jetty, mais parce que tomcat est la brique « standard » là où je bosse. Enfin, je pense pas que ça change grand chose et je m’amuserai même sans doute à préconfigurer sur jetty pour valider sur tomcat.
To be continued.
Avahi et .local
0Symptôme classique : un problème qui paraît sans solution…
Il y a deux jours, j’essaie simplement de résoudre l’adresse machine.domaineclient.local sur le réseau d’un client. Le client m’indique que ca fonctionne bien sur sa machine, pas sur la mienne…
Réaction directe : vérifier le serveur DNS. Le « domaineclient.local » est bien définit dans le serveur DNS… Mauvaise piste.
Sous Windows pas de soucis, sous ma Fedora, sous leur Mac : ça ne marche pas. Je contourne temporairement avec le fichier /etc/hosts mais ça n’est pas satisfaisant.
En fait, c’est zeroconf (ou assimilé) qui indique que « .local » est réservé pour la résolution de machines non enregistrées sur le domaine. Et comme j’utilise avahi, ma machine essayait de trouver une machine qui se serait définie comme machine.domaineclient sans être enregistrée sur le réseau.
Pour faire court :
Si vous ne parvenez pas à résoudre un nom DNS défini dans votre Bind, que ce nom se termine en .local , rien de plus simple, il suffit d’effectuer cette manipulation sur votre poste de travail :
/etc/init.d/avahi-daemon stop
Bon après, il faudra bien sûr changer cette configuration pas « Zeroconf-Compliant » de votre DNS et ne plus utiliser « .local » comme TLD.
Ubuntu 10.04, on repasse les boutons à droite…
0Pour faire rapide : sous gnome, pour remettre les boutons à droite en une commande.
gconftool-2 –set /apps/metacity/general/button_layout –type string « menu:minimize,maximize,close »
Fosdem 2010
0Ma première participation au Fosdem a été très agréable… Je ne vais pas m’étendre sur l’ensemble de mon WE en bonne compagnie. Simplement, parmi les quelques conférences auxquelles j’ai assisté, j’en retiens deux en particulier :
- « How to be a good upstream » par Petteri Räty, mainteneur Gentoo.
- « Debian and Ubuntu » par Lucas Nussbaum, mainteneur Debian et Ubuntu. Diapositives de la présentation.
Ces deux conférences m’ont plût d’une part grâce à leur contenu de qualité (mais beaucoup d’autres que j’ai vu l’étaient également) mais surtout parce qu’elles ont été toutes deux suivies par des échanges passionnés. Pour ces deux conférences les salles étaient remplies (surtout pour la seconde où plusieurs dizaines de personnes ont du rester debout), mais tout le monde s’est senti concerné par les problématiques abordées et les propositions soulevées.
La première a permis une discussion autour de la communication entre les projets open source et les systèmes d’exploitation qui les fournissent. Quelques tensions n’ont pas pu être apaisées (l’utilisation maven et le packaging) mais d’autres ont en revanche été très constructives.
Dans la seconde conférence, la vision de Lucas est assez passionnée mais très juste également. Il rappelle que 74% des paquets Ubutnu sont obtenus depuis un import direct de Debian, sans retraitement ni mainteneur dédié. Il explique également qu’à l’inverse, Debian devrait profiter de l’importante masse d’utilisateurs qu’apporte Ubuntu pour renforcer sa connaissance des bugs et problématiques sur les logiciels packagés. Pour résumer Ubuntu et Debian font partie d’un écosystème ou le travail en symbiose est de rigueur.
Ce fût deux jours très intenses, mais si je devais ne garder que deux conférences sur celles que j’ai vues, ce serait celles-ci… Qui devraient être bientôt disponibles en vidéos.