«Пакет не в базе данных» при восстановлении с помощью dpkg -set-selection

Я просто переустановил Ubuntu MATE 15.10 с нуля. Я выполнил этот ответ, чтобы сохранить список установленных пакетов и восстановить его на вновь установленной системе.

Однако, когда я делаю

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

, я получаю длинный список ошибок такие как:

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

и, наконец,

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

Итак, я побежал sudo apt-get update и снова запустил dpkg, но я продолжаю получать ту же ошибку. [!d5 ]

Кажется, я получаю это сообщение об ошибке для каждого отдельного пакета в списке, в том числе довольно незаметные, такие как ядро ​​по умолчанию или sqlite. Кроме того, я не добавил никаких дополнительных PPA в свою предыдущую настройку, поэтому пакеты из репозиториев, отличных от по умолчанию, не могут быть проблемой здесь.

В качестве теста я попытался установить одно из "оскорбительных" пакеты с sudo apt-get install, которые работали без каких-либо проблем.

Что здесь не так?

1
задан 13 April 2017 в 15:24

2 ответа

Попробуйте следующее:

sudo apt-get install dselect && sudo dselect update

После выполнения:

sudo dpkg --set-selections < packages-backup.list
1
ответ дан 23 May 2018 в 13:55

Следующий сценарий был обходным путем для меня. Следите за linux-изображениями и linux-заголовками. Если у вас есть много из них в вашем dpkglist.txt, вы можете захотеть отфильтровать их с помощью команд grep -v, таких как

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

, чтобы установить и удалить пакеты из dpkglist.txt через apt-get [ ! d1]

#!/bin/bash

#
# get the packages
# 
# param 1: l_mode: install or deinstall
#
packages() {
  local l_mode="$1"
  # 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="$1"
  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
0
ответ дан 23 May 2018 в 13:55

Другие вопросы по тегам:

Похожие вопросы: