Compiling
如何在 Gentoo Linux 系統上高效地重新編譯所有內容?
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 腳本進行多次迭代