web-dev-qa-db-ja.com

Gentoo Linuxシステムですべてを効率的に再コンパイルする方法は?

gcc-5.xからgcc-6.4へのアップグレード後、すべてのGentoo Linuxユーザーは実行するようにアドバイスされました

emerge -e @world

これは、システム上のすべてのパッケージを再コンパイルし、理論的には30時間で16 GBのi7を採用します。これはいくつかの単純な状況で機能しますが、多くの場合、ある時点での問題のために、2000パッケージのうち80パッケージの後にタスクが停止します。ユーザーはそれを修正しようとし、再びゼロから始めます。私は試した

emerge --resume --skipfirst

および--keep-goingただし、問題の原因が最初のパッケージではない場合、これは機能しません。

2番目の問題は、packages.providedにリストされているすべてのパッケージを無視する必要があることです。 packages.providedは、たとえば最近のTeXliveを必要とし、tlmgr経由でインストールするユーザーにとって重要です。

私の考えは、2017-12-01以降にコンパイルされなかったパッケージのリストから始めることでした。その日、私は再コンパイルを開始します。

genlop -ln --date 1999-01-01 --date 2017-12-01  | Perl -ne '/>>> (.*)/ and print " =$1";'

理想的には、システムはすべてのパッケージをコンパイルし、エラーは発生しません。翌日、ユーザーは問題を修正し、修正されたパッケージを次々にコンパイルできます。

各問題の後にポイント0から開始せずに、ツリー(packages.providedを除く)から実際にインストールされたすべてのパッケージを再コンパイルするにはどうすればよいですか?

edit:これは明らかに Gentooシステム上のすべてのパッケージを一覧表示しますが、日付以降に再コンパイルされなかったものです 、しかし、その結果はこの質問の解決に役立つ可能性があります。

3
Jonas Stein

これを行う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

おそらく、再開スクリプトを何度か繰り返す必要があります。

1
PiedPiper