====== Créer un dépôt APT pour le client Seafile ======
Il existe à présent un [[https://help.seafile.com/syncing_client/install_linux_client/|dépôt officiel]] pour le client Seafile sous Linux.
[[http://seafile.com|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.
[[https://forum.seafile-server.org/t/create-ppa-repository-of-seafile-server-and-client-for-easy-installing-on-ubuntu-systems/1344/8|Source1]] et [[https://www.digitalocean.com/community/tutorials/how-to-use-reprepro-for-a-secure-package-repository-on-ubuntu-14-04|Source2]]
SI vous ne voulez pas créer votre dépôt, utilisez le mien. Faites simplement un copier-coller de ces deux lignes de commande dans un terminal et validez.
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 [[https://www.seafile.com/en/download/|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
fi
Dé-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
Si en exécutant ce script, lors de la mise au point de votre dépôt, des erreurs apparaissent :
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 =====
FIXME
===== 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
----
{{counter|today| personne a visité cette page aujourd'hui| personnes ont visité cette page aujourd'hui}} et {{counter}} en tout.