升级Gentoo Linux的最佳程序?


23

这就是我长期升级Gentoo的方式。这是推荐的方法吗?有什么陷阱或更好的方法吗?

emerge --sync
emerge -uDav --tree world
emerge -av --depclean
revdep-rebuild -v -- --ask
dispatch-conf
glsa-check -t all
glsa-check -f all

6
我在个人出现时添加了-N标志
汤姆·里特

2
--tree(-t)对于了解发生了什么也很方便
lkraav

Answers:


5

看来您已经掌握了它。唯一的其他提示是,使它比盲目的批量更新慢一些。您始终可以使用emerge -DNuav <atom>而不是单独更新软件包或依赖项链world(对于不想添加到世界文件中的内容,请使用--oneshot,例如系统库)。

请注意,如果您定期保持最新状态,而不是每隔几个月进行一次整体批处理更新,总是比较容易做。另外,为避免太多的意外,您可能会发现订阅其中一个邮件列表gentoo-user(如警告:此列表每天约100封邮件)会很有帮助,因为几乎所有重大更新问题都可能显示在大量的讨论解释了如何解决它们。

我猜想下一个主要的“问题”更新将是一旦稳定就迁移到openrc(在去年iirc的〜arch中完成,只有几个问题,主要是网络更改)。


2
是的,肯定会定期更新+1,而不是大量更新。偶尔的变化只会打破很多。github.com/lkraav/gentoo-cron-weekly是我简化的每周报告工具集。
lkraav'8

8

我一直在使用与您几乎相同的步骤,除了:

  • eix-sync而不是emerge --sync因为我喜欢看到对Portage树的更改。对于注意到我可能要安装的树中新安装的软件包,这特别好。

  • layman -S (有时)在主体出现之前同步叠加层中的所有更改。

  • eclean-dist -d之后,revdep-rebuild请清理废弃的tarball。每次出现后我都会这样做,因为软件包降级并不常见。

  • eix-test-obsolete作为帮助保持/ etc / portage文件整洁和最新的最后一步。这也让我知道何时安装了已从Portage中完全删除的软件包,因此我需要从存储库中获取ebuild。最近的一个示例中,由于Xen VPS上运行的内核较旧,所以我必须屏蔽iproute2> 2.6.22.20070710的所有版本,但是最近已将其从Portage中删除。

eix-synceix-test-obsolete位于应用程序portage / eix中。

eclean-dist 在app-portage / gentoolkit中。


+1 for eix-sync
蒂姆

5
  1. emerge --synceix-syncemerge-delta-webrsynceix-update
  2. emerge -av portage
  3. eclean-dist

检查linux头文件,glibc,binutils,libtool或gcc之一是否具有重大更新(例如,gcc从4.6升级到4.8)。如果不是,请转到步骤11。

完全重建:

  1. rm -rf PKGDIR/* 用您的包目录路径替换PKGDIR!
  2. emerge -av linux-headers glibc binutils gcc-config libtool gcc
  3. gcc-config <number of new gcc> 切换到新的gcc
  4. source /etc/profile
  5. emerge -avb glibc binutils gcc libtool
  6. emerge -avbke system
  7. emerge -avbke world

如果您在步骤10或11上遇到任何问题,请修复它,然后重试

更新世界:

  1. /var/lib/portage/world从不必要的包中清除您的世界文件并检查/etc/portage实体
  2. fixpackages
  3. emerge -avuDN world
  4. eselect python update
  5. python-updater -- -av
  6. perl-cleaner --all -- -av
  7. emerge -a --depclean
  8. revdep-rebuild -i -- -av

如果您在步骤14-18中遇到任何问题,请修复它,然后重复从步骤13开始的所有步骤

  1. etc-update 要么 dispatch-conf
  2. glsa-check -vp affected 更新后,您可以在插槽中安装受影响的软件包
  3. emaint --check all

3

如果您的目标是拥有所有软件包的绝对最新版本,那么是的,这似乎涵盖了所有基础。不过,令我惊讶的是,这种方法已经为您服务了很长时间,因为我想您会经常被积木,破碎的部件咬伤,等等。在过去的几年中,我对批发更新变得更加谨慎,在查看更新树后选择零星地做它。Gentoo的发展似乎已经过去了。也许是因为Ubuntu的兴起。

无论如何,为了使整个过程真正精益求精,您可能要尝试的另一件事是清除distfile。如果您搜索,那里就有脚本。


1
如果您坚持使用未公开的ebuild,那么在我看来,Gentoo已变得相当稳定,并且通过同步和新兴世界并不能真正打破一切。您确实需要知道自己在做什么,但是对于apt或yum也可以这样说。我都被他们两个咬了。
约翰·唐尼2009年

1
我可以想到的三个最近的阻塞/损坏是libcomerr / e2fsprogs,firefox2 / 3和xorg 1.3 / 1.5。在所有这些情况下,只需进行简单的按摩就可以进行批量更新,并且不涉及任何关键字。
亚当·达米科2009年

2
最新版本的Portage(例如最近6个月内)可自动解决几乎所有的问题。包括libcomerr / e2fsprogs。
丹·卡利

3
glsa-check -t all
glsa-check -f all

那是您应该首先运行的。如果升级所有软件包,则不需要。

哦,我更喜欢cfg-update;)


1

这是我的工作:

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/zh/handbook/handbook-x86.xml?part=2&chap=1


0

您的过程是正确的,尽管通常不必运行每个命令,通常我只是进行同步和更新。Emerge通常会告诉您是否需要运行脚本来重建文件(例如在大型Python升级期间),并且还会告诉您何时合并配置更改。由于Gentoo实际上没有版本之间的升级路径。当您出现世界时,便拥有最新版本。


0

很长一段时间以来,我一直使用此过程:

emerge -f --update --newuse --deep world && emerge --update --newuse --deep world

对于我来说,我更喜欢整夜更新。但是有时会发生某些故障,因此您必须再次下载所有(或某些)程序。

也许--newuse开关是不必要的,但是我经常在编辑make.conf,因此对我来说很有意义。


您可以使用“ --reinstall change-use”代替“ --newuse”,这将使用您已明确更改的使用标志重新安装软件包。而不是被废弃,而添加了使用标志等。不过,您仍应不时使用“ --newuse”运行。
hayalci

0

看起来不错,尽管我运行depclean不会那么快。

除非您对HDD的空间要求不高,否则可以不定期进行返回并进行depclean。短时间内将它们摆在附近没有什么害处。如果您很不幸在更新后注意到一些损坏的软件包,那么可以确保它们不是删除任何松散依赖项的结果。


0

这就是我在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/*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.