# #emerge -e world "na raty"?

## Poe

Witam. Musze przekompilować system, gdyz sie sypie, a nie chce stawiać go od nowa, wiec postawnowiłem zrobić 

```

#emerge -e world

```

Bardzo chciałbym to zrobić "na raty", bo nie moge sobie pozwolić, na wyłączenie kompa z obiegu na czas tego (a zajmie to napewno powyzej jednej nocy, bo to jest 271 pakietów, w tym qt i kde), więc jak zrobić -e worlda na raty? to znaczy tak, zeby sie ładnie skompilowało X pakietów / 271, przerwać, coś porobić i potem puścić dalej to od tego X'a. Jest to możliwe? Od razu mówie, ze 

```

#emerge -e --resume world 

```

nie działa

```

root@Poe poe # emerge -e --resume world

emerge: It seems we have nothing to resume...

```

Pomożecie? Plosie...

pozdrawiam

Poe

----------

## grzewho

no to moze po kolei, najpierw system, pozniej world ?

----------

## Poe

hmm... stawialem system z stage'a1, więc moze zapuścić najpierw -e scripts/bootstrap.sh potem -e system, potem -e kdebase i na końcu -e world (reszta)... Dzięki za podpowiedź, chyba tak zrobie.

Chociaz nie.. nie moze być world, bo world znów zacznie mi wszystko od nowa kompilować, wiec nei moze tak być. więc jak skompilować "reszte"? wszystko po kolei "reczenie" czy jak?

----------

## Rav70

A może tak: najpierw zrób sobie listę plików do rekompilacji:

```

emerge -ep world | grep '\[ebuild' | sed -e 's/.*] //' > file.lst

```

a następnie skrypt np:

```

#!/bin/bash

while true

do

        CURRENT_PACKAGE=`head -n 1 file.lst`

        if [ ! -n "$CURRENT_PACKAGE" ]; then

                exit 0

        else

                emerge --oneshot =$CURRENT_PACKAGE

                grep -v "$CURRENT_PACKAGE" file.lst > file.ls1

                mv file.ls1 file.lst

        fi

done

```

będzie po kolei emergował pakiety i usuwał z file.lst nazwy już zemergowanych także będzie można w każdej chwili przerwać emergowanie i wznowić je później od tego samego pakietu.

#include <disclaimer.h>  :Wink: 

Pozdr. R.

edit: dodane --oneshot zgodnie z sugestią grzewho + mała poprawka (files.lst zawiera pakiety z nrami wersji więc konieczne jest '=')

edit 2: wyrzucone '-e' z opcji w skrypcie - powodowało próbę dokompilowania wszystkich dependencies dla poszczególnych pakietów.

----------

## grzewho

no tak, ale potem kazdy pakiet doda ci do worlda i bedziesz mial straszną zadymę. dodaj --oneshot

----------

## Rav70

 *grzewho wrote:*   

> no tak, ale potem kazdy pakiet doda ci do worlda i bedziesz mial straszną zadymę. dodaj --oneshot

 

hm IMHO skoro listę pakietów tworzę:

```

emerge -ep world | grep '\[ebuild' | sed -e 's/.*] //' > file.lst

```

to te pakiety i tak są już w 'world'... czy może coś mi uciekło??  :Cool: 

----------

## grzewho

nie wiem czy się dobrze rozumiemy ale porównaj sobie plik world z file.lst

----------

## Rav70

OIC. I ma to sens. Dzięki za info  :Smile: 

----------

## Poe

więc jak? bo zdeksza sie pogubiłem :]

----------

## Rav70

więc powinno działać wg mojego 1szego (poprawionego z lekka) postu  :Smile: 

Pozdr. R.

----------

## grzewho

no   :Wink: 

----------

## Poe

Hmm.. więc tak. Wasz pomysł działa, ale nie do końca. Otóż. wklepuje

#sh re-world {tak sobie nazwałem plik ze skryptem od Rav'a}

Ładnie zaczyna robić -e worlda, ale coś mi sie nie podoba, gdyż pokazuje 1of50, gdy ja mam duuużo więcej pakietów na tej liście. jak chcecie mozecie sprawdzić - http://rzodkiefka.w.interia.pl/file.lst

nie wiem co robi po tych 50 pakietach, nie zdązyłem wczoraj zrobić. ani jednego pakietu, bo zaraz po wklepaniu sh re-world mama przyszła i oznajmiła, ze musi pracować na kompie i kicha, znów nic nie zrobiłem :/

----------

## Rav70

 *Poe wrote:*   

> pokazuje 1of50

 

hmm no to mi wygląda że gdzieś masz błąd w skrypcie bo przy 

```
emerge -e --oneshot cokolwiek
```

emerguje tylko ten jeden pakiet więc powinno być 

```
>>> emerge (1 of 1) cokolwiek
```

Pozdr. R.

----------

## Poe

 *Rav70 wrote:*   

