Packages

[Synology] Mettre en place son dépôt de packages

Cet article a été rédigé il y a 5 années ! Il commence à dater, mais n'est pas forcément obsolète.. Lisez-le en gardant cela en tête !
Bonsoir, Ce tutoriel n’est pas uniquement un tutoriel pour mettre en place un dépôts de packages. Derrière la création d’un dépôts de packages se cache un concept : le Reverse Engineering. En effet nous allons utiliser la technologie Synology : le serveur de packages Synology, pour recréer notre serveur de packages. Cependant problème (et ce problème peut-être que vous l’avez surement déjà rencontré), aucune information à disposition, aucun serveur de packages tout prêt au téléchargement fourni par Synology, aucune documentation.. Quand on en arrive là en infos, on commence à réfléchir.. /!\ Problème de compatibilité avec le DSM 5.X résolu. Compatible DSM 4.X et 5.X !!

I) La boite noire ?

Mettons les choses en places, la boite noire c’est le serveur de package Synology. Comment faire pour étudier cette boite noire ? Pour cela nous allons utiliser WireShark pour analyser les trames de notre réseau. Pourquoi ? Et bien simplement, car si un serveur de package discute avec le centre de package, il passe nécessairement par notre serveur Synology sur le réseau, c’est pourquoi nous allons enregistrer une trame et l’étudier pour recréer un serveur de package. Je vais vous faciliter la tâche pour ce point, le serveur de package Synology qui va renseigner notre serveur Synology se trouve à l’adresse :

http://update.synology.com/packageupdate/getpackages.php

(C’est bien le lien vers notre boite noire et oui !)

Pour la petite histoire, cette adresse je l’ai trouvé sur le forum http://forum.synology.com, grâce à quelqu’un qui avait un problème de mise à jours des packages, détecté dans le fichier /var/log/messages de son nas. Je pensais d’abord la trouver en étudiant une trame lorsque je cliquerais sur le bouton "Actualisé" du centre de package, mais les requêtes sont en https, donc j’ai cherché une solution alternative… (J’aurai d’ailleurs pu prendre un centre de package créé par quelqu’un pour faire comme lui ^^, mais je préfère me mettre dans la situation où il y a juste Moi et Synology.)

II) Les Requêtes HTTP

a. Capture d’une trame

Étant écrit sur une page php, la communication va se faire via le port 80, nous allons donc étudier le port 80 lors de l’envoie d’une requête vers la page http://update.synology.com/packageupdate/getpackages.php et regarder ce que le serveur nous renvoie. Nous allons tout d’abord installer sur notre syno le package tcpdump
ipkg install tcpdump
A partir de là, nous allons nous rendre sur le centre de package de notre serveur et créer une source de package Nous allons lancer à présent tcpdump depuis le terminal de notre nas, avec les paramètres de la commande suivante :
tcpdump port http -w capture.log
Avec cette petite commande nous allons écrire les résultats de notre capture du port 80 dans le fichier "capture.log". (Je pourrais bien entendu écouter simplement les hôtes portant le nom update.synology.com à l’aide de la commande "tcpdump src update.synology.com or dst update.synology.com -w capture.log", c’est au choix !) Pour la capture via le port 80, quittez bien toutes les pages web à part le dsm et débrouiller vous pour que personne n’utilise internet à part vous sur votre réseau, sinon vous allez avoir des paquets superflus.  À présent, appuyez sur le bouton OK.

Attendez la fin de la sauvegarde des packages. Quittez alors le dsm en supprimant la source des packages synology, car vous n’en n’aurez plus besoin (sauf erreurs !!) Retournez sur le terminal du syno et quittez la capture à l’aide de Ctrl+C.

b. Récupération des requêtes

Récupérez à présent la capture sur votre ordinateur et ouvrez là avec WireShark

Vous aurez une liste de lignes avec le protocole TCP et 2 lignes avec des requetes HTTP. Exportez alors le contenu de ces paquets comme je vous le montre sur l’image ci-dessous. (Personnellement je sauvegarde la requete et la réponse dans 2 fichiers distincts, resp. requete.log et reponse.log)

