wersja
Transkrypt
wersja
Jesień Linuksowa Materiały konferencyjne Polska Grupa Użytkowników Linuxa 2 Autorzy: Daniel Koć, Jakub Lewandowski, Rafał Magryś, Adam Mańczuk, Borys ’michuk’ Musielak, Robert Partyka, Wojciech Rakszawski, Michał Sawicz, Piotr Strzyżewski Krzysztof Witański Spotkanie zorganizowali: Dariusz Grzesista, Filip Kłębczyk, Małgorzata Płatek, Lukasz Porębski, Artur Przybyła, Jarosław Jan Pyszny, Wojciech Rakszawski Imprezę wsparli: Google, IBM, Narodowe Archiwum Cyfrowe, wydawnictwo Helion, Leon Teleinformatyka, Linux Magazine, Ux Systems Patronat medialny: TVP Katowice, Radia 90, Polska Dziennik Zachodni, a także portale internetowe: rybnik.com.pl i smolna.rybnik.pl Dziękujemy tym wszystkim, którzy wnieśli szczególny wkład do imprezy. Są to: Agnieszka Bohosiewicz – Czujne (jak zawsze) Oko, Konrad Wawruch – Nieoceniony przy dopinaniu sponsoringu, Krzysztof Leszczyński – Twórca i Nadzorca systemu rejestracji uczestników Jesieni, TEXnik książki jesiennej, Karol Kreński ’mimooh’ – Twórca loga Elektryczny Tux Rybnik 2008, Lukasz Wierzyński – Twórca zdjęć jesiennych do reklam i prasy, Michał Sawicz – Twórca i Aktualizator agendy w formacie iCalendar. 3 Witajcie Jesiennicy! Głos narodu sprawił, że spotykamy się w tym samym miejscu co poprzednio. Nic nas nie zaskoczy – to samo jezioro, te same huśtawki, te same bungalowy (ciekawe, czy w tym roku również pary nie-mieszane wylądują w łożach małżeńskich?) O walorach merytorycznych rozpisywać się nie będziemy – organizatorzy zadbali, by uczestnicy nie mieli zbyt wiele czasu na rozkoszowanie się urokami okolicznych lasów i Zalewu Rybnickiego. Sobotni wieczór umili koncert jazzowy, trwający w czasie wieczornego grilowania, prosimy więc o powstrzymanie się od rytmicznego ciamkania i mlaskania. Spis referatów Michał Sawicz O pingwinie w domowym kinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Michał Sawicz Wirtualizacja – ale po co? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Krzysztof Witański Linux w urzędzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Borys ‘michuk’ Musielak, Daniel Koć Integracja Linuksowej społeczności w Internecie . . . . . . . . . . . . . 32 Adam Mańczuk Systemy wbudowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Rafał Magryś, Jakub Lewandowski Rozwój systemów IT w NAC na przykładzie ZoSIA . . . . . . . . . . . . 52 Piotr Strzyżewski Automatyczne wyszukiwanie komputerów i usług . . . . . . . . . . . . 57 Robert Partyka XUL – interfejs użytkownika przyszłości? . . . . . . . . . . . . . . . . . . . . . 74 Wojciech Rakszawski Blender a wizerunek i reklama firmy . . . . . . . . . . . . . . . . . . . . . . . . . . 88 O pingwinie w domowym kinie Michał Sawicz Od dłuższego czasu telewizor stanowi centrum domowej rozrywki. Materiały, jakimi karmią nas nadawcy, często pozostawiają wiele do życzenia. Coraz więcej osób chciałoby oglądać to, co sami sobie wybiorą, a nie to, co akurat jest dostępne. Czy, kiedy oglądamy filmy na komputerze, telewizor przestaje być potrzebny? Termin „multimedia” w kontekście mojego artykułu stanowczo zbyt mocne słowo. W dalszej części będę miał na myśli raczej multum otaczających nas mediów. Co z tymi mediami można robić? Przede wszystkim oglądać, słuchać, czytać. Możliwości jest jednak znacznie więcej. Wiadomo: telewizor to przede wszystkim filmy, seriale. Któż nie lubi sobie usiąść sobie wieczorem przy jakimś dobrym trunku i obejrzeć porządnego filmu? Najpopularniejszym nośnikiem są ciągle płyty DVD, które właściwie już w momencie ich ekspansji były przestarzałe. W czasach, gdy płyty te pojawiły się na rynku soho, niepodzielnie królowały już materiały skompresowane jednym z najbardziej dziś popularnych standardów – MPEG-4. DivX, czy inne jego odmiany (a także jeden z najwydajniejszych dziś – H.264), potrafi albo o niebo skuteczniej skompresować strumień wideo, oszczędzając tym samym miejsce 6 Michał Sawicz na nośniku, albo zapisać obraz o znacznie wyższej jakości. Na rynek w iście ślimaczym tempie wkraczają płyty BluRay, które korzystają właśnie z technologii H.264, zapisując przy okazji materiał w standardzie HD. Konkurencyjne toshibowskie HD-DVD poległo na placu boju. W lutym 2008 firma ogłosiła koniec prac nad tym standardem. Warto zapamiętać, że ś.p. HD-DVD też korzystało z kompresji H.264. Nośnik optyczny zawsze trzeba skądś zdobyć, a to w dobie rozleniwionego oglądacza nie lada wyzwanie. Trzeba się udać do sklepu, do wypożyczalni, trzeba zmarnować cenne minuty na dojazd i na poszukiwanie ciekawego tytułu. Naprzeciw tym troskom wychodzi – co prawda jeszcze u nas raczkująca – technologia video-on-demand, czyli video na życzenie. Pozwala ona na wybór materiału bez wstawania z fotela – choć niestety z bardzo ograniczonej biblioteki. A co, jeśli taki film nam się spodoba? Dobrze byłoby mieć możliwość jego archiwizacji. Poza usługą VoD, związaną zwykle z dostawcą internetu czy platformy cyfrowej, w internecie istnieją niezależne wypożyczalnie, takie jak AppleTV. Korzystanie z nich wymaga jednak porządnego łącza, co w Polsce nadal należy do rzadkości. W transmisjach telewizyjnych w Europie standardem jest DVB i jego trzy odmiany: naziemny (terrestrial), kablowy (cable) i satelitarny (satellite). Wszystkie cechuje zbliżony sposób przekazu sygnału, choć nawzajem nie są one kompatybilne. Każdy odbiornik przygotowany jest do danego rodzaju sygnału. Zdarzają się też tunery hybrydowe. Tak jak w telewizji analogowej – sygnał transmitowany jest w różnych przedziałach częstotliwości, po to, by przekazy ze sobą nie kolidowały. Transmisja cyfrowa opiera się na przesyłaniu skompresowanych strumieni. Do tej pory używano systemu kodowania MPEG-2, znanego również z płyt DVD. Wraz z nadejściem telewizji HD, operatorzy (zwłaszcza satelitarni) przechodzą na transmisję MPEG-4 głównie po to, by ciąć koszty. W ten sposób, w tym samym paśmie można przesłać więcej kanałów, albo tyle samo, o wyższej jakości. W ostatnim czasie możliwe stało się przesyłanie telewizji w technologii IPTV, wykorzystującej sieć IP. Podobnie jak wypożyczalnie VoD, wymaga to jednak wysokiej przepustowości łącza albo korzystania O pingwinie w domowym kinie 7 z usług dostawcy internetowego, który przesyła dane w dodatkowym paśmie. Kolejnym, ostatnio bardzo popularnym rozszerzeniem jest timeshifting. Pozwala on na zatrzymanie i przewijanie materiału, który został już nadany. Pozwala wyjść na przysłowiowe siku lub przewinąć materiał do momentu, który z jakiegoś powodu nam umknął – wreszcie nie jesteśmy zdani na łaskę i niełaskę realizatora meczu, możemy powtarzać najlepszego gola tyle razy, ile tylko dusza zapragnie. Time-shifting bywa przydatny również wtedy, gdy nie możemy obejrzeć materiału w godzinach emisji. Niektóre rozwiązania pozwalają automatycznie omijać reklamy w zapisywanym materiale. Oczywiście nie jest to wehikuł czasu – nie możemy przewinąć reklam, które jeszcze się nie skończyły, bądź przewinąć do programu, który jeszcze się nie zaczął. Możemy natomiast odtworzyć wyemitowane wcześniej fragmenty, już bez reklam. Kino – dla wielu przeszłość, dla innych wciąż najlepsze, ba, jedyne odpowiednie miejsce oglądania filmu. Domowy telewizor w ogóle tu nie pasuje, choć może pomóc w wyborze – gdzieś przecież musimy obejrzeć zwiastun filmu. Jeśli telewizor zostanie do tego odpowiednio przygotowany, może nie tylko taki zwiastun pokazać. Może udzielić odpowiedzi, w którym kinie ten film zobaczymy, a w niedalekiej przyszłości pozwoli również zarezerwować bilety. Kolejnym medium jest muzyka. Wymaga ona od odbiorcy znacznie mniej uwagi niż film, więc towarzyszy mu codziennie i w każdym miejscu. Każdy z nas posiada jakąś bibliotekę muzyki – czy to na płytach CD, czy w postaci plików muzycznych. Odtwarzanie jej jest trywialne. Pracując przy komputerze (laptopie) słuchanie muzyki bywa utrudnione. Słuchawki nie są wygodne, a jakość dźwięku z głośników pozostawia wiele do życzenia. W końcu do czegoś porządne wzmacniacze nadal mamy. Kiedy nasza biblioteka osiąga rozmiar kilkunastu tysięcy plików, sprawny dostęp do zbiorów bez myszy i klawiatury robi się trudny. Jeśli odwiedzi nas znajomy z własnym odtwarzaczem czy dyskiem USB, wówczas najlepiej byłoby podpiąć jego sprzęcik do zestawu kina domowego, a nie do komputera, tym bardziej, że zazwyczaj 8 Michał Sawicz słuchamy tych kawałków tylko raz, razem z przyjacielem. Chcemy, by nasze domowe centrum rozrywki pozwalało kopiować muzykę do biblioteki oraz dzielić się jej zawartością. Wszystkie te operacje powinny być dostępne nie tylko w komputerze. Nic nie stoi na przeszkodzie, by w trakcie odtwarzania utworu na ekranie telewizora można było zobaczyć informacje o wykonawcy, tekst utworu czy np. daty koncertów. Idąc dalej – przydałoby się zarezerwowanie biletu na te koncerty. Mówiąc o muzyce, musimy pamiętać o radiu. Czym z technicznego punktu widzenia różni się radio od telewizji? Brakiem obrazu! Radio przesyłane jest techniką analogową (FM) i cyfrową (DVB). Jeśli przesyła informacje o wykonawcy i tytule utworu, który jest właśnie emitowany, dobrze byłoby uzyskać dostęp do tych informacji. Ilekroć tylko dzięki temu tekstowi udało mi się zapamiętać wykonawcę danego utworu! Po powrocie z wakacji, fajnie jest pokazać rodzinie i znajomym, jak fantastyczne fotografie udało nam się wykonać. Nie posiadam rzutnika klasycznych slajdów i podejrzewam, że większość z nas, nawet jeśli takowy posiada, dawno już nie pamięta, że w ogóle go ma. Zdjęcia papierowe wychodzą z użytku, ze względu na koszty wywołania. Najczęściej siadamy więc przed ekranem... komputera? Nie! Mały ekran laptopa nie daje wystarczającego komfortu. Mamy przecież telewizor i rzutnik cyfrowy, który świetnie nadaje się do przeglądania naszych mega-zdjęć. Pisząc o mediach, nie sposób pominąć jednego z najważniejszych chyba obecnie – internetu. Znajdziemy w nim wszystko – filmy, muzykę, zdjęcia... Zastanówmy się, czy dostęp do internetu powinien być możliwy tylko z komputera PC? Jego włączanie za każdym razem pożera cenny czas, a nam w niedzielne popołudnie przecież nie zależy na wielu dodatkowych możliwościach. Chcemy posłuchać muzyki (Last.fm), radia internetowego (np. Shoutcast) czy poznać twórczość artystów udostępniających swoje prace na licencji Creative Commons (Jamendo). YouTube, Vimeo i wiele innych pozwalają nam obejrzeć video czy teledysk zasłyszanego przed chwilą utworu. Hulu oferuje darmowy dostęp do filmów i seriali w dość wysokiej jakości. Serwisy O pingwinie w domowym kinie 9 typu Flickr czy PicasaWeb udostępniają zdjęcia, które opublikowali nasi znajomi. Możliwości są zatem nieograniczone. Coraz popularniejsze stają się usługi komunikacyjne typu VoIP (voice-over-IP), takie jak Skype, czy bardziej standardowy SIP. Oferują one również transmisję wideo. Czy telewizor (choćby ten mały, w kuchni) nie wydaje się lepszym urządzeniem do video- rozmowy, niż komputer? Naturalnie powinno się z niego dać się przełączać rozmowy do innego telewizora lub komputera, albo stworzyć wideokonferencję. A do tego nie jest potrzebna klawiatura ani mysz! Pewne czynności wymagają wpisania dużej ilości tekstu czy przeglądania długich list (np. lista wykonawców z naszej biblioteki multimedialnej). Pomysłem na rozwiązanie tego problemu jest podłączenie naszego, (tak, nazwijmy go jeszcze) „telewizora” do komunikatora. Dzięki temu możliwe okaże się np. wklejenie linka do YouTube czy Flickr w okienku rozmowy, by obejrzeć dane wideo czy zdjęcia na dużym ekranie lub podanie nazwy albumu, którego właśnie chcemy posłuchać. Dysponując listą zaufanych znajomych, odnośniki takie mogliby oni przesyłać bezpośrednio do naszego HTPC tak, byśmy nie musieli wcale uruchamiać komputera. Bezpośrednio z pilota możliwe byłoby na przykład wysłanie telewizorowi znajomego odnośnika do albumu na Jamendo. Bez problemu moglibyśmy sprawdzić prognozę pogody albo przejrzeć wiadomości RSS, jeszcze przed wyjściem z domu. Na zasadzie analogii, możliwe byłoby korzystanie z Podcastów. Przeglądanie zwykłych stron WWW mi osobiście wydaje się przesadą, choć pewnie wiele osób skorzystałoby z takiej możliwości. Integracja naszego systemu rozrywki z rozwiązaniami tzw. inteligentnego budynku (czy bardziej prawidłowo – automatyki budynkowej) otwiera przed nami kolejny szeroki wachlarz możliwości. Mam na myśli na przykład inteligentne sterowanie światłem, czyli przygaszanie go w salonie, kiedy włączamy film. Równie łatwa do wyobrażenia jest dystrybucja dźwięku w całym domu – czyli słuchanie muzyki puszczonej z urządzenia dźwiękowego w dowolnym pomieszczeniu. Istnieją rozwiązania, dzięki którym muzyka czy film potrafi „podążać” za użytkownikiem poruszającym się po domu. Wykorzystuje się 10 Michał Sawicz w tym celu urządzenia Bluetooth (telefony, PDA itp.). Komputer można połączyć z systemem alarmowym, instalacją grzewczą czy monitoringiem, pozwalając zobaczyć np. kto podjeżdża samochodem pod nasz dom – w dowolnym komputerze czy telewizorze, a często nawet poza budynkiem, przez stronę WWW. Możliwości inteligentnego budynku to temat na osobną prelekcję, a pewnie i niejedną książkę, tym bardziej, że rozwiązania pozwalające je tworzyć coraz częściej znajdują się na wyciągnięcie ręki. Możemy je znaleźć nie tylko w jednostkach rządowych czy naukowych, ale również w coraz większej liczbie hoteli o wysokim standardzie i sklepach. Powyżej opisałem najczęstsze wymagania, stawiane współczesnym systemom domowej rozrywki. Zastanówmy się teraz, jakie możliwości zyskamy, wybierając konkretne rozwiązanie sprzętowe. Set-Top-Box, popularnie zwany u nas „dekoderem telewizji cyfrowej”, w zależności od zaawansowania sprzętu i oferty operatora, udostępnia możliwość odtwarzania mediów, dostarczanych wyłącznie z platformy cyfrowej czy telewizji kablowej. Bardziej zaawansowane modele umożliwiają time-shifting i nagrywanie. Coraz częściej pojawiają się na nich usługi video-on-demand. Odtwarzacze DVD/DivX pozwalają na wyświetlenie zdjęć z podłączonego pendrive’a czy karty pamięci, a te droższe również na odtwarzanie filmów z lokalnej sieci. Jeśli natomiast zdecydujemy się wydać na to „pudełko” jeszcze więcej, będziemy mogli oglądać jeden kanał nagrywając inny, wypalać nagrane programy na DVD, czy składować materiały video na dysku o dużej pojemności. Dodatkowo, urządzenia pracujące pod kontrolą Linuksa posiadają w sieci spore zasoby dodatkowego oprogramowania. Urządzenie takie może w wielu zadaniach zastępować komputer klasy media center. Dedykowany komputer, który postawimy pod telewizorem, potrafi wszystko to, co zwykły. Znika przy tym problem współdzielenia komputera, gdy jedna osoba chce oglądać film, a druga pracować na komputerze. HTPC buduje się tak, by był cichy, zmniejszając do minimum O pingwinie w domowym kinie 11 liczbę wentylatorów i innych ruchomych części. Coraz częściej producenci sprzętu decydują się na zastąpienie dysku twardego kartą pamięci – i to też jest jego atut. Dobrą praktyką jest umieszczanie serwera mediów w osobnym pomieszczeniu, np. piwnicy, tak, by dane dostępne były zawsze – niezależnie od włączonych komputerów, a spory i głośny komputer nie przeszkadzał w salonie. Minusem takiego rozwiązania będzie długi czas jego uruchamiania, w porównaniu z dedykowanymi urządzeniami. Problem ten łatwo jest jednak zminimalizować, wykorzystując wstrzymanie lub hibernację systemu zamiast jego wyłączania. Większość oprogramowania umożliwia też personalizację menu, tak by każdy użytkownik mógł dostosować interfejs do własnych upodobań oraz modyfikować wybrane media. Protokół universal plug-and-play pozwala na łatwe współdzielenie mediów z urządzeniami, które potrafią z niego korzystać. Pozwala np., po odpowiednim skonfigurowaniu serwera mediów UPnP, na odtwarzanie muzyki bezpośrednio we wzmacniaczu (np. Yamaha), wideo w konsolach (np. PlayStation 3) czy telewizorach z wbudowaną obsługą tego protokołu (np. Acer). Urządzenia takie nie wymagają żadnej konfiguracji. Podłączenie do sieci, w której działają serwery UPnP spowoduje pokazanie się tych serwerów np. w menu telewizora. Istnieje także możliwość zdalnego sterowania takim urządzeniem, zwanym Media Rendererem przy użyciu np. interfejsu na komputerze czy innym urządzeniu implementującym zestaw instrukcji Media Controller. Wiemy już jakiego sprzętu możemy użyć do budowy własnego centrum multimedialnego, jednak hardware to nie wszystko. Zwłaszcza jeśli korzystamy z komputera przyda nam się pakiet oprogramowania, który mógłby zmienić nasz pokój w salę kinową. Najbardziej chyba kompletnym rozwiązaniem jest projekt MythTV, czyli oprogramowanie klasy PVR (Personal Video Recorder). Pozwala ono oglądać kanały TV i radiowe z różnych źródeł – tunerów telewizyjnych, satelitarnych (także zewnętrznych), kamer i wielu innych. Umożliwia nagrywanie ze wszystkich obsługiwanych źródeł, jak 12 Michał Sawicz również time-shifting. Od wersji 0.21 możemy nagrywać jednocześnie kilka kanałów z jednego tunera, o ile kanały te znajdują się w jednym tzw. multipleksie. Nawiasem mówiąc, kiedy w Polsce jest mowa o przejściu na transmisję naziemną w standardzie DVB-T, wspomina się o uruchomieniu trzech takich multipleksów. W efekcie MythTV pozwoli na nagrywanie wszystkich kanałów przesyłanych tą drogą, przy wykorzystaniu jedynie trzech tunerów DVB-T. Większość kanałów Cyfry+ nadawana jest w pięciu multipleksach – nagrywanie ich wszystkich jest więc możliwe z wykorzystaniem pięciu tunerów, choć pojawia się jeszcze kwestia dekodowania takiego sygnału. MythTV oferuje bardzo rozbudowany system planowania nagrań. Pozwala np. na nagranie wszystkich odcinków danego programu bez względu na kanał i godzinę emisji. Eliminuje duplikaty, o ile dane o programie TV są wystarczająco precyzyjne. Pozwala na automatyczne wyszukiwanie reklam i ich eliminację podczas odtwarzania. Możliwa jest także podstawowa edycja nagrań, np. wycinanie zapowiedzi z nagrania przeznaczonego do archiwizacji. MythTV pozwala na pracę z materiałami w wysokiej rozdzielczości. Niestety ta ilość możliwości wiąże się ze skomplikowaną konfiguracją. Całość można podzielić na kilka (choć teoretycznie – dowolną) liczbę komputerów, odpowiedzialnych wyłącznie za nagrywanie (backend), odtwarzanie (frontend), albo jedno i drugie. W sieci może istnieć kilka backendów, ale tylko jeden typu master, zarządzający zadaniami podległych mu slave’ów. Oprócz możliwości PVR, mamy do dyspozycji wtyczki pozwalające na odtwarzanie video, zdjęć, muzyki, wyświetlanie pogody czy zwiastunów. Istnieją także moduły do emulowania gier ze starych konsol a także moduł MythFlix, służący do zarządzania kontem w sieciowej wypożyczalni NetFlix (USA). Ostatnimi czasy projekt jest wolno rozwijany, bo większość pracy deweloperów skupia się na portowaniu projektu do biblioteki Qt4. MythTV w pełni działa wyłącznie pod Linuksem, a odtwarzanie mediów innych niż telewizja, DVD czy muzyka odbywa się za pośrednictwem zewnętrznego programu, tj. MPlayer czy Xine. O pingwinie w domowym kinie 13 Najbardziej interesujący dziś projekt w branży prowadzi firma Fluendo. Jest nim Elisa Media Center. Można w nim znaleźć właściwie wszystko, czego od takiego projektu można wymagać. Projekt rozwija się szybko i ma ma ciekawy, nowoczesny design. Póki co brakuje mu niestety oficjalnego wsparcia dla telewizji i DVD, choć to ostatnie powinno się pojawić wkrótce. W podstawowej wersji program umożliwia dostęp do filmów z YouTube, zdjęć z Flickr i stacji radiowych Shoutcast. W ciągu paru tygodni będzie gotowe wsparcie dla Jamendo. Na razie pozwala on słuchać muzykę online i ściągać ją za pośrednictwem BitTorrenta. Elisa od początku budowana jest tak, by jak najbardziej ułatwić tworzenie wtyczek. Automatyczna i prosta ich aktualizacja możliwa jest dzięki modułowi setuptools dostępnemu na poziomie języka Python, w którym napisana jest Elisa. Podstawowy interfejs użytkownika opiera się o projekt Pigment, również autorstwa Fluendo, który dokonuje abstrakcji funkcji OpenGL, umożliwiając łatwe tworzenie wydajnych, animowanych interfejsów użytkownika – również na platformach mobilnych. Część multimedialna opiera się o pakiet filtrów GStreamer, co znacznie pomogło w rozwoju wieloplatformowym. Elisa pracuje pod Linuksem, Windowsem a w niedalekiej przyszłości ma działać również na MacOS X. Kolejnym projektem jest Freevo. Oferuje on właściwie wszystko to, co MythTV, i działa podobnie – w oparciu o MPlayer lub Xine. Posiada możliwość współpracy z systemami automatyki budynkowej. Ostatnio większość prac zespołu developerów ukierunkowana jest na rozwój wersji Freevo 2 – opartej o autorską platformę multimediów – Kaa. GeeXBox to maleńka, kompletna dystrybucja Linuksa, bazująca na programie MPlayer, którą można uruchomić bezpośrednio z płyty CD czy innego nośnika jak np. pendrive. Nic nie stoi na przeszkodzie by dodać ją np. do płyty z filmem, dzięki czemu komputer, na którym zechcemy go odtworzyć, nie będzie potrzebował nawet dysku twardego. GeeXBox odtwarza wszystkie popularne formaty video, muzykę, 14 Michał Sawicz telewizję i shoutcasty. Rozwój projektu niestety ostatnio się zatrzymał – ostatnia aktualizacja na stronie pochodzi z lipca 2007 roku. Nie tak dawno pojawiła się informacja o pracach nad GeeXBox 2.0, który ma działać w oparciu o Freevo 2. Być może stąd wynika zastój. Uzupełnieniem wszystkich wyżej wymienionych pakietów jest dodawany do dystrybucji Linuksa system dźwięku PulseAudio. Pozwala on na przenoszenie strumieni dźwięku w czasie rzeczywistym, poza obręb pojedynczego komputera i do różnych kart dźwiękowych. Używając zwykłego odtwarzacza na lokalnym komputerze można przełączyć przesyłanie muzyki i sprawić, by – zamiast do lokalnych głośników – muzyka była kierowana do innego komputera, czyli na przykład do HTPC a przez niego do wzmacniacza i dobrej klasy głośników. PulseAudio – o czym warto pamiętać – działa również w środowisku Windows. ∗ ∗ ∗ Telewizor już dawno powinien nam przestać służyć jako okno na świat, którego obrazem rządzą wyłącznie nadawcy. Dodanie do niego komputera pozwala znacznie lepiej wykorzystać drzemiące w nim możliwości. Podstawowy problem nadal stanowi obawa operatorów i nadawców, że z nich zrezygnujemy. Stosują zniewalające i blokujące rozwój techniki typu DRM (Digital Rights Management) przez co do tej pory nie ma możliwości legalnego odtworzenia płyty BluRay w Linuksie albo innym Wolnym Oprogramowaniu. Nie da się także skorzystać z usług VoD. Coraz więcej dostawców przekonuje się na szczęście, że zamykanie muzyki i video wbrew pozorom zmniejsza ich dochody. Otwarcie wydaje się więc tylko kwestią czasu. Pozostaje mieć nadzieję, że również wydawcy płyt dojdą do podobnych wniosków. A oto serwisy związane z przedstawioną tematyką. Warto na nie zajrzeć, by dowiedzieć się czegoś więcej: http://jamendo.com/ http://mythtv.org/ http://elisa.fluendo.com/ http://geexbox.org/ http://freevo.org/ http://pulseaudio.org/ Wirtualizacja – ale po co? Michał Sawicz Teoria Co to jest wirtualizacja? Emulator to program komputerowy, który duplikuje funkcje jednego systemu informatycznego w innym. Programujemy zestaw funkcji jakiegoś programu, przejmując wszystkie odwołania od uruchamianego oprogramowania i wykonując je na poziomie aplikacji. W zależności od zastosowania, emulujemy tylko wybrane funkcje – tak jak WINE implementuje WinAPI. Mamy wtedy do czynienia z emulacją API, jeśli zaś emulujemy wszystkie podstawowe zasoby systemu, tj. procesor, pamięć itp., mówimy o emulacji pełnej. Zaletą emulacji jest łatwa przenośność kodu. Podstawową wadą – wysoka specjalizacja lub niska wydajność. Wikipedia mówi: Wirtualizacja jest szerokim pojęciem odnoszącym się do abstrakcji zasobów w różnych aspektach komputeryzacji. 16 Michał Sawicz Z tego nic nie wiadomo. Wirtualizacja jest połączeniem podstawowych zalet emulacji pełnej oraz emulacji API. Tu już cieplej. . . Co istotne, wirtualizacja polega na wykonywaniu jak największej liczby operacji bezpośrednio na zasobach sprzętowych, nie emulowanych. Dopiero kiedy jakiejś operacji nie da się, na przykład z powodów bezpieczeństwa, wykonać na sprzęcie, platforma wirtualizacji przejmuje takie odwołanie i emuluje je bądź przetwarza na takie, które można już wykonać na zasobach rzeczywistych. Hypervisor (monitor maszyn wirtualnych) to proces, który zarządza tworzeniem, uruchamianiem i zatrzymywaniem wirtualnych maszyn, a także nadzoruje wszystkie wykonywane przez systemy gościa operacje, przechwytując takie, których nie da się w danej konfiguracji wykonać na sprzęcie. Istnieje co najmniej kilkanaście odmian wirtualizacji, z których opiszę kilka najpopularniejszych. Parawirtualizacja to technika polegająca na udostępnieniu uruchamianej maszynie wirtualnej podobnego, lecz nie identycznego, zestawu instrukcji, jaki byłby dostępny na platformie sprzętowej. Pozwala to na osiągnięcie wydajności zbliżonej do osiąganej bez wirtualizacji, wymaga jednak uruchomienia systemu operacyjnego zmodyfikowanego tak, by korzystał właśnie z tych instrukcji. Z oczywistych przyczyn, bez zaangażowania producenta systemu, w ten sposób da się uruchomić jedynie otwarte systemy operacyjne, bo te łatwo, zgodnie z licencją, adaptować do wykorzystania w maszynie wirtualnej. Parawirtualizacja pozwala na bardzo łatwe przenoszenie maszyn wirtualnych z jednego sprzętu na inny, bo system wirtualizowany nie odwołuje się bezpośrednio do sprzętu, tylko do jego abstrakcji, dostarczanej przez hypervisora. Swego czasu grupa zapaleńców z Cambridge University zmodyfikowała system Windows XP tak, by działał w środowisku parawirtualizacji. Licencja nie pozwoliła jednak na opublikowanie (a więc i wykorzystanie) efektów ich pracy. System uruchamiany w środowisku pełnej wirtualizacji „nie ma pojęcia”, że nie działa na rzeczywistym sprzęcie. Monitor maszyn Wirtualizacja – ale po co? 17 wirtualnych implementuje wszystkie funkcje, jakie byłyby dostępne w środowisku niewirtualizowanym. Pozwala to na uruchamianie niemodyfikowanych systemów operacyjnych i wykorzystanie wszystkich ich możliwości. Technika ta wymaga, by architektura systemu, na którym jest uruchamiana platforma wirtualizacji, spełniała kryteria Popka-Goldberga, czyli: odpowiedniość – program działający w środowisku maszyny wirtualnej musi zachowywać się w dokładnie tak samo jak na rzeczywistym sprzęcie, kontrola zasobów – monitor maszyn wirtualnych musi w pełni kontrolować wszystkie wirtualizowane zasoby, wydajność – większa część instrukcji musi być wykonywana bez udziału maszyny wirtualnej. Instrukcje wykonywane przez system operacyjny podzielili oni na: uprzywilejowane – których efektem jest przerwanie w trybie użytkownika lub jego brak w trybie jądra, wrażliwe ze względu na kontrolę – próbujące zmienić konfigurację zasobów systemowych, wrażliwe ze względu na zachowanie – których działanie jest zależne od konfiguracji systemu. Popek i Goldberg zdefiniowali następujące twierdzenie: „Dla każdego standardowego komputera trzeciej generacji wirtualna maszyna może zostać skonstruowana, jeśli zbiór instrukcji wrażliwych jest podzbiorem zbioru instrukcji uprzywilejowanych.” Wynika z tego, że każda operacja, która mogłaby spowodować błędne działanie aplikacji, wywołuje przerwanie, dzięki któremu hypervisor może podjąć odpowiednie kroki – to zapewnia nam odpowiedniość i kontrolę zasobów. Reszta wywołań jest przekazywana bezpośrednio 18 Michał Sawicz do sprzętu, co zapewnia nam ostatnie kryterium – wydajność. Pełna wirtualizacja nie była dostępna w architekturze x86, dopóki nie zaimplementowano rozszerzeń, które spełniły powyższe wymagania. Nie było można przede wszystkim przechwytywać niektórych uprzywilejowanych instrukcji. Co ciekawe, platformy wirtualizacji od dawna informowały o dostępności pełnej wirtualizacji na tej architekturze. Faktycznie odbywało się to kosztem wydajności, bo uruchamiane oprogramowanie lub jego odwołania musiały być modyfikowane podczas pracy systemu tak, by nie „wydostały się” z wirtualnej maszyny. Pełna wirtualizacja bardzo ogranicza przenośność maszyn, gdyż w czystej postaci maszyna wirtualna dostarcza identyczny zestaw instrukcji i sprzętu, co maszyna rzeczywista na której jest uruchomiona. Przeniesienie na inny sprzęt wymaga więc dostosowania do niego chociażby sterowników zainstalowanych w wirtualizowanym systemie. Wirtualizacja wspomagana sprzętowo jest rozszerzeniem pełnej wirtualizacji o wykorzystanie specjalnych instrukcji dostarczanych przez sprzęt, głównie procesora gospodarza. Bywa nazywana akcelerowaną albo sprzętową maszyną wirtualną. Pozwala na przechwytywanie wrażliwych operacji i ich emulowanie, jednak tym razem w warstwie sprzętowej, a nie aplikacji. Co prawda zwiększa to wydajność takiej maszyny wirtualnej, jednak wciąż ustępuje parawirtualizacji – wciąż jest bardzo wiele instrukcji, które muszą zostać przechwycone i emulowane. Wirtualizacja hybrydowa to połączenie dwóch podstawowych technik – pełnej i para-wirtualizacji. Polega oczywiście na wykorzystaniu ich największych zalet w celu osiągnięcia jak najlepszych wyników. Stosuje się parawirtualizowane sterowniki – nie modyfikuje się samego systemu operacyjnego, ale instaluje się odpowiednio zmodyfikowane sterowniki korzystające z odwołań dostępnych w parawirtualizacji, co znacznie ogranicza ilość odwołań, które muszą zostać przechwycone i zmodyfikowane. Jak można się domyślić, następny sposób – częściowa wirtualizacja – ogranicza zarówno wymagania jak i możliwości maszyny Wirtualizacja – ale po co? 19 wirtualnej. Implementuje tylko część instrukcji pełnej maszyny, przez co uruchomić można tylko niektóre aplikacje: te, które nie korzystają z niewspieranych instrukcji. Problem powstaje, gdy uruchamiana aplikacja rozwija się, bo trzeba wtedy rozbudować samą platformę wirtualizacji. Często niełatwo jest jednoznacznie określić, z jakich zasobów dana aplikacja korzysta. Jeśli któraś z wymaganych instrukcji nie zostanie zaimplementowana, usługa przestanie działać. W wirtualizacji na poziomie systemu operacyjnego jądro systemu operacyjnego pozwala, by działało kilka, a nie tylko jedna, izolowana instancja przestrzeni użytkownika. Takie przestrzenie dla ich właściciela nie różnią się niczym od uruchomionej pojedynczo, w osobnym systemie. Podejście to redukuje do minimum narzut wydajności, bo uruchomione jest tylko jedno jądro. Nie istnieje problem emulacji czy przechwytywania instrukcji, co jednak ogranicza elastyczność. W takim środowisku uruchomić możemy jedynie aplikacje przeznaczone dla tej samej architektury i systemu, co system gospodarza. Nie da się np. uruchomić innego jądra czy systemu Windows w środowisku linuksowym. Gdy korzystamy z wirtualizacji aplikacji, abstrakcji ulega część lub całość odwołań danej aplikacji do zasobów systemowych. Pozwala ona na zamknięcie aplikacji w danym obszarze, przekierowując jej odwołania. Dzięki temu równolegle mogą być uruchomione np. różne wersje tej samej aplikacji lub różne aplikacje, które w zwykłym środowisku kolidowałyby ze sobą. Wirtualna aplikacja oczywiście „nie wie”, że jest uruchomiona w wirtualnym środowisku. Przekierować można np. tylko odwołania do danego pliku (wtedy mówimy o częściowej wirtualizacji); pełna zaś wymaga stworzenia warstwy wirtualizacji, przez którą biec będą wszystkie instrukcje z aplikacji. Ale – po co? Jedną z podstawowych zalet uruchamiania usług w wirtualizowanym środowisku jest bezpieczeństwo. Każda z usług może być uruchomiona w izolowanym systemie, komunikując się z innymi wyłącznie z wy- 20 Michał Sawicz korzystaniem sieci. Ewentualny atak nie będzie miał wpływu na procesy funkcjonujące na tej samej maszynie fizycznej, ale innej – wirtualnej. Bardzo łatwo jest uruchomić daną usługę na dwóch wirtualnych maszynach, zapewniając nadmiarowość nawet w ramach jednego fizycznego komputera tak, by w razie awarii jednej z nich, druga przejęła jej zadania. Uruchomienie „kopii” zestawu maszyn wirtualnych na osobnej (lub kilku) fizycznej maszynie umożliwia korzystanie zarówno z bezpieczeństwa oferowanego przez izolację usług jak i z ciągłości dostępności wszystkich usług. Konsolidacja zasobów znacznie zmniejsza koszty zarówno wdrożenia jak i utrzymania wielu izolowanych środowisk. Kupno jednej wydajnej maszyny, potrafiącej w ramach wirtualnych serwerów udostępnić wszystkie potrzebne usługi, zwykle znacznie mniej obciąża budżet firmy, niż kupno osobnej fizycznej maszyny dla każdej aplikacji. Utrzymanie – w tym choćby zużycie prądu – ma tu niebagatelne znaczenie. Koszty zarządzania taką instalacją są niższe, bo administrator nie musi się fatygować do serwerowni by dostawić nową maszynę i uruchomić dodatkową usługę. Często tylko w ten sposób można w pełni wykorzystać zasoby: nie trzeba każdej z maszyn posadawiać na osobnym sprzęcie, by zapewnić wystarczającą wydajność w godzinach szczytu. W czasie niższego obciążenia inna aplikacja może z powodzeniem wykorzystać wolne zasoby. W sumie wymagana jest więc np. mniejsza wydajność procesora, gdyż będzie on wykorzystywany znacznie efektywniej. Drugim, związanym pośrednio z kosztami, a równie ważnym aspektem, jest elastyczność. Znacznie prościej i szybciej jest uruchomić nową aplikację w systemie wirtualizowanym – choćby tylko do testów, niż w każdym przypadku instalować nowy sprzęt po to tylko, by się okazało, że nam ona nie odpowiada, a sprzęt się nie przyda. Można rzecz jasna aplikację zainstalować na istniejącym systemie fizycznym, ale jeśli nie znamy dobrze jej zachowania (co jest normalne w środowisku testowym), ryzykujemy przerwy w działaniu istniejącej, Wirtualizacja – ale po co? 21 prawdopodobnie ważnej dla pracowników, usługi. Kolejnym utrudnieniem może być polityka bezpieczeństwa firmy, nie dopuszczająca często uruchamiania żadnej nowej aplikacji na tej samej maszynie. Kiedy mamy do dyspozycji kilka maszyn fizycznych, przenoszenie między nimi usług tak, by równomiernie rozłożyć obciążenie, może stanowić poważny problem, zwłaszcza gdy okaże się, że jedna z aplikacji nagle znacznie zwiększyła wykorzystanie zasobów i dany serwer zaczyna mieć problemy z wydajnością. Większość platform wirtualizacji pozwala na przenoszenie maszyn wirtualnych pomiędzy instalacjami fizycznymi, często wręcz „na gorąco”. Podczas takiej migracji dany system zatrzymywany jest na ułamek sekundy, nie przerywając pracy żadnej z aplikacji. W ten sposób możemy bezpiecznie migrować daną usługę np. na nową lub mniej wykorzystaną maszynę fizyczną, nie zatrzymując żadnych istotnych usług. Last, but not least. W każdej niemal firmie wdrożenie rozwiązania wiąże się z przygotowaniem środowiska testowego, dopasowaniem aplikacji do wymagań firmy, solidnym przetestowaniem, wdrożeniem testowym, itd. Takich etapów może być całkiem sporo. Osoby odpowiedzialne za wdrożenie mogą chcieć uruchomić dwie, uzupełniające się instalacje i sprawdzić, czy wszystko zachowuje się jak należy. Wyobraźmy sobie następującą sytuację: stawiamy dwie maszyny, na których będzie przeprowadzana instalacja, na kolejnych kilku instalujemy systemy końcowego użytkownika. Pół biedy, jeśli te maszyny mają być docelowymi, na których dana aplikacja ma pracować. Jeśli nie, czeka nas jeszcze instalacja na docelowym sprzęcie. Czy można to zrobić lepiej? Tak, ponieważ wirtualizacja pozwala na stworzenie takiego środowiska w ramach jednej fizycznej maszyny. Jeśli gdzieś po drodze popełniliśmy błąd krytyczny, instalację można wyrzucić i wszystko zacząć od nowa. Nie jest to przyjemne, zwłaszcza, gdy terminy gonią. Większość oprogramowania do wirtualizacji pozwala na szczęście na tworzenie zrzutów (ang. snapshot) w dowolnym momencie pracy systemu. Powrót do zapamiętanego stanu wymaga zaledwie kilku kliknięć lub wydania kilku poleceń konso- 22 Michał Sawicz li. Efektem będzie uruchomiony system (nie tylko to, co zostało zapisane na dysku, także kompletny zrzut pamięci wirtualnej maszyny). Istnieje kilka możliwości połączenia maszyn wirtualnych siecią. Domyślnie wykorzystuje się mechanizm NAT – interfejs maszyny wirtualnej znajduje się wtedy w osobnej podsieci, mając kontakt z siecią zewnętrzną poprzez interfejs gospodarza. Bez odpowiedniej konfiguracji do maszyny wirtualnej nie ma dostępu nikt z zewnątrz. Innym – i bodaj najprostszym rozwiązaniem wydaje się most, który naszą sieć wirtualną łączy z rzeczywistą siecią LAN. Maszynie wirtualnej przypisujemy adres IP z podsieci wykorzystywanej w naszym segmencie, udostępniając wszystkie usługi użytkownikom fizycznej sieci – także aplikacjom uruchomionym na komputerze gospodarza. Nie byłoby możliwe przy wykorzystaniu mechanizmu NAT. Dla środowisk testowych najlepszym wydaje się wykorzystanie wyłącznie sieci wirtualnej. W tej sytuacji połączyć mogą się jedynie uruchomione maszyny wirtualne, niedostępna jest dla nich nawet sieć gospodarza. Dzięki temu możemy tam wykorzystać nawet adresy IP wykorzystane w naszej rzeczywistej sieci, symulując jak najdokładniej środowisko docelowe. Kiedy piszemy jakąś aplikację, zwykle zależy nam na tym, by aplikację dało się uruchomić na jak największej ilości systemów operacyjnych. Kod HTML inaczej wyświetla się uruchomiony w przeglądarce linuksowej, inaczej w Windowsie, nawet jeśli na obydwu pracuje Firefox. Gdy przełączanie się między systemami czy posiadanie kilku komputerów z różnymi systemami nie wchodzi w rachubę, z pomocą przychodzą właśnie maszyny wirtualne. Wirtualizacja przychodzi z pomocą również w trywialnych sytuacjach. Jeśli mamy problem z plikiem, który nie otwiera się w żadnej linuksowej aplikacji, a WINE akurat odmówił współpracy, wirtualna maszyna wydaje się być optymalnym rozwiązaniem. Zapisujemy plik w formacie, który Linux nam już przełknie. No tak, ale co dalej? Nagrać go na płytkę? Przenieść pendrivem? Na szczęście jest NTFS-3g. Ale jeśli skorzystamy z wirtualnej maszyny, plik możemy zapisać we współdzielonym folderze na dysku gospodarza. Wirtualizacja – ale po co? 23 Na pograniczu teorii i praktyki Są dwie podstawowe techniki radzenia sobie z wdrożeniem wirtualizacji na architekturze x86: Translacja binarna – polega na wychwytywaniu w odwołaniach instrukcji, które nie mogą zostać wykonane na sprzęcie i tłumaczenie ich na takie, które przetworzy hypervisor, Dynamiczna rekompilacja jest w zasadzie rozszerzeniem translacji binarnej, jednak polega na rekompilacji części wykonywanego kodu tak, by udało się go wykonać w danym środowisku. Zwykle efekty pracy obu tych technik są cache’owane, bo sama translacja czy rekompilacja jest wydajnościowo kosztowna. Po rekompilacji stosuje się patchowanie oryginalnego kodu, by rekompilacja była potrzebna tylko przy pierwszym uruchomieniu. W latach 2005-2006 dwaj główni gracze rynku procesorów – najpierw Intel, potem AMD – zaimplementowali w swoich procesorach rozszerzenia, które pozwalały na wirtualizację wspomaganą sprzętowo. Obie implementacje są różne, jednak większość rozwiązań pozwala korzystać z rozszerzeń w obu typach procesorów. Intel VT dostępny jest w większości procesorów produkowanych po 2005 roku. AMD-V (zwana także Pacifica) zaimplementowano w części procesorów Athlon 64, Turion 64 X2, Opteron i Phenom, a także we wszystkich nowszych. Większość usług typu VPS (Virtual Private Server) bazuje właśnie na tej technice wirtualizacji, stąd zwykle mamy wybór tylko kilku systemów/dystrybucji. Pozwala ona usługodawcy zredukować narzuty wydajnościowe, jakie występują w innych technikach wirtualizacji. Zapewnia przy tym stosunkowo dużą elastyczność w udostępnianiu zasobów. 24 Michał Sawicz Praktyka Xen Xen jest hypervisorem wykorzystującym głównie technikę parawirtualizacji. Pozwala na wirtualizowanie zmodyfikowanych systemów typu UNIX, Linux lub innych, niemodyfikowanych, korzystając z rozszerzeń wspomaganych sprzętowo. Wymaga uruchomienia specjalnej wersji jądra na systemie hosta. Gość musi działać na tej samej architekturze co system gospodarza. Xen jest publikowany na licencji GPL, rozwijany początkowo przez firmę XenSource, przekazany potem instytucji Xen AB, której członkami są teraz takie firmy jak Novell, Red Hat czy Sun. Ostatnio Microsoft ogłosił, że opublikuje sterowniki pozwalające na uruchomienie systemów MS (np. Windows Server) w środowisku Xen z dużą wydajnością – korzystając z wirtualizacji hybrydowej. Podobny zestaw sterowników oferuje Novell w wydaniach SUSE Linux Enterprise. W Xen gospodarz pracuje w obszarze tzw. domeny 0, systemy gościa w obszarze domeny U. Istnieje kilka rozwiązań pozwalających na zarządzanie środowiskiem wirtualizowanym przy pomocy Xen, np. aplikacja webowa Enomalism. Część kodu Xen (przede wszystkim menedżer urządzeń) bazuje na kodzie QEMU. Dostępna jest migracja systemu na żywo, w której rzeczywista przerwa w działaniu systemu wynosi 60-300ms. VirtualBox VirtualBox korzysta przede wszystkim z techniki wirtualizacji pełnej. Pozwala na uruchomienie systemu gościa wyłącznie w 32-bitowej architekturze x86. Działa na platformie fizycznej x86 (także 64-bitowej) w systemach Windows, Linux i MacOS X. Pierwotnie rozwijany był przez firmę InnoTek, w 2007 roku większość kodu programu została otwarta. W lutym 2008 Sun przejął firmę wraz z prawami do oprogramowania. Dziś system nazywa się Sun xVM VirtualBox. Platforma ta Wirtualizacja – ale po co? 25 do pełnej wirtualizacji wykorzystuje mechanizm dynamicznej rekompilacji, bazowanej na QEMU. Część kodu aplikacji jest patchowana. Wersja otwarta (OSE – Open Source Edition) jest dostępna do wszelkich zastosowań, pozbawiona jest jednak kilku istotnych możliwości. Wersję komercyjną Sun udostępnia za darmo do użytku prywatnego, edukacyjnego oraz ewaluacji. VB oferuje takie opcje jak łatwe współdzielenie folderów z systemem gospodarza, efektywne zrzuty systemu gościa, tryb zintegrowany – pozwalający na wyświetlanie okien systemu gościa na pulpicie gospodarza. W wersji zamkniętej dostępne jest wsparcie dla USB 2.0, które w przyszłości ma zostać udostępnione także w wersji otwartej. W wersji zamkniętej znajdziemy także wsparcie dla sieciowych dysków iSCSI oraz wbudowany serwer RDP (Remote Desktop – zdalny pulpit), ze zdalnym udostępnianiem urządzeń USB przez protokół RDP (USB-over-RDP). W planach jest dodanie obsługi 64-bitowych systemów gościa, migracja maszyn „na żywo”, wirtualizacja akceleracji 3D oraz współpraca z formatami dysków wirtualnych z VMWare czy MS Virtual PC. QEMU Podstawową zaletą QEMU jest możliwość emulacji wielu architektur sprzętowych takich jak MIPS, SPARC, ARM, RISC i inne. Nie ma jednak róży bez kolców: wszystko to kosztem wydajności, która wynosi zaledwie 10–20% wydajności gospodarza. Różne części QEMU są publikowane na różnych licencjach – GPL, LGPL czy FreeBSD, ze względu na zawarte elementy kodu uniemożliwiające ujednolicenie licencji. QEMU można uruchomić w trybie użytkownika, uruchamiając jedną tylko aplikację, bądź w trybie systemu, pozwalając na wirtualizację całego systemu operacyjnego. Dla architektury x86 dostępny jest moduł KQEMU, zwiększający wydajność pięciokrotnie. Wykorzystuje on mechanizm dynamicznej rekompilacji, niestety w tej chwili nie potrafi korzystać ze sprzętowej akceleracji IVT czy AMD-V, wspiera za to SMP. Sterowniki hosta nie są dostępne dla systemów gościa, co skutecznie spowalnia korzystanie z urządzeń typu karta dźwiękowa czy video. 26 Michał Sawicz VMWare VMWare jest jednym z pierwszych graczy na rynku wirtualizacji. Oprogramowanie jest w całości komercyjne. Wykorzystuje głównie technikę wirtualizacji pełnej przy pomocy translacji binarnej. Najbardziej zaawansowany produkt – ESX Server to kompletny system gospodarza, który bazuje na dystrybucji Red Hat. Instaluje się go bezpośrednio na sprzęcie (zgodnym z x86). Odpowiednikiem dla systemu MacOS X jest tu VMWare Fusion. VMWare Server to wydanie darmowe dla systemów Linux i Windows. Workstation to komercyjna wersja przeznaczona do instalacji w systemach jak VMWare Server. Jest jeszcze Player, czyli „odtwarzacz” maszyn stworzonych przy pomocy jednego z innych produktów. Jako produkt komercyjny oferuje największą gamę możliwości. To też wirtualizacja Wszyscy korzystamy z jakiejś formy wirtualizacji – ot choćby Swap, który jest niczym innym, jak pamięcią wirtualną na dysku. Jest to jedno z pierwszych powszechnych zastosowań technik wirtualizacji. Wirtualizacją są wszelkie form. Wirtualne – choć na co dzień nie zdajemy sobie z tego sprawy – są nawet Flash Player i Java. Nie bez powodu wszędzie mówi się o maszynach wirtualnych. Wystarczy jedynie zdefiniować, na jakim poziomie się ona odbywa. Uruchomienie nowej maszyny wirtualnej w VirtualBoksie jest trywialne. Wydajność takiej instalacji pozwala w większości przypadków zrezygnować z podejścia dual-boot. Z VMWare’m jest podobnie. Wbrew pozorom, Xen też nie wymaga jakiegoś wielkiego zaangażowania. Do przygotowania prelekcji wykorzystałem informacje dostępne w polskiej i angielskiej Wikipedii. Linux w urzędzie Krzysztof Witański Według powszechnej opinii Linux, choć bezpłatny, jest systemem trudnym w użyciu i niechętnie używanym w poważnych zastosowaniach w firmach i urzędach. Na przykładzie projektu SEKAP chciałbym pokazać, że pogląd ten jest całkowicie błędny. Ogólne przedstawienie projektu W SEKAPie, czyli Systemie Elektronicznej Komunikacji Administracji Publicznej uczestniczą 54 urzędy Województwa Śląskiego i centrala wraz z platformą e-usług. Celem projektu jest przesyłanie dokumentów do i z urzędu w postaci elektronicznej poprzez specjalny serwis internetowy, zwany e-urzędem. Centrala połączona jest z urzędami poprzez kanały VPN utworzone przy pomocy routerów Cisco. W urzędach znajdują się serwery obiegu dokumentów (SOD) i serwery pomocnicze – służące do komunikacji. Strona główna platformy publicznych e-usług zawiera skrzynki kontaktowe petentów, wzory formularzy i pisma. Skrzynka kontaktowa jest odpowiednikiem okienka w urzędzie, gdzie możemy złożyć 28 Krzysztof Witański pismo, uzyskać potwierdzenie złożenia oraz odebrać odpowiedź urzędu. Platforma umożliwia przesyłanie pomiędzy obywatelem a urzędem informacji, wprowadzanych za pomocą elektronicznego formularza, w postaci uporządkowanych danych. System powstał w oparciu o zamówienie publiczne, gdzie określone zostają tylko istotne warunki zlecenia (SIWZ), nie jest natomiast sprecyzowany system operacyjny, ani rodzaj użytej technologii. Wybrano rozwiązanie, w którym podstawowym systemem operacyjnym jest Linux. Wybór nie był podyktowany ceną, bo tę ustalono wcześniej, a jedynie jakością rozwiązania. Aplikacje w urzędzie (SOD) i platforma w centrali są programami przeglądarkowymi. Projekt zrealizowano w krótkim czasie – od momentu podpisania umowy do oficjalnego otwarcia minął zaledwie rok. Wykonawca przedstawił szczegóły projektu, z uwzględnieniem systemów operacyjnych i rozwiązań technicznych. Sprzęt W urzędach zainstalowany jest główny serwer obiegu dokumentów (SOD) oraz komputer komunikacyjny. Obydwa pracują pod Linuksem. Firma wykonująca projekt użyła jako głównego systemu operacyjny Linuxa Fedora Core. Serwery firmowe z dyskami SCSI wyposażono w streamer – najczęściej LTO2 lub LTO3. Sprzęt ten jest najlepszym serwerem w niektórych, zwłaszcza mniejszych urzędach. Komputer komunikacyjny (KK) ma słabsze parametry, pełni bowiem jedynie rolę pomocniczą. Dzięki rozdzieleniu ról serwerów SOD i KK, do platformy można podłączać inne systemy obiegu dokumentów – tak stało się w pięciu większych urzędach, które posiadają własny obieg dokumentów, m.in. w Rybniku. Oprogramowanie Jako serwer WWW zaimplementowano Jboss, środowiskiem bazodanowym jest PostgreSQL. Bazy wykorzystuje się do gromadzenia rów- Linux w urzędzie 29 nież danych binarnych w postaci blobów. Najczęściej są to zeskanowane obrazy, co powoduje, że zbiory mają spore rozmiary, czasami po kilkanaście GB. Sam SOD posiada rozbudowaną strukturę, składającą się z 300 tabel. Z taką ilością danych Postgres radzi sobie znakomicie. KK transportuje dane, czyli pełni rolę bufora pomiędzy platformą e-usług centrali a lokalnym SOD. Zawiera oprogramowanie takie samo jak SOD – Jboss i bazę PostgreSQL. Komunikację oparto na technologii webservices, dane transportowane są w postaci struktury XML. Sprzęt i oprogramowanie w centrali Celem centrali jest utrzymanie głównego serwera WWW z platformą e-usług na wysokim poziomie dostępności. Z tego powodu występują tu elementy redundantne, a sprzęt jest z „górnej półki”. Zastosowano np. serwery rackowe zawierające dyski SCSI typu SAS, czy procesory Xeon 2 lub 4 rdzeniowe. Na nich jest zainstalowany 64-bitowy Linux. Co ważne, mimo zaawansowania sprzętu instalacja Linuksa odbyła się bezproblemowo, poszczególne składniki zostały poprawnie wykryte. W tej chwili centrala posiada w sumie 15 takich serwerów, z czego 10 działa na Fedora Core a 5 na Red Hat Enterpice Server 5. Linux obsługuje zaawansowane rozwiązania techniczne. Ze względu na zapewnienie wysokiej niezawodności systemu, zostały uruchomione klastry. Najbardziej zaawansowany to Red Hat Cluster, a na nim usługa bazodanowa PostgreSQL. Jest to klaster niezawodnościowy: usługa bazy danych działa tylko na jednym serwerze i może być przełączona na drugi. Obydwa serwery mają zamontowany wspólny zasób dyskowy na macierzy. Jest to zewnętrzna macierz HP, do której podłączenie jest poprzez redundantne złącze Fibre Channel. Na macierzy jest utworzony system plików GFS, mogący pracować z dwoma serwerami montującymi ten sam udział do zapisu. Usługa klastrowania wykorzystuje 30 Krzysztof Witański do zarządzania serwerami specjalny interfejs webowy iLO, dzięki któremu serwery mogą się nawzajem wyłączać lub włączać. Przeciwdziała on m.in. uruchamianiu usługi PostgreSQL na dwóch serwerach jednocześnie. Oprócz zaawansowanego klastra, istnieje również wydajnościowy, oparty na Jboss. Aby spełnić wymogi niezawodnościowe, switche są zdublowane, a serwery mają do nich podwójne połączenie. Linux obsługuje taką konfigurację za pomocą boundingu – tworząc z dwóch interfejsów sieciowych (eth0, eth1) jeden wirtualny – bound0, realizujący całość komunikacji. Uszkodzenie jednej drogi powoduje automatyczne przekierowanie ruchu do zapasowego kanału. Klastrowanie, bounding i inne usługi towarzyszące zapewniają wysoką odporność na awarie. Backup Poprzez karty Fibre Channel serwery połączone są z macierzą i biblioteką taśmową. Udział zadeklarowany na macierzy widziany jest jako dysk SCSI. Ze względu na szybki interfejs i wiele dysków pracujących równolegle, macierz ma wysoką wydajność. Rozwiązanie to niestety kosztuje: płacimy za dedykowane dyski ze złączem FC, switche, licencje. Biblioteka taśmowa widziana jest natomiast jako napęd taśmowy, usługę kopii zapasowych wywołuje zdalnie serwer backupu. Kryptografia Zastosowano kartę HSM (włączoną na stałe, poprzez złącze PCI), przechowującą klucz prywatny. Po podaniu kodu PIN, cyfrowo podpisywany jest podany skrót SHA1. Sprzęt posiada zaawansowane funkcje ochrony klucza prywatnego – wyjęcie karty powoduje skasowanie kluczy prywatnych. Ze względu na specyfikę i cenę, układ jest rzadko używany. Linux w urzędzie 31 Producent dostarcza sterowniki pod Linuksa dedykowane dla konkretnej wersji kernela. HSM jest zainstalowany w każdym KK i służy do podpisywania danych. Tworzy urzędowe poświadczenie odbioru (UPO), potwierdzające wysłanie danych do urzędu. Jest to rodzaj elektronicznej pieczątki na składanym piśmie, potwierdzającej wpływ dokumentu do urzędu. Obowiązek przyjmowania i potwierdzania pism drogą elektroniczną, został nałożony na urzędy od 1.05.2008 i zostało określone jak ma być tworzone UPO. Musi się to odbywać za pośrednictwem sprzętowego modułu (HSM) spełniającego normę FIPS 140-2 level 3. Układ może pracować w podstawowym trybie, a potem należy przejść na tryb FIPS, w którym aktywne są odpowiednie zabezpieczenia. Uwagi, problemy. Serwer JBoss wymaga dużo pamięci RAM. Program wykorzystuje tylko jeden rdzeń procesora. Serwer baz danych PostgreSQL dzięki wieloprocesowości, potrafi wykorzystać więcej niż jeden rdzeń procesora. SEKAP udowadnia, że zaawansowany projekt, bazujący na Linuksie i Open Source można technologicznie wdrożyć do produkcji w krótkim czasie zaledwie jednego roku. Największy problem stanowi prawo, jego interpretacja oraz niedostosowanie do dokumentów elektronicznych. W ramach projektu odbyło się wiele szkoleń dla administratorów z urzędów, dla części z nich było to pierwsze spotkanie z Linuksem. Integracja Linuksowej społeczności w Internecie Borys ‘michuk’ Musielak Daniel Koć Opowieść o „uspołecznianiu” LinuxNews, integracji z wortalem jakilinux.org, powstaniu OSnews.pl i planach na przyszłość, a także o tym jak i dzięki komu to wszystko się nadal kręci. W skrócie: Grupa Jakilinux „od kuchni”. Historia LinuxNews 1999 – 2007 Serwis LinuxNews powstał w 1999 roku. Początkowo znajdował się pod innym adresem (linux.news.pl), po drodze zdążył także zmienić serwer, a silnik i cały wystrój zmieniały się dobrych kilka razy. W końcu to nic dziwnego, jeśli istnieje się aż tak długo. Najstarsza zachowana nowinka to napisany przez gwida – inicjatora i przez długi czas spiritus movens serwisu – krótki donos o najświeższej wersji jądra – 2.2.11. . . Wróble ćwierkają, że wszystko zaczęło się od strony z poradami, jak uruchomić pod Linuksem kartę telewizyjną, oraz silnika, który wcale nie miał napędzać strony z nowinkami, tylko bazę programów. Jak opowiada negativ, jeden z ojców założycieli serwisu: Gwido kupił kartę telewizyjną i namęczył się nad jej uruchomieniem tak, Integracja Linuksowej społeczności w Internecie 33 że zrobił stronę o video4linux z opisem i instrukcją instalacji dla potomnych. Okazało się to na tyle użyteczne, że Gwido postanowił pójść dalej w tym kierunku i uruchomić serwis poświęcony Linuksowi. Ja na grupie pl.comp.os.linux znalazłem jego post dotyczący poszukiwania współpracowników i zgłosiłem się. Chciałem zrobić tam dział będący skrzyżowaniem Wiki i FAQ z poradami. Napisałem do tego silnik (jeszcze w niepublicznej wersji testowej PHP4), a Gwido miał pisać silnik newsowy. Skończyło się na tym, że pomysł FAQ został przesunięty na później a skrypt, zastał dostosowany do roli prostego CMS. Pierwszy serwer nazywał się „poligon” i był udostępniony przez znajomego admina (slz). W miarę, jak wzrósł ruch, trzeba było ubijać ludziom sesje IRC, żeby mocy starczyło :) I tak to się zaczęło. Później przez rok LinuxNews działał jako część nieistniejącego już dziś portalu Ahoj!, który w tym czasie przejmował/brał pod opiekę różne serwisy branżowe, w celu uzyskania treści dla portalu. Ekipa LinuxNews została zatrudniona w Ahoj i miała rozwijać serwis „na pełen etat”. W praktyce wyszło nieco inaczej, negativ zajął się głównie technologią, Gwido dziennikarstwem, a LinuxNews pozostał nieco na uboczu, ale zachował dużą autonomię. Zdjęcia z tego okresu można dziś znaleźć w przepastnych archiwach Internetu – zarówno te jeszcze spod adresu linux.news.pl (http://⇒ ⇒ /web.archive.org/web/*/http://linux.news.pl), jak i te późniejsze (aż do dzisiaj), już z obecnego adresu (http://web.archive.org/⇒ ⇒ /web/*/linuxnews.pl). Gdy Ahoj się rozpadł, ekipa LinuxNews na szybko odpaliła serwis na nowym silniku, napisanym w dwa tygodnie, przy założeniu, że ma pójść na Dual Celeron, czyli serwerze jakim w tym czasie dysponowała „stara urtica”. Ruch był większy niż rok wcześniej, kiedy serwis był integrowany z Ahoj i było pewne, że stary silnik nie podoła. Na nowym silniku, z drobnymi przeróbkami, LinuxNews działał aż do 2007 roku. Niemal od samego początku towarzyszyło serwisowi polskie tłumaczenie komiksu UserFriendly, które prowadzili m. in. br i viper, a także dział Hardware, którym zajmował się xterm. Nie wymieniając 34 Borys ‘michuk’ Musielak, Daniel Koć całej „listy płac”, trzeba jeszcze koniecznie wspomnieć pkota (autor między innymi NewsReader, mod_xslt i systemu rejestracji, a kiedyś także razem z MajaKą stały tłumacz KernelTraffic PL), bassa (niezliczona ilość nowinek!), grega i trocheja (byłe Debian Weekly News PL), kbryda (autor lnMonitora) czy honeya (obecnie serwis 7thGuard, a kiedyś między innymi lnRadio). Jednym z najstarszych członków był paczor, który dosyć nietypowo najpierw zniknął z Teamu, potem znów się pojawił, by zniknąć zupełnie jakiś czas później. Oczywiście przez serwis i okolice przewijało się więcej osób, które z góry bardzo przepraszamy za pominięcie i oczywiście zapraszamy na forum lub do kontaktu z redakcją! Niestety ze względu na to, że ojcowie-założyciele LinuxNews zajmują się obecnie zupełnie innymi sprawami niż serwis (koszenie mamony, jeżdżenie na Karaiby, przechodzenie na ciemną stronę mocy, etc.), nie jesteśmy w stanie odtworzyć bardziej szczegółowo początków serwisu. Wiadomo jedynie, że mniej więcej od 2003 roku główną siłą napędzającą serwis był (i nadal jest!) niejaki Daniel Koć, znany również jako kocio. Historia jakilinux.org 2005 – 2007 Wortal jakilinux.org miał znacznie mniej profesjonalne korzenie. Wyłonił się praktycznie ze strony domowej michuka, w styczniu 2005 roku. Pierwsza wersja podpięta była pod darmową domenę jakilinux.prv.pl, a na stronie zobaczyć można było jedynie krótki opis kilku dystrybucji Linuksa oraz quiz pomagający w wyborze dystrybucji. Rozbudowa treści statycznej wortalu (narzędzie do interaktywnego porównywania dystrybucji, działy: Instalacja, Pierwsze kroki, czy Programy) nastąpiła na przełomie 2005 i 2006 roku. Nieco wcześniej zaczęły pojawiać się na stronie autorskie artykuły (głównie recenzje nowych wersji dystrybucji Linuksa), autorstwa michuka. W połowie 2005 roku wortal odwiedzało około 500 osób dziennie. Integracja Linuksowej społeczności w Internecie 35 Wtedy też pojawiły się pierwsze przejawy zaangażowania społeczności w rozwój wortalu, pod postacią kilku autorskich artykułów opublikowanych przez seamana czy puszczyka. Pojawił się też pierwszy korektor artykułów: pazkooda. A Bober, po wielu miesiącach namawiania, wymyślił dla wortalu logo i design, w wersji zbliżonej do tego co widzimy dziś. Serwis, stojący do tej pory na zestawie autorskich skryptów michuka, przeniesiony został na Wordpressa, w celu łatwiejszego zarządzania treścią. W migracji bardzo pomogło kilka osób, w tym estral. To był październik 2005. W następnym roku wortal stopniowo się rozrastał. Oprócz artykułów na różne tematy związane z Linuksem (głównie dla początkujących), pojawiać się zaczęły nowinki, głównie te na temat nowych wydań popularnych dystrybucji czy ważnych programów. Coraz większe było też zaangażowanie społeczności. Do zespołu jakilinux.org dołączył Tomek Zieliński (t_ziel), który całkowicie przepisał wszystkie opisy dystrybucji, dodał opisy systemów BSD oraz zaktualizował dane w tabeli porównawczej. To był kluczowy moment dla działalności wortalu, ponieważ jako jednoosobowy projekt nie byłby on w stanie bardziej się rozwijać. W 2006 roku powstało też forum jakilinux.org – miejsce do dyskusji na tematy poruszane na łamach wortalu. Rok później Piotr Maliński (riklaunim), przeniósł forum z phpBB na znacznie bardziej elastyczny punBB oraz zintegrował je z Wordpressem poprzez autorski plugin. Również w 2006 roku michuk w wakacje przetłumaczył całą treść statyczną wortalu jakilinux.org na angielski i postawił nowy serwis: PolishLinux.org (od ”Polish your GNU/Linux”), mający być anglojęzycznym odpowiednikiem jakiegolinuksa. W połowie 2006 roku jakilinux.org odwiedzało dziennie ok 40 tysięcy osób (140 tysięcy odsłon). Po półtora roku wzrostu, liczba ta ustatkowała się. Społeczność domagała się jednak zmian. W jednej z ankiet okazało się, że czytelnicy oczekują jeszcze większej ilości artykułów i nowinek na stronie. 36 Borys ‘michuk’ Musielak, Daniel Koć Jako że pisanie nowinek jest zajęciem czasochłonnym, pojawił się pomysł, aby robotę tę oddać społeczności. W ciągu miesiąca michuk napisał więc plugin do Wordpressa wp-digg, umożliwiający szybkie dodawanie niusów przez zalogowanych użytkowników oraz głosowanie na niusy, co miało weryfikować, czy nius nadaje się do publikacji. Tak powstał podserwis jakilinux news podzielony na wykopalisko (tak, to jawna kalka z serwisu wykop.pl, który z tego miejsca pozdrawiamy :P) z dopiero co dodanymi niusami, oraz część główną, zawierającą niusy, które przeszły społecznościową moderację (otrzymały wystarczającą liczbę głosów na plus). Podserwis jakilinux-news dał niesamowitego kopa wortalowi. Nagle, nie wiadomo skąd, pojawiły się nowe osoby chcące pisać dla wortalu nie tylko niusy, ale też artykuły. Po kilku miesiącach istnienia podserwisu, dziennie pojawiało się od kilku do kilkunastu niusów dodawanych przez społeczność. W lipcu 2007 roku wortal odwiedzało już 200 tysięcy osób dziennie, generując około 600 tysięcy odsłon. Zmiany, zmiany. . . W tym samym czasie, LinuxNews przeżywał największy kryzys w historii. Oprócz kocia, nie publikował w serwisie właściwie nikt, przez co serwis przekształcił się niejako w branżowego bloga Daniela. Bardzo dobrego bloga zresztą, ale jednak tylko bloga. Jednocześnie na jakilinux-news społeczność zaczęła narzekać na to, że wprawdzie niusów jest sporo, ale rozbudowanych, ciekawych nowinek pojawia się jak na lekarstwo – większość treści to dwuzdaniowe wpisy, z linkiem do źródła. Wtedy też ni stąd ni zowąd kocio zagadał do michuka na Jabberze, proponując spotkanie w sprawie możliwości współpracy obu serwisów. Kilka tygodni później do spotkania rzeczywiście doszło i okazało się ono nadzwyczaj owocne. Podczas rozmowy w kafejce gdzieś niedaleko metra Racławicka, wypłynęły takie oto wnioski: Integracja Linuksowej społeczności w Internecie 37 Cel: więcej dobrych niusów, integracja społeczności, eliminacja redundancji (niusy na ten sam temat na obu serwisach) Metoda: migracja z autorskiego CMS-a LinuxNews na Wordpressa, zasilającego jakilinux.org, integracja kont użytkowników, niusów i komentarzy. Serwisy pozostają oddzielne. Okres przejściowy: niusy na obu serwisach, do czasu aż czytelnicy przyzwyczają się do zmian. Koniec okresu przejściowego: pół roku od integracji. Nie obyło się oczywiście bez problemów. Stary layout LinuxNews nie pasował do nowego, bardziej społecznościowo nastawionego serwisu. Powstało więc kilka alternatywnych nowych skórek do Wordpressa, w tym domyślna, imitująca wygląd starego LN, autorstwa Marcina Dąbrowskiego (mwd). Sklecany na szybko kod integrujący oba serwisy, wywalał się kilka razy spektakularnie, również już po skończeniu testów beta i oficjalnej premierze ”LinuxNews 2.0”. Pierwsze reakcje społeczności były bardzo mieszane. Stara gwardia LinuxNews odtrąbiła „koniec serwisu” (http://hedera.linuxnews.pl/⇒ ⇒ /_news/2007/06/18/_long/4513.html). Nie podobało się prawie wszystko – od poziomu niusów, przez silnik, aż po layout. Na jakilinux.org reakcje były bardziej pozytywne, ale i tu długo jeszcze społeczność domagała się, by niusy pozostały „tam gdzie zawsze”, czyli w podserwisie niusowym jakilinux.org. Gdy jednak zamiast kilku niusów na tydzień, zaczęło się ich pojawiać kilka dziennie, dzięki partycypacji wielu autorów, wszyscy szybko przeszli ze zmianami do porządku dziennego. Prawdziwa integracja społeczności nastąpiła jakieś pół roku po fizycznej integracji serwisów. Wtedy też, w styczniu 2008 roku, ostatecznie znikły niusy z serwisu jakilinux.org i znajdują się tam gdzie ich miejsce, czyli na LinuxNews. 38 Borys ‘michuk’ Musielak, Daniel Koć Fora głównych środowisk graficznych W tym samym czasie jak grzyby po deszczu powstawały nowe fora internetowe, mające skupiać społeczność związaną z głównymi środowiskami graficznymi dla Linuksa: KDE, GNOME i XFCE. 21 czerwca 2007 roku michuk opublikował apel (http://blog.jakilinux.org/⇒ ⇒ /wortal/forum-gnome-kde-xfce/), nawołujący do połączenia tych wysiłków i zbudowania wspólnego forum społeczności pod adresem forum.jakilinux.org. Oto fragment: Zupełnie nie widzę sensu tych niezależnych bytów, z oddzielnymi loginami, położonych na kiepskich serwerach, nie będących w stanie utrzymać większego ruchu (który chyba każde z forów planuje?). Moja propozycja jest taka: zróbmy wspólne forum, ze wspólnym loginem, zintegrowane z forum jakilinux.org a także z serwisami takimi jak Jakilinux, LinuxNews i WolnaKultura. Z naszej strony mogę zapewnić sensowny hosting i konfigurację forum (zapewne punBB). Wszyscy obecni administratorzy i moderatorzy zachowaliby swoje funkcje. Dane można przemigrować (nie jest to trudne, jest migrator z phpBB do punBB). Wszyscy na tym zyskają, bo na większym forum łatwiej uzyskać pomoc. A baza użytkowników JL i LN jest spora. Przeciwwskazań nie widzę. Pierwsi na wezwanie odpowiedzieli założyciele forum XFCE: Zarov, Partition i Marc Rousé (patrz: http://blog.jakilinux.org/forum/⇒ ⇒ /forum-xfce-powraca/). Forum zostało przeniesione pod adres xfce.jakilinux.org i zintegrowane graficznie z resztą serwisu. Bardzo w tym pomogło zastosowanie otwartego systemu forum punBB, które pięknie integruje się z innymi serwisami, dzięki dobremu oddzieleniu struktury treści (HTML) od wyglądu (CSS). Kilka dni później pojawiło się oficjalne forum KDE (http://⇒ ⇒ /blog.jakilinux.org/wortal/nowe-oficjalne-forum-kde/) zarządzane przez zespół KDE.org.pl. Dostępne jest ono pod adresami forum.kde.org.pl oraz kde.jakilinux.org. Integracja Linuksowej społeczności w Internecie 39 Ostatni, 6 kwietnia 2008 r., dali się przekonać szefowie forum GNOME: barteks i mikrobart (http://blog.jakilinux.org/forum/⇒ ⇒ /forum-gnome-na-jakilinuxorg/). Dzięki wtyczce do Wordpressa autorstwa Riklaunima (jl-punbb) udało się zintegrować dodatkowe fora również na poziomie bazy użytkowników, dzięki czemu wystarczy jeden login i hasło, aby korzystać z wortalu jakilinux.org, serwisu LinuxNews, forum jakilinux.org, czy for XFCE, KDE i GNOME. OSnews.pl Tak. . . mamy pięknie zintegrowany portal linuksowy, z poradami i artykułami (jakilinux.org), nowinkami (LinuxNews.pl) i społecznością (forum.jakilinux.org wiki.jakilinux.org). I wszystko byłoby super, tylko co to ma wspólnego z Linuksem? Komentarze tego typu zaczęły pojawiać się coraz częściej, właściwie przy każdym artykule, który choć trochę zahaczał o sprawy niekoniecznie związane z kernelem czy X.org. Ciężko było z tym walczyć. Serwis społecznościowy to czytelnicy dodający niusy i głosujący na nie – i to oni decydują, co ma pojawić się na stronie głównej, a co nie. Coraz częściej pojawiały się więc niusy związane z IT, ale niekoniecznie bezpośrednio z FLOSS. Głosy dezaprobaty starych czytelników można było albo zignorować albo. . . spróbować jakoś pogodzić te dwie grupy. Powstał więc pomysł stworzenia serwisu, który będzie swoją tematyką wychodził poza FLOSS i obejmował również zagadnienia ogólnoinformatyczne. Michuk usiadł przed konsolą z kilkoma okienkami edytora Vi, bers przed GIMPem, a Adam Mrówczyński przed Inkscape-em, by tylko kilka tygodni później, po okresie prywatnych testów, premierę miał nowy serwis: OSnews.pl. Co oznacza OS w OSnews, tego nie wie nikt. Nie jest to na pewno Open Source – serwis wykracza znacznie dalej. Przez długi czas michuk upierał się, że chodzi o Operating Systems. Skąd jednak w takim razie niusy o piractwie, hardware czy związane z biznesem IT? Pogodził wszystkich Thar, który rozszyfrował OSnews jako ”Obywatelski Serwis Niusów”. I to chyba najlepsze rozwinięcie. 40 Borys ‘michuk’ Musielak, Daniel Koć Tak czy inaczej, pod koniec października 2007 ruszył nowy serwis, który znów nieco zmodyfikował strukturę rozrastającej się Grupy Jakilinux. LinuxNews.pl stał się nagle z niezależnego serwisu po prostu filtrem na OSnews, usuwającym wszystko co nie związane z Linuksem bądź Open Source. Na OSnews pojawiały się natomiast niusy w takich kategoriach jak Apple, Biznes, Hardware, Internet, UNIX, Media, Microsoft, Open Source, Programowanie, Software czy po prostu Wydarzenia. Okazało się, że fani FLOSS chcą czytać również niusy na inne, ogólniejsze tematy. Dowodem tego jest bardzo szybki wzrost popularności nowego serwisu. Już w kilka miesięcy po premierze, jego odwiedzalność zrównała się z odwiedzalnością LinuxNews. Po niecałym roku jest już dwa razy większa. Grupa Jakilinux obecnie W sierpniu 2008 Grupa Jakilinux, łącznie z anglojęzycznym serwisem PolishLinux.org, to ponad 1.5 miliona odsłon miesięcznie i pół miliona unikalnych odwiedzin. Dziennie pojawia się kilkanaście nowinek i prawie 300 komentarzy użytkowników. Co tydzień opublikowane są 3 – 4 dłuższe artykuły, a do tego dochodzi ciągła opieka nad stałą treścią stron. Aby zarządzać rozrastającą się w tak szybkim tempie grupą serwisów, należało dobrze zorganizować pracę, podzielić ją na zespoły i określić, kto za co odpowiada. I choć większość treści tworzy samozwańczo społeczność, to ich korektą zajmuje się administracja. Do niej należy także skład artykułów i ich publikacja, rozwój funkcjonalności, wyznaczanie i sugerowanie społeczności ogólnych wizji czy konkretnych zadań. Bardzo pomocnym narzędziem, ułatwiającym społeczności wkład, okazało się wiki grupy: wiki.jakilinux.org. Na nim właśnie powstają szkice artykułów, tam tłumaczone są wspólnie ciekawe teksty z zagranicznych serwisów. Tam powstaje też stała treść, korygowane są opisy dystrybucji z jakilinux.org, czy opublikowane już artykuły. Tam też powstało i rozkwitło kilka akcji przeprowadzonych przez wortal, jak Integracja Linuksowej społeczności w Internecie 41 słynny List Otwarty w sprawie stosowania GNU/Linuksa i Oprogramowania Open-Source w Administracji Publicznej, pod patronatem wortalu jakilinux.org (opublikowany na stronie akcja.jaklinux.org), czy rozkręcenie akcji Linux dla Szkół (obecnie WiOO w Szkole), prowadzone przez Fundację Wolnego i Otwartego Oprogramowania, ze stroną wiki na wiki.jakilinux.org/edukacja. Innym ważnym narzędziem wspomagającym pracę nad serwisami Grupy jest Jira – system do zarządzania zadaniami. To tam składujemy i grupujemy zadania, jakie należy wykonać, śledzimy ich aktualny status i komentujemy. Prace w jirze podzielone są na kilka grup. Pierwsza to rzeczy związane z dodaniem nowej funkcjonalności do któregoś z serwisów (a więc przede wszystkim programowanie), druga to różnego rodzaju korekty w treści serwisów, trzecia zaś to praca nad nowymi artykułami: korekta, skład w XHTML (odpowiedni format + obrazki), zatwierdzenie i publikacja. Jira projektu znajduje się pod adresem: jira.jakilinux.org:8080 Inne ważne miejsca to forum (forum.jakilinux.org) oraz kanał IRC (#jakilinux na irc.freenode.net), gdzie zbiera się społeczność by dyskutować na tematy związane z serwisami Grupy, a także wszelkie inne, zupełnie z nimi nie związane. Kto tworzy Grupę Jakilinux? Trudno wymienić wszystkich. Postaramy się przynajmniej nie pominąć najważniejszych: t_ziel: tworzenie i aktualizacja stałej treści wortalu jakilinux.org Thar, Marta Siostrzonek-Bania: korekta artykułów quest-88, Moarc, Zajec, jellonek, KOmandos: bieżąca korekta tekstów nowinek adz: artykuły, pomoc w tworzeniu serwisu, programowanie seaman: niusy, artykuły Keyto: autor przydługawych, acz niezmiernie ekscytujących artykułów 42 Borys ‘michuk’ Musielak, Daniel Koć lamprez: pomysłodawca Tygodnika KDE, niusy, mnóstwo niusów, obecnie zapracowany oZz: skład artykułów w XHTML, moderacja forum Zarov: moderacja forum jakilinux.org oraz XFCE pbm i joker: forum KDE mikrobart i barteks: forum GNOME Bob_R: główny grafik i webmaster jakilinux.org bers: projekt i wdrożenie designu OSnews.pl mwd: projekt i wdrożenie designu LinuxNews.pl Paweł Łupkowski: artykuły, pomoc w tworzeniu serwisu (elementy graficzne) I w końcu: markgo: programowanie wtyczek Wordpressa, zarządzenia serwisem WolnaKultura.info kocio: wiadomo michuk: cała reszta. Nie należy też zapominać o osobach, które miały spory wkład w tworzenie serwisu, a obecnie są już „na emeryturze”: Riklaunim: artykuły, obsługa forum, programowanie Adam Mrówczyński: logo OSnews.pl, elementy graficzne Student, baxxx, pazkooda: korektorzy artykułów Balcerowicz: artykuły i moderacja forum Integracja Linuksowej społeczności w Internecie 43 oraz cała stara ekipa LinuxNews, o której pisaliśmy wcześniej, w części historycznej. Oprócz wszystkich tych osób, tworzących jakby rdzeń Grupy, codziennie pojawiają się nowi niusmeni, dodający nowinki w serwisach LinuxNews i OSnews.pl. Wymienić ich wszystkich zupełnie się nie da, ale właśnie dzięki nim cała ta społecznościowa karuzela kręci się nadal i nie wygląda, by miała się rychło zatrzymać. Plany na przyszłość Głównym celem, który nam przyświeca, jest oczywiście opanowanie świata. Nie kryjemy się z tym, zmierzamy do celu powoli, acz stanowczo. Jeśli chodzi o krótkoterminowe cele, to najważniejszym wydaje nam się rozkręcenie serwisu WolnaKultura.info, który ma być uzupełnieniem Grupy o tematykę kulturalną. Celem tego projektu ma być promocja wolności w zinformatyzowanym świecie. Rola portalu będzie zarówno informacyjna (czym są wolne licencje przystosowane do dzieł kultury, jak GFDL czy Creative Commons, dlaczego warto z nich korzystać), promocyjna (promowanie artystów wydających swoje dzieła na wolnych licencjach, pokazanie, że wolna sztuka nie musi być gorsza od tej mainstreamowej), a także przeciwstawienie się lobbingowi takich organizacji jak ZAiKS, BSA, czy Koalicja Antypiracka, które, zachęcane przez koncerny muzyczne i filmowe, próbują wmówić społeczeństwu, że dzielenie się jest moralnie równoważne napadaniu na statki (jak rzekł kiedyś RMS). Co z tego wyjdzie – zależy również od Was. Wszystkich chętnych do zaangażowania się w projekt zachęcam do kontaktu z nami przez adres [email protected]. Nie zamierzamy oczywiście zaniedbywać pozostałych serwisów Grupy. Najwięcej zmian spodziewać się można w serwisie OSnews.pl, który jest najmłodszy i najbardziej przebojowy. Nie zdążył się jeszcze samozdefiniować, co oznacza, że jest podatny na zmiany w większym stopniu, niż pozostałe serwisy. 44 Borys ‘michuk’ Musielak, Daniel Koć Konkluzja płynąca z tego chaotycznego referatu nasuwa się taka: nie potrzeba ani specjalnych nakładów finansowych, ani jakiegoś ogromnego poświęcenia, by wspólnymi siłami stworzyć coś fajnego, co pięknie się rozwija i nastawione jest na bycie użytecznym, niekoniecznie zyskownym przedsięwzięciem. Systemy wbudowane Adam Mańczuk Począwszy od pierwszych komputerów, takich jak np. ENIAC tudzież innych „domowych” (czyli o rozmiarach sporego domu), przyzwyczailiśmy się rozumieć komputer jako samodzielną maszynę, której zadaniem jest wykonywanie programów i prezentacja wyników. Wraz ze wzrostem liczby programów i zadań, komputery stają się coraz mniejsze. W pogoni za najbardziej wymyślnymi fanaberiami swoich użytkowników, coraz bardziej się komplikują, zarówno od strony sprzętu jak i oprogramowania. Mnogość interfejsów użytkownika i parametrów technicznych powoduje, iż najliczniej otaczające nas maszyny cyfrowe, wykonują od wielu lat swoją czarną robotę, całkowicie niezauważone. Systemy wbudowane to specjalizowane komputery, będące nieodłączną częścią innych urządzeń. Pierwsze pojawiły się w czasie drugiej wojny światowej. Były to kalkulatory torpedowe, systemy kierowania ogniem, czy automatyczny pilot. Podczas misji Apollo, lądownikiem księżycowym kierował komputer wbudowany, pracujący pod kontrolą jednego z pierwszych systemów czasu rzeczywistego. Statkami kosmicznymi programu MIR kierowały jedne z pierwszych 46 Adam Mańczuk komputerów, wyposażonych w nieulotną pamięć EEPROM, produkowane potem na rynek cywilny jako kalkulator ELEKTRONIKA MK-52. Zejdźmy jednak z gwiazd z powrotem na biurko. Codziennie każdy z nas posługuje się komputerem zbudowanym na bazie układu Intel 8048, czyli klawiaturą komputerową. Drogi ewolucji Komputery to wysoce specjalizowane urządzenia. Ich specjalizacje bywają bardzo różne, a wszystko po to, by spełnić najwymyślniejsze zachcianki swojego właściciela. W drodze ewolucji realizują one coraz więcej zadań, przetwarzają coraz większe ilości danych, przesyłają je między sobą z coraz większą szybkością. Systemy wbudowane realizują stosunkowo proste zadania. Niewiele różnią się od wykwalifikowanego operatora, który ustawia regulator proporcjonalnie do wychylenia wskazówki, włączy coś, gdy zapali się lampka, a wyłączy, gdy zegar wybije północ. Zamiast mnogości funkcji, kluczowym parametrem systemu wbudowanego jest czas reakcji na zdarzenia i niezawodność. Jeśli domowy komputer będzie zbyt wolno reagował na nasze polecenia, zacinając się na ulubionej grze, skończy się to dla niego w najgorszym przypadku przeróbką na mebel. Każdy, komu się poskarżymy, zachęci nas do zakupu lepszego procesora czy kolejnego zwiększenia RAM-u. System wbudowany, kontrolujący impulsowy reaktor jądrowy, może się zawiesić lub spóźnić z reakcją tylko raz. Rychło przestanie istnieć zarówno on sam, jak i jego operatorzy, wraz z rodzinami i mieszkańcami najbliższego miasta. Cechą wyróżniającą systemy wbudowane jest niewątpliwie zupełnie inna strategia, dotycząca realizacji zadań z jak najmniejszym opóźnieniem czasowym. W przypadku typowych wielozadaniowych systemów komputerowych, opóźnienia czasowe niweluje się poprzez zmianę parametrów wydajnościowych. W systemach wbudowanych szybkość reakcji układu uzyskuje się dzięki daleko idącej specjalizacji. Systemy wbudowane tworzy się dziś najczęściej na bazie prostych Systemy wbudowane 47 układów logicznych PLC, czy też w oparciu o 8-bitowe układy typu Intel 8051. Mikrokontrolery Wraz z ideą pierwszych mikroprocesorów powstał pomysł, by oprócz jednostki centralnej, zintegrować w jednym układzie również inne elementy komputera, takie jak pamięć programu oraz operacyjną. Na zewnątrz wyprowadza się jedynie linie wejścia/wyjścia. Pierwszym produkowanym seryjnie jednoukładowym komputerem był Intel 8048, popularny do dziś z uwagi na to, że IBM wykorzystał go do konstrukcji klawiatury peceta. Użycie mikrokontrolera to obecnie najprostszy i najtańszy sposób tworzenia systemu wbudowanego. Układ ten zawiera wszystkie niezbędne elementy systemu komputerowego, czyli: pamięć programu, najczęściej nieulotną, typu FLASH (dawniej była to pamięć ROM lub EPROM) – od kilobajta do kilku megabajtów w układach z rdzeniem ARM, pamięć operacyjną RAM od kilku bajtów, układy wejścia – wyjścia, takie jak przetworniki analogowo – cyfrowe, układy transmisji szeregowej UART, a w najnowszych wydaniach sterowniki USB czy ethernet, jednostkę centralną – rdzeń mikrokontrolera, będący odpowiednikiem procesora w komputerach osobistych. Ładowanie programu Uniwersalne systemy komputerowe budowane są na bazie architektury von Neumanna, zgodnie z którą system komputerowy powinien mieć wspólną pamięć do przechowywania programu i danych. W odróżnieniu od nich, mikrokontrolery posiadają najczęściej pamięć programu oddzieloną od pamięci operacyjnej. Dzięki temu są one gotowe 48 Adam Mańczuk do działania natychmiast po podłączeniu zasilania. Większości układów wystarcza niewielka ilość RAM, która służy jedynie do przechowywania wartości zmiennych. Program zatem, skoro nie jest ładowany z żadnego zewnętrznego nośnika, musi być zapisany w układzie na stałe. Dawniej robiono to podczas produkcji albo za pomocą specjalnych programatorów (w identyczny sposób jak BIOS płyty głównej). Obecnie większość układów programuje się za pomocą interfejsu szeregowego ISP, z wykorzystaniem portów komputera – równoległego lub szeregowego. Innym popularnym interfejsem jest JTAG, który oprócz możliwości przeprogramowania układu, umożliwia również uruchomienie programu pod zewnętrznym debugerem, np. GDB. Systemy operacyjne W komputerach jednoukładowych system operacyjny to coś zupełnie innego, niż to co znamy z z ich odpowiedników biurkowych. Układy te wyposaża się w prosty program, który mieści się w 2 kilobajtach pamięci nieulotnej. Dopiero gdy w grę zaczyna wchodzić wielozadaniowość, niezbędne jest stworzenie tzw. systemu operacyjnego czasu rzeczywistego. Nie posiada on na przykład systemu plików – albo co najwyżej posiada go w formie szczątkowej. Jego rola sprowadza się do szeregowania zadań i zapewniania obsługi przerwań w ustalonych reżimach czasowych. System taki musi zagwarantować, że czas jego reakcji na awarię – na przykład systemu chłodzącego reaktor, umożliwi przeżycie kolejnego dnia kilku milionom ludzi. W odpowiedzi na sygnały zewnętrzne, ignoruje mniej ważnie zadania, takie jak np. obsługa panelu kontrolnego. Poświęca wówczas całość czasu procesora na wykonanie zadania o najwyższym priorytecie w danej chwili, czyli np. awaryjne wyłączenie reaktora. Nie sięgając do aż tak drastycznych przykładów, mogę powiedzieć, że w systemach wbudowanych dysków twardych, nad którymi obecnie pracuję, decyzja o awaryjnym zaparkowaniu głowic musi być podjęta i wykonana w ciągu niecałej milisekundy od wykrycia Systemy wbudowane 49 zaniku napięcia czy stanu bezwładności (kiedy np. dysk leci na podłogę). W przeciwnym wypadku, głowica może dotknąć rozpędzonej powierzchni dysku powodując jego natychmiastowe i całkowite uszkodzenie. Czas rzeczywisty w nazwie systemu operacyjnego oznacza zatem, że system taki może gwarantować określony czas reakcji na pewne sytuacje, wymagające natychmiastowej reakcji. Programowanie Do tworzenia oprogramowania dla systemów wbudowanych istnieje wiele środowisk programistycznych. Oprócz tych płatnych, oprogramowanie na większość popularnych mikrokontrolerów możemy kompilować i uruchamiać z pomocą dobrze nam znanych narzędzi GNU. Największe dystrybucje Linuksa zawierają oprogramowanie umożliwiające kompilację, uruchamianie, i ładowanie programów do takich kontrolerów jak AVR, 8051 czy ARM. Programy pisze się obecnie głównie w języku C. Sam proces tworzenia software’u, pomimo ograniczeń związanych z architekturą Harvard (czyli oddzielenia pamięci programu od pamięci operacyjnej), jest dość prosty, zaś w uruchamianiu pomagają nam emulatory i debuggery. Rodzaje mikrokontrolerów Wśród mikrokontrolerów panuje duża różnorodność architektur. Jako że są to urządzenia programowane do konkretnych zadań, zgodność na poziomie kodu binarnego nie jest tu największą zaletą. Dużo ważniejsza jest podobieństwo architektury wewnętrznej układów. Można wyróżnić kilka najpopularniejszych rodzin: MCS-51 Zapoczątkowana przez układy Intel 8051, a obecnie najpopularniejsza wśród konstruktorów, ze względu nie tyle na jej zalety, co dotychczasową popularność (przyzwyczajenie to przecież druga natura człowieka). Sam rdzeń jest zbliżony listą rozkazów 50 Adam Mańczuk do słynnego Intel 8080, typu CISC, a przeznaczony jest do programowania głównie w asemberze, choć coraz częściej wykorzystuje się w tym celu język C. PIC Produkowane przez Microchip Technology ośmio- i szesnastobitowe układy RISC. Charakteryzują się wyjątkowo prostą budową, małym poborem mocy i niską ceną. AVR Procesory typ RISC. Ich budowa logiczna i lista rozkazów były optymalizowane dla współczesnych kompilatorów. Mimo, że są produkowane przez jedną firmę, charakteryzują się niezwykłą różnorodnością, począwszy od najprostszych TinyAVR do najbardziej rozbudowanych MegaAVR. Są wyposażone w niezłe wewnętrzne interfejsy wejścia/wyjścia. Dzięki rosnącej popularności, nie ma problemów ze znalezieniem odpowiedniego oprogramowania pod systemy Linux. ARM Coraz popularniejsze 32-bitowe kontrolery, bazujące na rdzeniu ARM. Rdzeń został zaprojektowany przez firmę Acorn Computers, podczas prac nad wersją rozwojową architektury MOS 6502, znaną z takich komputerów jak Atari 65XE, Commodore C64 czy Apple II. Rodzina procesorów ARM stała się najpopularniejszą 32bitową architekturą dla urządzeń przenośnych. Najbardziej rozbudowane mikrokontrolery zbudowane na tym typie rdzenia, umożliwiają instalację specjalnych dystrybucji Linuksa. Dlaczego? Dobry programista powinien zaprojektować i zbudować chociaż jeden komputer w życiu. Zmagając się z konstrukcją sprzętu, łatwiej jest pojąć ideę wykonywania programów. Skonstruowanie komputera na bazie typowego mikroprocesora, jest niesłychanie żmudne, o czym miałem okazję przekonać się sam, tworząc komputer na bazie Z80. Systemy wbudowane 51 Z pomocą układu mikrokontrolera możemy stworzyć działający komputer za ok 40 zł w zaledwie pół godziny, z elementów dostępnych w każdym sklepie z elektroniką: mikrokontrolera, kwarcowego układu taktującego, dwóch rezystorów, jednego kondensatora, wyświetlacza, prostej klawiatury. Samo znalezienie schematu w sieci zajmie nam nie więcej niż pięć minut. Potem możemy się bawić w programowanie samodzielnie stworzonego komputera, sterować podłączonymi urządzeniami, np. włączając światło o zmierzchu, włączając rano ekspres do kawy i radio. W sieci znajdziemy całkiem sporo schematów, które umożliwią nam samodzielne wykonanie budzika, kalkulatora, odtwarzacza mp3, czy przenośnej nawigacji GPS. Wszystko to znajduje się w zasięgu naszej lutownicy. Rozwój systemów IT w Narodowym Archiwum Cyfrowym na przykładzie ZoSIA Rafał Magryś Jakub Lewandowski Na równi z nieuchronnością upływającego czasu, nieuchronna jest również konieczność wymiany i modernizacji systemów informatycznych. Technologia IT stwarza nowe możliwości w dziedzinie przetwarzania informacji, dając użytkownikowi dostęp do nieznanych dotąd narzędzi i zmieniając jego potrzeby. Zmiany technologiczne zaspokajały niegdyś wyłącznie potrzeby nauk ścisłych, w których naturalne jest używanie sprzętu wspomagającego obliczenia. Obecnie, dzięki upowszechnieniu się komputerów, powszechne staje się ich wykorzystywanie w instytucjach sektora ochrony dziedzictwa narodowego tj. archiwach, bibliotekach i muzeach. Dzięki rozwojowi internetu, instytucje te otrzymują potężne narzędzie do popularyzacji swoich zbiorów. Digitalizacja czy retrokonwersja danych umożliwia im udostępnienie swoich zasobów niezależnie od miejsca pobytu i strefy czasowej oglądającego. Działania te nie byłyby rzecz jasna możliwe bez przygotowania odpowiednich systemów informatycznych, umożliwiających digitalizację zbiorów. Tak jest w przypadku archiwów państwowych, które gromadzą materiały z historii Polski w całym okresie jej istnienia. Sieć archiwów Rozwój systemów IT w NAC na przykładzie ZoSIA 53 obejmuje swym zasięgiem cały kraj. Takie rozproszenie narzuca konieczność koordynacji działań oraz modernizacji struktury IT w skali ogólnopolskiej. Jest to jeden z celów, dla jakich powołano do życia Narodowe Archiwum Cyfrowe z siedzibą w Warszawie. Pierwszym z zadań postawionych przed NAC było stworzenie systemu, który poprawiłby zarządzanie oraz publikowanie archiwaliów i informacji o nich w skali ogólnopolskiej. Prace nad systemem rozpoczęto na początku bieżącego roku. Zaowocowały one stworzeniem Zintegrowanego Systemu Informacji Archiwalnej (ZoSIA). Obecnie jest on wdrażany testowo w archiwach w Kraśniku, Chełmie, Radzyniu Podlaskim oraz Poznaniu. System ZoSIA ma docelowo zastąpić przestarzałe oprogramowanie bazujące na Microsoft Access. Open Source i NAC Wybór padł na Wolne Oprogramowanie, co było w owym czasie w instytucjach publicznych ewenementem na skalę całego kraju. Decyzji nie podjęto bynajmniej pochopnie – nastąpiła ona po głębokiej analizie zalet i wad Open Source. Zdecydowanie pomogły tu europejskie i światowe trendy budowy oprogramowania. Twórcy NAC od samego początku byli przekonani, iż jest to słuszny wybór. Stworzenie ZoSIA przekonało również osoby zarządzające archiwami państwowymi. Pomyślne wdrożenie systemu może przynieść w najbliższych miesiącach zasadniczą zmianę w postrzeganiu FLOSS we wszystkich archiwach państwowych i instytucjach z nimi współpracujących. Zakładamy, iż wprowadzenie ZoSIA umożliwi migrację na Open Source w skali całego kraju – również w zakresie innego oprogramowania używanego w archiwach państwowych. NAC chce umożliwić korzystanie ze swoich systemów na zasadzie tzw. kont wirtualnych tj. oprócz dostępu do oprogramowania udostępnić możliwość bezpłatnego składowania i zabezpieczania danych dla instytucji kultury, przechowujących swoje archiwalia i chcących je udostępnić w formie elektronicznej. Umożliwi to znaczne ograniczenie kosztów na polu tworzenia kolekcji elektronicznych. Oszczędności 54 Rafał Magryś, Jakub Lewandowski mogą sięgać setek tysięcy złotych, które w innym wypadku byłyby wydane na zakup licencji na oprogramowanie do archiwów. Projekt ZoSIA: informacje podstawowe Głównym zadaniem systemu ZoSIA jest umożliwienie bezpiecznego operowania zasobami archiwalnymi. Podstawowe funkcjonalności pochodzą z aplikacji dotychczas stosowanych w polskich archiwach (między innymi programy SEZAM oraz IZA) i obejmują: wprowadzanie do systemu danych archiwalnych z uwzględnieniem ich hierarchicznej struktury, modyfikowanie i usuwanie wprowadzonych danych, generowanie raportów ułatwiających wykonywanie kwerend zleconych przez klientów archiwów, przeszukiwanie zgromadzonych zasobów. Implementując powyższe, zwrócono szczególną uwagę na poprawę bezpieczeństwa i wydajności, a także ulepszenie stosowanej metodyki. Dane są bardzo często wprowadzane do systemu przez studentów lub wolontariuszy, dlatego wymagają korekty redaktorskiej. Aby usprawnić i zautomatyzować proces ich weryfikacji, ZoSIA została wyposażona w wieloetapowy system kontroli treści, podobny do tych, używanych w serwisach informacyjnych (schemat edytor – redaktor – kierownik). Wyszukiwanie informacji jest kluczowym etapem pracy osób korzystających z danych archiwalnych. W dotychczas stosowanych systemach czas wykonywania prostych zapytań w wyszukiwarce wynosi często wiele minut lub... zawiesza komputer (przeszukiwanie odbywa się zwykle w lokalnej dla danego archiwum aplikacji). W systemie ZoSIA czas wyszukiwania został drastycznie zredukowany. Dodatkowo Rozwój systemów IT w NAC na przykładzie ZoSIA 55 polepszono jakość wyszukiwania (dodano odmianę słów, ranking wyników, podpowiedzi itp.) tak, aby zbliżyć sposób wyszukiwania do znanych wyszukiwarek internetowych. Projekt ZoSIA: stoimy na ramionach gigantów Sercem systemu jest baza danych, zawierająca dane ze wszystkich obsługiwanych instytucji (poprzednio każde archiwum miało zestaw lokalnych baz danych). Zarządzanie treścią zrealizowano na bazie interfejsu www. Główną zmianą, jaką wprowadza system ZoSIA, jest przejście z komercyjnych silników bazodanowych (takich jak MS Access, Sybase czy Oracle) na silnik PostgreSQL. Dzięki bazie PostgreSQL mogliśmy wprowadzić zaawansowane mechanizmy, takie jak partycjonowanie tabel oparte na dziedziczeniu, tworzenie drzewiastej struktury o nieograniczonej liczbie poziomów (w oparciu o moduł ltree) jak i wyszukiwania (moduł tsearch2). Aplikacja zarządzająca została w całości napisana w języku Python. Aby uprościć tworzenie systemu, wykorzystany został szkielet aplikacji o nazwie Pylons. Zwykle szkielety aplikacji www narzucają znaczne ograniczenia na sposób tworzenia aplikacji (co na ogół bywa zaletą). Pod tym względem Pylons wydaje się najbardziej „liberalny” i elastyczny (wg nas swoją elastycznością przewyższa np. Django). Jego podstawową wadą jest fakt, że Pylons jest wciąż w fazie tworzenia (w chwili obecnej wykorzystujemy wersję 0.9.2) i jego interfejs programisty bardzo często się zmienia. Preferowanym w Pylons sposobem komunikacji z bazą danych jest SQLAlchemy. Podobnie jak Pylons, SQLAlchemy wciąż powstaje i niestabilność jego interfejsu to jedna z przyczyn, dla której zrezygnowaliśmy z jego stosowania. Druga przyczyna jest o wiele poważniejsza: SQLAlchemy stara się obsługiwać większość popularnych silników bazodanowych, przez co udostępnia jedynie typowe cechy każdego z nich. Intensywne wykorzystanie partycjonowania tabel sprawiło, że 56 Rafał Magryś, Jakub Lewandowski zdecydowaliśmy się użyć „dobrego, starego DBAPI”, którym w przypadku Postgres’a jest moduł psycopg2. Jego wadą jest konieczność bezpośredniego stosowania języka SQL, co pogarsza przejrzystość kodu. Nie mniej, dzięki użyciu psycopg2, uniezależniliśmy się od niedojrzałego SQLAlchemy i (jak wierzymy) zmniejszyliśmy narzuty związane z użyciem ORM. ZoSIA – i co dalej? Działania NAC w dziedzinie rozwoju własnych systemów oraz wspierania Open Source w sektorze instytucji pamięci, nie będą ograniczone do budowy i wdrożenia systemu ZoSIA. Od września rozpoczynamy prace nad Systemem Digitalizacji Archiwalnej (SeDAn), który ma uprościć i przyspieszyć konwersję materiałów analogowych do postaci cyfrowej, a także umożliwić ich udostępnienie poprzez www. Działania NAC, w tym zwłaszcza naciski na producentów specjalistycznych skanerów do digitalizacji archiwaliów, owocują już dziś tym, iż producenci zaczęli tworzyć sterowniki dla tych urządzeń pod system Linux. Liczymy, że kolejne lata, dzięki działaniom firm wspierających Open Source – takim jak IBM, Novell, Google, czy ostatnio również NAC, staną się owocne i że spełni się wizja całkowitego przejścia instytucji publicznych na Open Source. Automatyczne wyszukiwanie komputerów i usług Piotr Strzyżewski 1 Wstęp Spoglądając wstecz możemy zauważyć, że „od zawsze” istniały metody lub protokoły umożliwiające pewną automatyzację konfiguracji sieci. Nie sposób tu nie wymienić historycznych Reverse Address Resolution Protocol (RARP), Bootstrap Protocol (BOOTP) oraz używanego do dziś Dynamic Host Configuration Protocol (DHCP; w tym w wersji DHCPv6). Wraz z rozwojem tych protokołów pojawiały się nowe możliwości konfiguracyjne, wykraczające poza zwykły przydział adresu IP oraz konfigurację podstawowych ustawień, takich jak maska sieci, brama czy serwery DNS. Protokoły te posiadały jednak pewną istotną z punktu widzenia pełnej automatyzacji wadę – wymagały uruchomienia przez administratora centralnego serwera, którego statyczna konfiguracja musiała być każdorazowo dostosowywana do zmian w strukturze sieci. Tego rodzaju wiedza lub zasoby mogły leżeć poza zasięgiem przeciętnego 58 Piotr Strzyżewski użytkownika sieci lokalnej, który oczekiwał nieskomplikowanego zestawu elementów składowych. Chodziło o to, by komputery, drukarki oraz urządzenia sieciowe połączone razem współpracowały ze sobą w tak prosty sposób, jak telewizor współpracuje z odtwarzaczem DVD. Z pomocą przychodzi tutaj zestaw protokołów określany jako Zeroconf lub Zero Configuration Networking. W jego skład wchodzą zarówno protokoły automatycznego przydzielania (a w zasadzie wybierania) adresów IP, propagacji nazw elementów składowych sieci oraz wyszukiwania usług przez nie udostępnianych. 2 Konfiguracja adresów IP Bez względu na to, w jaki sposób chcemy wykorzystywać stworzoną sieć komputerową, istotnym jest, by poszczególne jej węzły (bez względu na to czy są to komputery, drukarki, czy też inne urządzenia), potrafiły nawiązać wzajemną komunikację. Jednym z najczęściej wykorzystywanych protokołów do tego celu jest Internet Protocol w jednej z dwóch wersji – IPv4 lub IPv6. W zależności od wybranej wersji IP, możliwe jest zastosowanie konkretnego modelu automatycznego nadawania adresów IP w sieci lokalnej. Dla sieci opartej na IPv4 jest to IPv4LL opisany w dokumencie RFC 3927 1 . W przypadku IPv6 jest to IPv6 Stateless Address Autoconfiguration, opisany w dokumencie RFC 4862. 2.1 IPv4LL Mechanizm IPv4LL umożliwia wybranie adresu IPv4, którego użycie w sieci lokalnej umożliwi porozumiewanie się z innymi skonfigurowanymi w analogiczny sposób węzłami tej sieci. W momencie konfiguracji swojego interfejsu sieciowego, węzeł sieci wybiera (korzystając z generatora liczb pseudolosowych) adres 1 Należy zauważyć, że firma Microsoft dla tej samej metody wybierania adresu używa nazwy APIPA (Automatic Private IP Addressing) Automatyczne wyszukiwanie komputerów i usług 59 ze specjalnie zarezerwowanej do tego celu przez IANA (Internet Assigned Numbers Authority) klasy 169.254.0.0/16. W jej obrębie zostały wskazane dwa zakresy (169.254.0.0/24 oraz 169.254.255.0/24) przeznaczone do przyszłych zastosowań i tym samym wyłączone z obecnego użytkowania. W rezultacie możliwe jest więc wybranie adresu z zakresu od 169.254.1.0 do 169.254.254.255 z maską /16. Prawdopodobieństwo wybrania nieużywanego adresu w niewielkiej sieci jest bardzo duże, jednak wciąż istnieje potencjalna możliwość konfliktu. Aby do tego nie dopuścić, już na etapie wyboru adresu konieczne jest przeprowadzenie sprawdzenia jego unikalności. W sieciach ethernet takiej weryfikacji dokonuje się za pośrednictwem protokołu ARP. Gdy nastąpi potwierdzenie używania wybranego adresu, należy ponownie przeprowadzić całą procedurę wyboru, wraz ze sprawdzeniem jego unikalności. W przeciwnym przypadku następuje rozgłoszenie wybranego adresu (również z wykorzystaniem ARP), tak by wyeliminować ewentualne związane z nim nieaktualne wpisy w tablicach arp-cache pozostałych węzłów sieci. Należy zauważyć, że mechanizm wyboru posiada pewne zabezpieczenia przeciw „zalaniu” sieci lokalnej pakietami ARP, tak by np. w przypadku podłączenia do niej komputera odpowiadającego na każde zapytanie ARP nie wprowadzić pozostałych węzłów w nieskończoną pętlę, mającą na celu wybór wolnego adresu IP. Rozwiązywanie konfliktów adresów IP może być konieczne również w innym niż początkowy okresie działania sieci. Nietrudno wyobrazić sobie sytuację, w której dwie małe sieci lokalne (np. w sekretariacie firmy i w księgowości) łączone są ze sobą. Prawdopodobieństwo powstania konfliktu adresów jest nikłe przy tak szerokiej puli adresowej, jednak nadal trzeba zapewnić odpowiedni mechanizm eliminujący ryzyko wystąpienia takiej sytuacji. Istnieje szereg zaleceń dotyczących używania adresów wybranych opisaną metodą. Zalecenia te pozwalają wyeliminować ewentualne problemy w działaniu sieci. Jednym z nich jest rezygnacja z umieszczania adresów IPv4LL w DNS, ze względu na ich niestały charakter. Rozwiązaniem tego 60 Piotr Strzyżewski problemu wydaje się być zastosowanie dynamicznych aktualizacji w DNSie, co jednak prowadzi do bałaganu związanego z nieusuwaniem rekordów przez pospiesznie odłączone od sieci węzły (np. poprzez odłączenie przewodu sieciowego z komputera przenośnego). Konfigurowanie adresów IPv4LL w sposób statyczny i/lub przydzielanie ich za pośrednictwem DHCP może powodować powstawanie konfliktów adresacji, a tym samym destabilizowanie sieci. Zalecana jest zatem rezygnacja z tego rodzaju praktyk. Nie powinno dopuszczać się do do sytuacji, w której adresy IPv4LL byłyby przekazywane poza sieć lokalną. Tego rodzaju adresacja jest lokalna i nie powinna być traktowana w inny sposób. Niemniej istotnym jest zalecenie dotyczące generatora liczb pseudolosowych, który jest wykorzystywany do wyboru adresu. Sugeruje się, o ile to możliwe, inicjowanie go wartością pochodną od pewnej stałej, unikalnej dla węzła sieci informacji. Przykładem takiej informacji jest identyfikator interfejsu sieciowego (w sieciach ethernet – adres MAC), który z założenia powinien być unikalny i stały dla każdego komputera w sieci. W przypadku posiadania przez węzeł stałej pamięci z możliwością zapisu, np. dysku, sugerowane jest zapisywanie wybranego adresu. Oba te rozwiązania mają zagwarantować, by po ponownym uruchomieniu urządzenia wybierany był, o ile to nadal możliwe, ten sam adres IP. Zalecenia te w dużej mierze ułatwiają rozwiązywanie ewentualnych problemów z komunikacją. 2.2 IPv6 Stateless Address Autoconfiguration Korzystając z mechanizmu IPv6 Stateless Address Autoconfiguration da się skonfigurować adres IPv6, którego używanie w sieci lokalnej umożliwi porozumiewanie się z innymi węzłami tej sieci, które wybrały swoje adresy IP w ten sam sposób. Konfiguracja adresu IPv6 o zasięgu lokalnym przebiega w stosunkowo prosty sposób. Podczas inicjowania interfejsu sieciowego, ustalany jest dla niego adres oparty na identyfikatorze urządzenia. W przypadku sieci ethernet, identyfikatorem tym staje się adres MAC. Automatyczne wyszukiwanie komputerów i usług 61 Adres lokalny IPv6 przybiera wówczas postać: FE80::ID/64 gdzie ID to utworzony na bazie adresu MAC adres EUI-64 z ustawionym bitem Universal/Local (bit nr 6 licząc od 0 od lewej). Przykładowo dla interfejsu sieciowego o adresie MAC 01:23:45:67:89:AB wybrany zostanie adres IPv6 postaci FE80::2123:45FF:FE67:89AB/64. Po ustaleniu wspomnianego adresu należy przeprowadzić procedurę sprawdzenia jego unikalności. W przypadku pojawienia się konfliktu adresów i automatycznej konfiguracji, konieczne jest wprowadzenie innego identyfikatora urządzenia (tak by automatyczna konfiguracja mogła zostać wznowiona) lub ręczne skonfigurowanie adresu. Konflikty adresów mogą być spowodowane na przykład użyciem innego, niż opisany powyżej, sposobu wybierania adresów (wspomina o tym dokument RFC 3972 i inne), jak również ręczną konfiguracją części węzłów lub użyciem DHCPv6. Podobnie jak w przypadku IPv4LL, również tutaj istnieje szereg zaleceń dotyczących używania adresów wybranych opisaną metodą. Zalecenia te pozwalają wyeliminować ewentualne problemy w działaniu sieci. Do najważniejszych (opisanych w poprzednim podrozdziale) należy zaliczyć zakaz przekazywania pakietów o zasięgu lokalnym poza sieć lokalną oraz nie umieszczanie takich adresów w systemie DNS. Korzystając z opisanej w dokumencie RFC 4862 metody, można również skonfigurować adres IPv6 o zasięgu globalnym. W tym celu należy utworzyć adres składający się z prefiksu sieci oraz z identyfikatora lokalnego. Prefiks sieci utrzymywany jest w części Prefix Information, zawartej w pakietach Router Advertisement. Po ustaleniu takiego adresu trzeba, podobnie jak powyżej, przeprowadzić procedurę sprawdzenia jego unikalności. 3 Rozgłaszanie nazw węzłów sieci Ustalanie nazw innych komputerów w sieci lokalnej bez pomocy serwerów nazw (DNS, WINS, etc.) może odbywać się z pomocą jednego 62 Piotr Strzyżewski z dwóch podobnych do siebie, opartych na protokole DNS i przeznaczonych do tego celu protokołów: mDNS (Multicast DNS) opracowanym przez firmę Apple oraz LLMNR (Link-Local Multicast Name Resolution) firmy Microsoft. Możliwe jest również skorzystanie z innego, opatentowanego przez Microsoft protokołu – PNRP (Peer Name Resolution Protocol). 3.1 Multicast DNS Protokół mDNS używany jest do wyszukiwania rekordów DNS w sieci lokalnej, w której nie skonfigurowano klasycznego serwera DNS. Multicast DNS to niewielka modyfikacja oryginalnego protokołu DNS. Pozwala ona zachować jednolite API, a to znakomicie upraszcza jego implementację. mDNS znajduje zastosowanie w większości istotnych systemów operacyjnych. Podstawą działania protokołu jest założenie, że wszystkie węzły lokalnej sieci widoczne są w specjalnie do tego przeznaczonej pseudodomenie głównego poziomu – „local.”. Jej rekordy z założenia nie mają żadnego zastosowania poza siecią lokalną, nie powinny więc być poza nią widoczne (zapytania spoza sieci lokalnej o tego rodzaju nazwy są ignorowane). Podobnie zapytania dotyczące domen odwrotnych dla adresów lokalnych – a więc te umieszczone w domenach 254.169.in-addr.arpa, 8.e.f.ip6.arpa, 9.e.f.ip6.arpa, a.e.f.ip6.arpa oraz b.e.f.ip6.arpa powinny być kierowane do usługi mDNS, dostępnej w lokalnej sieci. Przekazywanie takich zapytań do zwykłego serwera DNS generowałoby jedynie zbędny ruch w sieci. Wszelkie zapytania mDNS wysyłane są na specjalnie do tego celu przeznaczony adres typu multicast. Odpowiednio dla sieci bazującej na IPv4 jest to 224.0.0.251, a dla sieci bazującej na IPv6 – FF02::FB. Port UDP wykorzystywany do tej komunikacji to 5353. W protokole zaprojektowane zostały trzy rodzaje zapytań: Automatyczne wyszukiwanie komputerów i usług 63 pojedyncze zapytanie mDNS, pojedyncze zapytanie mDNS w oczekiwaniu na wiele odpowiedzi, ciągłe zapytanie mDNS. Pojedyncze zapytanie mDNS nie różni się specjalnie od zwykłego zapytania DNS. W praktyce możliwe jest zatem automatyczne wysyłanie zapytań dla wspomnianych wcześniej domen wprost do serwera mDNS (korzystając z ww. adresów typu multicast oraz portu UDP 5353). Implementacja tego rozwiązania nie wiąże się z wielkim nakładem kosztów. Przykładem takiego zapytania jest wyszukanie komputera o nazwie „Maja”. Zapytanie w oczekiwaniu na wiele odpowiedzi wymaga szerszych modyfikacji, związanych z koniecznością poprawnych retransmisji zapytań. Trzeba tutaj zastosować metodę eliminacji znanych odpowiedzi, tak, by węzły w sieci, które już znamy z wcześniejszych odpowiedzi, nie generowały niepotrzebnego ruchu w sieci. Przykładem takiego zapytania jest wyszukiwanie usług z wykorzystaniem komplementarnego protokołu DNS-SD (opisanego w podrozdziale 4.1). Zapytania ciągłe w swej naturze zbliżone są do zapytań w oczekiwaniu na wiele odpowiedzi. Istotną różnicę stanowi czas, w jakim retransmitowane są zapytania. W poprzednim przypadku program stwierdza, że otrzymana liczba odpowiedzi jest wystarczająca albo upłynął czas przewidziany na odpowiedź. W przypadku zapytań ciągłych, retransmitowane są one natomiast w nieskończoność (tzn. do czasu działania aplikacji). By wyeliminować niepotrzebny ruch, sukcesywnie podwaja się czas pomiędzy kolejnymi retransmisjami, aż do jednej godziny pomiędzy kolejnymi zapytaniami. Również w tym przypadku stosuje się metodę eliminacji znanych odpowiedzi. Przykładem takiego zapytania jest ciągłe wyszukiwanie węzłów świadczących pewną usługę. Każda odpowiedź jest uzupełniona o czas jej ważności. Dodanie tej informacji pozwala na utrzymywanie lokalnej pamięci podręcznej, co nie pozostaje bez znaczenia dla obniżenia poziomu ruchu w sieci. 64 Piotr Strzyżewski Jeżeli węzeł w sieci jest zainteresowany informacją ze swojej pamięci podręcznej, a termin jej ważności ma wkrótce wygasnąć, generuje ponowne zapytanie o tą informację. Ponawianie takiego pytania powinno następować po upływie około 80% czasu ważności informacji. Zarówno zapytania jak i odpowiedzi (z drobnym wyjątkiem) wysyłane są z wykorzystaniem adresów typu multicast. Wówczas wszystkie węzły sieci, widząc odpowiedzi, mogą zaktualizować swoje pamięci podręczne. Gdy węzeł kończy świadczenie usługi, może również rozgłosić ten fakt poprzez wysłanie odpowiedniego pakietu z czasem ważności informacji równym 0 sekund. W praktyce pozwala to np. na posiadanie zawsze aktualnej listy usługodawców. Ciekawą i wartą podkreślenia różnicą w stosunku do klasycznego protokołu DNS jest rozszerzenie dopuszczalnego zestawu znaków, możliwych do używania w nadawanych nazwach, do standardu UTF8. 3.2 Link-Local Multicast Name Resolution Zaprojektowany przez Microsoft protokół Link-Local Multicast Name Resolution opisany w dokumencie RFC 4795 jest zbliżony do opisanego wyżej mDNS funkcjonalnością, ale z nim niekompatybilny. Podobnie jak ten ostatni, LLMNR bywa używany do wyszukiwania rekordów DNS w sieci lokalnej, w której nie skonfigurowano klasycznego serwera DNS. Jest on również niewielką modyfikacją klasycznego protokołu DNS. Z uwagi na fakt, że protokół ten dostępny jest jedynie w Microsoft Windows Vista oraz w Microsoft Windows Server 2008, jego zastosowanie w przeciwieństwie do poprzednika jest dużo bardziej ograniczone. Podobnie jak w przypadku mDNS, zapytania również rozsyłane są z wykorzystaniem adresów typu multicast. W tym wypadku adresem używanym do komunikacji jest odpowiednio dla sieci IPv4 – 224.0.0.252, a dla sieci IPv6 – FF02::1:3. Port przeznaczony dla tego protokołu to 5355. Automatyczne wyszukiwanie komputerów i usług 65 W przeciwieństwie do mDNS, protokół nie używa specjalnej domeny pierwszego poziomu „local”. W zamian stosuje się płaską strukturę nazw. Należy jednak zauważyć, że klienty tego protokołu pozwalają na zadanie zapytania o nazwę w domenie „.local” – usuwając ten ciąg i przesyłając zapytanie jedynie o konkretną nazwę hosta. Kolejną istotną różnicą w stosunku do mDNS jest wysyłanie odpowiedzi jedynie do pytającego (z wykorzystaniem adresacji typu unicast), co eliminuje możliwość aktualizacji pamięci podręcznej pozostałych węzłów sieci. Tego rodzaju zachowanie oznacza również, że odpowiadającym jest zawsze komputer, który jest odpowiedzialny za wyszukiwaną nazwę. Model ten eliminuje z użycia, opisane w poprzednim rozdziale, bardziej zaawansowane od pojedynczych zapytania. 3.3 Peer Name Resolution Protocol Zaprojektowany i opatentowany przez Microsoft protokół Peer Name Resolution Protocol jest przeznaczony do wykorzystania wyłącznie w sieciach IPv6. Ta właściwość oraz fakt, że jego implementacje przeznaczone są głównie dla produktów tej firmy, powoduje, że zasięg jego wykorzystania jest niezwykle mały. Należy również zauważyć, że druga wersja tego protokołu (dostępna w Microsoft Windows Vista) nie jest kompatybilna z pierwszą wersją (dostępną w SP2 dla Microsoft Windows XP), co dodatkowo skutecznie ogranicza jego zastosowanie. Być może szersze wprowadzenie dodatku SP3 dla Microsoft Windows XP umożliwi komunikację systemów tej firmy za jego pośrednictwem. Na uwagę zasługują dwie wyróżniające się funkcjonalności PNRP. W przeciwieństwie do dwóch poprzednich, umożliwia on publikowanie nazw oraz dodatkowych informacji wraz ze wskazaniem zasięgu ich widoczności (sieć lokalna, sieć firmowa (site), lub cały internet). Drugą interesującą cechą tego protokołu jest wprowadzenie pewnego rodzaju zabezpieczenia publikowanych nazw, poprzez możliwość podpisania przez publikującego jego rekordów. Podpis taki może być następnie, w razie konieczności, zweryfikowany z wykorzystaniem odpowiedniego klucza publicznego. 66 Piotr Strzyżewski Podobnie do wyżej opisanych protokołów, PNRP utrzymuje również lokalną pamięć podręczną ,zawierającą znane nazwy innych węzłów sieci. Tworzenie pamięci podręcznej jest tu wynikiem komunikacji z innymi węzłami sieci, korzystającymi z tego protokołu. Do celów PNRP została zarezerwowana domena internetowa pnrp.net, która przez systemy z zaimplementowaną obsługą tego protokołu jest traktowana w specjalny sposób. Przeznaczono również port 3540 (zarówno UDP jak i TCP). 4 Wyszukiwanie usług w sieci Temat automatycznego wyszukiwania usług w sieci jest rozwijany od wielu lat i znalazł swoje odbicie w szeregu implementacji przeznaczonych do różnych zastosowań. Z powszechnie stosowanych rozwiązań można wymienić chociażby: Web Proxy Autodiscovery Protocol, stosowany powszechnie przez przeglądarki internetowe, Bluetooth Service Discovery Protocol, używany w sieciach bezprzewodowych opartych o protokół Bluetooth, Simple Service Discovery Protocol, używany w połączeniu z Universal Plug and Play, Dynamic Host Configuration Protocol. Na szczególną uwagę zasługuje jednak otwarty i szeroko implementowany protokół DNS Service Discovery (DNS-SD), który wraz z opisanym w jednym z poprzednich podrozdziałów mDNS, tworzy opracowany przez firmę Apple tandem szerzej znany pod nazwą Bonjour (poprzednio Rendezvous). Automatyczne wyszukiwanie komputerów i usług 67 4.1 DNS Service-Discovery DNS-SD zaprojektowano do wyszukiwania usług w sieci zarówno lokalnej, jak i globalnej. W lokalnej funkcjonuje z wykorzystaniem adresów protokołu mDNS o zasięgu lokalnym oraz opisanej w poprzednich podrozdziałach domeny „local.” Zasięg globalny oparty jest o klasyczny protokół DNS oraz domeny internetowe. Protokół ten korzysta w niezwykle elastyczny sposób z istniejących rekordów DNS – SRV, TXT oraz PTR w celu opublikowania informacji o udostępnianych usługach. Jednym z głównych założeń leżących u podstaw protokołu DNSSD jest to, że użytkownik zainteresowany skorzystaniem z pewnej usługi (np. http czy serwera druku) otrzymuje listę usługodawców, z której może wybrać interesujący go element. Łatwo można zauważyć, że wykorzystanie standardowych rekordów SRV może okazać się niewystarczające, bo służą one raczej do wskazania równorzędnych serwerów świadczących daną usługę. Przykładem może być tutaj usługa katalogowa LDAP dla domeny „polsl.pl”, której dowolny, równorzędny serwer może być odszukany poprzez zapytanie: $ dig srv _ldap._tcp.polsl.pl w wyniku którego otrzymamy odpowiedź (załączono jedynie istotny fragment): ;; ANSWER SECTION: _ldap._tcp.polsl.pl. 498 IN SRV 0 100 389 horus.polsl.pl. _ldap._tcp.polsl.pl. 498 IN SRV 0 100 389 castor.polsl.pl. _ldap._tcp.polsl.pl. 498 IN SRV 0 100 389 pollux.polsl.pl. _ldap._tcp.polsl.pl. 498 IN SRV 0 100 389 cutidc.polsl.pl. W sytuacji, w której konieczne byłoby znalezienie np. konkretnej drukarki, użytkownik mógłby podjąć decyzję bazując jedynie na nierzadko nic mu niemówiących nazwach zarejestrowanych w systemie DNS. 68 Piotr Strzyżewski Aby zaradzić temu problemowi, protokół DNS-SD wprowadza dodatkowy poziom rekordów (PTR), pozwalający na zastosowanie opisowej nazwy dla świadczonych usług. W celu uzyskania poszukiwanej listy serwerów świadczących wybraną usługę, należy wydać analogiczne do powyższego zapytanie o rekordy PTR dla nazwy, w postaci: <usługa>.<protokół_transportowy>.<domena> gdzie <usługa> to zapisana w sposób stosowany dla rekordów SRV nazwa usługi poprzedzona znakiem „_” (np. „_http”, „_ldap”), <protokół_transportowy> to albo „_tcp” albo „_udp” w zależności od protokołu transportowego wykorzystywanego przez usługę, <domena> to albo „local” dla protokołu mDNS albo zwykła domena internetowa, w której zarejestrowana jest (ręcznie lub dynamicznie) dana usługa. W odpowiedzi uzyskujemy listę rekordów PTR postaci: <usługodawca>.<usługa>.<protokół_transportowy>.<domena> gdzie <usługodawca> to zapisany z wykorzystaniem standardu UTF-8 i ograniczony do 63 oktetów (ograniczenie to zostało narzucone w dokumentach RFC 1033-1035) identyfikator usługodawcy. Przykładowe zapytania oraz niektóre odpowiedzi dla istniejących w DNSie domen: $ dig ptr _http._tcp.apple.com ;; ANSWER SECTION: _http._tcp.apple.com. 86378 IN PTR Apple\032Developer\032Connection._http._tcp.apple.com. _http._tcp.apple.com. 86378 IN PTR Apple\032WWDC\032Schedule._http._tcp.apple.com. _http._tcp.apple.com. 86378 IN PTR Apple\032WWDC\032Attendee\032Site._http._tcp.apple.com. Automatyczne wyszukiwanie komputerów i usług 69 $ dig ptr _http._tcp.dns-sd.org ;; ANSWER SECTION: _http._tcp.dns-sd.org. 1009 IN PTR \032*\032SlashDot,\032News\032for\032Nerds,\032Stuff\032that\032Matters._http._tcp.dnssd.org. _http._tcp.dns-sd.org. 1009 IN PTR \032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org. $ dig ptr _ftp._tcp.dns-sd.org ;; ANSWER SECTION: _ftp._tcp.dns-sd.org. 3467 IN PTR Restricted,\032Registered\032Users\032Only._ftp._tcp.dns-sd.org. _ftp._tcp.dns-sd.org. 3467 IN PTR Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org. _ftp._tcp.dns-sd.org. 3467 IN PTR Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org. Zastosowanie standardu UTF-8 nie stanowi dla użytkownika problemu, ponieważ nie wprowadza on nazwy bezpośrednio do aplikacji, wybiera jedynie dostępnego usługodawcę z wyświetlonej listy. Po wybraniu konkretnej usługi, następuje zapytanie o rekordy SRV oraz TXT. Z rekordu SRV otrzymywany jest tak jak to już miało miejsce wcześniej – jeden z równorzędnych serwerów świadczących wskazaną usługę: $ dig srv ’\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.’ ;; ANSWER SECTION: \032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org. IN SRV 0 0 80 3600 www.google.com. Natomiast z rekordu TXT otrzymujemy dodatkowe parametry zależne od rodzaju usługi zapisane w postaci klucz=wartość: $ dig txt ’\032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org.’ ;; ANSWER SECTION: \032*\032Google,\032searching\032the\032Web._http._tcp.dns-sd.org. IN TXT "path=/" 3600 70 Piotr Strzyżewski W powyższym przykładzie uzyskano adres serwera usługi http – www.google.com, z którego należy pobrać główną stronę internetową („/”). Istnieje również możliwość wskazania podtypu danej usługi (rodzaje podtypów uzależnione są od usług). Wówczas pierwotne zapytanie (o rekordy PTR) modyfikuje się do postaci: <podtyp>._sub.<usługa>.<protokół_transportowy>.<domena> Możliwe jest na przykład wyszukanie serwerów ftp, które oferują dostęp anonimowy: $ dig ptr anon._sub._ftp._tcp.dns-sd.org ;; ANSWER SECTION: anon._sub._ftp._tcp.dns-sd.org. 3600 IN PTR Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org. anon._sub._ftp._tcp.dns-sd.org. 3600 IN PTR Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org. Ciekawym rodzajem zapytania, ułatwiającym rozwiązywanie problemów sieciowych, jest listowanie zarejestrowanych w domenie usług. Aby tego dokonać należy wydać zapytanie o rekordy PTR dla zarezerwowanej nazwy postaci: _services._dns-sd._udp.<domena> Warto podkreślić, że możliwe jest również rozpoznanie domen używanych przez użytkowników w sieci lokalnej. Łatwo wyobrazić sobie przyłączany gościnnie do sieci komputer przenośny, który – wykorzystując ten mechanizm – uzyska listę używanych w danej lokalizacji domen, a następnie listę potrzebnych mu usług (np. drukarek, tak by mógł wydrukować notatkę służbową lub dowolny inny dokument). Aby skorzystać z tej możliwości, należy zadać zapytanie o rekordy PTR dla zarezerwowanych nazw postaci: b._dns-sd._udp.<domena> db._dns-sd._udp.<domena> r._dns-sd._udp.<domena> Automatyczne wyszukiwanie komputerów i usług 71 dr._dns-sd._udp.<domena> lb._dns-sd._udp.<domena> W odpowiedzi otrzymamy odpowiednio: listę domen rekomendowanych do przejrzenia, domyślną, rekomendowaną domenę do przejrzenia, listę domen rekomendowanych do rejestrowania w nich usług z wykorzystaniem dynamicznych aktualizacji DNS, domyślną, rekomendowaną domenę do rejestrowania w niej usług z wykorzystaniem dynamicznych aktualizacji DNS, sugerowaną przez lokalnego administratora domenę do przejrzenia. W tak zadawanych pytaniach możliwe jest wskazanie w części <domena> słowa „local” albo domeny uzyskanej w inny sposób. Przykładowo może to być domena wprowadzona na stałe do konfiguracji komputera, otrzymana z serwera DHCP (poprzez opcję „Domain” lub „Domain Search”) lub utworzona na podstawie adresu IP oraz maski (naturalnie będzie to wówczas domena odwrotna). Nic nie stoi na przeszkodzie, aby zastosować wszystkie wspomniane możliwości, a więc skorzystać zarówno z mechanizmu mDNS jak i DNS i przedstawić rezultaty użytkownikowi jako listę usług do wyboru. 5 Podsumowanie Opisane powyżej protokoły wspomagające automatyczne wyszukiwanie innych komputerów i/lub świadczonych przez nie usług, ułatwiają korzystanie z sieci lokalnej. Ich zastosowanie pomaga niezaawansowanym użytkownikom uruchomić prostą sieć lokalną, złożoną z kilku komputerów i drukarek, bez potrzeby posiadania specjalistycznej wiedzy. Z drugiej strony – w bardziej zaawansowanym środowisku, zastosowanie np. protokołu DNS-SD pozwala administratorowi na proste 72 Piotr Strzyżewski dostarczanie potrzebnych użytkownikom informacji, bez konieczności każdorazowego modyfikowania części ustawień. Korzystając z tych protokołów należy jednak zawsze mieć na uwadze bezpieczeństwo uzyskanych informacji. Nie jest bowiem rozsądnym drukowanie poufnych informacji lub przesyłanie ważnych plików do komputera, który zgłosił się w sieci pod znaną nam lub budzącą zaufanie nazwą. Stosunkowo często rozpoznanie usługi spoczywa w wyższych warstwach sieciowych. W chwili obecnej wydaje się, że najbardziej przyszłościowym standardem jest opracowany przez firmę Apple Bonjour, którego mnogość implementacji na innych niż Mac OS X platformach, pomaga w jego rozpowszechnianiu. Aktualnie dostępna jest implementacja Avahi używana w systemach Linux oraz BSD, a także rozpowszechniana wraz z oprogramowaniem iTunes implementacja działająca w systemach z rodziny Microsoft Windows. 6 Literatura [1] http://en.wikipedia.org/wiki/Zeroconf [2] http://www.zeroconf.org/ [3] Dynamic Configuration of IPv4 Link-Local Addresses, http://tools.ietf.org/html/rfc3927 [4] IPv6 Stateless Address Autoconfiguration, http://tools.ietf.org/html/rfc4862 [5] Multicast DNS Internet-Draft, http://files.multicastdns.org/⇒ ⇒ /draft-cheshire-dnsext-multicastdns.txt [6] Link-Local Multicast Name Resolution (LLMNR), http://tools.ietf.org/html/rfc4795 Automatyczne wyszukiwanie komputerów i usług 73 [7] Peer Name Resolution Protocol, http://technet.microsoft.com/en-gb/library/bb726971.aspx [8] DNS-Based Service Discovery Internet-Draft, http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt XUL – interfejs użytkownika przyszłości? Robert Partyka Historia rozwoju informatyki to między innymi historia rozwoju języków programowania. Dziedzina ta przeszła długą drogę od kodu maszynowego, poprzez języki niskiego poziomu, aż do wyrafinowanych narzędzi programistycznych typu RAD. Kolejne technologie poprawiały czytelność języków programowania, zwiększały szybkość tworzenia programów, eliminowały zbędne czynności. Jeden element pozostawał niezmiennie konieczny – stworzenie interfejsu użytkownika (GUI). Doba internetu przyniosła nowe możliwości w tym zakresie. Programy przeniosły się na serwery, a interfejs użytkownika tworzony z wykorzystaniem HTML stał się bardziej kolorowy, niż kiedykolwiek wcześniej. Jednakże, pomimo wszystkich udogodnień, pierwotne przeznaczenie HTML do formatowania prezentowanego tekstu rzutuje na wygodę tworzenia GUI. Przyjrzyjmy się, co w tej materii może zmienić nowa technologia? XUL – interfejs użytkownika przyszłości? 75 XUL – język interfejsu W laboratoriach Mozilli postanowiono ułatwić pracę programistów odpowiedzialnych za tworzenie interfejsów m. in. przeglądarki Firefox. W ten sposób powstał XUL (czytamy: zu:l). Język definiowania interfejsu przy pomocy XML. Samemu nie będąc formalnym standardem, korzysta on z dobrodziejstw takich powszechnie znanych technologii jak CSS, DOM czy JavaScript. Wszystko po to, by interfejs użytkownika nie musiał być każdorazowo przedefiniowany na nowo dla każdej platformy. Daje to oszczędności pracy programistów idące w tysiące godzin. Dzięki swojej prostocie, pozwala także na szybkie implementowanie koniecznych zmian i nowości. XUL pozwala na stworzenie większości nowoczesnych elementów interfejsu, takich jak elementy wprowadzania danych, przyciski, paski narzędziowe, menu, hierarchiczne drzewa czy skróty klawiszowe. Dzięki JavaScript możliwe jest także proste powiększanie zasobu dostępnych komponentów. XUL – wygoda układania Ktokolwiek walczył z idealnym dopasowywaniem strony WWW do rozmiarów okna przeglądarki, ten wie ile trudu trzeba w to włożyć. Efekt często nie jest zadowalający. Problem ten jest znikomy w XUL, a wręcz można powiedzieć, że nie istnieje. Logika tej technologii oparta jest o rozwiązania znane z GTK, czy Java – elementy układane są w elementach <box>, które to układają kolejne komponenty horyzontalnie lub wertykalnie – zależnie od parametrów. Dzięki takim seriom elementów zagnieżdżonych, w prosty sposób jesteśmy w stanie podzielić ekran na prostokątne strefy. W nich rozmieścimy potrzebne komponenty. Przy tworzeniu kompozycji istotnym jest parametr flex. Dzięki niemu wybrany element nabierze elastyczności i dostosuje się do rozmiaru wolnej przestrzeni w jego otoczeniu. Dopasowywanie interfejsu do wielkości okna przestaje być problemem. 76 Robert Partyka <box orient="vertical"> <box orient="horizontal" align="center"> <label control="srh" value="Szukaj:"/> <textbox id="srh" flex="1"/> </box> <box orient="horizontal" pack="end"> <button label="OK"/><button label="Anuluj"/> </box> </box> Przykład 1 Przykład nr. 1 obrazuje metodykę rozmieszczania elementów. W efekcie wykonania tego prostego kodu, otrzymamy okno wyszukiwania – takie, jak na rys. 1. Pole edycyjne będzie automatycznie dopasowywane do szerokości ekranu, a przyciski “OK” oraz “Anuluj” zostaną przyciągnięte do prawej. Należy zwrócić uwagę na fakt, że parametr flex działa na obiekt wzdłuż osi rozmieszczania komponentów w elemencie <box>. Pełną kontrolę nad wyglądem elementów uzyskujemy dzięki dodatkowym parametrom align oraz pack. Oba te parametry dookreślają sposób, w jaki będą układane komponenty wewnątrz danego elementu <box>, gdy rozmiar rodzica jest większy, niż rozmiary dzieci. Parametr align działa wzdłuż osi przeciwnej niż określona w parametrze orient, podczas gdy pack – wzdłuż tej samej. XUL – interfejs użytkownika przyszłości? 77 <box orient="horizontal" align="center"> <timepicker/><datepicker type="grid"/> <datepicker/><datepicker type="popup"/> </box> Przykład 2 XUL – biblioteka komponentów Prostotę modelowania interfejsu w XUL dopełnia bogata biblioteka gotowych komponentów. Wraz z publikacją Gecko 1.9 oraz FireFox 3, rozszerzona została ona o kolejne przydatne elementy. Możemy zapomnieć o konieczności wykorzystywania złożonych skryptów JavaScript w połączeniu z DOM i CSS, tylko po to, by pobrać od użytkownika datę lub czas. Teraz zrobią to za nas elementy <datepicker> oraz <timepicker>. Element pobierania daty może występować w trzech postaciach: kalendarza przedstawiającego widok całego miesiąca, pola edycyjnego formatującego wpisany tekst w datę, pola edycyjnego, z możliwością wywołania menu kontekstowego z widokiem całego miesiąca. Kolor pobierzemy dzięki elementowi <colorpicker>. Może on przybrać formę przycisku z kontekstowym menu kolorów lub pojawić 78 Robert Partyka <box orient="horizontal" align="center"> <colorpicker/> <colorpicker type="button"/> </box> Przykład 3 się jako element wyboru kolorów bezpośrednio na oknie. Element ten wymaga nadal dopracowania, by osiągnąć użyteczność na poziomie tożsamego elementu w programie GIMP. Bezproblemowe staje się tworzenie menu kontekstowych i menu programu. Elementy typu skala, pasek postępu czy splitter, który pozwala dopasowywać rozmiary elementów na oknie w trakcie pracy programu, sprowadzone zostały do kilku prostych definicji XML. Kolejnym bardzo przydatnym elementem jest komponent <tree>. Jego dosyć złożoną (jak na XUL) składnię, rekompensują szerokie możliwości zastosowania. Dzięki niemu stworzymy widoki w postaci raportu posiadającego przenośne kolumny, drzewiaste struktury z rozwijanymi podkategoriami i inne podobne elementy. Złożoność obiektu pozwala na bardzo elastyczny sposób jego wykorzystania. XUL – interfejs użytkownika przyszłości? 79 <menubar> <menu label="Menu 1"> <menupopup> <menuitem label="Menu 1.1"/> <menuitem label="Menu 1.2"/> <menuseparator/> <menu label="Menu 1.3"> <menupopup> <menuitem label="Menu 1.3.1"/> </menupopup> </menu> </menupopup> </menu> <menu label="Menu 2"> <menupopup> <menuitem label="Menu 2.1"/> </menupopup> </menu> </menubar> Przykład 4 Kolekcja gotowych komponentów jest bogata i pozwala wygodnie tworzyć interfejsy programów. Gdy czegoś brakuje, możemy rozszerzyć funkcjonalność dzięki technice XBL. 80 Robert Partyka <box orient="horizontal" width="400"> <scale min="0" max="10" flex="1"/> <splitter/> <progressmeter mode="determined" value="80" flex="1"/> </box> Przykład 5 Elementy scale i progresmetter rozdzielone splitterem dopasowującym ich układ na oknie Przykład 6 element tree prezentujący tabelę raportu z edycyjnym polem w pierwszym wierszu oraz menu kontekstowym ukrywania/pokazywania kolumn Wykorzystanie HTML Nie istnieje taka technologia, która obejmowałaby swoim zakresem wszystko. Deweloperzy XUL są tego doskonale świadomi, dlatego też pozostawili możliwość wykorzystywania elementów HTML. Aby uzyskać dostęp do komponentów znanych z HTML, konieczne będzie załadowanie odpowiedniej przestrzeni nazw w deklaracji okna. <window xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> XUL – interfejs użytkownika przyszłości? 81 Przykład 7 element tree prezentujący rozwijane drzewo kategorii wraz z ikonami Od tego momentu możemy odwołać się do znanych z HTML tagów np. w ten sposób: <html:div> To jest <html:i>przykładowe</html:i> wnętrze div</html:div> Rysowanie w XUL – element Canvas Programy, to nie tylko pola edycyjne, ale również grafika. Dzięki możliwości wykorzystania elementów HTML, możemy w prosty sposób zagnieździć na ekranie element <canvas>, którego przeznaczeniem będzie oprogramowanie Przykład 8 Zegarek grafiki. Element ten nie jest zawarty w stanrenderowany dzięki dardzie HTML wersji 4 – zawarty jest dopiero w nadchodzącej wersji 5. Nie jest też imobiektowi canvas plementowany we wszystkich przeglądarkach WWW. Na szczęście, dzięki przezorności programistów związanych z FireFox, możemy cieszyć się jego możliwościami w XUL. Element ten zagnieżdżamy w następujący sposób: 82 Robert Partyka <html:canvas id="MyCanvas" width="400" height="300"> </html:canvas> Dzięki interfejsowi JavaScript, możemy na nim rysować i dokonywać przekształceń obrazu. Dodatkowo warto wspomnieć, iż trwają prace nad implementacją API OpenGL w JavaScript, w celu zapewnienia sprzętowej akceleracji 3D w tym obiekcie. Trochę więcej edycji – technologia Midas Często potrzebna nam jest bardziej zaawansowana edycja tekstu, niż tylko prosty textbox. Przydatne bywa pogrubianie, zmienianie stylu i koloru. W FireFox umożliwia to technologia Midas, która implementuje edytowalny element iframe (odpowiednik edytowalnych div/iframe z IE). O technologii tej nie zapomniano także w XUL. Dostępny jest specjalny komponent – <edit>, dzięki któremu można osadzać w programie WYSWIGowy edytor HTML. Dzięki elastyczności XUL, możliwe jest także przełączenie elementu iframe w tryb edycji, jak i osadzenie obiektu iframe (z przełączeniem w tryb edycji) z przestrzeni nazw HTML. Komponent ten dostarcza tylko przestrzeni edycyjnej. Wywołania komend takich jak pogrubianie, pochylanie, zmiana kolorów, itd., muszą być oprogramowywane z poziomu JavaScript. Ta pozorna niewygoda przekłada się w wysoką niezależność w komponowaniu interfejsu użytkownika. Pozostaje jedynie mieć nadzieję, iż technologia Midas będzie dalej rozwijana i pojawią się w niej kolejne możliwości. Wydruki Aplikacje to nie tylko przetwarzanie danych. Klient bardzo często wymaga od oprogramowania możliwości wydruku wygenerowanego raportu. Z przykrością należy stwierdzić, iż ta część silnika Gecko oraz samego FireFoksa potraktowana jest niestety po macoszemu. O ile XUL – interfejs użytkownika przyszłości? 83 wydruk sam w sobie nie stanowi większego problemu, to droga przez ciernie zaczyna się, gdy chcemy stworzyć podgląd wydruku. Czeka nas wówczas przebijanie się przez źródła FireFox i składanie szczątkowej wiedzy, rozsianej po całej sieci. Pamiętać należy, iż okna zdefiniowane w XUL nie posiadają możliwości wydruku. Aby ją, należy wygenerować raport w postaci dokumentu HTML, załadować go do komponentu iframe i przełączyć tenże w tryb podglądu wydruku. Tylko jak tego dokonać? Najprostszym sposobem 1 jest wykorzystanie tych samych technik, których używa sama przeglądarka FireFox. Uruchomienie podglądu wydruku w tej przeglądarce odbywa się poprzez procedury zapisane w JavaScript i zdefiniowane w XUL fragmenty interfejsu. Tutaj napotykamy pierwszą przeszkodę. Skrypty, które tak głęboko odwołują się do sprzętu, muszą pracować ze specjalnym poziomem uprawnień. By to zapewnić, wywołujemy about:config w pasku adresu. Następnie odnajdujemy zmienną signed.applets.codebase principal support i ustawiamy ją na true. Ale to nie wszystko. W każdej funkcji związanej z podglądem wydruku, jako pierwsze wywołujemy żądanie udostępnienia odpowiednich uprawnień: netscape.security.PrivilegeManager.⇒ ⇒enablePrivilege(’UniversalXPConnect’); Programowanie interfejsu zaczynamy od załadowania biblioteki printUtils.js wchodzącej w skład pakietu FireFox/Gecko. <script type="application/x-javascript" src="chrome://global/content/printUtils.js" /> Definiujemy potrzebne elementy GUI. Uwaga: ”id” elementów mają znaczenie. <toolbar id="navigator-toolbox"> <toolbarbutton label="Print preview" 1 technika ta jest wynikiem przeszukiwań zasobów sieci i może być niekompletna; jeśli potrafisz wykonać to lepiej -– zachęcam do dyskusji w ramach wykładu 84 Robert Partyka oncommand="PrintPreview()"/> <toolbarbutton label="Page setup" oncommand="PageSetup()"/> </toolbar> <hbox flex="1" id="browser"> <browser src="http://url.do.mojego.rapotu" id="content" flex="1" style="margin: 25px;"/> </hbox> Prostsza część zadania za nami. Przystępujemy do zdefiniowania potrzebnych funkcji JavaScript. Poniższe dwie funkcje wymagane są przez bibliotekę printUtils.js – tworzymy je więc: function { return } function { return } getPPBrowser() document.getElementById(’content’); getNavToolbox() document.getElementById(’navigator-toolbox’); dodajemy zmienną blokującą wielokrotne wykonanie funkcji: var inPrintMode = false; deklarujemy funkcje wejścia i wyjścia w tryb podglądu: function onEnter() { inPrintMode=true; document.getElementById(’navigator-toolbox’).style.display = ’none’; return true; } function onExit() { inPrintMode=false; document.getElementById(’navigator-toolbox’).style.display = ’-moz-box’; return true; } XUL – interfejs użytkownika przyszłości? 85 oraz funkcje, które wywołamy na życzenie użytkownika: function PrintPreview(){ if ( inPrintMode ) return; netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’); var ewin = document.getElementById(’content’).contentWindow; PrintUtils.printPreview(onEnter, onExit, ewin); } function PageSetup(){ netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’); var ewin = document.getElementById(’content’).contentWindow; PrintUtils.showPageSetup(); } function ExitPrintPreview(){ if ( !inPrintMode ) return; netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’); var ewin = document.getElementById(’content’).contentWindow; PrintUtils.exitPrintPreview(ewin); } function Print(){ netscape.security.PrivilegeManager.enablePrivilege(’UniversalXPConnect’); var ewin = document.getElementById(’content’).contentWindow; PrintUtils.print(ewin); } Dodatkowo definiujemy plik binding.xml będący rozszerzeniem elementów XUL dzięki technologii XBL: <?xml version="1.0"?> <bindings xmlns="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 86 Robert Partyka <binding id="myprinttoolbar"> <resources> </resources> <content> <xul:toolbarbutton label="Exit print preview" oncommand="ExitPrintPreview()"/> <xul:toolbarbutton label="Print" oncommand="Print()"/> </content> <implementation> <constructor></constructor> <destructor></destructor> </implementation> </binding> </bindings> Oraz plik binding.css o zawartości: toolbar[printpreview="true"] { -moz-binding: url(http://moj.url/binding.xml#myprinttoolbar); } Powyższe trzy wiersze stylu muszą znajdować się w zewnętrznym pliku CSS – inaczej zostaną zignorowane. Łącząc powyższe w jedną całość, otrzymujemy podgląd wydruku zagnieżdżony w naszej aplikacji. Niestety – praktyka pokazuje, że to, co widzimy na podglądzie, niekoniecznie musi być tym, co otrzymamy na wydruku. Podsystem druku Gecko jest jednak niedopracowany i wymaga dalszego rozwoju. Miejmy nadzieję, że fundacja Mozilli nie zaniedba tego ważnego dla każdej aplikacji elementu. Zamiast powyższego, polecam generowanie plików PDF po stronie serwera i wysyłanie ich z odpowiednimi nagłówkami do klienta. Tylko mozilla? Prism W chwili obecnej jedynie silnik Gecko dostarczany przez fundację Mozilla posiada pełną implementację XUL. Z tej przyczyny możliwość jej XUL – interfejs użytkownika przyszłości? 87 wykorzystania zawęża się tylko do FireFoksa. Dla niektórych może być to wada, dla innych zaleta (koniec z dopasowywaniem rozwiązania zgodnie z zasadą „Twórz dla FireFox, dopasuj do Opera i IE – nie ma innej drogi”). Rynek biznesowy rządzi się jednak swoimi prawami – jeżeli klient odmawia migracji na produkty Mozilli, możemy posiłkować się rozwiązaniem Prism, które rozwijane jest w ramach tej fundacji. Prism, to nic innego jak połączenie silnika Gecko wyjętego z FireFox i przystosowanego do uruchomienia z programem ułatwiającym konfigurację uruchomienia aplikacji sieciowej, niezależnie od przeglądarki 2. Rozwiązanie to posiada kilka istotnych zalet. Pierwszą z nich jest uruchamianie niezależnego procesu dla każdej aplikacji sieciowej – koniec z zawieszeniem całej przeglądarki przez źle napisany JavaScript, od teraz stracimy tylko efekty pracy w jednym oknie. Drugą istotną zaletą jest wygląd, sugerujący działanie jako aplikacji lokalnej. Nie widzimy żadnych pasków adresu, zadań, przycisków nawigacyjnych, itp. Podsumowując, XUL jest bardzo wygodnym narzędziem do tworzenia i rozwijania interfejsu użytkownika. Pozwala sprawnie tworzyć rozszerzenia FireFox, aplikacje klasyczne jak i sieciowe. Ograniczenia w zastosowaniu tylko do produktów fundacji Mozilla, rekompensowane jest wysokim stopniem niezależności od systemu operacyjnego, migracja pomiędzy platformami stała się jeszcze prostsza. Mam nadzieję, że udało mi się zachęcić do głębszego spojrzenia na tę technologię. Więcej o XUL znaleźć można na stronach Mozilla Developer Center: http://developer.mozilla.org/en/XUL 2 rozwiązanie znane jest pod nazwą XULRunner Blender a wizerunek i reklama firmy bardziej i mniej typowe zastosowania Blendera Wojciech Rakszawski Blender został zaprojektowany jako program do tworzenia grafiki trójwymiarowej oraz animacji. W tych zastosowaniach sprawdza się świetnie. Dowody można znaleźć w galeriach na blender.pl, blender3d.pl, czy oglądając chociażby „Elephants Dream”[1]. Pomimo swojego aktualnie otwartego charakteru, stanowi coraz poważniejszą konkurencję dla komercyjnych potęg, takich jak Maya czy najnowszy 3D Studio Max[2,3]. Jego zalety docenili twórcy „SpiderMan 2” – filmu, dla którego stanowił bazę efektów specjalnych. W sieci znaleźć można również informacje o filmie „Plumíferos”[4,5], który jest stworzony wyłącznie za pomocą narzędzi Open Source. Jest to prawdopodobnie pierwszy film pełnometrażowy w całości animowany w Blenderze. Na tym jednak możliwości Blendera się nie kończą. Bez większych problemów można go używać jako narzędzia do wspomagania rysunku technicznego czy innych bardzo nietypowych pomysłów, wymaganych na pierwszym roku budownictwa Politechniki Śląskiej. Osobiście używałem go jako aplikacji pozwalającej sklecić wizualizację budynku albo elementów mechanicznych „na szybko”. Przydał się także jako baza dla pełnowymiarowych modeli budynków. Dzięki Blender a wizerunek i reklama firmy 89 mnogości formatów, do których można nasze modele wyeksportować (DirectX, mapa do Quake 3) stanowi ciekawą propozycję dla początkujących twórców gier 3D. Jeśli ktoś programuje w Pythonie, powinien zapoznać się z API Blendera. Wiedza ta pozwoli mu stworzyć zaawansowane animacje, napisać własne gry albo rozszerzać możliwości programu za pomocą swoich narzędzi i plug-in’ów. Wszystko to za pomocą kilku (-set czy tysięcy) wierszy kodu. Co bardzo istotne, Blender udostępnia dwa mechanizmy kopiowania obiektu. Pierwszy tworzy tylko kopię obiektu oraz kopię siatki i ten sposób będzie dalej nazywany kopiowaniem. Drugi tworzy kopię obiektu, jednak obydwa obiekty korzystają ze wspólnej siatki. Ten sposób będę nazywał dalej klonowaniem. Komuś takie rozwiązanie może wydawać się dziwne, jednak w różnych sytuacjach przydają się różnice w zachowaniach tak tworzonych obiektów. Przykład i krótkie omówienie znajdą państwo w dalszej części tekstu. Odpowiednie podejście do problemów Nadszedł czas na konkrety. Od tego miejsca postaram się pokazać na konkretnym przykładzie, jak wykorzystać możliwości Blendera w promocji produktu. Wprowadzenie taktyczne: załóżmy, że prowadzimy firmę informatyczną X, zajmującą się zagadnieniami bezpieczeństwa. Naszą najnowszą linią produktów jest firewall, antywirus oraz system wykrywający nieprawidłowe zachowania w sieci. Cel: sprzedać jak najwięcej naszych produktów firmie Y. Ważne informacje: Y to przedsiębiorstwo małe, więc nie posiada swojego działu IT. Za zakup oprogramowania odpowiada szef J. Kowalski, który nie zna się na komputerach. 90 Wojciech Rakszawski Slajd 1 Wiadomo już na starcie, że informacje o wirusach, crackerach i spamie pan Jan zaszereguje gdzieś pomiędzy mitologią grecką a „Władcą pierścieni.” Pokiwa trochę głową, zerknie na slajdy takie jak slajd 1 (przedstawiający schemat ataku na firmę), na koniec podziękuje i zapomni o naszej wizycie. Spróbujmy sprawić, by pan Jan choć trochę zrozumiał, na czym polega niebezpieczeństwo i co on może zrobić, by się ochronić. Najlepszym pomysłem wydaje się prezentacja krótkich filmików, pokazujących, jak będzie rósł poziom bezpieczeństwa przy zakupie kolejnych produktów z naszej linii. Tworzenie animacji promocyjnej [6] Pierwsze kroki – modelowanie komputerów Zaczynamy praktycznie od pustej sceny, na której znajduje się tylko kamera, źródło światła i sześcian. Zmieniamy układ okien, wstawiamy kratownicę (spacja->add>Latice) i z pomocą śledzenia (Ctrl+T) celujemy na nią kamerę. Następnie za pomocą operacji: przesuwania, skalowania i wytłaczania, zmieniamy sześcian w coś, co może symbolizować firmowy serwer. Na koniec robimy kilka klonów serwera. Teraz należy stworzyć uniwersalny symbol internetu, czyli chmurkę. Najlepszy może się tu okazać cylinder. Wstawiamy kolejny sześcian i zmieniamy go w prostopadłościan, który będzie symbolizować firewall. Tworzymy też kilka (o jeden mniej niż serwerów) klonów Blender a wizerunek i reklama firmy 91 Slajd 2 pusta scena Slajd 3 pierwsze obiekty płonących ścian. Ostatni dodawany sześcian zmieniamy w monitor, który zagra rolę maszyny crackera. 92 Wojciech Rakszawski Slajd 4 wszystkie maszyny Jak proste są krzywe – tworzenie kabli za pomocą krzywych Pozostało nam połączyć maszyny skrętką. Dobry efekt można uzyskać za pomocą krzywych. Wstawiamy więc kilka takich krzywych i wyznaczamy za ich pomocą przebieg kabli. Jeśli jesteśmy zadowoleni z efektu, robimy kopię krzywych i umieszczamy je w innej warstwie – nie są w tej chwili potrzebne. Należy dodać jeszcze jedną krzywą zamkniętą, która będzie miała kształt przekroju kabla. Na koniec wykorzystujemy technikę „powlekania”. Dzięki tej sztuczce, za pomocą kilku kliknięć myszki, możemy stworzyć kilometry kabli, które będą miały taki sam układ, jak stworzone krzywe. Wstawiamy sferę, symbolizującą pakiet danych. Skalujemy ją tak, by była niewiele większa od przekroju kabla. Należy stworzyć jeszcze dwie kopie kulki, tak aby w sumie mieć reprezentację: pakietu „próby włamu”, odmowy dostępu oraz pełnego dostępu i przesyłania poufnych danych. W tym momencie wszystkie obiekty są gotowe. Blender a wizerunek i reklama firmy Slajd 5 razem z kablami Slajd 6 oto pakiet 93 94 Wojciech Rakszawski „Chodź, pomaluj mój świat” – krótko o materiałach i teksturach Mając już całkiem niezłą bazę dla animacji, należy ubarwić scenę. Większość obiektów będzie jednokolorowa, więc edycja sprowadzi się do wybrania materiału (F5), dodania go do konkretnego obiektu, a następnie zmiany koloru (oraz opcjonalnie nazwy) materiału i przejścia do kolejnego obiektu. W tym miejscu ujawnią się zalety klonowania, o których wspomniałem wyżej: wystarczy pokryć materiałem jeden obiekt, a reszta klonów przybierze takie same barwy. Dzieje się tak, ponieważ materiał jest przypisywany do siatki, nie zaś do obiektu. Ja dobrałem kolory takie, jak na poniższym przykładzie. Dla lepszego efektu można pokryć płonące ściany teksturą. Wystarczy, korzystając z menu materiału, dodać teksturę, przejść do menu tekstury (F6) i podać ścieżkę do odpowiedniego pliku .jpeg, .gif, czy innych, podobnych formatów. Podobnie postąpimy z ekranem hakera, dodając mu piracką banderę. Tu ważna informacja: w oknach z widokiem 3D widać tylko kolor materiałów. Program pomija wszelkie tekstury, odbicia, przeźroczystość i inne wodotryski, bo dzięki temu może pracować płynnie, nawet na wolniejszych maszynach. Programiści przygotowali w zamian przydatną opcję, kombinacja Shift+P otwiera okno „podglądu renderera”, które pozwala podejrzeć, jak będzie wyglądał efekt renderingu fragmentu sceny, który w danym momencie wskażemy. złej baletnicy. . . – dodawanie ruchu do animacji Nadszedł czas na końcowy etap tworzenia animacji – dodanie ruchu. W tym miejscu przydadzą się kopie krzywych, które odłożyliśmy wcześniej do innej warstwy. Wykorzystamy je jako tory ruchu dla naszych kulek-pakietów. Dzięki temu zabiegowi zaoszczędzimy sporo pracy przy edycji ruchu obiektów, a wynik będzie bardzo estetyczny. Blender a wizerunek i reklama firmy 95 Slajd 7 pokolorowane i oteksturowane Napotkamy w tym miejscu na niewielką komplikację: krzywa może być tylko jednym torem ruchu naraz. Powoduje ona poważne konsekwencje – do jednej krzywej można przypisać tylko obiekty lecące w jednym kierunku, razem i na dodatek naraz. By ominąć problem, najprościej będzie wykonać kilka kopii danej krzywej, a do każdej z nich przypisać jedną kulę-pakiet. Kabel od hakera do sieci będzie wymagał utworzenia trzech kopii toru, a tory z sieci do serwera (przechodzące przez płonące ściany) – dwie. Do każdego toru podpinamy pakiet jednego rodzaju. Dokonujemy tego za pomocą klawiszy Ctrl+P i wyboru Follow Path. Poniższa ilustracja przedstawia ostateczny układ krzywych i pakietów. Krzywe zostały ustawione jedna nad drugą dla większej czytelności. W końcowej animacji zostaną nałożone na siebie. Ostatnią czynnością będzie edycja krzywych IPO, odpowiedzialnych za animację po ścieżce. Wystarczy, że w oknie edycji IPO zaznaczymy krzywą (patrz: prawa strona slajdu nr 8), a następnie w pasku na dole, w pierwszym menu typu box, zmienimy wartość z Object na Path i klikniemy gdziekolwiek w obrębie okna LKM z wciśniętym 96 Wojciech Rakszawski Slajd 8 ustawienie pakietów na torach ruchu klawiszem Ctrl. Dodamy w ten sposób krzywą IPO, odpowiadającą za położenie obiektu na torze w danym momencie animacji. Teraz wystarczy wejść w tryb edycji krzywej klawiszem Tab, dodać drugi punkt (Ctrl+LPM) i ustawić te punkty tak, by animowany pakiet zaczynał i kończył ruch w odpowiednich momentach i miejscach. Dla lepszego efektu (brak przyspieszania na początku i zwalniania na końcu ruchu pakietu), należy zaznaczyć oba wierzchołki krzywej i wcisnąć klawisz V. To sprawi, że pakiet będzie „zachowywał się” bardziej wiarygodnie. Końcowy efekt animacji mógłby być podobny do poniższego. Światła! Kamera! Akcja! – rendering animacji od kuchni Teraz wykonamy część, która niejednej maszynie o dużej mocy obliczeniowej da popalić: rendering całej animacji. Zanim to nastąpi, dokonujemy odpowiednich zmian w menu renderingu (F10). Najważniejsze, by określić format wyjściowy, klatkę początku i końca animacji, a także katalog, do którego zostanie zapisany końcowy efekt. Formaty, które możemy wybrać do zapisu animacji, to na przykład: Blender a wizerunek i reklama firmy 97 Slajd 9 pojedyncza klatka animacji FFMpeg, AVI JPEG, AVI RAW czy też JPEG, GIF, PNG, TARGA (TGA) czy parę innych. W tym drugim przypadku otrzymamy serię pojedynczych klatek, które da się złożyć w animację w Blenderze lub innym programie. Osobiście skłaniam się ku drugiemu rozwiązaniu, ponieważ przy średnio złożonej klatce rendering trwa zazwyczaj kilkanaście sekund (choć może dochodzić nawet do kilku godzin). Pamiętajmy, że każde 10 sekund filmu to przy standardowych ustawieniach około 250 klatek. W zależności od tego, jak bardzo złożony jest materiał źródłowy, możemy spodziewać się od kilku godzin do nawet kilku dni pełnego obciążenia maszyny. W takiej sytuacji o awarię nietrudno. Zapisywanie każdej klatki animacji w statycznym obrazie sprawi, że w przypadku awarii zasilania stracimy tylko jedną, ostatnio renderowaną klatkę. Daje to sporą oszczędność czasu i nerwów. Myślę tu głównie o osobach, które – tak jak ja, używają do celów renderingu prywatnego 98 Wojciech Rakszawski komputera. Ponowny rozruch maszyny zajmuje zdecydowanie mniej czasu, niż ponowne przeliczanie wszystkich klatek od początku. No i zrobione! Myślę że po takiej prezentacji problemu, pan Jan przychylniej spojrzy na ofertę naszej firmy i, być może, na zakupie firewalla się nie skończy. Na podobnej zasadzie można stworzyć proste intro dla znaku towarowego swojej firmy, bądź dla innych, promocyjnych celów. W materiale celowo nie poruszyłem kwestii wykorzystania silnika gier Blendera do tworzenia prezentacji, ponieważ tajniki tej części programu poznawałem dopiero podczas pisania niniejszego tekstu. Literatura: [1] http://www.blender.org [2] http://www.tdt3d.be/articles_viewer.php?art_id=99 [3] http://wiki.cgsociety.org/index.php/Comparison_of_3d_tools [4] http://plumiferos.com/wiki/index.php/Main_Page [5] http://en.wikipedia.org/wiki/Plum%C3%ADferos [6] Blender 2.3. Oficjalny podręcznik; Ton Roosendaal, Stefano Selleri, Helion, Gliwice 2005