에서 로 업그레이드한 후 모든 Gentoo Linux 사용자는 다음을 실행하는 gcc-5.x
것이 좋습니다.gcc-6.4
emerge -e @world
이론적으로는 시스템의 모든 패키지를 다시 컴파일하고 16GB 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 제외)를 어떻게 다시 컴파일합니까?
편집하다:분명 중복은 아닌데특정 날짜 이후 재컴파일되지 않은 젠투 시스템의 모든 패키지 나열그러나 결과는 문제 해결에 도움이 될 수 있습니다.
답변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
이력서 스크립트를 여러 번 반복해야 할 수도 있습니다.