>  *Poe wrote:*   pokazuje 1of50 
> 
> hmm no to mi wygląda że gdzieś masz błąd w skrypcie bo przy 
> 
> ```
> ...

 

Skopiowałem to co Ty podałeś, więc musiales coś źle napisać w skrypcie... ja sie nie znam wiec nie znajde błędu

----------

## Rav70

 *Poe wrote:*   

> Skopiowałem to co Ty podałeś, więc musiales coś źle napisać w skrypcie... ja sie nie znam wiec nie znajde błędu

 

a więc wygląda na to że emerge -e chce sobie dokompilowywać ze wszystkimi pakietami od których dany pakiet zależy co spowodowałoby wielokrotną rekompilację wielu z nich; trzeba by wyrzucić '-e' z opcji.

----------

## Poe

Hmmmm.... czyli zrobić tak:

```

 #!/bin/bash 

 while true 

 do 

         CURRENT_PACKAGE=`head -n 1 file.lst` 

         if [ ! -n "$CURRENT_PACKAGE" ]; then 

                 exit 0 

         else 

                 emerge --oneshot =$CURRENT_PACKAGE 

                 grep -v "$CURRENT_PACKAGE" file.lst > file.ls1 

                 mv file.ls1 file.lst 

         fi 

 done

```

?

tak tez mi sie wszystko przekompiluje?

----------

## Rav70

dokładnie tak, lista wszystkich pakietów jest już utworzona w files.lst więc '-e' powodowałoby tylko niepotrzebne ponowne rekompilacje wszystkich dependencies danego pakietu.

Pozdr. R.

----------

## galimedes

może to rozwiązanie pomoże jest trochę nieeleganckie ale napisane w paru chwilach co najmniej działa   :Wink: 

```

#!/usr/bin/perl 

open (TMP, "/home/{jakas ścieszka}/file.tmp");

$miejsce = readline(TMP);

close(TMP);

open (TMP, ">/home/{jakas ścieszka}/file.tmp")

        or die ("nie mogę utwożyć pliku");

open (FILEHANDLE, "</home/{jakas ścieszka}/file.lst")

        or die ("Nie mogę otworzyć pliku ");

#$miejsce = readline(TMP);

seek FILEHANDLE, $miejsce, 0;

until(eof FILEHANDLE){

$input = readline(*FILEHANDLE);

print `emerge $input`;

$miejsce = tell FILEHANDLE;

print TMP "\r$miejsce";

}

```

a brzydkie ponieważ tworzy plik tmp   :Wink: 

Rav70 twój skrypt za mało chciał kompilować nie wiem czemu   :Confused: 

----------

## Rav70

 *galimedes wrote:*   

> 
> 
> Rav70 twój skrypt za mało chciał kompilować nie wiem czemu  

 

Erm co do perla to jakoś nie mam do niego cierpliwości więc nie do końca kojarzę o co chodzi w tym co napisałeś ale rozumiem że ma robić to co mój skrypt?  :Smile:  A coś bliżej w kwestii tego 'za mało'?

----------

## galimedes

kompiluje tylko te ebuildy co są w pliku nic poza tym jak będe miał troche czasu zrobie go troszke lepiej narazie brak czasu   :Evil or Very Mad: 

o mały włos bym zapomiał skrypt przyjmuje w pliku wartości

```

...

dev-perl/Inline  

dev-perl/Filter  

dev-perl/ExtUtils-F77  

dev-perl/PDL  

app-text/acroread 

app-admin/sysklogd  

net-ftp/ftp  

dev-util/strace  

sys-apps/setserial  

x11-plugins/gkrellmms

...

```

----------

## Rav70

 *galimedes wrote:*   

> kompiluje tylko te ebuildy co są w pliku nic poza tym jak będe miał troche czasu zrobie go troszke lepiej narazie brak czasu  
> 
> o mały włos bym zapomiał skrypt przyjmuje w pliku wartości
> 
> ```
> ...

 

W takim razie nie bardzo umożliwia automagiczną rekompilację systemu bo zbiór pakietów generowany jest w postaci grupa/nazwa-wersja; trudno byłoby wyciąć regexpem samą wersję ze względu na dużą różnorodność znaków w nazwie i grupie. Rozwiązaniem byłoby przerobić skrypt tak żeby przyjmował nazwę wraz z wersją. Poza tym - czego konkretnie nie rekompilował mój skrypt?

----------

## galimedes

może nie z 

```

emerge -ep world

```

ale z 

```

qpkg -I

```

 :Wink: 

podejrzewam iż masz rację ale tym zajmę się dopiero na koniec tygodnia niestety ten skrypt pisałem chwilkę i jest pełno brzydkich rzeczy lecz działa a jeśli sypie się mu system to na razie starczy

----------

## mkay

 *Rav70 wrote:*   

> 
> 
> W takim razie nie bardzo umożliwia automagiczną rekompilację systemu bo zbiór pakietów generowany jest w postaci grupa/nazwa-wersja; trudno byłoby wyciąć regexpem samą wersję ze względu na dużą różnorodność znaków w nazwie i grupie. 

 

