我正在使用 KPackageKit 来维护我的系统,并且我试图让所有包保持最新(但我没有启用任何实验性或测试版存储库)。
我认为这样的设置不会破坏任何东西,但事实似乎并非如此。两周前更新后,Flash Player 停止工作。另一次更新后,又出现了其他问题。
那么,问题是:如何知道何时更新软件包,但又不破坏任何东西?即使出现损坏,有没有办法恢复更改?
答案1
您应该在更新出现后立即安装。更新在向公众发布之前会进行测试。这些未发布的更新称为建议更新。有时更新会破坏某些东西,这被称为回归。由于之前经过了测试,这些回归很少见,但这并不会降低完全破坏软件包的可能性。
对于 Flash,安装程序有时不起作用。我注意到flashplugin-installer
使用 KPackageKit 进行升级有时会删除 Flash 而不安装新版本。解决方案是重新安装它,为此我更喜欢使用终端,这样我可以看到任何错误消息:
sudo apt-get install --reinstall flashplugin-installer
请注意,此安装程序比较特殊,由于许可原因,Flash 库不能在包中分发,因此包从 下载 Flash archive.canonical.com
。
与其他软件包一样,这可能是回归类型如前所述。大多数软件包都有一个Launchpad.net 上的错误跟踪器,也可能有解决方案。回归问题通常很快就能得到解决。
要“恢复”更新,您需要知道先前安装的软件包的版本。/var/log/apt/history.log
包含对软件包及其版本的更改。
我编写了一个 bash 命令,你必须执行它并输入包名。然后会显示以前版本的列表。可以使用 更简洁地完成awk
,但我还没有学会 :D
oIFS="$IFS";IFS=$',\n';read -p 'Package name: ' package;for w in $(grep "^Upgrade: " /var/log/apt/history.log | cut -c9-);do [[ ${w/:*/} == \ $package ]] && echo "$w" | cut -d"(" -f2; done;IFS="$oIFS"
确定旧版本后,您必须在终端中运行下一个命令:
sudo apt-get install packagename=version
要降级firefox
到版本4.0.1+build1+nobinonly-0ubuntu0.11.04.1
,您必须运行:
sudo apt-get install firefox=4.0.1+build1+nobinonly-0ubuntu0.11.04.1