====== Cups server ======
Le container cups-server à été crée pour simplifier l'utilisation de l'imprimante MiNET.
Son ip (192.168.102.100)
--- //[[no_pseudo@minet.net|Kevin Cazal]] 2017/04/05 16:15//
L'imprimante imprime par défaut en noir et blanc.
Pour imprimer en couleur :
lp -o BRMonoColor=Auto filename.docx
===== Services proposés par cups-server =====
* L'impression par le réseau.
L'avantage de cups server est que cette machine est déjà configurée pour l'imprimante MiNET.
Les pilotes Brother sont déjà installés, pas besoin de les installer sur votre PC.
Pas besoin d'installer des pilotes génériques (qui donnent souvent un résultat aléatoire) non plus.
* L'impression sans openvpn.
Si vous n'avez pas d'accès openvpn (que les accès SSH sur vpn1 ou 2) vous pouvez quand même faire
un scp du fichier que vous souhaitez imprimer sur la machine cups-server et imprimer grace à la commande
lp /chemin/vers/le_document_a_imprimer.pdf
(par défaut l'impression est sur le recto et en couleur)
* Le scan vers ftp.
Il est possible de scanner et d'envoyer directement vos document sur la machine cups-server et les récuper via ftp.
===== Tutos =====
==== Imprimer ====
=== Méthode rapide ===
l'utilisateur qui lance la commande lp doit faire partie du groupe lp ou s'appeller root
[user@mon_pc]$ scp mon_fichier.pdf user@192.168.102.100:.
[user@mon_pc]$ ssh user@192.168.102.100
[user@cups-server]$ lp mon_fichier.pdf
=== Méthode "proxy cups" ===
Vous pouvez installer cups sur votre PC et configurer une imprimante réseau. Sauf que au lieu de mettre l'IP de l'imprimante MiNET vous pouvez mettre l'IP de cups-serveur qui est déjà configuré avec les bons drivers.
==== Scanner ====
Sur l'imprimante quand vous voulez scanner: faites 'Scan' > 'to FTP' > 'scan_ftp'.
Pour récupérer le document:
* Sur nextcloud dans **/MiNET/Scanner**
===== Comment c'est fait =====
==== Impression ====
On installe cups sur le CT:
apt install cups
on installe les drivers Brother dispo sur [[http://support.brother.com/g/b/producttop.aspx?c=us_ot&lang=en&prod=mfc9340cdw_all]]
Sinon les drivers se trouvent sur le CD fourni avec l'imprimante. Un ISO de ce CD se trouve sur nextcloud dans MiNET/Firmware [[https://nextcloud.minet.net/index.php/apps/files/?dir=/MiNET/Firmware]].
On s'assure que le service cups est bien démarré.
On configure cups, soit via l'interface WEB sur http://192.168.102.100:631
(à noter que par défaut cups autorise la connexion que depuis 127.0.0.1, pour se connecter sur l'interface Web depuis une autre machine il faut changer la conf de cups et rélancer le service)
soit en ligne de commande (cf la doc de cups).
TODO: interface web pour imprimer quand on est vraiment mauvais avec la ligne de commande
==== Scanner ====
Pour relier le scanner à un ftp:
On installe un serveur ftp:
apt install pure-ftpd xmlstarlet curl
**Obsolète:**
J'ai choisi pure-ftpd car sa configuration initiale fait tout ce dont on a besoin: pas de ftp anonyme, les home directories des utilisateurs standard sont disponible en ftp (avec authetification PAM), pas de ftp pour le compte root.
Il nous reste donc à créer un utilisateur et définir son home directory (qui va être l'endroit où seront stockés les fichiers scannés)
adduser --home /srv/scanner_ftp/ scanner_minet
pure-ftpd est maintenant configuré avec un utilisateur virtuel chrooté (il n'est plus possible de se logger avec PAM et de voir le contenu des dossiers autre que la racine du serveur ftp).
De plus un script transfère automatiquement les fichiers uploadés sur le ftp sur Nextcloud (dans /MiNET/Scanner)
=== Configuration de pure-ftpd avec {next,own}cloud ===
Configuration de pure-ftpd:
# Creation de la DB pour les utilisateurs virtuels
echo '/etc/pure-ftpd/pureftpd.pdb' > /etc/pure-ftpd/conf/PureDB
cd /etc/pure-ftpd/auth
ln -s /etc/pure-ftpd/conf/PureDB 50pure
# Desactivation du login UNIX et PAM
echo 'no' > /etc/pure-ftpd/auth/65unix
echo 'no' > /etc/pure-ftpd/auth/70pam
# Creation de notre utilisateur virtuel
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pw useradd scanner_minet -u ftpuser -g ftpgroup -d /srv/scanner_ftp
pure-pw mkdb
# On met a jour les UID et GID de l'utilisateur qui lancera le script appelé à la fin d'un upload
MYUID=$(id -u ftpuser); sed -i -e "s/UPLOADUID=.*/UPLOADUID=${MYUID}/g" /etc/default/pure-ftpd-common
MYGID=$(id -g ftpuser); sed -i -e "s/UPLOADGID=.*/UPLOADGID=${MYGID}/g" /etc/default/pure-ftpd-common
# On active le lancement de script custom à la fin de l'upload
echo 'yes' > /etc/pure-ftpd/conf/CallUploadScript
# On s'assure que tous les utilisateurs sont chrooté
echo 'yes' > /etc/pure-ftpd/conf/ChrootEveryone
# Pas d'utilisateur anonyme
echo 'yes' > /etc/pure-ftpd/conf/NoAnonymous
# On s'assure que pure-ftpd n'écoute que sur l'interface dans le 102 sur le port 21
echo '192.168.147.5,21' > /etc/pure-ftpd/conf/Bind
On crée le script qui va transférer les fichiers uploadé sur le ftp sur le {own,next}cloud (/opt/uploadhandler.sh)
#!/bin/bash
# Lorsque pure-ftpd appelle un script il passe le chemin absolu du fichier uploadé en $1
PROXY="http://192.168.102.61:82"
OC_USER="scanner" ###### Utilisateur nextcloud faisant partie du groupe "MiNET"
OC_PASS="xxxxxxxxxxxxxxxxxx" ###### MDP de l'utilisateur scanner sur nextcloud
OC_WEBDAV_URL="https://nextcloud.minet.net/remote.php/webdav/"
OC_UPLOAD_DIR="MiNET/Scanner"
FILENAME=$(basename "$1")
# upload_exit_code vaut 0 si la commande n'a pas retournée d'erreur
# cependant ça ne veut pas dire que le fichier a bien été uploadé sur
# nextcloud
curl -s -x $PROXY -u $OC_USER:$OC_PASS -T "$1" $OC_WEBDAV_URL/$OC_UPLOAD_DIR/$FILENAME
upload_exit_code=$?
# Verifie que le fichier se trouve bien sur nextcloud
# si dans le XML renvoyé par la requête on trouve
# un élément "error" dans lequel on trouve un élément "exception"
# check_exit_code vaut 0 -> en d'autres termes ça sent pas bon
curl -s -x $PROXY -u $OC_USER:$OC_PASS -XPROPFIND $OC_WEBDAV_URL/$OC_UPLOAD_DIR/$FILENAME | xmlstarlet select -t -v //d:error/s:exception
check_exit_code=$?
# On supprime le fichier de cups-server seulement si le fichier a
# bien été envoyé sur nextcloud
if [ $upload_exit_code -eq 0 ] && [ $check_exit_code -ne 0 ]; then
rm -r "$1"
fi
Ensuite:
chmod +x /opt/uploadhandler.sh
On s'assure que la conf globale de pure-ftpd est bonne (/etc/default/pure-ftpd-common):
STANDALONE_OR_INETD=standalone
VIRTUALCHROOT=true
UPLOADSCRIPT=/opt/uploadhandler.sh
UPLOADUID=1008 #uid de l'utilisateur qu'on vient de créer
UPLOADGID=1008 #gid de l'utilisateur qu'on vient de créer
On oublie pas de relancer le daemon.
Ensuite aller sur l'interface WEB de l'imprimante:
http://192.168.147.5/scan/scanprofile.html
Cliquez sur un profil et remplissez les champs:
Profile Name
Host Address (l'address IP de cups-server)
Username (le nom d'utilisateur **virtuel** que vous venez créer)
Password (le mot de passe de cet utilisateur)
Store Directory (le dossier dans lequel les documents seront stockés, mettre '.' pour stocker à la racine du ftp).
Les autres champs peuvent être laissés à leur valeur par défaut.
Validez le formulaire et normalement le profile devrait apparaitre dans le menu 'Scan to FTP' de l'imprimante.
==== Commandes utiles ====
Lister les imprimantes disponibles:
lpstat -p
Sélectionner une imprimante:
lp -d printer filename
Imprimer avec un bandeau topsecret:
lp -o job-sheets=standard filename
Spécifier un range de page à imprimer:
lp -o page-ranges=1-4 filename
Empêcher les débordements
lp -o fit-to-page filename