这就是我长期以来升级 Gentoo 的方法。这是受到推崇的方法?有什么陷阱或更好的方法吗?
emerge --sync
emerge -uDav --tree world
emerge -av --depclean
revdep-rebuild -v -- --ask
dispatch-conf
glsa-check -t all
glsa-check -f all
答案1
看起来你已经搞定了。唯一的其他建议是,可能比盲目全面更新慢一点。你始终可以使用而emerge -DNuav <atom>
不是单独更新软件包或依赖链world
(对于你不想添加到 world 文件中的内容,例如系统库,请使用 --oneshot)。
请注意,如果您定期更新,而不是每几个月进行一次整体批量更新,那么这样做总是更容易。此外,为了避免太多意外,您可能会发现订阅其中一个邮件列表会很有帮助,例如gentoo-user
(警告:此列表每天约有 100 封邮件),因为几乎任何重大更新问题都可能出现在列表中,并有大量讨论解释如何解决这些问题。
我猜测下一个主要的“问题”更新将是稳定后迁移到 openrc(据我回忆,它是在去年年中~3 月完成的,只有几个问题,主要是网络变化)。
答案2
我一直在使用与您几乎相同的步骤,除了:
eix-sync
而不是emerge --sync
因为我喜欢看到 portage 树的变化。这对于注意到我可能想要安装的树中新加入的软件包特别有用。layman -S
(偶尔)在主要出现之前同步覆盖中的任何更改。eclean-dist -d
清理过时的 tarball。每次 emerge后revdep-rebuild
我都会这样做,因为软件包降级并不常见。eix-test-obsolete
作为最后一步,帮助保持我的 /etc/portage 文件整洁和最新。这也让我知道我安装了哪些软件包,而这些软件包已从 portage 中完全删除,因此我需要从存储库中获取 ebuild。最近的一个例子是,由于我的 Xen VPS 上运行的是较旧的内核,但它最近已从 portage 中删除,因此我必须屏蔽 iproute2 > 2.6.22.20070710 的所有版本。
eix-sync
位于eix-test-obsolete
app-portage/eix 中。
eclean-dist
位于 app-portage/gentoolkit 中。
答案3
emerge --sync
或eix-sync
或emerge-delta-webrsync
和eix-update
emerge -av portage
eclean-dist
检查 linux-headers、glibc、binutils、libtool 或 gcc 是否有重大更新(例如 gcc 从 4.6 更新到 4.8)。如果没有,请转到步骤 11。
完全重建:
rm -rf $(portageq pkgdir)/*
— 清理 PKGDIR 中的缓存emerge -av linux-headers glibc binutils gcc-config libtool gcc
gcc-config <number of new gcc>
切换到新的 gccsource /etc/profile
emerge -avb glibc binutils gcc libtool
emerge -avbke system
emerge -avbke world
如果你在第 10 步或第 11 步遇到任何问题,请修复它并重试
更新世界:
- 清理你的世界文件
/var/lib/portage/world
中不必要的包并检查/etc/portage
实体 fixpackages
emerge -avuDN world
eselect python update
python-updater -- -av
perl-cleaner --all -- -av
emerge -a --depclean
revdep-rebuild -i -- -av
如果您在步骤 14-18 中遇到任何问题,请修复它并重复从步骤 13 开始的所有步骤。
etc-update
或者dispatch-conf
glsa-check -vp affected
更新后,插槽中可能会有受影响的软件包emaint --check all
答案4
glsa-check -t all
glsa-check -f all
这是你应该首先运行的。如果你升级了所有软件包,则不需要它。
哦,我更喜欢 cfg-update ;)