Question Comment créer un référentiel APT local?


Je voudrais créer mon propre référentiel local sur mon réseau local afin que les machines du réseau local puissent le mettre à jour et le mettre à niveau. Je souhaite télécharger les paquets et les stocker sur mon serveur local pour pouvoir les mettre à jour, les mettre à niveau, les installer, etc. sans utiliser Internet.


92
2017-07-31 09:15


origine


Duplication possible:askubuntu.com/questions/974/… - stephenmyall
Je ne pense pas que ce soit un doublon. Ce que maythux veut accomplir, c'est créer son propre serveur de référentiel pour l'utiliser avec aptitude. Ce que fait Keryx, c'est de remplacer aptitude en tant que gestionnaire de paquets et de créer des sources externes pour les paquets. - con-f-use
Duplicata possible? - askubuntu.com/questions/9809/… ou askubuntu.com/questions/3503/… - jrg♦


Réponses:


Du Ubuntu Aide wiki:

Il y a 4 étapes pour configurer un référentiel simple pour vous-même

1. installer dpkg-dev
     2. Placez les paquets dans un répertoire
     3.Créer un script qui analysera les paquets et créera un fichier apt-get update pourra lire
     4. Ajoutez une ligne à vos sources.list pointant vers votre référentiel

Installez dpkg-dev

Tapez dans un terminal

sudo apt-get install dpkg-dev

Le répertoire

Créez un répertoire dans lequel vous garderez vos paquets. Pour ça   exemple, nous allons utiliser /usr/local/mydebs.

sudo mkdir -p /usr/local/mydebs

Maintenant, déplacez vos paquets dans le répertoire que vous venez de créer.

Les paquets précédemment téléchargés sont généralement stockés sur votre système   la /var/cache/apt/archives annuaire. Si vous avez installé   apt-cacher vous aurez des paquets supplémentaires stockés dans ses / packages   annuaire.

Le script update-mydebs

C'est un simple trois lignes:

