= Installation de auf-django-users sur une base de données NSS existante = La procédure que je vais décrire (ainsi que les commandes SQL) est quasiment exactement ce qu'il faut faire pour installer auf-django-users sur le modèle de base de données décrit ici : http://wiki.auf.org/wikiteki/AuthentificationCentralis%C3%A9e/NssMysql. On part de l'ancien modèle de Nss qui est existe déjà dans plusieurs implantations. L'idée générale est de ramener la base de données dans un schéma tel que l'application auf-django-users puisse en gérer les utilisateurs qui se trouvent dans la table users. == Commençons par installer les paquets necessaires == Rajoutons cette ligne dans /etc/apt/sources.list : {{{ deb http://apt.auf.org lenny auf }}} Puis installons successivement : '''apache2''', '''auf-keyring''', '''auf-django-users''', '''libapache2-mod-wsgi'''. == Tapons les commandes SQL necessaires == Je suppose que la base de données s'appelle '''authnss''', que l'utilisateur à configurer dans l'appli sera '''django''' et que son mot de passe sera '''sabata''' et qu'il se connectera depuis la machine elle même '''127.0.0.1'''. Et ça donne ça : {{{ // Création de l'utilisateur qui accèdera à la base de données mysql> grant -> select, insert, update, delete, create, drop, alter, index -> on authnss.* -> to django@127.0.0.1 -> identified by "sabata"; // Ajout de la colonne source : Les utilisateurs locaux auront LOCAL comme source // L'appli ne gèrera que les comptes locaux mysql> alter table users -> add column source -> varchar(15) -> default 'LOCAL' -> not null; // Ajout d'une date de création mysql> alter table users -> add column creation datetime -> default "1970/01/01" -> not null ; // Ajout d'une date de modification mysql> alter table users -> add column modification -> datetime -> default "1970/01/01"; // Préparation à la suppression de la clé primaire uid mysql> ALTER TABLE users MODIFY uid int(11) NOT NULL UNIQUE; // On remplit les champs de création et de modification à partir de maintenant pour tous les comptes (un point de départ) mysql> update users -> set creation = now() , modification = now() -> where uid <> 'quelquechose'; // Tous les utilisateurs étant locaux, on met la source à LOCAL mysql> update users -> set source = 'LOCAL' -> where source <> 'LOCAL'; // gid est un entier int10 mysql> alter table users -> modify column gid -> int(10) -> not null default 10000; // gid à 10000 pour tout le monde : un groupe users sera créé par la suite avec gid 10000 mysql> update users -> set gid = 10000 -> where gid <> 10000 ; // Voilà ! Création du groupe users gid 10000 mysql> insert into groups -> values ('users','x','10000'); // Changement du champ rowid en id : on utilise plutôt id dans auf-django-users mysql> alter table grouplist -> change rowid id -> int(10) auto_increment ; // Changement de clé primaire : username devient la clé mysql> ALTER TABLE users DROP PRIMARY KEY, ADD PRIMARY KEY(username); // On augmente la taille de username dans grouplist mysql> ALTER TABLE grouplist modify username varchar(128) NOT NULL; }}} '''FIN des commandes SQL''' == Configuration de auf-django-users et lancement == # vi /etc/auf-django-users/conf.py {{{ DATABASE_ENGINE = 'mysql' # parce que nous avons une base de données mysql DATABASE_NAME = 'authnss' # parce que notre base de donées s'appelle authnss DATABASE_USER = 'django' # L'utilisateur qui a reçu les droits necessaires DATABASE_PASSWORD = 'sabata' # Son mot de passe DATABASE_HOST = '127.0.0.1' # L'IP du serveur qui a la base de données }}} Rien d'autre ne change dans le fichier à ce stade # auf-django-users-manage.py syncdb Puis repondre aux questions qui sont posées : l'administrateur de django-users, son email, son mot de passe, ... Si on a des erreurs à ce niveau, c'est que nous avons raté quelque chose dans ce qui est fait plus haut, lire correctement les erreurs et faire le changement qu'il faut dans la base de données à l'aide d'une requête SQL en se basant sur les commandes SQL plus haut. Puis ajoutons cette ligne dans un virtualhost : {{{ Include /etc/auf-django-users/apache.conf }}} # apache2ctl graceful # Puis accédons à notre page web avec le nom donné dans le virtualhost. == Cas d'erreur == On rencontre dans certains cas d'utilisation de l'appli des erreurs du genre '''data truncated''' ou des trucs qui parlent de lignes trop longues ... Ce type d'erreur est plutôt lié à la base de données mysql et non à django. Il faut donc encore taper quelques SQL pour corriger : {{{ mysql> alter table auth_group default character set utf8; mysql> alter table auth_group_permissions default character set utf8; mysql> alter table auth_message default character set utf8; mysql> alter table auth_premission default character set utf8; mysql> alter table auth_user default character set utf8; mysql> alter table auth_user_groups default character set utf8; mysql> alter table auth_user_user_permissions default character set utf8; mysql> alter table django_admin_log default character set utf8; mysql> alter table django_content_type default character set utf8; mysql> alter table django_session default character set utf8; }}} Puis refaire le syncdb (auf-django-users-manage.py syncdb) et le rechargement de apache. == Cas de base de données un peu plus sophistiquées == En général, la différence se situe au niveau du champ id_noyau qui existe au niveau de la table users. Il faut donc transformer id_noyau en source comme ceci : {{{ mysql> alter table users -> change column id_noyau source -> varchar(15) -> default 'LOCAL' -> not null; }}} Puis, il n'y a pas qu'une seule source qui est locale, mais plusieurs. En générale : * ce qui est égal à -1 dans id_noyau correspondra à LOCAL pour source * ce qui est -2 pour id_noyau sera AUF pour source * si autre chose existe, on pourra trouver des noms les correspondant. Ce qui donne les requêtes suivantes : {{{ mysql> update users -> set source = 'LOCAL' -> where source = -1; mysql> update users set source = 'AUF' where source = -2; mysql> update users set source = 'Autre' where source <> 'AUF' and source <> 'LOCAL'; }}} Les autres requêtes qui ne portent pas sur source ne changent pas, elles sont les mêmes que celles déjà écrites plus haut. == Pour les plus curieux == Vous pouvez voir dans ce répertoire : '''/usr/share/python-support/auf-django-users/aufusers''' et écrire vos propres contrib ; '''update-python-modules auf-django-users''' pour valider les modifs.