# Jak wygenerować plik world?

## kamild

Witam!

Tym razem dość nietypowo. 

Otóż potrzebuję odtworzyć plik: /var/lib/portage/world (tak, to ten czytany przy emerge -uDNa world)

Niestety nie mam kopii zapasowej. 

Wiem, że można to zrobić w ten sposób:

```

equery list >> lista.txt

```

ale wtedy będę miał w world-dzie wszystkie pakiety jakie tylko są w systemie. Nie jestem pewien czy to dobry pomysł (szkoda by było gdyby potem --depclean nie usuwał śmieci z dysku).

Cóż, to by chyba było tyle. Z góry dziękuję za wszelkie rady.

Pozdrawiam,

Kamil

----------

## Kurt Steiner

Pozwól, że wygooglam to za Ciebie...

----------

## kamild

haha, tym razem się nie obrażę ;p

Ale tak poważnie - wszelkie rozwiązania jakie wygooglowałem opierają się o polecenie regenworld lub equery. 

W moim przypadku to niestety to nie zadziała - dzięki genialnej aktualizacji mpfr, gdzie developer NIE zaznaczył że muszę przebudować gcc przed usunięciem starych bibliotek, zmuszony byłem pobrać całe stage, żeby uzyskać działający kompilator. Tak więc mój system nie pamięta żadnych pakietów, które były wcześniej zainstalowane. 

Szukam jakiegoś rozwiązania, które pozwoli wygenerować listę pakietów obecnych na dysku i odfiltrować zależności, lub coś w tym stylu. 

Ma ktoś może jakiś pomysł?

Pozdrawiam,

Kamil

----------

## Pryka

Powiem Ci, że chyba czeka Cię ręczna robótka, ktoś kiedyś miał odwrotną sytuację tj. burdel w pliku world, ręczne wywalanie tylko pozostało, tak jak Tobie chyba ręczne dodawanie...

--- Edytowane przez moderatora:

Poprawiony błąd ortograficzny.

Kurt Steiner

----------

## Jacekalex

Lista wszystkich zainstalowanych przez portage: 

```
qlist -IC
```

lista wszystkich które mają jakieś flagi (do package.use):

```
qlist -IUCq | egrep "(.*) (.*)"
```

qlist jest w pakiecie:

```
app-portage/portage-utils
```

To by było na tyle

 :Cool: 

----------

## kamild

 :Rolling Eyes:  ... no to lipa... kurde, ale mi się nie chce. 

Liczyłem że jest na to jakieś automagiczne narzędzie, cóż... pozostaje więc masochistyczna metoda ręcznej edycji pliku world. 

No nic. Dzięki wszystkim, którzy się tu odezwali. 

PS. Do tematu nie dodam SOLVED, bo SOLVED to to nie jest (ręczne robótki na taką skalę zdecydowanie nie kwalifikują się do sensownego rozwiązania)

----------

## Pryka

To jest jedyne rozwiązanie, więc jak najbardziej SOLVED  :Very Happy: 

----------

## kamild

Nie nie nie, takie rozwiązanie to nie rozwiązanie, lecz istny masochizm. Pomyśl ile ja teraz będę musiał pakietów przelecieć, to aż Cię zaboli.  :Surprised: 

Hmm... A wiecie, tak sobie myślę, Jacekalex podsunął mi niezły pomysł. W /etc/portage/package.use mam naprawdę dużo pakietów, i to głównie takich, które instalowałem ręcznie. Dobrze by więc było dodać je wszystkie do world. 

Niby proste, ale - ma ktoś pomysł jak się automatycznie pozbyć dopisek z flagami use, tak aby zostały same nazwy pakietów? 

Od razu mówię, że

```

qlist -IUCq | egrep "(.*) (.*)"

```

listuje również flagi use (daje mi dokładną zawartość pliku package.use).

----------

## znal

Przyjmując następujące  założenia:

- w pliku world mają być  pakiety, od których nic nie zależy

- qlist -I zwraca listę zainstalowanych pakietów

- equery d zwraca listę pakietów które zależą od danego pakietu

można zrobić tak:

```
#!/bin/bash

qlist -I -C |while read pkgname

do

 equery -qC d $pkgname >/dev/null || echo $pkgname

done
```

Wymotane na szybko, powinno to wypisać pakiety, od których nic nie zależy. Z ciekawości zapuściłem u siebie, sprawdzę, czy będzie się pokrywać z zawartością worlda. Equery jest niestety strasznie powolne...

Co do usunięcia części linii to można użyć cut:

```
cat /etc/portage/package.use |cut -d" " -f1
```

----------

## kamild

 *znal wrote:*   

> Co do usunięcia części linii to można użyć cut:
> 
> ```
> cat /etc/portage/package.use |cut -d" " -f1
> ```
> ...

 

Dzięki wielkie, o to mi chodziło. 

Dzięki też za skrypcik, jednak zwraca mi on puste wyjście. 

Swoją drogą, to skrypt wydaje się być najsensowniejszym rozwiązaniem, jeśli chodzi o automatyczne odtworzenie pliku world. 

Przy odrobinie czasu pomyślę jeszcze nad tym skryptem, bo mogłoby coś z tego wyjść.

----------

## znal

Sprawdziłem pobieżnie u siebie i z kolei wypluwa też pakiety, których nie mam w world. Co wynika z tego, że equery d nie znajduje wszystkich zależności.

----------

