Anti DevBlog

Pariodia blogowania, w konwencji psycho devbloga.

Aktualizacja, która mogła pójść lepiej

Po wielu miesiącach wyczekiwania ukazał się (8 maja. br) w końcu na horyzoncie czasoprzestrzennym, główny (anty)bohater dzisiejszego posta FreeBSD 6.1 (który zarządza już trzewiami tego testowego serwera… ale nie uprzedzajmy faktów) .
Tradycyjnie chciałem trochę odczekać od premiery aby zdąrzyły się ujawnić wszelakie luki w bezpieczeństwie i niedociągnięcia… ale nie wytrzymałem i postanowiłem, sobie uprzyjemnić wczorajszy dzień aktualizacją systemu z 6.0 do 6.1. Głównym powodem wielu mrożących krew w żyłach i wyostrzających słownictwo chwil nie była sama aktualizacja, która w sumie dla mnie juz jest rutynowa, ale stan w jakim byłem, kiedy się za nią brałem… a mianowicie, rozciągnięty słupek rtęci do wartości przekraczającej normę, ogólne osłabienie organizmu… i cholernie słabe biorytmy intelektualne (po wczorajszym dniu na serio zacznę w to wierzyć :).
Zaczęło się około godziny 10.00 od ściągnięcia uaktualnień plików źródłowych systemu za pomocą mechanizmu cvsup
cvsup -L2 cvsup_src

Po kilkunastominutowym tępym wpatrywaniu się w przelatujące setki linii tekstu pokazujące, że developerzy jednak cokolwiek zmieniali w źródłach, proces ten się kończy bez większych niespodzianek. Skontrolowałem ilość wolnego miejsca na dysku i już mi się zarysowała wizja problemów, że 250 MB wolnego na /usr może być sporą przeszkoda w procesie… co robić, co robić ?
Zaświtała mi genialna myśl (przy moim stanie zdrowia i biorytmów było to wręcz wykrzesanie max sił intelektualnych) no tak… użyje portsclean, który przeczyści pliki ściągniętych źródeł i usunie nikomu już niepotrzebne śmieci w stylu stare nie używane biblioteki i inne takie… nie wnikając w dokładnie co i jak, ważne, że robi to dobrze… mojemu dyskowi.
portsclean -CDD
Po kilku minutowym mieleniu, nagle się okazało, że jest 430 MB wolnego miejsca na /usr… no tak wyglądało to juz zdecydowanie lepiej, grymas przypominający uśmiech – jeśli obserwator wykazał by dużą wolę i miał doskonała wyobraźnię przestrzenną – zagościł na moim obliczu… zatarłem dłonie i do roboty… tym razem już w screenie coby nie narazić się na jakieś dziwne przygody typu zwis komputera czy inne problemy techniczne, no i nie każdy lubi przez kilka h oglądać matrix na ekranie.
Nawet ja… mam ważniejsze sprawy..
cd /usr/src
make buildworld

No i już miałem nadzieję, że zacznie się „matrix”, a tu błąd… dzięki mojemu wieloletniemu doświadczeniu i przeczytaniu dokładnemu zrozumieniu komunikatu zajrzałem do pliku /usr/src/UPDATING i dodałem brakująca grupę „audit”. Dalej make buildworld pracował ładnie kilka h. Kontrolowałem tylko czy komputer jest obciążony i ile zostało miejsca… a tego topniało z minuty na minutę, złowrogo df -h zaczął ukazywać, że miejsca zabraknie. Wizja nie udanej kompilacji – która trwała już wtedy 4 h – uderzyła mnie jak obuchem w głowę, wykazałem bystrość umysłu i poszukiwałem miejsca najpierw skasowałem „niepotrzebną” paczkę openssh-xxx-portable, kiedyś eksperymentowałem aby porobić shelle chrootowane do katalogu…
df -h odliczał jak timer bomby 4 MB wolnego 2 MB …. 1…
znalazłem /usr/local/share/doc no i skasowałem go 80 MB wolnego miejsca… ufff
wkrótce kompilacja świata się zakończyła bezbłędnie zostawiając jeszce jakieś 65 MB wolnego miejsca, co mnie napawało nadzieją, że się zmieścimy … była 15 … odtąd wydarzenia nabiorą większej dynamiki…

