Archiwalia dla 09.2007

Prywatnie: Nareszcie

Przez cały ostatni semestr studiów pojawiłem się na uczelni tylko raz — żeby podbić legitymację. Semestr do powtórzenia. Okazało się jednak, że nie mogę powtórzyć semestru bez rozliczenia karty egzaminacyjnej, której nie mogę uzyskać bez podpisu promotora.

Problem polegał na tym, że nie wybrałem też promotora. Chciałem z tego miejsca podziękować doktorowi Pawłowi Myszkowskiemu z Instytutu Informatyki Stosowanej Politechniki Wrocławskiej, który — mimo półrocznego opóźnienia — zgodził się mnie promować.

Pozostało jeszcze złożyć temat pracy w dziekanacie (w środy nieczynne) i można starać się o przywrócenie na studia. Dziekanat oczywiście kocha mnie inaczej, ale mam nadzieję, że się uda.

Tytuł pracy — Tworzenie aplikacji internetowych w Pythonie z użyciem Django. Zanosi się na książkę, wstępny szkic spisu treści ma 104 wiersze. Trzymajcie kciuki ;)

Jeszcze jedna tapeta

Znów zasiadłem do Inkscape’a i zacząłem bawić się wektorami. Kolejna ofiara — rysunek nieznanego autora.

Fantasy party (black)
Dostępna też wersja z przezroczystym tłem (dla Linuksa).

Licencja tradycyjna, CC-BY-NC-SA. Wersji niepanoramicznej nie ma, wystarczy wyśrodkować.

Dla szczególnie dociekliwych (albo dla ludzi o dziwnych rozdzielczościach): Party - wersja SVG.

Prywatnie: Nerd!

NerdTests.com says I'm an Uber Cool Nerd King.  What are you?  Click here!

Wcześniej: Jajcuś i Undefined.

PLD Th: fixing a vserver

Niniejszy post jest oparty o historię z pola bitwy. Bardzo techniczny i nieszczególnie ciekawy, jeśli ktoś nie używa wymienionych technologii. Być może komuś się przyda.

Awaria

Poszukiwanie przyczyn pozwoliło nam ustalić następujące fakty:

  • W jednej z maszyn wirtualnych ktoś zainstalował pakiety rpm i poldek, a następnie użył ich do instalacji oprogramowania;
  • Maszyna miała cały czas zamontowaną zewnętrzną bazę rpm (prawdopodobnie utils-vserver zdechło i pozostawiło po sobie bałagan, ale o tym później);
  • Wewnętrzny rpm miał inną wersję i w jakiś sposób uszkodził bazę zainstalowanych pakietów;
  • Następujący po nim rpm --rebuilddb bezpowrotnie wyczyścił bazę pakietów maszyny;
  • W międzyczasie miał miejsce upgrade pakietów rpm i poldek w zewnętrznym systemie;

Postanowiliśmy zatem przeinstalować maszynę od nowa, rekonstruując na podstawie działających usług listę niezbędnych pakietów.

Nosem w dół

Dość szybko okazało się, że nie będzie tak łatwo:

ncontext: vc_net_create(): Invalid argument

Tak właśnie kończyło się każde wywołanie narzędzi vrpm i vpoldek. Winnym okazało się wywołanie chbind, a poprawka wygląda tak:

--- /usr/lib/util-vserver/functions~    2007-09-05 16:09:16.967334575 +0200
+++ /usr/lib/util-vserver/functions     2007-09-05 16:10:29.456275993 +0200
@@ -1171,5 +1171,5 @@
     export RPM_FAKE_CHROOT RPM_FAKE_CTX RPM_FAKE_CAP RPM_FAKE_FLAGS

     LD_PRELOAD=$_RPM_FAKE_SO${LD_PRELOAD:+:$LD_PRELOAD} \
-       exec $_CHBIND "${CHBIND_OPTS[@]}” “$@”
+       exec $_CHBIND –nid $RPM_FAKE_CTX “${CHBIND_OPTS[@]}” “$@”
 }

Dość szybko okazało się, że radość jest przedwczesna. O ile vrpm i vpoldek zaczęły działać, to żadne z nich nie potrafiło nic zmienić. Odpytywanie bazy nie przysparzało żadnych trudności, próba instalacji lub usunięcia pakietu kończyły się kolejnym radosnym komunikatem:

error: cannot open Basenames index using db3 - No such file or directory (2)

Winny

Okazało się, że winny jest rpm-4.4.9 w połączeniu z db4.6. Nie miałem okazji sprawdzić, co dokładnie powoduje nieprawidłowe działanie, dość było upewnić się, że działa wersja rpm-4.4.9-1, zbudowana z pakietem db4.5-devel.

Problemem jest fakt, że db4.6 automatycznie konwertuje każdą otwartą bazę do swojego formatu, co oznacza, że po wykonaniu downgrade pakietu rpm zostaniemy z bezużytecznym narzędziem.

Rozwiązanie

Jeff, autor rpm pomógł mi cofnąć upgrade:

  1. Instalujemy pakiet db4.6-utils, kopiujemy z niego program db_dump;
  2. Odinstalowujemy db4.6-utils, zachowując sam db4.6;
  3. Instalujemy pakiet db4.5-utils;
  4. Cofamy wersję rpm i instalujemy pakiet poldek zbudowany dla tej wersji rpm;
  5. Wykonujemy:
    cd /var/lib/rpm
    rm __db*
    mv Packages{,.old}
    db_dump_4.6 Packages.old > Packages.dump
    db_load Packages < Packages.dump
    rpm --rebuilddb
  6. Powyższą czynność powtarzamy dla wszystkich katalogów /vservers/.pkg/*/rpm/state, które zdążyły się zaktualizować do nowej wersji, odpowiednio modyfikując pierwszą linię i do ostatniej dopisując --dbpath <sciezka_do_katalogu_state>

Kolejny problem

Ostatnim krokiem było przekonanie narzędzia vpoldek, że instalowane pakiety są dla właściwej architektury. Tutaj rozwiązaniem było dopisanie do każdego pliku /vservers/.pkg/*/rpm/etc/macros linijki:

%_host_os %_os

Voila, wszystko działa, maszyna została przebudowana. Następnym razem postaram się pozbyć irytujących komunikatów LD_PRELOAD.