Przemysław Sowa - Serwer WWW Abashe
Transkrypt
Przemysław Sowa - Serwer WWW Abashe
Serwer WWW Abashe Przemysław Sowa Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka, Rok II [email protected] Streszczenie Abashe to serwer WWW napisany w j˛ezyku powłoki Bash. Charakteryzuje si˛e on prostota˛ instalacji oraz użytkowania. Nie stawia żadnych specjalnych wymagań co do środowiska uruchomieniowego, a ponadto jest uniwersalny oraz łatwy w rozbudowie. Dzi˛eki obsłudze interfejsu CGI/1.1 może serwować dynamiczne strony internetowe: posiada wbudowane wsparcie dla j˛ezyków PHP oraz Active Bash Pages. 1 Wst˛ep W dzisiejszych czasach nikt z nas nie wyobraża sobie życia bez Internetu. Stał on si˛e czymś tak oczywistym jak telefon czy telewizja. Natomiast najpopularniejsza˛ usługa˛ internetowa˛ jest bez watpienia ˛ World Wide Web [1]. Każdy z nas rozpoczynał poznawanie światowej paj˛eczyny od przegladania ˛ stron WWW. Witryny internetowe sa˛ proste w obsłudze a każdy współczesny system operacyjny posiada oprogramowanie pozwalajace ˛ na ich eksploracj˛e. Oznacza to, że World Wide Web jest najprostsza˛ i najbardziej intuicyjna˛ metoda˛ publikowania informacji. Dzi˛eki uniwersalnemu j˛ezykowi opisu stron - HyperText Markup Language[2], udost˛epniane przez nas zasoby moga˛ być z powodzeniem użytkowane przez wiele osób, bez wzgl˛edu na wykorzystywane przez nie systemy czy urzadzenia ˛ informatyczne. Coraz wi˛ecej osób podłaczonych ˛ jest do małych sieci domowych lub osiedlowych. Charakterystyczna˛ dla użytkowników takich sieci cecha˛ jest ch˛eć dzielenia si˛e posiadanymi zasobami. Należy jednak zwrócić uwag˛e na fakt, iż osoby te, to zwykli użytkownicy, nie koniecznie zaznajomieni z technologiami sieciowymi. Nie musza˛ znać sieciowych systemów plików, a już na pewno nie maja˛ ochoty na skomplikowana˛ instalacj˛e i konfiguracj˛e serwerowego oprogramowania. W takich przypadkach interesujac ˛ a˛ alternatywa˛ może być wykorzystanie protokołu HTTP [3] do wymiany danych. Jego uniwersalność oraz prostota użytkowania stwarzaja˛ szanse na szerokie zastosowanie go przez mniej doświadczonych użytkowników. Poważnym problemem okazuje si˛e jednak brak łatwych w obsłudze serwerów World Wide Web. Istniejace ˛ na rynku oprogramowanie [4] stworzone jest do zastosowań profesjonalnych, wymaga doświadczenia przy konfigurowaniu oraz zajmuje sporo przestrzeni dyskowej. Nisz˛e spowodowana˛ brakiem małych i prostych w obsłudze serwerów WWW stara si˛e wypełnić przedstawiony w poniższej pracy program Abashe. Zaprojektowano go tak, aby jego użytkowanie było maksymalnie uproszczone, a instalacja i konfiguracja nie 1 nastr˛eczały problemów. Jego wielka˛ zaleta˛ jest to, że działa "out–of–box", co oznacza, że nie ma potrzeby instalowania i konfigurowania megabajtów zb˛ednych bibliotek oraz oprogramowania towarzyszacego. ˛ Praca zorganizowana jest w nast˛epujacy ˛ sposób: w Rozdziale 2 przedstawiono projekt serwera, jego założenia oraz genez˛e powstania. Kolejny rozdział poświ˛econy jest architekturze systemu Abashe, zaś w Rozdziale 4 omówiono jego możliwości. Prac˛e zamyka prezentacja potencjalnych zastosowań serwera wraz z krótkim podsumowaniem. 2 Projekt serwera Abashe J˛ezyk programowania powłoki Bash [5] został zaprojektowany jako narz˛edzie do tworzenia skryptów ułatwiajacych ˛ i automatyzujacych ˛ codzienne zadania wykonywane w systemach uniksowych. W zamyśle twórców nie miała to być platforma do tworzenia aplikacji i wielu ludzi nie wyobraża sobie takiego wykorzystania tej popularnej powłoki. Z tego powodu pomysł użycia Basha do napisania w pełni funkcjonalnego serwera WWW stanowił interesujace ˛ wyzwanie. Poczatkowo ˛ Abashe miał być jedynie dowodem na uniwersalność i pot˛eg˛e najpopularniejszej linuksowej powłoki. Z czasem zaskoczył on jednak swoimi możliwościami nawet autora i przekształcił si˛e w pełnoprawny projekt programistyczny. Już na samym poczatku ˛ obok koncepcji stworzenia serwera World Wide Web istniała idea opracowania j˛ezyka do opisu dynamicznych stron WWW o zastosowaniu podobnym do PHP. Pomysł ten został z powodzeniem zrealizowany, a nowy j˛ezyk nazwano Active Bash Pages, w skrócie ABP. Zostanie on bliżej przedstawiony w dalszej cz˛eści pracy jako że stanowi integralna˛ cz˛eść serwera. 3 Architektura serwera Przy projektowaniu i implementowaniu serwera należało przede wszystkim uwzgl˛ednić ograniczenia wynikajace ˛ z użytej platformy. Skrypty powłoki maja˛ dużo mniejsze możliwości niż te pisane w takich j˛ezykach jak Perl [6] lub Python [7] i różnia˛ si˛e znaczaco ˛ od programów pisanych w j˛ezykach C/C++. Najwi˛ekszym problemem okazał si˛e brak obsługi gniazd sieciowych. Bash pozwala co prawda na otwieranie połaczeń ˛ sieciowych TCP i UDP oraz łaczenie ˛ z nimi deskryptorów gniazd, jednak nie ma możliwości utworzenia gniazda nasłuchujacego, ˛ co jest absolutnie wymagane w każdym serwerze TCP. Dla wi˛ekszości czytelników może być to wielkim zaskoczeniem, w końcu jak można bez tego napisać serwer WWW? Odpowiedź brzmi: nie można. Problem ten rozwiazano ˛ poprzez wykorzystanie programu netcat [8], który jest standardowo dost˛epny w wi˛ekszości dystrybucji Linuksa oraz w Uniksach. netcat nie jest bardzo wydajnym rozwiazaniem, ˛ dlatego alternatywnie można użyć programu hpnc rozprowadzanego wraz z serwerem. Serwer posiada budow˛e modułowa,˛ co ułatwia jego rozszerzanie oraz pozwala wyodr˛ebnić logiczne fragmenty, które moga˛ być rozwijane niezależnie. Elementy te zostały schematycznie zaprezentowane na Rysunku 1. Rdzeń aplikacji składa si˛e z dwóch skryptów: abashe.sh oraz obsluga_zadania.sh. Pierwszy z nich inicjuje serwer, drugi natomiast zajmuje si˛e obsługa każdego napływaja˛ 2 Rys. 1: Modularna budowa serwera. cego żadania ˛ HTTP. Pokrótce odbywa si˛e to w nast˛epujacy ˛ sposób: proces uruchamiania Abashe’a kończy si˛e wywołaniem programu netcat, który to rozpoczyna nasłuchiwanie na gnieździe TCP. W momencie, kiedy klient łaczy ˛ si˛e z serwerem, program netcat akceptuje połaczenie, ˛ duplikuje deskryptor gniazda sieciowego przypisujac ˛ go do standardowego wejścia oraz wyjścia, a nast˛epnie zast˛epuje swój proces skryptem obsługi żadania. ˛ Skrypt ten ponownie uruchamia aplikacj˛e netcat, aby umożliwić przyjmowanie nast˛epnych połaczeń, ˛ a sam zajmuje si˛e obsługa˛ bieżacego ˛ żadania ˛ operujac ˛ jedynie na deskryptorach standardowego wejścia/wyjścia. Dzi˛eki temu komunikacja sieciowa jest zaimplementowana w sposób zupełnie przezroczysty. Dodatkowym plusem tego rozwia˛ zania jest otrzymanie serwera wieloprocesowego, który może obsługiwać równocześnie kilku klientów. Zostało to zilustrowane na Rysunku 2. Powyższe rozwiazanie ˛ jest wymuszone przez zasad˛e działania programu netcat. Nie jest ono jednak optymalne, ponieważ przez krótka˛ chwil˛e czasu, pomi˛edzy uruchomieniem skryptu obsługi żadania ˛ i ponownym startem procesu netcat, serwer nie może przyjać ˛ nowych połaczeń. ˛ Z tego powodu wraz z serwerem Abashe rozpowszechniany jest niewielki program hpnc, który działa analogicznie jak netcat jednak nie zast˛epuje swojego procesu uruchamianym skryptem, tylko dokonuje tak zwanego rozwidlenia. Dzi˛eki temu ciagłość ˛ pracy serwera zostaje zachowana. Przetwarzanie poszczególnych połaczeń ˛ sprowadza si˛e do wysłania żadanego ˛ pliku lub do przygotowania środowiska i uruchomienia jednego ze standardowo wspieranych interpreterów stron dynamicznych: ABP lub PHP, a nast˛epnie zwrócenia wyników. 3 Rys. 2: Wieloprocesowa obsługa połaczeń. ˛ 4 Możliwości serwera To co stanowi o sile serwera Abashe jest elastyczność i prostota. Nie wymaga on instalacji ani konfiguracji (nie oznacza to jednak, że nie jest konfigurowalny). Wykorzystuje jedynie standardowe uniksowe programy, dzi˛eki czemu jest w stanie działać w każdym systemie operacyjnym zaraz po skopiowaniu na dysk. Serwer obsługuje protokół HTTP w wersji 1.0. Jego wielka˛ zaleta˛ jest wsparcie dla standardu CGI/1.1 [9], dzi˛eki czemu może współpracować z wszelkiego rodzaju aplikacjami internetowymi i serwować dynamiczne strony WWW. Wiele osób ucieszy fakt, że Abashe standardowo rozpoznaje strony napisane w PHP [10] i wykonuje je, o ile tylko w systemie znajduje si˛e interpreter tego j˛ezyka. W rezultacie omawiany program jest wyjatkowo ˛ przydatny dla webmasterów, ponieważ moga˛ oni testować wyniki swojej pracy w rzeczywistym środowisku, a jednocześnie nie musza˛ posiadać uprawnień, aby zainstalować i administrować pełnym serwerem World Wide Web. Jeszcze bardziej interesujaca ˛ jest obsługa Active Bash Pages - j˛ezyka zasługujacego ˛ na bliższe omówienie. Jak już wcześniej wspomniano, Active Bash Pages to j˛ezyk do tworzenia dynamicznych stron internetowych, rozwijany wraz z projektem Abashe. Jest on zgodny ze specyfikacja˛ CGI/1.1, co czyni go uniwersalnym i niezależnym od użytego serwera WWW. Moduł jego obsługi jest dołaczony ˛ do programu Abashe. Cecha˛ charakterystyczna˛ dla tego j˛ezyka jest fakt, że tak naprawd˛e jego interpreterem jest powłoka Bash. Oznacza to, że składnia jest taka sama jak składnia shella. Stanowi to bardzo duża˛ zalet˛e, ponieważ każdy, kto zna standardowa˛ powłok˛e Linuksa, może od razu pisać strony w ABP. Przed stronami Active Bash Pages nie sa˛ stawiane żadne wymagania, nie musza˛ one posiadać nagłówka charakterystycznego dla skryptów ani atrybutu wykonywalnego. J˛ezyk ten daje pełen dost˛ep do informacji o środowisku w jakim dana strona ABP jest wykonywana. Ponadto automatycznie dekoduje dane z formularzy HTML oraz tworzy zmienne o odpowiednich nazwach i wartościach, co czyni używanie tego narz˛edzia wyjatkowo ˛ łatwym i szybkim. 4 Należy wspomnieć, że j˛ezyk ten opcjonalnie współpracuje z prostym systemem bazodanowym BashQL. System ten również napisany jest w Bashu i zachowuje zgodność z SQL [11]. 5 Rozwój serwera Projekt pomimo wczesnego stadium rozwoju jest już w pełni funkcjonalny. W przyszłości rozważa si˛e rozbudow˛e jego możliwości poprzez np. zaimplementowanie protokołu HTTP w wersji 1.1. Kolejnym wymogiem jest poprawa wydajności, jednak ze wzgl˛edu na oparcie serwera na powłoce Bash nigdy nie zbliży si˛e on w tej kwestii do profesjonalnego oprogramowania. Należy jednak zwrócić uwag˛e, że wydajność nie była nigdy głównym celem tego projektu. Całość kodu udost˛epniana jest na licencji GPL [12], a projekt został niedawno umieszczony w portalu Sourceforge.net pod adresem: http://abashe.sourceforge.net. Autor liczy na odzew ze strony społeczności Open Source, co na pewno zaprocentuje duża˛ liczba˛ nowych pomysłów i dynamiczniejszym rozwojem projektu. Serwer Abashe stara si˛e dopasować do wymogów zwykłych użytkowników i znaleźć zastosowanie głównie w małych sieciach intranetowych. Ciekawa˛ perspektywa˛ byłoby wykorzystanie go przez administratorów systemów uniksowych. Znaja˛ oni doskonale powłok˛e Bash, dlatego mogliby swobodnie tworzyć strony ABP, a przeniesienie skryptów administracyjnych z surowych okien terminali do przegladarek ˛ internetowych otwiera nowe możliwości automatyzowania zadań zwiazanych ˛ z zarzadzaniem ˛ sieciami komputerowymi. 6 Zakończenie Przedstawiony projekt serwera jest nietypowy z kilku powodów: został zaimplementowany w j˛ezyku powłoki i jest praktycznie bezobsługowy. Nietypowe jest również jego przeznaczenie, ponieważ nie stara si˛e konkurować z poważnymi, rozbudowanymi programami tego typu. Zamiast tego adresowany jest do odbiorców używajacych ˛ serwera na prywatny użytek do serwowania niewielkich ilości danych. Autor starał si˛e zniwelować jego słabe strony oraz rozwinać ˛ zalety. Z pomysłu, który był wielkim eksperymentem wyrosło narz˛edzie, które ma szanse znaleźć swoje miejsce wśród typowych narz˛edzi uniksowych. To jednak zależy od tego, czy Abashe spotka si˛e z zainteresowaniem ze strony użytkowników i czy znajda˛ si˛e osoby ch˛etne do jego rozwoju. Bez wzgl˛edu na to, omawiany projekt jest z cała˛ pewnościa˛ jednym z ciekawszych skryptów powłoki systemu Linux, niepozbawionym wielu walorów edukacyjnych. Literatura [1] The World Wide Web Consortium - http://www.w3.org [2] HTML 4.01 Specification - http://www.w3.org/TR/html4/ [3] Hypertext Transfer Protocol - RFC 2616 5 [4] The Apache HTTP Server Project - http://httpd.apache.org [5] Bash - http://www.gnu.org/software/bash/ [6] Perl Programming Language - http://www.perl.com [7] Python Programming Language - http://www.python.org [8] Netcat - http://netcat.sourceforge.net [9] The Common Gateway Interface (CGI) Version 1.1 - RFC 3875 [10] PHP: Hypertext Preprocessor - http://www.php.net [11] The SQL Language - ISO/IEC 9075-1:2003 [12] GNU General Public License - http://www.gnu.org/copyleft/gpl.html 6