e tam trudno...

```

        $ver=$_;

        $ver=~ s/.*(\-([0-9]|\.)+((_pre[0-9]+)|(-r[0-9]+)){0,2})/\1/;

        s/$ver//;

```

przeciez to piekny kawalek kodu;}

PS: perl promotorem ascii-art!;>

----------

## galimedes

 *aye wrote:*   

> 
> 
> e tam trudno...
> 
> ```
> ...

 

fm ale to się nie sprawdzi   :Confused:   np.

dev-perl/ExtUtils-F77 

dalej obstaje przy qpkg -I    :Twisted Evil:  lecz zawsze mogę się mylić   :Wink: 

----------

## mkay

 *galimedes wrote:*   

>  *aye wrote:*   
> 
> e tam trudno...
> 
> ```
> ...

 

ale -F77 to czesc nazwy, razem z wersja wyglada to tak:

dev-perl/ExtUtils-F77-1.14-r1

regexp obetnie wszystko od myslnika, po ktorym wystepuje dowolna ilosc cyfr, po ktorych wystepuje kropka, wiec zadziala;>

 *galimedes wrote:*   

> 
> 
> dalej obstaje przy qpkg -I    lecz zawsze mogę się mylić  

 

oczywiscie - w tym wypadku to lepsze rozwiazanie (zakladajac, ze pytajacy ma gentoolkit, ale raczej absolutna wiekszosc osob ma). tak tylko chcialem poflejmowac;>

BTW: tak na przyszlosc. tutaj istotnie nie ma to znaczenia, ale jezeli piszemy takie proste bashowe skrypty, ktore obrabiaja jakis tekst, to moga sie one walic przez kolorowanie danych wejsciowych (i wtedy czesto dosc dlugo trzeba pomyslec co jest nie tak). lepiej sie przyzwyczaic, ze dla wszelkich skryptow wylaczamy kolorowanie, wiec qpkg -I -nc

----------

## Poe

Ładnie mi psyche zryliście tymi postami  :Very Happy:  Szczerze mówiąc malo co z tego rozumiem i do końca nie wiem co mam zastosować...

Ehh.. myslałem, ze to będzie prosty temat

----------

## Rav70

 *aye wrote:*   

> 
> 
> BTW: tak na przyszlosc. tutaj istotnie nie ma to znaczenia, ale jezeli piszemy takie proste bashowe skrypty, ktore obrabiaja jakis tekst, to moga sie one walic przez kolorowanie danych wejsciowych (i wtedy czesto dosc dlugo trzeba pomyslec co jest nie tak). lepiej sie przyzwyczaic, ze dla wszelkich skryptow wylaczamy kolorowanie, wiec qpkg -I -nc

 

Popraw mnie jeśli się mylę ale czy przy przekierowaniu do pliku/rurki nie wycina sekwencji escape (czyli kolorowania)?

Pozdr. R.

----------

## mkay

 *Rav70 wrote:*   

> 
> 
> Popraw mnie jeśli się mylę ale czy przy przekierowaniu do pliku/rurki nie wycina sekwencji escape (czyli kolorowania)?
> 
> Pozdr. R.

 

nie. przyklad:

```

<aye@CogES>~: qpkg -I |grep ^x11 |wc -l

0

<aye@CogES>~: qpkg -I -nc |grep ^x11 |wc -l

58

```

----------

## Rav70

 *galimedes wrote:*   

> dalej obstaje przy qpkg -I    lecz zawsze mogę się mylić  

 

hm a tak swoją drogą naszła mnie myśl - czy to się sprawdzi jeśli ktoś np ma 2 wersje w różnych slotach?

----------

## Poe

Możecie sobie dalej temat prowadzić, ale ja już sie z tym uporałem. zastosowalem ten skrypt

```

 #!/bin/bash 

 while true 

 do 

         CURRENT_PACKAGE=`head -n 1 file.lst` 

         if [ ! -n "$CURRENT_PACKAGE" ]; then 

                 exit 0 

         else 

                 emerge --oneshot =$CURRENT_PACKAGE 

                 grep -v "$CURRENT_PACKAGE" file.lst > file.ls1 

                 mv file.ls1 file.lst 

         fi 

 done

```

bez qpkg -l i jest dobrze. dzięki Wam wszystkim za pomoc

----------

## Rav70

 *aye wrote:*   

>  *galimedes wrote:*    *aye wrote:*   
> 
> e tam trudno...
> 
> ```
> ...

 

a są np takie wynalazki jak

```

media-libs/xine-lib-1_rc4-r1

```

i zonk...  :Wink: 

Pozdr. R.

----------

## mkay

 *Rav70 wrote:*   

> 
> 
> a są np takie wynalazki jak
> 
> ```
> ...

 

hmm - tu sie nie sprawdzi... nie wiedzialem, ze gentoo ma -rc w wersjach

----------

