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

Podobne dokumenty