# [mini-HOWTO] Szybka migracja portage -> paludis

## dziadu

Jeden z forumowiczów zagadał mnie jak bezboleśnie przejść z portage na paludisa, w trakcie odpisywania pomyślałem, że innym też może się to przydać więc piszę dla ogółu. Nie biorę odpowiedzialności za wszystkie zniszczone systemy gentoo po przeczytaniu tego poradnika. No to start.

Zaczynamy od instalacji paludisa i zaprzyjaźnienia się ze stroną pisującą jego konfigurację.

Większość plików pokrywa się z plikami do portage lub jest bardzo podobnych. W ogólności wygląda to tak:

 katalog konfiguracyjny paludisa to /etc/paludis

 pliki dotyczące maskowania dla paludisa: package_mask.conf i package_unmask.conf są identyczne jak te dla portage: package.mask i package.unmask więc możesz je skopiować lub nawet zrobić symlinka (wtedy pliki edytujesz raz i masz to samo dla paludisa i portage). Paludis umożliwia robienie "filtrów", czyli np zamiast wypisywać kilkadziesiąt wpisów np z grupy pakietów kde-base/ możemy hurtowo odmaskować wszystkie, np:

```
# cat /etc/paludis/package.unmask

foo/*

bar/*
```

 pliki keyword dla paludisa (/etc/paludis/keywords.conf) to praktycznie samo co dla portage (/etc/portage/paludis.conf) tyle, ze w portage pisało się podwójną gwiazdkę (**) a w paludisie pojedynczą *, oraz w paludisise musisz na początku dodać filtr ogólny (jest to adpowiednik ACCEPT_KEYWORDS z make.conf). Przykłady:

```
# grep ACCEPT_KEYWORDS /etc/make.conf

ACCEPT_KEYWORDS="amd64 ~amd64"

# cat /etc/portage/package.keywords

foo/bar **

```

```
# cat /etc/portage/keywords.conf

*/* amd64 ~amd64

foo/bar *

```

 w portage flagi use były rozbite na dwie częśći: globalne w make.conf i lokalne w package.use. W paludisie jest to uporządkowane w jednym pliku: /etc/paludis/use.conf Znajdują się tam zarówno flagi use jak i wszystkie zmienne typu LINGUAS, ALSA_CARDS, VIDEO_CARDS, INPUT_DEVICE. Oczywiście znowu dla ułatwienia pojawiają się paludisowskie flagi, przykłady (ode mnie z systemu):

```
# grep USE /etc/make.conf -A 10

USE="-32bit -3dnow aac -abiword acm acpi alsa -amazon -apm -arts aspell bash-completion -berkdb dbus -debug dell -doc gnutls hal -handbook -ipv6 -jack jpeg kde kde4 -kdeprefix kerberos laptop lm_sensors midi mmx mmxext nptl nsplugin ntplonly nvidia opengl pdf pmu png -qt3 qt3support qt4 -semantic-desktop slang spell sse sse2 ssse3 svg truetype unicode -v4l vim-syntax X xcomposite xinerama xvmc"

LINGUAS="pl en"

ALSA_CARDS="hda-intel"

VIDEO_CARDS="nvidia"

INPUT_DEVICES="evdev mouse synaptics"

# cat /etc/portage/package.use

foo/bar aaa bbb ccc

kde-base/kdelibs -semantic-desktop

kde-base/dolphin -semantic-desktop

kde-base/plasma-workspace -semantic-desktop

```

```
# cat /etc/paludis/use.conf

# grep USE /etc/make.conf -A 10

*/* -32bit -3dnow aac -abiword acm acpi alsa -amazon -apm -arts aspell bash-completion -berkdb dbus -debug dell -doc gnutls hal -handbook -ipv6 -jack jpeg kde kde4 -kdeprefix kerberos laptop lm_sensors midi mmx mmxext nptl nsplugin ntplonly nvidia opengl pdf pmu png -qt3 qt3support qt4 -semantic-desktop slang spell sse sse2 ssse3 svg truetype unicode -v4l vim-syntax X xcomposite xinerama xvmc

*/*     LINGUAS: -* pl en

*/*     ALSA_CARDS: -* hda-intel

*/*     VIDEO_CARDS: -* nvidia

*/*     INPUT_DEVICES: -* evdev synaptics

*/*     build_options: -recommended_tests -split

foo/bar aaa bbb ccc

kde-base/* -semantic-desktop
```

