Créer un dépôt APT pour le client Seafile

Il existe à présent un dépôt officiel pour le client Seafile sous Linux.

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.

Source1 et 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.

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_i$
        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

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.

É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

FIXME

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 !

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
  • linuxaddict/administrer/depot.txt
  • Dernière modification: 05/09/2016, 18:44
  • par Claude Clerc