#! /bin/bash
 cd /usr/local/mydebs
 dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Coupez et collez ce qui précède dans gedit, puis enregistrez-le sous le nom update-mydebs dans   ~ / bin. (le tilde '~' signifie votre répertoire personnel. Si ~ / bin ne   existez, créez-le: Ubuntu mettra ce répertoire dans votre PATH. C'est un   bon endroit pour mettre des scripts personnels). Ensuite, rendez le script exécutable:

chmod u+x ~/bin/update-mydebs

How the script works:

dpkg-scanpackages regarde tous les paquets dans mydebs, et la sortie est compressée et écrite dans un fichier (Packages.gz) que apt-get   mise à jour peut lire (voir ci-dessous une référence qui explique cela dans   détail atroce). / dev / null est un fichier vide; c'est un substitut   pour un fichier de substitution qui contient des informations supplémentaires sur le   paquets, ce qui dans ce cas n'est pas vraiment nécessaire. Voir deb-override (5)   si vous voulez en savoir plus

Sources.list

ajouter la ligne

deb file:/usr/local/mydebs ./

à votre /etc/apt/sources.list, et vous avez terminé.

Option CD

Vous pouvez graver le répertoire contenant les debs sur un CD et l'utiliser comme   un référentiel également (bon pour le partage entre ordinateurs). Pour utiliser le   CD en tant que référentiel, exécutez simplement

sudo apt-cdrom add

Utiliser le référentiel

Chaque fois que vous mettez un nouveau deb dans le répertoire mydebs, lancez

sudo update-mydebs
sudo apt-get update

Maintenant, vos paquets locaux peuvent être manipulés avec Synaptic, aptitude et   les commandes apt: apt-get, apt-cache, etc. Lorsque vous tentez d'apt-get   installer, toutes les dépendances seront résolues pour vous, tant qu'ils   peut être rencontré.

Les paquets mal faits échoueront probablement, mais vous ne les aurez pas endurés   Dpkg l'enfer.


73
2017-08-16 11:45



Pourriez-vous expliquer la syntaxe sur la ligne dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz. Ce qui est /dev/null Faire là. J'ai lu la page de manuel aussi, mais ce n'était pas tout à fait clair. - sayantankhan
@ blade19899 J'ai besoin d'un petit éclaircissement, s'il vous plaît. Je veux un dépôt contenant quelques paquets sélectionnés, pas tous les paquets que j'ai touchés. Ai-je raison de dire que cette technique me donnera cette capacité? Le but ici est d’avoir un référentiel qu’un groupe d’installation de logiciels peut utiliser sur un réseau local isolé, loin des tentations d’injecter les données inutiles. - Wes Miller
@WesMiller Je pense que vous avez juste besoin de modifier son article! - blade19899
@ blade19899 Je suis désolé, je ne comprends pas votre réponse. - Wes Miller
@WesMiller vous avez besoin de BigSack Je viens d'éditer son post pour les problèmes de grammaire (je pense que son bac quelque temps) ce n'est pas ma réponse, mais celle de BigSack - blade19899


*Pour créer un référentiel hors ligne sur le LAN * 

Installer un serveur Web Apache local

# apt-get install apache2

Par défaut, le paquet Apache de Debian configurera un site Web sous /var/www sur votre système. Pour notre propos, ça va, donc il n'y a aucune raison de faire autre chose. Vous pouvez facilement le tester en pointant votre navigateur préféré sur http://localhostVous devriez voir la page Web post-installation par défaut qui est réellement stockée dans /var/www/index.html


Créer un répertoire de référentiel de paquets Debian

choisi de créer un répertoire /var/www/debs pour ça. Vous devez créer des répertoires "architecture", une pour chaque architecture à prendre en charge. Si vous n’utilisez qu’un seul ordinateur (ou type d’ordinateur), vous n’en aurez besoin que d’un seul, généralement «i386» pour les systèmes 32 bits ou «amd64» pour les systèmes 64 bits. Si vous utilisez une autre architecture, je suppose que vous êtes probablement déjà au courant. Maintenant, copiez simplement les fichiers de package ".deb" pour une architecture donnée dans les répertoires appropriés. Si vous pointez maintenant votre navigateur Web préféré sur http://localhost/debs/amd64 (par exemple), vous verrez une liste des packages pour les systèmes 64 bits.


Créer un fichier Packages.gz

Maintenant, nous devons créer un fichier de catalogue pour APT à utiliser. Ceci est fait avec un utilitaire appelé "dpkg-scanpackages". Voici les commandes que j'utilise pour mettre à jour les paquets AMD64 sur mon réseau local:

# cd /var/www/debs/

# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz




Faire connaître le référentiel à APT

Il ne reste plus qu'à laisser APT au courant de votre dépôt. Vous faites cela en mettant à jour votre fichier /etc/apt/sources.list. Vous aurez besoin d'une entrée comme celle-ci:

deb http://localhost/debs/ amd64/

J'ai utilisé le nom d'hôte actuel de mon système au lieu de localhost - de cette façon, le code est le même pour tous les ordinateurs de mon réseau local, mais localhost fonctionnera correctement si vous utilisez un seul ordinateur.
Maintenant, mettez à jour APT:

# apt-get update

38
2017-09-05 12:43



Ajouter cette ligne à /etc/apt/sources.list va casser les mises à jour lorsque vous n'êtes pas sur le LAN, n'est-ce pas? - Felix
Pour Ubuntu 16.04, vous devrez peut-être remplacer /var/www/debs dans cette réponse avec /var/www/html/debs. Ou vous aurez besoin d'étapes supplémentaires pour modifier manuellement votre configuration apache dans /etc/apache2 - Erik


Création d'un référentiel authentifié

J'ai regardé les réponses ici et sur d'autres sites et la plupart ont le désavantage (IMHO big) que vous configurez un dépôt non authentifié. Cela signifie que vous devez exécuter apt-get avec --allow-unauthenticated installer des paquets à partir de celui-ci. Cela peut constituer un risque de sécurité, en particulier dans les scripts où les packages que vous installez ne proviennent pas tous de votre référentiel local.

Notez que je n'ai pas couvert ici comment le rendre disponible sur le LAN, mais c'est une configuration assez générique utilisant Apache ou nginx (voir les autres réponses ici).

Configurez le répertoire repo

mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial

Puis ajoutez une ligne comme celle-ci à sources.list:

deb file:/home/srv/packages/local-xenial/ ./

Ajout et suppression de packages

enlever les paquets

rm /home/srv/packages/local-xenial/some_package_idont_like

ajouter des paquets

cp /some/dir/apackage.deb /home/srv/packages/local-xenial

exécutez maintenant le script suivant qui génère les fichiers Packages, Release et InRelease et les signe avec votre clé privée gpg:

#!/bin/bash

if [ -z "$1" ]; then
       echo -e "usage: `basename $0` DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)\n
The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this script\n
This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"
else
    cd /srv/packages/local-"$1"

    # Generate the Packages file
    dpkg-scanpackages . /dev/null > Packages
    gzip --keep --force -9 Packages

    # Generate the Release file
    cat conf/distributions > Release
    # The Date: field has the same format as the Debian package changelog entries,
    # that is, RFC 2822 with time zone +0000
    echo -e "Date: `LANG=C date -Ru`" >> Release
    # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e 'MD5Sum:' >> Release
    printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
    # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e '\nSHA256:' >> Release
    printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release

    # Clearsign the Release file (that is, sign it without encrypting it)
    gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
    # Release.gpg only need for older apt versions
    # gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release

    # Get apt to see the changes
    sudo apt-get update
fi

Exemple Contenu du fichier conf / distributions

Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 amd64 Components: main Description: My local APT repository SignWith: 12345ABC

Liens

https://wiki.debian.org/RepositoryFormat

http://ubuntuforums.org/showthread.php?t=1090731

https://help.ubuntu.com/community/CreateAuthenticatedRepository


13
2018-05-15 07:33



@Phillip votre edit utilisé date -Rc, Je l'ai corrigé à date -Ru en supposant que c'est ce que vous vouliez dire à partir de la description d'édition - muru
@muru à droite. Merci d'avoir repéré cela. - Phillip
Merci, j'ai récemment commencé à recevoir des avertissements d'apt à ce sujet en raison de la date générée étant dans la TZ locale et non UTC. Je l'ai corrigé dans mon propre script mais j'ai oublié de le modifier ici - happyskeptic
@KevinJohnson J'ai mis à jour la réponse principale maintenant avec un exemple de ce fichier de mon référentiel apt local - happyskeptic


Vous pouvez également configurer le serveur source local par nginx et reprepro:

  1. Installer les paquets debian

    sudo apt-get install reprepro nginx 
    
  2. créer des répertoires pour reprepro et le modifier

    sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}
    
    $ cd /srv/reprepro/ubuntu/
    $ sudo chown -R `whoami` . # changes the repository owner to the current user
    

    / srv / reprepro / ubuntu / conf / distributions

    Origin: Your Name
    Label: Your repository name
    Codename: karmic
    Architectures: i386 amd64 source
    Components: main
    Description: Description of repository you are creating
    SignWith: YOUR-KEY-ID
    

    / srv / reprepro / ubuntu / conf / options

    ask-passphrase
    basedir .
    
  3. Incluez-le dans reprepro, construisez-le

    $ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \
    # change /path/to/my-package_0.1-1.deb to the path to your package
    
  4. Config nginx:

    /etc/nginx/sites-available/vhost-packages.conf

    server {
      listen 80;
      server_name packages.internal;
    
      access_log /var/log/nginx/packages-access.log;
      error_log /var/log/nginx/packages-error.log;
    
      location / {
        root /srv/reprepro;
        index index.html;
      }
    
      location ~ /(.*)/conf {
        deny all;
      }
    
      location ~ /(.*)/db {
        deny all;
      }
    }
    
  5. Optimiser la taille du seau:

    /etc/nginx/conf.d/server_names_hash_bucket_size.conf

    server_names_hash_bucket_size 64;
    

