Terminal to urządzenie pozwalające człowiekowi na pracę z komputerem lub systemem komputerowym. Terminal musi posiadać urządzenie wejściowe do wprowadzania instrukcji oraz urządzenie wyjściowe do przekazywania informacji operatorowi. Thin Client ("cienki klient") to komputer pozbawiony pamięci masowej. Jego podstawową funkcją jest umożliwienie użytkownikowi pracy na oprogramowaniu zainstalowanym na serwerze. Pełni on zazwyczaj rolę terminala, ale posiada większe możliwości. Compaq EVO T20 to urządzenie, które posiada procesor o częstotliwości taktowania 300MHz, od 32 do 256MB pamięci RAM oraz od 16 do 96MB pamięci Flash(są modele z pamięcią FLASH nawet 256MB, ale dla naszych celów jest to niewykorzystywany luksus.. wystarczy 16MB). Dodatkowo wyposażony jest w cztery porty USB 1.1, złącze karty sieciowej 10/100Mb, port szeregowy oraz równoległy.

Pobór mocy tego urządzenia nie przekracza 20W. Nadaje się więc idealnie do wykorzystania jako mały domowy serwer. Poniżej znajduje się krótki opis przerobienia tego terminala na serwer. Opis nie zawiera instalacji samego linuksa, ponieważ jest to sprawa "uboczna", zawiera natomiast niezbędne informacje jak zainstalować GRUB'a oraz jądro systemu w pamięci FLASH.

Podstawowe narzędzia

Przed przystąpieniem do pracy należy zgromadzić niezbędne narzędzia.

Hardware

Ze sprzętu potrzebujemy Komputer z zainstalowanym systemem operacyjnym Linux Gentoo :) (Oczywiście może być dowolna dystrybucja). Komputer musi posiadać kartę sieciową. Do połączenia komputera z terminalem niezbędny jest kabel krosowy (z przeplotem), jeśli takiego nie posiadamy, a dysponujemy switchem, to łączymy terminal z komputerem dwoma prostymi kablami za pośrednictwem switcha. Do zaprogramowania terminala konieczne jest posiadanie klawiatury USB (do normalnej pracy serwera nie jest ona wymagana). Oczywiście potrzebujemy sam terminal Compaq EVO T20/T30 oraz Dysk lub Pendrive z zainstalowanym Linuksem (może być skopiowana wersja Live).

Software

Najważniejszym plikiem, który musimy posiadać jest obraz pamięci FLASH naszego terminala. Znajdziemy go na stronie firmy www.hp.com. Następnie musimy zaopatrzyć się w źródła bootloadera GRUB. Oryginalny GRUB nie będzie chciał współpracować z naszym terminalem, musimy więc zaopatrzyć się w dodatkową łatę przerabiającą trochę konfigurację GRUB'a na nasz użytek. Ostatnią potrzebną nam rzeczą będzie pakiet Boundle-tools, który umożliwia dokonywanie operacji na obrazie pamięci FLASH. Wszytkie potrzebne pliki (za wyjątkiem obrazu FLASH) można ściągnąć z mojego serwera. Szczególnie polecam ściągnięcie GRUB'a, który jest już "załatany" a jego stage2 ma wielkość dokładnie taką jak w opisie poniżej..
Pliki do pobrania:

 

Przygotowanie Linuksa na komputerze PC do pełnienia roli serwera aktualizującego

W celu wgrania nowego oprogramowania do terminala należy na komputerze zainstalować i uruchomić serwer DHCP oraz TFTP. W zależności od dystrybucji wykonuje się to w różny sposób, ważne, aby DHCP pracował na porcie 10067, a TFTP na porcie 10069. Tworzymy katalog /terminal, w którym będziemy udostępniać nowy obraz pamięci FLASH dla terminala. Poniżej znajduje się przykładowy działający plik konfiguracyjny dhcpd.conf.

ddns-update-style ad-hoc;
allow booting;
allow bootp;
option root-path "10.0.0.1:/terminal";
filename "/bootp.bin";
next-server 10.0.0.1;
subnet 10.0.0.0 netmask 255.255.255.0 {}
host EVO_T20 {
hardware ethernet 00:80:64:10:07:42;
fixed-address 10.0.0.10;
}

Po uruchomieniu DHCP i TFTP czas na sprawdzenie poprawnego działania systemu. Kopiujemy do katalogu /terminal obraz pamięci FLASH zmieniając jego nazwę na bootp.bin. Łączymy terminal z komputerem, włączamy zasilanie lub resetujemy terminal i naciskamy przycisk "p" na klawiaturze terminala do czasu aż pojawi się napis NETXFER... W tym momencie terminal rozpoczyna procedurę aktualizacyjną. Jeśli wszystko na komputerze zostało uruchomione prawidłowo nastąpi zapisanie pliku bootp.bin do pamięci terminala i automatyczny jego restart. Jeśli cokolwiek nie zadziałało prawidłowo i terminal "wisi" na jakimś komunikacie dłużej niż 3-4 minuty, to oznacza, że mamy nieprawidłowo skonfigurowany serwer DHCP lub TFTP. UWAGA!!! Nie wolno przejść do dalszej części, jeśli nie działa prawidłowo system aktualizacji oprogramowania.

