Я не могу обновить Ubuntu, потому что некоторые пакеты хранятся обратно:
au464956@dnaseq1:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
gcc-5-base gcc-6-base libdatetime-locale-perl libdatetime-timezone-perl
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Я безуспешно пробовал некоторые другие решения этой проблемы, включая запуск sudo apt-get dist-upgrade
(это все еще удерживает пакеты обратно ), sudo apt install gcc-5-base
или других скрытых пакетов, что приводит к длинному сообщению, угрожающему удалить apt
, libapt-pkg5.0
и libstdc++6
, что, очевидно, будет слишком разрушительным и работает sudo apt-get --with-new-pkgs upgrade
.
Запуск sudo apt-cache policy
для сохраненных задних пакетов приводит к:
gcc-5-base:
Installed: 5.4.0-6ubuntu1~16.04.11
Candidate: 5.5.0-12ubuntu8
Version table:
5.5.0-12ubuntu8 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
*** 5.4.0-6ubuntu1~16.04.11 500
500 http://dk.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
100 /var/lib/dpkg/status
5.4.0-6ubuntu1~16.04.10 500
500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
5.3.1-14ubuntu2 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
gcc-6-base:
Installed: 6.0.1-0ubuntu1
Candidate: 6.4.0-22ubuntu1
Version table:
6.4.0-22ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
*** 6.0.1-0ubuntu1 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
libdatetime-locale-perl:
Installed: 1:1.02-1
Candidate: 1:1.22-1
Version table:
1:1.22-1 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe i386 Packages
*** 1:1.02-1 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe i386 Packages
100 /var/lib/dpkg/status
libdatetime-timezone-perl:
Installed: 1:1.95-1+2016a
Candidate: 1:2.19-1+2018e
Version table:
1:2.19-1+2018e 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe i386 Packages
*** 1:1.95-1+2016a 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe i386 Packages
100 /var/lib/dpkg/status
ОБНОВЛЕНИЕ: Вывод sudo apt dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
gcc-5-base gcc-6-base libdatetime-locale-perl libdatetime-timezone-perl
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Вывод попытки запустить обновление sudo do-release-upgrade
:
Checking for a new Ubuntu release
Please install all available updates for your release before upgrading.
Резервное копирование сначала . Скачайте Ubuntu Release, который хотите. Ubuntu Bionic - это новейшая версия LTS (с долгосрочной поддержкой), а Ubuntu Disco - это новейшая версия STS (краткосрочная поддержка). Создайте загрузочный DVD или USB-накопитель. Запустите Live-сессию и проверьте, все ли работает.
Я хотел бы отстаивать новую установку. В вашем руководстве описан релиз-обновление с xenial до bionic. Это поддерживается.
sudo apt install --reinstall gcc-5-base=5.5.0-12ubuntu8 gcc-6-base=6.4.0-22ubuntu1 libdatetime-locale-perl=1:1.22-1 libdatetime-timezone-perl=1:2.19-1+2018e
Таким образом, мы сообщаем apt, какая версия пакета нам нужна. Нет ошибок? sudo dpkg --configure -a && sudo apt -f install
Управление с помощью dpkg -l | egrep -v '^ii|rc'
, если все пакеты в хорошем состоянии. Нет выходных данных.
Теперь удаляйте во время обновления удаленные пакеты. Без какой-либо настройки вручную файлы конфигурации остаются в вашей Системе. sudo apt purge $(dpkg -l | egrep '^rc' | awk '{print $2}')
Посмотрите в /etc/apt/sources.list, что все записи указывают на космические. Я никогда не использую do-release-upgrade, я предпочитаю другой способ.
sudo apt install apt-show-versions
Это помогает идентифицировать пакеты, которые больше не доступны, потому что имя изменилось, например.
apt-show-versions | fgrep 'No available'
Если вы хотите избавиться от них всех. sudo apt purge $(apt-show-vesions | fgrep 'No available' | awk '{print $1}')
Примечание : это может работать, но не с гарантией.
Непосредственная проблема сдерживания gcc-5-base и gcc-6-base была решена путем добавления этого хранилища, вдохновленного этим вопросом :
sudo add-apt-repository ppa:ubuntu-toolchain-r/
sudo apt update
sudo apt upgrade
I тогда удалил другие скрытые пакеты (пакеты perl), так как они не будут удалять ненужные пакеты с мыслью, что я смогу переустановить их после обновления релиза.
Обновление релиза не удалось по другим причинам, над которыми я все еще работаю, но непосредственная проблема с сохранением пакетов, о которой идет речь, была решена.