Nous arrivons petit à petit au résultat !! Ça fait plaisir ! 🙂

III) Création de notre centre de packages

a. Analyse des logs

Ouvrez la requête, il s’agit de ce que notre centre de package a envoyé au serveur de dépôt synology. À priori, ça va, il s’agit d’une requête GET, avec quelques paramètres. Nous pourrons en tenir compte pour trier les paquets à afficher ou non, mais autrement, cette requête n’a que peu d’intérêt à ce stade !

Ouvrez la réponse du serveur.. Et là, ciel ! Ne prenez pas peur et analysons ce fichier.

Parmi les caractères incompréhensibles se cachent des choses compréhensible par le cerveau humain !! Observez donc l’image ci-dessous, et voyez que la structure du document est toujours la même ! Les caractères incompréhensibles ne sont en réalité que le résultat de l’encodage en base64 du contenu de l’icône (C’est un format standard pour faire transiter des images, c’est comme ça que je l’ai reconnu.. ^^). En php ça se traduit par base64_encode(file_get_contents($urlImage)); En supprimant le contenu de la variable "icon" et "desc" et en indentant un minimum le fichier "reponse.log", on obtient le fichier suivant :

b. Mise en place du script

Je vous ais dis d’indenter le log, mais finalement ce n’était juste qu’un moyen pour vous rendre compte de la structure du document. Pour avoir testé, je peux vous dire d’avance que toutes les variables ne seront pas nécessaires.. Ne sachant pas exactement ce à quoi sert toutes les variables, quoique certaines sont quand même assez évidentes, je vous laisse le choix ou non de les intégrées à votre script. Et oui, car nous allons à présent écrire un petit script (sans indentation à l’affichage du résultat), qui va permettre la mise en place facile et rapide de notre centre de package !
  • Soit vous rentrez à la main les packages que vous voulez voir dans votre centre de package, ce qui risque d’être long et fastidieux
  • Soit vous créez un programme avec des tableaux associatifs, pour simplifier la tâche.
  • Soit vous automatisez avec une interface de gestion en plus !

c. Conclusion et retour sur le Reverse Engineering

À présent, vous disposez de votre centre de package.. Mais en plus de ça vous avez eu un aperçu d’une technique couramment utilisée pour entre autre comprendre le fonctionnement interne d’un serveur et ainsi le recréer !

Si vous avez compris ça, j’ai gagné ma journée ! 🙂

IV) L’interface Packages UI :

Pour les plus fainéants, je vous propose de vous faciliter la tâche en vous rendant sur le lien suivant :

http://apps.gauss-it.net/spkui/

Sur ce site, je mettrai les versions corrigées de l’interface Packages UI, dès que l’on me demandera d’améliorer l’interface ou que des erreurs seront trouvées ! Je n’ai pas l’intention d’améliorer Package UI, sans interventions extérieures qui me pousserait à le faire. Alors en cas de problèmes, n’hésitez pas à me contacter pour que l’on trouve une solution à votre problème !

3 réponses à “[Synology] Mettre en place son dépôt de packages

  1. Les réponses des serveurs de paquets (officiels ou non) sont stockées sur le NAS à l’adresse : /volume{x}/@tmp/pkglist.tmp/.
    Il s’agit des fichiers avec l’extension .fre (synoserver.fre et otherserver.fre).

    Ce n’est que depuis le DSM 4.2 que les requêtes transitent via HTTP over SSL (HTTPS).

  2. salut ton logiciel est plus dispo?

    je cherche a cree un depo pour mon raspberry ( j ai du bas debit et je reinstall souvent )
    cela est possible avec ton tuto? noob sorry

    1. Salut Gat,
      À priori Geasy (si c’est ce dont tu parles) est normalement tjs dispo! Sinon c’est qu’il y a un soucis!
      Mais non ce logiciel est fait pour les serveur synology.
      Apres rien ne t’empêches de sauvegarder des sources du repo apt-get (avec les dépendances) bien que ce puisse être long et fastidieux comme démarche et les installer manuellement

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *