这就是我长期以来一直在升级Gentoo的原因。 这是推荐的方法吗? 任何陷阱或更好的方法来使用?
emerge --sync emerge -uDav --tree world emerge -av --depclean revdep-rebuild -v -- --ask dispatch-conf glsa-check -t all glsa-check -f all
看来你已经覆盖了。 唯一的另一个提示是也许比盲目批发更新慢一点。 你可以随时使用emerge -DNuav <atom>
而不是world
来更新包或依赖关系链(对于你不想添加到世界文件中的东西使用emerge -DNuav <atom>
,比如系统库)。
请注意,如果您定期更新,而不是每隔几个月进行一次批量更新,则总是会更容易。 另外,为了避免太多的意外,你可能会发现订阅gentoo-user
类的邮件列表是有帮助的(警告:每天在这个列表上发送100封邮件),因为几乎所有重大更新问题都可能出现大量的讨论解释如何解决他们的名单。
我猜想下一个主要的“问题”更新将是一旦稳定(在去年iirc中期完成,只有less数几个问题,主要是networking改变),就会向openrc迁移。
我一直在使用与您相同的步骤,除了:
eix-sync
而不是emerge --sync
因为我喜欢看到对portage树的更改。 这对于注意到我可能想要安装的对树来说是新的软件包来说尤其好。
layman -S
(偶尔)在主要出现之前同步任何改变覆盖。
eclean-dist -d
在revdep-rebuild
之后清理废弃的tarballs。 每次出现之后我都会这样做,因为包裹降级并不常见。
eix-test-obsolete
作为帮助保持我的/ etc / portage文件整洁和最新的最后一步。 这也让我知道什么时候我已经安装了已经完全从portage中删除的软件包,所以我需要从存储库中获取ebuild。 最近的一个例子,我必须屏蔽iproute2> 2.6.22.20070710的所有版本,因为我的Xen VPS上运行的是较早的内核,但最近从portage中删除了它。
eix-sync
和eix-test-obsolete
在app-portage / eix中。
eclean-dist
在app-portage / gentoolkit中。
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。
完全重build:
rm -rf PKGDIR/*
将PKGDIRreplace为你的打包目录的path! emerge -av linux-headers glibc binutils gcc-config libtool gcc
gcc-config <number of new gcc>
切换到新的gcc source /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
如果你的目标是拥有所有软件包的最新版本,那么是的,这似乎涵盖了所有的基础。 我很惊讶这已经为你工作了很长时间,但是,因为我会想象你会经常被块,破碎的等等咬伤。在过去几年中,我已经变得更加小心批发更新,在查看更新树之后select零碎地做它。 Gentoo的发展似乎已经过了鼎盛时期。 也许是因为Ubuntu的兴起。
无论如何,你可能会尝试一件额外的事情,只是为了对整个过程非常挑剔,就是清理你的分心。 如果你search,那里有脚本。
glsa-check -t all glsa-check -f all
这就是你应该先运行。 如果升级所有软件包,则不需要。
噢,我更喜欢cfg-update;)
这就是我所做的:
emerge --sync //Synchronize the package manager with the latest //version of each package. emerge -aDvNu system //updates the system, but only important if you want the //latest stable version of the actual compiler and libraries //with the core system. emerge -uDNav world //world means everything we've asked to be emerged before //this does not include things that came pre installed. //N means if you change your use directives in //your make.conf file to pull in the new packages. emerge -av depclean //removes libraries or programs that don't have any other //dependencies because of an update. revdep-rebuild //means if something is broken by an update, it //recompiles it. Fixes dynamic and static linking problems.
如果你没有完全理解这些评论,请阅读它,因为它是如何更新你的gentoo软件包的权威。
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1
你的过程是正确的,尽pipe运行每一个命令可能是没有必要的,通常我只是做一个同步和更新的世界。 如果您需要运行一个脚本来重build文件,比如在一次重大的Python升级过程中,Emerge会告诉您,并且还会告诉您何时合并configuration更改。 由于Gentoo实际上并没有从版本到版本的升级path。 当你出现世界的时候,你有最新的版本。
很长一段时间,我总是使用这个程序:
emerge -f --update --newuse --deep world && emerge --update --newuse --deep world
我,我的,更喜欢更新过夜。 但是有时候会发生某些事情失败,所以你必须重新下载所有的(或者某些)程序。
也许 – newuse开关是不必要的,但我经常编辑我的make.conf,所以对我来说是有道理的。
看起来不错,虽然我不会那么快地运行depclean。
除非你有一个像低硬盘空间的要求,那么你可以回来,并以不太经常的间隔去除。 在短时间内他们没有伤害。 如果你不幸在更新之后发现一些破损的软件包,那么你可以确定它们不是消除松散依赖的结果。
这就是我在VPS上的做法:
步骤0(从/ etc / crontab)
0 0 * * * root emerge --sync &> /dev/null
步骤1:
emerge --update --deep --newuse world -av
第2步:
emerge --depclean && revdep-rebuild && eclean-pkg && rm /usr/portage/distfiles/*