Пересборка всего мира

Несколько раз сталкивался с проблемой, но решал вручную с большой кровью и вот решил обсудить как это сделать правильно.

1. Имеем полную пересборку world: emerge -e world ( допустим 1400 пакетов )
2. Сборка падает на пакете номер 1000 app-accessibility/speakup ( собирается с ядрами <= 2.6.35 у меня 2.6.36 но давайте это опустим )
3. я решаю что этот пакет мне не нужен, сношу его emerge -C app-accessibility/speakup
4. продолжаю сборку emerge --resume --skipfirst, но тут засада: далее(где-то в середине списка) есть другой пакет, которые требует наличия speakup и сборка не может быть продолжена.

И как дальше быть?

Один из способов решения подобной проблеммы - собрать хоть как-нибудь проблемный пакет потом --skipfirst а ПОСЛЕ всего удалить ненужное, но сейчас собрать этот пакет вручную неполучается...
Второй - использовть emergre -bk для сборки в бинарники, и НЕ использовать resume, но это выглядить странно - переставлять ~1000 пакетов из бинарей при какой-нибудь ошибке...

Что хотелось бы: уметь делать skip не только первому пакету, но и списку(яб тогда добавил ненужное в этот список), или на худой конец руками отредактировать resume list

И вдогонку хочется узнать способ как пропустить 'resume list' когда у меня 2-е или 3-и прерваных сборки, а я хочу продолжить первую ?

--keep-goingиз man emerge

--keep-going из man emerge

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

да, забыл, но это немного

да, забыл, но это немного другая направленность - он пройдет до самого конча а потом разбирай что и почему не собралось, а потом пересобирать несобранные пакеты(когда их будет сотня) не очень приятная задача.

Пока ждал ответов продолжил

Пока ждал ответов продолжил копать и отрыл как можно вручнцю редактировать resume list:

http://forums.gentoo.org/viewtopic-p-3861491.html

Для ленивых потомков:

MonkeeSage написал(а):
The data is stored in /var/cache/edb/mtimedb, which is in the python pickle format. Here is a simple script to list and edit the resume list:

 
#!/bin/env python 
 
# Script to edit portage resume list 
# Jordan Callicoat < MonkeeSage at gmail dot com > 
# public domain 

import os, sys, pickle, re 

if '-h' in sys.argv or '--help' in sys.argv: 
   sys.exit(''' 
   Script to edit portage resume list 

       -l              List items in resume list [default] 
       -d NUM          Delete item from list 
   ''') 

int_rexp = re.compile(r'd+') 

def packge_list(how='read', what=None): 
  try: 
    if how == 'read': 
      fhand = open('/var/cache/edb/mtimedb', 'rb') 
      data  = pickle.load(fhand) 
      fhand.close() 
      return data 
    else: 
      fhand = open('/var/cache/edb/mtimedb', 'wb') 
      pickle.dump(what, fhand) 
      fhand.close() 
      return True 
  except: 
    sys.exit() 

data = packge_list() 
if (not data.has_key('resume') or 
    len(data['resume']['mergelist']) == 0): 
  sys.exit('Nothing in resume list') 
elif '-l' in sys.argv or len(sys.argv) == 1: 
  counter = 1 
  print 'Items in resume list:' 
  for item in data['resume']['mergelist']: 
    print '    %d.) %s' % (counter, item[2]) 
    counter += 1 
elif '-d' in sys.argv: 
  index = sys.argv.index('-d') + 1 
  if len(sys.argv) == 2: 
    sys.exit('Error: -d option requires an argument') 
  elif not int_rexp.match(sys.argv[index]): 
    sys.exit('Error: -d option requires a numeric argument') 
  else: 
    index = int(sys.argv[index]) - 1 
    if len(data['resume']['mergelist']) >= index: 
      del data['resume']['mergelist'][index] 
      packge_list(how='write', what=data)
 

I also wrote a little script to make a resume "point." It just makes a copy of the file with the resume info so you can load that copy later. So you can emerge something else then resume the original merge later.

 
#!/bin/env python 

# Script to create/delete a portage resume point 
# Jordan Callicoat < MonkeeSage at gmail dot com > 
# public domain 

import os, sys, shutil 

real_path = '/var/cache/edb/mtimedb' 
back_path = '%s.resume' % real_path 

if '-h' in sys.argv or '--help' in sys.argv: 
   sys.exit(''' 
   Script to create/delete a portage resume point 

       -r, --resume    Resumes from last point 
       -d, --delete    Deletes resume point 
       [default]       Creates resume point 
   ''') 
elif '-d' in sys.argv or '--delete' in sys.argv: 
  try: 
    os.unlink(back_path) 
  except: 
    pass 
  print "Removed `%s'" % back_path 
else: 
  if '-r' in sys.argv or '--resume' in sys.argv: 
    shutil.copy(back_path, real_path) 
    os.system('emerge --resume') 
  else: 
    shutil.copy(real_path, back_path) 
    print "Created `%s'" % back_path 
 

При копировании могут возникать проблемы с отступами(возможно потребуется ручное редактирование) - будьте внимательны.

...

Если пакеты не критичные — я их удаляю и засовываю в portage.mask, после чего продолжаю пересборку emerge --resume
Portage ругается, конечно, но раз замаскирован — делать нечего, приходится пересобирать то, что есть.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".