czas nastawić minutnik do jajek i ugotować kernela…
Standardowo najpierw tworze jądro generic (mimo, że nie ma obsługi SMP itp. ale jest bezpieczniej)…
cd /usr/src
make buildkernel

Znów rozpoczął się mozolny proces kompilacji, z wizualizacja matriksowa na ekranie, wszystko byłoby dobrze ale licznik wolnego miejsca zaczął niemiłosiernie zbliżać się do zera… obserwowałem to z rosnącym niepokojem, szukając co by można było skasować bezpiecznie lub przenieść z partycji /usr… padło na /usr/ports w samą porę nie wahałem się nacisnąć F8 kiedy to df -h wskazywał już, że wolne jest – 15 MB
wykorzystano 102 % powierzchni (rezerwa na przepełnienie partycji stąd wartości ujemne).
Porty zwolniły prawie 600 MB miejsca więc proces swobodnie przebiegł bez błędów później
make installkernel i szybki reboot aby sprawdzić czy kernel sie załadował poprawnie…

FreeBSD 6.1-RELEASE (GENERIC) #0: Mon May 15 15:47:05 CEST 2006

Poprawiło mi humor, choć to dopiero połowa zabawy i coraz bliżej bardziej interesujących problemów, bo poprzednie przypominają jakąś Modę na sukces czy jeszcze bardziej brazylijską Telenowelę…

Jądro działało poprawnie teraz czas na instalację systemu z tym, że zalecane jest przeprowadzanie tego w trybie jednego użytkownika (shutdown now) ale jest to raczej nie dopuszczalne jak się robi zdalnie via ssh. Mimo, że mój serwerek jest oddalony o 6 m, ale cóż wymagałoby to zatachania monitora i siedzenia w dość niewygodnej pozycji… ale czy można tego uniknąć ? Zasadniczo tak, ale mi nie było dane…
cd /usr/src
make installworld

System zakręcił dyskiem dość intensywnie i po paru chwilach miałem przekopiowaną nową wersję plików systemowych… no i teraz się zaczyna najbardziej frustrująca i niewdzięczna praca nad upgradem, a mianowicie porównanie plików z katalogu /etc starej i nowej wersji systemu… zadanie to byłoby z cyklu Mission Imposible gdyby nie narzędzie mergemaster, który wykonuje większość brudnej roboty:

  • kopiuje nowe pliki /etc do katalogu tymczasowego i porównuje z /etc
  • usuwa z /var/tmp/tmproot/etc/ wszelkie pliki które wyglądają identycznie jak w /etc
  • podpowiada które pliki w „starym” /etc są a nie ma ich w nowej wersji zaleca usunięcie takich plików
  • wszelkie zmienione pliki możemy albo skasować „nowe” z /var/tmp albo nadpisać te stare z /etc nowymi
  • albo tez wykonać łączenie tych plików i ręczne poprawianie

