No description
Find a file
Gabriel Detraz 945801053d Merge branch 'master' into 'master'
Envoie de mail automatique, état de l'imprimante

L'imprimante envoie un mail quand elle est débranchée ou si elle n'a plus de papier.

See merge request !3
2015-12-05 19:01:51 +01:00
printlib@027f158ddf initial commit 2014-07-08 16:38:04 +02:00
.gitignore draft de readme 2015-03-20 15:59:44 +01:00
.gitmodules initial commit 2014-07-08 16:38:04 +02:00
__init__.py initial commit 2014-07-08 16:38:04 +02:00
AdafruitThermal.py initial commit 2014-07-08 16:38:04 +02:00
client.py dé-tabification 2015-11-22 17:47:30 +01:00
common.py Nom explicite pour le fichier dans /var/run 2015-12-03 12:29:40 +01:00
config.py.example Parce que CransTicketDebug est devenue CransTicketAux 2015-11-10 18:08:59 +01:00
daemon.py Correction mel de contact 2015-12-05 18:16:02 +01:00
dump.py [dump.py, client.py] Support complet des impressions de factures 2015-08-27 18:11:48 +02:00
dump_creds.py Rajoute une option forced (ne demande pas de confirmation, pour l'intranet et l'app de cablage) 2015-11-03 01:31:21 +01:00
initscript [common.py,daemon.py,initscript] Ecriture du daemon crans_ticket 2014-09-10 23:29:32 +02:00
logo_crans.png initial commit 2014-07-08 16:38:04 +02:00
melPapier Mel imprimante est débranché ou plus de papier 2015-12-05 18:09:16 +01:00
melPasPapier Mel imprimante est débranché ou plus de papier 2015-12-05 18:09:16 +01:00
melSecteur Mel imprimante est débranché ou plus de papier 2015-12-05 18:09:16 +01:00
melSurBatterie Mel imprimante est débranché ou plus de papier 2015-12-05 18:09:16 +01:00
README.md [README] Comment démarrer CransTicket automatiquement 2015-09-19 03:06:44 +02:00
reset_pass.py Utilise argparse pour gérer argv 2015-09-20 12:09:50 +02:00

Crans Ticket

Matériel

Installation du dépôt sur l'imprimante

Paquets nécessaires à cransticket :

#rajouter wheezy-backports dans sources.list
apt-get update
apt-get -t wheezy-backports python-pika
apt-get install python-imaging

Pour le dépôt lui-même :

git clone $le_dépot
cd $le_dépot
git submodule init
git submodule update

On peut tester l'imprimante seule en lançant dump.py.

Autorisations sur rabbitmq

Ci dessous, le serveur rabbitmq s'appelle "civet" et le client "cransticket" se nomme "rasputin".

sur civet: sudo rabbitmqctl add_user rasputin $mdp sudo rabbitmqctl set_permissions rasputin "(amq.default|CransTicket)" "(amq.default|CransTicket)" "(amq.default|CransTicket)"

TODO (à mettre en forme dans la doc)

sudo rabbitmqctl list_permissionsr
sudo rabbitmq list_permissions
sudo rabbitmqctl list_queues
sudo rabbitmqctl help | less
sudo rabbitmqctl trace 
sudo rabbitmqctl trace_on
sudo less /var/log/rabbitmq/rabbit@civet.log
sudo rabbitmqctl list_permissions
sudo rabbitmqctl set_permissions oie ".*" ".*" ".*"
sudo rabbitmqctl set_permissions oie "CransTicket" "CransTicket" "CransTicket"
sudo rabbitmqctl set_permissions oie "CransTicket" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "amq\.default" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "amq\.default|CransTicket" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "amq\.default\|CransTicket" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "(amq\.default|CransTicket)" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "\(amq\.default|CransTicket\)" "CransTicket" "amq\.default"
sudo rabbitmqctl set_permissions oie "(amq\.default|CransTicket)" "CransTicket" "(amq\.default|CransTicket)"

Démarrer automatiquement le service CransTicket lors du boot de la machine

Pour que les tickets puissent être imprimés sans avoir besoin de lancer manuellement le service sur la raspberry, il faut :

  • Placer l'initscript de cransticket dans /etc/init.d/
  • Entrer la commande suivante

    update-rc.d cransticket defaults

Chiffrer la carte de la ticketeuse

Pour protéger les données stockées sur la carte des ticketeuses, on chiffre sa partition racine. Lorsque la raspberry boote, il est nécessaire de rentrer une passphrase pour déchiffrer le disque afin que la machine puisse finir de charger le système d'exploitation.

Cette passphrase peut-être rentrée au clavier sur la raspberry ou en se connectant avec une clé SSH.

