如何在 Debian Unstable 中安全地执行大量软件包升级?

如何在 Debian Unstable 中安全地执行大量软件包升级?

我已经运行 Debian Unstable (sid) 几个月了。我遇到的唯一严重问题是 Python3 在升级过程中暂时中断,幸运的是,维护人员发布修复后,我能够在一天内修复它。

然而,我试图在未来避免此类麻烦,并且在这里询问最佳实践,以确定何时在 Debian不稳定上继续进行软件包更新,以及何时等到错误修复后再进行更新。那是:如何维护更新的 Debian 不稳定系统,同时尽可能避免安装过程中损坏系统的风险?

例如,现在运行sudo apt-get update; sudo apt-get dist-upgrade显示有超过 200 个软件包需要升级,其中有 2 个软件包建议删除:

The following packages were automatically installed and are no longer required:
  libnfs8 python-subprocess32
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  libnfs11 libzstd1 python-kiwisolver python-olefile
The following packages will be upgraded:
  apt apt-utils atom-beta base-passwd binutils binutils-common binutils-x86-64-linux-gnu bluetooth bluez bubblewrap
  ca-certificates ca-certificates-java console-setup console-setup-linux cpp cpp-7 dconf-gsettings-backend
  dconf-service e2fslibs e2fsprogs e2fsprogs-l10n evince evince-common fontconfig fontconfig-config g++ g++-7 gcc
  gcc-7 gcc-7-base gcc-8-base geany geany-common gir1.2-glib-2.0 gnome-desktop3-data gtk-update-icon-cache gvfs
  gvfs-bin gvfs-common gvfs-daemons gvfs-libs keyboard-configuration libapt-inst2.0 libapt-pkg-perl libapt-pkg5.0
  libarpack2 libasan4 libatomic1 libavcodec57 libavformat57 libavresample3 libavutil55 libbabl-0.1-0 libbinutils
  libbluetooth3 libboost-atomic1.62.0 libboost-chrono1.62.0 libboost-date-time1.62.0 libboost-filesystem1.62.0
  libboost-iostreams1.62.0 libboost-locale1.62.0 libboost-program-options1.62.0 libboost-python1.62.0
  libboost-regex1.62.0 libboost-system1.62.0 libboost-thread1.62.0 libcairo-gobject2 libcairo2 libcc1-0 libcilkrts5
  libcom-err2 libcomerr2 libcups2 libcupsfilters1 libcupsimage2 libdconf1 libdouble-conversion1 libdw1 libelf1
  libevdocument3-4 libevview3-3 libext2fs2 libfftw3-double3 libfontconfig1 libgcc-7-dev libgcc1 libgegl-0.3-0
  libgfortran4 libgirepository-1.0-1 libglib2.0-0 libglib2.0-bin libglib2.0-data libgnome-desktop-3-17 libgomp1
  libgpg-error0 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz-icu0 libharfbuzz0b libhdf5-100
  libhttp-negotiate-perl libidn11 libinput-bin libinput10 libitm1 libjs-sphinxdoc libkpathsea6 liblsan0 liblz4-1
  libmpx2 libnm0 libnspr4 libnss3 libopenmpt-modplug1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0
  libparted-fs-resize0 libparted2 libperl5.26 libpostproc54 libprocps6 libpython-stdlib libpython2.7
  libpython2.7-minimal libpython2.7-stdlib libpython3-dev libpython3-stdlib libqt4-dbus libqt4-declarative
  libqt4-designer libqt4-dev libqt4-dev-bin libqt4-help libqt4-network libqt4-opengl libqt4-opengl-dev
  libqt4-qt3support libqt4-script libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-svg
  libqt4-test libqt4-xml libqt4-xmlpatterns libqt5core5a libqt5dbus5 libqt5gui5 libqt5multimedia5 libqt5network5
  libqt5opengl5 libqt5printsupport5 libqt5svg5 libqt5widgets5 libqt5x11extras5 libqtcore4 libqtdbus4 libqtgui4
  libquadmath0 libservlet3.1-java libsoup-gnome2.4-1 libsoup2.4-1 libsqlite3-0 libss2 libstdc++-7-dev libstdc++6
  libswresample2 libswscale4 libtiff5 libtsan0 libtumbler-1-0 libubsan0 libvlc-bin libvlc5 libvlccore9 libvolume-key1
  libvte-2.91-0 libvte-2.91-common libwww-robotrules-perl libxft2 ndiff network-manager nmap nmap-common parted perl
  perl-base perl-modules-5.26 procps python python-apt-common python-matplotlib python-matplotlib-data python-minimal
  python-pil python-tk python-tz python2.7 python2.7-minimal python3 python3-apt python3-crypto python3-dev python3-gi
  python3-minimal qdbus qt4-designer qt4-linguist-tools qt4-qmake qt5-gtk-platformtheme qtcore4-l10n
  qttranslations5-l10n sqlite3 tumbler tumbler-common virtualbox virtualbox-dkms virtualbox-qt vlc vlc-bin
  vlc-plugin-base vlc-plugin-notify vlc-plugin-qt vlc-plugin-samba vlc-plugin-skins2 vlc-plugin-video-output
  vlc-plugin-video-splitter vlc-plugin-visualization xfce4-settings xserver-xorg-input-libinput
234 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 275 MB/275 MB of archives.
After this operation, 5,831 kB of additional disk space will be used.
Do you want to continue? [Y/n]

你们如何确定这些升级/删除是否可以安全进行(即是否存在任何破坏软件包安装的已知错误)?

理想情况下,我不必每次想要更新时都阅读数百个错误报告页面,但我也不想在不知道是否会损坏我的计算机的情况下盲目地安装所有这些页面。

您实际上是否手动检查每个单独包的错误报告,或者是否有更有效的方法来执行此操作?当您维护 Debian 不稳定系统时,在此类系统范围更新期间您会采取哪些步骤来知道何时推迟更新?

答案1

我知道这不是您正在寻找的答案,但我认为这是正确的答案:

你不知道。为此,您只需使用 Debian stable。

如果您想使用最新的软件包,您就必须忍受(罕见的)软件包损坏的情况。包维护者无法检查他们的(许多)依赖项之一是否有可能破坏他们自己的包的更新,因为他们必须查看所有变更日志并执行测试,因为有时变更日志不准确或不完整。

作为替代方案,如果确实需要最新版本,您可以使用 debian stable 并混合来自 stable 的一些软件包。但是您仍然需要验证这些软件包的升级是否与您的稳定系统兼容。

只要不清除缓存,您就应该始终能够回滚到以前版本的包。您可以克隆您的计算机,尝试更新,如果测试成功,您可以在主机上进行更新。

您实际上是否手动检查每个单独包的错误报告,或者是否有更有效的方法来执行此操作?当您维护 Debian 不稳定系统时,在此类系统范围更新期间您会采取哪些步骤来知道何时推迟更新?

我不会将不稳定的系统用于需要工作且无法承受任何停机时间的生产系统。对于不稳定的系统:我祈祷并更新。如果某些内容未按预期工作,我只需加载最后一个 btrfs 快照来回滚整个系统,然后等待问题在上游得到解决。

答案2

阿罗切斯特提供了一个很好的答案,所以我不会重申其中的内容。

除此之外,这里还有一些提示可以帮助找出可能会出现问题的地方:

  1. 总是检查新内核、glibc 和 libstdc++ 版本的错误报告。根据您的系统,您可能可以添加您使用的任何 SSL 库、您的 init 系统以及可能的一些其他库(例如,如果您有桌面安装,则添加 Qt 或 GTK 库)。如果这些组件之一存在影响您的错误,那么它是非常很可能它至少会破坏某些东西,并可能摧毁整个系统。这个建议不仅适用于 Debian 用户,也适用于任何使用 Debian Sid 等发行版的人。

  2. 仔细检查 apt、dpkg 和其他 packagemanager 软件包通常也是一个好主意。这些不太可能会杀死你的系统,但是从由于其中一个而损坏的系统中恢复是相当困难的(我清楚地记得几年前,当 Gentoo 包管理器有一个错误时,我必须手动恢复几个系统)擦除了升级时用户安装的软件包列表)。

  3. 尽管这听起来很愚蠢,但请确保升级完成后重新启动。我在此类系统上看到的大多数问题都是由于旧程序与新程序一起运行而引起的。

  4. 如果可能的话,我建议考虑使用aptitude。它有一个很棒的预览模式,让您看到为什么正在安装每个新软件包,哪些软件包取决于正在升级的软件包,以及为什么跳过升级中排除的任何软件包。此信息对于确定升级可能导致的问题非常宝贵。从其中获取相同的信息apt-getdpkg需要大量手动工作来跟踪依赖关系。

答案3

作为一名长期 sid 用户,更新破坏系统的可能性是日常风险,以下是我的日常工作。

  1. 在 GUI 仍在运行的根终端中

易于更新

apt 完全升级 -d

现在,停下来仔细回顾一下即将发生的事情。首先,寻找拆除情况。如果要移除任何东西,那就是危险的第一个也是主要的迹象。如果距离您上次更新已经过去了很长一段时间(很多天或几周),并且您确实想要更新系统,那么您需要使用 dependent 和 rdepends 以及 Debian 中的信息来研究要删除的任何软件包包。有时,通过引入具有不同名称的替代包来废弃某个包,因此可以安全地放弃先前的包。但更典型的情况是,依赖关系将被其他升级的包破坏,导致删除您/您的系统需要的东西,这将破坏它。因此,当您看到删除时,尤其是当您的系统最近已更新时,最安全、最简单的方法是使用“n”中止完整升级,并在明天(希望)安全时重试。

  1. 如果看起来可以安全继续,请回答“y”并下载软件包。

  2. 按 Ctrl-Alt-F1 进入 tty1 控制台,并以 root 身份登录。

systemctl 隔离多用户.target

很快就会有人发帖说这是没有必要的。我不确定。我不是软件工程师,我不希望我的系统的 xserver 和 GUI 部分出现任何损坏。我有三个完全更新的 sid 系统,自从几年前上次某个硬件损坏或升级以来,这些系统一直运行无错误,所以......

4.

apt全面升级

易于清洁

systemctl 隔离图形.目标 && 退出

即使没有删除任何软件包,有问题的新软件包也会破坏 sid 系统,这种情况很少发生。但这种情况非常明显,并且修复包很快就出现了,所以我怀疑这种情况是否会在测试中发生。

来源:http://forums.debian.net/viewtopic.php?f=10&t=131073&p=633270#p633215

相关内容