Articles plus anciens

Mon serveur web NGINX ne sert que du contenu privé protégé par mot de passe, mais si l’accès à ce contenu est protégé, les données qui transitent sur le réseau elles ne le sont pas.

Pour cela il faut mettre en œuvre un chiffrage via https.

Https se base sur un système de clé de cryptage publique/certificat, il existe plusieurs moyen pour obtenir ces fichiers :

J’ai personnellement choisi cette dernière solution.

Dans mon article OpenSSL puissance et complexité, j’ai listé/référencé les étapes et commandes openssl disponible pour créer un certificat.

 

Voici les sujets abordé par cet article :

 

Gestion des certificats manuellement

Préparation de l’environnement

Je vais créer un répertoire myCa dans le /home de mon utilisateur et y placer tout ce qui sera nécessaire à gérer les certificats

cd && mkdir -p myCA/certs && mkdir myCA/private && mkdir myCA/csr && mkdir myCA/newcerts && mkdir myCA/crl && mkdir myCA/tmp && cd myCA
echo '01' > serial  && touch index.txt
cp /etc/ssl/openssl.cnf .

Configuration d’openSSL

On édite ensuite le fichier openssl.cnf copié dans notre répertoire myCA, pour modifier les éléments suivants :

Section [ CA_default ] on paramètre les dossiers, seul la première valeur est à modifier :

dir        = <strong>/home/[utilisateur]/myCA</strong>            # Where everything is kept
certs        = $dir/certs        # Where the issued certs are kept
crl_dir        = $dir/crl        # Where the issued crl are kept
database    = $dir/index.txt    # database index file.
new_certs_dir    = $dir/newcerts        # default place for new certs.
certificate    = $certs/cacert.pem    # The CA certificate
serial        = $dir/serial         # The current serial number
crl        = $dir/crl.pem         # The current CRL
private_key    = $dir/private/cakey.pem # The private key
RANDFILE    = $dir/private/.rand    # private random number file

Un peu plus loin dans cette même section, on paramètre la duré de validité par défaut des certificats et le cryptage utilisé :

default_days    = 1825            # how long to certify for
default_crl_days= 30            # how long before next CRL
default_md    = sha1            # which md to use.

Dans la section [ req_distinguished_name ] j’ai francisé les libellé et adpater les valeurs par défaut :

[ req_distinguished_name ]
 countryName                     = Pays (2 lettres)
 countryName_default             = FR
 countryName_min                 = 2
 countryName_max                 = 2
 stateOrProvinceName             = Region
 stateOrProvinceName_default     = PAYS DE LOIRE
 localityName                    = Ville
 localityName_default            = Nantes
 0.organizationName              = Societe
 0.organizationName_default      = VoidAndAny
 #organizationalUnitName         = Organizational Unit Name (eg, section)
 #organizationalUnitName_default =
 commonName                      = Site
 commonName_max                  = 64
 emailAddress                    = Email
 emailAddress_max                = 64
 emailAddress_default            = mon_email@free.fr

Dès lors les questions sont les suivantes et il suffit de les valider par entrée pour avoir les valeurs par défaut (optionnel) :

Pays (2 lettres) [FR]:
Region [PAYS DE LOIRE]:
Ville [Nantes]:
Societe [VoidAndAny]:
Site []: mon_domaine.fr
Email [mon_email@free.fr]:

Dans la section [ usr_cert ] j’ai modifié les commentaire qui seront embarqués dans les certificats :

nsComment            = "Void And Any Generated Certificate"

Création de l’autorité de certification

On va tout d’abord créer notre autorité de certification qui permettra de signer les certificats serveurs suivant.

Cela se fait avec la commande (se placer dans le répertoire myCA) :

openssl req -new -x509 -config ./openssl.cnf -keyout ./private/cakey.pem -out ./certs/cacert.pem -days 1825

Lors de la génération du certificat un mot de passe vous est demandé, en choisir un robuste et ne pas l’oublier sous peine de ne plus pouvoir vous servir de votre autorisé de certification.

Création du/des certificats

En 2 temps, création de la clé et de la demande de certificat :

openssl req -new -keyout ./private/mondomaine.key -out ./csr/mondomaine.csr -config ./openssl.cnf -nodes -days 1825

L’option -nodes permet d’indiquer que la clé qui doit être générée ne doit pas être protégée par un mot de passe (passphrase)

 

