如果 Debian / Ubuntu Linux 出现问题,则回滚 apt-get 升级

[ad_1]

R回滚到以前的版本可能会解决问题或释放磁盘空间。 CentOS/RHEL 都支持回滚功能,但我很难学到 Debian 和 Ubuntu 还不支持回滚功能。

在选择解决方案之前先了解问题

我在其中一个非常便宜的云中远程管理 Ubuntu 14.04.3 LTS 服务器,并且我会定期使用 apt-get 命令/apt 命令来安装软件包或进行升级。 我想在我的系统上安装“Planet Venus”(一个灵活的提要聚合器)软件。 出于某种奇怪的原因,我跑了:
$ sudo apt-get -y --install-suggests install planet-venus

我应该停止安装。 但是,那天我太累了,工作过度了。 结果是一场灾难。 我用完了磁盘空间,它在系统上安装了 1764 个软件包。 我的行星-金星装置也坏了。 那是我犯错误并忘记拍摄快照/备份的日子之一。 长话短说:

有关的: 这不是我第一次搞砸了。 查看我的 10 个 Unix 命令行错误。

解决方案

我试过谷歌和 找到这个维基页面 没那么有帮助。 一些邮件列表和论坛帖子根本没有帮助。 最后,来自推特的提示:

Tweet - Does anyone know a simple way to rollback packages on

如何从命令行回滚 apt-get 升级?

我赶紧跑:
# grep -A 2 'Start-Date: 2016-01-17 07:56:42' /var/log/apt/history.log

示例输出(此处为完整转储):

Start-Date: 2016-01-17  07:56:42
Commandline: apt-get --install-suggests install planet-venus
Install: libmaa3:amd64 (1.3.2-2, automatic), ant:amd64 (1.9.3-2build1, automatic), libmimic0:amd64 (1.0.4-2.1ubuntu1,
....
...
....
b5.3-util:amd64 (5.3.28-3ubuntu3, automatic), libopencore-amrnb0:amd64 (0.1.3-2ubuntu1, automatic), firebird2.5-examples:amd64 (2.5.2.26540.ds4-9ubuntu1, automatic), libboost-random1.54-dev:amd64 (1.54.0-4ubuntu3.1, automatic), libtbb2:amd64 (4.2~20130725-1.1ubuntu1, automatic), libwxgtk2.8-0:amd64 (2.8.12.1+dfsg-2ubuntu2, automatic), libc6-x32:amd64 (2.19-0ubuntu6.6, automatic), magicfilter:amd64 (1.2-64, automatic)

回滚/撤消 apt-get install 命令

休息很容易。

创建列表:

grep -A 2 'Start-Date: 2016-01-17  07:56:42' /var/log/apt/history.log | tail -1 >/tmp/packages.txt

编辑 /tmp/packages.txt 文件并删除 Install: word:

vi /tmp/packages.txt

或者

sed -i 's/Install://' /tmp/packages.txt

最后,我需要清理一些东西:

tr ',' 'n' < /tmp/packages.txt | sed '/automatic)/d' | awk '{ print $1}' > /tmp/final.packages.txt
wc -l /tmp/final.packages.txt

示例输出:

1764 /tmp/final.packages.txt

删除包

现在,我有一个在那个不忠的日子安装的所有软件包的完整列表

# less /tmp/final.packages.txt 
libmaa3:amd64
ant:amd64
libmimic0:amd64
dc:amd64
libparse-yapp-perl:amd64
gir1.2-clutter-1.0:amd64
libjna-java:amd64
python-egenix-mxbeebase:amd64
libxkbcommon-x11-0:amd64
libmpeg2-4:amd64
libopencv-core2.4:amd64
libdvdread4:amd64
libhunspell-1.3-0:amd64
fonts-lobster:amd64
libtotem-plparser18:amd64
libodbcinstq4-1:amd64
jed-common:amd64
....
..
...
xfonts-cyrillic:amd64
postgresql:amd64
db5.3-util:amd64
libopencore-amrnb0:amd64
firebird2.5-examples:amd64
libboost-random1.54-dev:amd64
libtbb2:amd64
libwxgtk2.8-0:amd64
libc6-x32:amd64
magicfilter:amd64

只需卸载它:

# Run as root
# Store packages name in $p
p="$(</tmp/final.packages.txt)"
 
# Nuke it
apt-get --purge remove $p
 
#clears out the local repository of retrieved package files
apt-get clean
 
# Just in case ...
apt-get autoremove
 
# Verify disk space
df -H

结论

为了帮助自己,你必须做你自己。 成为最好的自己。 当你犯错时,从中吸取教训,振作起来,继续前进。 ——戴夫·佩尔泽

我了解到:

  1. 备份的最佳时间是在服务器上做主要工作之前。
  2. 三思而后行。 点击进入一次。
  3. 永远不要盲目相信 apt-get 或任何带有 -y 选项的命令。
  4. 始终制作快照。 不幸的是,这个盒子仍然使用 ext4。 没有选项可以使用此云服务器提供商将我的文件系统设置为 BTRFS/ZFS(ZFS 上的 Linux)。 所以我现在坚持使用 ext4。

又一天,系统管理员解决了另一个问题。

[ad_2]

Related Posts