plik licenses.conf zawiera 

```
*/* *
```

 czyli akceptujemy wszystko bez wyjątków

plik mirrors.conf zawiera 

```
gentoo http://ftp.snt.utwente.nl/pub/os/linux/gentoo/distfiles http://mirrors.sec.informatik.tu-darmstadt.de/gentoo/ http://distfiles.gentoo.org http://ftp.fi.muni.cz/pub/linux/gentoo http://distfiles.gentoo.org
```

plik environment.conf zawiara m.in takie informacje jak położenie pliku world. Jeśli chcemy być kompatybilni z portage to piszemy w nim:

```
world = /var/lib/portage/world

reduced_username = root
```

Pierwsza linijka określa położenie pliku world (lokalizacja jest ta sama co dla portage). Paludis dodatkowo wprowadza swojego użytkownika i grupę, do której powinny należeć pewne pliki. Ponieważ jeśli byśmy przemigrowali te pliki do paludisa (grupy i użytkownika) to portage przestałoby mieć do nich dostęp. Zatem lepiej trzymać je nadal jako własność root-a a żeby pozbyć się warningów umieszczamy tą drugą linijkę, czyli świadomą zgodę na korzystanie z plików których właścicielem jest root a nie portage.

 plik bashrc (uwaga, bez rozszeżenia .conf) zawiera ustawienia CFLAGS, CXXFLAGS, MAKEOPTS,... czyli wszystko co się tyczy powłoki. Można tu też definiować flagi indywidualnie dla pakietów ale już bez systemu filtrów, a za pomocą rozwiązań bliższych developerów ebuildów. Przykład ode mnie z systemu:

```
#cat /etc/paludis/bashrc

CFLAGS="-march=core2 -O2 -pipe"

CXXFLAGS="${CFLAGS}"

CHOST="x86_64-pc-linux-gnu"

MAKEOPTS="-j1 --quiet"

#FETCHCOMMAND="/usr/bin/wget -t 5 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FILE}\" \"\${URI}\""

EXTRA_WGET="--progres=bar:force"

if [[ "${CATEGORY}/${PN}:${SLOT}" == "sys-devel/gcc:3.4" ]] ; then

        CFLAGS="-march=nocona -2 -pipe"

        CXXFLAGS="${CFLAGS}"

fi

#if [[ "${CATEGORY}/${PN}" == "dev-db/mysql" ]] ; then

#       CXXFLAGS="${CXXFLAGS} -DPIC -fPIC"

#       CXXFLAGS="${CFLAGS}"

#fi

# We have access to CATEGORY, PN etc, which we can use for per-package settings

#if [[ "${CATEGORY}/${PN}" == "sys-apps/paludis" ]] ; then

#       CXXFLAGS="${CXXFLAGS} -g -ggdb3"

#fi
```

Część jest zakomentowanych bo ich już nie używam, ale służą jako świetna pomoc dydaktyczna więc zostawiłem je tutaj.

Musimy wykonać jeszcze konfiguracje głównego naszego repozytorium, czyli drzewa portage. Zapraszam do działu repozytoria.

Repozytoria

Dla obsługi overlay-ów musimy się trochę więcej namęczyć niż w portage ale po chwili praktyki już wiadomo o co chodzi. Zaczynamy od założenia katalogu /etc/paludis/repositories. W nim umieszczamy pliczek gentoo.conf:

```
# cat /etc/paludis/repositories/gentoo.conf

location = /usr/portage

sync = rsync://rsync.europe.gentoo.org/gentoo-portage/

profiles = ${location}/profiles/default/linux/amd64/10.0

format = ebuild

names_cache = ${location}/.cache/names

write_cache = /var/cache/paludis/metadata
```

