Générer ses comptes kwartz depuis SIECLE et Pronote

Plusieurs fois par an, il faut générer les fichiers d’importation pour kwartz. Sconet/kwartz permet déjà cela, mais il ne n’associe pas automatiquement les profs à leurs classes. J’ai donc développé un petit outil en python qui utilise les données de Pronote pour créer ces affectations (de manière optionnelle).

Récupération des données

Exportation de SIECLE

(Pour obtenir la liste des élèves et leurs affectations.)

Avec le compte d’un personnel administratif, se connecter sur SIECLE puis faire une exportation xml de la Base Élève Établissement (BEE). Le fichier obtenu étant zippé, il faut de décompresser avant utilisation.

Exportation Kwartz

(Pour obtenir l’état actuel des comptes.)

À partir de la version 5, dans l’onglet Utilisateurs > Gestion des comptes > Exporter > Exporter le fichier
Le fichier arrive sur le compte winadmin de kwartz (\\kwartz\winadmin\Listes utilisateurs).

Exportation Pronote

(Facultatif – Pour obtenir la liste des profs et leurs affectations.)

Se connecter en administrateur à Pronote puis :
Fichier > Autres imports/exports > Exporter un fichier texte
Dans la liste déroulante « Type de données à exporter », choisir Services, puis cliquer sur Exporter.

La moulinette

Avec nos fichiers, il ne reste plus qu’à lancer le script en précisant le nom du groupe dans lequel se trouve les profs sur kwartz :

python3 crea_kwartz.py profs ElevesSansAdresses.xml Exportation_kwartz.txt [EXP_SERVICES_pronote.txt]

Quatre fichiers sont générés :
* Aajouter.txt pour les comptes à ajouter ;
* Amodifier.txt pour les comptes à modifier ;
* Asupprimer.txt pour les comptes à désactiver (à affecter au groupe « anciens »), ou à supprimer ;
* Messages.txt contenant tous les messages d’avertissement provoqués par la génération des trois fichiers précédant.

Reste plus qu’à retourner sur kwartz ( Utilisateurs > Importer ) pour mettre à jour les comptes.

J’essaierais d’ajouter une interface web à l’occasion pour rendre plus pratique l’exécution du script :)

Kwartz et OwnCloud

Depuis la version 5, kwartz intègre une solution ownCloud (toujours en version 4.0.7 jusque aujourd’hui, c’est-à-dire la 6.0r1). Un des cotés pratique de ownCloud est le client de synchronisation ; voici comment le paramétrer.

Il faut d’abord récupérer une version du owncloud-client compatible ; en l’occurrence il s’agit de la 1.0.5. Comme cette version n’est plus distribuée depuis Mathusalem, je l’ai mis à disposition sur un de mes serveurs.

Pendant l’installation, il faut préciser l’adresse de son serveur (« http://IP_DU_SERVEUR_KWARTZ/owncloud »), ainsi que ses identifiants de connexion :
owncloud_serveur

Puis il faut valider le certificat de sécurité ssl du serveur :
owncloud_ssl

Après l’installation, il faut encore supprimer le profil créé par défaut, ajouter une nouvelle synchronisation en sélectionnant un dossier local, puis en choisissant le dossier à synchroniser (par exemple « Home/Travail/synchro » pour synchroniser le dossier « synchro » du répertoire de travail) :
owncloud_synchro

En précisant uniquement « Home/Travail », cela synchronise tout le répertoire de travail :)

Personnaliser le portail captif de Kwartz

Kwartz 5 et supérieur permet d’utiliser un portail captif pour les connexions wifi. Celui-ci est personnalisable ; ce qui pratique si on veut en faire une version qui est adaptée aux périphériques mobiles (ce qui n’est pas le cas de la version originale).

Il faut d’abord récupérer l’archive contenant les sources html/css du portail : dans Réseau > Portail captif > Personnalisation > Obtenir l’interface par défaut