Ce qui suit est un résumé de la procédure décrite sur cette page

Paquets nécessaires

  • busybox
  • cryptsetup
  • dropbear (Pour le déverouillage à distance uniquement)

Il faut donc commencer par les installer

# apt-get install busybox cryptsetup

Génération d'une première initramfs

On commence par générer une première initramfs

# mkinitramfs -o /boot/initramfs.gz

Puis on demande à la raspberry de booter dessus au prochain démarrage en ajoutant à la fin du fichier /boot/config.txt la ligne suivante :

initramfs initramfs.gz followkernel

Chiffrement du slash de la ticketeuse

À partir d'ici, il faut une autre machine sous Linux capable de monter la carte SD de la raspberry Il faut repérer lorsque la carte est insérée à quel périphérique elle correspond, par exemple /dev/sdb (cela peut très bien être /dev/mmcblk0p ou autre chose). On peut utiliser le dmesg pour ça.

On commence par sauvegarder sur la deuxième machine les données de la ticketeuse de façon à pouvoir chiffrer le / (ce qui va formatter la partition et donc effacer ses données) avant de les y remettre.

# dd if=/dev/sdb2 of=/tmp/raspbian-plain.img bs=4M
# e2fsck -f /tmp/raspbian-plain.img
# resize2fs -M /tmp/raspbian-plain.img

Toujours sur l'ordinateur (pas sur la rPi), il faut installer cryptsetup

# apt-get install cryptsetup

On chiffre ensuite la partition avant de la déverrouiller

# cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdb2
# cryptsetup -v luksOpen /dev/sdb2 sdcard

Puis on restaure les données

# dd if=/tmp/raspbian-plain.img of=/dev/mapper/sdcard bs=4M
# e2fsck /dev/mapper/sdcard
# resize2fs /dev/mapper/sdcard

Il reste à expliquer à la raspberry comment booter sur ces nouvelles partitions

# mkdir /tmp/pi_root /tmp/pi_boot
# mount /dev/sdb1 /tmp/pi_boot
# mount /dev/mapper/sdcard /tmp/pi_root

Le fichier /tmp/pi_boot/cmdline.txt doit être modifié : il faut remplacer root=/dev/mmcblk0p2 par root=/dev/mapper/sdcard cryptdevice=/dev/mmcblk0p2:sdcard. Il faut ensuite adapter le /tmp/pi_root/etc/fstab pour que la rPi boote correctement : /dev/mmcblk0p2 doit être changé en /dev/mapper/sdcard Enfin, un nouveau fichier /tmp/pi_root/etc/crypttab doit être créé. Il doit contenir :

sdcard  /dev/mmcblk0p2  none    luks

Tous les systèmesde fichiers peuvent alors être démontés et la carte replacée dans la rPi

# umount /tmp/pi_boot/ /tmp/pi_root/
# cryptsetup luksClose sdcard

Démarrage

Il faut alors connecter un écran et un clavier à la raspberry Pi, car le premier boot va rater, car la racine du système ne sera pas accessible avant que la partition ne soit déchiffrée. Lorsque le système ouvre un shell de secours (lignes commençant par (initramfs)), les commandes suivantes permettent de déchiffrer la carte pour que la rPi puisse continuer la séquence de boot

(initramfs) cryptsetup luksOpen /dev/mmcblk0p2 sdcard
(initramfs) exit

Une fois le boot terminé, on régénère l'initramfs

# mkinitramfs -o /boot/initramfs.gz

La machine peut être redémarrée sans crainte, la passphrase sera gentillement demandée lors du boot

Déchiffrement à distance

Pour déchiffer la partition contenant la racine du système à distance, on installe dropbear, un serveur SSH léger qui permettra de se connecter avant le montage de la racine avec un clé SSH.

# apt-get install dropbear

Le code de dropbear dans Raspbian contient une erreur qu'il faut corriger : À la ligne 296 du fichier /usr/share/initramfs-tools/scripts/local-top/cryptroot, il faut ajouter /sbin/ avant blkid, puis régénérer l'initramfs

# mkinitramfs -o /boot/initramfs.gz

Copier la clé SSH générée par dropbear (/etc/initramfs-tools/root/.ssh/id_rsa) sur un autre ordinateur, puis l'ajouter au fichier /etc/initramfs-tools/root/.ssh/authorized_keys. Ajouter juste avant le ssh-rsa l'instruction suivante :

command="/scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3`"

Il reste à régénérer l'initramfs une dernière fois

# mkinitramfs -o /boot/initramfs.gz

Il ne reste plus qu'à tester en redémarrant la rPi et en essayant de s'y connecter pour taper la passphrase

ssh -i chemin/vers/la/clé root@<nom de la ticketeuse>