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

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

からにアップグレードした後、すべてのGentoo Linuxユーザーは以下を実行することをお勧めgcc-5.xします。gcc-6.4

emerge -e @world

理論的には、システムのすべてのパッケージを再コンパイルし、16GB i7で約30時間実行されます。これはいくつかの簡単な場合には機能しますが、ほとんどの場合、ある時点で問題が発生し、2000パッケージのうち80パッケージの後にジョブが停止します。ユーザーは問題を解決し、最初から再開しようとします。頑張った

emerge --resume --skipfirst

ただし、--keep-going最初のパッケージで問題が発生していない場合は機能しません。

packages.provided2番目の問題は、リストされているすべてのパッケージを無視する必要があることです。 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

1つの方法は次のとおりです。

始める前に開始時間を保存してください

date +%s >emergestart && emerge -e --keep-going @world

その後、Emergencyが必然的に停止した場合は、このスクリプトを使用して回復できます(問題のあるビルドを修正した後)。

#!/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

履歴書スクリプトを数回繰り返す必要があるかもしれません。

おすすめ記事