En décompressant l’archive, il faut maintenant modifier les fichiers login.html et kwartz.css. En suite, il ne reste plus qu’à recompresser le tout dans un zip, et à l’envoyer sur le serveur : dans Réseau > Portail captif > Personnalisation > Parcourir, puis « Transférer le fichier … ».

Je mets en téléchargement ma version modifiée ^^ (En gros j’ai ajouté un tag meta viewport et un clospan oublié, retiré le margin du body, et ajouté un dégradé css en background).

Faire un fsck sur un disque vdi

La virtualisation, c’est bien ; mais comment vérifier l’état d’une partition root dans un disque vdi (sans utiliser de livecd :) ? qemu-nbd !

Sur debian, il faut d’abord installer le paquet qemu, puis charger le module :

rmmod nbd
modprobe nbd max_part=16

(max_part est le nombre maximum de partitions)

On monte l’image avec :

qemu-nbd -c /dev/nbd0 MON_IMAGE.vdi

On obtient un nouveau device /dev/nbd0 et pour chaque partition /dev/nbd0p1...2...3... que l’on peut utiliser avec mount.

Une fois terminé, on démonte le tout avec :

qemu-nbd -d /dev/nbd0

Avec une couche LVM en plus, le mapper trouve automatiquement les correspondances. Pour vérifier, on peut lister les partitions avec la commande pvs.

Reste plus qu’à lancer l’analyse :

fsck -f /dev/MON_IMAGE/root 

Source : http://serverfault.com/questions/210684/how-do-you-mount-a-vdi-image-on-linux

Partager une même installation PlayOnLinux avec les autres utilisateurs

Maintenant que nous avons un linux intégré au kwartz, il serait intéressant d’émuler des applications conçues pour windows, comme Office 2010. C’est exactement ce que permet wine et l’interface qui repose dessus : PlayOnLinux (abrégé POL).

Première limitation de wine, et donc de PlayOnLinux : l’installation d’une application est spécifique à un utilisateur (dans le dossier ~/.PlayOnLinux). Dans un environnement multi-utilisateurs, pas possible d’installer un programme de 2 Go à chaque fois. Une idée serait de copier un dossier POL fonctionnel, et de faire un lien symbolique dessus. Mais seconde limitation de wine : il faut aussi être propriétaire de ces fichiers.

On va donc avoir besoin d’un script qui modifie notre copie de POL à la connexion d’un utilisateur ; ceci n’est possible qu’en root, donc on va devoir configurer aussi sudo. Et il faudra encore modifier les raccourcis définis dans PlayOnLinux (~/.PlayOnLinux/shortcuts) pour qu’ils pointent bien chez l’utilisateur en cours. Tout un programme :)

Préparation de PlayOnLinux et sudo

Après avoir installé le logiciel (ici Office 2010) sur un compte de référence, copions le contenu de ~/.PlayOnLinux dans un dossier commun, par exemple /var/POL :

rm -rf /var/POL
cp -R ~/.PlayOnLinux /var/POL

Ensuite, créons un script de démarrage (/usr/local/bin/office.sh) qui prend en paramètre le nom de l’utilisateur se connectant :

#!/bin/bash
# Attribution du dossier POL
# $1 : username
groupe=$(id -gn $1)
uid=$(id -u $1)
POL=/var/POL
home=$(eval echo ~$1)
lien=$home/.PlayOnLinux

# Sauvegarde du lien précédent
if [ -d "$lien" ]; then
    mv $lien $lien.bak
fi
# Spécifique à Office 2010 : création du dossier utilisateur ...
users=$POL/wineprefix/Office2010/drive_c/users/$uid
mkdir $users
# ... et des liens symboliques pour que office puisse retrouver 
# les dossiers "Mes documents" et "Bureau"
if [ ! -h $users/Mes\ documents ];then
	ln -s $home $users/Mes\ documents
fi
if [ ! -h $users/Bureau ];then
	ln -s $home/Bureau/ $users/Bureau
