Créer un dépôt APT pour le client Seafile
Seafile est un Dropbox-like libre. Pour mettre à jour le client Seafile, il n'existe pas de dépôt officiel ; il faut donc aller de temps en temps sur la page de téléchargement pour vérifier s'il n'existe pas de nouvelle version. Pénible.
Le but de cette page est d'expliquer comment créer son propre dépôt sur un serveur Debian.
wget -O - -q http://apt.claudeclerc.fr/apt.claudeclerc.fr.gpg.key | sudo apt-key add - echo "deb http://apt.claudeclerc.fr/debian seafile main" | sudo tee /etc/apt/sources.list.d/seafile-unofficial.list
On suppose que le serveur web Apache est installé et fonctionnel ; on y créera par la suite un hôte virtuel.
Récupérer les paquets de Seafile
Créez le dossier où seront téléchargés les paquets de Seafile avant d'être mis dans votre dépôt :
mkdir -p /usr/src/seafile_debs
Installer le paquet lynx-cur :
apt-get install lynx-cur
Le script getseafiledebs.sh
suivant permet de récupérer les paquets de Seafile à partir des liens présents sur la page de téléchargement.
nano /usr/local/sbin/getseafiledebs.sh
Code :
#!/bin/sh debs_url='/usr/src/seafile_debs/' download_new_amd64=`lynx -dump 'https://www.seafile.com/en/download/' | grep 'amd64.deb' | head -n 1 | sed 's/^.\{6\}//'` download_new_i386=`lynx -dump 'https://www.seafile.com/en/download/' | grep 'i386.deb' | head -n 1 | sed 's/^.\{6\}//'` basename_amd64="${download_new_amd64##*/}" basename_i386="${download_new_i386##*/}" last_version_amd64=`echo $download_new_amd64 | tr '_' ' '| awk '{print $2}'` last_version_i386=`echo $download_new_i386 | tr '_' ' '| awk '{print $2}'` mail_subject="New version of Seafile downloaded to apt server" mail_message="amd64: $last_version_amd64 ; i386: $last_version_i386" mail_recepient="your@maildomain.com" mail_sender="seafile_apt@yourmail.com" list_seafile_deb=`ls ${debs_url} | grep "amd64.deb"` if [ "$basename_amd64" = "$list_seafile_deb" ] then echo "Already latest version" else echo "Last versions: amd64: $last_version_amd64 ; i386: $last_version_i386" cd $debs_url && rm -f ${debs_url}*.deb* && wget -P ${debs_url} $download_new_amd64 && wget -P ${debs_url} $download_new_i386 #echo $mail_message | mail -s $mail_subject $mail_recepient -aFrom:$mail_sender fiDé-commentez l'avant-dernière ligne si votre serveur peut envoyer des mails.
Rendez ce script exécutable :
chmod +x /usr/local/sbin/getseafiledebs.sh
Exécutez ce script :
/usr/local/sbin/getseafiledebs.sh
Générer un clé pour signer les paquets
Installer les paquets gnupg et rng-tools :
apt-get install gnupg rng-tools
Généralement, un message d'erreur apparaît indiquant que le service rng-tools n'a pas pu se lancer.
Ouvrir alors /etc/default/rng-tools…
nano /etc/default/rng-tools
… et vérifier la présence de la ligne suivante :
HRNGDEVICE=/dev/urandom
(Il faut généralement la rajouter.)
Fermer nano avec Ctrl-X et répondre par l'affirmative si vous avez modifié le fichier.
Lancer alors le service rng-tools :
service rng-tools start
(Ce service rng-tools permet à gpg de créer des clés de 2048 bits avec d'avantage d'entropie.)
Enfin, générer la clé :
gpg --gen-key
Valider les réponses par défaut aux 3 premières questions ; répondre par l'affirmative à la question “Est-ce correct ?” Il vous est ensuite demandé votre nom réel, puis votre adresse électronique et enfin un commentaire (qui apparaitra entre parenthèses entre votre nom et votre adresse électronique). Validez vos réponses en répondant par l'affirmative.
N'entrez pas de phrase secrète.
Pendant la génération de la clé, ouvrir un autre terminal et faites en sorte qu'il y ait de l'activité sur votre serveur, par exemple en mettant à jour les paquets (apt-get update && apt-get dist-upgrade
)
Recommencez la génération de la clé jusqu'à ce qu'une clé marquée de confiance ultime ait été créée.
Notez alors les numéros Pub et Sub, formés des 8 caractères se trouvant après 2048R/.
Vous pouvez retrouver ces numéros par la commande :
gpg --list-keys
Vous pouvez supprimer successivement chaque clé non marquée de confiance ultime, à l'aide de la commande :
gpg --delete-secret-and-public-key NUMERO
où NUMERO est le pub ou sub de la clé à supprimer.
Configurer votre dépôt
Éditez le fichier de zone de votre domaine (chez votre registrar) afin de créer l'enregistrement de type A de votre sous-domaine apt.nomdomaine.ext ; ici : apt.claudeclerc.fr.
Installer reprepro :
apt-get install reprepro
La racine du dépôt sera /var/package ; commencez par en préparer la structure :
mkdir -p /var/packages/debian/conf
Notez le numéro sub de votre clé (8 caractères) ; il sera noté par la suite NUMEROSUB.
Créez, avec nano, le fichier /var/packages/debian/conf/distributions
et placez-y les lignes suivantes :
Origin: apt.nomdomaine.ext Label: apt.nomdomaine.ext Codename: seafile Architectures: i386 amd64 Components: main Description: Unofficial APT Repository for Seafile SignWith: NUMEROSUB DebOverride: override.seafile DscOverride: override.seafile
Bien sûr, remplacez apt.nomdomaine.ext et NUMEROSUB par les valeurs idoines.
Créez le fichier (vide) /var/packages/debian/conf/override.seafile
:
touch /var/packages/debian/conf/override.seafile
Créez le fichier /var/packages/debian/conf/options
et placez-y les lignes :
verbose basedir /var/packages/debian
Pour signer les paquets Seafile avec votre clé, installez le paquet dpkg-sig :
apt-get install dpkg-sig
Créez le script /usr/local/sbin/sign_new_seafile_debs.sh
:
#!/bin/sh base_url='/usr/src/seafile_debs/' apt_debs='/var/packages/debian' pub_key='NUMEROSUB' dpkg-sig -k $pub_key --sign builder ${base_url}*.deb && cd ${apt_debs} && reprepro --ignore=surprisingbinary includedeb seafile ${base_url}*.deb
Rendez-le exécutable :
chmod +x /usr/local/sbin/sign_new_seafile_debs.sh
Puis exécutez-le (une seule fois après le téléchargement de nouveaux paquets) :
/usr/local/sbin/sign_new_seafile_debs.sh
rm -rf /var/packages/debian/db cd /var/packages/debian reprepro clearvanished
puis relancer ce script.
Vérification de la structure du dépôt :
cd /var/packages/debian tree
. ├── conf │ ├── distributions │ ├── options │ └── override.seafile ├── db │ ├── checksums.db │ ├── contents.cache.db │ ├── packages.db │ ├── references.db │ ├── release.caches.db │ └── version ├── dists │ └── seafile │ ├── InRelease │ ├── main │ │ ├── binary-amd64 │ │ │ ├── Packages │ │ │ ├── Packages.gz │ │ │ └── Release │ │ └── binary-i386 │ │ ├── Packages │ │ ├── Packages.gz │ │ └── Release │ ├── Release │ └── Release.gpg └── pool └── main └── s └── seafile ├── seafile_5.1.1_amd64.deb └── seafile_5.1.1_i386.deb 11 directories, 20 files
Créez la clé GPG du dépôt :
gpg --armor --output /var/packages/apt.nomdomaine.ext.gpg.key --export NUMEROSUB
Configurer l'hôte virtuel d'Apache
Utiliser son dépôt !
Sur votre ordinateur (pas sur le serveur !), adaptez ces commandes:
wget -O - -q http://apt.nomdomaine.ext/apt.nomdomaine.ext.gpg.key | sudo apt-key add - echo "deb http://apt.nomdomaine.ext/debian seafile main" | sudo tee /etc/apt/sources.list.d/seafile-unofficial.list
Optionnel : si vous voulez que votre dépôt ait la précédence sur d'autres dépôts :
nano /etc/apt/preferences
Package: * Pin: origin apt.domaine.ext Pin-Priority: 1001
Enfin, installez le client seafile :
sudo apt-get update sudo apt-get install seafile
Remarque : Si seafile est déjà installé, remplacez la dernière commande par :
sudo apt-get install --reinstall seafile
Enjoy !
Automatiser la mise à jour du dépôt
Pour rendre quotidienne la vérification de la disponibilité des nouveaux paquets du client Seafile et la mise à jour du dépôt, créez le script : /etc/cron.daily/depotseafile.sh
#!/bin/sh debs_path='/usr/src/seafile_debs/' apt_debs='/var/packages/debian' old_version=`ls ${debs_path} | grep "amd64.deb" | tr "_" " " | awk '{print $2}'` /usr/local/sbin/getseafiledebs.sh > /dev/null 2>&1 new_version=`ls ${debs_path} | grep "amd64.deb" | tr "_" " " | awk '{print $2}'` if [ "${new_version}" != "${old_version}" ] then /usr/local/sbin/sign_new_seafile_debs.sh > /dev/null 2>&1 /bin/chown -R www-data:www-data ${apt_debs} > /dev/null echo "`/bin/date`: New version of Seafile client ${new_version} ; old was ${old_version}." >> /var/log/seafile_repos.log 2>&1 fi exit 0
Rendez-le exécutable :
chmod +x /etc/cron.daily/depotseafile.sh
Relancez le service cron :
service cron restart
2 personnes ont visité cette page aujourd'hui et 1165 en tout.