Como recompilar tudo eficientemente em um sistema Gentoo Linux?

3

Após a atualização de gcc-5.x para gcc-6.4 , todos os usuários do Gentoo Linux foram aconselhados a executar

emerge -e @world

qual recompilará todos os pacotes em um sistema e assumirá meu i7 com 16 GB em torno de 30 h na teoria. Isso funcionará em algumas situações simples, mas, em muitos casos, a tarefa é interrompida após a digitação de 80 de 2000 pacotes devido a um problema em algum momento. O usuário tenta consertá-lo e começa do zero novamente. Eu tentei

emerge --resume --skipfirst

e --keep-going , mas isso não funciona, se o problema não foi causado pelo primeiro pacote.

Um segundo problema é que todos os pacotes listados em packages.provided devem ser ignorados. O package.provided é importante para os usuários, que precisam de um TeXlive recente, por exemplo, e instalam via tlmgr .

Minha ideia era começar com uma lista de pacotes que não foram compilados depois de 2017-12-01, que é o dia em que começo a recompilar.

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

Idealmente, o sistema deve compilar todos os pacotes que não geram erros. No dia seguinte, o usuário pode corrigir um problema e compilar o pacote fixo, um após o outro.

Como recompilar todos os pacotes que foram realmente instalados da árvore (excluindo os packages.provided) sem iniciar no ponto zero após cada problema?

edit: Isso obviamente não é uma duplicação de Lista todos os pacotes em um sistema Gentoo, que não foram recompilados desde a data , no entanto, seus resultados podem ajudar na solução desta questão.

    
por Jonas Stein 03.12.2017 / 11:36

1 resposta

2

Aqui está uma maneira de fazer isso:

Salve seu horário de início antes de começar

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

Então, quando o emerge inevitavelmente parar, você pode continuar com este script (depois de corrigir qualquer construção problemática)

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

O script remove todos os pacotes de packages.provided da lista, e também outros pacotes que você não quer que apareçam (seja porque estão causando problemas ou não precisam ressurgir) de um arquivo chamado omitlist

Exemplo 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

Você provavelmente precisará fazer várias iterações no script de currículo

    
por 04.12.2017 / 00:06