====== 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.