Référence à Guide d'installation Lien


7
2017-07-03 09:18



Bien que cela puisse théoriquement répondre à la question, ce serait préférable inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. - gertvdijk
Bon conseil, je mettrai à jour la réponse. Merci. - elprup
@elprup: vous devez avoir oublié de mettre à jour cette réponse :) - 0xC0000022L


Vous voudrez peut-être regarder apt-mirror et apt-cacher .

Voici un guide sur comment installer et l'utiliser.


5
2017-07-31 11:02



Votre réponse de 5 ans est signalée comme étant LQ. Si elle est supprimée, rendez-vous dans meta et demandez une suppression. J'ai voté pour garder ouverte, mais cela nécessite une modification! ;-) - Fabby


Plusieurs raisons peuvent vous amener à créer un référentiel local.   Le premier est que vous voulez économiser de la bande passante si vous avez plusieurs   Les machines Ubuntu à mettre à jour. Par exemple si vous aviez 25 machines Ubuntu   que toutes les mises à jour au moins une fois par semaine, vous serait considérablement   économiser de la bande passante car vous pouvez faire tout sauf le référentiel localement.

La plupart des organisations ont une bande passante décente pour leurs passerelles réseau   mais cette bande passante est une denrée précieuse qui doit être utilisée   judicieusement.

