J'essaie de télécharger tous les paquets et les dépendances nécessaires sur un serveur avec une connexion Internet active et de les transférer sur le serveur sans connexion Internet, puis de les installer via apt-get.
J'ai deux solutions pour télécharger des packages:
apt-get --print-uris --yes install pkgspec | grep ^\' | cut -d\' -f2 > downloads.list
Est inutile car cela ne fonctionne que pour les paquetages et les dépendances qui ne sont pas déjà téléchargés et installés sur un serveur avec une connexion Internet fonctionnelle.
aptitude download '?reverse-depends(package)'
Il télécharge tous les paquets et dépendances même si vous n'en avez pas besoin.
Tout le monde connaît une meilleure solution pour télécharger un paquet et les dépendances devaient être installées sur une nouvelle installation du serveur Ubuntu 16.04?
Je veux créer un script qui passe par une liste de paquets et télécharge automatiquement tous les paquets et dépendances.
Ensuite, j'ai besoin d'une solution pour utiliser ces paquets sur un ordinateur hors ligne avec apt-get. L’idée est de créer un référentiel local apt qui vous permettra d’utiliser vos paquets locaux via apt-get.
J'utilise donc cette commande pour créer Packages.gz qui contient des informations sur tous les packages téléchargés lors de la première étape.
dpkg-scanpackages . /dev/null | gzip > Packages.gz
Ensuite, j'ajoute une nouvelle source à /etc/apt/sources.list.d/ et lance apt-get update.
deb [trusted=yes] file:///tmp/dpkgs /
Maintenant, j'ai un problème que je peux par exemple installer Apache (encore quelques erreurs). Mais si je veux installer php, j'ai l'erreur suivante.
root@ubuntu:~# apt-get install php
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php : Depends: php7.0 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Quelqu'un a une solution de travail pour ce problème? Merci.
Lan Morrison a créé un script isorespin.sh
qui crée une image à partir des commandes que vous donnez et avec une commande supplémentaire, vous pouvez afficher toutes les mises à jour de cette heure sur l'image et installer les installations que vous souhaitez sur l'image d'installation créée. Je l'ai utilisé et ça marche vraiment bien.
Pour plus de détails, voir: Personnalisation des ISO d'Ubuntu: Documentation et exemples sur l'utilisation de isorespin.sh
.
Ma recommandation est de faire des tunnels SSH, je suppose que vous vous connectez au serveur avec une connexion SSH depuis une machine qui a une connexion Internet, vous pouvez donc utiliser des tunnels inverses pour avoir au moins accès à votre système de stockage souhaité ... Veuillez suivre ces pas:
Connectez-vous à votre serveur avec la commande suivante:
ssh -R 127.0.0.1:9800:yourrepo.address:80 youruser@ServerWithoutInternetConnectionAddress
Une fois connecté à votre serveur, ajoutez la ligne suivante à/etc/hosts:
127.0.0.1 yourrepo.adress
Dans votre fichier de configuration de référentiel dans /etc/apt/sources.list
ou dans /etc/apt/sources.list.d/repofile.list
, modifiez l'adresse de votre référentiel en ajoutant le port utilisé (j'ai utilisé 9800, bien qu'il puisse s'agir de tout port supérieur à 1023):
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-mirror/ xenial main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-mirror/ xenial-updates main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-Java/ xenial main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-production/ xenial multiverse
Maintenant, apt-get update
et apt-get install
devraient fonctionner. Veuillez considérer que vous pouvez avoir autant de tunnels que de référentiels, il vous suffit de changer de port source.
Par exemple. Considérez que vous avez un référentiel officiel Ubuntu dans /etc/apt/sources.list
et un autre dans /etc/apt/sources.list.d/repofile.list
Je peux utiliser le port à 9801 pour us.archive.ubuntu.com
et le port 9800 pour /etc/apt/sources.list.d/repofile.list
comme suit:
/etc/apt/sources.list
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial main restricted universe multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial main restricted multiverse
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial-security main restricted universe multiverse
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial-security main restricted multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial-updates main restricted multiverse
/etc/apt/sources.list
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-mirror/ xenial main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-mirror/ xenial-updates main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-Java/ xenial main
deb [Arch=AMD64] http://yourrepo.address:9800/ubuntu-production/ xenial multiverse
En ajoutant ceci à /etc/hosts
127.0.0.1 yourrepo.adress us.archive.ubuntu.com
Et connectez-vous à partir d'une machine avec une connexion Internet comme suit:
ssh -R 127.0.0.1:9800:yourrepo.address:80 -R 127.0.0.1:9801:us.archive.ubuntu.com:80 youruser@ServerWithoutInternetConnectionAddress
PS: Si votre référentiel a besoin d'une clé, vous devez extraire la clé (à partir d'un ordinateur doté de la clé apt-key export KEY_ID >> key.asc
) et l'ajouter à l'aide de la commande suivante:
apt-key add key.asc
Je n'ai jamais essayé cela, alors YMMV.
Découvrez this et apt-offline .
Ils prétendent faire exactement ce que vous voulez.