La commande vous poseras quelques questions :

Generating a 2048 bit RSA private key
 .............+++
 ............................+++
 writing new private key to '/etc/nginx/certificates/test.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [AU]:FR
 State or Province Name (full name) [Some-State]:PAYS DE LOIRE
 Locality Name (eg, city) []:Nantes
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:VoidAndAny
 Organizational Unit Name (eg, section) []:
 Common Name (eg, YOUR name) []:mon_domaine.fr
 Email Address []:mon_email@free.fr

La zone la plus importante est « Common name » qui doit correspondre au nom du domaine/sous-domaine que vous voulez protéger.

 

Création du certificat à partir de la demande de certificat et signature de ce dernier avec notre autorité de certification :

openssl ca -infiles ./csr/mondomaine.csr -out ./certs/mondomaine.crt -config ./openssl.cnf

Les certificat et sa clé sont alors respectivement dans les sous-répertoires certs et private.

 

Voila pour la création manuelle voici comment automatiser tout cela et ne pas avoir de ligne de commande à taper.

 

Gestion des certificats avec easyCA

EasyCA est un script qui n’est plus maintenu depuis 2005 et que l’on peut retrouver ICI, personnellement j’ai utilisé la version modifiée de GuiguiAbloc que l’on trouve ICI

Je vais comme précédemment faire du répertoire myCA de mon home le lieu de travail. (si vous avez fait des essais manuellement il peut être conseillé de tout supprimer le contenu du dit répertoire ou d’en utiliser un autre)

Télécharger l’archive, la décompresser et rendre le script exécutable :