De nombreuses organisations ont toujours des routeurs avec des limites de 10 Mo ou 100 Mo au   passerelle, mais 1 Go de connexions réseau en interne afin que la bande passante pourrait être   mieux utilisé en interne. La deuxième raison de créer votre propre   référentiel est que vous pouvez contrôler quelles applications sont chargées sur   vos machines Ubuntu internes.

Vous pouvez supprimer toutes les applications que votre entreprise ne souhaite pas utiliser   sur le réseau local à partir du référentiel qui met à jour les machines.   Encore mieux, vous pouvez créer une boîte de test et tester des applications et   versions avant de leur permettre de déployer dans votre réseau en assurant   sécurité et stabilité.

Vous devez d'abord configurer un miroir, pour ce faire, vous devez simplement appuyer sur    Ctrl+Alt+T sur votre clavier pour ouvrir   Terminal. Lorsqu'il s'ouvre, exécutez la commande ci-dessous.

apt-get install apt-mirror 

Une fois que vous avez installé votre apt-mirror, vous pouvez commencer votre téléchargement de   le référentiel avec cette commande.

apt-mirror /etc/apt/mirror.list1

Continuer à lire

1La source:Créer un référentiel Ubuntu


4
2017-08-16 22:29



désolé, le lien est mort - xamiro
@xamiro Merci. Lien corrigé - Mitch♦


Pour créer un référentiel local hors ligne 
1. rendre un répertoire accessible (au moins par racine)

sudo mkdir / var / my-local-repo

  1. copier tous les fichiers deb dans ce répertoire.
  2. scanner le répertoire

sudo dpkg-scanpackages / var / mon-repo-local / dev / null>   / var / my-local-repo / Packages

  1. ajouter le référentiel local aux sources

echo "fichier deb: / var / my-local-repo ./"> /tmp/my-local.list

sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list

sudo apt-get update


3
2017-09-05 12:32



Le plus ou moins la même chose est aussi sur le wiki officiel: Référentiels / Personnel - Wiki d'aide communautaire - sdaau


J'ai essayé d'utiliser apt-rdepends comme dans la réponse sélectionnée, mais lorsque j'ai essayé d'installer le package à partir de mon référentiel local, il s'est plaint des dépendances manquantes.

apt-rdepends ne listait pas certaines des dépendances pour mon paquet. Je pense que cela a quelque chose à voir avec le fait, que apt-cache show affiche plusieurs enregistrements pour cela.

Au lieu de cela j'ai utilisé apt-cache depends, et ça a fait l'affaire:

Obtenir une liste récursive de dépendances

apt-cache depends <packagename> -i --recurse

-i: dépendances importantes seulement --recurse: récursive

Transformez-le en une liste digestible

  • Enlever les symboles et les espaces: | tr -d "|,<,>, "
  • Enlever Depends: & PreDepends: | sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
  • Tri de la liste: | sort
  • Seules des valeurs uniques: | uniq > list.txt

Commande complète:

apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt

Télécharger les packages

for i in $( cat list.txt ); do apt-get download $i; done;

Rechercher les paquets et les transformer en Packages.gz

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

1
2018-06-08 13:55



Peut-être une bonne idée de faire référence à la réponse dont vous parlez ... - anonymous2


Les instructions dans La réponse de BigSack ci-dessus - et le post du wiki original il a cité - n'a pas fonctionné pour moi jusqu'à ce que je fasse deux changements:


1) J'ai généré un fichier "Packages" plat au lieu d'une version gzip'd:

dpkg-scanpackages -m. > Forfaits


2) j'ai ajouté [trusted=yes] à l'entrée de repo dans sources.list,

deb [confiance = oui] fichier: / usr / local / mydebs ./


Je soupçonne que # 2 est simplement une question de la mise à jour du wiki Ubuntu. Je ne sais pas pourquoi le n ° 1 était nécessaire - mais comme je ne pouvais pas le trouver documenté ailleurs, je voulais m'assurer que la solution était publiquement disponible.


0
2018-04-28 18:33