Wszelkie zmiany są pokazywane jako diffy więc dość prosto się jest połapać co się zmienia i zapobiec zmianą w stylu nadpisanie pliku /etc/passwd ….
Tutaj juz były konsekwencje moich błędów, siadania do aktualizacji w takim stanie i nie zrobienia kopi /etc, wiary, że jak się robi aktualizację N-ty raz to się ustrzeże najprostszych błędów… ale niestety jak się za bardzo wierzy w swoje umiejętności to popełnia się błędy.
Mergemaster porównuje kilkadziesiąt plików i w każdym musimy osobiście podjąć decyzję, co z danym plikiem uczynić… Byłem na tyle przytomny aby pamiętając aby sobie najważniejszych plików nie nadpisać oraz, że mam sfałszowany MAC adres, n ataki jak poprzednia karta sieciowa, do Tego MAC’a jest przydzielony publiczny adres IP, więc bez niego serwer traci w sumie sieć, bo DHCP wyłączone, a nawet jakby było włączone to otrzymałby jakiś nieznany mi adres IP sieci wewnętrznej.
Dopisałem sobie do rc.conf stosowne wymuszenie MAC, wcześniej miałem to gdzieś w skryptach startowych nie elegancko … ale działało.
Proces się kończy bezbłędnie rebootuje komputer… niestety serwer nie odpowiada. Po 2 h przerwie wracam do problemu napinam wszystkie moje „mięśnie” i zawlekam monitor do serwera po drabince podłączam monitor i się okazuje, ze nie otrzymał IP… cóż błędnie wpisałem w rc.conf… nie dochodząc dlaczego odnalazłem w którym miejscu gdzieś głęboko w skryptach startowych miałem wymuszenie MAC i odhashowałem po przeładowaniu sieci chodzi jeszcze zrebootowałem i patrze, że jabberd się nie odpala bo próbuje wystartować przed mysql… (problem do rozwiązania na później)
Dość mocno wykończony odstawiam sprzęt i myślę, sobie, że ten dzień pełny wrażeń już się zakończył….
nic bardziej mylnego… mimo, że większość usług chodziła to… 2 h przerwa…
Po 22 odpalam komputer patrze poczta nie chodzi… co jest ??? Próbuje połączyć się puttym z macierzysta maszyną, niestety brak oznak życia… z pewną naiwnością proszę znajomych o próbę połączenia niestety to samo… wlekę znów monitor po drodze, pewnie poprzez dopływ kwasu mlekowego zbierającego się w niektórych anatomicznych częściach mojego ciała, wpadam na jakże genialny i prosty powód dlaczego nie działa? Bo nie ma do ciężkiej cholery serwera SSH … jak do tego doszło ?
Jak pisałem wcześniej miałem alternatywną (do systemu) wersję ssh z patchem chrootującym i wszystko było dobrze, ale wpisałem do /etc/make.conf NO_OPENSSH = „YES” co spowodowało nie kompilowanie sie SSH dołączonego do systemu… niestety w trakcie gorączkowego poszukiwania miejsca usunąłem wersję alternatywną… Tak to jest jak się robi szybko i w takim stanie…. szczęście, ze to serwer „testowy” to sobie można pozwolić na wiele, zbyt wiele w moim przypadku, błędów i wypaczeń…
Brak sshd, brak portów 22:30… więc zainstalowałem z pakietu jakaś starą wersję oczywiście coś nie do końca wyszło bo leżały stare certyfikaty od nowszej wersji, no ale po ich usunięciu i przeinstalowaniu jeszcze raz SSHd zaczął wykazywać oznaki życia… przeniosłem maszynerie z powrotem, w między czasie kolega co ma u mnie konto zadał jakże zasadne pytanie „czyżby coś się z serwerem poczty stało” ???
No i się stało po stosunkowo krótkim ogładzie sytuacji już via ssh okazało się, że mergemasterem nadpisałem /etc/inetd.conf i pop3 się nie uruchamiał… sprawę naprawiłem dość szybko…
zostało jeszcze ściągnięcie paczki 33 MB z portami jej rozpakowanie i prawie system wrócił do normy.

Ja jeszcze nie, dlatego chciałem upamiętnić ten dzień wpisem na blogu, choć pewnie wyszedł strasznie długi i nudny i łamiący trochę konwencję tego bloga, ale cóz czasem trzeba coś mniej śmiesznego z przesłaniem napisać… mimochodem ten post stał się instrukcją update’u freebsd 😉

A mi została jeszcze kompilacja własnego kernela uszytego na potrzeby mojego serwerka, ale to później na spokojnie jak dojdę do siebie…
Całkowity czas aktualizacji: 13 h
na Dual pentium II 450 Hz, 512 MB RAM, Dysk Quantum Atlas 10 K (obrotów) SCSI 9 GB

Comments

  1. vip
    Maj 16th, 2006 | 12:36

    Ciesz się, że Ci kernel wystartował. Ja wczoraj postanowiłem sobie upgrejdnąć linuksa do kernel-2.6.16.14-0.1 (http://pld-linux.org), co spowodowało zaloopowany komunikat o jakimś(tm) błędzie i instant-reboocie 😉
    Całe szczęście, że istnieje rescuecd (http://rescuecd.pld-linux.org/) i udało się przywrócić poprzednią (działającą wersję)…

  2. Adi
    Maj 16th, 2006 | 13:02

    No tu tez jest groźba, że może coś pójść nie teges z samym kernelem ale mam kilka wersji – dodatkowo najpierw robie generica (defaultowego) gdzie możliwosć błędu jest minimalna no i jajo jest kompilowane, a nie z pakietu… a poźniej dopiero robie własne zachowujac generic w razie co – przy starcie mozna zbootowac (o ile sie jest dość blisko serwera, lub ma konsole szeregową 😉 ze starej wersji.

Leave a reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image

buy celexa online no prescription order viagra generic