Ignorar erros de download do apt-get

1

Estou tentando baixar alguns pacotes para uma instalação off-line usando apt-get download , mas por algum motivo, apt-rdepends inclui pacotes que não existem. Este é o comando que estou usando:

apt-get download $(apt-rdepends libboost1.55-all-dev | grep -v "^ ")

Esta é a saída que recebo:

E: Can't select candidate version from package libstdc++-dev as it has no candidate
E: Can't select candidate version from package debconf-2.0 as it has no candidate
E: Can't select candidate version from package libc-dev as it has no candidate
E: Can't select candidate version from package python-celementtree as it has no candidate
E: Can't select candidate version from package python-elementtree as it has no candidate

Mas apt continua reclamando que existem pacotes sem candidatos. Eu quero ignorar esses erros e baixar os pacotes e suas dependências de qualquer maneira. Não consigo encontrar um sinalizador que me permita ignorar os erros apt-get . Como faço isso?

    
por wheeler 11.08.2016 / 19:16

3 respostas

1

Como apt-rdepends não fornece uma maneira de ignorar pacotes, um wrapper é necessário para remover pacotes que não podem ser atendidos na lista de downloads. Uma maneira relativamente portátil de automatizar isso sem ter que instalar primeiro um interpretador como o Perl / Python é usar o script BASH abaixo.

getdepends.sh :

 #!/bin/bash
 export MAXPARAMETERS=255

 function array_contains_find_index() {
     local n=$#
     local i=0
     local value=${!n}

     for (( i=1; i < n; i++ )) {
         if [ "${!i}" == "${value}" ]; then
             echo "REMOVING $i: ${!i} = ${value}"
             return $i
         fi
     }
     return $MAXPARAMETERS
 }

 LIST=( $( apt-rdepends $1 | grep -v "^ " ) )
 echo ${LIST[*]}
 read -n1 -r -p "... Packages that will be downloaded (Continue or CTRL+C) ..."

 RESULTS=( $( apt-get download ${LIST[*]} |& cut -d' ' -f 8 ) )
 LISTLEN=${#LIST[@]}

 while [ ${#RESULTS[@]} -gt 0 ]; do
     for (( i=0; i < $LISTLEN; i++ )); do
         array_contains_find_index ${RESULTS[@]} ${LIST[$i]}
         ret=$?

         if (( $ret != $MAXPARAMETERS )); then
             unset LIST[$i]
         fi
     done

     FULLRESULTS=$( apt-get download ${LIST[*]} 2>&1  )
     RESULTS=( $( echo $FULLRESULTS |& cut -d' ' -f 11 | sed -r "s/'(.*?):(.*$)//g" ) )
 done

 apt-get download ${LIST[*]}

Para executar o script:

 ./getdepends.sh [package name]

Uma versão comentada que escrevi com mais funcionalidades de registro está disponível em pastebin aqui:

link

    
por 21.10.2016 / 08:51
0

Pode ser que este procedimento funcione para você. Mas os SOs nos computadores de origem e de destino devem ser os mesmos, tanto quanto possível.

1) Crie algum lugar na pasta temporária do computador de origem para os arquivos baixados e entre nele:

source_comp# mkdir libboost
source_comp# cd libboost

2) Obtenha uma lista de endereços http para os pacotes necessários para instalá-lo:

source_comp# apt-get -y --print-uris install libboost1.55-all-dev | grep "'" | cut -f1 -d' ' | tr -d "'" > packet-list.txt

4) Obtenha uma lista de pacotes adicionais necessários para construí-lo:

source_comp# apt-get -s build-dep libboost1.55-all-dev | grep "^ " > build-dep.txt

5) Obtenha uma lista de endereços http para esses pacotes:

source_comp# apt-get -y --print-uris install 'cat build-dep.txt' | cut -f1 -d' ' | tr -d "'" | sort | uniq > build-dep-urls.txt

6) Faça o download de todos os pacotes

source_comp# wget --input-file packet-list.txt
source_comp# wget --input-file build-dep-urls.txt

7) Copie todos os seus arquivos deb desta pasta no computador de origem para a pasta padrão para arquivos apt no computador de destino (usando scp, por exemplo):

target_comp# scp user@source_comp:/path_to_libboost/*.deb /var/cache/apt/archives/

e atualize o repositório de cache local, ignorando os avisos e erros:

target_comp# apt-get update

8) Agora você precisa instalar toda a infraestrutura para construir um pacote:

target_comp# apt-get build-dep libboost1.55-all-dev

9) E finalmente o pacote em si:

target_comp# apt-get install libboost1.55-all-dev
    
por 13.08.2016 / 14:13
0

Acabei de enfrentar um problema semelhante com linux-image-4.13.0-16-generic no artful: apt-get download $(apt-rdepends linux-image-4.13.0-16-generic | grep -v "^ ") reclama que não há debconf-2.0 . Você pode descobrir quais pacotes fornecem isso: link . Por exemplo, é fornecido por debconf package. Então você pode corrigir o problema acima com:

apt-get download $(apt-rdepends linux-image-4.13.0-16-generic | grep -v "^ " | sed 's/debconf-2.0/debconf/g')

Isso funcionou para mim.

    
por 21.04.2018 / 07:56