Przygotowanie nowego systemu

Zakładam, że dysponujemy wersją GRUB'a dostosowaną już do współpracy z terminalem..(czyli ściągniętą z mojego serwera). Kopiujemy plik do katalogu /terminal i rozpakowujemy go. Następnie tak samo postępujemy z pakietem bundle-tools.

cp ścieżka_do_gruba/grub_terminal.tar.gz /terminal
cp ścieżka_do_boundle-tools/bundle-tools-0.7.tar.gz /terminal
cd /terminal
tar -xvzf grub_terminal.tar.gz
tar -xvzf bundle-tools-0.7.tar.gz

Przechodzimy do katalogu grub i edytujemy plik presetmenu.dsl

cd grub
nano presetmenu.dsl

Zmieniamy ścieżkę do systemu plików z "root=/dev/hda1" na "root=/dev/uba1" (na urządzenie, na którym znajduje się zainstalowany Linux - u mnie uba1- dysk wpięty poprzez port USB). Zapisujemy zmiany i kompilujemy GRUB'a koniecznie wykorzystując skrypt: compile-with-dsl.sh

./compile-with-dsl.sh

Pora na zmianę obrazu systemu terminala. przechodzimy do katalogu bundle-tools i rozpakowujemy obraz ściągnięty ze strony HP.

cd ..
cd bundle-tools
cp ścieżka_do_obrazu/nazwa_obrazu.bin /terminal/bundle-tools
dd if=nazwa_obrazu.bin of=netxfer bs=512 count=577
make
./fwextract nazwa_obrazu.bin extrakt

Make skompiluje narzędzia bundle-tools. Fwextrakt rozpakuje obraz. Mamy już przygotowane komponenty, teraz możemy złożyć wszystkie komponenty w jeden plik, który wgramy do terminala. Najpierw tworzymy sobie plik filesys0.img w katalogu /terminal, do którego wgramy GRUB'a oraz kernel naszego systemu.

cd /terminal
dd if=bundle-tools/filesys0.img of=filesys0.img bs=512 count=1

Następnie wgrywamy bootsektor GRUB'a (stage1), oraz resztę bootloadera (stage2).

dd if=grub/stage1/stage1 of=filesys0.img bs=512 seek=1
dd if=grub/stage2/stage2 of=filesys0.img bs=512 seek=2

Teraz pozostaje tylko dogranie kernela

dd if=sciezka_do_kernela/bzImage of=filesys0.img bs=512 seek=174

Na uwagę zasługuje fakt, że stage1 zajmuje 1 rekord, stage2(w tej wersji) zajmuje 171 rekordów. Jest to bardzo ważne, ponieważ obraz kernela musi zostać nagrany zaraz za stage2. W tym przypadku zaczyna się on od 174 rekordu. Gdybyśmy korzystali z innej wersji GRUB'a, to stage2 mogłoby mieć inną długość i wtedu należałoby zmienić wartość "seek=174" na obliczoną dla tego przypadku.
Dysponujemy już gotowym systemem uruchomieniowym Linuksa, możemy więc przygotować plik w formacie .bin do aktualizacji pamięci FLASH terminala.

cd bundle-tools
fwpack bundle.bin ulc_code.ce k ulc_code.bin poweron.bmp ../filesys0.img
cat netxfer > bootp.bin && cat bundle.bin >> bootp.bin
cp bootp.bin /terminal/

Plik przygotowany. Wykonujemy restart terminala, naciskamy na klawiaturze przycisk "p" i czekamy na efekt...:). Jeśli wszystko poszło zgodnie z planem, po restarcie terminal rozpocznie uruchamianie kernela. Pozostaje tylko podłączenie dysku z przygotowanym systemem plików i możemy cieszyć się działającym serwerem.

POWODZENIA ! ! ! :)

Ps.

Strona WWW, którą przeglądasz jest umieszczona na serwerze, którego część sprzętowa to Compaq EVO T20 (128MB RAM), a system to Gentoo z zainstalowanym Apaczem i serwerem pocztowym..:)

 Aktualizacja artykułu: 27.01.2009

W związku z pytaniami, które się ostatnio pojawiły (aż się zdziwiłem tak nagłym dużym zainteresowaniem), postanowiłem dopisać kilka zdań uzupełnienia.

Osoby, które nie czują się ekspertami w konfiguracji Linuksa powinny rozpocząć zabawę z terminalem od wgrania przygotowanego przeze mnie obrazu jądra. Kolejnym krokiem powinno być przygotowanie systemu plików. Pierwszą i najważniejsza sprawą jest utworzenie na nośniku systemu plików reiserfs. Jest to o tyle ważne, że mój kernel potrafi wykorzystać wyłącznie dysk reiserfs. Następnie na tak przygotowany dysk wgrywamy zawartość ulubionej dystrybucji, a dokładniej kopiujemy katalogi:

/bin /dev /etc /home /sbin /usr /var

oraz tworzymy puste:

/proc /root /sys /tmp

Ostatnim krokiem jest zmodyfikowanie pliku /etc/fstab tak by zawierał następującą linie: 

/dev/uba1 / reiserfs noatime 0 0

Tak przygotowany system powinien umożliwić przynajmniej zalogowanie się w trybie tekstowym oraz dalszą konfigurację terminala.