wget baixou os nomes dos arquivos com o caminho absoluto para uso com o apt-get

2

Estou procurando uma maneira de atualizar uma máquina que esteja off-line. Para esse propósito, encontrei esta explicação usando --print-uris de apt-get . Eu instalei novos pacotes (e dependências) com sucesso. Muito útil.

No entanto, quando tentei atualizar a lista de pacotes usando o método descrito no link anterior, acabei com um monte de arquivos chamados Packages.bz2.* , onde * recebe valores de 1 a 23. Até agora Eu entendo que tenho que extraí-los e o arquivo resultante copiá-lo para /var/lib/apt/lists/ .

Existe uma maneira de fazer o download dos arquivos com wget mas em vez de todos os chamados Packages.bz2 com nomes semelhantes (ou preferencialmente iguais) aos originalmente usados pelo apt-get archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages , então ao extraí-los eles ficam legíveis nomes.

Depois de fazer isso, há algo mais que eu tenho que fazer para obter atualizações do apt-get (eu pretendo fazer uma atualização imprimindo uris e então instalando os pacotes).

Um exemplo de execução:

sudo apt-get update --print-uris -y > update.list

Isso fornece um arquivo contendo linhas como:

'http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-amd64/Packages.bz2' security.ubuntu.com_ubuntu_dists_trusty-security_main_binary-amd64_Packages 0 :
'http://security.ubuntu.com/ubuntu/dists/trusty-security/restricted/binary-amd64/Packages.bz2' security.ubuntu.com_ubuntu_dists_trusty-security_restricted_binary-amd64_Packages 0 :

Este formato não pode ser alimentado para wget, portanto, extraímos os urls executando (isso pode ser feito diretamente no comando anterior, como mostrado na página vinculada):

cat update.list | grep ^\' | cut -d\' -f2 > update.cut

Em seguida, obtemos um arquivo com linhas como:

http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-amd64/Packages.bz2
http://security.ubuntu.com/ubuntu/dists/trusty-security/restricted/binary-amd64/Packages.bz2

Agora isso pode ser alimentado no wget usando a opção --input-file. Eu executei:

mkdir lists
cd lists
wget --input-file ../update.cut

Um ls mostra:

Packages.bz2     Packages.bz2.14  Packages.bz2.2   Packages.bz2.4  Translation-en.bz2     Translation-en.bz2.4
Packages.bz2.1   Packages.bz2.15  Packages.bz2.20  Packages.bz2.5  Translation-en.bz2.1   Translation-en.bz2.5
Packages.bz2.10  Packages.bz2.16  Packages.bz2.21  Packages.bz2.6  Translation-en.bz2.10  Translation-en.bz2.6
Packages.bz2.11  Packages.bz2.17  Packages.bz2.22  Packages.bz2.7  Translation-en.bz2.11  Translation-en.bz2.7
Packages.bz2.12  Packages.bz2.18  Packages.bz2.23  Packages.bz2.8  Translation-en.bz2.2   Translation-en.bz2.8
Packages.bz2.13  Packages.bz2.19  Packages.bz2.3   Packages.bz2.9  Translation-en.bz2.3   Translation-en.bz2.9

Após este ponto, o site que eu vinculei não dá mais pistas além disso, deve ser colocado em / var / lib / apt / lists /. Para isso eu faço (depois que eu copiei os arquivos para a máquina off-line):

