Wpisy otagowane ‘Gentoo’

Gentoo i bytes-per-inode (ext3)

czwartek, 30 Październik 2008

Zakładając małą partycję ext3 w Gentoo (do 4 GB) przy pobraniu drzewa portage szybko skończy nam się miejsce na dysku, a w zasadzie ilość i-węzłów. Doświadczalnie wiem, że warto przestawić bytes-per-inode na jakieś 8’192 (mniejsze niepotrzebne). Domyślna wartość to 16’384.

Odpowiedni parametr do mke2fs to -i <bytes-per-inode>.

Media Server

wtorek, 21 Październik 2008

Swego czasu (blisko rok temu) zostałem poproszony o projekt oprogramowania / urządzenia, którego zadaniem byłoby wyświetlanie na dużym ekranie dynamicznych informacji uaktualnianych z programu operatora. Jako, że programowanie pod Windows zostawiłem daleko w tyle i obsługa dwóch kart w tym systemie do wyświetlania informacji na niezależnym monitorze wykracza poza moje możliwości, postanowiłem zaprojektować osobne urządzenie, które będzie bardziej ‘idiotoodporne’.

Wybór sprzętu – coś małego, prostego do zainstalowania, z wyjściem VGA (początkowo wymogiem było TV-Out, ale po porównaniu z VGA w 1024 x 768, które większość telewizorów LCD obsługują, odpadło). Pierwszą testowaną płytą była Via Epia (nie pamiętam dokładnego modelu, prawdopodobnie seria LN, prywatnie mam słabszy model z serii M) z obudową Emko EM-151. Okazało się jednakże, że dopuszczalnym rozmiarem jest również obudowa Shuttle SS51G z płytą FS51, sprowadzane jako sprzęt z odzysku za niższą kwotę niż pierwszy zestaw.

Pierwsze zestawy miały dyski PATA i SATA, kolejne – karty CF z odpowiednimi adapterami PATA (lub SATA). Był też pomysł wstawiania pamięci flash na USB.

Wybór systemu prosty – GNU/Linux, a dokładnie Gentoo Linux. Konfiguracja sieci typowo jak w Gentoo + sekcja fallback, gdyby serwer DHCP nie był dostępny.

Uznałem, że najprościej (i najtaniej) efekt końcowy uzyskam wykorzystując przeglądarkę, można wsadzić dowolny format pliku i zawsze się jakoś wyświetli. Nie jestem grafikiem, więc samą animację robiła osoba trzecia. Ponieważ projekt miał ‘cieszyć oko’, więc został zrobiony we flash’u, a wyświetlany na Mozilla Firefox (Opera nie radziła sobie z tą animacją – zbyt ‘świeży’ flash).
Żeby przeglądarka mogła pracować, wymagała odpowiedniego środowiska. Wybrałem Xfce (na X.Org), bo samo X.Org nie dawało mi tylu możliwości (uruchamianie programów po starcie, zarządzanie zasilaniem). Urządzenie jest bezobsługowe, tzn. włącza się i wyłącza jednym przyciskiem. Automatyczne logowanie daje nam mingetty, a wyłączanie za pomocą acpid. Tutaj można znaleźć więcej informacji:

Zaskakujący dla mnie był fakt, że X.Org musi pracować z myszką (tzn. z widocznym wskaźnikiem). Nie da się go ukryć, wyłączyć, itp. Na szczęście jest unclutter, który wyłącza nieaktywny kursor (idle ustawiony na jedną sekundę).

Założenia wstępne były takie, by obraz wyświetlany był w pionie (czyli de facto 768 x 1024), za co odpowiada opcja:

Rotate „CCW”

w xorg.conf w sekcji Device dla karty graficznej. Sterowniku dla obu wspomnianych płyt obsługują to (odpowiednio via i sis).

Wspomniany Firefox pracuje z dodatkiem R-Kiosk (przy okazji: Opera i MS IE kiosk mode ma w standardzie), a w ustawieniach wyłączone zostało zapisywanie i pytanie o przywracanie sesji (odpowiednio browser.sessionstore.enabled i browser.sessionstore.resume_from_crash). Stosowny opis na stronach Mozilla:

Treść do wyświetlania serwuje nginx (wraz z PHP jako FastCGI, dane z MySQL).

Działające zestawy można pooglądać w kantorach spółki Exchange Group (na pewno w Katowicach na ulicy Stawowej), a w przyszłości może też w miejscu, gdzie obecnie pracuję.

TODO:

  • splashscreen przy uruchamianiu systemu,
  • optymalizacja systemu (odchudzanie),
  • być może w przyszłości coś, co pozwoli na rozstanie się ze środowiskiem X.

Xen na Gentoo Linux i problem z wieloma adresami IP na interfejsie dla bridge

poniedziałek, 22 Wrzesień 2008

Problem:

  • Przy wielu adresach IP przypisanych do jednego interfejsu występuje problem przy starcie Xen.

Środowisko:

Dzieje się tak prawdopodobnie dlatego, że skrypt network-bridge (z /etc/xen/scripts; #!/bin/bash) w funkcji get_ip_info() pobiera adres do zmiennej addr_pfx za pomocą następującego zestawu poleceń (linia 104):

ip addr show dev $1 | egrep '^ *inet' | sed -e 's/ *inet //' -e "s/$1//"

co z kolei jest wykorzystywane w funkcji do_ifup() (linia 113):

ip addr add ${addr_pfx} dev $1

Na systemie z wieloma adresami (> 1) addr_pfx może wyglądać np. tak:

192.168.1.152/24 brd 192.168.1.255 scope global
192.168.160.153/24 brd 192.168.160.255 scope global

Przy do_ifup() pojawi się błąd:

Error: either „local” is duplicate, or „192.168.160.153/24″ is a garbage.

Podobny błąd był zgłoszony przez shadow(at)overdrawn(dot)net 16 stycznia 2008 r., ale dotychczas oficjalnie nic nie zostało z tym zrobione (Peter Große wyraźnie wskazuje na błąd skryptu i proponuje własną łatę na to).

Gentoo Linux runscript depend loop

wtorek, 29 Lipiec 2008

Nie wiem co przeciętny człowiek myśli pod prysznicem, ale mi wpadł do głowy pomysł zapętlenia skryptów startowych (sprawdzenia czy to w ogóle możliwe i jak zabezpieczyli się przed tym wydawcy danej dystrybucji / systemu).
Na początek Gentoo Linux (leży najbliżej prysznica). Prosty skrypt dummy-1 wygląda tak:

depend() {
need dummy-2
}

start() {
echo "dummy-1 on"
}

stop() {
echo "dummy-1 off"
}

Do tego jest jeszcze dummy-2 i dummy-3 różniące się od siebie wymaganiami (depend() -> need), tak, aby każdy z nich wymagał kolejnego, a ostatni – pierwszego. W ten sposób powstaje teoretycznie zapętlenie. Co uzyskamy po próbie uruchomienia? Poniżej wynik:

abg-ng ~ # /etc/init.d/dummy-1 start
* ERROR:  cannot start dummy-3 as dummy-1 could not start
* ERROR:  cannot start dummy-2 as dummy-3 could not start
* ERROR:  cannot start dummy-1 as dummy-2 could not start

Czyli nie da się. Najpierw dummy-1 wymaga, by dummy-2 się uruchomił, ten z kolei chce dummy-3, który ostatecznie ‘psuje zabawę’, bo wymaga dummy-1, który nie potrafił się uruchomić, więc jako pierwszy zgłasza błąd. Później dwa kolejne.

Na drugi ogień pójdzie FreeBSD z PROVIDE i REQUIRE.