mkdir -p ~/myCA && cd ~/myCA
wget http://guiguiabloc.appspot.com/wp-content/2008/12/easyca.tgz
tar -xvf easyca.tgz
mv easyca/* .
chmod 755 easyCA.sh

Éditer le fichier openssl.cnf fournis, modifier les lignes préalablement décrites et supprimer la ligne :

# !!!!! remove this line after configuration as it is NOT_CONFIGURED yet !!!

Rque : j’ai en plus changé les différents paramètres nsComment en fin de fichier.

Lancer le script easyCA.sh, le menu suivant apparaît :

=====================================================================
 Certificate Management System
 easyCA version 0.9(6) by Ferry Kemps and Guiguiabloc
 GPL Licensed
 =====================================================================
 
 1) Sign a Certificate Signing Request (PKCS#10)
 2) Create a Server Certificate (PEM SelfSigned)
 3) Create a Client Certificate (PKCS#12)
 4) Create a Certificate Signing Request
 5) Generate Certificate Revocation List (CRL)
 6) List, Display and Revoke Certificates
 
 I) Initialize Root Certificate Authority (CA)
 O) Initialize OCSP Server Certificate
 B) Backup & Restore the Certificate environment
 R) Reinstall easyCA (erase)
 
==> Make your choice [none]:

(dans les « copie d’écran » suivante je n’ai pas personnalisé mon openssl.cnf, d’où les localité, adresse mail par défaut)

Création de l’autorité de certification

Pour créer l’autorité de certification il suffit de choisir l’option I :

-----------------------------------------------------------------------
 ----------------- Initialize root Certificate Authority ---------------
 -----------------------------------------------------------------------
 
Are you sure you want to (re)initialize the Root CA? [y|n]: y
 >>> Initializing Root CA <<<
 Generating a 1024 bit RSA private key
 ...................++++++
 .............................................++++++
 writing new private key to './private/cakey.pem'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [NL]:
 State or Province Name (full name) [Gelderland]:
 Locality Name (eg, city) [Arnhem]:
 Organization Name (eg, company) [Your Company Name]:
 Organizational Unit Name (eg, section) [HQ]:
 Common Name (eg, your name or your server's hostname) []:
 Email Address [postmaster@domain.ext]:
 
Press [enter] to continue

Comme dans le paragraphe précédent il faut choisir une passphrase sécurisé et ne pas l’oublier. Le Common Name n’a que peut d’importance ici.

Création du/des certificats

Pour générer un certificat serveur, il faut procéder en 2 temps, la demande de certificat, option 4 du menu :

-----------------------------------------------------------------------
 --------------- Generate Certificate Signing Request ------------------
 -----------------------------------------------------------------------
 
Enter Certificate CN (Common name|FQDN) like www.example.com [none]: mondomaine
 Generating a 1024 bit RSA private key
 ..................++++++
 .......++++++
 writing new private key to './private/mondomaine-key.pem'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [NL]:
 State or Province Name (full name) [Gelderland]:
 Locality Name (eg, city) [Arnhem]:
 Organization Name (eg, company) [Your Company Name]:
 Organizational Unit Name (eg, section) [HQ]:
 Common Name (eg, your name or your server's hostname) []:mondomaine.fr
 Email Address [postmaster@domain.ext]:
 
Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:
 
Certificate Signing Request (CSR) stored as: ./csr/mondomaine.csr
 Certificate private-key stored as: ./private/mondomaine-key.pem
 Press [enter] to continue

La première question (Enter Certificate CN (Common name|FQDN) like www.example.com [none]:) ne sert pas à alimenter le common name du certificat mais a déterminer le nom des fichier certificat et clé.

A la question common name, il faut ici indiquer le domaine sur lequel s’appliquera la certificat sous peine d’avoir des avertissement de sécurité dans les navigateurs.

 

2ème étape obtenir le certificat et le signer , option 1 du menu :

-----------------------------------------------------------------------
 --------------- Certifiace Signing Request handling -------------------
 -----------------------------------------------------------------------
 
(CSR request files should be copied into directory: ./csr)
 
1: mondomaine.csr
 
==> Select the CSR to sign [none]: 1
 
==> Add OCSP Extension to Certificate ? [y/N]: N
 
==> Select the Usage Key [server|client|none]: server
 Using configuration from ./openssl.cnf
 Enter pass phrase for ./private/cakey.pem:
 Check that the request matches the signature
 Signature ok
 Certificate Details:
 Serial Number: 1 (0x1)
 
...
 
 Certificate is to be certified until Jun 19 18:36:00 2016 GMT (1825 days)
 Sign the certificate? [y/n]:y
 
1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 
Signed certificate stored as: ./certs/mondomaine.crt
 Return this certificate to the requesting party.
 
Display Certificate? y/n [n] n

On sélectionne les demande de certificat en cours (il peut y en avoir plusieurs), on indique le rôle du certificat à générer (server), on saisi le mot de passe de l’autorité de certification et voila…

L’utilisation de easyCA est quand même beaucoup plus simple que de se taper les lignes de commande….

 

Pour info voici les commandes par easyCA  qui sont lancées pour les 3 étapes décrites ci-dessus :

openssl req -new -x509 -config ./openssl.cnf -keyout ./private/cakey.pem -out ./certs/cacert.pem -days 1825
 
openssl req -new -nodes -config ./openssl.cnf -days 1825 -keyout ./private/mondomaine-key.pem -out ./csr/mondomaine.csr
 
openssl ca -config ./openssl.cnf -cert ./certs/cacert.pem -extensions  SERVEUR -in ./csr/mondomaine.csr -out ./certs/mondomaine.crt

Elle très très semblables à celles que j’ai décrite dans le premier paragraphe…


Configuration NGINX

Une fois un certificat généré pour votre site que ce soit manuellement ou via easyCA, il faut tout d’abord copier le clé et le dit certificat vers un répertoire qui sera accessible par NGINX.

Dans mon cas j’ai créé un répertoire certificates dans /etc/nginx.

cd ~
sudo cp myCA/certs/mondomaine.crt /etc/nginx/certificates
sudo cp myCA/private/mondomaine-key.pem /etc/nginx/certificates
sudo chown root.root /etc/nginx/certificates/mondomaine-key.pem
sudo chmod 400 /etc/nginx/certificates/mondomaine-key.pem

Il suffit ensuite d’indiquer à NGINX pour le site voulu l’écouter sur le port 443 (au lieu du 80) et l’utilisation du certificat et de la clé privée

server {
    listen               443;
    server_name          mondomaine.fr;

    ssl                  on;
    ssl_certificate      /etc/nginx/certificates/mondomaine.crt;
    ssl_certificate_key  /etc/nginx/certificates/mondomaine-key.fr;

....
  }

Et rediriger le port 443 vers votre serveur…

 

Configuration Firefox

Lorsque vous irez sur votre site pour la première fois vous aurez un message d’avertissement car votre autorité de certification (c’est à dire votre serveur) n’est pas reconnue par le navigateur :

Si on regarde les détail technique on a ceci :

Ou ceci Dans le premeir cas je ne comprend pas très bien l’erreur, peut être est ce d^au fait que j’utilise un certificat joker mais ceci est une autre histoire, dans le 2ème cas on a 2 erreurs, le fait que le certificat est auto-signée et le fait que le common name donnée lors de la création du certification ne correspond pas au domaine sur lequel il a été appliqué.

Dans tous les cas pour passer outre il suffit d’importer le certificat racine publique de notre autorité de certification.

Il faut donc diffuser, copier le fichier cacert.pem contenu dans le répertoire certs sur votre serveur sur les machine clientes. ATTENTION il ne faut surtout pas diffuser la clé privé cakey.pem

 

Ensuite sur les machines clientes dans Firefox aller dans le menu « Avancé » sur l’onglet « Chiffrement » et cliquer sur « Afficher les certificats » :

Dans l’onglet « Autorités » cliquer sur « Importer… » et sélectionner votre fichier (cacert.pem)

Sélectionner l’usage que vous souhaitez faire du certificat « identifier des sites web » :

Votre autorité de certification est désormais reconnue :

Et la page devrait s’afficher sans problème.

 

Dans IE il faut aller dans Option Internet > Onglet Contenu > Bouton Certificats, puis onglet Autorités principales de confiance > Bouton Importer

 

Sources :

Gestion des certificats :

Configuration NGINX :

Autre :

Sous Windows j’ai pris l’habitude de préfixer certains fichier dossier d’un underscore (_) afin qu’il apparaissent en haut de la liste dans l’explorateur.


Quand je suis passé sous Ubuntu ce mécanisme ne fonctionnait plus. Pire sous Nautilus je ne comprend même pas la logique utilisé pour trier les fichiers.

Enfin j’ai essayé divers autres gestionnaire de fichiers et aucun n’a le même ordre de tri !!!

Je savais que sous Linux on avait le choix des logiciels mais de là à avoir le choix du tri des fichiers…


Un exemple vaut mieux qu’un long discours, je me suis fait un jeu de test sous Ubuntu avec des fichiers ayant des nom court mais commençant par divers caractères : lettres (majuscule, minuscule), chiffres, caractères spéciaux (#_~), espace et points.

 

Windows  (ma référence) :

Les caractères spéciaux (dont l’espace et le point sont au début) suivi des chiffres puis les lettres (la distinction majuscule minuscule a été perdu puisque Windows est insensible à la casse)

A noter les chiffres sont triés numériquement 9 avant 100

 

Nautilus 2.30

L’explorateur de fichier d’Ubuntu (v10.04)

Nautilus Elementary 2.32.2

Version patchée de Nautilus (voirNautilus elementary)

Thunar 1.0.2

Explorateur de fichier de XFCE

 

SunFlower 0.1a

Nouvel explorateur de fichier : sunflower-fm – Twin-panel file manager for Linux – Google Project Hosting

 

Dolphin 1.5

L’explorateur de fichier de KDE

Gnome Terminal

avec la commande ls -hal :

 

On constatera que sur 5 logiciels testés sous Linux on a 5 ordre de tri !!!

 

Pour info voici mes locales (il semblerait que cela influe sur l’ordre de tri)

LANG=fr_FR.utf8
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"
LC_MESSAGES="fr_FR.utf8"
LC_PAPER="fr_FR.utf8"
LC_NAME="fr_FR.utf8"
LC_ADDRESS="fr_FR.utf8"
LC_TELEPHONE="fr_FR.utf8"
LC_MEASUREMENT="fr_FR.utf8"
LC_IDENTIFICATION="fr_FR.utf8"
LC_ALL=



Bref voici où j’en suis, dans la suite les liens que j’ai à étudier attentivement pour comprendre (si c’est possible).

Bug 458707 – Sort order ignores special characters

nautilus sort order – Ubuntu Forums

[all variants] Directory Order in Console – Ubuntu Forums

[all variants] sort order with LC_COLLATE: change to what? – Ubuntu Forums

[SOLVED] Nautilus sorting changed? – Ubuntu Forums

Sort order in nautilus – Ubuntu Forums

http://bugzilla.gnome.org/show_bug.cgi?id=458707

http://www.iac.es/sieinvens/siepedia/pmwiki.php?n=Tutorials.LinuxLocale

http://www.linux.com/archive/articles/53781

http://doc.dev.ubuntu-fr.org/doku.php?id=variables_d_environnement

http://ubuntuforums.org/archive/index.php/t-471154.html


Locale in Linux – SIEpedia

J’ai déjà indiqué comment allumer/démarrer un PC à distance via le wakeonlan et comment éteindre un PC à distance via ssh.

Pour mon usage personnel j’ai intégré ces commandes dans des scripts afin d’y ajouter quelques fonctionnalités.

Le script de démarrage que j’ai nommé wakeonlan.sh (original) prend en paramètre l’adresse MAC et l’adresse IP de la machine à réveiller et permet de faire n essais de réveil espacés de m secondes avant de rendre la main.

#!/bin/bash
# Wake up remote machine
# Usage: $0 mac_adress ip_adress
 
# Check interval
SLEEPTIME=60
# Temp directory where to store a file to indicate that the computer was already turn on (used for shutdow)
TEMP_DIRECTORY=/$HOME/tmp
# Number of retries
RETRY=20
 
die () {
 echo >&2 "$@"
 exit 1
}
 
[ "$#" -eq 2 ] || die "Usage : $0 Mac_adress IP_adress"
HOST_MAC=$1
HOST_IP=$2
 
[ -d $directory ] || mkdir $directory
 
ping -c 2 -w 15 $HOST_IP > /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]; then
 echo "Host $HOST_IP is already up - exiting"
 touch $TEMP_DIRECTORY/$HOST_IP
 exit 0
else  
 echo "Trying to wake up $HOST_IP"
 TEST_NUMBER=0
 while [ $RESULT -ne 0 ]; do
  TEST_NUMBER=`expr $TEST_NUMBER + 1`
  echo "Test #$TEST_NUMBER)"
  wakeonlan $HOST_MAC
  sleep $SLEEPTIME
  ping -c 2 -w 15 $HOST_IP > /dev/null
  RESULT=$?
  if [ $RESULT -ne 0 ] && [ $TEST_NUMBER -eq $RETRY ]; then
   echo "$RETRY retry unsuccessful - leave"
   exit 1
  fi
 done
fi

On pourra remarquer que si la machine est déjà allumé, le script crée un fichier portant son adresse IP, ce fichier est utilisé par le script d’arrêt.

Pour fonctionner ce script à besoin du paquet wakeonlan.

 

Ce dernier nommé shutdown.sh (encore original) n’arrête l’ordinateur que si ce dernier n’était pas déjà allumé avant le wakeonlan (état connu par la présence au non du fichier nommé de l’adresse IP de la machine à réveiller / éteindre)

#!/bin/bash
# Shutdown a remote machine
# Usage: $0 user ip_adress
 
# Temp directory where to check a file that indicate if the computer doesn't need to shutdown (file created by wakeonlan script)
TEMP_DIRECTORY=$HOME/tmp
 
die () {
 echo >&2 "$@"
 exit 1
}
 
[ "$#" -eq 2 ] || die "Usage : $0 user IP_adress"
 USER=$1
 HOST_IP=$2
 
if [ -f $TEMP_DIRECTORY/$HOST_IP ]
then  
 echo "The host $HOST_IP was already turned on so we don't shutdown it"
 rm $TEMP_DIRECTORY/$HOST_IP
 exit 0
fi
 
echo "Shuting down $HOST_IP"
ssh $USER@$HOST_IP "sudo shutdown -h now"

Ce script prend en paramètre l’adresse IP de la machine à éteindre et l’utilisateur qui  lancera la commande shutdown via SSH.

La machine cible doit avoir sudo (toujours le cas sur Ubuntu) et la commande shutdown ne doit pas demander de mot de passe (paramétré dans le sudoer)

 

Image par tom.z sous CC BY-NY-SA

OK à l’ère des télé HD, parler de S-vidéo et de péritel est un peu (beaucoup) has been, mais ce truc m’a servi jusqu’à peu et je ne veux pas perdre l’info.

Comme je l’indiquais dans mon article S-vidéo vers péritel ou S-vidéo vers composite ? le branchement d’une sortie S-vidéo vers un prise péritel via l’adaptateur ci-dessous donne une image crasseuse (couleur terne voir pas du tout de couleur)

Convertisseur S-video - Péritel (SCART)

J’avais à l’époque abandonné utilisant une prise S-vidéo vers RCA, mais il y a peu je n’ai pas eu le choix, il fallait que je branche sur la péritel.

J’ai alors trouvé ce site : Camp0s.com – A nice place where to stay…

Qui indique plusieurs solutions pour résoudre le problème de perte de couleur lors de l’utilisation d’un convertisseur S-vidéo – Péritel.

Personnellement j’ai utilisé la solution 2 sans soudure Camp0s.com – A nice place where to stay… en utilisant des agrafes.


L’image n’est toujours pas top mais au moins j’ai la couleur (et bien saturée en plus)

 

Images : Camp0s.com

Par défaut une fois les téléchargements terminés Transmission partage indéfiniment le fichier.

Pour changer ce comportement il faut utiliser les paramètres ratio-limit (= valeur numérique) et ratio-limit-enabled (= true). Dés lors Transmission partagera jusqu’à ce que le ratio téléchargement / partage défini dans ratio-limit soit atteint. Ensuite le fichier sera mis en état arrêté mais restera dans Transmission.

Le script ci-dessous (remove_completed_torrents.sh qui n’est pas de moi voir les sources) à exécuter à intervalle régulier via une tache Cron vérifie l’état des fichiers/torrents et pour ceux qui sont stoppés (dont le ratio de partage est atteint) les déplace dans un autre répertoire (complete dans mon cas, voir mon arborescence de fichier) et les supprime de Transmission

#!/bin/sh
# script to check for complete torrents in transmission folder, then stop and move them
 
AUTH="--netrc=$HOME/.netrc"
 
# either hard-code the MOVEDIR variable here
MOVEDIR=/data/downloads/torrents/complete # the folder to move completed downloads to
# or set MOVEDIR using the first command-line argument
# MOVEDIR=%1
 
# use transmission-remote to get torrent list from transmission-remote list
# use sed to delete first / last line of output, and remove leading spaces
# use cut to get first field from each line
TORRENTLIST=`transmission-remote --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=" " --fields=1`
 
# for each torrent in the list
for TORRENTID in $TORRENTLIST
    do
    echo "* * * * * Operations on torrent ID $TORRENTID starting. * * * * *"
 
    # check if torrent download is completed
    DL_COMPLETED=`transmission-remote $AUTH --torrent $TORRENTID --info | grep "Percent Done: 100%"`
 
    # check torrent’s current state is Stopped, Finished, or Idle
    STATE_STOPPED=`transmission-remote --torrent $TORRENTID --info | grep "State: Finished"`
 
    # if the torrent is Stopped, Finished, or Idle after downloading 100%
    if [ "$DL_COMPLETED" != "" ] && [ "$STATE_STOPPED" != "" ]; then
        # move the files and remove the torrent from Transmission
        echo "Torrent #$TORRENTID is completed."
        echo "Moving downloaded file(s) to $MOVEDIR."
        transmission-remote --torrent $TORRENTID --move $MOVEDIR
        echo "Removing torrent from list."
        transmission-remote --torrent $TORRENTID --remove
    else
        echo "Torrent #$TORRENTID is not completed. Ignoring."
    fi
    echo "* * * * * Operations on torrent ID $TORRENTID completed. * * * * *"
done

Ce script utilise la commande transmission-remote du paquet transmission-cli à installer si ce n’est déjà fait.

Pour certaines opérations transmission-remote à besoin d’informations de connexion (login / mot de passe), plutôt que d’utiliser l’option –auth j’ai préféré utiliser l’option –netrc, il faut donc créer un fichier .netrc dans le home de votre utilisateur (ou si vous souhaitez le mettre ailleurs il faudra modifier la variable AUTH) et y mettre les informations suivantes :

machine localhost login [votre login] password [votre mot de passe]

Du Fait des information sensible de ce fichier on le protégera en faisant un :

chmod 600 ~/.netrc

 

Lorsque l’on exécute le script on aura ce genre de sortie :

./bin/remove_complet_torrent.sh
 * * * * * Operations on torrent ID 1 starting. * * * * *
 Torrent #1 is completed.
 Moving downloaded file(s) to /data/downloads/torrents/complete.
 localhost:9091 responded: "success"
 Removing torrent from list.
 localhost:9091 responded: "success"
 * * * * * Operations on torrent ID 1 completed. * * * * *

 

Rque : dans le script d’origine les fichiers étaient déplacés dès lors que leur statut était stopped ou idle ou finished. J’ai supprimé les 2 premiers statuts sinon les fichiers étaient enlevés alors que le ratio de partage n’était pas atteint…

 

Sources :