OpenRC: moje doświadczenia

Od dłuższego czasu używałem baselayouta w wersji 2.0.0_rc6. Chodziło to to całkiem zgrabnie. Włączało i wyłączało się dużo szybciej niż baselayout-1.12.x. Jednak natura bardzo nie lubi stać w miejscu. I w ten sposób z drzewa Portage wyleciała wyżej wymieniona wersja, a jej miejsce zastąpił fork o nazwie OpenRC. Z początku podchodziłem do sprawy ze sporą dozą sceptycyzmu. Obawiałem się, że out-sourcing systemu startowego może negatywnie wpłynąć na jego jakość. No, ale w końcu przezwyciężyłem strach zainstalowałem OpenRC (oczywiście zrobiłem najpierw backupa… tak, do ciebie piję, lazy_bum :P). Ogólnie rzecz biorąc, jest bardzo fajnie. Zyskałem nawet parę sekund podczas startu. Szczegóły dot. migracji i pułapek, na jakie się natknąłem, znajdziecie poniżej.

Dodałem odpowiednie wpisy do package.unmask i package.keywords. Potem odmaskowałem udeva, bo OpenRC domaga się nowszej wersji. Biorąc do serca ostrzeżenia, odmaskowałem też nowsze splash-utils i wygenerowałem ponownie initrd ze splashem. Dobra, na razie żadnych problemów. Merdżnąłem openrc-0.2-r2. Przyszła kolej na zabawę z konfiguracją.

Ustawienia z /etc/conf.d/rc przeniosły się do /etc/rc.conf. Parę zmiennych zniknęło, wszystkie są teraz pisane małymi literami. Parę starych skryptów wyleciało, pojawiło się parę nowych. Wyleciał m.in. clock, którego miejsce zajął hwclock. Ustawienia strefy czasowej powinno się teraz przechowywać w /etc/timezone, a nie jako zmienną w /etc/conf.d/clock. Automatycznie ładowane moduły dopisuje się do /etc/conf.d/modules zamiast /etc/modules.autoload.d/*. Ebuild powinien teoretycznie automatycznie przenieść te rzeczy gdzie trzeba. Nie wiedzieć czemu u mnie tak się nie stało.

Niemniej jednak system włączył się mniej więcej poprawnie. Czemu mniej więcej? Dodana w ostatniej chwili łatka multilib skopała mark_service_* w skryptach sieciowych. Neostrada wymagała restartu net.ppp0, żeby zadziałać. Poprawiłem ręcznie dwie linijki i wszystko zaczęło śmigać. Potem przeczytałem, że w wersji GIT ten błąd został ładniej naprawiony. A że apetyt rośnie w miarę jedzenia, postanowiłem zainstalować openrc-9999 z oficjalnego drzewa.

I tu w sumie spotkało mnie najwięcej niespodzianek. Pierwsza sprawa, /etc/modules.autoload.d poleciało w kosmos. Tak po prostu, bez ostrzeżenia. Kod migrujący nie wygląda za ciekawie. Może mnie oczy mylą, ale wyraźnie najpierw KASUJE modules.autoload.d, a POTEM próbuje importować ustawienia. Jakaś bzdura. Na szczęście miałem kopię. Poza tym jedna zmiana, o której wyczytałem w commit-logu: ustawianie kodowania konsoli zostało wydzielone do skryptu termencoding. Dodałem go profilaktycznie do runlevelu boot.

Merdżując coś, zauważyłem błąd z KV_MINOR, a rc-update pokazywało, że cryptoloop wymaga nieistniejącego checkroot. Na to pierwsze już dodano łatkę. Można też odmaskować nowsze module-init-tools i problem z głowy. Co do cryptoloopa, starczyło przemerdżować util-linux. Zdaje się, że w międzyczasie poprawiono skrypt startowy. Nie, żebym tego używał 😛

Ostatnim problemem jest to, że OpenRC jest… za szybkie 😛 Zanim modem od Neostrady zdążył się zsynchronizować, już uruchomione było net.ppp0, które wykładało się na łopatki. Co ciekawe, błąd pojawił się dopiero w wersji GIT, nie w 0.2. Czyżby coś popsuli? W każdym razie, problem rozwiązałem malutkim skryptem, który sprawdza czy modem jest "operational" i opóźnia net.ppp0 do skutku. O tym workaroundzie postaram się napisać w oddzielnym poście.

Na deser, dla tych, którzy dotrwali do końca, parę obrazków:
Baselayout-2.0.0_rc6
OpenRC 0.2
OpenRC GIT

Jak widać nie zyskałem wiele – tylko 4 sekundy. lazy_bum zyskał troszkę więcej. Szczerze mówiąc, nie spodziewałem się żadnego przyśpieszenia, bo Baselayout 2.0.0_rc6 to praktycznie to samo co OpenRC. Z wykresów najbardziej intrygujący jest ten z wersji GIT. Czas dokładnie ten sam, co w OpenRC 0.2, ale przepustowość półtora raza większa! Nie wiem skąd ten efekt, ale narzekać nie będę 🙂

2 komentarze

  1. No, u mnie zniknęło. Widocznie trafiłem na jakiś pechowy sync. Jak widać, zawsze warto mieć backupa pod ręką 🙂

    Prawdopodobnie niewiele się zmieniło odkąd instalowałem. W repozytorium widziałem parę drobnych, ale istotnych poprawek. Od tamtej pory siedzę na wersji git i nie narzekam. Jedyny widoczny problem był związany z nowszą wersją udeva, ale i z tym sobie poradziłem (o czym napisałem w innym poście).

  2. A teraz kiedy weszło openrc i baselayout-2.0.0 do ~arch to lepiej to wygląda? Mi się bardziej podoba ten nowy baselayout:) Ale zrobiłem backup /etc na wszelki wypadek i trochę się przydał 😉 Bo np /etc/conf.d/net mi skasowało. A z tymi modułami to nic nie zginęło tylko trochę formę zmieniło, bo jest ciągiem w poziomie 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *