2017-08-28 1 views
5

Je développe un service de mise à jour/mise à niveau avec un SDK hors ligne pour les périphériques Linux.Flux de travail Linux "apt-get update"

L'idée est de répliquer les services Linux de mise à jour/mise à niveau vers un périphérique hors ligne. Le dispositif "hors ligne" est capable d'atteindre "Internet" mais seulement par l'échange de messages en utilisant le SDK et par d'autres dispositifs (multi-hop). Les périphériques proviennent d'architectures différentes, par conséquent, l'appareil qui dispose de capacités «Internet» (passerelle) doit être capable de demander et de télécharger les packages à mettre à niveau vers/depuis une architecture différente. le périphérique passerelle doit être capable de mettre en cache les paquets téléchargés demandés à partir des mises à jour (pour agir comme un CDN), en évitant les demandes de repo.

Le périphérique hors connexion n'a pas d'adresse IP et la manière dont il communique n'est pas pertinente, car le SDK hors connexion garantit l'accessibilité à Internet sur plusieurs tronçons. Ce dont j'ai besoin - J'ai besoin de quelqu'un pour me fournir de l'aide ou des conseils sur le flux de mise à jour/mise à niveau de Linux.

Ce que je trouve à ce jour:

  • mise à jour

    • commande de mise à jour charge le /etc/apt/sources.list
    • ne savent pas comment chaque ligne mise à jour résout Sur /etc/apt/sources.list, il semble qu'il a une fonction où il charge le "deb" un "lien" et "arguments" qui correspondent aux dossiers repo correspondants.
    • après cela, il commence à télécharger tous les fichiers "Paquets" correspondants dans chaque lien résolu.
  • mise à niveau

    • fait une comparaison entre les fichiers "Packages" locaux mis à jour et les fichiers "packages" dans la prise en pension.

Y at-il code source de mise à jour/mise à jour disponible? J'ai fait une recherche sur le web sur les repos apt, mais je n'ai pas pu trouver les fonctions de mise à jour/mise à niveau.

+0

Que diriez-vous simplement de configurer votre périphérique compatible Internet en tant que serveur proxy basé sur liste blanche ou miroir de référentiel local? Vous n'avez pas besoin de programmer quoi que ce soit et vous obtenez une solution solide et supportée au lieu d'un hack fait maison fragile. – spectras

+0

Qu'en est-il de [this] (https://github.com/Debian/apt/blob/1d9e29c9e2a5591b42a99a721b901fc003ed9149/apt-pkg/upgrade.cc) et [this] (https://github.com/Debian/apt/blob/ 1d9e29c9e2a5591b42a99a721b901fc003ed9149/apt-pkg/update.cc)? –

Répondre

0

@spectras En ce qui concerne la configuration de proxy pour la passerelle, elle ne sert pas mon but. Le périphérique hors ligne envoie la demande de mise à jour à la passerelle. Nous pouvons supposer que la passerelle n'a pas de limitations d'Internet. Je pense qu'il n'est pas nécessaire de faire de la passerelle un miroir. Je suis plus intéressé par le mécanisme de mise à jour/mise à niveau pour répliquer ce processus dans le SDK hors ligne. Pour l'instant mon problème est que le périphérique hors ligne est un ARM et la passerelle est un x64, et quand je demande une mise à jour de sources.list d'un bras dans l'architecture x64, le binaire de mise à jour répond avec une erreur de mauvais architure.

Par conséquent, j'ai besoin de savoir comment faire pour que la passerelle ignore l'architure et télécharge la mise à jour des paquets en fonction des sources.list que je l'ai mis à charger, indépendamment de l'architecture.

@BenjaminW. Pendant que je posais cette question, j'ai commencé à passer à autre chose et j'ai téléchargé les sources d'apt et j'ai réalisé que apt-get charge des binaires comme ceux que vous avez mentionnés (mise à jour et mise à niveau). Merci pour le tuyau.Cependant, j'essaie maintenant de mieux comprendre le fonctionnement du mécanisme de mise à jour et de mise à jour: - Je sais que la mise à jour charge le fichier /etc/apt/lists/sources.list - Je transfère le fichier sources.list du périphérique hors ligne (ARM) au périphérique passerelle (x64) et démarrer la mise à jour sur la passerelle. - La mise à jour sur la passerelle lit les sources.list que je mets là depuis ARM et quand il commence à résoudre il montre des erreurs "Ignorer l'acquisition du fichier configuré ... ne supporte pas l'architecture ..."

J'essaye de faire, est de faire la passerelle ignorer l'architecture et appliquer la source.list d'ARM. J'ai juste besoin de fichiers de paquets.

Avez-vous d'autres idées ou une autre approche?

+0

@spectras vérifier ma réponse s'il vous plaît. –

+0

@BenjaminW. vérifier ma réponse s'il vous plaît. –

+0

* Note: vous devriez éditer votre question au lieu de créer une réponse. Les réponses sont là dans le but précis de répondre à la question. * De toute façon, comme je le disais, le meilleur moyen est de faire de votre passerelle un serveur proxy. Installez ce que vous voulez sur, comme ['tinyproxy'] (https://tinyproxy.github.io/) par exemple, il a un faible encombrement c'est parfait pour ce travail. Ensuite, sur vos autres appareils, vous ajoutez simplement 'Acquire :: http :: Proxy" http: // yourproxyaddress: proxyport ";' à votre '/ etc/apt/apt.conf' et voila. – spectras