My title - Łukasz Papiewski
Transkrypt
My title - Łukasz Papiewski
POLITECHNIKA ŁÓDZKA DMCS Wprowadzenie do architektury mainframe: Komputer IBM z800 w Katedrze Informatyki Stosowanej Łukasz Papiewski PRACA DYPLOMOWA wykonana pod kierunkiem dr Macieja Szmita Łódź 2010 Spis treści Wstęp Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Układ pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 1 Mainframe 1.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Procesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Pamięć . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Dysk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Wirtalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Mainframe IBM z800 . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Administracja mainframem . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Support Element . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Instalowanie systemu operacyjnego za pomocą SE Workplace 1.5.3 HMC - Hardware Management Console . . . . . . . . . . . . 1.5.4 Logowanie do SE . . . . . . . . . . . . . . . . . . . . . . . . 1.6 System Linux na mainframie . . . . . . . . . . . . . . . . . . . . . . 1.6.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.2 Przebieg instalacji . . . . . . . . . . . . . . . . . . . . . . . 1.7 Hercules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8 Instalacja MVS 3.8J na emulatorze Hercules . . . . . . . . . . . . . 1.8.1 Licencja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 7 8 8 11 15 15 17 18 20 20 20 21 23 24 24 25 2 Mainframe jako serwer szachowy 2.1 Przegląd dostępnych serwerów szachowych . . . 2.1.1 Pierwsza linia serwera FICS . . . . . . . 2.1.2 Wersja A. Tridgella serwera FICS . . . . 2.1.3 Wersja Chessd serwera FICS . . . . . . . 2.1.4 Analiza bazy danych serwera Chessd . . 2.2 Użytkowanie serwera ICS . . . . . . . . . . . . . 2.2.1 Polecenia użytkownika . . . . . . . . . . 2.2.2 Polecenia administratora . . . . . . . . . 2.2.3 Organizowanie terniejów na serwerze ICS 2.3 Informacje dodatkowe . . . . . . . . . . . . . . 2.3.1 PGN . . . . . . . . . . . . . . . . . . . . 2.3.2 Ranking szachowy ELO . . . . . . . . . 2.3.3 Ranking szachowy Glicko . . . . . . . . . 2.4 Silniki szachowe . . . . . . . . . . . . . . . . . . 2.4.1 Program szachowy - Crafty . . . . . . . 2.4.2 Program szachowy Stockfish . . . . . . . 2.5 Opis dodatkowych wymaganych programów . . 2.5.1 Polyglot . . . . . . . . . . . . . . . . . . 2.5.2 Winboard . . . . . . . . . . . . . . . . . 2.5.3 Dekoder różnicy czasu serwera ICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 34 35 38 42 49 49 52 53 56 56 57 59 60 60 62 63 63 64 65 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Implementacja 3.1 Komputery PC jako silniki szachowe . . . . . . . . . . . . 3.2 Automatyzacja zadań serwera Chessd . . . . . . . . . . . . 3.3 Implementacja skryptów dla silników szachowych . . . . . 3.4 Implementacja strony internetowej serwera . . . . . . . . . 3.4.1 Projekt strony w Zend Framework . . . . . . . . . 3.4.2 Analiza bazy danych . . . . . . . . . . . . . . . . . 3.4.3 Opracowany moduł chessd . . . . . . . . . . . . . . 3.4.4 Dodatkowe funkcje . . . . . . . . . . . . . . . . . . 3.5 Testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Test przy pomocy serwera szachowego . . . . . . . 3.5.2 Testy procesora przy pomocy programu szachowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 67 67 69 70 70 74 74 79 81 81 81 Zakończenie 84 Załącznik 1. Literatura 85 Załącznik 2. Spis kodów źródłowych 86 Załącznik 3. Spis rysunków 86 Załącznik 4. Spis tablic 87 Załącznik 5. Spis wydruków 87 Załącznik 6. Spis terminów 88 Załącznik 7. Wykaz elementów konsoli HMC Workplace 93 Załącznik 8. Wykaz elementów konfiguracyjnych SE Workplace 97 Załącznik 9. Log z instalacji MVS 3.8J 101 3 Wstęp W 2010 r KIS Politechnika Łódzka otrzymała od firmy A. i Z. Maryniak CPU-Service komputer IBM z800. Został on przy współpracy z sekcją mainframe PTI uruchomiony i skonfigurowany do pracy z macierzą dyskową. Niniejsza praca przedstawia opis architektury mainframe, a także przykład wykorzystania tego komputera. Dodatkowo opisano instalację systemu MVS 3.8j na emulatorze Hercules, który użyty był w czasie i przed rozpoczęciem omawianego projektu. Cel pracy Celem pracy była instalacja i konfiguracja komputera z800 w KIS PŁ oraz jego wykorzystanie jako serwera szachowego. Układ pracy Praca podzielona jest na cztery rozdziały: pierwszy dotyczy architektury mainframe oraz sprzętu; drugi analizuje zagadnienia potrzebne do realizacji projektu serwera szachowego; trzeci przedstawia zastosowane rozwiązanie; czwarty prezentuje przeprowadzone testy. Rozdział pierwszy składa się z wstępnej analizy mainframe’ów wraz z przedstawieniem aspektów tej architektury, obsługi komputera IBM z800 i dodatkowego sprzętu, instalacji systemu operacyjnego na emulatorze oraz mainframie. Rozdział drugi dotyczy zagadnień związanych z implementacją serwera programów szachowych, jako praktycznego zastosowania i wykorzystanie zdobytej wiedzy o mainframe’ach. Wyszczególnione tu zostały istniejące rozwiązania oraz omówione oprogramowanie jakie można wykorzystać. Opisane zostały dostępne serwery szachowe wraz z instalacją. Podjęta została analiza bazy danych serwera chessd wykorzystanego w projekcie. Rozdział trzeci opisuje proces implementacji projektu. Ukazana jest strona internetowa, znajdująca się na serwerze Apache’a na komputerze mainframe, zaprogramowana przy pomocy narzędzia Zend. Opracowano moduł dla tego frameworka oparty o wcześniejszą analizę serwera szachowego. Rozdział czwarty prezentuje przeprowadzone testy wydajności mocy procesora opartych na wydajności działania silników szachowych. Podziękowania Serdecznie dziękuję Panom: Zbigniewowi Maryniakowi, prezesowi Mainframe sp. z.o.o. oraz Grzegorzowi Plucińskiemu - przewodniczącemu Sekcji Mainframe PTI za okazaną pomoc i wsparcie podczas realizacji niniejszej pracy. 4 Rozdział 1 1.1 Mainframe Historia (według: [3, 4, 5]) Pierwszy komputer typu mainframe, IBM 701 (de facto pierwszy komputer IBM-a), powstał w roku 1953. Posiadał możliwości obliczeniowe w przybliżeniu równe 14000 instrukcji na sekundę. Ten historyczny mainframe składał się z kilku żelaznych szafek zawierających urządzenia peryferyjne takie jak: układy zasilania, dyski, czytniki kart, drukarki itp. Główna z nich zawierała układy dokonujące różnorakich obliczeń i była nazywana main frame - stąd też przyjęła się nazwa tego typu maszyn. Następcą linii 700 (opartej na lampach próżniowych) była seria 7000 wykonana w technologii tranzystorowej. W latach sześćdziesiątych istniało wiele różnorakich systemów komputerów dedykowanych dla specyficznych zastosowań. Niektóre były zoptymalizowane np. dla bankowości, inne do rozwiązywania problemów inżynieryjnych, a jeszcze inne pomagały naukowcom w złożonych obliczeniach. W tym czasie około 80 procent kosztów dotyczyło sprzętu i aby efektywnie wykorzystywać zasoby sprzętowe często wymagane było przenoszenie aplikacji na inną architekturę. Z związku z rosnącym zapotrzebowaniem na taką funkcjonalność Gene Amdahl, Fred Brook i Gerry Blaauw zaprojektowali i zaimplementowali architekturę IBM System/360 1 . Podstawą dla tej architektury była idea, że specyfikacja działania dowolnego komputera może być przedstawiona w formie trzech operacji: pobierz dane, dokonaj obliczeń, zapisz dane. Owocem tych prac było pojawienie się w 1964 komputera IBM S/360. IBM jako producent komputerów mainframe posiada około 90% udziału rynkowego w sprzedaży (dane z roku 2010). Sama nazwa mainframe odnosi się do urządzeń kompatybilnych z architekturą S/360. Wszystkie następujące po S/360 architektury są wstecznie kompatybilne, co oznacza, że aplikacje napisane dla wcześniejszych modeli mogą nadal bez przeszkód być używane na nowszych. IBM System Z jest obecnie produkowanym mainframem. Jest to seria komputerów architektury Z (z/Architecture). Wcześniejsza nazwa tej serii to IBM eServer zSeries. Poniżej przedstawiono wykaz architektur komputerów mainframe2 : • System/360, • System/370, • S/370-XA, • ESA/370, • ESA/390 (ARCHLVL 1), 1 Numer 360 w IBM System/360 oznaczał 360 stopniowe wykorzystanie tej architektury. System/360 jest zarówno nazwą mainframe’a jak i architektury (podobnie jak System/370). S/360 jest dopuszczalnym i często stosowanym skrótem oznaczającym System/360 (podobnie jak i nazwa S/370). 2 Źródło http://en.wikipedia.org/wiki/IBM System Z, odnośnik sprawdzony 2010 X. 5 • z/Architecture 1 (ARCHLVL 2), • z/Architecture 2 (ARCHLVL 3). 1.2 Charakterystyka (według: [11]) Architektura S/360 bazuje na modelu komputera von Neumanna, czyli: • procesor jest odpowiedzialny za wykonywanie instrukcji, • pamięć zawiera dane, • urządzenia wejścia/wyjścia komunikują się z urządzeniami zewnętrznymi. 1.2.1 Procesor W architekturze S/360 procesor zapewnia integralność danych oraz separację pracy. Integralność danych oznacza, że instrukcja w razie błędnego wykonania będzie odpowiednio obsłużona i ewentualnie poprawiona. Separacja pracy natomiast, że oddzielone zostaną zasoby systemowe od zasobów użytkownika. Poprzedziło to takie późniejsze rozwiązania jak wirtualna pamięć oraz wirtualna przestrzeń adresowania. W specyfikacji S/360 określona jest kolejność, w jakiej mają być wykonywane instrukcje jako NSI (ang. Next Sequential Instruction). Wyjątkami są skok i przerwanie. Statystycznie co piąta instrukcja to skok, dlatego, pomimo prostego modelu, uwzględniono w projekcie procesora dodatkowe mechanizmy optymalizujące. Mainframe’y zostały od początku zaprojektowane aby wspierać wielu użytkowników pracujących równocześnie. Wprowadzona została wielozadaniowość. W przypadku gdy jakiś proces czekał na operację wejścia/wyjścia, zostawały zapisywane zasoby procesora i wykonywana następna instrukcja. Technika ta pozwalała na późniejsze wznowienia zaniechanej operacji, tym samym umożliwiając stałą pracę procesora. Wieloprocesorowość została zaprezentowana wraz z architekturą S/370 w roku 1970. Wraz z pierwszymi modelami IBM System Z pojawiała się także wieloprocesorowość symetryczna3 , w skrócie SMP (ang. Symmetric Multiprocessing). Polega ona na rozkładzie zadania na kilka dostępnych procesorów. Najważniejszym aspektem jest tutaj współczynnik skalowalności określający jak dobrze ten mechanizm funkcjonuje. Zagadnienie ilustruje wykres 1. 3 SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która pozwala na znaczne zwiększenie mocy obliczeniowej systemu komputerowego poprzez wykorzystanie 2 lub więcej procesorów do jednoczesnego wykonywania zadań. 6 Rysunek 1. Skalowalność mocy obliczeniowej minframe’ów. Wykres trzech wartości: liczby procesów (górna oś odciętych), liczby procesorów (dolna oś odciętych), oraz czasu odpowiedzi systemu (oś rzędnych). Przedstawia wydajność skalowania na mainframie: w przypadku ośmiu procesorów i ośmiu procesów czas odpowiedzi jest porównywalnie identyczny z tym dla jednego procesora i jednego procesu. Wraz z dodawaniem zadań czas odpowiedzi wzrasta liniowo, wraz z dodawaniem kolejnych procesorów liniowo maleje. Symetryczność charakteryzuje tu architekturę dobrze skalowalną. Źródło: [11] 1.2.2 Pamięć W trakcie rozwoju architektury mainframe adresowanie pamięci stopniowo zwiększało swoją wartość od jednego do czterech bajtów. Zaimplementowano technikę pamięci wirtualnej oraz stronicowania, zapewniono separację wielu procesów na poziomie przestrzeni adresowania. Jednym z ważniejszych punktów rozwoju mainframe’ów było wprowadzenie pamięci cache4 . W odróżnieniu od innych architektur, tutaj system operacyjny nie musiał już implementować żadnej dodatkowej logiki związanej z zarządzaniem tą pamięcią. Takie zagadnienia jak koherencja (pomiędzy procesorami) była ukryta dla programisty i rozwiązywana sprzętowo, co pozwoliło uzyskać lepszą wydajność. 4 Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach. Na współczesnych procesorach są 2 lub 3 poziomy pamięci cache: L1 (zintegrowana z procesorem), a także L2 i L3 (umieszczone w jednym chipie razem z procesorem, lub na płycie głównej). 7 Tablica 1. Rozwój pamięci operacyjnej w mainframe’ach. Źródło: [11] Architektura Sposób adresowania S/360 24-bitowe adresowanie Model 30 posiadał 64-KB pamięć. pozwala na wykorzystanie Mainframe 360/85 w roki 1969 16MB pamięci był pierwszą maszyną posiadającą cache S/370 24-bitowe adresowanie Model 158 oraz 168 zaprezenpozwala na wykorzystanie towały wieloporcesorowość oraz 16MB pamięci wirtualną pamięć S/390 31-bitowe adresowanie po- Komputery G5 oraz G6 wraz z zwalające na wykorzystanie pamięcią do 32GB 2GB pamięci z/Architecture 64-bitowe adresowanie IBM eServer zSeries 900 posiada 16EB (ExaByte) od 5GB do 64GB pamięci 1.2.3 Przykład zastosowania Dysk Mainframe’y używają kanałów wejścia wyjścia (ang. I/O channels) jako rozwiązania alternatywnego dla szyny wejscia/wyjscia (ang. I/O bus). Każdy kanał jest logiczną jednostką, w skład której wchodzi oddzielny procesor. Zarządza transferem danych pomiędzy pamięcią i urządzeniami zewnętrznymi. 1.3 Wirtalizacja Pod koniec roku 1964 rozpoczęte zostały prace przez Cambridg Scientific Center nad systemem umożliwiającym wirtualizację całego mainframe’a wraz z procesorem i dyskami, umożliwiając tym samym tworzenie wirtualnych maszyn (ang. Virtual Machine5 , VM). W 1972 pojawił się system SVS (Single Virtual Storage) dostarczający 16MB wirtualnego adresowania podzielonego na wszystkie zadania. Sześć miesięcy później ukazał się MVS (Miltiple Virtual Storage) pozwalający aby każdy program mógł używać 16MB przestrzeni adresowania. Także w tym roku został wydany VM/370 - system operacyjny dostarczany razem z modelami S/370, który dzisiaj wyewoluował do systemu z/VM6 . Następnie IBM wprowadził sprzętową wirtulizację w postaci partycjonowania logicznego (ang. Logical Partition7 , LPAR). Dzięki 5 Wirtualna Maszyna (ang. Virtual Machine) odnosi się przede wszystkich do programowego emulowania architektury. Tutaj autor miał na myśli sprzętową emulację, która jest podklasą typów wirtualizacji. 6 z/VM jest to system stworzony przez studentów z MIT, zaadaptowany i rozwijany przez IBM-a. Pozwala użytkownikowi na pracę w własnej maszynie wirtualnej poprzez współdzielenie fizycznych zasobów mainframe takich jak pamięć dyskowa, pamięć RAM, karty sieciowe oraz procesor. Zasoby te zarządzane są przez zarządcę CP (Control Program). 7 LPAR (ang. Logical PARtition) - podzbiór sprzętu związanego z procesorem i systemem operacyjnym. Zawiera takie wydzielone zasoby jak procesor, pamięć oraz urządzenia I/O. Działa niezależnie od innych LPAR’ów które także mogą być wydzielone. 8 temu możliwy stał się podział sprzętu na kilkanaście odrębnych logicznych jednostek wraz z przydzielonymi określonymi zasobami procesora, dysku i pamięci. Sytuację taką uwidacznia schemat przedstawiony na rysunku 2. Rysunek 2. Rozkład obciążenia na poszczególne zasoby systemu. Programy mogą w różnym stopniu obciążać procesor, dysk, pamięć. Dzięki sprawnej organizacji zadań i wirtualizacji można w pełni wykorzystać zasoby systemu. Fakt ten staje wyraźnie istotny przy zastosowaniach biznesowych, gdzie jedna maszyna podzielona jest na setki VM, które w różnym stopniu wykorzystują poszczególne zasoby. Na powyższym rysunku wyszczególniono cztery rodzaje zasobów: procesor wejścia/wyjścia, procesor obliczeniowy, dysk oraz pamięć. Ukazany został rozkład obciążenia typu procesor, pamięć, dysk. Źródło: [10] Często spotykanym podejściem wirtualizacji maszyn nie posiadających sprzętowego wspomagania jest programowa emulacja przy pomocy odpowiednich aplikacji typu Virtual Private Server8 . Zalety wirtualizacji 9 : • Większe wykorzystanie zasobów – pozwala na dynamiczny podział zasobów, dzięki czemu uzyskuje się ich efektywniejsze wykorzystanie, zwłaszcza dla mało przeciążonych urządzeń, które posiadają więcej zasobów niż potrzebują. • Mniejsze koszty zarządzania – zwiększa efektywność personelu poprzez redukcję fizycznych zasobów, które muszą być obsługiwane. Upraszcza zarządzanie zadaniami poprzez ich automatyzacje, wszystko jest bardziej scentralizowane. • Zwiększona elastyczność – pozwala włączać zasoby i dynamicznie je konfigurować, co jest bardzo przydatne w rozwiązaniach biznesowych, gdzie potrzeby bardzo szybko się zmieniają. • Zwiększone bezpieczeństwo – pozwala na separację maszyn od siebie, co nie jest możliwe przy prostych mechanizmach współdzielenia. Dostarcza również kontrolę nad dostępem do danych i urządzeń. Każda wirtualna maszyna może być kompletnie odizolowana od 8 VPS (ang. Virtual Private Server) - jest to podział maszyny, jaką jest serwer, na kilka mniejszych, wirtualnych. VPS umożliwia pełny dostęp do konta root. Do zarządzania VPS-ami najczęściej wykorzystuje się oprogramowanie Xen, VMware, FreeVPS, Virtuozzo, OpenVZ. 9 Według http://en.wikipedia.org/wiki/IBM System Z, sprawdzone X 2010. 9 głównego systemu i innych wirtualnych maszyn. Jeśli jedna maszyna zawiedzie lub zostanie zaatakowana nie wpływa to na pozostałe maszyny. Wirtualizacja chroni dane i zapewnia komunikację aplikacji tylko ze skonfigurowanymi połączeniami sieciowymi, ustalonymi przez operatora. • Większa dostępność – pozwala na fizyczne zmiany zasobów sprzętowych bez wiedzy użytkownika. • Zwiększona skalowalność – partycjonowanie i agregacja wirtualnych zasobów, polegającej na zmniejszaniu i zwiększaniu zasobów dla maszyny. Można skalować zasobami bez zmiany jakichkolwiek zasobów fizycznych. • Interoperacyjność i inwestycja w bezpieczeństwo – wirtualne zasoby mogą być kompatybilne z interfejsami i protokołami które są niedostępne dla ukrytych fizycznych zasobów. Obecnie komputery tego typu są komputerami najwyższej klasy i wysokiej ceny. Ich scentralizowana właściwość pozwala na uniknięcie dodatkowych kosztów związanych z energią oraz personelem, a także pozwala na sprawne wykorzystanie sprzętu w całości (zobacz Rysunek 2). Poniżej wypunktowano wykaz mainframów IBM serii Z: • IBM zSeries 900 - dla dużych firm, urzędów, 2000 r., • IBM zSeries 800 – tańszy, mainframe klasy podstawowej, 2002 r., • IBM zSeries 990 – następca rozbudowanych modeli z900, • IBM zSeries 890 - następca z800 oraz mniejszych modeli z900 (2004 r.), • IBM System z9 Enterprise Class, 2005 r., • IBM System z9 Business Class, 2006 r., • IBM System z10 Enterprise Class, 2008 r., • IBM System z10 Business Class, 2008 r. Specyfikę architektury mainframe mogą ukazywać benchmarki definiowane prze organizację Transaction Processing Performance Council10 (TPC) dla systemów typu Online Transaction Processing11 (OLTP). Przekładają się one na jakość usług działalności wykorzystujących dużą i dynamiczną bazę danych, często o znaczeniu narodowym, gdzie klientami są miliony lub miliardy ludzi na świecie (zobacz [8]). Dla przykładu można tu podać: rezerwację biletów lotniczych, przelewy bankowe, handel i wymiana towarowa, giełdy, raporty kredytowe czy serwisy rządowe. 10 Transaction Processing Performance Council (TPC) jest organizacją typu non-profit założoną w 1985 w celu zdefiniowania testów wydajnościowych w dziedzinie przetwarzania danych. Organizacja ta publikuje wyniki testów, które dzięki dobrze zdefiniowanej metodyce są uważane za obiektywne i weryfikowalne. 11 OLTP (ang. Online Transaction Processing) – kategoria aplikacji klient-serwer dotyczących baz danych w ramach bieżącego przetwarzania transakcji obejmujących takie zastosowania jak systemy rezerwacji, obsługa punktów sprzedaży, systemy śledzące itp. W systemach tych klient współpracuje z serwerem transakcji, zamiast z serwerem bazy danych. 10 1.4 Mainframe IBM z800 W roku 2000 został zaprezentowany wysoce wydajny w porównaniu do poprzednich wersji, system IBM z900. Następnie pojawiła się tańsza wersja z800 oferująca bardzo dobry współczynnik ceny do jakości. Platforma ta została oznaczona numerem 2066. Ta seria posiada pięć 64-bitowych jednostek procesora (PUs - Processor Units) w tym jedna do obsługi I/O oraz maksymalnie 3 dedykowane dla Linuksa (Integrated Facility for Linux1213 - IFL) . Są one zawarte w jednym bądź kliku klastrach procesora o nazwie Central Processing Complex14 (CPC). Wyposażone są w szynę wejścia/wyjścia o prędkości 6GB/s. Tabela 2 przedstawia różnice w poszczególnych modelach serii 2066 komputera z800. Jednostka MSU jest angielskim skrótem od Milion Service Units, co informuje o milionach równoległych usługach na sekundę, nie wprost przekłada się na miliony instrukcji na sekundę (ang. Milion Instruction Per Second, MIPS). Tablica 2. Wykaz modeli mainframe’a zSeries 800 (model 2066)15 . Model OE1 OA1 OB1 OC1 OX2 OO1 OA2 OO2 OO3 OO4 0LF 0LF 0LF 0LF MIPS w/IFL 41 80 115 143 160 192 259 350 499 600 3605 192 3606 350 3607 499 3608 636 MSU 7 13 20 25 28 32 44 60 84 108 CPCs koszt ($) 1+1 IFL 1 1 1 2 1 2 2 3 4 1 2 3 4 3,500.00 2,350.00 3,300.00 3,800.00 4,450.00 4,830.00 5,700.00 7,500.00 10,000.00 12,900.00 410,000 560,000 710,000 860,000 12 Linux jest rodziną uniksopodobnych systemów operacyjnych opartych na jądrze GNU/Linux. Linux jest jednym z przykładów wolnego i otwartego oprogramowania - jego kod źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany 13 IFL (ang. Integrated Facility for Linux) - jest to udostępniona przez firmę IBM, tańsza wersja procesora CPs (prcesora ogólnego przeznaczenia) na który można instalować system operacyjny Linuks. 14 CPC (ang. Central Processing Complex) to główna część mainframe’a zajmująca się wykonywaniem operacji - składają się na nią procesory ogólnego zastosowania, procesory specjalistyczne oraz dodatkowy osprzęt m.in. odpowiedzialny za operacje wejścia/wyjścia. 11 W Katedrze Informatyki Stosowanej znajduje się mainframe z800 (dostarczony dzięki uprzejmości firmy CPU Service). Ze stanowiska SE (Podrozdział 1.5.1) można odczytać w zakładce z klastrem (CPs), jaka jest specyfikacja danego mainframe’a, w tym jaki jest jego model (Wydruk 1). P0022FA Details : Instance Of Information CP Status : Operating CHPID Status : Exceptions Group: CPC IOCDS identifier : A0 IOCDS name linuxy d Activation profile : default Last used profile : not set vi activate Service Status : Disabled Maximum CPs:1 Maximum ICFPs: 0 Lockout disruptive tasks: Yes/No Dual AC power maintance : Fully Redundant Alternate SE Status : Operating Product Information Machine type : model 002066 - 0A1 Machine Serial : 83 -0022Faa Macine sequence : 000000022faa Plant of manufacture: 83 Manufacturer: IBM CPC Serial : 00830022ffaa CPC location : a20b CPC identifier : 00 Wydruk 1. Informacje o klastrze procesorów komputera z800 w KIS. Na podstawie tabeli z dostępnymi modelami tej serii komputerów IBM-a (patrz Tabela 2) można dalej wnioskować o parametrach tej maszyny: moc obliczeniowa 80 MIPS-ów, jeden klaster procesorów, orientacyjny koszt ok. 7000zł. 12 Przy obliczaniu wydajności operacji na procesorze w BogoMIPS16 system Linux podaje następujące wartości: 104.65 dla LPAR 1 oraz 276.88 dla LPAR2 i LPAR3. Dodatkowym wyposażeniem jest macierz typu 3390 połączona światłowodem ESCON17 . Rysunek 3. Widok na IBM z800 z dwoma zamkniętymi laptopami służącymi do administracji. Źródło: opracowanie własne Test macierzy dyskowej W pierwszej kolejności test został wykonany programem dbench. Umożliwiło to określenie jaka jest docelowa orientacyjna prędkość dysku. Jako parametr należało wpisać ilość procesów (przy bardzo dużej ilości procesów dochodziło do zawieszenia programu). 16 BogoMIPS to jednostka testu wydajności procesora, wykonywanego przez jądro systemu operacyjnego Linux podczas jego startu, używany do kalibracji wewnętrznej pętli opóźniającej (ang. busy-loop). Nazwa powstała ze złączenia ang. słowa bogus (nieprawdziwy) i skrótu MIPS. 17 ESCON (ang. Enterprise Systems Connection) - jest łączem z dyskiem lub urządzeniami peryferyjnymi, opartym na łączu światłowodowym, pół dupleksowe, szeregowy interfejs, oryginalne prędkość 10 MB/s, później zwiększona do 17Mbyte/s, maksymalna odległość: 43 kilometry. 13 kis081:/home/papi# dbench 999 dbench version 3.04 - Copyright Andrew Tridgell 1999-2004 Running for 600 seconds with load ’/usr/share/dbench/client.txt’ and minimum warmup 120 999 clients started 999 97 17.43 MB/sec warmup 94 sec 999 97 17.24 MB/sec warmup 95 sec 999 97 17.07 MB/sec warmup 96 sec 999 98 16.91 MB/sec warmup 97 sec 999 98 16.73 MB/sec warmup 98 sec 999 98 16.67 MB/sec warmup 99 sec 999 99 16.99 MB/sec warmup 101 sec 999 100 17.24 MB/sec warmup 103 sec 999 101 17.09 MB/sec warmup 104 sec 999 101 16.93 MB/sec warmup 105 sec 999 101 16.79 MB/sec warmup 106 sec 999 101 16.72 MB/sec warmup 107 sec 999 101 16.60 MB/sec warmup 108 sec 999 101 16.62 MB/sec warmup 109 sec 999 103 16.89 MB/sec warmup 112 sec 999 104 17.00 MB/sec warmup 113 sec 999 104 16.85 MB/sec warmup 114 sec Program Iozone pozwolił na bardzo szczegółową analizę dysku oraz mechanizmu buforowania. Zasada testów polegała na badaniu szybkości operacji wejścia/wyjścia zależności od wielkości pliku i zapisywanego rekordu. W parametrach należało podać wartość pliku większą od wartości pamięci aby uwzględnić sytuację, kiedy dysk pracuje bez bufora pamięci. ./iozone -Rab file.wks Tak wykonana komenda dokonuje pomiaru z pominięciem testów dla względnie małych rekordów w porównaniu z całym plikiem (uwidaczniać się to może na wykresach w postaci wartości zerowych w prawym dolnym rogu). Dodać należy, że parametry te są po części związane z systemem operacyjnym, przez co wiele czynników systemowych (sterowniki, obsługa pamięci, procesora) może mieć wpływ na wyniki testów. Wykres wynikowy ukazuje szybkość operacji odczytu na podstawie istniejących plików o różnych rozmiarach. 14 Rysunek 4. Prędkość odczytu macierzy dyskowej badanego mainframe’a wykonana programem Iozone. Pomiar ukazuje szybkość odczytu rekordu przy pomocy zadanego rekordu. Oś odciętych dolna to poszczególne potęgi liczby dwa będące całkowitym rozmiarem pliku, oś odciętych po prawej stronie reprezentuje rozmiar rekordu, a oś rzędnych prędkość zapisu w kilo bajtach na sekundę. Na podstawie tego pomiaru można stwierdzić, że prędkość macierzy dyskowej wynosi ok 16 MB/s, co świadczy o bardzo słabej, w porównaniu nawet do domowego PC, macierzy dyskowej. Z drugiej strony jednak odpowiednia dystrybucja danych dysku, przy wykorzystaniu pamięci RAM oraz mechanizmów buforowania, pozwala w większości uzyskać bardzo dobre wartości. Gładkość wykresu świadczy o jednakowej wartości niezależnie od rekordu i pliku co w przypadku tego typu testów jest ważne, gdyż obrazuje, że system jest przystosowany do szerokiej gamy zastosowań, a nie wspiera dobrze tylko określony zakres operacji (często systemy są dostosowywane do wąskiego przedziału operacji np. bazodanowych kosztem operacji innego typu, narażając się tym samym na możliwe spadki wydajności i mniejszą uniwersalność). 1.5 Administracja mainframem 1.5.1 Support Element (według: [1]) Support Elements (SEs) są laptopami, znajdującymi się za przednią klapą komputera typu mainframe (Rysunek 5). Pierwszy z nich dla odróżnienia nazywany jest Primary SE, drugi pełni rolę urządzenia zastępczego. Na SE można w pełni administrować i konfigurować mainframem. Nazwa programu administracyjnego znajdującego się na każdym z laptopów to Primary Support Element Workplace. Za pośrednictwem tej graficznej aplikacji administruje się mainframem oraz konfiguruje jego procesory. 15 Zadaniem SE Workplace jest: • zarządzanie odczytem urządzeń peryferyjnych (w tym IPL), • konfiguracja I/O, • zmiana ustawień i podział LPAR, • aktualizowanie mikrokodu. SE Workplace składa się z trzech obszarów: View Area, Task Area oraz Work Area (Rysunek 5). Kolor zielony identyfikuje aktywne połączenie do mainframe, czerwony natomiast, że takowego nie ma lub, że występują jakieś błędy. Na górze jest View Area reprezentująca grupy obiektów, które składają się na system. Task Area znajduje się po prawej stronie i zawiera ikony reprezentujące operacje jakie można wykonywać na obiektach. Work Area w dolnej lewej części wyświetla obiekty lub grupy, postępujące zadania, listy zadań czy pomocnicze informacje. Jest ściśle związana z opcjami w górnym panelu - w zależności od zaznaczonego elementu w View Area zmienia się widok Work Area. Aby wykonać czynność na obiekcie przeciągamy obiekt z pola Work Area na wybraną ikonę z Task Area. Można również to samo wykonać dwukrotnie klikając w pierwszej kolejności na zadanie w Task Area, po czym pojawi się okno wyboru obiektu. 18 CPC Images - wyświetla aktualne skonfigurowane obrazy w klastrze procesora, w zależności od trybu: dla LPAR widoczne będą partycje a dla non-LPAR (tryb oparty na systemie z/VM) będzie wyświetlony system. 18 Pełen opis funkcji można znaleźć w literaturze do rozdziału. Spis wszystkich elementów dla omawianej konsoli uwzględniono w załączniku do tej pracy. 16 Rysunek 5. Support Element Workplace Źródło: opracowanie własne Dokładnie jedna osoba może wykonywać czynności administracyjne SE. Zdalna administracja jest widoczna na ekranie SE. 1.5.2 Instalowanie systemu operacyjnego za pomocą SE Workplace Z obszaru Task List należy wybrać CPC Recovery. Zaktualizuje się okno po prawej stronie z wymagnymi funkcjami. Następnie przechodzimy do widoku dostępnych LPAR-ów poprzez kliknięcie dwa razy na ikonie o nazwie Groups i dalej ikonie Images. Kolejnym etapem jest aktywowanie zadania Load from CD-ROM or Server. Można to zrobić klikając na samym zadaniu dwa razy bądź przenosząc ikonę w wybranym LPAR-em do instalacji na ikonę tego zadania. W obu przypadkach ukaże się okno z polami do uzupełnienia dotyczącymi źródła instalacji. Gdy instalator sytemu znajdzie wymagane pliki rozpocznię się właściwa instalacjia systemu (Rysunek 6). Więcej informacji znajduję się w rozdziale z instalacją systemu Linuks (Podrozdział 1.6) 17 Rysunek 6. SE Workplace - Instalacja Linuksa z zasobów FTP. Źródło: opracowanie własne 1.5.3 HMC - Hardware Management Console (według: [2]) HMC jest komputerem klasy PC wraz z odpowiednim oprogramowaniem, służącym do komunikacji z mainframem. Konsola wykorzystywana jest do podstawowych funkcji związanych z administracją. Komunikacja odbywa się za pośrednictwem sieci LAN oraz głównego stanowiska administracyjnego mainframe’a jakim jest wewnętrzny laptop nazwany Primary SE (Rysunek 7). Rysunek 7. HMC - schemat połączeń 18 Kiedy wykonywane jest zadanie na HMC19 , jest ono przesyłane do SE, stąd dalej inicjowane są zadane operacje konfiguracyjne. HMC umożliwia także bezpośrednie podłączenie się do SE i posiadania szerszego zakresu możliwości administracyjnych. Systemem operacyjnym na stanowisku HMC jest zazwyczaj OS2/Warp dla starszych wersji, bądź Linux dla nowszych. Sam system posiada różne programy a wśród nich HMC Workplace, czyli główny program konfiguracyjny (Rysunek 8). Wraz z kolejnymi wersjami HMC Workplace, zmieniają się graficzne interfejsy tej aplikacji oraz liczba opcji, czy sposoby zarządzania. Opisywana wersja to 1.7.3. Istnieje możliwość zalogowania do SE za pośrednictwem wbudowanej opcji wykorzystującej wirtualny pulpit (ang. Virtual Network Computing20 , VNC). Rysunek 8. Konsola HMC w systemie OS/2. Zielony kolor oznacza aktywne połączenie. Z panelu Views wybrana jest opcja Console Actions, reprezentowana przez ikony w obszarze roboczym (Console Actions Work Area). W obszarze po prawej stronie jest menu wybierane z listy zadań (ang. Task List) Źródło: opracowanie własne. Po uruchomieniu HMC Workplace ukazuje się okno logowania. Występuje kilka poziomów autoryzacji (Wydruk 2) 19 HMC - Hardware Managment Console jest systemem dostarczającym narzędzia administracyjne do planowania, rozbudowywania i zarządzania systemami komputerowymi mainframe’ami IBM-a (definicja z podręcznika elektronicznego http://www.redbooks.ibm.com/redbooks/pdfs/sg247491.pdf str. XIII , odnośnik sprawdzony 31 listopada 2010). 20 VNC (ang. Virtual Network Computing) – system przekazywania obrazu z wirtualnego, bądź fizycznego środowiska graficznego. 19 Operator OPERATOR PASSWORD Advanced Operator ADVANCED PASSWORD System Programmer SYSPROG PASSWORD Access Administrator ACSADMIN PASSWORD Service Representative SERVICE SERVMODE Wydruk 2. Nazwy, kategorie oraz domyślne hasła użytkowników konsoli HMC. Źródło: [2] Zasada użytkowania interfejsu graficznego (ang. Graphical User Interface21 , GUI) jest taka sama jak dla SE (Podrozdział 1.5.1)22 . 1.5.4 Logowanie do SE Jako przykład pracy z HMC zostanie ukazana operacja logowania do SE. Pierwszą czynnością jaką należy wykonać jest poprawne zalogowanie się (z odpowiednim poziomem uprawnień) do HMC. Następnie należy kliknąć na ikonę Defined CPCs. Po tej czynności w obszarze roboczym wyświetlą się zdefiniowane klastry procesorów mainframe’a. Nazwa takiego klastra może być przykładowo reprezentowana ciągiem ’P0022FA’. Kolejnym krokiem jest wybranie z widoku Task List elementu CPC Recovery. Zaktualizuje to listę poleceń w obszarze Taks Area. Po przeciągnięciu ikony z klastrem na Single Object Operations wyświetli się monitu z treścią o kontynuowania polecenia (zobacz poniższy wydruk 3). Odpowiedź twierdząca nawiązuje połączenie z SE i uruchamia na nim Primary Support Element Workplace (Podrozdział 1.5.1). About to establish session with single CPC Console. Do you want to continue with this task? Object names : P0022FA Yes/No Wydruk 3. Tekst okna dialogowego. Źródło: opracowanie własne 1.6 1.6.1 System Linux na mainframie (według: [13, 11]) Historia W roku 1999 IBM i SUSE rozpoczęli pracę, efektem której był w pełni kompatybilny i funkcjonalny Suse Linux Enterprise Server dla linii S/390, wprowadzając tym samym pionierską dystrybucję systemu Linux na mainframe’a. Pierwszym dużym i liczącym się użytkownikiem tego rozwiązania była Telia - skandynawska organizacja telekomunikacyjna. Na początku były problemy z udostępnianiem sterowników na licencji GPL ale później w pełni to rozwiązano udostępniając binarne poprawki w postaci kodu na tej samej licencji. 21 22 GUI (ang. Graphical UserInterface) - termin określający graficzny interfejs użytkownika w aplikacji. Lista wszystkich elementów została umieszczony w dodatku. 20 Aby możliwe było uruchomienie Linuksa na architekturze S/390 potrzebne były poprawki do samego jądra systemu (ok. 2% dodatkowego lub zmienionego kodu). Dotyczyły one przede wszystkim architektury nowego procesora oraz urządzeń. Zostały także wprowadzone niewielkie modyfikację (ok. 0.5%) takich programów jak glibc, gdb, gcc i strace. Zaraz po wprowadzeniu na rynek Linuksa, IBM wprowadził tańszą wersję procesora GPPU23 (ang. General Purpose Processor Unit) o nazwie IFL. Specjalnie dla administratorów Linuksa IBM udostępnił alternatywę systemu z/VM o nazwie Virtual Image Facility, która w założeniu miała ułatwić pracę administratorom systemów Unixowych i pochodnych. Zaprzestano dalszego rozwoju tego systemu gdyż z/VM został łatwo zaadoptowany przez tę społeczność. Aż do 2004 roku udziały SUSE były stuprocentowe, dopóki na rynek nie wszedł RedHat wraz ze swoją wersją Linux Enterprise. W tym roku też SUSE zostało przejęte przez Novela. W 2008 udziały RedHata wynosiły 20 procent. 1.6.2 Przebieg instalacji (według: [13, 9]) W celu rozpoczęcia procesu instalacyjnego trzeba posiadać zmodyfikowaną wersję jądra Linuksa dla architektury mainframe. Architektura jest identyfikowana jako s390 dla 31 bitowej wersji jądra oraz s390x dla 64-bitowej. Wersja 64-bitowa jest wspierana od wersji G7 (Generation 7) systemów mainframe. Jądro dystrybuowane jest w postaci obrazu dla wirtualnego czytnika bądź jako obrazu dla czytnika taśmowego. Wraz z jądrem potrzebny jest plik zawierający podstawowe komendy i strukturę FHS nazywany initrd. Jest to system plików rezydujący przy starcie systemu w RAM-ie, pozwalający na dostęp do powłoki i skonfigurowanie mini-systemu potrzebnego do przygotowania sieci, repozytoriów, konfiguracji i rozpoczęcia właściwego procesu instalacji. Instalację należy rozpocząć z SE jak to zostało pokazane w rozdziale 1.5.2. Następnie po wstępnej konfiguracji interfejsu sieciowego i ustaleniu adresu IP (Rysunek 9) można podłączyć się za pośrednictwem protokołu telnet i kontynuwać instalację Linuksa w terminalu za pośrednictwem standardowego dystrybucyjnego instalatora. 23 GPPU (ang. General Purpose Processor Unit). 21 Rysunek 9. SE Workplace - Instalacja Linuksa. Źródło: opracowanie własne W trakcie instalacji partycja może być niewidoczna dlatego powinna być odpowiednio sformatowana aby została dalej rozpoznana [13, str. 72]. Na wydruku 4 pokazano przebieg tego procesu. 22 /dev # dasdfmt /dev/dasdb Please enter the blocksize of the formatting [4096]: Drive Geometry: 10017 Cylinders * 15 Heads = 150255 Tracks I am going to format the device /dev/dasdb in the following way: Device number of device : 0x6020 Labelling device : yes Disk label : VOL1 Disk identifier : 0X6020 Extent start (trk no) : 0 Extent end (trk no) : 150254 Compatible Disk Layout : yes Blocksize : 4096 --->> ATTENTION! <<--All data of that device will be lost. Type "yes" to continue, no will leave the disk untouched: yes Formatting the device. This may take a while (get yourself a coffee). Wydruk 4. Przebieg formatowania macierzy dyskowej mainframe’a z800. Na końcu procesu instalacji dokonywany jest ponowny rozruch. Proces uruchomienia systemu następuje po przeniesieniu ikony z danym LPAR-em na akcje Load w Task List. 1.7 Hercules (według: [14, 15]) Hercules jest implementacją architektury lini ESA/390 , System/370 oraz z/Architecture. Przeznaczony jest do emulacji sprzętu takich mainframe’ów jak: System/370, System/390 oraz zSeries. Działa pod Linux, Windows i Mac OS X i został wydany na wolnej licencji QPL. Hercules jest emulatorem sprzętu i procesora, nie emuluje natomiast systemu, który musi zostać dostarczony przez użytkownika. Wolnodostępne systemy takie jak OS/360, DOS, DOS/VS , MVS, VM/CMS oraz TSS/370 mogą być instalowane, nowsze takie jak OS/390, z/OS24 , VM/ESA25 i z/VM też są wspierane ale mają legalne restrykcje. Linux/390 jest jest dobrze wspomagany i wiele pracy zostało włożone w sam emulator aby wywindować wydajność pracy tego systemu. Podstawowym wykorzystaniem Herculesa jest emulacja 64-bitowego środowiska dla celów deweloperskich - np. testy kompatybilności kodu lub zgodności programów z SMP (Symmetric 24 z/OS to system dla serii Z stworzony i rozwijany z naciskiem na potrzeby jakości usług dla e-biznesu. VM/ESA jest systemem operacyjnym, zaprojektowanym przez studentów MIT we współpracy z programistami i inżynierami z IBM-a, którego zadaniem jest uruchamianie maszyn wirtualnych, na których dopiero instaluje się systemy operacyjne; ideą projektu jest to, aby każdy użytkownik mógł pracować na własnej maszynie wirtualnej, mimo iż wszystko dzieje się w obrębie jednej maszyny fizycznej), http://www.vm.ibm.com/, http://en.wikipedia.org/wiki/VM/ESA, odnośnik spr. 26 kwi 2009. 25 23 Multiprocessing). Hercules jest bardzo dobrym środowiskiem do nauki obsługi i działania mainframe’ów. Generalnie w postaci konsolowej emuluje on HMC lub SE, na których wykonuję się wszystkie prace związane z zarządzaniem prawdziwym mainframe’em. Niektóre komendy odpowiadają czynnością (np. zmiana płyty) inne poleceniom HMC (np. IPL26 ). Praca na konsoli nie należy do najbardziej przyjaznych użytkownikowi. Aplikacja graficzna odzwierciedlająca interfejs HMC mogłaby tu dość znacząco zwiększyć potencjał dydaktyczny emulatora. Hercules znajduje zastosowaniu w przetwarzaniu programów napisanych stricte dla mainframe’a na komputerach x86 wyposażonych np. w procesory Intel lub AMD. Istnieją podobne komercyjne programy. Sam IBM wspominał w Red Bookach 27 o emulatorze Hercules i sposobie korzystania z tej opcji w razie potrzeby kopii zapasowej całego systemu. Następnie wprowadził własnego klona w postaci emulatora zPDT. Wspomnieć należy w tym miejscu o sporach pomiędzy IBM a małą firmą TurboHercules, dotyczącego komercyjnego wykorzystania zmodyfikowanego emulatora [7]. W roku 2010 IBM oskarżył tę firmę o naruszenie 137 patentów, bezprawną próbę tworzenia rynku tanich usług oraz wykorzystania technologii firmy do nieuczciwego zarabiania. Z punktu marketingowego było to dość niefortunna decyzja, gdyż podważyła wcześniejszą dobrą opinię na temat wspierania przez IBM ruchu wolnego oprogramowania (open-source). 1.8 Instalacja MVS 3.8J na emulatorze Hercules MVS jest kolejnym członkiem rodziny systemów wsadowych (OS/360, OS/VS2). Wspierał zarówno przetwarzanie wsadowe (ang. batch) jak i transakcyjne. Nowym elementem w stosunku do poprzedników było wprowadzenie koncepcji wirtualnej przestrzeni adresowej. Został zastąpiony przez OS/390. 1.8.1 Licencja MVS3.8j jest systemem, którego prawa autorskie należały do IBM-a, ale od niedawna jest udostępniany za darmo i ma na terenie USA ma statut domeny publicznej (ang. public domain). Cytat ze strony hercules.org: „The legal status outside the USA, where something like public domain or software without copyright doesn’t exist, is ćopyrighted software provided at no charge”. (...) But law had been changed over that time, so its not clear if the same legal status applies in your country right now.” W polskim systemie prawa autorskiego termin domena publiczna nie występuje. Całość można natomiast zaliczyć jako freeware lub częściowo open-source, co pozwala na instalowanie i wykorzystywanie kodu i bibliotek dla własnych celów. 26 IPL (ang. Initial Program Load) w terminologii mainframe oznacza odczyt bajtów rozruchowych urządzenia np. dysku, taśmy itp. 27 Red Booki są darmowymi (w odróznieniu od Blue Book) książkach elektronicznych publikowanych przez IBM-a i dostępnych poprzez Internet 24 1.8.2 Instalacja (według: [6]) Instalacja systemu MVS na emulatorze Hercules składa się z serii wykonywanych skryptów JCL28 wykonujących operacje na taśmach instalacyjnych. Potrzebne pliki zostały pobrane ze strony http://www.jaymoseley.com/hercules/download. Lista wymaganych plików (do pobrania także ze strony cbtape.org): • mvsstarter.tgz (6.23 MB) • mvsdist.tgz (15.5 MB) • installmvs.tgz (429 KB) Struktura katalogów W pierwszej kolejności należy przygotować katalog pod instalację MVS3.8j, określony tu zmienną mvsDir. Następnie dodać podkatalogi: tape na taśmy (urządzenia nr 1442), jcs na skrypty języka JCS oraz dasd, w którym będą znajdować się pliki na dyski. Dodatkowo ustawiono zmienną mvsSrc zawierającą adres URL katalogu z rozpakowanymi plikami instalacyjnymi. export mvsDir=/opt/mvs export mvsSrc=http://papiewski.pl/pliki/hercules/mvs/ mkdir $mvsDir; mkdir $mvsDir/tape; mkdir $mvsDir/jcl; mkdir $mvsDir/dasd; Wirtualne dyski Puste dyski generuje się za pomocą polecenia dasdinit: cd $mvsDir/dasd && dasdinit -a -z smp001.3350 dasdinit -a -z mvsres.3350 dasdinit -a -z work02.3350 dasdinit -a -z spool1.3350 dasdinit -a -z page00.3350 3350 3350 3350 3350 3350 smp001 mvsres work02 spool1 page00 && && && && Przełącznik ’-z’ włącza kompresję. Zaoszczędzi to 2GB miejsca na dysku, jednak może spowolnić zapis/odczyt i intensywnie obciążać procesor. 28 Job Control Language - język opisu zadań, jest zbiorem wyrażeń (poleceń), które są przekazywane do systemu aby wykonać program podążając według pewnych instrukcji wyjściowych i wejściowych. Takie wyrażenia przekazują systemowi, gdzie znajdują się odpowiednie wejścia i jak należy przetworzyć owo wejście (uruchomienie programu) i co z rezultatem działania programu. Job pozwala na wykonanie zadania (zadań) w tle pracy systemu. 25 3350 znajduje się wśród grupy numerów oznaczających urządzenia dyskowe typu CKD29 . Skompresowane taśmy AWS mają rozszerzenie ’.het’ zamiast ’.aws’. Obie są kompatybilne z Herculesem. Inicjalizacja dysków polega na zapisaniu w pierwszych bajtach Volume Table of Contents - tabel zawierających informacje o danych: plikach i katalogach (odpowiednik Master Boot Record30 ). Dokonuje się tego za pośrednictwem skryptu JCL, po wcześniejszym wczytaniu taśmy startowej. Wymagana jest w tym miejscu taśma ibcdasdi.het oraz skrypt języka JCL ibcdasdi.00c, mający za zadanie wykonanie odczytanej instrukcji z tejże taśmy. Dalej wykorzystany jest skrypt konfiguracyjny Herculesa ibcdasdi.cnf z odpowiednio ustawionymi urządzeniami np. czytnikiem taśmowym o numerze 3420, czy czytnikiem kart 1442 służącym do odczytu skryptu JCL. mkdir $mvsDir/tape cd $mvsDir/tape; wget -nc $mvsURL/tape/ibcdasdi.het cd $mvsDir && wget -nc $mvsURL/{ibcdasdi.cnf,ibcdasdi.00c} W pliku konfiguracyjnym przełącznik CNSLPORT ustawiony jest domyślnie na port 3270 - to do niego będzie można podłączać się terminalem i wydawać polecenia. Tutaj należy wspomnieć, że połączenie najlepiej wykonać przy pomocy programu emulującego terminal IBM 3270, gdyż różni się on nieznacznie od popularnych terminali konsolowych wykorzystujących VT200. Uruchomienie emulatora: cd $mvsDir && hercules -f ibcdasdi.cnf W tym momencie można już za pośrednictwem telnetu łączyć się z portem 3270 localhosta (lub zdalnie, w zależności gdzie znajduje się serwer). telnet localhost 3270 Aby wszystko przebiegało zgodnie z polityką emulatora Hercules należy najpierw połączyć się telnetem, a potem odczytać bajty rozruchowe danego urządzenia. Prawdopodobnie związane jest to z kwestiami bezpieczeństwa lub po prostu tak to zostało zaprojektowane. Po połączeniu konsoli z emulatora Hercules uruchamiamy urządzenie (ipl) spod adresu 0280. Jest to czytnik taśm z poprzednio skonfigurowaną taśmą: ipl 0280 W terminalu wyświetli się zapytanie o wejściowe komendy, a dokładniej o ich źródło. Odpowiedzią w tym wypadku jest urządzenie typu 1442 o adresie 00c - skrypt z komendami (poprzedzone ewentualnym klawiszem enter), jak pokazano poniżej: 29 Jeden z dwóch rodzajów dysków wykorzystywany przez Herculesa. CKD z ang. Count Key Data, drugi to FBA z ang. Fixed Block Architecture. 30 MBR (ang. Master Boot Record) – główny rekord startowy, czyli umowna struktura zapisana w pierwszym sektorze dysku twardego. Często nazywany też Master Boot Block (pol. główny blok startowy). Zawiera on program rozruchowy oraz główną tablicę partycji (w przypadku dysku twardego – dyskietki zwykle nie posiadają tablicy partycji). 26 #enter input 1442,00c Efekt polecenia: Connected to device 0:0009 IBC105A DEFINE INPUT DEVICE. DASDI 7.80 HHCTE006A Enter input for console device 0009 input=1442,00c DASDI 7.80 SMP001 JOB ’INITIALIZE SMP001 3350 VOLUME’ MSG TODEV=1052,TOADDR=009 DADEF TODEV=3350,TOADDR=148,IPL=NO,VOLID=SMP001,BYPASS=YES VLD NEWVOLID=SMP001,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB. DASDI 7.80 WORK02 JOB ’INITIALIZE WORK02 3350 VOLUME’ MSG TODEV=1052,TOADDR=009 DADEF TODEV=3350,TOADDR=149,IPL=NO,VOLID=WORK02,BYPASS=YES VLD NEWVOLID=WORK02,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB. DASDI 7.80 MVSRES JOB ’INITIALIZE MVSRES 3350 VOLUME’ MSG TODEV=1052,TOADDR=009 DADEF TODEV=3350,TOADDR=14A,IPL=NO,VOLID=MVSRES,BYPASS=YES VLD NEWVOLID=MVSRES,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB. DASDI 7.80 PAGE00 JOB ’INITIALIZE PAGE00 3350 VOLUME’ MSG TODEV=1052,TOADDR=009 DADEF TODEV=3350,TOADDR=14B,IPL=NO,VOLID=PAGE00,BYPASS=YES VLD NEWVOLID=PAGE00,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 27 END IBC163A END OF JOB. DASDI 7.80 SPOOL1 JOB ’INITIALIZE SPOOL1 3350 VOLUME’ MSG TODEV=1052,TOADDR=009 DADEF TODEV=3350,TOADDR=14C,IPL=NO,VOLID=SPOOL1,BYPASS=YES VLD NEWVOLID=SPOOL1,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB. Oryginalnie instalator systemu MVS jest udostępniany na taśmach. W celu skonwertowania go do trzech plików typu DADS wykonuje się kilka operacji przy pomocy skryptów JCL (tutaj nie zostało to omówione). Należy skorzystać w tym miejscu z gotowych plików DASD31 , pobierając i kopiując je do odpowiednich miejsc jak poniżej: cd $mvsDir && wget -nc $mvsURL/smp.cnf cd $mvsDir/dasd && wget -nc $mvsURL/dasd/{start1.150,spool0.151, work01.152} Pierwszy plik to system startowy - służący do rozpoczęcia i uruchomienia procesu instalacyjnego, drugi spool jest podręcznym plikiem wymiany (swap), a work miejscem na pliki użytkowników i programy. Po uruchomieniu Herculesa wymagane jest podanie adresu urządzenia, z którego emulator będzie czytać instrukcje rozruchowe. Wykonuje się to za pomocą polecenia IPL (ang. Initial Program Load). Na marginesie, ma to swój odpowiednik w komputerze mainframe w postaci komendy Load w SE (Podrozdział 1.5.1). cd $mvsDir && hercules -f smp.cnf Czytanie bajtów rozruchowych rozpoczyna się od 0 bajta do 23 bajta, czyli łącznie 24B. Dane z pierwszych ośmiu bajtów ustawiają się w rejestrze PSW32 Herculesa. Dalej spod tego adresu wykonywany jest dalszy proces startowy. Po zakończeniu ostatnie cztery bajty PSW powinny wskazywać na FFFF. W tym momencie należy połączyć się protokołem telnet na port 3270. W terminalu, po połączeniu, należy uruchomić program startowy spod urządzenia dyskowego o adresie 0150. Urządzenie to jest instalacyjnym obrazem systemu MVS (plik o nazwie start01.150). telnet localhost 3270 ipl 150 31 DASD (ang. Direct Access Storage Device) - jest to określenie i nazwa dysku, historycznie odwołująca się do faktu szybkiego w odróżnieniu od sekwencyjnego taśmowego, dostępu, dzisiaj określającą po prostu macierze dyskowe mainframe’a. 32 Program Status Word - rejestr sprzętowy zawierający stan wykonywania obecnego programu oraz adres instrukcji która obecnie jest wykonywana. 28 W konsoli ukaże się informacja dotycząca wpisania komendy po wyrazie input. W przypadku gdy pierwszy raz uruchomiono obraz instalacyjny należy przebudować Link Pack Area - mapowane na dysk miejsce w pamięci zawierające często wykonywane programy systemowe. r 0,clpa Efekt polecenia na terminalu przedstawia poniższy log: Trying 127.0.0.1... Connected to localhost. Escape character is ’^]’. Hercules version 3.06 built on May 14 2009 11:28:14 running on otos.pl (Linux-2.6.24.5-grsec-xxxx.#3 SMP Wed May 28 09:09:25 CEST 2008 i686 Connected to device 0:001F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 03.70.VS2 HHCTE006A Enter input for console device 001F r 0,clpa IEF165I // START JES2 IEE351I SMF SYS1.MAN RECORDING NOT BEING USED *00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0 Pojawia się informacja od podsystemu JES (ang. Job Entry System) odpowiedzialnego za kolejkowanie zadań i przyjmowanie komend: IEF165I // START JES2 IEE351I SMF SYS1.MAN RECORDING NOT BEING USED *00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0 Symbol * oznacza tu znak oczekiwania na odpowiedź, a numer zapytania, na które trzeba odpowiedzieć systemowi, identyfikowany jest następną w kolejności dwucyfrową liczbą. Decyzję trzeba tu dodatkowo potwierdzić. Obie komendy ukazane są poniżej: r 0,format,noreq r 1,y Efekt poleceń: r 0,format,noreq IEE600I REPLY TO 00 IS;SUPPRESSED *01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE r 1,y IEE600I REPLY TO 01 IS;SUPPRESSED $HASP423 SPOOL0 IS BEING FORMATTED IEE041I THE SYSTEM LOG IS NOW ACTIVE 29 $HASP160 $HASP160 $HASP100 $HASP373 $HASP100 $HASP373 $HASP100 $HASP373 $HASP309 $HASP309 $HASP309 $HASP099 PRINTER1 INACTIVE - CLASS=AJ PUNCH1 INACTIVE - CLASS=BK INIT ON STCINRDR INIT STARTED INIT ON STCINRDR INIT STARTED INIT ON STCINRDR INIT STARTED INIT 1 INACTIVE ******** C=A INIT 2 INACTIVE ******** C=BA INIT 3 INACTIVE ******** C=CBA ALL AVAILABLE FUNCTIONS COMPLETE Wolumen spool1 jest przeznaczony jako miejsce dla bibliotek dystrybucyjnych. Istnieje potrzeba zarezerwowania tego miejsca jako prywatnego, gdyż domyślnie MVS klasyfikuje wszystkie dodatkowo zamontowane dyski jako publiczne. m 148,vol=(sl,smp001),use=private Log systemowy polecenia: m 148,vol=(sl,smp001),use=private $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE - CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE Kolejnym krokiem jest wykonanie skryptu, który zainstaluje biblioteki SMP znajdujące się na dystrybucyjnych taśmach smp4.het oraz zdlib1.het. W pierwszej kolejności trzeba ustawić taśmę zdlib1.het w czytniku (type 3420) o adresie ustawionym w pliku konfiguracyjnym np. 170. Dalszą czynnością jest dodanie wymaganej taśmy do katalogu tape oraz skryptu do katalogu jcs: cd $mvsDir/tape && wget $mvsURL/tape/{smp4.het,zdlib1.het} cd $mvsDir/jcl && wget $mvsURL/jcl/smp4p44.jcl Poniżej krok emulacji włożenia karty do czytnika i jej aktywacji za pośrednictwem skryptu JCL: 30 devinit 170 tape/zdlib1.het devinit 012 jcl/smp4p44.jcl eof Przebieg tego procesu jak poniżej: HHCPN098I Device 0:0012 initialized $HASP100 SMP4P44 ON READER1 SMP 4.44 from MVS38J $HASP104 SMP4P44 ************************************************************ $HASP104 SMP4P44 * An IPL is required after this job has completed!!! * $HASP104 SMP4P44 ************************************************************ $HASP373 SMP4P44 STARTED - INIT 1 - CLASS A - SYS H158 IEF244I SMP4P44 S1 - UNABLE TO ALLOCATE 1 UNIT(S) AT LEAST 1 OFFLINE UNIT(S) NEEDED. IEF489I SMP4P44 - 1 UNIT(S) NEEDED FOR I1 IEF247I SMP4P44 - 182,183,184,170,171 OFFLINE IEF247I SMP4P44 - 282,283,284,382,383,384,482,483,484,582 NOT ACCESSIBLE IEF247I SMP4P44 - 583,584,682,683,684,270,271,370,371,470 NOT ACCESSIBLE IEF247I SMP4P44 - 471,570,571,670,671 NOT ACCESSIBLE Na karcie zdlib1.het znajduje się polecenie, które po odczytaniu wymaga podania w terminalu danych konfiguracyjnych (tu numeru urządzenia). Odpowiedź o wartości 170 identyfikuje wirtualny czytnik taśmowym, w którym znajduję się ta karta. r 2,170 Wyświetli się kilka informacji oraz zapytanie informujące aby włożyć dyskietkę T74172 do stacji 170. *02 IEF238D SMP4P44 - REPLY DEVICE NAME OR ’CANCEL’. r 2,170 IEE600I IEC502E *IEC501A IEC501A REPLY TO 02 IS;170 K 170,MVS38J,SL,SMP4P44,S2 M 170,T74172,SL,6250 BPI, SMP4P44,S2 Poniżej symulacja czynności włożenia woluminu: devinit 170 tape/smp4.het Przebieg poprawnego wykonania: EF234E K 170,T74172,PVT,SMP4P44,S2 IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44 31 MVS38J. $HASP395 SMP4P44 ENDED $HASP309 INIT 1 INACTIVE ******** C=A $HASP150 SMP4P44 ON PRINTER1 $HASP160 PRINTER1 INACTIVE - CLASS=AJ $HASP250 SMP4P44 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE W tym punkcie wymagany jest reset poprzedzony poleceniami zwalniającymi pewne wymagane zasoby: $p jes2 z eod quiesce Pierwsze powyższe polecenie wyłącza podsystem JES, drugie zamyka pliki, a trzecia opróżnia bufory 33 . $p jes2 $HASP395 INIT ENDED $HASP395 INIT ENDED $HASP395 INIT ENDED IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A IEE037I LOG NOT ACTIVE 2000 10.16.29 CONSOLE IEE142I 01F NOW RECEIVING HARDCOPY 4000 10.16.29 IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A 4000 10.16.29 IEE037I LOG NOT ACTIVE 0000 10.16.29 IEF196I IEF142I JES2 JES2 - STEP WAS EXECUTED - COND CODE 0000 0000 10.16.29 IEF196I IEF285I SYS1.PROCLIB K 0000 10.16.29 IEF196I IEF285I VOL SER NOS= START1. 0000 10.16.29 IEF196I IEF285I SYS1.HASPCKPT K 0000 10.16.29 IEF196I IEF285I VOL SER NOS= SPOOL0. 0000 10.16.29 IEF196I IEF285I SYS1.HASPACE K 0000 10.16.29 IEF196I IEF285I VOL SER NOS= SPOOL0. z eod 4000 10.16.45 quiesce 33 IEE334I HALT EOD SUCCESSFUL Kompletny log instalacyjny można znaleźć w dodatku 32 Rozdział 2 Mainframe jako serwer szachowy ICS jest skrótem od Internet Chess Server (Internetowego Serwera Szachów). Jest to klasa serwerów obsługujących za pośrednictwem udokumentowanego ale nie ustandaryzowanego protokołu ICS grę w szachy wielu użytkowników dokonywaną za pośrednictwem Internetu. Serwery tego typu zaczęły pojawiać się od początku lat osiemdziesiątych. Zrzeszały wielu użytkowników, którzy bezpłatnie mogli się zarejestrować, utworzyć konto, grać, czy obserwować statystyki. W tych czasach pojęcie wolnego oprogramowania (open source34 , free software) jeszcze nie miało jednoznacznej kwestii prawnej. Projekt tworzony przez ogół dla ogółu, z braku regulacji został w końcu przejęty, skomercjalizowany i konsekwentnie płatny (ICC). Chris Petroff wraz z grupą ludzi temu przeciwną zaprogramował (po części na wcześniejszym kodzie) w pełni darmowego ICS-a. Już od 1995 r. każdy mógł grać w szachy bez dodatkowych obligacji. Projekt ten został wydany pod nazwą Free Internet Chess Server (FICS) a jego obecna licencja to GPL. Następnie był rozwijany i utrzymywany przez wolontariuszy jako oprogramowaniem o otwartym kodzie 35 . Projekt fics z racji natury wolnego oprogramowania był następnie rozwijany przez wielu niezrzeszonych ze sobą programistów. Powstawało też wiele rozwidleń podstawowego kodu źródłowego. Z braku formalnego w tych czasach, określenia protokołu jakim posługiwał się klient w komunikacji z serwerem, wyklarował się ostatecznie ogólnie uznawany protokół ICS. Był to tekstowy wariant protokołu telnet, służący do komunikacji z ICS-ami (w większości z reguły niezależnie od ich rodzaju). Umożliwiło to tym samym wykorzystanie wielu istniejących odmian aplikacji oraz ustandaryzowało specyfikację projektów. Pomogło w konsolidacji i rozwijaniu dalej kodu serwera. Istniejąca wcześniejsza fragmentacja kodu źle wpłynęła na jego spójności oraz ostateczną możliwość dalszego scalania różnorakich rozwiązań. Doprowadziło to nawet do wieloletniej stagnacji w dalszej historii FICS. Z drugiej strony serwer był już w pełni rozwinięty i oferował o wiele więcej niż zwyczajną grę w szachy przez Internet. Na początku tego stulecia pojawiły się dwie próby dalszego rozwinięcia kodu źródłowego poprzednich wersji: jedna przez Andrew Tridgella oraz druga przez studentów Uniwersytetu w Paraná (projekt chessd). Te dwie wersje, które się wyłoniły, są dzisiaj podstawą serwera ICS. Poniżej wypunktowano wersje serwerów FICS oraz ich orientacyjne lata powstania: • Wersja oryginalna – FICS 1.0 – FICS 1.2.18 34 Otwarte oprogramowanie (ang. open source movement, czyli otwarte źródła) - odłam ruchu wolnego oprogramowania (ang. free software), który proponuje nazwę open source software jako alternatywną dla free software, głównie z przyczyn praktycznych, a nie filozoficznych. 35 Słówko free podkreślało tu, że projekt został zainicjowany jako free software - w skrócie, ruch propagujący rozwój aplikacji przez chętne osoby i uznający taką postać rzeczy za lepszą dla ogółu (programistów, użytkowników) od komercyjnego rozwijania aplikacji. 33 – FICS 1.6.2 – FICS 1.2 – FICS 1.2.23 – FICS 1.7.4 • Wersja poprawiona przez A. Tridgella – FICS 2.0 (2002 r.) – FICS 2.0.1 – FICS 2.1.0 – FICS 2.1.1 – FICS 2.2.0 – FICS 2.2.1 – FICS 2.2.2 – FICS 2.2.3 (2004 r.) • Wersja portugalska (oparte na serwerze FICS) – Chessd 0.1 John 6 – Chessd 0.2 Chrysalis (2006 r.) – Chessd 0.3 Chrysalis – Chessd 0.3.1 Chrysalis (2007 r.) 2.1 2.1.1 Przegląd dostępnych serwerów szachowych Pierwsza linia serwera FICS Oryginalna linia serwera FICS jest dostępna w wersjach od 1.0 do 1.7. Na podstawie tej wersji wyklarował się nieoficjalny protokół ICS, następnie wykorzystywany przede wszystkim jako standard w komunikacji różnorakich klientów. Oryginalna strona projektu jak i sam ICS znajdują się pod adresem freechess.org. Aktualnie (na rok 2010) zainstalowana tam wersja serwera to 1.25.17. Na FTP pod tą domeną (ftp.freechess.org) znaleźć można dostępne wersję FICS jak i liczne aplikacje szachowe (jak choćby robofics). Instalacja wersji 1.6.3 Aby przystąpić do kompilacji należy dokonać poprawek : • usunąć stare linijki kodu dotyczące np. extern fprintf(), 34 • z pliku Makefile usunąć opcję -lcompact. Przed kompilacją można skonfigurować plik config.h. Dwa najważniejsze parametry w tym pliku to nazwa klienta poczty (np. sendmail) oraz nazwa domyślnego katalogu instalacyjnego. Poniżej znajduje się wydruk serwera po jego uruchomieniu. [papi@turnip /home/fics/FICS.DIST/FICS]$ ./fics FICS: Initialized on port 5000 at Wed Aug 4, 21:58 CEST. FICS: commands_init() FICS: rating_init() FICS: Can’t read ratings data! FICS: wild_init() FICS: book init() 1004 entries in ECO book 1086 entries in NIC book 4038 entries in LONG book FICS: player_array_init() Wydruk 5. Uruchomienie serwera fics 1.6.3 po udanej instalacji. W trakcie inicjalizacji serwera ustawiany jest standardowy port 5000, skanowane są pliki tekstowe z komendami, dalej wczytywane dane partii otwierających oraz kolejno aktywowana baza danych graczy. Następnie serwer przechodzi w tryb nasłuchu na otwartym porcie. 2.1.2 Wersja A. Tridgella serwera FICS Jest to wersja poprawiona i wywodzi się z poprzedniej linii. W całości rozwijana przez Andrew Tridgella. Strona projektu znajduję się na http://chess.samba.org/. Wersja ta wg autora konsoliduje poprzednie wersje oraz poprawia wcześniejsze błędy. Nie różni się znacznie w funkcjonalności od poprzednich wersji, jednak elementy bazy danych nie są już kompatybilne, gdyż zostały opracowane na podstawie innej struktury. Projekt zaowocował czterema wersjami 2.0, 2.1, 2.2 oraz 2.3. Ta linia serwerów obok serwera chessd jest najczęściej rekomendowana jako typowy FICS.36 Instalacja Pliki można pobrać ze strony w postaci bądź z CVS-a (komenda jak poniżej). cvs -z5 -d :pserver:[email protected]:/cvsroot co lasker cd lasker cvs -z5 update -dP 36 Taką rekomendację podał na swojej stronie Tim Mann (http://www.tim-mann.org/ics.html). Wg autora lista owych FICS zamyka się na trzech liniach oraz kliku ich modyfikacjach. 35 Zastosowano tu dodatkową bazę danych TDB37 (zmienne konfiguracyjne) oraz dodano skrypt do generowania struktur danych w C. Poniżej standardowa sekwencja instalacyjna podana wraz z instrukcjami instalacyjnymi (plik INSTALL): cd src ./configure --prefix=/usr/local/ make make install Poniżej wykaz hierarchii oraz struktury katalogów i plików, ukazanej na podstawie logu instalacyjnego. 37 TDB (ang. Trivial Database) - baza danych, której z jednym z aspektów jest jednoczesna obsługa wielu użytkowników operujących na możliwych tych samych rekordach, wykorzystująca do tego mechanizm wewnętrznego blokowania aby oddzielić nachodzące się zapisy, charakteryzująca się niewielkim rozmiarami kodu. 36 root@server:~/pkg/lasker/src$ make install install -d -m0755 /home/chessd install -d -m0755 /home/chessd/bin install -d -m0755 /home/chessd/lib install -m0755 chessd /home/chessd/bin install -m0755 chessd.so /home/chessd/lib install -m0755 makerank /home/chessd/bin install -m0755 chessd_addplayer /home/chessd/bin install -d -m0755 /home/chessd/players install -d -m0755 /home/chessd/spool install -d -m0755 /home/chessd/data/admin install -d -m0755 /home/chessd/data/book install -d -m0755 /home/chessd/data/help install -d -m0755 /home/chessd/data/usage install -d -m0755 /home/chessd/data/messages install -d -m0755 /home/chessd/data/stats install -d -m0755 /home/chessd/data/boards/wild install -d -m0755 /home/chessd/games/history install -d -m0755 /home/chessd/games/journal install -d -m0755 /home/chessd/games/adjourned install -d -m0755 /home/chessd/data/stats/player_data cp -r ./../data/admin/[a-z]* /home/chessd/data/admin cp -r ./../data/book/[a-z]* /home/chessd/data/book cp -r ./../data/help/[a-z]* /home/chessd/data/help cp -r ./../data/usage/[a-z]* /home/chessd/data/usage cp -r ./../data/messages/[a-z]* /home/chessd/data/messages perl -e ’mkdir("/home/chessd/players/$_",0755) for ("a".."z")’ perl -e ’mkdir("/home/chessd/games/history/$_",0755) for ("0".."99")’ perl -e ’mkdir("/home/chessd/games/journal/$_",0755) for ("a".."z")’ perl -e ’mkdir("/home/chessd/data/stats/player_data/$_",0755) for ("a".."z")’ perl -e ’mkdir("/home/chessd/games/adjourned/$_",0755) for ("a".."z")’ Nawet ostatnia wersja projektu (2.2.3) nie jest już taka aktualna i w związku z tym pojawiają się błędy w czasie kompilacji. Wynikają np. z niewspomaganego zdefiniowania danych w plikach nagłówkowych (extern zamiast static). Niekompatybilny z obecną wersja parsera Perl może okazać się plik parsers/genstruct.pl odpowiedzialny za generacje struktur, co tym samym może uniemożliwić dalszą kompilację. Opracowanym rozwiązaniem jest tu zastosowanie wygenerowanych plików wyjściowych z wcześniejszych wersji. 37 Przy samej instalacji może wystąpić błąd spowodowany brakującą opcją kaskadowego kopiowania. Należy w takiej sytuacji w odpowiednim miejscu w Makefile zastąpić ’cp -u’ frazą ’cp -u -r’. W katalogu z zainstalowanym serwerem znajdują się następujące podkatalogi: • bin - przechowuję wykonywalny plik ’chessd’ • data - zawiera pliki tekstowe i opisy komend • games - miejsce na historię gier • players - katalog z baza tekstowa statystyk graczy, każdy w oddzielnym podkatalogu • spool - miejsce na pocztę, związaną np. z instalacją Uruchomienie serwera Aby uruchomić należy z głównego katalogu wywołać ’chessd’ z odpowiednimi parametrami. Domyślnie uruchamia się wykorzystując port 5000. root@server:/home/chessd$ bin/chessd -f -p 5000 CHESSD: Initialized on port 5000 Wed Apr 14, 21:32 CEST 2010 CHESSD: Loaded 166 commands (admin=46 normal=120) Wed Apr 14, 21:32 CEST 2010 CHESSD: Can’t read ratings data! Wed Apr 14, 21:32 CEST 2010 CHESSD: Loaded books 2.1.3 Wersja Chessd serwera FICS Historia Na podstawie zainicjowanego przez brazylijski urząd programu Szachy w szkole, grupa studentów z Publicznego Uniwersytetu w Paraná rozpoczęła pracę nad rozwojem serwera szachowego chessd. W projekcie uwzględnione zostały poprzednie rozwiązania oraz kody źródłowe tego typu wolnodostępnych serwerów, w tym oryginalnej linii FICS. Pierwszym efektem prac był serwer o nazwie kodowej John 6. Jak zapewniano, miał się cechować większą odpornością na błędy. Jednak z powodów praktycznych program nadal nie oferował przyjaznej funkcjonalności i był mało intuicyjny dla docelowego użytkownika (od ucznia szkoły podstawowej wzwyż). Nie spełniał tym samym postawionych wymagań projektowych, co w kolejności wymusiło kolejne zmiany. Pojawiła się idea dodania interfejsu WWW oraz nowoczesnej relacyjne bazy danych. Efektem prac była kolejna wersja o nazwie kodowej Chrysalis, która została wdrożona i służył kilka lat, jako efekt wcześniej zapoczątkowanej inicjatywy rządowej 38 . 38 Historia na podstawie pliku README dostarczonego wraz z projektem chessd 38 Grupa go rozwijająca po pewnym czasie zaprzestała dalszej pracy z powodu braku środków finansowych. Opis Jak sami autorzy określili, ostateczna wersja chessd jest adaptacją starych projektów dla nowoczesnego środowiska programistycznego. Z uwagi na wykorzystanie relacyjnej bazy danych, prezentuje nowsze podejście w stosunku do poprzednich rozwiązań. Pierwsza stabilna wersją ma numer 0.2, ostania 0.3.1. Od wersji 0.3 jest włączone wsparcie dla bazy MySQL39 . Z założenia serwer ma ograniczoną liczbę komend dostępnych z protokołu telnet. Mimo tego serwer nadal jest w większości kompatybilny z protokołem ICS - można z niego tak samo korzystać jak w przypadku innych popularnych serwerów. Wymagana jest wcześniejsza rejestracja z poziomu strony internetowej. Po stronie klienta interfejs webowy dodatkowo umożliwia oglądanie statystyk, komunikację, przeglądanie historii rozgrywek itp. Zaimplementowano także rozwiązania umożliwiające grę w szachy oraz inne dodatkowe funkcje, oferowane wcześniej przez popularne interfejsy użytkownika typu Winboard. Strona techniczna Zmiany wprowadzone w chessd w stosunku do oryginalnej wersji serwer FICS były dość liczne. W większości polegały na podmianie zapytań do bazy danych (w kodzie C) oraz usunięciu niektórych części, które miały się znaleźć w kodzie PHP40 strony WWW. Dzięki oddzieleniu serwera telnet odbierającego i wysyłającego zapytania, od warstwy prezentującej wyniki i statystyki poszczególnych graczy, całość stała się z punktu programistycznego bardziej przejrzysta. Funkcjonalność związana z administracją i zarządzaniem została zrealizowana jako funkcje PHP oraz zapytania SQL strony internetowej. Sprawiło to, że sam kod serwera stał się bardziej stabilny, spójny i łatwiejszy w dalszym utrzymaniu. Wiele poprzednich błędów, czy znane wcześniej sposoby zawieszania programu zostały wyeliminowane. Wykorzystanie relacyjnej bazy w przeciwieństwie do tekstowej pozwoliło na większą liczbę równoczesnych transakcji, zwiększyło szybkość pobierania i zapisywania rekordów. Umożliwiło także łatwą zmianę struktury danych oraz dodanie nowej funkcjonalności. Dzięki temu możliwa stała się łatwiejsza modyfikacja serwera. Ważna rzeczą jest tu prowadzenie statystyk oraz dokonywania różnorakich porównań graczy, co dzięki bazie stało się bardziej wygodne niż przeszukiwanie plików, czy parsowanie odpowiedzi serwera. We wszystkich wersjach serwerów FICS rozszerzanie programu o nowe komendy dla użytkownika związane jest z ingerowaniem w kod źródłowy języka C. Nową funkcjonalność w projekcie chessd można dodać wstawiając i obsługując odpowiednie formularze na stronie (co jest 39 MySQL - wolnodostępny system zarządzania relacyjnymi bazami danych PHP – obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w czasie rzeczywistym. 40 39 prostsze i bardziej funkcjonalne). Wprowadzenie i przeniesienia części kodu w kierunku strony internetowej ukazało nowy kierunek w rozwoju platformy szachowej FICS. Obok poprawionej wersji serwera FICS przez A. Tridgella (Podrozdział 2.1.2) jest to najczęściej rekomendowana opcja. Instalacja serwera ze źródeł Poniżej opisana jest instalacja serwera chessd na systemie Linux. Skorzystano tutaj z wersji 0.3.1. Źródła można pobrać ze strony chessd.sourceforge.net. Niezbędne do przeprowadzenia instalacji pakiety: • PostgreSQL lub MySQL • libdbi >= 0.8.0 • libdbi-drivers (MySQL lub PostgreSQL) • libxml2-dev • libltdl3-dev Najważniejszymi zależnościami jest libdbi (czyli API języka C) oraz biblioteki pozwalające na łączenie się z bazą danych. Należy do tego pobrać i zainstalować sterowniki odpowiedniej bazy danych: libdibi-drivers-mysql lub libdbi-drivers-postgres. Poniżej znajduję się sposób na sprawdzenie, bądź zaktualizowanie, bądź zainstalowanie wymaganych pakietów dla wybranych dystrybucji Linux: Dla ArchLinux: #archlinux yaourt -S libdbi libdbi-drivers-postgresql libdbi-drivers-mysql libxml2 Dla Debiana: sudo apt-get install libdbi0 libdbi0-dev libdb-mysql libdb-postgres libxml2-dev libxml2 Przed przystąpieniem do procesu zalecane jest sprawdzenie istnienia wymaganych i opcjonalnych narzędzi programistycznych systemu Linux: • GCC • pkgconfig • libtool • gettext • Make 40 Gdy nie ma pliku configure lub Makefile należy go wygenerować za pośrednictwem programów pakietu autotools: #rm -R automate.cache auxdir -R #mkdir auxdir libtoolize --copy --force #uaktualnienie narzędzia (auxdir/ltmain.sh) aclocal #przetwarzanie pliku .ac autoconf #generacja pliku configure #autoreconf #rekonfiguracja (potrzebne gdy inna wersja) automake #generacja wejściowych plików, Makefile.am automake --add-missing #aktualizacja Powyższa sekwencja jest także przydatna, gdy jest potrzeba zaktualizowania samych plików wejściowych dla autotools takich jak Makefile.am, configure.ac (z czym można się spotkać we wcześniejszych wersjach serwera). Dalej standardowy proces instalacyjny systemu GNU/Linux: configure make #z roota lub sudo make install Przy instalacji może pojawić się błąd związany z referencją do @MKINSTALLDIRS@ w pliku Makefile. W takim wypadku podmienia się tę zmienną ręcznie wyrażeniem ../auxdir/mkinstalldirs, jak poniżej: sed -s ’s/@MKINSTALLDIRS@/..\/auxdir\/mkinstalldirs/’ > po/Makefile Konfiguracja bazy Serwer współpracuje z bazą danych więc przed uruchomieniem należy ją skonfigurować. Dla PostgresSQL: su postgres createuser chessd -D -P createdb -O chessd chessd psql chessd chessd < create-psql.sql #./sql/dbinstall.sh create #ta komenda powinna zrobić to co powyżej Dla MySQL: ./sql/dbinstall.sh -m create W pliku chessd.conf (w katalogu /usr/local/etc lub /etc/ ) znajdują się hasła, które należy zaktualizować. 41 Podsumowanie Sam projekt interfejsu graficznego poprzez trudny do utrzymania, wprowadzania poprawek oraz słabo udokumentowany kod (m.in napisany większości w języku portugalskim) jest od 2007 roku nierozwijany. Sami autorzy w dokumentacji projektu Chrysalis przyznają, że jest on niedopracowany od strony nowo wprowadzonego interfejsu graficznego i potrzebna jest nowa propozycja implementacji (z braku dalszych inicjatyw, taki też pozostał). Nowe dystrybucje wraz z nowymi aplikacjami i wersjami wymaganych do uruchomienia programów takich jak PostgreSQL41 , MySQL, Adodb i PHP5 stały się dla chessd niekompatybilne. Niemożliwe stało się uruchomienie strony internetowej projektu na najnowszych dystrybucjach Linuksa. Z małymi poprawkami kodu i zmianami w konfiguracji PHP oraz bibliotek AdoDB autorowi udało się po części uruchomić stronę WWW chessd na bazie PostgreSQL7. Jednak poza widokiem startowym i kilkoma działającymi formularzami interfejs nie oferował zaprojektowanej funkcjonalności. W celu wykorzystania elementów strony zostały opracowane poprawki umożliwiające uruchomienie w oparciu o serwer MySQL. Mimo tego nadal wiele funkcji nie działało z racji błędu w mechanizmie obsługi danych z POST42 . W trakcie używania serwera nie wszystkie standardowe funkcje ICS-a są dostępne, mimo tego, że są wyświetlane w liście komend (polecenie help commands). Ukazuje się wtedy monit, że użytkownik nie nasłuchuje na danym kanale. Dotoczy to wszystkich wersji i związane jest to z tym, że lista komend oraz dokumentacja bazują na wcześniejszych plikach serwera FICS. Nie wszystkie działają spod serwera z racji przeniesienia ich na interfejs WWW. Dodatkowo pojawia się błąd przy wykonywaniu niektórych poleceń (w tym nieaktualnych) objawiający się wyjątkiem serwera przy zwalnianiu pamięci. 2.1.4 Analiza bazy danych serwera Chessd Tabela UserLogon Tabela UserLogon zawiera aktualne informacje o tym kto jest zalogowany. Zawiera klucz prywatny userloginid oraz referencję do tabeli ChessdUser - userid. Tabela składuje informacje na temat czasów logowania użytkowników oraz ich adresów IP. 41 PostgreSQL to, obok MySQL i Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. 42 Wprowadzone zminy są udostępnione na serwerze SVN (https://svn.3ii.eu/chess/chessd), a opracowana przez autora wersja dystrybucyjna dla systemu Debian znajduje się w załączniku lub pod adresem http://papiewski.pl/dl/lfs. Można wykorzystać ten adres w pliku apt.sources Debiana w celu automatcznej instalacji 42 mysql> select * from UserLogon; +-------------+--------+---------+---------------------+-----------+---------+ | userlogonid | userid | islogin | eventtime | fromip | whereat | +-------------+--------+---------+---------------------+-----------+---------+ | 1 | 1 | 1 | 2010-05-17 15:17:24 | 127.0.0.1 | 1 | | 2 | 1 | 1 | 2010-05-17 15:32:53 | 127.0.0.1 | 1 | | 3 | 1 | 1 | 2010-05-17 15:34:26 | 127.0.0.1 | 1 | +----------------------------------------------------------------------------+ Wydruk 6. Tabela UserLogon - przykładowe rekordy. Źródło: opracowanie własne Tabela UserStats Tabela UserStats posiada identyfikator w postaci pola userstatsid. Kolejnym w kolejności polem jest userid, czyli referencja do tabeli ChessdUser określająca zarejestrowanych użytkowników. Relacja ChessdUser do UserStats jest jak jeden do wielu. Statystyki znajdujące się w tabeli UserStats przedstawiają rozgrywane rodzaje meczy, określone przez pole gametypeid, które jest referencją do tabeli GameType, zawierającej 7 wpisów identyfikujących rodzaje gry. Tabela zawiera także kolumny mówiące o liczbie wszystkich wygranych, przegranych oraz zremisowanych meczy (kolejno num, wins, loses, draws) Następna kolumna rating posiada informację o rankingu Glicko - wpisie charakteryzującym siłę gracza (Zobacz rozdział 2.3.3 na stronie 59). 43 mysql> select * from UserStats; +-------------+--------+------------+------+------+--------+-------+--------+ | userstatsid | userid | gametypeid | num | wins | losses | draws | rating | +-------------+--------+------------+------+------+--------+-------+--------+ | 1 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | | 2 | 2 | 5 | 10 | 3 | 6 | 1 | 1489 | | 3 | 3 | 5 | 4 | 4 | 0 | 0 | 2018 | | 4 | 4 | 5 | 1 | 0 | 1 | 0 | 1488 | | 5 | 4 | 1 | 0 | 0 | 0 | 0 | 0 | | 6 | 5 | 5 | 11 | 5 | 5 | 1 | 1765 | +-------------+--------+------------+------+------+--------+-------+--------+ +------------+----------+------+------------+ | lasttime | whenbest | best | sterr | +------------+----------+------+------------+ | 0 | 0 | 0 | 350 | | 1280327950 | 0 | 0 | 136.896702 | | 1280327353 | 0 | 0 | 230.284249 | | 1280326778 | 0 | 0 | 286.811547 | | 0 | 0 | 0 | 350 | | 1280327950 | 0 | 0 | 135.948221 | +------------+----------+------+------------+ Wydruk 7. Tabela UserStats - przykładowe rekordy. Źródło: opracowanie własne GameType Tabela GameType zawiera identyfikatory rozgrywek. Na serwerze najczęstszym typem jest TYPE BLITZ, który określa mecze od 3 do 11 minut. Do tej tabeli odwołuje się m.in pole gametypeid w tabeli UserStats. 44 mysql> select * from GameType; +------------+------------------+ | gametypeid | name | +------------+------------------+ | 0 | TYPE_UNTIMED | | 1 | TYPE_BLITZ | | 2 | TYPE_STAND | | 3 | TYPE_NONSTANDARD | | 4 | TYPE_WILD | | 5 | TYPE_LIGHT | | 6 | TYPE_BUGHOUSE | +------------+------------------+ Wydruk 9. Elementy tabeli GameType serwera Chessd. Źródło: opracowanie własne Move Każdy ruch identyfikowany jest poprzez swój właściwy identyfikator będący kluczem głównym tabeli, identyfikator gry - liczbą określającą pozycję w sekwencji ruchów (moveorder) oraz kolor. Znajduje się tu także pole tekstowe w formacie FEN (ang Forsyth-Edwards Notation) będącego częścią specyfikacji PGN (Podrozdział 2.3.1) i określającego stan figur na szachownicy. 45 mysql> describe Move; +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | moveid | int(11) | NO | PRI | NULL | auto_increment | | gameid | int(11) | YES | MUL | NULL | | | movorder | int(11) | YES | | NULL | | | color | int(11) | YES | | NULL | | | fromfile | int(11) | YES | | NULL | | | fromrank | int(11) | YES | | NULL | | | tofile | int(11) | YES | | NULL | | | torank | int(11) | YES | | NULL | | | doublepawn | int(11) | YES | | NULL | | | movestring | varchar(8) | YES | | NULL | | | algstring | varchar(8) | YES | | NULL | | | fenpos | varchar(64) | YES | | NULL | | | attime | int(11) | YES | | NULL | | | tooktime | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+----------------+ 14 rows in set (0.01 sec) Wydruk 10. Tabela Move - opis pól Dzięki tej tabeli możliwe jest późniejsze wyświetlenie historii rozgrywek i ich analiza. 46 mysql> select * from Move limit 5; +--------+--------+----------+-------+----------+----------+--------+--------+ | moveid | gameid | movorder | color | fromfile | fromrank | tofile | torank | +--------+--------+----------+-------+----------+----------+--------+--------+ | 1 | 1 | 0 | 0 | 3 | 1 | 3 | 3 | | 2 | 1 | 1 | 128 | 1 | 6 | 1 | 5 | | 3 | 1 | 2 | 0 | 4 | 1 | 4 | 3 | | 4 | 1 | 3 | 128 | 3 | 6 | 3 | 4 | | 5 | 1 | 4 | 0 | 4 | 3 | 3 | 4 | +--------+--------+----------+-------+----------+----------+--------+--------+ +-----------------------------------------------------+-----------+----------+ | fenpos | attime | tooktime | +-----------------------------------------------------+-----------+----------+ | rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b | 893913151 | 6 | | rnbqkbnr/p1pppppp/1p6/8/3P4/8/PPP1PPPP/RNBQKBNR w | 893913160 | 9 | | rnbqkbnr/p1pppppp/1p6/8/3PP3/8/PPP2PPP/RNBQKBNR b | 893913184 | 24 | | rnbqkbnr/p1p1pppp/1p6/3p4/3PP3/8/PPP2PPP/RNBQKBNR w | 893913190 | 6 | | rnbqkbnr/p1p1pppp/1p6/3P4/3P4/8/PPP2PPP/RNBQKBNR b | 893913208 | 18 | +-----------------------------------------------------+-----------+----------+ +------------+------------+-----------+ | doublepawn | movestring | algstring | +------------+------------+-----------+ | 0 | P/d2-d4 | d4 | | 0 | P/b7-b6 | b6 | | 0 | P/e2-e4 | e4 | | 0 | P/d7-d5 | d5 | | 0 | P/e4-d5 | exd5 | +------------+------------+-----------+ 5 rows in set (0.00 sec) Wydruk 11. Tabela Move - przykładowe elementy. Źródło: opracowanie własne Kolumna attime jest zapisem daty i czasu w systemie POSIX. tooktime reprezentuje ile sekund było potrzebne na dany ruch. movestring i algstring jest zapisem ruchu. Game Zawiera historię wszystkich rozgrywek oraz informacje z nimi powiązane. 47 mysql> describe Game; +-----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-------------+------+-----+---------+----------------+ | gameid | int(11) | NO | PRI | NULL | auto_increment | | gametypeid | int(11) | YES | MUL | NULL | | | gamestatusid | int(11) | YES | MUL | NULL | | | gameresultid | int(11) | YES | MUL | NULL | | | whiteplayerid | int(11) | YES | MUL | NULL | | | blackplayerid | int(11) | YES | MUL | NULL | | | whiterating | int(11) | YES | | NULL | | | blackrating | int(11) | YES | | NULL | | | winner | int(11) | YES | | NULL | | | winittime | int(11) | YES | | NULL | | | wincrement | int(11) | YES | | NULL | | | binittime | int(11) | YES | | NULL | | | bincrement | int(11) | YES | | NULL | | | timeofstart | int(11) | YES | | NULL | | | wtime | int(11) | YES | | NULL | | | btime | int(11) | YES | | NULL | | | rated | int(11) | YES | | NULL | | | private | int(11) | YES | | NULL | | | clockstopped | int(11) | YES | | NULL | | | flag_check_time | int(11) | YES | | NULL | | | passes | int(11) | YES | | NULL | | | numhalfmoves | int(11) | YES | | NULL | | | fenstartpos | varchar(74) | YES | | NULL | | | whiteplayername | varchar(50) | YES | MUL | NULL | | | blackplayername | varchar(50) | YES | MUL | NULL | | | adjudicatorname | varchar(50) | YES | | NULL | | | adjudicatorid | int(11) | YES | MUL | NULL | | +-----------------+-------------+------+-----+---------+----------------+ 27 rows in set (0.01 sec) Wydruk 12. Tabela Game. Źródło: opracowanie własne 48 2.2 2.2.1 Użytkowanie serwera ICS Polecenia użytkownika Korzystanie z serwera FICS po stronie użytkownika polega na przesyłaniu odpowiednich komend protokołem telnet.Na poniższym wydruku przedstawiono spis podstawowych komend wchodzących w skład protokołu ICS. xboard -ics -icshost 212.191.89.82 fics% help commands abort accept alias allobservers bell best bsetup clearmessages date decline examine finger fmessage forward getpi goboard help history iset it jsave kibitz logons ltell mailstored match moretime moves observe oldmoves password pause prefresh promote ptime qtell refresh remote rmatch say shout showlist simallabort simalladjourn simnext simopen addlist assess bname clrsquare draw flag games handles hrank jkill limits mailmoves messages news open pending pstat quit resign seek simabort simgames simpass adjourn backward boards cshout eco flip getgi hbest inchannel journal llogons mailoldmoves mexamine next partner play ptell rank revert set simadjourn simmatch simprev Anglojęzyczne informacje odnośnie każdej z nich uzyskuje się po wpisaniu help z argumentem szukanego słowa Komenda who Komenda who wyświetla dostępnych użytkowników zalogowanych na serwerze. Przy wyświetlaniu listy daszek (^) oznacza grających, gwiazdka (*) administratorów, a plusy (++++) 49 gości. Po lewo może znajdować się punktacja wyświetlana dla systemu blitz, czyli uwzględniająca grę od 3 do 10 minut. fics% who 1907^stockfishDell 1783 gnuchessZ800 1292 admin(*)(TD) 1814^stockfishXeon 1575 gnuchessOtos ----:mamer(*)(TD) ++++.GuestUAVA ++++ papi 8 players displayed (of 8). (*) indicates system administrator. Komenda match Wpisując z wiersza poleceń chessd komendę match z parametrem będącym nazwą dostępnego użytkownika (można podać dodatkowe parametry odnośnie rodzaju gry, typie planszy, koloru, czasu) zostanie wysłane zapytania do danego przeciwnika. Po zaakceptowaniu rozpoczyna się właściwa gra. $fics% help match Usage: match user [rated|unrated] [Start] [Inc] [Black_Start Black_Inc] [White|Black] [board_category board] fics% match stockfishDell You accept the challenge of stockfishDell. Creating: GuestUAVA (0) papi (0) unrated blitz 1200 120 {Game 1 (GuestUAVA vs. papi) Creating unrated blitz match.} Rejestracja Oryginalny serwer FICS ma rejestrację na bazie skrzynki pocztowej. Informacje na temat tego jak wygląda proces rejestracyjny można uzyskać po zalogowaniu się jako guest do ICSa i podaniu komendy help register z poziomu linii komend. Odpowiedzią może być tekst mówiący, że należy wysłać email na podany adres wraz z odpowiednim tematem i wiadomością w celu dokonania rejestracji nowego użytkownika. Wiadomość email powinna zawierać przede wszystkim unikatowy login, imię, nazwisko oraz typ gracza (komputer lub człowiek). 50 fics% help register Registering on FICS: Membership with FICS is completely free. To register on FICS, simply press the ’Register’ button in the menu on the left side of our homepage, http://www.freechess.org press the ’registration form’ button, complete the registration form and press the ’send information’ button. You will need to supply: - your full name. - a handle (the name you will use while on the server). - your e-mail address (which may not be a free e-mail address such as hotmail). Your email address and name will remain confidential, and will only be shared with the FICS administration and yourself. Please remember: You must enter both the First Name and your Family Name fields. The Middle Initial is optional; do not use non-letter characters, such as accents or hooks in the First Name and Family Name. Type [next] to see next page. fics% Wydruk 13. Rejestracja na freechess.org W przypadku serwera chessd rejestracja z założenia odbywa się za pomocą strony internetowej. Komenda game Polecenie game wyświetla bieżące gry. Można je obserwować wpisując observe z nazwą gracza. 51 fics% games 1 1393 crafty ---- rybka [ br 2 12] 3:29 - 2:29 (12-10) W: 46 1 game displayed. fics% 2.2.2 Polecenia administratora Standardowa wersja posiada poniższy zestaw komend dla użytkownika typu administrator (istnieją różne poziomy uprawnień): fics% ahelp acheckhelp adjudicate anews asetadmin asethandle asetstd canewse canewst cnewsi hideinfo raisedead aconfig admin announce asetblitz asetlight asetv canewsf cnewsd cnewsp nuke remplayer addcomment adump annunreg asetbughouse asetpasswd asetwild canewsi cnewse cnewst pose rerank addplayer ahelp areload asetemail asetrealname canewsd canewsp cnewsf ftell quota showcomment Komenda pose Jedną z często wykorzystywanych poleceń jest komenda pose, która niejako pozoruje wykonanie komendy przez innego użytkownika. Przydatna przy wymuszaniu pewnych komend na użytkowniku, umożliwia (zautomatyzowane) wydawania poleceń silnikom szachowym lub innym użytkownikom. Poniższa komenda wykonuje na użytkowniku komendę poszukiwanie chętnych do gry (rozgrywek o długości 1 min z przyrostem czasu równym 0 sekund): pose craftyDell seek 1 0 rated pose craftyDell seek 2 0 rated Komenda addplayer Komenda przyjmuje cztery parametry: nazwę użytkownika, e-mail oraz opis: addplayer stockfishDell [email protected] 1.8GHZ 1GB 52 Komenda asetpasswd Zmienia (dodaje) hasło dla użytkownika. Pierwszym parametrem jest nazwa istniejącego użytkownika, drugim hasło. asetpasswd stockfishDell password 2.2.3 Organizowanie terniejów na serwerze ICS Mamer jest programem, za pośrednictwem którego odpowiednio uprawnieni użytkownicy serwera z listy TM (Tourney Manager) mogą organizować turnieje szachowe. Jest programem z uprawnieniami administratora podłączonym zdalnie do serwera ICS. Instalacja Aby umożliwić poprawną pracę bota mamer należy wykonać następujące czynności: • na serwerze ICS: – dodać użytkownika mamer na serwerze, – nadać mu hasło, – dodać go do listy TD, – nadać prawa administratora i wartości powyżej 10. • w katalogu domowy mamera: – zaktualizować hasło w pliku mamer.config, – dodać w pliku data/managers listę użytkowników typu TM, którzy będą mogli zarządzać z pośrednictwem mamera turniejami na serwerze. Czynności na serwerze należy wykonać z konta superadministratora (uprawnienia o wartości 100). Wymagane komendy jak poniżej: addplayer mamer [email protected] mamer asetpasswd mamer password +td mamer asetadmin mamer 10 Poniżej przykładowa sekwencja poleceń konsoli jaką należy wykonać w katalogu domowym mamera: echo "admin" >data/managers sed -i ’s/ 0/ 75/g’ players/a/admin 53 Mamer po pierwszym połączeniu doda w swoim katalogu players/a/ plik admin z wyzerowanymi uprawnieniami. Dla każdego użytkownika z listy TM należy odpowiednio zmodyfikować uprawnienia (zmiana poszczególnych kolumn na liczby z zakresu 0 100) aby umożliwić im pełen zakres komend dla mamera. Mamer korzysta z możliwości wykonywania poleceń administratora np. komendy pose wymuszającą automatycznie akcję gracza w turnieju Użytkowanie Poniższa sekwencja serwera ICS tworzy turniej, który oznaczony został tu przez mamera numerem jeden. mam mam mam mam mam create stv 1 P 4 stv 1 R 3 stv 1 T 1 open 1 Komenda mam att (Add To Tourney) dodająca użytkownika do otwartego turnieju. mam mam mam mam att att att att gnuchessDell 1 gnuchessDellA 1 craftyDell 1 craftyDellA 1 Dodawany użytkownik nie powinien w tym momencie brać udziału w rozgrywce z innym graczem, dlatego przed jego dodaniem zaleca się przerwać wszystkie bieżące gry. Każdy uczestnik turnieju ma ustawioną zmienną, informującą czy w danym turnieju się znajduje. Powoduj to, że nie akceptowane są zaproszenia od użytkowników nie znajdujących się w turnieju, czyli takiej ustawionej zmiennej nie posiadający. Poniżej widnieje statystyka poszczególnych rozgrywek w przeprowadzonym przykładowym turnieju. 54 :Tourney Players: Round : : Name : ----------------: 1 +wcrafty : 2 +stockfish : 3 +craftyA : 4 +crafty : : Average Rating fics% :Tourney Players: Round : : Name : ----------------: 1 +stockfish : 2 +wcrafty : 3 +craftyA : 4 +crafty : : Average Rating : 1 of 3 Rating Score Perfrm Upset ------ ----- ------ -----[1876] 1.0 [1870] [ 0] [1898] 0.0 [ 0] [ 0] [1819] 0.0 [ 0] [ 0] [1470] 0.0 [1476] [ 0] Results ------+04b *03w *02b -01w 1765.8 3 of 3 Rating Score Perfrm Upset ------ ----- ------ -----[1898] 3.0 [2121] [ 0] [1876] 1.5 [1729] [ 0] [1819] 1.5 [1748] [ 28] [1470] 0.0 [1464] [ 0] Results ------+03w +02b +04b -01w -01b +04w -02w -03b +04w =03w =02b -01b 1765.8 Wartość końcowa turnieju naliczana jest na podstawie wzoru (Podrozdział 2.3.2): Perf. Rating = Avg. opp. rating + 400 * ((wins-losses)/rounds) gdzie: wins - to liczba reprezentująca wygrane rozgrywki w turnieju losses - liczba z przegranymi rounds - ilość rund Avg. opp. rating - średnia wartość ELO zawodników Opisy wszystkich komend użytkownika mamer można uzyskać po wpisaniu mam help z argumentem będącym szukaną frazą. 55 chessd2% : :The index Help File: : : about forfeit : addchaos help : addtotourney index : announce join : chaos keep : close listmanagers : create listplayers : delete listtourneys : finger listtourneyvars : forfeit loadedusers : manager_commands manager_help manager_level messman open performance rating setmanagerlevel setres setstat settourneyvar showcommands showhelpfile shutdown swiss upset user_commands who withdraw Listę rozgrywanych turniejów można uzyskać pow wpisaniu mam lt fics% mam listtourneys (told mamer) fics% :mamer Notes: : No. Rds Sty Time Inc Md Vrnt Rtng Rnge Status Started at Ended at : --- --- --- ---- --- -- ---- --------- ------ -------------- -------------: 1 3 s 4 0 r r 0-9999 open n/a n/a : 2 0 s 4 0 r r 0-9999 open n/a n/a : 3 3 s 4 0 r r 0-9999 done 11:25 08/09/110 11:51 08/09/110 : 2.3 2.3.1 Informacje dodatkowe PGN PGN jest skrótem Portable Game Notation. Jest notacją używaną do zapisywania przebiegu gry wraz z dodatkowymi informacjami. Na początku pliku PGN, mającego najczęściej rozszerzenie .pgn, znajduje się siedem tagów. Każdy tag rozpoczyna się i kończy nawiasem kwadratowym oraz zawiera identyfikator i wartość. 56 [Event "F/S Return Match"] [Site "Belgrade, Serbia Yugoslavia|JUG"] [Date "1992.11.04"] [Round "29"] [White "Fischer, Robert J."] [Black "Spassky, Boris V."] [Result "1/2-1/2"] Wydruk 14. Przykładowe siedem tagów formatu PGN. Znajdują się tu informacje o typie i nazwie gry, miejscu, dacie, przeciwnikach i wyniku. Dalej umieszczana jest tekst ruchów. Każdy ruch składa się z numeru, rodzaju piona i przesunięcia. Przesunięcie określane jest na podstawie pozycji na szachownicy. Piony określane są dużymi literami : P - pion, K - król, Q - hetman, R - wieża , B -goniec, N - skoczek. Istnieje możliwość umieszczania komentarzy. 1.d3 b4 2.Nf3 d4 3.b3 e4 4.Ne1 a4 5.bxa4? [5.Nd2 and 6.Nd2-c4+ Nbcxc4 7.b3xc4 with a good game] 5...Nxa4 6.Kd2? Nc3 7.Nxc3 bxc3+ 8.Kd1 f4 9.a3 Rb6 10.a4 Ra6 11.a5 Kd5 12.Qa3 Qb5 13.Qa2+ Ke5 14.Rb1 Rxa5 15.Rxb5 Rxa2 16.Rb1 [to prevent 16...Ra1 mate!] 16...Ra5 17.f3 Ra4 18.fxe4 c4 19.Nf3+ Kd6 20.e5+ Kd5 21.exf6Q Nc5 22.Qf6xd4+ Kc6 23.Nf3-e5 mate. Wydruk 15. Format PGN - zapis przebiegu gry (tu druga historyczna rozgrywka pomiędzy człowiekiem i komputerem : mainframe MANIAC 1 przeciwko szachiście, Los Alamos 1956 r. ) Powyższa zmodyfikowana i dostosowana do potrzeb specyfikacja została wykorzystywana w protokole ICS do określania ruchów w czasie gry. 2.3.2 Ranking szachowy ELO Ranking szachowy ELO jest metodą obliczania relatywnej siły gry szachistów w punktacji elo. Nazwa ELO pochodzi od nazwiska Arpada Elo – amerykańskiego naukowca węgierskiego pochodzenia, którego prace ukształtowały szachowy system rankingowy oparty na naukowych podstawach. Profesor Arpad Elo był szachistą i aktywnym członkiem Federacji Szachowej Stanów Zjednoczonych (USCF43 ) od chwili jej założenia w 1939 roku. Ocena siły gry szachisty jest zadaniem dość trudnym, ponieważ nie istnieją metody bezwzględnej oceny wartości poszczególnych posunięć w partii szachów. Można jedynie porównać poziom gry dwóch szachistów, biorąc pod uwagę wynik partii pomiędzy nimi. Jeśli zawodnik wygrał partię, należy założyć, że w tej partii zagrał na wyższym poziomie niż jego przeciwnik. 43 Federacja Szachowa Stanów Zjednoczonych (United States Chess Federation, USCF) – organizacja zarządzająca rozgrywkami szachowymi w Stanach Zjednoczonych, członek Międzynarodowej Federacji Szachowej (FIDE). 57 Jeśli przegrał – na niższym. Remis w partii oznacza, że obaj szachiści grali na tym samym poziomie. USCF używała opracowanego przez Kennetha Harknessa liczbowego systemu rankingowego, który umożliwiał szachistom śledzenie własnych postępów w porównaniu z osiągnięciami innych szachistów. System Harknessa był prosty, lecz w niektórych okolicznościach dawał wyniki sprzeczne z intuicyjną oceną siły gry poszczególnych szachistów. Na zamówienie USCF profesor Elo opracował nowy system, oparty na regułach stosowanych w statystyce. Profesor Elo zaproponował model, w którym zmiana rankingu szachisty jest bezpośrednio zależna od rankingów przeciwników i rezultatów partii z nimi rozegranych. Porównanie przed turniejem rankingu zawodnika i jego przeciwników powinno określić oczekiwany rezultat tego zawodnika. Jeśli w turnieju uzyskał wynik lepszy od oczekiwanego, jego ranking powinien wzrosnąć, jeśli gorszy – zmaleć. Najistotniejszym pytaniem w tym modelu było: jak różnica rankingów przekłada się na oczekiwany wynik? Do tego wyliczenia Elo zaproponował potraktowanie oczekiwanego wyniku jako zmiennej losowej o rozkładzie normalnym. Centralnym założeniem jest, że wartość średnia z rozkładu normalnego osiągnięć gracza zmienia się w niewielkim stopniu między kolejnymi rozgrywkami. W każdej rozgrywce wartość jest mierzona na podstawie wyniku: jeśli przegrał zakładane jest, że w tym meczu gracz cechował się niższą punktacją; jeśli wygrał to wyższą; jeśli zremisował to taką samą jak przeciwnik. Punktacja względna jest uzależniona od odchylenia standardowego związanego z ilością rozegranych partii. Algorytm ELO mimo dość rozwiniętej teorii cechuje prosta implementacja. W dzisiejszych czasach nie jest to już zaleta, gdyż moc obliczeniowa znacznie wzrosła, jednak w tamtych czasach powszechną praktyką było obliczanie wyniku ELO na kalkulatorze. Dlatego też wprowadzono rozwinięcie rankingu ELO - ranking Glicko. Rankin ELO opiera się na poniższym równaniu: P R = OR + 400 × (W ins − Loses) G (1) ,gdzie PR oznacza wynik określający siłę gracza (performance rating), OR - punkty przeciwnika (opponent’s rating), G - liczba rozegranych partii, Wins - liczba wygranych, Loses liczba przegranych partii. USCF wprowadziła w życie system zaproponowany przez profesora Elo w 1960 roku. Dość szybko okazało się, że nowy system rankingowy jest znacznie bardziej precyzyjny od dotychczas stosowanego. W 1970 roku Międzynarodowa Federacja Szachowa (FIDE44 ) wprowadziła system rankingowy oparty na tym samym modelu. W obu systemach nastąpiły pewne zmiany w stosunku do oryginału, skutkiem czego rankingi liczone przez FIDE i USCF dla tych samych szachistów znacznie się różnią. Swoje niezależne systemy rankingowe wprowadziły również 44 Międzynarodowa Federacja Szachowa (fr. Fédération Internationale des Échecs, FIDE) – utworzona 20 lipca 1924 roku w Paryżu organizacja międzynarodowa zrzeszająca narodowe związki szachowe z całego świata, w tym Polski Związek Szachowy. Mottem FIDE jest Gens una sumus (łac. Jesteśmy jedną rodziną). Od roku 1995 na czele FIDE stoi Kirsan Ilumżynow, prezydent rosyjskiej republiki autonomicznej Kałmucji. 58 inne organizacje, np. Stowarzyszenie Zawodowych Szachistów (PCA) czy Internet Chess Club (ICC). Wszystkie te odmiany są oparte na tym samym modelu, lecz różnią się w szczegółach. W związku z tym określenie ranking ELO szachisty może niekiedy prowadzić do nieporozumień. Przykładowo, amerykański arcymistrz Grigorij Kajdanow w sierpniu 2002 roku miał ranking FIDE 2638 punktów i ranking USCF 2742 punkty (ranking USCF jest średnio o 100 punktów wyższy od rankingu FIDE). W rozgrywkach międzynarodowych powszechnie obowiązującym jest ranking FIDE, dlatego ranking ELO bez określenia konkretnej organizacji domyślnie odnosi się do listy rankingowej FIDE. Poniżej wypunktowano określenia graczy w zależności od punktów ELO stosowane przez USCF: • 2400 i powyżej: Senior Master • 2200–2399 dodać 300 gier powyżej 2200: Original Life Master • 2200–2399: National Master • 2000–2199: Expert • 1800–1999: Class A • 1600–1799: Class B • 1400–1599: Class C • 1200–1399: Class D • 1000–1199: Class E • 800-999: Class F • 600-799: Class G • 400-599: Class H • 200-399: Class I • 100-200: Class J 2.3.3 Ranking szachowy Glicko Punktacja Glicko wyznaczana jest na podstawie algorytmu i wartości początkowej. Obarczona jest błędem odwrotnie proporcjonalnym do ilości rozgrywek. Ranking ten wykorzystywany jest m.in przez serwer szachowy chessd (Podrozdział 2.1.3) oraz wcześniejsze wersje serwerów FICS. Wspomniany błąd umieszczany jest w kolumnie sterr w tabeli UserStats tego serwera, a jego początkowa wartość wynosi 350. 59 2.4 Silniki szachowe Silniki szachowe to programy grające w szachy. Nie posiadają własnego interfejsu graficznego (GUI), lecz komunikują się z zewnętrznymi aplikacjami, które go obsługują. W celu oszacowania siły gry silników szachowych organizuje się pomiędzy nimi turnieje szachowe. W ten sposób staje się możliwe nadanie każdemu z programów rankingu odpowiadającemu jego sile gry. Dodatkowy czynnik decydujący o sprawności silnika stanowi konfiguracja sprzętowa i oprogramowanie zainstalowane na komputerze. Poniższy rysunek przedstawia schemat podłączenia silnika za pośrednictwem jednego z protokołów UCI (ang. Universal Chess Interface) lub CECP (ang. Chess Engine Communication Protocol) do interfejsu, który następnie może dalej komunikować się z serwerem szachowym. Polyglot jest translatorem protokołu UCI nie do końca wspieranego przez Winboarda. Rysunek 10. Schemat połączenia silnika szachowego. Na powyższym schemacie przedstawiony są: gnuchess - popularny opensourcowy program szachowy; Books - książki z bazą standardowych ruchów otwierających w szachach; UCI - Universal Chess Interface; CECP - Chess Engine Communiction Protocol Źródło: opracowanie własne 2.4.1 Program szachowy - Crafty Crafty jest programem szachowym napisanym przez profesora Roberta Hyatta. Program pochodzi od silnika Cray Blitz, zwycięzcy Światowych Zawodów Szachowych (WCC, ang. World Computer Chess Championships) w roku 1982 oraz 1986. W WCCC w roku 2004 Crafty zajął czwarte miejsce uzyskując tyle samo punktów co silnik Fritz 8 grający na lepszym sprzęcie komputerowym. W 2007 roku w rankingu ELO przeprowadzonym przez SSDF (ang. Swedish Chess Computer Association) crafty miał 34 pozycję z wynikiem 2608. Silnik używa do komunikacji CECP (ang. Chess Engine Communication Protocol) i może być używany w połączeniu z popularnymi interfejsami szachowymi takimi jak XBoard lub Arena. 60 Program został napisany w ANSI C z dodatkowymi wstawkami asemblerowymi dla niektórych procesorów. Charakteryzuje się dużym zakresem wspieranych architektur. Kod źródłowy jest dostępny ale program jest wyłącznie do użytku niekomercyjnego. Jest to dzisiaj jeden z lepszych w rankingu silników szachowych. Zawiera także funkcję do testowania procesora. Crafty v23.3 (1 cpus) White(1): bench Running benchmark. . . ...... Total nodes: 500169253 Raw nodes per second: 369,696 Total elapsed time: 1352.92 Wydruk 16. Testowanie procesora programem Crafty. Test ten ukazuje, że 50M gałęzi w drzewie ruchów zostało dokonanych w ok 370k NPS. Crafty, podobnie jak inne silniki szachowe, pozwala na konfigurację wielu podstawowych opcji gry. Jedną z ważniejszych jest opcja ponder pozwalająca na wykorzystywania czasu przeciwnika ponder on (Allows Crafty to think on your time) hash=256m (Increases Crafty’s position hash to 256MB) hashp=64m (Increases Crafty’s pawn hash to 64MB) egtb (Tells Crafty to use Nalimov Endgame Tables (up to 6-Men)) cache=32m (Increases Crafty’s Endgame Table Cache to 32MB) swindle on (Allows Crafty to try to win drawn games (according to Endgame Tables)) mt=2 (Increases Crafty’s MaxThreads to 2 for a dual CPU computer) timebook 80 8 (Tells Crafty to think 80% longer on the first move out of book, then decrease the time over the next 8 moves) Wydruk 17. Spis zmiennych konfiguracyjnych programu szachowego Crafty Test wydajności przeprowadzany przez ten program szachowy trwa około kilku minut. W trakcie trwania testu procesor jest wykorzystywany w 100 procentach, natomiast nie ma żadnych znaczących operacji I/O. Przy niepoprawnie skompilowanym programie benchmark45 może pokazywać 0 NPS. Rozwiązaniem może być wtedy wtedy dodanie lub odjęcie niektórych flag kompilacyjnych. 45 Benchmark, testowanie wzorcowe jest to test wydajności systemu komputerowego: sprzętu lub oprogramowania. 61 Nie ma obecnie pakietu dystrybucyjnego na architekturę s390, a próby skompilowania tego programu z parametrami zakończyły się jego nieprawidłowym działaniem w postaci zerowego wyniku testy wydajności. W trakcie kompilacji pod s390 dodane zostały flagi SMP, ustawiona architektura generic oraz uwzględniona opcja TARGET jako system Linux. 2.4.2 Program szachowy Stockfish Stockfish jest silnikiem na licencji GPL3 rozwijanym przez Tord Romstad, Joona Kiiski i Marco Costalba. Wersja 1.9 wydana w 2010 roku jest dostępna w postaci kodu źródłowego C++ oraz skompilowanych wersji dla Microsoft Windows, Linuksa 32 i 64-bitowego, Mac OS X Snow Leopard 64 bit. Program wykorzystuje protokół UCI - do komunikacji z Xboard/Winboard wymaga translatora tego protokołu, programu polyglot. Ma wbudowane mechanizmy wykorzystujące wieloprocesorowość i może wykorzystywać do ośmiu rdzeni procesora. Maksymalny rozmiar tabel transpozycji (haszującyh) wynosi 8GB. Stockfish implementuje zaawansowany algorytm przeszukiwania - alpha-beta. 46 W różnych rankingach komputerowych Stockfish 1.7.1 zajmuje drugie miejsce po komercyjnym programie Rybka Program wywodzi się z innego projektu open source - Glaurang (nie rozwijany od 2008 r.), a dokładniej został wydzielony z wersji 2.1. Komenda bench Poniższy wydruk ukazuje jakie są możliwe konfiguracje wywołania programu w celu przeprowadzenia testów: stockfish bench [time = 60s] [fen positions file = default] [time, depth, perft or node limited = time] [timing file name = none] Hash size określa rozmiar tablicy haszującej w MB, możliwe wartości w granicach od 4 do 1024 threads liczba wątków od 1 do 8 time=60 jest opcjonalne określa wartość parametru time,depth,perft; domyślnie jest to time fen posistons file domyślnie default, plik do pozycji startowej time, depth, perft, node limited różne parametry testów 46 Opracowane na podstawie http://en.wikipedia.org/wiki/Stockfish (chess) 62 timing file name plik z określonymi czasami Przykładowo: Test z 4MB haszu i jednym wątkiem i czasem 1 sekunda: ./stockfish bench 4 1 1 Test na 8 wątkach ograniczony czasem 1s: ./stockfish bench 1024 8 1 default 1GB hash, Test do osiągnięcia głębokości drzewa przeszukiwania równego 30: ./stockfish bench 4 2 30 default depth 2.5 2.5.1 Opis dodatkowych wymaganych programów Polyglot Polyglot jest uniksowym programem umożliwiającym podłączenie silnika komunikującego się w protokole UCI do popularnych interfejsów graficznych lub ogólnie programów korzystających z protokołu WB (Winboard/Xboard). Argumentem dla polyglota jest plik konfiguracyjny określający program, jego ścieżki i wspierane komendy. Najczęściej taki plik udostępniany jest ze źródłem danego silnika szachowego. 63 [PolyGlot] EngineDir = . EngineCommand = stockfish Book = false BookFile = book.bin Log = true LogFile = stockfish.log Resign = true ResignScore = 600 [Engine] Hash = 128 Threads = 1 OwnBook = false Book File = book.bin Use Search Log = false Mobility (Middle Game) = 100 Mobility (Endgame) = 100 Pawn Structure (Middle Game) = 100 Pawn Structure (Endgame) = 100 Passed Pawns (Middle Game) = 100 Wydruk 18. Przykładowy plik konfiguracyjny programu polyglot dla silnika szachowego Stockfish. W swej funkcjonalności posiada także: • obsługę ruchów otwierających, • wspiera Chess960, • ma wbudowaną konwersję PGN do formatu ruchów otwierających, • zarządza plikami typu book.bin, • rozwiązuje konfilkty (np. zasada 50 ruchów). 2.5.2 Winboard WinBoard (skrót WB) jest front-endową aplikacja pozwalającą na graficzne użytkowania dowolnego serwera ICS. Jest to ta sama aplikacja co Xboard (XB), lecz skompilowana pod system Windows. Różnice w użytkowaniu występują w podawaniu flag: po slashu dla WB oraz po myślniku dla XB. Przy podawaniu wartość dla WB trzeba postawić znak ’=’ natomiast w XB można dodatkowko podać wartość po spacji. 64 xboard - X graphical user interface for chess SYNOPSIS xboard [options] xboard -ics -icshost hostname [options] xboard -ncp [options] |pxboard cmail [options] Opcja zp oznacza ZippyMode. Zippy jest wbudowanym w XBoarda (WinBoarda) mechanizmem nadzorującym komunikacje silnik szachowy - ICS. Sekwencja ics icshost wraz z opdpowiednimi parametrami aktywuje połączenie z serwerem. 2.5.3 Dekoder różnicy czasu serwera ICS Jednym z krytycznych elementów serwerów szachowych jest timeseal decoder. Analizuje on pakiety TCP i oblicza na ich podstawie bezwzględną wartość czasu pomiędzy otrzymanym pakietem z serwera i wysłanym od klient. Program ten jest udostępniany tylko w wersji binarnej ze względów bezpieczeństwa. Aktualnie nie ma wersji pod architekturę s390/s390x. Dlatego też wysoce wiarygodne wyniki pomiarów nie mogą zostać osiągnięte ze względu na mogące występować opóźnienia w transmisji. Wykaz dostępnych wersji orz informacje kontaktowe znajdują się pod adresem www.unix-ag.uni-kl.de. 65 Rozdział 3 Implementacja Na podstawie serwera FICS (Rozdział 2) oraz wiadomości o mainframe’ach (Rozdział 1) został zaimplementowany serwer dla programów szachowych. Serwer ten w obecnej formie jest dostępny pod adresem IP 212.191.89.82 na porcie 5001. Można dzięki niemu rejestrować silniki szachowe oraz mierzyć ich wydajność. Rysunek 11. Serwer programów szachowych. Źródło: opracowanie własne Powyżej przedstawiono aplikacje (wymagane lub opcjonalne) potrzebne do zrealizowania serwera programów szchowych na mainframie. Są to m.in system operacyjny Linux (Debian lub Slack390), serwer WWW - Apache, parser PHP, serwer szachowy - Chessd, oraz baza danych (MySQL lub PostrgreSQL). Proces instalacji przebiaga za pośrednictwem HMC (system operacyjny) oraz poprzez zdalne połączenie SSH w terminalu (reszta aplikacji). W związku, że cała platforma jest oparta na architekturze s390, aplikacje które nie były dostępne wraz z dystrybucją Linux musiały zostać skompilowany ze źródeł. Tak było m.in w przypadku serwera chessd (Podrozdział 2.1.3). Należy podkreślić, że rynek aplikacji dla komputera mainframe wraz z wprowadzeniem systemu z/Linux bardzo się poszerzył, umożliwiając tym samym realizacje tego projektu. Jednak mimo wprowadzenia pierwszej wersji systemu ok. 10 lat temu, nadal wielu deweloperów aplikacji nie w pełni wspiera architektury s390 (zobacz rozdział Dekoder różnicy czasu serwera ICS). 66 3.1 Komputery PC jako silniki szachowe Skonfigurowano i przygotowano do pracy pięć komputerów klasy PC, jako klientów serwera szachowego (wraz z mocą procesora i ilością pamięci RAM): • 2 x Compaq - 1.2 GHz, 512MB • 2 x Dell - 1.8 GHz, 512 MB • 1 x IBM x445 4 x 1.8 GHz, 4GB Zainstalowano na nich systemy operacyjne Linux (Slackware, Gentoo, Debian) oraz Windows (XP). Na każdym skonfigurowano i uruchomiono silnik szachowy (Stockfish, Crafty, Gnuchess, Rybka). Wszystkie Komputery umieszczono w racku. Znajdują się w KIS na ul. Stefanowskiego. Poglądowy schemat połączeń silników wraz z serwerem na mainframie z800 przedstawia rysunek 12. Rysunek 12. Schemat projektu serwera programów szachowych na mainframie w KIS. Po prawej znajduje się rack z pięcioma skonfigurowanymi komputerami (programami szachowymi) podłączonymi do serwera na mainframie (po lewej stroni). Chmura reprezentuje sieć internetową łącząca zewnętrznych klientów z serwerem. Mogą to być użytkownicy bądź silniki szachowe. Źródło: opracowanie własne 3.2 Automatyzacja zadań serwera Chessd W związku z potrzebą automatyzacji zadań na serwerze chessd opracowano dodatkowe skrypty. Poniżej plik telnet.sh mający za zadanie połączenia się z serwerem ICS jako użytkownik typu admin oraz wykonania podskryptu pose-match.sh z dalszymi komendami. Kod 1. telnet.sh 1 2 3 4 sleep 2 echo ”roboAdmin” sleep 2 echo ” 49 g9 ” 67 5 6 7 8 sleep 2 . / pose−match . sh ‘ cat l i s t . t x t | xargs ‘ sleep 2 echo ” e x i t ” Powyższy skrypt należy wywołać poleceniem: ./telnet.sh | telnet 212.191.89.82 5000 Dla każdego danego użytkownika wykonywana jest wbudowana komenda match rozpoczynająca grę z podanym przeciwnikiem. Kod 2. pose-match.sh 1 2 3 4 5 #! / b i n / sh l i s t 1 =$ ( p r i n t f ”%s \n” $@ | . / r a n d o m S h u f f l e . sh ) l i s t 2 =$ ( p r i n t f ”%s \n” $@ | . / r a n d o m S h u f f l e . sh ) f o r i i n $ l i s t 1 ; do p o s e=$ p o s e ” p o s e $ i s e e k 5 0 r a t e d ; ” ; done ; echo $ p o s e ; Kod 3. Skrypt roboAdmin - komenda mecz 1 2 3 4 5 6 7 8 #! / b i n / sh l i s t =$@ for i in $ l i s t ; do f o r j i n $ l i s t ; do echo ” p o s e $ i match $ j 1 0 r a t e d ” ; sleep 1 ; done ; done ; Lista podana jako pierwszy parametr jest plikiem tekstowym zawierającym oddzielone znakiem końca linii nazwy silników szachowych. W przypadku gdy silnik szachowy jest administrowany z poziomu strony internetowej na serwerze należy sprawdzić, czy dozwolone jest z poziomu PHP operowania na plikach tekstowych, gdyż często funkcja ta w związku z bezpieczeństwem jest zablokowana. Alternatywnym sposobem pobierania listy jest komenda SQL wykonywana za pośrednictwem konsolowego klienta bazy danych (tylko dla serwera chessd ) np. jak mysql: mysql -s chessd -e "select username from ChessdList where action=’seek’" Przełącznik -s usuwa ramki i separuje kolumny tabulatorem, chessd jest tu bazą danych, a komenda po przełączniku -e zwraca nazwy użytkowników z tabeli ChessdList spełniający warunek (action) odpowiedni dla zadanej listy (tu seek, czyli użytkowników, którzy zadeklarowali grę z każdym chętnym do gry). Inicjacja całej sekwencji wykonywana jest w pętli while. Uwzględniono wartość pauzy (komenda sleep) tu średnio równej długości najkrótszego pojedynku, czyli ok. 60 sekund, w celu zapewnienia optymalnego czasu ponownego logowania. while true; do ./telnet.sh | telnet localhost 5000; sleep 60; done; 68 3.3 Implementacja skryptów dla silników szachowych Skrypt crafty.sh uruchamia silnik z odpowiednimi parametrami. Crafty potrafi się bezpośrednio komunikować z Xboardem, więc można to wykorzystać w celu łączenia się za jego pośrednictwem z ICS-em. Skrypt startowy jest podobny do przedstawionego niżej sryptu startowego dla silnika Stockfish. Ten drugi wymaga programu polyglot (linijka 11), gdyż komunikuje się protokołem UCI (9). Linijki 17 i 18 poniższego skryptu zapewniają, że w przypadku jakiegoś błędnego ruchu lub wyjątku program nie będzie wyświetlał informacji blokujących dalszą aktywność. Linijka 14 wskazuje na plik z dwoma linijkami zawierającymi login i hasło (znak końca linii pliku musi być w formacie unix). Kod 4. stockfish.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 while true ; do xboard −s i z e small −zp −i c s −i c s h o s t 2 1 2 . 1 9 1 . 8 9 . 8 2 −a u t o f l a g −fUCI −f d ” s t o c k f i s h −171− l i n u x / s r c / ” −f c p ” p o l y g l o t s t o c k f i s h . i n i ” −z i p p y P l a y True −zippyGameEnd ” say t h a k s ; ; s e e k 1 0 r a t e d ; ” −i c s l o g o n . s t o c k f i s h −u s e P o l y g l o t B o o k true −i c s h e l p e r ” t i m e s e a l ” −popupMoveErrors f a l s e −popupExitMessage f a l s e ; sleep 10; done ; Analogiczny jak dla systemu Linuks skrypt wsadowy dla systemu Windows (tu dla programu gnuchess) przedstawiono poniżej: Kod 5. gnuchess.bat 1 2 3 4 5 6 7 8 9 ” c : \ Program F i l e s \WinBoard − 4 . 2 . 7 \ winboard . exe ” / zp / i c s / i c s h o s t =212.191.89.82 /zippyGameEnd=” say thanks ! ; s e e k 1 0 ; s e e k 2 0 ; s e e k 5 0 ; ” / f c p=GNUChess . exe / f d=”C: \ Program F i l e s \WinBoard − 4 . 2 . 7 ” / i c s l o g o n=” c : \ Documents and S e t t i n g s \ e n g i n e \My Documents \ g n u c h e s s . t x t ” / popupExitMessage=f a l s e / i c s h e l p e r=t i m e s e a l 69 Przydatną rzeczą jest uruchomienie silnika pod Windowsem wykorzystując komende while. Rozwiązaniem może być tu biblioteka cygwin.dll oraz pakiet BASH taką komende zawierający. Dzięki temu można uruchomić skrypt .bat następująco: while true; do gnuchess.bat; sleep 10; done; Pętla zapewnia, w wypadku jakiegoś czynnika rozłączającego połącznie, automatyczne wznowienie pracy. 3.4 Implementacja strony internetowej serwera Strona internetowa jest wymaganym komponentem do działania serwera chessd (Podrozdział 2.1.3). Dostępne, gotowe rozwiązanie nie spełniało funkcjonalności, a dodatkowo pojawiła się potrzeba umieszczenia informacji odnośnie projektu serwera szachowego. W związku z tym opracowano i zaimplementowano taką stronę przy pomocy nadzędzia Zend. 3.4.1 Projekt strony w Zend Framework Zend jest szkieletem zawierającym narzędzia, zdefiniowane struktury, czy komponenty wspomagająca tworzenie, rozwój i testowanie aplikacji. Wykorzystuje (stosowany sukcesywnie także w innych frameworkach) wzorzec projektowy MVC (ang. Model-View-Controller). Model-ViewController zakłada podział aplikacji na trzy główne warstwy: • Model - jest pewną reprezentacją problemu bądź logiki aplikacji. • Widok - opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika. Może składać się z podwidoków odpowiedzialnych za mniejsze części interfejsu. • Kontroler - przyjmuje dane wejściowe od użytkownika i reaguje na jego poczynania, zarządzając aktualizacje modelu oraz odświeżenie widoków. W przypadku ZF model oznacza bazę danych i wszystkie zagadnienia z nią związane, widok jest warstwą prezentacyjną skupiającą przede wszystkim kod HTML, a kontroler zarządza zapytaniami użytkownika i zwraca odpowiedni model do odpowiedniego widoku. Widok jest obiektem wykorzystującym plik o nazwie będącej nazwą funkcji kontrolera. Plik ten znajduję się w podkatalogu views/scripts o nazwie takiej samej jak nazwa kontrolera (zob. Kod 3.5.2). Jako jeden z elementów narzucających pewną jednolitą strukturę wprowadzono mechanizm modułowy. Moduł to podaplikacja ze standardową strukturą katalogów taką jak w głównej aplikacji. Wszystkie pliki modułu znajdują się w appication/modules w katalogu z odpowiednią nazwą. Tym samym moduł umożliwia wygodne dodawanie lub usuwanie do innego projektu poprzez zwyczajne skopiowanie lub usunięcie katalogu. Wszelka potrzebna konfiguracja jest umieszczana w pliku Bootstrap.php (podobnie jak w aplikacji głównej). 70 Jednym z elementów globalnych dla całej aplikacji jest plugin. Jest to klasa (obiekt) wykonywujący pewne krytyczne czynności jeszcze przed wykonaniem funkcji kontrolera. Przykładowo plugin rozszerzający standardową klasę Zend Acl umożliwia kontrolowanie poziomu dostępu. Inne zaawansowane funkcje to np. kontrola trasy - routing, pozwalająca na ustawienie własnych reguł adresowanie poszczególnych akcji kontrolera. Do jednych z podstawowych i często wykorzystywanych należy klasa Zend Form, która znacznie upraszcza budowanie formularzy i ich obsługę. Cały framework zawiera ciągle rosnącą liczbę użytecznych klas (np. XML Parser, AJAX, Lucene Search) będących zbiorami (wrappers) na istniejące podstawowe funkcje lub powszechne rozwiązania PHP. Wymagane i opcjonalne klasy przedstawiono na rysunku 13. Rysunek 13. Klasy PHP narzędzia Zend. Jest tu przedstawiona droga (Zend Route) od zapytania do uzyskania odpowiedniego widoku. Na początku są aktywowane kontrolery główne, następnie kontroler odpowiedzialny za odpowiednią akcję. Przy konstruowaniu widoku może być wykorzystany zestaw dodatkowych klas i komponentów. Biblioteka komponentów składa się z różnorakich klas odpowiedzialnych np. za generowanie danych, współpracę z bazą danych, sesję użytkownika, czy inne odpowiedzialne za wiadomości e-mail lub powiadomienia RSS. Źródło: na podstawie informacji na stronie zendframework.com. Uzasadnienie wyboru Programiści PHP dość długo wykorzystywali strukturalny model programowania jaki oferuje ten skryptowy język. Mimo tego, że w wersji 3 i 4 PHP istniało pojęcie klasy i obiektu to było traktowane jako zwykły typ (przez co stosowanie klas było mało wydajne - nie było 71 referencji). Wraz z ciągle rozwijającymi się wersjami PHP została dodana możliwość wydajniejszego programowania obiektowego. Od wersji 5 język PHP oferuję szerszy i wydajniejszy zakres wsparcia dla obiektowości. Biorąc pod uwagę wcześniejsze innowacyjne i sukcesywnie wprowadzone techniki programowania oparte o obiektową strukturę danych (np. w języku Java, takie jak mapowanie obiektoworelacyjne47 ), możliwa stała się ich implementacja także w PHP. Dzięki odpowiednim zabiegom programistycznym uzyskać można prostą i intuicyjną reprezentację klasy odzwierciedlającą np. tabelę bazy danych. Takie m.in rozwiązanie zostało zaimplementowane w warstwie modelu w Zend Framework, umożliwiając łatwe operowanie tablicami bazy danych (informując tym samym o przeznaczeniu i ułatwiając same mechanizmy współpracy z bazą). Ten same zasady zostały wykorzystany do budowy warstwy kontrolera oraz widoku. Uproszczenie samego procesu zarządzania projektem (a zwłaszcza bardzo rozbudowanego) stanowi istotę ZF. Dodatkowo sprawia, że raz napisany kod może być łatwo wykorzystany w następnych rozwiązaniach lub łatwo modyfikowany przez osoby trzecie. Zend wprowadza też zespół reguł i dobrych nawyków dotyczących nazewnictwa klas, czy dokumentacji. Szkieletu projektu Przed rozpoczęciem prazy z Zend Framework należy pobrać go ze strony zendframework.com. Minimalny pakiet (ok. 4MB) zawiera wszystkie potrzebne klasy PHP. Po rozpakowaniu można przystąpić do utworzenia nowego projektu. W pierwszej kolejności należy umieścić katalog bin w zmiennej $PATH. W katalogu tym znajduję się skrypt BASH zf.sh wykonujący czynności automatycznego tworzenia i zarządzania projektem. Bazuje on na klasie PHP znajdującej się w pliku zf.php w tym samym katalogu. Wymaga to w związku z tym posiadania parsera tego języka na komputerze. Poniżej umieszczona jest lista zmiennych, dodanych dla potrzeb organizacji pracy: PROJECT_NAME=skel ZEND_PATH=/path/to/zend NEW_PROJECT=/path/to/project ZEND_LIB=$ZEND_PATH/library ZEND_BIN=$ZEND_PATH/bin PATH=$PATH:$ZEND_BIN ZEND PATH to zmienna do rozpakowanego pliku z Zend Framework. Zmienna ZEND BIN wskazuje na położenie skryptu wykonywalnego zf.sh. Kolejna linijka umieszcza w zmiennej PATH poprzednio zdefiniowaną lokalizację. Umożliwia to wykonanie skryptu podając jego nazwę z dowolnego miejsca nowego projektu. Poniżej znajduję się sekwencja inicjowania projektu, pozwalająca na utworzenie wymaganego drzewa katalogów i ustawienie odpowiednich linków do katalogów z biblioteką Zend. 47 Mapowanie obiektowo-relacyjne (ang. Object-Relational Mapping ORM) - sposób odwzorowania obiektowej architektury systemu informatycznego na bazę danych (lub inny element systemu) o relacyjnym charakterze. 72 mkdir -p $NEW_PROJECT && cd $NEW_PROJECT zf create project $PROJECT_NAME ln -s $ZEND_LIB/Zend library/Zend zf create layout Pierwsza linijka oznacza przejście do nowo dodanego katalogu z projektem, który jest określony obraną dowolnie wcześniej zmienną NEW PROJECT. W drugiej linijce znajduję się komenda wywołująca program zf (alias do zf.php) z parametrami, które określają polecenie dodania nowego projektu o nazwie $PROJECT NAME. Poniżej praca ze skryptem zf.sh ukazująca podstawowe komendy do zarządzania modelem, widokiem oraz kontrolerem. $ zf create model Person Creating a model at /home/papi/web/zend/new/application/models/Person.php Updating project profile ’/home/papi/web/zend/new/.zfproject.xml’ [papi ~/web/zend/new]$ zf create controller Person Creating a controller at /home/papi/web/zend/new/application/controllers/PersonController.php Creating an index action method in controller Person Creating a view script for the index action method at /home/papi/web/zend/new/application/views/scripts/person/index.phtml Creating a controller test file at /home/papi/web/zend/new/tests/application/controllers/PersonControllerTest.php Updating project profile ’/home/papi/web/zend/new/.zfproject.xml’ Wydruk 19. Przykład zarządzania projektem Zend Framework Pierwsza komenda dodaje model o nazwie Person. Automatycznie dodawane są odpowiednie katalogi oraz pliki. Nazwa kontrolera przyjmuję postać PersonController. Zaktualizowany zostaje wewnętrzny plik konfiguracyjny projektu oraz dodatkowo dodane są klasy wykorzystywane do ewentualnego testowania. Konfiguracja serwera WWW Po umieszczeniu projektu na serwerze zalecane jest dodatkowe dodanie wpisu wirtualnego adresu (Virtual Host). W przypadku Apache’a należy dodać do odpowiedniego pliku konfiguracyjnego serwera sekwencję przypisującą wybranemu adresowi WWW odpowiedni katalog projektu. Kod 6. apache.conf 1 2 <V i r t u a l H o s t ∗:80 > ServerName zend . l o c a l h o s t 73 3 DocumentRoot / path / t o / p r o j e c t 4 5 SetEnv APPLICATION ENV ” development ” 6 7 8 9 10 11 12 13 <D i r e c t o r y / path / t o / p r o j e c t / p u b l i c > D i r e c t o r y I n d e x i n d e x . php AllowOverride All Order a l l o w , deny Allow from a l l </D i r e c t o r y > </V i r t u a l H o s t > W zależności od wersji systemu lub dystrybucji najbezpieczniej umieścić ten wpis w głównym pliku o nazwie apache.conf lub httpd.conf, rezydującym najczęściej w katalogu /etc/apache2 lub /etc/httpd.conf. Szczegółowy opis znaleźć można w dokumentacji danej dystrybucji lub wersji serwera. W ramach testów w przypadku serwera znajdującego się na np. na komputerze domowym można przypisać adres np. zend.localhost i ustawić lokalną translację nazw DNS (ang. Domain Name System) na adres 127.0.0.1, co pod systemem Linux reprezentowane może być linijką 127.0.0.1 localhost zend.localhost w pliku /etc/hosts. Po zresetowaniu serwera, w przeglądarce adres http://zend.localhost/person/index wywoła domyślną akcję index na kontrolerze Person. Przy poprawnej konfiguracji powinien ukazać się standardowy widok znajdujący się w person/index.phtml : View script for controller Person and script/action name index 3.4.2 Analiza bazy danych Specyfikacja bazy danych nie była podana wraz z dokumentacją projektu chessd. Całość analizy jest oparta na badaniu poszczególnych pól oraz przykładowych wpisów. Zostało to wykorzystane przy programowaniu strony internetowej. Większość operacji wykonuję się właśnie na bazie danych. (Podrozdział 2.1.4) 3.4.3 Opracowany moduł chessd Ten zaimplementowany moduł obsługuje podstawowe czynności na bazie danych serwera chessd (Podrozdział 2.1.3). Wykorzystuje strukturę narzuconą w Zend Framework (Podrozdział 3.4.1). Służy pośrednio, dzięki opracowanym skryptom (Podrozdział 3.2), do komunikacji z serwerem i jego zarządzania. Serwer chessd jest programem napisanym w języku C wykorzystującym połączenie TCP oraz bazę danych. Każda tabela tego serwera została tu zamodelowana w postaci oddzielnej klasy PHP. Wykorzystano w tym celu dziedziczenie po klasie Zend Db Abstract znajdującej się w bibliotece Zend. 74 Opis klasy modelu użytkownika Zmienna name określa tabele z bazy. Klasa jest dziedziczy po Zend Db Table Abstract i dzięki temu można używać takich funkcji jak: • find - wyszukiwanie, • save - zapisywanie, • insert - dodawania danych, • select - specyfikowanie rekordów, • fetchAll - pobierania określonych rekordów. Określone jest tu także połączenie z bazą, będące obiektem Zend Db w zmiennej o nazwie db. W linijkach 7-13 jest inicjowany obiekt Zend Db dla oddzielnego połączenia z bazą danych serwera chessd. Funkcja w linijce 15 ma za zadanie aktualizowanie wpisów użytkownika serwera ICS. Dane POST są uzyskiwane dzięki formularzowi wykorzystującemu klasę Zend Form. Jeśli użytkownik został odnaleziony (17) to zwracany jest obiekt Zend Db Table Row reprezentujący znaleziony wiersz tabeli. Następnie modyfikowane są zmienne tego obiektu na podstawie zweryfikowanych wcześniej danych POST (20, 22, 25, 29). Funkcja save tego obiektu zapisuje zmiany do bazy (22). W przypadku jakichkolwiek nieprzewidzianych problemów zgłaszany jest wyjątek (35). Kod 7. Chessd Model User 1 2 3 <?php c l a s s Chessd Model User e x t e n d s Z e n d D b T a b l e A b s t r a c t { 4 5 p r o t e c t e d $ name=’ ChessdUser ’ ; 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 function s e t u p D a t a b a s e A d a p t e r ( ) { $ t h i s −> db = Zend Db : : f a c t o r y ( ’ Pdo Mysql ’ , a r r a y ( ’ host ’ => ’ l o c a l h o s t ’ , ’ username ’ => ’ c h e s s d ’ , ’ password ’ => ’ ∗ ∗ ∗ ∗ ∗ ∗ ’ , ’ dbname ’ => ’ c h e s s d ’ )); } p u b l i c function updateUser2 ( $u ) { $rowUser=$ t h i s −>f i n d ( $u [ ’ id ’ ] )−>c u r r e n t ( ) ; i f ( $rowUser ) { i f ( i s s e t ( $u [ ’ username ’ ] ) && ! empty ( $u [ ’ username ’ ] ) ) $rowUser−>username=$u [ ’ username ’ ] ; i f ( i s s e t ( $u [ ’ f u l l n a m e ’ ] ) && ! empty ( $u [ ’ f u l l n a m e ’ ] ) ) 75 $rowUser−>f u l l n a m e=$u [ ’ f u l l n a m e ’ ] ; 22 23 i f ( i s s e t ( $u [ ’ e m a i l a d d r e s s ’ ] ) && ! empty ( $u [ ’ e m a i l a d d r e s s ’ ] ) ) $rowUser−>e m a i l a d d r e s s=$u [ ’ e m a i l a d d r e s s ’ ] ; e l s e i f ( i s s e t ( $u [ ’ email ’ ] ) && ! empty ( $u [ ’ email ’ ] ) ) $rowUser−>e m a i l a d d r e s s=$u [ ’ email ’ ] ; i f ( i s s e t ( $u [ ’ d e l e t e d ’ ] ) && ! empty ( $u [ ’ d e l e t e d ’ ] ) ) $rowUser−>d e l e t e d=$u [ ’ d e l e t e d ’ ] ; else $rowUser−>d e l e t e d = ’ 0 ’ ; $rowUser−>s a v e ( ) ; return $rowUser ; } else { throw new Z e nd E x c e pt i o n ( ’ Error ’ ) ; } 24 25 26 27 28 29 30 31 32 33 34 35 36 37 } 38 39 } Opis klasy formularza użytkownika Jak pokazuje Kod 8, formularz zawiera elementy (Zend Form Element) określone nazwą i typem (linijki 8, 12, 16, 23, 28). Przykładowo w linijce 10 typem jest text a nazwą username. Typy wprost przekładają się na podstawowe elemety HTML formularza: pole tekstowe, wiersz, pole ukryte, lista itp. Każdy element jest konstruowany funkcją createElement a następnie dodawany do obiektu funkcją addElement. Klasa zawiera wbudowane mechanizmy ułatwiające sprawdzanie, filtrowanie i wyświetlanie. Można określić czy dane pole jest wymagane funkcją setRequired. W przypadku jakichkolwiek błędów zostaną zwrócone zdefiniowane komunikaty. Obiekt może być wyświetlony w postaci gotowego formularza przy użyciu podstawowych funkcji print lub echo (np. print new Chessd Form User()). Kod 8. Chessd Form User 1 2 3 <?php c l a s s Chessd Form User e x t e n d s Zend Form { 4 5 6 7 8 9 10 p u b l i c function i n i t ( ) { $ t h i s −>setmethod ( ’ post ’ ) ; $ i d=$ t h i s −>c r e a t e e l e m e n t ( ’ hidden ’ , ’ id ’ ) ; $id−>s e t d e c o r a t o r s ( a r r a y ( ’ ViewHelper ’ ) ) ; $ t h i s −>addelement ( $ i d ) ; 11 12 13 14 $ i d=$ t h i s −>c r e a t e e l e m e n t ( ’ hidden ’ , ’ u s e r i d ’ ) ; $id−>s e t d e c o r a t o r s ( a r r a y ( ’ ViewHelper ’ ) ) ; $ t h i s −>addelement ( $ i d ) ; 76 15 $username=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ username ’ ) ; $username−>s e t l a b e l ( ’ nazwa uzytkownika : ’ ) ; $username−>s e t r e q u i r e d ( true ) ; $username−>a d d f i l t e r ( ’ S t r i p T a g s ’ ) ; $username−>a d d e r r o r m e s s a g e ( ’ wymagana j e s t nazwa uzytkownika ! ’ ) ; $ t h i s −>addelement ( $username ) ; 16 17 18 19 20 21 22 $password=$ t h i s −>c r e a t e e l e m e n t ( ’ password ’ , ’ password ’ ) ; $password−>s e t l a b e l ( ’ h a s l o : ’ ) ; $password−>s e t r e q u i r e d ( true ) ; $ t h i s −>addelement ( $password ) ; 23 24 25 26 27 $ e m a i l=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ email ’ ) ; $email −>s e t l a b e l ( ’ e m a i l : ’ ) ; $email −>s e t r e q u i r e d ( f a l s e ) ; $email −>a d d f i l t e r ( ’ S t r i p T a g s ’ ) ; $email −>a d d v a l i d a t o r ( new Z e n d V a l i d a t e E m a i l A d d r e s s ( ) ) ; $email −>s e t r e q u i r e d ( true ) ; $ t h i s −>addelement ( $ e m a i l ) ; 28 29 30 31 32 33 34 35 $ f u l l n a m e=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ f u l l n a m e ’ ) ; $ f u l l n a m e −>s e t l a b e l ( ’ Parametry s i l n i k a : ’ ) ; $ f u l l n a m e −>s e t r e q u i r e d ( true ) ; $ f u l l n a m e −>a d d f i l t e r ( ’ s t r i p t a g s ’ ) ; $ t h i s −>addelement ( $ f u l l n a m e ) ; $ t h i s −>getElement ( ’ f u l l n a m e ’ )−>s e t R e q u i r e d ( true ) ; 36 37 38 39 40 41 42 $prompt=$ t h i s −>c r e a t e E l e m e n t ( ’ t e x t ’ , ’ prompt ’ ) ; $prompt−>s e t L a b e l ( ’ Prompt ’ ) ; $ t h i s −>addElement ( $prompt ) ; 43 44 45 46 $submit=$ t h i s −>addelement ( ’ submit ’ , ’ submit ’ , a r r a y ( ’ l a b e l ’=>’ z a t w i e r d z ’) ) ; 47 48 } 49 50 51 52 53 54 55 56 p u b l i c function toPasswordForm ( ) { $ t h i s −>removeElement ( ’ f u l l n a m e ’ ) ; $ t h i s −>removeElement ( ’ e m a i l a d d r e s s ’ ) ; $ t h i s −>removeElement ( ’ username ’ ) ; $ t h i s −>removeElement ( ’ prompt ’ ) ; $ t h i s −>removeElement ( ’ email ’ ) ; } 57 58 59 60 61 62 p u b l i c function addActivetionCheckbox ( ) { $ a c t i v e=$ t h i s −>c r e a t e E l e m e n t ( ’ checkbox ’ , ’ a c t i v a t e ’ ) ; $ a c t i v e −>s e t L a b e l ( ’ Aktywny ’ ) ; $ t h i s −>addElement ( $ a c t i v e ) ; 77 } 63 64 65 66 } Opis klasy kontrolera użytkownika Opracowana klasa wykonuje wszystkie operacje związane z logiką użytkownika serwera chessd (przykładową komendę ukazuje Kod 9). Kod 9. updateAction 1 2 3 p u b l i c function updateAction ( ) { // a c t i o n body 4 5 $userForm=new Chessd Form User ( ) ; $userForm−>removeElement ( ’ password ’ ) ; $userModel=new Chessd Model User ( ) ; 6 7 8 9 i f ( $ t h i s −> r e q u e s t −>i s P o s t ( ) ) { i f ( $userForm−>i s V a l i d ( $ POST ) ) { 10 11 12 $ i d e n t=Zend Auth : : g e t I n s t a n c e ( )−>g e t I d e n t i t y ( ) ; $userModel−>updateUser2 ( a r r a y ( ’ id ’=>$userForm−>g e t V a l u e ( ’ id ’ ) , ’ u s e r i d ’=> $ i d e n t −>id , ’ username ’=>$userForm−>g e t V a l u e ( ’ username ’ ) , ’ e m a i l a d d r e s s ’=>$userForm−>g e t V a l u e ( ’ email ’ ) , ’ f u l l n a m e ’=>$userForm−>g e t V a l u e ( ’ f u l l n a m e ’ ) , )); return $ t h i s −> f o r w a r d ( ’ m y l i s t ’ ) ; 13 14 15 16 17 18 19 20 21 } } else { $ i d=$ t h i s −> r e q u e s t −>getParam ( ’ id ’ ) ; $ c u r r e n t U s e r=$userModel−>f i n d ( $ i d )−>c u r r e n t ( ) ; 22 23 24 25 26 $userForm−>p o p u l a t e ( $ c u r r e n t U s e r −>toArray ( ) ) ; $userForm−>getElement ( ’ email ’ ) −>s e t V a l u e ( $ c u r r e n t U s e r −>e m a i l a d d r e s s ) ; $userForm−>getElement ( ’ id ’ ) −>s e t V a l u e ( $ c u r r e n t U s e r −>c h e s s d u s e r i d ) ; 27 28 29 30 31 32 } $userForm−>s e t A c t i o n ( ’ / c h e s s d / u s e r / update ’ ) ; $ t h i s −>view−>form=$userForm ; 33 34 35 36 } 78 W linijce 6 konstruowany jest nowy obiekt dziedziczący po Zend Form. Obiekt reprezentuje formularz wraz z funkcjami i danymi z nim związanymi. Np. formularz ten posiada funkcję sprawdzającą obecność danych POST (10) oraz ich poprawność (11). Wszystkie dane z obiektu Chessd Form User są pobierane za pomocą metody getValue. W linijce (7) metody updateUser kontrolera User Controller modułu Chessd, jest zwracany obiekt Chessd Model User dziedziczący po Zend Db Table Abstract. Klasa abstrakcyjna dostarcza funkcje do wybierania i zapisywania danych z tabeli. W linijce 14 wykorzystana jest napisana funkcja oparta o te metody i zapisująca zaktualizowany rekord w bazie. W linijce 25 przekazywane są aktualne dane do formularza, wykorzystując do tego funkcję: toArray oraz populate. Dane, tu formularz, są przekazywane dalej do widoku, który jest zawsze identyfikowany jako zmienna view (34). Poniżej plik renderujący dla danego widoku Kod 10. Plik views/scripts/update.phtml 1 2 3 4 5 <h2>Edycja uzytkownika FICS</h2> <?php echo $ t h i s −>form ; ?> <p> <a h r e f= ’ / c h e s s d / u s e r / password / i d /<?php echo $ t h i s −>form−>getElement ( ’ i d ’ )−> g e t V a l u e ( ) ;? > ’>Zmien h a s l o </a> </p> Z reguły widok wyświetla dane z odpowiedniego kontrolera, tu formularz i link do następnego kontrolera. 3.4.4 Dodatkowe funkcje Strona oferuje także funkcje informacyjne związane z projektem. Posiada także wbudowany system CMS (ang. Content Management System) co pozwala na edycję treści. Wygląd strony (stylistyka) oraz rozkład menu i dodatkowych funkcji użytkownika ( tu administratora) ukazuje poniższy rysunek: 79 Rysunek 14. Gotowy projekt strony internetowej wykorzystujący opracowany modul chessd. W menu głownym są odnośniki do spisu stron, formularza rejestracyjnego, czy formularza zgłaszania błędów. Funkcjonalność modułu chessd jest reprezentowana przez ’Menu Serwera’. 80 3.5 3.5.1 Testy Test przy pomocy serwera szachowego Idea realizacji platformy dla testowania programów szachowych na mainframie była przede wszystkim dyktowana praktycznym wykorzystaniem oferowanej technologii mainframe. Charakterystyka serwera mającego takie usługi realizować skupia się przede wszystkim na liczbie obsługiwanych klientów co w terminologii IBM przekłada się na MSU - milionach usług na godzinę. Typowy serwer FICS może obsługiwać tysiące podłączonych klientów. Poszczególny klient wysyła małe porcje danych w postaci komendy lub sekwencji ruchów, z częstotliwością średnio kilku sekund. Serwer programów szachowych jest zmodyfikowaną wersją FICS-a opierającego się na tymże kodzie. Program szachowy może wysyłać dane w ułamku sekundy z faktu, że zamiast człowieka jest postawiony o wiele szybszy komputer. Uwidacznia się to np. w potyczkach jednominutowych gdzie szybkość podjętej decyzji ma podstawowy wpływ na wynik gry. Dodatkowo program jest podłączony na stałe. W ustawieniach na stronie można dodać opcję ’Graj ze wszystkimi’ co sprawia, że ciągle będzie uczestniczył w rozgrywkach. Oprócz zdalnie podłączonych graczy na mainframie można wewnętrznie podłączyć zadaną liczbę silników szachowych gotowych do gry z przeciwnikiem. Poszczególny grający program obciąża wydzielony procesor w 100 procentach a w trybie ponder oblicza własny ruch nawet w czasie przeznaczonym dla oponenta. Stwarza to warunki testowe dla sprawdzania jak przykładowo wydajność serwera zachowuje się przy 100% wykorzystaniu procesorów. Na innym wydzielonych zasobach sprzętu (LPAR) rezydują pojedynczo znane wersje popularnych silników szachowych w celu pomiaru wydajności z komplementarnymi programami na maszynach przeciwnych. Z faktu jednak braku wymaganego programu pod tę architekturę (Podrozdział 2.5.3) powyższe przedstawia propozycję do ewentualnej implementacji. Testy zostały wykonane w oparciu o skompilowany silnik szachowy z wbudowanym mechanizmem do testowania (Podrozdział 2.4.2). 3.5.2 Testy procesora przy pomocy programu szachowego System Linux wykrywa typ procesora jako SMP. Na każdym wydzielonym LPAR-rze jest dostęp do całkowitej mocy obliczeniowej procesora (gwarantują to mechanizmy wirtualizacji procesora). W testach dało się zauważyć że dwa, trzy równoległe pomiary wartości procesora na poszczególnych LPAR-ach skutkowały analogicznie zmniejszeniem mocy procesora dwu, trzykrotnie. Testy zostały wykonane przy pomocy silnika szachowego stockfish. Został skompilowany pod architekturę s390 z flagą generic-64. Wykorzystano wbudowaną komendę bench tego silnika. Podrozdział 2.4.2 zawiera opis kompilacji, komend i samego sposobu użytkowania tego programu. 81 Dla potrzeb zautomatyzowania samego procesu przeprowadzania testów został opracowany skrypt: Kod 11. stockbench.sh 1 #! / b i n / b a s h 2 3 4 5 6 #f u n c t i o n f o r CPU u s a g e function cpuusage { (...) } 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 maxcpu=15 # maximal CPU u s a g e l i m i t f o r t e s t f o r hash i n echo { 4 , 1 6 , 3 2 , 6 4 } #c h e s s e n g i n e hash s i z e do f o r t h r e a d i n echo { 1 , 2 , 4 , 8 } #s t o c k f i s h t h r e a d s number do f o r depth i n echo { 2 , 4 , 8 , 1 6 } #d e p t h o f t r e e do l o o p s =15; #how manu measurement o f c o u n t e r =1; #s e t c o u n t e r while [ $ c o u n t e r − l t $ l o o p s ] ; do cpu=$ ( cpuusage ) i f [ $cpu − l t $maxcpu ] ; then #i d CPU u s a g e i s l e s s than echo ”CPU: ” $cpu ”%” | t e e −a s t o c k b e n c h 1 . l o g . / s t o c k f i s h bench $hash $ t h r e a d $depth d e f a u l t depth 1>/dev / null | \ t e e −a s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . l o g ( ( c o u n t e r++)) ; fi ; s l e e p 1 2 0 ; #w a i t a moment done ; #end o f measure #p a r s e u s e f u l l v a l u e s and s t o r e f o r f u r t h e r a n a l y s i s cat s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . l o g | g r e p T o t a l | c u t −s −d ’ : ’ −f 2 > s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . t x t done ; done ; done ; Wyniki testów prezentuje wykres (Rysunek 15). 82 Rysunek 15. Wykres czasu przeszukiwania zadanej głębokości drzewa szachowego. Oś odciętych określa głębokość drzewa przeszukiwania, a oś rzędnych reprezentuje czas przeszukania elementów do zadanej głębokości w skali logarytmicznej. Poszczególne testy dotyczyły pojedynczych procesorów. I tak od dołu mamy :2.8, 2.0, 1.8, 1.5 GHZ. Wartym podkreślenia jest tu uwaga, że większa pamięć cache sprawiła w przypadku procesora 1.5 zrównanie z procesorem 1.8. Z powyższego wykresu można wywnioskować, że moc względna procesora jest ok 10-krotnie mniejsza od średniej klasy komputera typu desktop. 83 Zakończenie Celem niniejszej pracy było wykorzystanie i omówienie architektury mainframe. W ramach pracy: • zainstalowano komputer z800 w KIS, • skonifgurowano maszyny logiczne działające na tym komputerze, • zainstalowano na nich system operacyjny Debian GNU/Linux, • przy pomocy narzędzia Zend Framework przygotowano projekt serwera szachowego, • wykorzystano oprogramowanie chessd w wersji 0.3.1, zainstalowano i uruchomiono serwer szachowy pod adreses IP 212.191.89.82, • zainstalowano i skonfigurowano 5 klientów szachowych : Stockfish, Gnuchess, Crafty, Rybka, • rozegrano 12000 partii, których statystyki są dostępne na stronie pod adresem http://212.191.89:82:5001/chessd/game/list. Powyższe pozwala na stwierdzenie, że założony cel pracy został osiągnięty. 84 Załącznik 1. Literatura [1] zSeries 990 Support Element Operations Guide. IBM, 2003. [2] Hardware Management Console Operations Guide Version 1.7.3. IBM, 2004. [3] http://en.wikipedia.org/wiki/Mainframe_computer, IX 2010. [4] http://pl.wikipedia.org/wiki/Mainframe, 2010. [5] http://en.wikipedia.org/wiki/IBM, 2010. [6] Installing mvs 3.8j. http://www.jaymoseley.com/hercules/installmvs, V 2010. [7] Roger bowler responds to ibm patent attack on open source. http://www.turbohercules. com/news/permalink/a-statement-from-roger-bowler-about-hercules-and-ibm, VI 2010. [8] Transaction processing performance council. http://www.tpc.org, 2010. [9] Erich Amrehn, Joerg Arndt, Dave Bennin, Mark Cathcart, Richard Higson, Cliff Laking, Richard Lewis, Michael MacIsaac, Susan Matuszewski, Eugene Ong, Hans Dieter Mertiens i Eric Schabell. Linux for S/390. IBM, 2000. [10] Monte Bauman, Bob Vik, Bob Neidig, Terry Weinberg, Scott Lundell i Eduardo Oliveira. Server Virtualization Cost & Value Analysis Tool - RACEv Overview Guide. 2010. R on the [11] John Eilert, Maria Eisenhaendler, Dorothea Matthaeus i Ingolf Salm. Linux Mainframe. Prentice Hall PTR, 2003. [12] David A. Patterson i John L. Hennessy. Computer Organization and Design. Elsevier Inc, 2005. [13] Michael MacIsaac, Ronald Annuss, Wolfgang Engel, Chris Gombola, Timothy Nunes, Mark Post, Don Stubbs, Egon Terwedow i Craig Vernon. Linux for IBM zSeries and S/390: Distributions. International Technical Support Organization, 2000. [14] Hercules Organization. Hercules General Information Guide. X 2010. [15] Hercules Organization. Hercules User reference Guide. X 2010. [16] David Watts, Jure Arzensek, Antony Collins, Jian Yong Wang i Russ Weiner. IBM Eserver xSeries 445 Planning and Installation Guide. International Technical Support Organization, 2003. 85 Załącznik 2. Spis kodów źródłowych 1 2 3 4 5 6 7 8 9 10 11 telnet.sh . . . . . . . . . . . . . . . pose-match.sh . . . . . . . . . . . . Skrypt roboAdmin - komenda mecz stockfish.sh . . . . . . . . . . . . . gnuchess.bat . . . . . . . . . . . . . apache.conf . . . . . . . . . . . . . Chessd Model User . . . . . . . . . Chessd Form User . . . . . . . . . updateAction . . . . . . . . . . . . Plik views/scripts/update.phtml . . stockbench.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 68 69 69 73 75 76 78 79 82 Załącznik 3. Spis rysunków 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Skalowalność mocy obliczeniowej minframe’ów . . . . . . . . . . . . . . . . . . . Rozkład obciążenia na poszczególne zasoby systemu . . . . . . . . . . . . . . . . Widok na IBM z800 z dwoma zamkniętymi laptopami służącymi do administracji Prędkość odczytu macierzy dyskowej badanego mainframe’a wykonana programem Iozone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Support Element Workplace Źródło: opracowanie własne . . . . . . . . . . . . . SE Workplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Konsola HMC w systemie OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . SE Workplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schemat połączenia silnika szachowego . . . . . . . . . . . . . . . . . . . . . . . Serwer programów szachowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schemat projektu serwera programów szachowych na mainframie w KIS . . . . . Klasy PHP narzędzia Zend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gotowy projekt strony internetowej wykorzystujący opracowany modul chessd . Wykres czasu przeszukiwania zadanej głębokości drzewa szachowego . . . . . . . 86 7 9 13 15 17 18 18 19 22 60 66 67 71 80 83 Załącznik 4. Spis tablic 1 2 Rozwój pamięci operacyjnej w mainframe’ach . . . . . . . . . . . . . . . . . . . 8 Wykaz modeli mainframe’a zSeries 800 (model 2066) . . . . . . . . . . . . . . . 11 Załącznik 5. Spis wydruków 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Informacje o klastrze procesorów komputera z800 w KIS . . . . . . . . . . . . . Nazwy, kategorie oraz domyślne hasła użytkowników konsoli HMC . . . . . . . . Tekst okna dialogowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Przebieg formatowania macierzy dyskowej mainframe’a z800 . . . . . . . . . . . Uruchomienie serwera fics 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela UserLogon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela UserStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typy rozgrywek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elementy tabeli GameType serwera Chessd . . . . . . . . . . . . . . . . . . . . . Tabela Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rejestracja na freechess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Przykładowe siedem tagów formatu PGN . . . . . . . . . . . . . . . . . . . . . . Format PGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testowanie procesora programem Crafty . . . . . . . . . . . . . . . . . . . . . . Spis zmiennych konfiguracyjnych programu szachowego Crafty . . . . . . . . . . Przykładowy plik konfiguracyjny programu polyglot dla silnika szachowego Stockfish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Przykład zarządzania projektem Zend Framework . . . . . . . . . . . . . . . . . 87 12 20 20 23 35 43 44 45 45 46 47 48 51 57 57 61 61 64 73 Załącznik 6. Spis terminów • AJAX (ang. Asynchronous JavaScript and XML, asynchroniczny JavaScript i XML) – technologia tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowywania całego dokumentu, w sposób asynchroniczny. Ma to umożliwiać bardziej dynamiczną interakcję z użytkownikiem niż w tradycyjnym modelu, w którym każde żądanie nowych danych wiąże się z przesłaniem całej strony HTML. • Back-end jest częścią aplikacji, najczęściej niewidoczną dla użytkownika, zawierającą na przykład logikę bazodanową i inne funkcję nie związane z graficznym interfejsem. • Benchmark, testowanie wzorcowe jest to test wydajności systemu komputerowego: sprzętu lub oprogramowania. • BogoMIPS to jednostka testu wydajności procesora, wykonywanego przez jądro systemu operacyjnego Linux podczas jego startu, używany do kalibracji wewnętrznej pętli opóźniającej (ang. busy-loop). Nazwa powstała ze złączenia ang. słowa bogus (nieprawdziwy) i skrótu MIPS. • Bot - nazwa pochodzi od słowa robot. Programy takie działają na przykład na IRC (Internet Relay Chat). Powstały, aby działać w czasie nieobecności operatorów kanału dyskusyjnego, pilnować porządku na kanale oraz chronić kanał przed przejęciem. • CPC (ang. Central Processing Complex) to główna część mainframe’a zajmująca się wykonywaniem operacji - składają się na nią procesory ogólnego zastosowania, procesory specjalistyczne oraz dodatkowy osprzęt m.in. odpowiedzialny za operacje wejścia/wyjścia. • Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach. Na współczesnych procesorach są 2 lub 3 poziomy pamięci cache: L1 (zintegrowana z procesorem), a także L2 i L3 (umieszczone w jednym chipie razem z procesorem, lub na płycie głównej). • Cambridge Scientific Center został założony w 1964 przez Norm Rasmussen, znajdował się w budynku MIT. Późnej nazwa została zmieniona na IBM Scientific Center. • Connector (ang. konektor) - wirtualnych maszynach łącznik ten pełni fukcję mostu wymiany zasobów. • DASD (ang. Direct Access Storage Device) - jest to określenie i nazwa dysku, historycznie odwołująca się do faktu szybkiego w odróżnieniu od sekwencyjnego taśmowego, dostępu, dzisiaj określającą po prostu macierze dyskowe mainframe’a. • Dispatcher (Dyspozytor) - jest odpowiednikiem zarządcy procesów (scheduller) w terminologii intelowskie. • ESCON (ang. Enterprise Systems Connection) - jest łączem z dyskiem lub urządzeniami peryferyjnymi, opartym na łączu światłowodowym, pół dupleksowe, szeregowy interfejs, oryginalne prędkość 10 MB/s, później zwiększona do 17Mbyte/s, maksymalna odległość: 43 kilometry. • FICON ulepszona wersja ESCON, prędkość 512 MB/s ,odległość 10 do 20km, adresacja do 16,384 urządzeń , zmienna wielkośc bloku w operacjach I/O. 88 • Federacja Szachowa Stanów Zjednoczonych (United States Chess Federation, USCF) – organizacja zarządzająca rozgrywkami szachowymi w Stanach Zjednoczonych, członek Międzynarodowej Federacji Szachowej (FIDE). • Front-end odnosi się do części aplikacji, odpowiedzialnej za komunikację z użytkownikiem. Jest ona najczęściej reprozentowana w formie graficznego interfejsu użytkownika. • GET to sposób przekazywania danych pomiędzy kolejnymi odsłonami dokumentów sieciowych w protokole HTTP. Polega na umieszczeniu par parametr=wartość w adresie URI strony. • GPPU (ang. General Purpose Processor Unit). • GUI (ang. Graphical UserInterface) - termin określający graficzny interfejs użytkownika w aplikacji. • HMC - Hardware Managment Console jest systemem dostarczającym narzędzia administracyjne do planowania, rozbudowywania i zarządzania systemami komputerowymi mainframe’ami IBM-a (definicja z podręcznika elektronicznego http://www.redbooks.ibm.com/redbooks/pdfs/sg247491.pdf str. XIII , odnośnik sprawdzony 31 listopada 2010). • IFL (ang. Integrated Facility for Linux) - jest to udostępniona przez firmę IBM, tańsza wersja procesora CPs (prcesora ogólnego przeznaczenia) na który można instalować system operacyjny Linuks. • IPL (ang. Initial Program Load) w terminologii mainframe oznacza odczyt bajtów rozruchowych urządzenia np. dysku, taśmy itp. • JCL (ang. Job Control Language) - jest językiek skryptowym używanym przez systemy operayjne mainframe. • Job Control Language - język opisu zadań, jest zbiorem wyrażeń (poleceń), które są przekazywane do systemu aby wykonać program podążając według pewnych instrukcji wyjściowych i wejściowych. Takie wyrażenia przekazują systemowi, gdzie znajdują się odpowiednie wejścia i jak należy przetworzyć owo wejście (uruchomienie programu) i co z rezultatem działania programu. Job pozwala na wykonanie zadania (zadań) w tle pracy systemu. • LPAR (ang. Logical PARtition) - podzbiór sprzętu związanego z procesorem i systemem operacyjnym. Zawiera takie wydzielone zasoby jak procesor, pamięć oraz urządzenia I/O. Działa niezależnie od innych LPAR’ów które także mogą być wydzielone. • Linux jest rodziną uniksopodobnych systemów operacyjnych opartych na jądrze GNU/Linux. Linux jest jednym z przykładów wolnego i otwartego oprogramowania - jego kod źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany • Linux/Z (Linuks na systemie Z) określenie na system operacyjny Linux, skompilowany pod architekturę mainframe’ów IBM-a, przede wszystkim serii Z. Inne terminy dotyczącego tego samego zagadnienia to Linux na Systemie z10, Linux na Systemi z9, Linux na zSeries, Linux/390, zLinux, z/Linux, itd. Wszystkie odnoszą się do poszczególnych modeli mainframów serii Z. 89 • MBR (ang. Master Boot Record) – główny rekord startowy, czyli umowna struktura zapisana w pierwszym sektorze dysku twardego. Często nazywany też Master Boot Block (pol. główny blok startowy). Zawiera on program rozruchowy oraz główną tablicę partycji (w przypadku dysku twardego – dyskietki zwykle nie posiadają tablicy partycji). • MSU (ang. Million Service Units) miliona usług na godzinę. • MTU - Maximum Transfer Unit to rozmiar największej jednostki protokołu, którą można przekazać przez warstwę komunikacyjną. • Main Storage (magazyn główny) - oznacza główną pamięć. • Mapowanie obiektowo-relacyjne (ang. Object-Relational Mapping ORM) - sposób odwzorowania obiektowej architektury systemu informatycznego na bazę danych (lub inny element systemu) o relacyjnym charakterze. • Międzynarodowa Federacja Szachowa (fr. Fédération Internationale des Échecs, FIDE) – utworzona 20 lipca 1924 roku w Paryżu organizacja międzynarodowa zrzeszająca narodowe związki szachowe z całego świata, w tym Polski Związek Szachowy. Mottem FIDE jest Gens una sumus (łac. Jesteśmy jedną rodziną). Od roku 1995 na czele FIDE stoi Kirsan Ilumżynow, prezydent rosyjskiej republiki autonomicznej Kałmucji. • Multiple Virtual Storage jest kolejnym członkiem rodziny systemów wsadowych (OS/360, OS/VS2). Wspierał zarówno przetwarzanie wsadowe (ang. batch) jak i transakcyjne. Nowym elementem w stosunku do poprzedników było wprowadzenie koncepcji wirtualnej przestrzeni adresowej. Został zastąpiony przez OS/390. Ostatnia wersja tego systemu to MVS 3.8J wydana w 1970r. • MySQL - wolnodostępny system zarządzania relacyjnymi bazami danych • Numer 360 w IBM System/360 oznaczał 360 stopniowe wykorzystanie tej architektury. System/360 jest zarówno nazwą mainframe’a jak i architektury (podobnie jak System/370). S/360 jest dopuszczalnym i często stosowanym skrótem oznaczającym System/360 (podobnie jak i nazwa S/370). • OLTP (ang. Online Transaction Processing) – kategoria aplikacji klient-serwer dotyczących baz danych w ramach bieżącego przetwarzania transakcji obejmujących takie zastosowania jak systemy rezerwacji, obsługa punktów sprzedaży, systemy śledzące itp. W systemach tych klient współpracuje z serwerem transakcji, zamiast z serwerem bazy danych. • Open Source Initiative - Amerykańska organizacja pozarządowa zajmująca się promowaniem i wspieraniem Wolnego Oprogramowania. Strona domowa projektu: http://www.opensource.org odnośnik sprawdzony 29-X-2010. • Otwarte oprogramowanie (ang. open source movement, czyli otwarte źródła) - odłam ruchu wolnego oprogramowania (ang. free software), który proponuje nazwę open source software jako alternatywną dla free software, głównie z przyczyn praktycznych, a nie filozoficznych. • PHP – obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w czasie rzeczywistym. • Patch (ang. łatka) format plików do umieszczenia listy poprawek i zmian dla poszczególnych linijek plików poprawianych, wykorzystywany przez program patch. 90 • PostgreSQL to, obok MySQL i Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. • Program Status Word - rejestr sprzętowy zawierający stan wykonywania obecnego programu oraz adres instrukcji która obecnie jest wykonywana. • RAS (reliability, availability, servicability) - niezawodność, dostępność i serwisowalność. • REXX (ang. Restricted Extended Executor) - język interpretowany, używany w z/VM do automatyzowania zadań, programowania. • Rack - wspólna nazwa dla szaf, stojaków oraz urządzeń przemysłowych wykonanych w postaci modułów. Standardowa szerokość szyn mocujących ma 19 calu jednak istnieją również szafy o szerokości 10 cali oraz szafy o szerokości 24 cali (produkowane przez IBM) i zazwyczaj wykorzystywane są przez serwery i osprzęt IBM np: RS/6000. • SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która pozwala na znaczne zwiększenie mocy obliczeniowej systemu komputerowego poprzez wykorzystanie 2 lub więcej procesorów do jednoczesnego wykonywania zadań. • Setuid oraz setgid – to skrótowce powstałe z ang. zdań: ’Set User ID (identity)’ (Ustaw Identyfikator Użytkownika) oraz ’Set Group ID’ (Ustaw Identyfikator Grupy). Termin setuid jest często skracany do suid, zaś termin setgid do sgid. Źródło: http://en.wikipedia.org/wiki/Setuid. • Skalowalność (ang. scalability), umiejętność systemu do przystosowywanie się do większej lub mniejszej intensywności użytkowania. • System programmer (pol. Programista systemu) - w kontekście terminologii mainframe oznacza administratora systemu. • TDB (ang. Trivial Database) - baza danych, której z jednym z aspektów jest jednoczesna obsługa wielu użytkowników operujących na możliwych tych samych rekordach, wykorzystująca do tego mechanizm wewnętrznego blokowania aby oddzielić nachodzące się zapisy, charakteryzująca się niewielkim rozmiarami kodu. • TSO (ang. Time Sharing Options) - funkcja z/OS pozwalająca na podłaczenie zdalnego terminala lub kilku działajacych równocześnie (wielozadaniowość). • Transaction Processing Performance Council (TPC) jest organizacją typu non-profit założoną w 1985 w celu zdefiniowania testów wydajnościowych w dziedzinie przetwarzania danych. Organizacja ta publikuje wyniki testów, które dzięki dobrze zdefiniowanej metodyce są uważane za obiektywne i weryfikowalne. • URI, ang. Uniform Resource Identifier jest standardem internetowym umożliwiającym łatwą identyfikację zasobów w sieci. Zdefiniowany jest w dokumencie RFC 2396. 91 • VM/ESA jest systemem operacyjnym, zaprojektowanym przez studentów MIT we współpracy z programistami i inżynierami z IBM-a, którego zadaniem jest uruchamianie maszyn wirtualnych, na których dopiero instaluje się systemy operacyjne; ideą projektu jest to, aby każdy użytkownik mógł pracować na własnej maszynie wirtualnej, mimo iż wszystko dzieje się w obrębie jednej maszyny fizycznej), http://www.vm.ibm.com/, http://en.wikipedia.org/wiki/VM/ESA, odnośnik spr. 26 kwi 2009. • VNC (ang. Virtual Network Computing) – system przekazywania obrazu z wirtualnego, bądź fizycznego środowiska graficznego. • VPS (ang. Virtual Private Server) - jest to podział maszyny, jaką jest serwer, na kilka mniejszych, wirtualnych. VPS umożliwia pełny dostęp do konta root. Do zarządzania VPS-ami najczęściej wykorzystuje się oprogramowanie Xen, VMware, FreeVPS, Virtuozzo, OpenVZ. • Virtual Storage Extended/Enterprise System Architecture - ogólne określenie na systemy z kontrolnym programem (DOS/VSE) i zaawansowanymi licencjonowanymi funkcjami (VSE/Advenced Functions). • Volume Table Of Contents, w skrócie VTOC, jest strukturą danych, w której zapisane jest rozmieszczenie poszczególnych danych na dysku. Możne znajdować się na pierwszych 64K bajtach nośnika. Zawiera listę nazw wszystkich plików wraz z rozmiarem, położeniem oraz uprawnieniami. • Wirtualna Maszyna (ang. Virtual Machine) odnosi się przede wszystkich do programowego emulowania architektury. Tutaj autor miał na myśli sprzętową emulację, która jest podklasą typów wirtualizacji. • XMPP (Extensible Messaging and Presence Protocol, dawniej Jabber) jest to protokół bazujący na języku XML umożliwiający przesyłanie w czasie rzeczywistym wiadomości oraz statusu. Protokół ma zastosowanie nie tylko w komunikatorach, ale również w innych systemach natychmiastowej wymiany informacji. • z/OS to system dla serii Z stworzony i rozwijany z naciskiem na potrzeby jakości usług dla e-biznesu. • z/VM jest to system stworzony przez studentów z MIT, zaadaptowany i rozwijany przez IBM-a. Pozwala użytkownikowi na pracę w własnej maszynie wirtualnej poprzez współdzielenie fizycznych zasobów mainframe takich jak pamięć dyskowa, pamięć RAM, karty sieciowe oraz procesor. Zasoby te zarządzane są przez zarządcę CP (Control Program). 92 Załącznik 7. Wykaz elementów konsoli HMC Workplace • Views – Groups – Exceptions – ActiveTasks – ConsoleActions – TaskList – Books • Task List – DAILY ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Hardware Message Operating System Messages Activate Reset Normal Deactivate Grouping Activity Help – CPC RECOVERY ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ hm OSM Single Object Operations Start Stop Reset Normal PSW restart Reset Clear Load Help – Service ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Service status Perform Problem Analysis View Service History Backup Critical Dara Report A Problem Transmit Service Data 93 ∗ Archive Security Logs ∗ Format Security Logs to DVD ∗ help – Change Management ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Engineering Changes (ECs) Retrieve Internal Code Change Internal Code Single Step Internal Code Changes System Information Alternate Support Element Help – CPC Remote Customization ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSm Remote Service Problem Management Operations Management Account Information Support Element Operations Guide Help – CPC Operationl Customization ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Customize/Delete Activtion Profiles Customize Activity PRofiles Automatic Activation Scheduled Operations Customize Support Element Date/Time Change LPAR Controls Configure Channel Path On/Off Ressign Channel PAth OSA Advenced Facilities Enable I/O Priority Queuing Change LPAR I/O Priority Queuing Help – CPC Configuration ∗ ∗ ∗ ∗ HM OSM Transmit Vital Product Data View frame Layout 94 ∗ Help • GROUPS – CPC Images – Defined CPC – HMC1 • Exceptions – P0022FA Linux3 • Active Tasks • Console Actions – view console events – View Console Service History – Customize Console Date/Time – Change Console Internal Code – Single Step Console Internal Code Changes – Bckup Criticl Console Dat – View Console Information – Hardware Management Console Settings – Enable Hardware Management Console Service – Customize Scheduled Operations – Remote Suppport Telephone Queue – Trnsmit Console Service Data – Authorize Internal Code Changes – Customize Account Information – Customize Dial Informations – Customize Problem Management – Enable Pager Notification – Report a Problem – Configure 3270 Emulators – Network Diagnostic Informations – Archive Security Logs – View Security Logs – Format DVD Catridge – Log Off • Books – Hardware Management Console Opertions Guide – Programming Interfaces 95 – Application Programming Interfaces for JAva (API-JAV-00) – Support Element Guide – Coupling Facility Control Code Commands – Coupling Facility Control Code Messages – Library Reader/2 96 Załącznik 8. Wykaz elementów konfiguracyjnych SE Workplace • Views – Groups – Exceptions – ActiveTasks – ConsoleActions – TaskList – Books • Taksk list – DAILY ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Hardware Messages Operating System Messages Activate Reset Normal Deactivate Grouping Activity Help – CPC RECOVERY ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Start all Stop All Reset normal Reset clear Load Power-on reset Load from CD-ROM or Server Help – Service ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Service status Perform Problem Analysis View Service History Checkout Tests Report a Problem Transmit Service Data 97 ∗ ∗ ∗ ∗ Dump LPAR Data Delete LPAR Dump Data Off-load Retain Data to HMC-DVD Help – Change Management ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Change Internal Code System Information Force Channel Internal Code Change Authorize Internet Code Changes Authorize Concurrent Internet Code Change Alternate Support Element Help – CPC Remote Customization – ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Remote Service Problem Management Operations Management Account Information Help – CPC Operational Customization ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Customize/Delete Activtion Profiles Automatic Activation Scheduled Operations Enable TOD Change LPAR Controls Change LPAR Security Storage Information System Activity Profiles Enable/Disable Dynamic Channel Subsytem Change LPAR Cryptographic Controls Change LPAR Susplex Test Datasource Export/Import Profile Data Ebable I/O Priority Queuing Change LPAR I/O Priority Queing Help – CPC Configuration ∗ HM 98 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ OSM Perform Model Conversion Transmit Vital Product Data View frame Layout System Complex (Sysplex ) timer I/O Configuration View Hardware Configuration Hardware Configuration Details Cryptographic Processor Configuration PCI Cryptographic Configuration PCI Cryptographic Management View CBU Feature Information Change CHPID Assignment Help – CP Toolbox ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Start Stop Change Operation Rate Display or Alter PSW REstart Stop on CP Address MAtch Stop on I/O Address Match Stop on I/O event Stop on PSW Event Trace Interrupt Store Status Help – CHPID Operations ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ HM OSM Configure On/Off Release Service On/Off Advanced Facilities Reassign Channel Path Channel Problem Determination Help – Groups ∗ CPC 99 · P002FA ∗ Images · Linux 1 · Linux 2 · Linux 3 • Exceptions – 02 Reserved Not Defined – 03 Reserved not defined – 61 Online Shared Not Operational link – 62 Online Shared Loss of Signal – 63 Online Shared Loss of signal – 70 Online Shared Offline Signal received – 72 Online Shared Loss of signal – Linux 1 – Linux 2 – Linux 3 • Console Actions – view console events – support elements settings – enable console services – customize data/time – hsa estimation Tool – network diangostic information – view security log – log off • books – Support Element Operations Guide – Coupling Facility Control Code Commands – Coupling Facility Control Code Messages – ZSeries Reference Summary 100 Załącznik 9. Log z instalacji MVS 3.8J 1 2 #G a t h e r i n g M a t e r i a l s and C r e a t i n g DASD Volumes #i n s t m v s 1 . htm 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 papi@otos : ˜ / h e r c u l e s /mvs$ l s i n s t a l l m v s . t g z m v s d i s t . t g z m v s s t a r t e r . t g z smpsnap . t g z papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f i n s t a l l m v s . t g z condcode dasd / docs / ibcdasdi .00 c ibcdasdi . cnf jcl/ j c l / az58122 . j c l jcl / ickdsfg . jcl j c l / sgnreset . j c l j c l /smp4p44 . j c l j c l / smpjob00 . j c l j c l / smpjob01 . j c l j c l / smpjob02 . j c l j c l / smpjob03 . j c l j c l / smpjob04 . j c l j c l / smpjob05 . j c l j c l / smpjob06 . j c l j c l / sysgen00 . j c l j c l / sysgen01 . j c l j c l / sysgen02 . j c l j c l / sysgen03 . j c l j c l / sysgen04 . j c l j c l / sysgen05 . j c l j c l / sysgen06 . j c l j c l / sysgen07 . j c l j c l / sysgen08 . j c l jcl / writeipl . jcl mvs . c n f mvsdasd smp . c n f source / sysgen . cnf tape / tape / i b c d a s d i . het tape / mvs38jptfs . het papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f mvs mvsdist . tgz mvsstarter . tgz papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s d i s t . t g z tape / t a p e /smp4 . h e t tape / z d l i b 1 . het papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s s t a r t e r . t g z dasd / dasd / s p o o l 0 . 1 5 1 dasd / s t a r t 1 . 1 5 0 dasd / work01 . 1 5 2 papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f smpsnap . t g z backsmp . j c l r es t sm p . j c l 57 101 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #c r e a t i n g dasd volumes papi@otos : ˜ / h e r c u l e s /mvs$ . / mvsdasd This s c r i p t c r e a t e s DASD volumes f o r MVS 3 . 8 j . Changed d i r e c t o r y t o : /home/ p a p i / h e r c u l e s /mvs/ dasd HHCDU044I C r e a t i n g 3350 volume SMP001 : 560 c y l s , 30 t r k s / c y l , 19456 track HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e smp001 . 3 3 5 0 HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed . HHCDU044I C r e a t i n g 3350 volume MVSRES: 560 c y l s , 30 t r k s / c y l , 19456 track HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e mvsres . 3 3 5 0 HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed . HHCDU044I C r e a t i n g 3350 volume WORK02: 560 c y l s , 30 t r k s / c y l , 19456 track HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e work02 . 3 3 5 0 HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed . HHCDU044I C r e a t i n g 3350 volume SPOOL1 : 560 c y l s , 30 t r k s / c y l , 19456 track HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e s p o o l 1 . 3 3 5 0 HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed . HHCDU044I C r e a t i n g 3350 volume PAGE00 : 560 c y l s , 30 t r k s / c y l , 19456 track HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e page00 . 3 3 5 0 HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed . S c r i p t completed s u c c e s s f u l l y ! bytes / bytes / bytes / bytes / bytes / 78 79 80 81 82 83 #i n s t m v s 2 . htm #i n i t i a l i z i n g DASD volumes #r e a d i n g i n s t r u c t i o n s from t a p e t y p e 1442 a d d r e s s 00 c 84 85 86 87 88 89 90 91 92 93 h e r c u l e s −370 −f i b c d a s d i . c n f >h e r c u l e s . l o g ipl280 papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 0 9 94 95 96 97 98 99 100 101 102 103 104 IBC105A DEFINE INPUT DEVICE . DASDI 7 . 8 0 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 0009 i n p u t =1442 ,00 c DASDI 7 . 8 0 SMP001 JOB ’ INITIALIZE SMP001 3350 VOLUME’ MSG TODEV=1052 ,TOADDR=009 DADEF TODEV=3350 ,TOADDR=148 ,IPL=NO, VOLID=SMP001 , BYPASS=YES VLD NEWVOLID=SMP001 ,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END 105 106 IBC163A 107 DASDI 7 . 8 0 WORK02 JOB ’ INITIALIZE WORK02 3350 VOLUME’ MSG TODEV=1052 ,TOADDR=009 DADEF TODEV=3350 ,TOADDR=149 ,IPL=NO, VOLID=WORK02, BYPASS=YES VLD NEWVOLID=WORK02,OWNERID=HERCULES 108 109 110 111 END OF JOB . 102 112 113 VTOCD STRTADR=1,EXTENT=15 END 114 115 IBC163A 116 DASDI 7 . 8 0 MVSRES JOB ’ INITIALIZE MVSRES 3350 VOLUME’ MSG TODEV=1052 ,TOADDR=009 DADEF TODEV=3350 ,TOADDR=14A, IPL=NO, VOLID=MVSRES, BYPASS=YES VLD NEWVOLID=MVSRES,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB . DASDI 7 . 8 0 PAGE00 JOB ’ INITIALIZE PAGE00 3350 VOLUME’ MSG TODEV=1052 ,TOADDR=009 DADEF TODEV=3350 ,TOADDR=14B, IPL=NO, VOLID=PAGE00, BYPASS=YES VLD NEWVOLID=PAGE00,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB . DASDI 7 . 8 0 SPOOL1 JOB ’ INITIALIZE SPOOL1 3350 VOLUME’ MSG TODEV=1052 ,TOADDR=009 DADEF TODEV=3350 ,TOADDR=14C, IPL=NO, VOLID=SPOOL1, BYPASS=YES VLD NEWVOLID=SPOOL1,OWNERID=HERCULES VTOCD STRTADR=1,EXTENT=15 END IBC163A END OF JOB . 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 END OF JOB . 140 141 142 143 144 145 146 147 #u n p a c k i n g s t a r t e r system papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s s t a r t e r . t g z dasd / dasd / s p o o l 0 . 1 5 1 dasd / s t a r t 1 . 1 5 0 dasd / work01 . 1 5 2 148 149 150 151 152 153 154 155 156 #I n s t a l l i n g SMP4 on t h e S t a r t e r System papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F 157 158 159 160 161 162 163 164 165 166 167 168 169 170 IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F r 0 , clpa IEF165I // START JES2 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 0 , format , noreq IEE600I REPLY TO 00 IS ; SUPPRESSED ∗01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE r 1 ,y IEE600I REPLY TO 01 IS ; SUPPRESSED $HASP423 SPOOL0 IS BEING FORMATTED IEE041I THE SYSTEM LOG IS NOW ACTIVE 103 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 192 193 194 195 196 #d e v i n i t 012 j c l /smp4p44 . j c l e o f HHCPN098I D ev i ce 0 : 0 0 1 2 i n i t i a l i z e d 197 198 199 200 201 202 203 204 205 206 207 208 209 210 $HASP100 SMP4P44 ON READER1 SMP 4 . 4 4 from MVS38J $HASP104 SMP4P44 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP104 SMP4P44 ∗ An IPL i s r e q u i r e d a f t e r t h i s j o b has completed ! ! ! ∗ $HASP104 SMP4P44 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP373 SMP4P44 STARTED − INIT 1 − CLASS A − SYS H158 IEF244I SMP4P44 S1 − UNABLE TO ALLOCATE 1 UNIT( S ) AT LEAST 1 OFFLINE UNIT( S ) NEEDED. IEF489I SMP4P44 − 1 UNIT( S ) NEEDED FOR I 1 IEF247I SMP4P44 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE IEF247I SMP4P44 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE IEF247I SMP4P44 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE IEF247I SMP4P44 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE ∗02 IEF238D SMP4P44 − REPLY DEVICE NAME OR ’CANCEL’ . 211 212 #d e v i n i t 170 t a p e / z d l i b 1 . h e t 213 214 215 216 217 218 r 2 ,170 IEE600I IEC502E ∗IEC501A IEC501A REPLY TO 02 IS ; 1 7 0 K 1 7 0 ,MVS38J , SL , SMP4P44 , S2 M 1 7 0 , T74172 , SL , 6 2 5 0 BPI , SMP4P44 , S2 219 220 221 222 #d e v i n i t 170 t a p e /smp4 . h e t 223 224 225 226 227 EF234E K 1 7 0 , T74172 ,PVT, SMP4P44 , S2 IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44 MVS38J . 104 228 229 230 231 232 233 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 SMP4P44 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SMP4P44 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SMP4P44 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 $p j e s 2 $HASP395 INIT ENDED $HASP395 INIT ENDED $HASP395 INIT ENDED IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A IEE037I LOG NOT ACTIVE 2000 1 0 . 1 6 . 2 9 CONSOLE IEE142I 01F NOW RECEIVING HARDCOPY 4000 1 0 . 1 6 . 2 9 IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A 4000 1 0 . 1 6 . 2 9 IEE037I LOG NOT ACTIVE 0000 1 0 . 1 6 . 2 9 IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND CODE 0000 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I SYS1 . PROCLIB KEPT 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I VOL SER NOS= START1 . 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I SYS1 .HASPCKPT KEPT 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I VOL SER NOS= SPOOL0 . 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I SYS1 .HASPACE KEPT 0000 1 0 . 1 6 . 2 9 IEF196I IEF285I VOL SER NOS= SPOOL0 . 251 252 253 254 z eod 4000 1 0 . 1 6 . 4 5 quiesce IEE334I HALT EOD SUCCESSFUL 255 256 257 258 259 260 261 262 263 264 265 266 267 268 #Using SMP4 t o B u i l d t h e D i s t r i b u t i o n L i b r a r i e s #i n s t m v s 3 . htm i p l 150 d e v i n i t 012 j c l / smpjob00 . j c l e o f d e v i n i t 012 j c l / smpjob01 . j c l e o f d e v i n i t 012 j c l / smpjob02 . j c l e o f d e v i n i t 012 j c l / smpjob03 . j c l e o f d e v i n i t 170 t a p e / z d l i b 1 . h e t r 1 ,170 7 d e v i n i t 170 t a p e / m v s 3 8 j p t f s . h e t $p j e s 2 z eod quiesc 269 270 271 272 m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e r 1 ,170 273 274 #Long v e r s i o n 275 276 277 278 279 280 281 papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) 105 282 283 284 Connected t o d e v i c e 0 : 0 0 1F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 IEA939D QUICK AND WARM START DATA IS INVALID , RE−IPL OR REPLY ’GO’ FOR COLD START HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F Connection c l o s e d by f o r e i g n h o s t . papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F r 0 , clpa IEF165I // START JES2 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 0 , format , noreq IEE600I REPLY TO 00 IS ; SUPPRESSED ∗01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE r 1 ,y IEE600I REPLY TO 01 IS ; SUPPRESSED $HASP423 SPOOL0 IS BEING FORMATTED IEE041I THE SYSTEM LOG IS NOW ACTIVE $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 322 323 324 325 326 327 328 329 330 331 332 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 333 334 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 335 336 337 338 $HASP100 SMP4P44 ON READER1 SMP 4 . 4 4 from MVS38J $HASP104 SMP4P44 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP104 SMP4P44 ∗ An IPL i s r e q u i r e d a f t e r t h i s j o b has completed ! ! ! ∗ 106 339 340 341 342 343 344 345 346 347 348 $HASP104 SMP4P44 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP373 SMP4P44 STARTED − INIT 1 − CLASS A − SYS H158 IEF244I SMP4P44 S1 − UNABLE TO ALLOCATE 1 UNIT( S ) AT LEAST 1 OFFLINE UNIT( S ) NEEDED. IEF489I SMP4P44 − 1 UNIT( S ) NEEDED FOR I 1 IEF247I SMP4P44 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE IEF247I SMP4P44 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE IEF247I SMP4P44 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE IEF247I SMP4P44 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE ∗02 IEF238D SMP4P44 − REPLY DEVICE NAME OR ’CANCEL’ . 349 350 351 352 353 354 355 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F r 2 ,170 IEE600I REPLY TO 02 IS ; 1 7 0 IEC502E K 1 7 0 ,MVS38J , SL , SMP4P44 , S2 ∗IEC501A M 1 7 0 , T74172 , SL , 6 2 5 0 BPI , IEC501A SMP4P44 , S2 356 357 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 358 359 360 361 362 363 364 365 366 367 IEF234E K 1 7 0 , T74172 ,PVT, SMP4P44 , S2 IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44 MVS38J . $HASP395 SMP4P44 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMP4P44 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SMP4P44 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $p j e s 2 $HASP395 INIT ENDED $HASP395 INIT ENDED $HASP395 INIT ENDED IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A IEE037I LOG NOT ACTIVE 2000 1 5 . 2 6 . 3 0 CONSOLE IEE142I 01F NOW RECEIVING HARDCOPY 4000 1 5 . 2 6 . 3 0 IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A 4000 1 5 . 2 6 . 3 0 IEE037I LOG NOT ACTIVE 0000 1 5 . 2 6 . 3 0 IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND CODE 0000 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I SYS1 . PROCLIB KEPT 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I VOL SER NOS= START1 . 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I SYS1 .HASPCKPT KEPT 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I VOL SER NOS= SPOOL0 . 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I SYS1 .HASPACE KEPT 0000 1 5 . 2 6 . 3 0 IEF196I IEF285I VOL SER NOS= SPOOL0 . 386 387 388 389 390 391 392 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F z eod 4000 1 5 . 2 6 . 3 9 IEE334I HALT EOD SUCCESSFUL quiesce Connection c l o s e d by f o r e i g n h o s t . papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 107 393 394 395 396 397 398 399 400 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 IEF165I // START JES2 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 0 , noreq IEE600I REPLY TO 00 IS ; SUPPRESSED IEE041I THE SYSTEM LOG IS NOW ACTIVE $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP150 SYSLOG ON PRINTER1 $HASP150 INIT ON PRINTER1 $HASP250 SYSLOG IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP100 INIT ON STCINRDR $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 INIT IS PURGED $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 437 438 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 439 440 441 442 443 444 445 446 447 448 449 450 451 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 $HASP100 $HASP373 $HASP395 $HASP309 SMPJOB00 ON READER1 SMPJOB00 STARTED − INIT 1 − CLASS A − SYS H158 SMPJOB00 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SMPJOB00 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SMPJOB00 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE SMPJOB01 ON READER1 SMPJOB01 STARTED − INIT 1 − CLASS A − SYS H158 SMPJOB01 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A 108 452 453 454 455 $HASP150 $HASP160 $HASP250 $HASP099 SMPJOB01 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SMPJOB01 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 456 457 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 458 459 460 461 462 463 464 465 466 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 SMPJOB02 ON READER1 SMPJOB02 STARTED − INIT 1 − CLASS A − SYS H158 SMPJOB02 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SMPJOB02 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SMPJOB02 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 467 468 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 469 470 471 472 473 474 475 476 477 478 479 $HASP100 SMPJOB03 ON READER1 $HASP373 SMPJOB03 STARTED − INIT 1 − CLASS A − SYS H158 IEF244I SMPJOB03 SMP DLBUCL − UNABLE TO ALLOCATE 1 UNIT( S ) AT LEAST 1 OFFLINE UNIT( S ) NEEDED. IEF489I SMPJOB03 − 1 UNIT( S ) NEEDED FOR SMPPTFIN IEF247I SMPJOB03 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE IEF247I SMPJOB03 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE IEF247I SMPJOB03 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE IEF247I SMPJOB03 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE ∗01 IEF238D SMPJOB03 − REPLY DEVICE NAME OR ’CANCEL’ . 480 481 482 483 484 485 486 487 488 489 r 1 ,170 IEE600I REPLY TO 01 IS ; 1 7 0 IEF234E K 1 7 0 ,MVS38J ,PVT, SMPJOB03 $HASP395 SMPJOB03 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMPJOB03 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SMPJOB03 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 490 491 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 $HASP100 SMPJOB04 ON READER1 $HASP373 SMPJOB04 STARTED − INIT 1 − CLASS A − SYS H158 IEF234E K 1 7 0 , 2 0 0 8 0 1 ,PVT, SMPJOB04,SMP $HASP395 SMPJOB04 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMPJOB04 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SMPJOB04 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP100 SMPJOB05 ON READER1 $HASP373 SMPJOB05 STARTED − INIT 1 − CLASS A − SYS H158 $HASP395 SMPJOB05 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMPJOB05 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP250 SMPJOB05 IS PURGED $HASP100 SMPJOB06 ON READER1 $HASP373 SMPJOB06 STARTED − INIT 1 − CLASS A − SYS H158 109 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 $HASP395 SMPJOB06 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMPJOB06 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SMPJOB06 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP100 ICKDSFG ON READER1 $HASP104 ICKDSFG ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP104 ICKDSFG ∗ AN IPL IS REQUIRED AFTER THIS JOB HAS COMPLETED ! ! ! ∗ $HASP104 ICKDSFG ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP373 ICKDSFG STARTED − INIT 1 − CLASS A − SYS H158 $HASP100 ICKDSFL ON INTRDR $HASP373 ICKDSFL STARTED − INIT 2 − CLASS A − SYS H158 $HASP395 ICKDSFG ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 ICKDSFG ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 ICKDSFG IS PURGED $HASP395 ICKDSFL ENDED $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP150 ICKDSFL ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 ICKDSFL IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 536 537 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 $HASP100 SMPDUMP ON READER1 $HASP373 SMPDUMP STARTED − INIT 1 − CLASS A − SYS H158 ∗IEC501A M 1 7 0 , 0 0 0 2 5 6 , SL , 6 2 5 0 BPI , IEC501A SMPDUMP,IEHDASDR IEC512I LBL ERR 1 7 0 , ,NL, 0 0 0 2 5 6 , SL , IEC512I SMPDUMP,IEHDASDR ∗IEC704A L 1 7 0 , 0 0 0 2 5 6 , SL , 6 2 5 0 BPI , IEC704A SMPDUMP,IEHDASDR ∗02 IEC704A REPLY ’VOLSER,OWNER INFORMATION’ , ’M’OR’ U’ #PART I I h e r c u l e s −370 −f s y s g e n . c n f > s y s g e n . l o g papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 559 560 561 562 563 564 565 566 567 IEF165I // START JES2 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 0 , noreq IEE600I REPLY TO 00 IS ; SUPPRESSED IEE041I THE SYSTEM LOG IS NOW ACTIVE $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP150 SYSLOG ON PRINTER1 110 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 $HASP150 $HASP250 $HASP150 $HASP250 $HASP100 $HASP150 $HASP250 $HASP100 $HASP160 $HASP250 $HASP373 $HASP373 $HASP100 $HASP373 $HASP309 $HASP309 $HASP309 $HASP099 INIT ON PRINTER1 SYSLOG IS PURGED INIT ON PRINTER1 INIT IS PURGED INIT ON STCINRDR INIT ON PRINTER1 INIT IS PURGED INIT ON STCINRDR PRINTER1 INACTIVE − CLASS=AJ INIT IS PURGED INIT STARTED INIT STARTED INIT ON STCINRDR INIT STARTED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA ALL AVAILABLE FUNCTIONS COMPLETE 586 587 588 589 590 591 592 593 594 595 m 14 a , v o l =( s l , mvsres ) , u s e=p r i v a t e m 14b , v o l =( s l , page00 ) , u s e=p r i v a t e $HASP100 MOUNT $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE ON STCINRDR 596 597 598 599 600 601 602 603 604 $HASP100 $HASP099 $HASP373 $HASP395 $HASP150 $HASP160 $HASP250 $HASP099 MOUNT ON STCINRDR ALL AVAILABLE FUNCTIONS COMPLETE MOUNT STARTED MOUNT ENDED MOUNT ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ MOUNT IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 605 606 607 608 609 610 611 612 613 614 615 616 617 d e v i n i t 012 j c l / w r i t e i p l . j c l e o f $HASP100 WRITEIPL ON READER1 $HASP104 WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP104 WRITEIPL ∗ WRITING IPL TEXT ONTO MVSRES ∗ $HASP104 WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ $HASP373 WRITEIPL STARTED − INIT 1 − CLASS A − SYS H158 $HASP395 WRITEIPL ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 WRITEIPL ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 WRITEIPL IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 618 619 620 621 622 623 624 625 626 627 d e v i n i t 012 j c l / s y s g e n 0 0 . j c l e o f $HASP100 SYSGEN00 ON READER1 $HASP373 SYSGEN00 STARTED − INIT 1 − CLASS A − SYS H158 $HASP395 SYSGEN00 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SYSGEN00 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN00 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 111 628 629 630 631 632 633 634 635 636 637 d e v i n i t 012 j c l / s y s g e n 0 1 . j c l e o f $HASP100 SYSGEN01 ON READER1 $HASP373 SYSGEN01 STARTED − INIT 1 − CLASS A − SYS H158 $HASP395 SYSGEN01 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SYSGEN01 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN01 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 638 639 640 d e v i n i t 012 j c l / s y s g e n 0 2 . j c l e o f HHCPN098I D ev i ce 0 : 0 0 1 2 i n i t i a l i z e d 641 642 643 644 645 646 647 648 649 650 651 652 $HASP100 SYSGEN02 ON READER1 $HASP373 SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158 IEC143I 213 −04 ,IFG0195G , SYSGEN02 ,PUNCH, SYSUT1, 1 4 8 , SMP001 , IEC143I SYS2 . STAGE1 .OUTPUT IEF450I SYSGEN02 PUNCH − ABEND S213 U0000 $HASP395 SYSGEN02 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SYSGEN02 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN02 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 653 654 655 656 d e v i n i t 012 j c l / s g n r e s e t . j c l e o f 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 $HASP100 SYSGEN02 ON READER1 $HASP373 SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158 IEC143I 213 −04 ,IFG0195G , SYSGEN02 ,PUNCH, SYSUT1, 1 4 8 , SMP001 , IEC143I SYS2 . STAGE1 .OUTPUT IEF450I SYSGEN02 PUNCH − ABEND S213 U0000 $HASP395 SYSGEN02 ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SYSGEN02 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN02 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP100 SGNRESET ON READER1 $HASP373 SGNRESET STARTED − INIT 1 − CLASS A − SYS H158 $HASP395 SGNRESET ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SGNRESET ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SGNRESET IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 677 678 679 680 681 682 683 684 685 686 #some e r r o r s papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F 112 687 688 689 IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 IEF165I // START JES2 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ILR001I DYNAMIC ALLOCATION OF SYS1 .STGINDEX FAILED , NO VIO JOURNALING ∗00 ILR022A REPLY ’U’ TO CONTINUE WITHOUT VIO JOURNALING r 0 ,U IEE600I REPLY TO 00 IS ;U ∗01 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 1 , noreq IEE600I REPLY TO 01 IS ; SUPPRESSED $HASP406 STC 6 WAS EXECUTING $HASP406 STC 7 WAS EXECUTING IEE041I THE SYSTEM LOG IS NOW ACTIVE $HASP406 STC 8 WAS EXECUTING $HASP406 STC 9 WAS EXECUTING $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP150 SYSLOG ON PRINTER1 $HASP185 PRINTER1 TERMINATED $HASP150 INIT ON PRINTER1 $HASP250 SYSLOG IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 INIT IS PURGED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 727 728 729 730 731 732 733 #OK cp pch013 . t x t s t a g e 2 . j c l awk −f s t a g e 2 . awk s t a g e 2 . j c l >s t a g e 2 a . j c l cp s t a g e 2 a . j c l j c l / s t a g e 2 . j c l 734 735 736 737 738 739 740 741 742 743 papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270 Trying 1 2 7 . 0 . 0 . 1 . . . Connected t o l o c a l h o s t . Escape c h a r a c t e r i s ’ ˆ ] ’ . H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4 r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST 2008 i 6 8 6 MP=2) Connected t o d e v i c e 0 : 0 0 1F IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 744 745 IEF165I // START JES2 113 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED ∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0 r 0 , noreq IEE600I REPLY TO 00 IS ; SUPPRESSED $HASP406 JOB 11 WAS EXECUTING $HASP408 JOB 11 QUEUED FOR RE−EXECUTION $HASP406 STC 7 WAS EXECUTING $HASP406 STC 8 WAS EXECUTING IEE041I THE SYSTEM LOG IS NOW ACTIVE $HASP406 STC 9 WAS EXECUTING $HASP160 PUNCH1 INACTIVE − CLASS=BK $HASP150 SYSLOG ON PRINTER1 $HASP100 INIT ON STCINRDR $HASP150 INIT ON PRINTER1 $HASP250 SYSLOG IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP150 INIT ON PRINTER1 $HASP250 INIT IS PURGED $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 INIT IS PURGED $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP100 INIT ON STCINRDR $HASP373 INIT STARTED $HASP309 INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP373 SMPDUMP STARTED − INIT 1 − CLASS A − SYS H158 IEF450I SMPDUMP IEHDASDR − ABEND S2F3 U0000 $HASP395 SMPDUMP ENDED $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A $HASP150 SMPDUMP ON PRINTER1 $HASP185 PRINTER1 TERMINATED $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SMPDUMP IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 783 784 785 786 787 788 789 790 791 792 793 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F m 14 a , v o l =( s l , mvsres ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 794 795 796 797 798 799 800 801 802 803 804 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F m 14b , v o l =( s l , page00 ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 805 114 806 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 807 808 809 810 811 812 813 814 815 816 817 818 $HASP100 $HASP104 $HASP104 $HASP104 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 WRITEIPL ON READER1 WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ WRITEIPL ∗ WRITING IPL TEXT ONTO MVSRES ∗ WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ WRITEIPL STARTED − INIT 1 − CLASS A − SYS H158 WRITEIPL ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A WRITEIPL ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ WRITEIPL IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 819 820 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 821 822 823 824 825 826 827 828 829 830 831 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 $HASP100 $HASP373 SYSGEN00 ON READER1 SYSGEN00 STARTED − INIT 1 − CLASS A − SYS H158 SYSGEN00 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SYSGEN00 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SYSGEN00 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE SYSGEN01 ON READER1 SYSGEN01 STARTED − INIT 1 − CLASS A − SYS H158 832 833 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP150 $HASP160 $HASP160 $HASP250 SYSGEN01 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SYSGEN01 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SYSGEN01 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE SYSGEN02 ON READER1 SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158 SYSGEN02 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SYSGEN02 ON PUNCH1 SYSGEN02 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ PUNCH1 INACTIVE − CLASS=BK SYSGEN02 IS PURGED 850 851 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 852 853 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 854 855 856 857 858 859 860 861 862 863 864 865 $HASP100 $HASP100 $HASP100 $HASP100 $HASP100 $HASP100 $HASP101 $HASP101 $HASP101 $HASP101 $HASP101 SYSGEN1 SYSGEN2 SYSGEN3 SYSGEN4 SYSGEN5 SYSGEN6 SYSGEN1 SYSGEN2 SYSGEN3 SYSGEN4 SYSGEN5 ON READER1 ON READER1 ON READER1 ON READER1 ON READER1 ON READER1 HELD HELD HELD HELD HELD SYSTEM SYSTEM SYSTEM SYSTEM SYSTEM SYSTEM 115 GENERATION GENERATION GENERATION GENERATION GENERATION GENERATION 866 867 $HASP101 SYSGEN6 HELD $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 868 869 870 871 872 873 874 875 876 877 878 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $a ’ sysgen1 ’ $HASP000 SYSGEN1 RELEASED $HASP373 SYSGEN1 STARTED − INIT 3 − CLASS C − SYS H158 $HASP395 SYSGEN1 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN1 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE $HASP250 SYSGEN1 IS PURGED 879 880 881 882 883 884 885 886 887 888 889 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $a ’ sysgen2 ’ $HASP000 SYSGEN2 RELEASED $HASP373 SYSGEN2 STARTED − INIT 3 − CLASS C − SYS H158 $HASP395 SYSGEN2 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN2 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN2 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 890 891 892 893 894 895 896 897 898 899 900 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $a ’ sysgen3 ’ $HASP000 SYSGEN3 RELEASED $HASP373 SYSGEN3 STARTED − INIT 3 − CLASS C − SYS H158 $HASP395 SYSGEN3 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN3 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN3 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 901 902 903 904 905 906 907 908 909 910 911 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $a ’ sysgen4 ’ $HASP000 SYSGEN4 RELEASED $HASP373 SYSGEN4 STARTED − INIT 3 − CLASS C − SYS H158 $HASP395 SYSGEN4 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN4 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN4 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 912 913 914 915 916 917 918 919 920 921 922 923 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F $a ’ sysgen5 ’ $HASP000 SYSGEN5 RELEASED $HASP373 SYSGEN5 STARTED − INIT 3 − CLASS C − SYS H158 +IFC001I D=3350 N=0B F=011D0000 L=011D0017 S=011D000002 DIP COMPLETE $HASP395 SYSGEN5 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN5 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN5 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 924 925 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 116 926 927 928 929 930 931 932 933 934 $a ’ sysgen6 ’ $HASP000 SYSGEN6 RELEASED $HASP373 SYSGEN6 STARTED − INIT 3 − CLASS C − SYS H158 $HASP395 SYSGEN6 ENDED $HASP309 INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA $HASP150 SYSGEN6 ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 SYSGEN6 IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 935 936 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 937 938 939 940 941 942 943 944 945 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 SYSGEN03 ON READER1 SYSGEN03 STARTED − INIT 1 − CLASS A − SYS H158 SYSGEN03 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SYSGEN03 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SYSGEN03 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 946 947 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 948 949 950 951 952 953 954 955 956 957 958 v 14 c , o n l i n e IEE302I 14C ONLINE m 14 c , v o l =( s l , s p o o l 1 ) , u s e=p r i v a t e $HASP100 MOUNT ON STCINRDR $HASP373 MOUNT STARTED $HASP395 MOUNT ENDED $HASP150 MOUNT ON PRINTER1 $HASP160 PRINTER1 INACTIVE − CLASS=AJ $HASP250 MOUNT IS PURGED $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 959 960 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 961 962 963 964 965 966 967 968 969 $HASP100 $HASP373 $HASP395 $HASP309 $HASP150 $HASP160 $HASP250 $HASP099 SYSGEN04 ON READER1 SYSGEN04 STARTED − INIT 1 − CLASS A − SYS H158 SYSGEN04 ENDED INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A SYSGEN04 ON PRINTER1 PRINTER1 INACTIVE − CLASS=AJ SYSGEN04 IS PURGED ALL AVAILABLE FUNCTIONS COMPLETE 970 971 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F 972 973 974 975 976 977 978 979 980 981 982 $p j e s 2 $HASP395 INIT ENDED $HASP395 INIT ENDED $HASP395 INIT ENDED IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A IEE037I LOG NOT ACTIVE 2000 1 6 . 4 0 . 3 8 CONSOLE IEE142I 01F NOW RECEIVING HARDCOPY 4000 1 6 . 4 0 . 3 8 IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A 4000 1 6 . 4 0 . 3 8 IEE037I LOG NOT ACTIVE 0000 1 6 . 4 0 . 3 8 IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND CODE 0000 117 983 0000 1 6 . 4 0 . 3 8 984 0000 1 6 . 4 0 . 3 8 0000 1 6 . 4 0 . 3 8 985 987 0000 1 6 . 4 0 . 3 8 0000 1 6 . 4 0 . 3 8 988 0000 1 6 . 4 0 . 3 8 986 IEF196I IEF285I KEPT IEF196I IEF285I IEF196I IEF285I KEPT IEF196I IEF285I IEF196I IEF285I KEPT IEF196I IEF285I SYS1 . PROCLIB VOL SER NOS= START1 . SYS1 .HASPCKPT VOL SER NOS= SPOOL0 . SYS1 .HASPACE VOL SER NOS= SPOOL0 . 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F z eod 4000 1 6 . 4 0 . 5 5 IEE334I HALT EOD SUCCESSFUL quiesce # 1 i p l 150 # 2 d e v i n i t 012 j c l / w r i t e i p l . j c l e o f # 3 d e v i n i t 012 j c l / s y s g e n 0 0 . j c l e o f # 4 d e v i n i t 012 j c l / s y s g e n 0 1 . j c l e o f # 5 d e v i n i t 012 j c l / s y s g e n 0 2 . j c l e o f # 6 d e v i n i t 012 j c l / s t a g e 2 . j c l e o f # 7 d e v i n i t 012 j c l / s y s g e n 0 3 . j c l e o f # 8 a t t a c h 14 c 3350 dasd / s p o o l 1 . 3 3 5 0 # 9 d e v i n i t 012 j c l / s y s g e n 0 4 . j c l e o f # # 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 #Almost End #i n s t m v s 5 . htm 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 4000 1 2 . 2 4 . 5 4 8000 1 2 . 2 4 . 5 4 8000 1 2 . 2 4 . 5 4 0000 1 2 . 2 7 . 1 0 =001 ’) 8000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 4000 1 2 . 3 1 . 4 7 =12.31.47 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 0000 1 2 . 3 1 . 4 7 IEE354I SID=H155 IEE354I JWT=10 IEE354I BUF=2000 IEE354I MAN=ALL IEE354I EXT=YES IEE354I OPT=2 IEE354I OPI=YES ∗00 IEE357A REPLY WITH SMF VALUES OR U ∗01 IFB010D ENTER ’ IPL REASON,SUBSYSTEM ID ’ OR ’U’ K N,PFK=(12 ,CMD=’K S ,DEL=RD, SEG=19 ,CON=N,RNUM=19 ,RTME IEE600I REPLY TO 00 IS ;U R 0 ,U IEE360I SMF NOW RECORDING ON SYS1 .MANX ON MVSRES TIME IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I IEF196I 1 2 3 4 118 //JES2 JOB MSGLEVEL=1 //STARTING EXEC JES2 XXJES2 PROC M=JES2PARM, 01700000 XX N=SYS1 , 01710000 XX L=LINKLIB , 01720000 XX U=3350 , 01730000 XX N1=SYS1 , 01740000 XX P=PARMLIB 01750000 XXIEFPROC EXEC PGM=HASJES20 , 01760000 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 0000 1 2 . 3 1 . 4 7 IEF196I XX TIME=1440 , 0000 1 2 . 3 1 . 4 7 IEF196I 01770000 0000 1 2 . 3 1 . 4 7 IEF196I XX DPRTY=(15 ,15) 0000 1 2 . 3 1 . 4 7 IEF196I 01780000 0000 1 2 . 3 1 . 4 7 IEF196I 5 XXSTEPLIB DD UNIT=&U, DISP=SHR,DSN =&N. . & L 0000 1 2 . 3 1 . 4 7 IEF196I 01790000 0000 1 2 . 3 1 . 4 7 IEF196I STMT NO. MESSAGE 0000 1 2 . 3 1 . 4 7 IEF196I − 0000 1 2 . 3 1 . 4 7 IEF196I 5 IEF653I SUBSTITUTION JCL − UNIT =3350 ,DISP=SHR, 0000 1 2 . 3 1 . 4 7 IEF196I DSN=SYS1 . LINKLIB 0000 1 2 . 3 1 . 4 7 IEF196I 6 XXPROC00 DD DSN=SYS1 . PROCLIB, DISP=SHR 0000 1 2 . 3 1 . 4 7 IEF196I 01800000 0000 1 2 . 3 1 . 4 7 IEF196I 7 XXHASPPARM DD DSN=&N1 . . &P(&M) , DISP =SHR 0000 1 2 . 3 1 . 4 7 IEF196I 01810000 0000 1 2 . 3 1 . 4 7 IEF196I 7 IEF653I SUBSTITUTION JCL − DSN=SYS1 .PARMLIB(JES2PARM) , 0000 1 2 . 3 1 . 4 7 IEF196I DISP=SHR 0000 1 2 . 3 1 . 4 7 IEF196I 8 XXHASPLIST DD DDNAME=IEFRDER 0000 1 2 . 3 1 . 4 7 IEF196I 01820000 0000 1 2 . 3 2 . 3 4 IEF196I $HASP479 UNABLE TO OBTAIN CKPT DATA SET LOCK − IO ERROR 0000 1 2 . 3 2 . 3 4 IEF196I − REPLY Y OR N TO CONTINUE FFFF 1 2 . 3 3 . 0 9 IEE600I REPLY TO 03 IS ; SUPPRESSED 0000 1 2 . 3 3 . 0 9 R 3 ,SUPPRESSED FFFF 1 2 . 3 3 . 0 9 ∗04 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE 0200 1 2 . 3 9 . 1 2 JOB 2 $HASP100 SYSGEN06 ON READER1 INSTALL IEFACTRT FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗ ∗ FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗ This Usermod becomes e f f e c t i v e only ∗ FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗ i f you do an IPL with t h e CLPA option ∗ FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗ ∗ FC00 1 2 . 3 9 . 1 2 JOB 2 $HASP104 SYSGEN06 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 4000 1 2 . 3 9 . 1 2 JOB 2 $HASP373 SYSGEN06 STARTED − INIT 1 − CLASS A − SYS H155 4000 1 2 . 3 9 . 2 0 JOB 2 $HASP395 SYSGEN06 ENDED C000 1 2 . 3 9 . 2 0 $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A 0200 1 2 . 3 9 . 2 0 JOB 2 $HASP150 SYSGEN06 ON PRINTER2 4 , 9 2 5 LINES 0200 1 2 . 3 9 . 2 0 $HASP160 PRINTER2 INACTIVE − CLASS=A 0200 1 2 . 3 9 . 2 0 JOB 2 $HASP250 SYSGEN06 IS PURGED FF40 1 2 . 3 9 . 2 0 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 0200 1 2 . 4 1 . 0 4 JOB 3 $HASP100 SYSGEN07 ON READER1 INSTALL SMF MODS FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗ ∗ FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗ THIS USERMOD BECOMES EFFECTIVE ONLY ∗ FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗ IF YOU DO AN IPL WITH THE CLPA OPTION ∗ 119 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗ ∗ FC00 1 2 . 4 1 . 0 4 JOB 3 $HASP104 SYSGEN07 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ 4000 1 2 . 4 1 . 0 4 JOB 3 $HASP373 SYSGEN07 STARTED − INIT 1 − CLASS A − SYS H155 4000 1 2 . 4 1 . 1 1 JOB 3 $HASP395 SYSGEN07 ENDED C000 1 2 . 4 1 . 1 1 $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A 0200 1 2 . 4 1 . 1 1 JOB 3 $HASP150 SYSGEN07 ON PRINTER2 1 , 1 9 9 LINES 0200 1 2 . 4 1 . 1 1 $HASP160 PRINTER2 INACTIVE − CLASS=A 0200 1 2 . 4 1 . 1 1 JOB 3 $HASP250 SYSGEN07 IS PURGED FF40 1 2 . 4 1 . 1 1 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 0200 1 2 . 4 1 . 5 4 JOB 4 $HASP100 SYSGEN08 ON READER1 INSTALL VTAM/TSO 4000 1 2 . 4 1 . 5 4 JOB 4 $HASP373 SYSGEN08 STARTED − INIT 1 − CLASS A − SYS H155 0200 1 2 . 4 1 . 5 5 JOB 5 $HASP100 SYSGEN08 ON INTRDR ASSEMBLE VTAM C000 1 2 . 4 1 . 5 5 $HASP301 SYSGEN08 − DUPLICATE JOB NAME − JOB DELAYED 4000 1 2 . 4 1 . 5 5 JOB 4 $HASP395 SYSGEN08 ENDED 0200 1 2 . 4 1 . 5 5 JOB 4 $HASP150 SYSGEN08 ON PRINTER2 520 LINES 0200 1 2 . 4 1 . 5 5 $HASP160 PRINTER2 INACTIVE − CLASS=A 0200 1 2 . 4 1 . 5 5 JOB 4 $HASP250 SYSGEN08 IS PURGED 4000 1 2 . 4 1 . 5 5 JOB 5 IEF677I WARNING MESSAGE( S ) FOR JOB SYSGEN08 ISSUED 4000 1 2 . 4 1 . 5 5 JOB 5 $HASP373 SYSGEN08 STARTED − INIT 1 − CLASS A − SYS H155 4000 1 2 . 4 1 . 5 5 JOB 5 $HASP395 SYSGEN08 ENDED C000 1 2 . 4 1 . 5 5 $HASP309 INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A 0200 1 2 . 4 1 . 5 5 JOB 5 $HASP150 SYSGEN08 ON PRINTER2 224 LINES 0200 1 2 . 4 1 . 5 5 $HASP160 PRINTER2 INACTIVE − CLASS=A 0200 1 2 . 4 1 . 5 5 JOB 5 $HASP250 SYSGEN08 IS PURGED FF40 1 2 . 4 1 . 5 5 $HASP099 ALL AVAILABLE FUNCTIONS COMPLETE 1105 1106 1107 1108 1109 #d e v i n i t #d e v i n i t #d e v i n i t #d e v i n i t 00 c 00 c 00 c 00 c j c l / sysgen05 . j c l / sysgen06 . j c l / sysgen07 . j c l / sysgen08 . jcl jcl jcl jcl eof eof eof eof 120