Compiling

如何在 Gentoo Linux 系統上高效地重新編譯所有內容?

  • January 23, 2018

gcc-5.x建議從gcc-6.4所有 Gentoo Linux 使用者升級後執行

emerge -e @world

這將重新編譯系統上的所有軟體包,並在理論上 30 小時左右以 16 GB 佔用我的 i7。這將在一些簡單的情況下工作,但在許多情況下,由於某個問題,任務在 2000 個包中的 80 個之後停止。使用者嘗試修復它並再次從零開始。我試過

emerge --resume --skipfirst

--keep-going但這不起作用,如果問題不是由第一個包引起的。

packages.provided第二個問題是,必須忽略其中列出的所有包。packages.provided 對於需要最近的 TeXlive 並通過tlmgr.

我的想法是從 2017-12-01 之後未編譯的軟體包列表開始,這是我開始重新編譯的那一天。

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

理想情況下,系統會編譯所有不會引發錯誤的包。第二天,使用者可以修復問題並一個接一個地編譯修復的包。

如何重新編譯所有真正從樹中安裝的包(不包括 packages.provided),而不是在每個問題後從零點開始?

**編輯:**這顯然與列出 Gentoo 系統上的所有軟體包沒有重複,這些軟體包自日期以來沒有重新編譯,但是它的結果可能有助於解決這個問題。

這是一種方法:

在開始之前保存開始時間

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

然後當出現不可避免地停止時,您可以使用此腳本恢復(在修復任何有問題的建構之後)

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

您可能需要對 resume 腳本進行多次迭代

引用自:https://unix.stackexchange.com/questions/408519