Co się tam dzieje: na początek ustawiamy sobie jakąś zmienną (location) która nam się przyda. Zmienna sync określa skąd sync-ujemy drzewo, profiles określa nasz profil systemu, names_cache miejsce gdzie zapisywane będą dane o ebuildach w drzewie (dzieki temu ponoć paludis jest znacznie wydajniejszy). Wprawne oko na pewno zauważyło, że zapisuje te dane (w moim przypadku) w katalogu należącym do drzewa. Wobec tego ja nigdy nie używam teraz emerge --sync tylko zawsze paludis -s z tego względu, że emerge usuwa wszystko co nie znajduje się w oryginalnym drzewie, więc również te pliki cache. To samo będzie później w repozytoriach dodatkowych (aka layman). Na write_cache dałem sobie już inny katalog. Czy to dobrze czy źle nie będę dyskutował, macie dowolność.

Kolejne repozytorium, które paludis wymaga to

```
cat /etc/paludis/repositories/installed.conf

location = /var/db/pkg/

format = vdb

names_cache = ${location}/.cache/names

provides_cache = ${location}/.cache/provides
```

Określa ono miejsce gdzie paludis przechowuje informacje o zainstalowanych pakietach. Zauważycie chyba różnice w opcji format dla tego i poprzedniego przykłądu. Tu mamy baze danych vbd a tam były ebuildy, i wszystko jasne. Jeśli współużytkujecie portage i paludisa to zmianyy tego pierwszego mogą nie być widoczne czasem dla drugiego, dlatego macie dwie komendy dla paludisa:

```
paludis --regenerate-installed-cache

paludis --regenerate-installable-cache
```

Pierwsza odświeża to co już zainstalowane, druga to co możliwe do zainstalowania. Oczywiście mowa o odświeżaniu pewnych baz paludisa.

Teraz kilka przykładów dodatkowych overlay-ów które mam w systemie, powinniście poradzić sobie z ich interpretacją:

```
# cat local_overlay.conf

location = /usr/local/portage/

sync =

master_repository = gentoo

format = ebuild

names_cache = ${location}/.cache/names

write_cache = /var/cache/paludis/metadata
```

```
# cat science.conf

#master_repository= gentoo

format = ebuild

location = /usr/local/portage/layman/science

sync = git://git.overlays.gentoo.org/proj/sci.git

#importance = -100

names_cache = ${location}/.cache/names

write_cache = /var/cache/paludis/metadata
```

```
# cat kde.conf

#master_repository = gentoo

format = ebuild

location = /usr/local/portage/layman/kde-testing

sync = git://git.overlays.gentoo.org/proj/kde.git

#importance = -100

names_cache = ${location}/.cache/names

write_cache = /var/cache/paludis/metadata
```

```
# cat x11.conf

master_repository = gentoo

format = ebuild

location = /usr/local/portage/layman/x11

sync = git://git.overlays.gentoo.org/proj/x11.git

#importance = -100

names_cache = ${location}/.cache/names

write_cache = /var/cache/paludis/metadata
```

Pamietać tylko należy, że podane katalogi muszą już istnieć, zanim zaczniecie je sync-ować. Ja miałem już je gotowe, bo wcześniej pobrałem je layman-em, jesli nie macie ich, ti wystarczy stworzyć kaatlog określony zmienną location a resztą zajmie się już paludis. Jeśli współużytkujecie te overlaye z lamanem, to polecenie layman -S zniszczy katalogi .cache w overlayach (w moim przypadku bo je tam świadomie umieściłem). Poszczególne overlaye można indywidualnie syncować, podając ich nazwę: 

```
paludis --sync science
```

To HOWTO ma służyć szybkiemu i bezbolesnemu wyjaśnieniu sposobu migracji. Pełna dokumentacja jest na podanej wcześniej stronie paludisa, ja konfigurowałem to kilka miesięcy temu i potem nie ruszałem, więc może nie jest to idealna konfiguracja ale coż, u mnie działa. Większość rzeczy tu podanych pisałem z pamięci, mam nadzieję, że błędy się nie wdarły. Gdyby coś było nie tak, to piszcie w tym wątku, postaramy się temu jakoś zaradzić.

Powodzenia,

dziadu.

PS Jeśli jest to wszystko napisane trochę niezgrabnie to przepraszam, pisałem w pośpiechu bo mam jeszcze inne sprawy na głowie. Będę dopieszczał to w przyszłości.

----------

## soban_

