从 升级到 后,gcc-5.x
建议gcc-6.4
所有 Gentoo Linux 用户运行
emerge -e @world
理论上,它将重新编译系统上的所有软件包,并在 16 GB 的 i7 上运行大约 30 小时。这在一些简单的情况下会起作用,但在许多情况下,由于某个时候出现问题,任务会在 2000 个包中的 80 个包之后停止。用户尝试修复它并再次从零开始。我试过
emerge --resume --skipfirst
但--keep-going
如果问题不是由第一个包引起的,这不起作用。
packages.provided
第二个问题是,必须忽略中列出的所有包。 packages.provided 对于用户来说很重要,例如,他们需要最近的 TeXlive 并通过 进行安装tlmgr
。
我的想法是从 2017 年 12 月 1 日之后未编译的软件包列表开始,这一天,我开始重新编译。
genlop -ln --date 1999-01-01 --date 2017-12-01 | perl -ne '/>>> (.*)/ and print " =$1";'
理想情况下,系统将编译所有不会引发错误的包。第二天用户就可以修复一个问题,并依次编译修复后的包。
如何重新编译所有真正从树中安装的软件包(不包括packages.provided),而不是在每个问题后从零开始?
编辑:这显然不是重复的列出 Gentoo 系统上自某个日期以来未重新编译的所有软件包但其结果可能有助于解决这个问题。
答案1
这是一种方法:
开始前保存您的开始时间
date +%s >emergestart && emerge -e --keep-going @world
然后,当emerge不可避免地停止时,您可以使用此脚本恢复(修复任何有问题的构建后)
#!/bin/bash
starttime=`cat emergestart`
eix '-I*' --format '<installedversions:DATESORT>' | cut -f1,3 >tmplist
echo $starttime >>tmplist
sort -n tmplist | sed -e/$starttime/q | sed -e'/[0-9]*\t*/s///' | sort | comm -23 - <(sort omitlist) | comm -23 - <(sort /etc/portage/profile/package.provided) >buildlist
rm tmplist
emerge -a `cat buildlist` --keep-going
该脚本从packages.provided
列表中删除所有包,以及您不想从名为的文件中出现的其他包(要么因为它们导致问题,要么因为它们不需要重新出现)omitlist
例子omitlist
:
sys-devel/gcc:5.4.0
sys-kernel/gentoo-sources:4.13.12
sys-kernel/gentoo-sources:4.14.2
app-cdr/cdrdao
media-gfx/kphotoalbum
virtual/libintl
virtual/libiconv
app-doc/abs-guide
app-doc/autobook
app-doc/jargon
您可能需要对简历脚本进行多次迭代