'Pacote não está no banco de dados' ao restaurar com dpkg --set-selections

5

Acabei de reinstalar o Ubuntu MATE 15.10 a partir do zero. Eu tinha seguido esta resposta para salvar uma lista de pacotes instalados e restaurá-lo no sistema recém-instalado.

No entanto, quando faço

sudo dpkg --set-selections < packages-backup.list

Eu recebo uma longa lista de mensagens de erro como estas:

dpkg: warning: package not in database at line 1417: sqlite3
dpkg: warning: package not in database at line 1417: sqliteman
dpkg: warning: package not in database at line 1417: sqliteman-doc

e finalmente

dpkg: warning: found unknown packages; this might mean the available database is outdated, and needs to be updated through a frontend method

Por isso, corri sudo apt-get update e re-executei dpkg , mas continuei recebendo o mesmo erro.

Parece que recebo esta mensagem de erro para todos os pacotes da lista, incluindo aqueles que não são nada notáveis, como o kernel padrão ou o sqlite. Além disso, eu não adicionei nenhum PPA adicional em minha configuração anterior, portanto, os pacotes de repositórios não padrão não podem ser o problema aqui.

Como teste, tentei instalar um dos pacotes "ofensivos" com sudo apt-get install , que funcionou sem problemas.

O que está errado aqui?

    
por user149408 29.01.2016 / 10:48

3 respostas

4

Os avisos são seguros para serem ignorados, uma vez que só dizem respeito ao banco de dados dpkg . A instalação real é feita com o APT, que não usa este banco de dados.

Quando você estiver usando dpkg dessa maneira, precisará usar dselect-upgrade para aplicar as alterações marcadas.

sudo apt-get dselect-upgrade

Do man dpkg :

  

Observe que esse arquivo é praticamente inútil se    você não usa o dselect mas um frontend baseado em APT: o APT possui seu próprio sistema para rastrear os pacotes disponíveis.

    
por philsf 29.01.2016 / 11:08
2

Tente isto:

sudo apt-get install dselect && sudo dselect update

Depois de poder executar:

sudo dpkg --set-selections < packages-backup.list
    
por Roberto De Oliveira 29.10.2017 / 22:51
0

O script a seguir foi uma solução para mim. Cuidado com as imagens linux e cabeçalhos linux. Se você tem muitos deles em seu dpkglist.txt, então você pode querer filtrá-los com comandos grep -v como

 cat dpkglist.txt | grep "$l_mode" | grep -v linux-headers | grep -v linux-image-3 | grep -v linux-image-extra-3 | cut -f1

script para instalar e desinstalar pacotes do dpkglist.txt via apt-get

#!/bin/bash

#
# get the packages
# 
# param 1: l_mode: install or deinstall
#
packages() {
  local l_mode=""
  # get the lines for the given mode
  cat dpkglist.txt | grep "$l_mode" |  cut -f1
}

#
# loop over the packages in the given mode
# param 1: l_mode: install or deinstall
#
loop() {
  local l_mode=""
  for package in $(packages $l_mode)
  do
    case "$l_mode" in
      install) apt-get -y install $package;;
      deinstall) apt-get -y remove $package;;
    esac
  done
}

# do two loops
loop deinstall
loop install
    
por Wolfgang Fahl 12.11.2017 / 14:03