Bardzo dziekuje dziadu za duza i wyczerpujaca wiadomosc ja jak zwykle zanim napisalem to troche googlowalem dodac moge od siebie ten przydatny link http://yoshi314.blogspot.com/2007/06/uwaga-ten-wpis-pochodzi-ze-starego.html . I jeszcze raz bardzo Ci dziekuje  :Smile:  chcialbym tez aby inni tutaj napisali jakie maja doswiadczenia z paludis poniewaz nigdy wczesniej tego nie uzywalem.

----------

## SlashBeast

Paludis mnie zawstydza, uzywalem go ponad pol roku w kilku maszynach wirtualnych - tragedia, nie polecam. [ Na 100% spolecznosc Paludisa mnie zaraz zaatakuje, spolecznosc paludisa i exherbo jest naprawde magiczna. ]

----------

## soban_

@SlashBeast takie teksty tez sa bardzo potrzebne. Tylko jakbys mogl jeszcze sprecyzowac powod. Cos sie wywracalo? Zle dzialalo? Chodzi o konfiguracje?

----------

## SlashBeast

Kazdorazowy --pretend czy moze inny przelacznik, generalnie cos jak -p dla paludisa to problem, w sensie mieli i mieli, gdzies byl hook, ktory po pretend zrzucal 'komende' do pliku wiec wystarczylo dac paludis-resume ( u mnie w .zshrc mailem to do "/bin/sh -c "$(cat /root/.paludis-resume) $*"" )i wznowic to, inaczej znowu i znowu mielil i sprawdzal.

Kurewsko nieprzyjazne bledy (python tez tutaj ma watpliwe bledy), ale paludis wygrywa tutaj.

Moze jestem paranoikiem, ale moj umask to zawsze 077, paludis srednio sobie radzi w takim 'srodowisku', dochodzilo do takich sytuacji, ze jak chcialem przebudowac jakis modul kernela na przyklad kvm-kmod, paludis sie wieszal, czekal jak na zbawienie, pomagala zmiana ownera distfiles na innego niz paludisbuild, wtedy wywalal ladny warning, ze jest cos nie tak, nie moze sie dobrac ze swojego magicznego usera do katalogu i go zrzuca, z roota bedzie mielil - wtedy dawal rade.

Glupie bledy, w stylu problematycznego playmana ktory zle(?) tworzyl katalogi, a przynajmniej staral sie. Nie ma z tym wielkiego problemu, mozna to zedytowac, to skrypt rubego jezeli mnie glowa nie myli, tak czy inaczej tutaj jest wiecej o tym http://www.mail-archive.com/paludis-user@lists.pioto.org/msg00873.html Z tego co mi wiadomo, blad nie zostal naprawiony.

Paludis do dzisiaj(?) nie radzi sobie, gdy package.* sa katalogami a w nich pliki tekstowe, zamiast po prostu plikami tekstowymi w stylu package.keywords, z tego co pamietam nie ma o tym nic napisane w 'opisie' portage czy w jakiejs tam karcie zgodnosci, tym sie zaslaniaja fanboye paludisa.

Cholernie toporny ten paludis, jedyne co mi sie w nim _bardzo_ podoba, to mozliwosc ustawienia flag use/cflag na dany pakiet/kategorie bez zabawy w bashrc  - fajne.

Na oficjalnym kanale paludisa na ircu, gdy chcialem porozmawiac o tych 'niedogodnosciach' zostalem zaatakowany przz garsc 'stalych uzytkownikow' broniacych paludisa do ostatniej kropli krwi, zero konstruktywnego myslenia, ze cos mozna poprawic/naprawic, po mniej niz 5minutach dostalem bana, reason glosil, ze paludis jest *zbyt* wspanialy dla mnie i zebym wrocil do portage.

Przygod z paludislem mialem wiele wiecej, teraz nie moge sobie konkretnie przypomniec problemow z nim

----------

## dziadu

Slashbeat, w większości się z Tobą zgadzam, kanał paludisa ma swoją specyfikę, która odrzuca. Próba jakiegokolwiek zasugerowania że coś działa nierozsądnie kończy się tym, że jestem odsyłany do PMS (Package Manager Specification) która określa zasady działania dla każdego package managera dla gentoo. Problem jest w tym, że jeden z autorów paludisa, który lubuje się w powoływaniu na PMS jest... współautorem PMS. Cała ta sytuacja zakrawa na niezły żart, ale cóż. Dziwie się, że ja też tam nie mam jeszcze bana. Może tylko dzięki temu, że dawno ich olałem, bo żadnego pożytku z tego TWA nie ma.

