Baixe e instale os pacotes e dependências do Ubuntu em um servidor sem conexão com a Internet

3

Estou tentando baixar todos os pacotes e dependências necessárias em um servidor com conexão de internet ativa e transferi-los no servidor sem conexão com a internet e depois instalá-los via apt-get.

Eu tenho duas soluções para baixar pacotes: 1)

apt-get --print-uris --yes install pkgspec | grep ^\' | cut -d\' -f2 >downloads.list

É inútil porque funciona apenas para pacotes e dependências que não são baixados e instalados em um servidor com conexão de internet ativa.

2)

aptitude download '?reverse-depends(package)'

Faz o download de todos os pacotes e dependências também se você não precisar deles.

Alguém conhece uma solução melhor para baixar um pacote e dependências que precisam ser instaladas em uma nova instalação do servidor Ubuntu 16.04?

Eu quero criar um script que passe por uma lista de pacotes e faça o download de todos os pacotes e dependências automaticamente.

Então eu preciso de uma solução para usar este pacote em um computador offline com o apt-get. A idéia é criar um repositório apt local que permita usar seus pacotes locais via apt-get.

Então eu uso este comando para criar o Packages.gz que contém informações sobre todos os pacotes que foram baixados na primeira etapa.

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

Em seguida, adiciono uma nova fonte ao /etc/apt/sources.list.d/ e executo o apt-get update.

deb [trusted=yes] file:///tmp/dpkgs /

Agora eu tenho um problema que eu posso, por exemplo, instalar o apache (ainda alguns erros). Mas se eu quiser instalar o php, recebi o seguinte erro.

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.

Alguém tem uma solução funcional para esse problema? Obrigado.

    
por Adrijan 12.08.2016 / 13:45

3 respostas

1

Lan Morrison criou um script isorespin.sh que fará uma imagem a partir dos comandos que você fornecer e com um comando adicionado poderá ter todas as atualizações da imagem e instalar qualquer instalação do apt desejada na imagem de instalação . Eu usei e funciona muito bem.

Para mais detalhes, consulte: Personalizando os ISOs do Ubuntu: documentação e exemplos de como usar isorespin.sh .

    
por Raymond Day 05.02.2018 / 13:31
0

Eu nunca tentei isso, então YMMV.

Confira este e apt-offline .

Eles afirmam fazer exatamente o que você quer.

    
por Joe 19.08.2016 / 08:27
0

Minha recomendação é fazer túneis ssh, eu suponho que você esteja logando no servidor com uma conexão SSH de uma máquina que tenha conexão com a internet, daí você pode tentar usar túneis reversos para ter acesso pelo menos aos seus repos desejados ... Por favor, siga estes passos:

  1. Faça login no seu servidor com o seguinte comando:

ssh -R 127.0.0.1:9800:yourrepo.address:80 youruser@ServerWithoutInternetConnectionAddress

  1. Uma vez logado no seu servidor, adicione a seguinte linha ao / etc / hosts:

127.0.0.1 yourrepo.adress

  1. Em seu arquivo de configuração do repositório em /etc/apt/sources.list ou em /etc/apt/sources.list.d/repofile.list , modifique seu endereço de repositório adicionando a porta usada (usei 9800, embora possa ser qualquer porta maior que 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

Agora apt-get update e apt-get install devem estar funcionando ... Por favor, considere que você pode ter tantos túneis quanto repositórios, você só precisa mudar sua porta de origem.

por exemplo. considere que você tem repositório oficial do ubuntu em /etc/apt/sources.list e outro em /etc/apt/sources.list.d/repofile.list eu posso usar porta para 9801 para us.archive.ubuntu.com e porta 9800 para /etc/apt/sources.list.d/repofile.list da seguinte forma:

/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

Adicionando isso a /etc/hosts

127.0.0.1 yourrepo.adress us.archive.ubuntu.com

E faça o login de uma máquina com conexão à internet da seguinte forma:

ssh -R 127.0.0.1:9800:yourrepo.address:80 -R 127.0.0.1:9801:us.archive.ubuntu.com:80 youruser@ServerWithoutInternetConnectionAddress

PS: Considere que, se o seu repositório precisar de uma chave, você precisará extrair a chave (de uma máquina que tenha a chave apt-key export KEY_ID >> key.asc e adicione-o usando o seguinte comando:

apt-key add key.asc

    
por Alvaro Niño 05.02.2018 / 12:52