fi
# Changement de propriétaire du dossier de POL
chown -h -R $1:$groupe $POL
ln -s $POL $lien
chown -h -R $1:$groupe $lien
# Copie des raccourcis sur le bureau
cp --preserve=ownership $POL/shortcuts/*.desktop $home/Bureau

On autorise à exécuter ce script en sudo (en fait, chown nécessite d’être root) sans mot de passe en créant un fichier /etc/sudoers.d/office contenant :

%users ALL=NOPASSWD: /usr/local/bin/office.sh

Ne pas oublier de le verrouiller en écriture pour éviter les fuites :

chmod +x-w /usr/local/bin/office.sh

Modification des raccourcis

Comme on a déplacé le dossier POL, les raccourcis permettant de lancer les apllications ne fonctionnent plus. Dans le dossier /var/POL/shortcuts, il faut d’abord modifier le script d’exécution ; par exemple avec Word 2010 :

#!/bin/bash
[ "$PLAYONLINUX" = "" ] && exit 0
source "$PLAYONLINUX/lib/sources"
export WINEPREFIX="$(eval echo ~$USER)/.PlayOnLinux//wineprefix/Office2010"
export WINEDEBUG="-all"
cd "$WINEPREFIX/drive_c/./Program Files/Microsoft Office/Office14"
POL_Wine "WINWORD.EXE"  "$@"

En fait, comme ~ n’est pas reconnu proprement, j’ai modifié la variable WINEPREFIX et la commande cd. « $(eval echo ~$USER) » permet de retrouver l’adresse absolue du home de l’utilisateur en cours.

On peut aussi créer un raccourci bureau ; pour cela on va créer un fichier Word_2010.destop comme suit :

[Desktop Entry]
Encoding=UTF-8
Name=Word 2010
Comment=PlayOnLinux
Type=Application
Exec=/usr/share/playonlinux/playonlinux --run "Microsoft Word 2010" %F
Icon=/var/POL/icones/full_size/Microsoft Word 2010
Name[fr_FR]=Word 2010
StartupWMClass=Word 2010.exe
Categories=

Ne pas oublier de lui donner les droits d’exécution :

chmod +x Word_2010.destop

Exécution à la connexion

Reste encore à lancer tout cela à l’ouverture d’une session graphique ; modifions le fichier /etc/xprofile comme suit :

#!/bin/sh
bash -c "sudo /usr/local/bin/office.sh $(whoami) > ~/.office.log 2>&1"

sudo permet de changer le propriétaire du dossier /var/POL, bash permet de lancer le script avec bash (et non sh qui est utilisé par défaut), et $(whoami) permet d’avoir le login de la personne se connectant. Et en cas de soucis, on a même un log dans le dossier personnel (~/.office.log).

Tada !

Création d’un réseau téléphonique SIP avec Asterisk

Le but est de mettre en place un serveur de téléphonie SIP interne.

D’abord, quelques points de vocabulaire :
* le registar est le serveur SIP ;
* une extension est en fait un « numéro de téléphone » ;
* l’identity est composée au moins d’un nom de compte, d’un mot de passe et de l’IP du serveur asterisk.

Le serveur

La première chose à faire est d’installer un serveur linux ; ici, j’ai utilisé un serveur Debian 7.

Au passage, j’ai testé AsteriskNow une distribution « prête à l’emploi », avec une sympathique interface web pour gérer son serveur facilement ! Le seul défaut que j’ai noté : l’impossibilité de faire passer les mises à jours à travers mon proxy (c’est apparemment un bug connu de freepbx).

Installons donc Asterisk manuellement :

apt-get install asterisk asterisk-config asterisk-prompt-fr-proformatique

La configuration d’Asterisk passe principalement par trois fichiers :
* /etc/asterisk/asterisk.conf : la configuration générale ;
* /etc/asterisk/sip.conf : le paramétrage du SIP et des comptes ;
* /etc/asterisk/extension.conf : la déclaration des numéros de téléphone.

Pour la configuration générale :

[general]
defaultexpirey=1800
dtmfmode=auto
qualify=yes

Pour chaque téléphone, il faut déclarer le poste dans /etc/asterisk/sip.conf (en remplaçant ce qui est en majuscule) :

[NOM_DU_TEL]
username=NOM_DU_TEL
secret=MOT_DE_PASSE
host=dynamic
context=SALLE_XXX
language=fr

On peut simplifier cela en créant un template de configuration :

[NOM_DU_TEMPLATE](!)
    language=fr
    host=dynamic
    type=friend...
...
[NOM_DU_TEL](NOM_DU_TEMPLATE)
    username=...

Il faut encore associer les numéros de téléphone aux postes ; dans /etc/asterisk/extension.conf :

[SALLE_XXX]
exten => 11,1,Dial(SIP/NOM_DU_TEL)
exten => 12,1,Dial(SIP/NOM_DU_TEL2)
...

Traduction : en composant le 11, on contact le poste NOM_DU_TEL

Reste plus qu’à lancer le service :

/etc/init.d/asterisk start

La conférence

Pour créer une salle de conférence, Astersik inclut un module appelé ConfBridge (remplaçant de MeetMe). Le fichier /etc/asterisk/confbridge.conf permet de définir notamment un nombre maximum de membres par conférence ; par exemple, ici pour avoir au maximum 10 participants :

[default_bridge]
max_members=10

Reste plus qu’à créer un numéro spécifique pour y accéder ; par exemple, voici ce qu’il faut ajouter à /etc/asterisk/extensions.conf pour que le 101 renvoie vers une salle de conférence :

exten => 101,1,Answer()
exten => 101,n,ConfBridge(101)

Interaction avec le serveur

Le serveur tourne comme un démon ; pour interagir avec lui, il faut se connecter sur sa console : asterisk -rv. De la, on a accès à un petit shell dont voici quelques commandes :

CLI> sip show peers    Affiche la liste des équipements connectés
CLI> core restart now  Redémarre le serveur
CLI> core reload       Recharge la configuration (après modification des fichiers de conf)
CLI> dialplan show     Affiche les extensions connues

Les téléphones

Ici, le but est d’authentifier chaque téléphone sur notre nouveau registar. Les téléphones dont je disposes sont des Snom 300 et des 320 (les deux configurations sont très proches).

Le paramétrage des ces téléphones se fait par une interface web. Voici ce que j’ai activé :
Setup > Advanced > QoS/Security > HTTP server
Définir un identifiant/mot de passe pour l’accès web

Setup > Identity 1 > Login
On rentre ici les paramètres de connexion au registar :
– account : le username
– password : le secret
– registar : l’ip du serveur asterisk

Setup > Identity 1 > RTP => RTP Encryption: off
Désactivation du RTP (Real Time Protocol) chiffré (cela posait des problèmes chez moi)

Setup > Advanced > Behavior > Keys => Block DND : on
Désactivation du DND (Do not disturb)

Setup > Advanced > QoS/Security > Security => Administrator Mode : off
Pour empêcher de passer en admin sur le tel

Setup > Advanced > Update => Update Mode : Never update, do not load settings
Pour éviter un message d’erreur concernant l’absence de provisioning (que l’on n’utilise pas ici)

Il est possible d’exporter la configuration d’un téléphone (sans les mots de passe d’administration)
Status > Settings > « Click _here_ to save the settings. »
L’importation se fait à partir de :
Setup > Advanced > Update > Upload Setting File manually
Reste alors à modifier les mots de passe et les identity.

Pour la suite

À voir pour la suite : la connexion avec un fournisseur SIP externe pour pouvoir passer des appels vers l’extérieur, et ajouter des ordinateurs à ce réseau pour pouvoir faire interagir téléphones et postes informatique (Jitsi à l’air prometteur pour cela).

Liens utiles

* http://artisan.karma-lab.net/comment-mettre-place-sa-telephonie-grace-a-asterisk : Pour l’installation d’un serveur asterisk
* https://wiki.asterisk.org/wiki/display/AST/ConfBridge+10#ConfBridge10-ConfBridgeConcepts : Pour la création d’une salle de conférence

Client linux (xubuntu 14) et réseau kwartz

Cet article fait suite à un article précédent concernant ubuntu 13. Entre temps, je suis passé sur xubuntu 14 qui est pour moi plus léger et plus adaptable à mes besoins ^^

Récupération du nom de l’ordinateur par dhcp

Lors de la création d’une image linux, le fichier /etc/hostname (qui indique l’identité de l’ordinateur) est enregistré lui aussi. Ainsi, chaque image déployée aura le même nom inscrit… pas cool. L’idée ici est de récupérer de manière dynamique le nom de l’ordinateur sur le kwartz et de mettre à jour le fichier hostname.

Le script fournit par Iris (un hook à ajouter au démon dhcp) ne fonctionnait pas chez moi. Je l’ai simplement remplacé par un petit changement de paramètre au niveau du démon, dans /etc/dhcp/dhclient.conf : en désactivant le « send host-name », cela force d’une certaine manière le dhcp à mettre à jour /etc/hostname avec la bonne valeur.

Personnalisation des sessions

Pour créer des raccourcis pour chaque nouvel utilisateur, il suffit de copier le fichier .desktop correspondant dans le dossier /etc/skel/Bureau/
Ne pas oublier d’ajouter le droit d’exécution sur les fichiers :
chmod +x /etc/skel/Bureau/*.desktop

Pour le paramétrage de Firefox, il faut modifier le fichier /etc/firefox/syspref.js (pour la syntaxe, voir cette article sur mozillazine).

Modification de l’écran de connexion lightdm

On va modifier /etc/lightdm/lightdm.conf pour que lightdm offre/masque quelques fonctionnalités :
[SeatDefaults]
greeter-show-manual-login=true
# Pour pouvoir se connecter avec un nouveau nom sur l'ordinateur
allow-guest=false
# Désactive le compte invité
greeter-show-remote-login=false
# Désactive la connexion à distance (en utilisant un autre serveur pour s'authentifier)
greeter-hide-users=true
# Cache les utilisateurs précédents (et les comptes locaux)

Ajout automatique des imprimantes

Cups est trop efficace sur ce point : dès qu’on l’installe, il trouve toutes les imprimantes du réseau. Impossible de mettre ça dans les mains des élèves :)
D’abord, il faut désactiver la découverte automatique en remplaçant « Browsing On » par Browsing Off » dans /etc/cups/cupsd.conf .

Ensuite, j’ai créé un script d’installation qui se lance au démarrage de l’ordinateur et qui va lire un fichier ini présent sur le réseau et installer les bonnes imprimantes. La méthode d’installation et le format du fichier ini sont décrites dans l’entête du script : ptr.sh.

Conclusion

Tout ces choses sont repris dans le fichier integration_xubuntu_1404.sh

J’ai aussi séparé dans un script spécifique un ensemble d’installations/configurations pas indispensables mais toujours pratique à avoir et à adapter à son environnement : configurations_supplementaires.sh. On y trouve l’installation de paquets pédagogiques courants (java, geogebra, freeplane, etc.), et de quoi utiliser Micro$oft Office 2010 par wine/PlayOnLinux.

Problème d’accès à Sage suite au déplacement du serveur

Suite à un changement d’adresse IP de notre Sage, la connexion aux bases et la création de bases depuis les postes clients ne se faisaient plus et le message d’erreur Fournisseur de canaux nommés : Impossible d’ouvrir une connexion à SQL Server [53] apparaissait après un timeout.

Voici ce qu’il est bon de vérifier sur un poste client lorsqu’on déplace un serveur Sage :

  • Dans le panneau de configuration > Sage installation, définir la nouvelle IP du serveur ;
  • Dans %USERPROFILE% ou %ALLUSERSPROFILE% > Application Data > Sage > Comptabilité (par exemple) > C_MODEL.MAE : mettre la nouvelle IP du serveur ;
  • Dans %USERPROFILE% ou %ALLUSERSPROFILE% > Documents partagés > Sage > Sage Entreprise > BIJOU.MAE : mettre la nouvelle IP du serveur ;
  • Dans le fichier .mae désiré, sur la ligne ServeurSQL, remplacer le nom du serveur par l’adresse IP peut parfois aider.

Ajouter un connecteur Pronote à l’ENT K-d’école

Sur le serveur Pronote

Le but est d’activer l’authenification CAS. À noter que mon serveur pronote est sur le réseau administratif.  Il existe 5 tutoriels vidéos sur le site de Pronote pour la configuration (voir les liens en bas). En résumé, il faut aller sur le serveur Pronote.Net, il faut d’abord couper la publication puis aller dans l’onglet « ent ».

Il faut ensuite activer l’authentification et préciser l’url du cas ( https://cas.savoirsnumeriques5962.fr ). Puis sélectionner HTTP (sur port 8080, car la connexion HTTPS par port 443 à l’air d’être filtré par le pare-feu administratif) et réserver le préfixe. Il reste encore à entrer l’adresse publique du serveur pronote et pourquoi pas, autoriser l’authentification en dehors de l’ent (si les élèves et les parents ont aussi leurs identifiants/mdp pronote). À noter que dans ce cas l’adresse de connexion est particulière : http://IP_DU_PRONTE/?login=true

pronote_net_1

À droite, d' »Activer l’authentification », il faut encore cliquer sur le petit marteau. Dans « Reconnaissance de l’utilisateur », choisir « Avec l’identifiant Pronote de l’utilisateur ». Reste à remplir le code RNE de l’établissement, le code de rapprochement est PRONOTECAS et choisir « K-d’école » dans la liste déroulante en-dessous. Valider. Publier.

pronote_net_2

Sur l’ENT

Il faut créer un connecteur SSO Pronote avec CAS. L’aide en ligne est bien faite à ce sujet : avec le compte admin, il faut aller dans l’aide en ligne, Administration > Gestion Portail > Les connecteurs NPdC > Pronote avec CAS.  En résumé, il faut au moins remplir comme suit :

  • Code : PRONOTECAS
  • Type de SSO : Pronote avec CAS
  • URL : URL publique de Pronote.net (généralement une adresse ip)
  • Type Xiti : En fonction du service « pronote.net » choisi. Dans le cas de plusieurs services, choisissez « Services de vie scolaire ».
  • Intitulé : Le nom qui sera affiché.

Pour l’icône, voici un exemple fait maison : connecteur_pronote et en négatif connecteur_pronote-neg.

L’association du « compte de l’ENT » du « compte pronote » est en fait une propriété de chaque profil ENT.  Pour associer les deux automatiquement et ne pas avoir à modifier tous les comptes utilisateur, il faut exporter les comptes de pronote. À partir d’un client Pronote, Fichier > Socles ENT > Exporter les identifiants Pronote. Cela génère un fichier xml qu’il faut importer sur l’ENT dans Gestion Portail > Importer les identifiants Pronote. Concernant le « mode d’import » à utiliser, il faut mieux utiliser le mode complet pour le premier import, et le partiel pour les fois suivantes (les associations sont écrasées lors d’un import complet). Il ne reste plus qu’à résoudre les correspondances manquantes.

À la première connexion, l’utilisateur devra juste valider l’association.

Liens utiles

La navigation des tutoriels vidéos sur Pronote n’étant compatible avec aucuns navigateurs web (j’étais bien trop dépité pour essayer avec  IE, surtout que je ne l’ai pas), voici la liste des tutos qui nous intéressent ici :

Open Sankoré (2.1) et Net Support School (10.70)

Juste pour éviter à certains quelques heures de recherches, les deux sont incompatibles (tout du moins sur windows xp). Pas au premier abord mais dès que l’on veut utiliser la fonction « Bureau » de Sankoré, l’écran devient noir : plus de fond, plus d’icônes.

Reste à choisir entre remplacer un logiciel récent et gratuit, ou payer pour remplacer un vieux logiciel. Je crois que je vais prendre la première, surtout que iTALC n’a pas l’air de poser le soucis, ce qui est moins certains pour la dernière version de NSS.