Paludis ma też cholernie nieprzejrzysty output, w portage jest to wszytsko 100x czytelniejsze. Poza tym wie wielu sytuacjach zachowuje się zgoła inaczej niż rozsądek nakazuje. Poza tym, podejście do rozwiązywania zależności itp. Trzeba się nauczyć jak paludis myśli, i dopiero wtedy wszystkie dziwne jego zachowania stają się zrozumiałe i można na nie reagować.

Poglądy o magicznej szybkości paludisa też już dawno włożyłem między bajki, cóż, mają dobry PR.

Ale kurcze przyzwyczaiłem się do niego i nadal używam, Daje mu wciąż szanse, że któregoś dnia zaskoczy mnie cholernie pozytywnie. Zacząłem go używać i długo się męczyłem zanim rozpracowałem jego filozofie działania, a to co mnie skłoniło to chęć sprawdzenia jego legendarnej szybkości. Legenda okazała się tylko legendą, ale są też w nim rzeczy które mi się podobają, dlatego wciąż go używam.

----------

## soban_

Czasami jedna osoba wystarczy aby popsuc cala zabawe. Na tym forum tez byl z jakies 3 miesiace temu problem, nie dalo sie nic napisac bo zaraz ta osoba krytykowala. Tak to czasami jest jak ktos za dlugo przebywa w jednym miejscu i jest malo tolerancyjny. Mielismy takiego jednego delikwenta w grupie ktory uwazal sie za boga - jakos nigdy nie mial kolegow.

Wracajac do tematu wlasnie slyszalem ze paludis jest bardzo szybki, dlatego chcialem/chce go przetestowac. Chcialbym uslyszec tez opinnie innych ludzi tak ze jak do tej pory jeden glos przeciwko. Co na to reszta forumowiczow?

----------

## dziadu

Soban, jak się nie sparzysz, to się nie nauczysz. Nie marudź tylko kompiluj tego paludisa. To są nasze prywatne impresje, i być może Twoje będą zupełnie odmienne.

----------

## individual

Mnie podoba się jeden domyślny output paludisa  - lista z opiesem flag use - dla pakietów które instalujemy. Natomiast ostatnio powoli wracam do portage - seria blokujących się pakietów pod paludisem - a nie występująca pod portage przeważyła sprawę.

Przykład?

virtual-sys/eject

wymagany przez system - blokada w paludisie. Noi kończy się na:

```
paludis -u sys-virtual/eject

paludis -i system
```

Paludis dla mnie jest obiecujący, pracuje się z nim w iększości przyjemnie - niestety mnóstwo pracy przed developerami.

Dodatkowo miałem kilkukrotnie błędy kompilacji w paludis i ich brak w portage. Ustawienia portage i paludis w 100% kompatybilne.

----------

## dziadu

 *individual wrote:*   

> Dodatkowo miałem kilkukrotnie błędy kompilacji w paludis i ich brak w portage. Ustawienia portage i paludis w 100% kompatybilne.

 

No ale... portage nie jest kompilowane  :Very Happy:  Dostajesz po prostu gotowe skrypty w pytongu, które trzeba potem tylko wywołać.

----------

## unK

Pewnie chodzi o mergowanie aplikacji przy pomocy paludis/portage   :Wink: 

----------

## individual

Eeee. 

Przepraszam za brak ścisłego opisu. Tak kilkukrotnie miałem problem przy instalacji/kompilacji pewnych bibliotek/programów przy pomocy "Paludisa". Po wystąpieniu błędów próbowałem zainstalować/skompilować ten sam SW za pomocą "Portage". 

Efekt?

Błędy przy 

```
paludis -i dany_program
```

brak błędów przy  

```
emerge dany_program
```

Cóż - mam nadzieję, że teraz to już jasne jest - i nie dziadu - nigdy jeszcze nie udało mi się skompilować portage (ale może kiedyś   :Wink:   )

----------