sudo rm -R /var/lib/apt/lists/*
bunzip2 Packages.bz2.14
sudo cp Packages.bz2.14.out /var/lib/apt/lists/

Mas depois de fazer isso, não consigo pesquisar pacotes com apt-cache , então suponho que algo deu errado (verifiquei que o arquivo Packages.bz2.14.out lista um nome de pacote 0ad e procurei por ele).

Por enquanto, estou tentando obter arquivos baixados com nomes legíveis (acho que alguns devem ser arquivos gpg, mas não sei quais por causa do nome).

Depois disso, quero poder fazer pesquisas de pacotes com a nova lista de pacotes (para fazer atualizações e instalações de software). Não tenho certeza do que acontece se os arquivos gpg estiverem faltando (talvez seja por isso que não consigo encontrar pacotes) ou verifique o gpg antes de copiá-lo para /var/lib/apt/lists/ .

    
por Javier Mr 10.12.2013 / 16:02

2 respostas

3

A abordagem simples

Se você estiver usando outra máquina, uma que esteja conectada à Internet, para atualizar seu computador de destino, basta usar o mesmo arquivo sources.list nas duas máquinas, executar apt-get update e depois copiar as listas de pacotes :

$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.orig
$ sudo mv target_computer_sources.list /etc/apt/sources.list
$ sudo apt-get update

apt armazena suas listas de arquivos de repositório em /var/lib/apt/lists/ , então, depois de executar o comando acima, você pode copiar tudo em /var/lib/apt/lists/ para a máquina de destino e reverter para o original sources.list :

$ sudo mv /etc/apt/sources.list.orig /etc/apt/sources.list 

A maneira complexa

Por qualquer motivo, o método acima não funciona para você, você pode fazer do jeito que estava sugerindo, basta analisar a saída de apt-get update --print-uris . O seguinte é do meu sistema LMDE, mas a idéia é a mesma:

$ sudo apt-get update --print-uris -y | head
'ftp://ftp.debian.org/debian/dists/testing/main/source/Sources.bz2' ftp.debian.org_debian_dists_testing_main_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/contrib/source/Sources.bz2' ftp.debian.org_debian_dists_testing_contrib_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/non-free/source/Sources.bz2' ftp.debian.org_debian_dists_testing_non-free_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/InRelease' ftp.debian.org_debian_dists_testing_InRelease 0 
'http://packages.linuxmint.com/dists/debian/main/source/Sources.bz2' packages.linuxmint.com_dists_debian_main_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/upstream/source/Sources.bz2' packages.linuxmint.com_dists_debian_upstream_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/import/source/Sources.bz2' packages.linuxmint.com_dists_debian_import_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/main/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_main_binary-amd64_Packages 0 :
'http://packages.linuxmint.com/dists/debian/upstream/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_upstream_binary-amd64_Packages 0 :
'http://packages.linuxmint.com/dists/debian/import/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_import_binary-amd64_Packages 0 :

Na saída acima, o primeiro campo é o URL e o segundo é o nome no qual o arquivo será salvo. Como mencionei antes, apt armazena suas listas de arquivos de repositório em /var/lib/apt/lists/ , você pode verificar isso executando locate em um dos dois campos acima:

$ locate packages.linuxmint.com_dists_debian_main_source_Sources
/var/lib/apt/lists/packages.linuxmint.com_dists_debian_main_source_Sources

Portanto, se você quiser fazer o download e atualizar cada uma dessas listas, será necessário analisar a saída de apt-get update --print-uris e informar wget para usar o segundo campo como o nome da saída:

$ sudo apt-get update --print-uris -y | sed "s/'//g" | cut -d ' ' -f 1,2 | 
   while read url target; do wget $url -O ./$target; done 

Isso fará o download de cada lista de pacotes e salvará no diretório atual usando o nome apropriado. Agora você pode copiar esses arquivos para o diretório /var/lib/apt/lists/ da máquina de destino.

    
por 10.12.2013 / 18:02
0

Isso pode não se aplicar diretamente ao que você queria fazer. Mas como parece que wget não está preservando o caminho dos arquivos que você baixou, você pode querer usar a opção de diretório -x :

-x
--force-directories
       The opposite of -nd---create a hierarchy of directories, even if
       one would not have been created otherwise.  E.g. wget -x
       http://fly.srk.fer.hr/robots.txt will save the downloaded file to
       fly.srk.fer.hr/robots.txt.
    
por 12.03.2018 / 19:35