Polska Grupa Użytkowników Linuxa

Wielkość: px
Rozpocząć pokaz od strony:

Download "Polska Grupa Użytkowników Linuxa"

Transkrypt

1 Polska Grupa Użytkowników Linuxa

2 Organizatorzy: Andrzej Boczek Agnieszka Bohosiewicz Krzysztof Leszczyński Iwona Maszczyńska Wydawca publikacji: Polska Grupa Użytkowników Linuxa ul. Bartycka Warszawa ISBN: Redakcja: Agnieszka Bohosiewicz Krzysztof Leszczyński Rysunki: Sylwia Bonin Karol Kreński Bardzo nam pomogli: Sylwia Bonin Krzysztof Gromek Łukasz Jachowicz Maja Królikowska Marcin Sochacki Piotr Strzelczyk Konrad Wawruch Sponsor Główny: Sponsorzy: Patronat medialny:

3 03 Spis treści Wstęp Agenda Kablink: A Fresh Take on Collaboration B Od bootloadera do własnej minidystrybucji Wydajność i optymalizacja w systemach informatycznych Bezpieczeństwo portali społecznościowych w ujęciu robaków Web Garnkiem miodu w zombie detekcja, analiza, dns-blackholing na przykładzie systemu HoneyPot nepenthes F Terroryzm i cyberterroryzm B FLOSS 21 Wieku (wstęp do panelu dyskusyjnego kijem w mrowisko ) Linux pod kominem Ślad Pingwina, czyli analiza ilościowa trendów marketingowych na rynku OpenSource na przykładzie studentów Szkoły Głównej Handlowej

4 04 Kolofon: Wszystkie prace związane z przygotowaniem publikacji do druku zostały wykonane wyłącznie w systemie Linux. Skład został wykonany w systemie TEX z wykorzystaniem, opracowanego na potrzeby konferencji, środowiska redakcyjnego opartego na formacie ConTEXt. Teksty referatów złożono krojem Bonum z kolekcji TEX-Gyre. Tytuły referatów złożono krojem Antykwa Toruńska, opracowanym przez Janusza Nowackiego na podstawie rysunków Zygfryda Gardzielewskiego.

5 05 Szanujmy bobry, ratujmy hackerów! Niektórzy z nas zdążyli już się przyzwyczaić, że media nazywają włamywaczy komputerowych hackerami. Określenie hacker lub haker, w znaczeniu włamywacza właśnie, trafia już do słowników WNT i PWN. Podobnie jest zresztą z wieloma innymi słowami. Nazwij kogoś pogardliwie żydem (przez małe ż) lub cyganem (przez małe c) wyjdziesz (i słusznie) na szowinistę; tymczasem powszechnie piętnuje się akty wandalizmu i samych wandali (małe w). Większość z nas zapomniała, że Wandalowie to naród i to mający bogatą kulturę. Nieistniejący dzisiaj Wandalowie byli zdecydowanie mniej groźni od Rzymian. Nazwanie kogoś Rzymianinem raczej nie uchodzi za pejoratywne, a Wandalem? Niestety, Hackerów może spotkać los Wandalów. Hackerem, w oryginalnym znaczeniu, jest ktoś, kto rąbie drwa, karczuje las pod uprawę. W tym sensie, nasz pingwinariowy sąsiad z pobliskiej rzeki Gaci bóbr jest hackerem. Hackuje całe lato i jesień, żeby na zimę mieć ciepły domek i wikt. Hackuje nie tylko dla siebie. Bobrza rodzina potrafi do swojej chatki przygarnąć inne zwierzątko, o ile się zachowuje bardziej przyzwoicie od nas ludzi i nie niszczy tam. Wszak to GPL czystej wody (dosłownie i w przenośni). Wolność wypowiedzi, to także wolność do stosowania określeń i pisowni według własnych poglądów. Dlatego w dwóch artykułach znajdziecie słowo hacker/haker użyte w tabloidowym znaczeniu. Podejrzewamy również, że w kilku prezentacjach takie określenia będą padać. Z tego samego powodu autorzy mają prawo pisania Linuxa, Linuksa, a nawet w kilku miejscach, Linuks. Nie oznacza to, że takie poglądy ma redakcja, po prostu szanujemy różnorodność. Tematem tegorocznych Pingwinariów jest Kuna Turze. W okolicach są podobno kuny, były dawno temu tury. Na razie jeszcze jest znajoma rodzina bobrów, do odwiedzenia której zachęcamy. Odwiedzając naszych sąsiadów zachowujcie się tak, żeby rodzina bobrów nie mogła użytkowników Linuxa posądzić o... nie, nie wandalizm, raczej o człowieczeństwo, czyli najgorszy humanitaryzm. Podejrzewamy, że to określenie jest u bobrów (Castor fiber) zdecydowanie pejoratywne podobnie jak hacker wśród większości Homo sapiens. Bobrom i Pingwinarzystom życzymy Happy Hacking

6 06 środa, 11 marca Przyjazd środowych uczestników czwartek, 12 marca Obiad Piotr Szewczuk, Novell Teaming - WEB 2.0 wkracza do firm Rafał Wiosna, itvp Wymiana wideo w sieciach P2P Rafał Kwaśny, Novell SuSE Studio Antoni Goldstein Od bootloadera do własnej minidystrybucji jak zrobić z Linuksa narzędzie pojedynczego zastosowania Kolacja Tomasz Zieliński Jak skutecznie zniechęcić społeczność do wspierania projektu open-source na przykładzie OpenMoko

7 07 pechowy piątek, 13 marca Śniadanie Radosław Korzeniewski Relokacja Datacenter dużego operatora telekomunikacyjnego Borys Łącki Bezpieczeństwo portali społecznościowych w ujęciu robaków Web F Michał Melewski Web Application Firewall na przykładzie Mod Security Obiad Zespół CERT/NASK Czy Miodowe Pająki mogą kłamać? Chyba nie Borys Łącki Garnkiem miodu w zombie detekcja, analiza, dns-blackholing na przykładzie systemu honeypot nepenthes Michał Młotek Terroryzm i Cyberterroryzm B Kolacja Janusz Urbanowicz Desktop Linux FAIL

8 08 sobota, 14 marca Śniadanie Witold Kręcicki Framework RPC Thrift Crash Course Wycieczka do bunkrów w Konewce Wycieczka do bunkrów w Konewce dla drugiej grupy Obiad IBM Dynamic Infrastructure - infrastruktura szyta na miarę ale z zapasem ;-) Piotr Szewczuk, Novell GroupWise Piotr Morgwai Kotarbiński, Google Protocol Buffers Kolacja Robert Partyka,Marek Zibrow,Roman Bieda Kijem w mrowisko panel filozoficzno-ekonomiczno-prawny 53

9 09 niedziela, 15 marca Śniadanie Dariusz Marcinkiewicz,Paweł Dolega SZARP - LINUX POD KOMINEM Radosław Korzeniewski Wydajność i optymalizacja systemów informatycznych Pakujemy plecaki i walizki Obiad opcjonalny, dla tych, którzy zgłosili, że chcą obiad.

10 0A

11 Kablink: A Fresh Take on Collaboration Brent McConnell This article focuses on Kablink, the Novell-sponsored open source project that forms the foundation for Novell Teaming + Conferencing. Kablink and Novell Teaming + Conferencing are game-changers in enterprise collaboration and team productivity. Most software in this niche focuses on either building team Web pages (think SharePoint) or small pieces of the overall collaboration needs of an enterprise (think blogs, wikis, forums, etc.). Kablink recognized that each of these collaboration tools fulfilled a real need, but still fell short of a total collaboration offering that would unlock team productivity. Truly unlocking collaboration, team productivity and knowledge sharing across all types of projects in an enterprise and not just fulfilling documentation or file sharing needs was the goal of the Kablink project. This goal led Novell to look for better ways to collaborate in the enterprise and to seek answers to the question, How can collaboration add value to the bottom line of a business? The short answer is that it doesn t, at least not in and of itself. But collaboration in the right context and under the right conditions can produce spectacular results in the form of faster customer response times, better organizational knowledge or quicker time to market. Each of these business metrics can be enhanced through the correct use of collaboration tools but harmed if done incorrectly. Imagine this common scenario: you thought you had addressed your organization s collaboration infrastructure needs, but things aren t looking so good. Your IT department has provided popular tools to assist knowledge workers, such as wikis,

12 0C Brent McConnell Figure 1 The Knowledge Cycle covers all stages of information creation and usage, from publishing and discovering content, to discussing and adding value, to extending information and ideas to other spheres. blogs, threaded discussions, , file shares and more. But users are now burdened with having to learn multiple applications with different user interfaces, data is often isolated in one application, users report that information is hard to find and sometimes gets lost, and none of these applications reflect your core business processes. Instead, you often bend your processes to cater to the way these tools work. The Kablink Way This scenario, and others like it, led the Kablink community to look for new and better ways to facilitate knowledge transfer, sharing and collaboration within the enterprise. The process began with an exploration of the way knowledge is disseminated and used in an organization, which resulted in development of the Knowledge Cycle model. (See Figure 1.) Publish The Knowledge Cycle represents how information flows through the process as it is consumed, beginning with the Publish phase. During this phase, knowledge is converted into something explicit and consumable by others. This phase represents the transfer of one person s understanding, education and wisdom into a tangible

13 Kablink: A Fresh Take on Collaboration 0D good. The publication format can be nearly anything, such as a blog, , document or anything else that is consumable by another person. Kablink also offers features that allow organizations to build highly relevant applications that capture knowledge that is specific to their business processes. Using Kablink custom Web forms (See Figure 2.), organizations may build custom forms that knowledge workers can use to capture specific business data such as market campaign information or help desk reports. The Kablink platform also allows organizations to capture all relevant publication events into one system so users always know where to go for their information needs. Discover The next phase is the Discover phase. During this phase the output of the publication event is discovered by another person via search, browsing or document sharing. This is a particularly important phase: without discovery, the publication event is useless and inefficient discovery processes can lead to lost productivity. Because search is key to avoiding these missteps, Kablink supports search across all types of data: attached documents, custom Web form data, blogs and wikis, all in one place. Even value-added information, such as user tags, are searchable in Kablink. These capabilities, as well as community reviews, dynamic data feeds and coming technological advancements, will support future innovations emphasizing personal relevance in this space. Expert location is another important aspect of Discovery that Kablink has taken to a new level. When you perform a search in Kablink, you not only uncover documents that match your criteria, but you also reveal the experts in your organization that are driving innovation and productivity. Kablink even provides tools that allow users to monitor domain experts via Activity Feeds. (See Figure 3.) Imagine looking for information about some arcane topic. Kablink offers an expert ranking system to help you identify experts and then track those individuals so you can monitor their activities on your topic of interest, all without leaving your homepage Discuss The next area of the cycle is the Discuss phase. During this phase, the information found and consumed may not be fully understood by the consumer. Within Kablink, Discussion is a core feature that is associated with all other aspects in the cycle. You can have a discussion formed around each piece of information, whether it be a blog, a wiki article or a Microsoft Word document. You can even discuss the data captured in custom Web forms within your teams. When you use this feature in public forums that can be cataloged and searched, it facilitates the understanding that is required for information to be fully used (and reused) in your organization. Kablink also supports real-time meetings so users can get immediate feedback on information contained within Kablink. Using Kablink Conferencing, users can identify meeting participants and start a meeting in real-time that can includes voice and data. Imagine needing an explanation of some document and having the owner of the document start up OpenOffice and share their OpenOffice session while you

14 0E Brent McConnell Figure 2 With Kablink, organizations can build custom Web forms to capture specific business data, such as restaurant inspection information. discuss the document s content. Now that is the power of real-time. Kablink not only allows you to conduct meetings in real-time, but it also allows you to record and save those meetings so others can review the discussion and its outcome. These

15 Kablink: A Fresh Take on Collaboration 0F Figure 3 Kablink allows users to locate not only content related to a given topic, but people in the organization that can provide needed expertise. real-time features give you more power to conduct meetings the way you want, when you want. Add Value Add Value is the phase of the cycle where the information you discovered and discussed is now incorporated into your understanding of a topic. At this point in the process, the information is fully appreciated and its implications are understood. The collaboration events in this phase focus on your ability to add value to the initial publication event so others in your network can more quickly find and assimilate the same information. This involves adding public tags, reviewing content, adding ratings or annotating the publication so others can better evaluate its meaning from

16 10 Brent McConnell their perspective. This phase adds a new, contextual dimension to the original content that is extremely useful. Kablink again provides tools that help users add their own unique value to knowledge assets. As mentioned previously, all information in Kablink can be discussed using comments and replies, but Kablink also supports other forms of value creation. Using Kablink, users can tag anything using community or personal tags. (Think del.icio.us) In addition, Kablink includes a ratings feature that lets users identify the most significant information in your organization and rate it, so others can quickly find and use the same information. Extend During the Extend phase, we apply the knowledge, wisdom and education that was distilled in the original document into scenarios that we own and are a part of. Knowledge originating from someone else has been transferred and used in totally new ways. The context of the original information might only remotely apply to these new scenarios, if at all. A great example of the extension of knowledge and process into new areas is the way principles of harmony and reuse in architecture were transferred to construction processes and, later, computer science. This example clearly demonstrates the Extend principle that allows knowledge designed for one audience and context to be discovered, discussed and transformed into another entirely different area of study. We ve already mentioned the way Kablink can be customized via Web forms, but Kablink also offers workflow capabilities that let your users capture data and process. This functionality allows the most important business rules or processes in your organization to be identified so efficiencies can be recognized and reused. Once pathways of knowledge transfer are uncovered and distilled into workflow processes, you can then extend those best practices to all the data types in Kablink. (See Figure 4.) Open Collaboration Underpinning all of these efforts and spearheading innovations in each area of the Knowledge Cycle is the Kablink Open Collaboration project. Sponsored by Novell, kablink.org was created to help advance the state of enterprise collaboration and team productivity in an open and communicative way. The Kablink community is providing tools that enable partners and developers from around the world to build applications that drive productivity and knowledge reuse throughout the enterprise. By joining the Kablink community, you can voice your opinions on team productivity. Whether you ultimately plan to use the open source version or the enterprise-class Novell product it feeds, Kablink actively seeks ideas and contributions from our community members to help drive the next generation in collaboration and team productivity. Join kablink.org today and help shape the future!

17 Kablink: A Fresh Take on Collaboration 11 Figure 4 Kablink offers unique and powerful workflow capabilities to help organizations capture data and ensure consistent processes.

18

19 Od bootloadera do własnej minidystrybucji Antoni Goldie Goldstein Wprowadzenie Wszyscy wiemy, że Linux jest systemem uniwersalnym. Wielu z nas używało go nie raz do różnych zadań, poczynając od routerów, poprzez serwery różnej maści, a kończąc na wielofunkcyjnej stacji roboczej. W każdym wypadku jądro systemu pozostawało to samo. W referacie opiszę, jak z Linuksa zrobić narzędzie minimalne: bardzo mały obraz systemu (kilka MB), w którym na etapie bootloadera będzie się dokonywało wyboru czynności do wykonania, natomiast całe dalsze działanie systemu będzie podporządkowane tej pojedynczej funkcji. Po wykonaniu działania system ma zakończyć pracę wyłączyć komputer lub przeładować go. Taki sposób działania może być przydatny w wielu scenariuszach. Konkretne przykłady mogą obejmować: System backupów. Bootloader, po pokazaniu listy systemów plików na wszystkich dyskach w systemie, pozwala wybrać dysk i ścieżkę katalogów. System po załadowaniu powinien stworzyć backup wybranego fragmentu dysku i nagrać go na przygotowane medium - pendrive lub płytkę CD-ROM. Linux disk doctor. Bootloader pozwala wybrać system plików. Linux po załadowaniu sprawdza odpowiednimi programami diagnostycznymi wybraną partycję.

20 14 Antoni Goldie Goldstein Tworzenie systemów testowych przykład z życia. Na jednej z partycji dysku ale nie pierwszej znajdują się w katalogu images/ spakowane obrazy dysku twardego, zawierające instalacje różnych wersji Windows. Celem operacji jest skopiowanie wybranego (w bootloaderze) obrazu na pierwszą partycję pierwszego dysku, by po reboocie mieć do dyspozycji czystą instalację Windows. W ten sposób można znacznie uprościć proces testowania oprogramowania na różnych wersjach, a tej samej maszynie. Dodatkową funkcją, którą można wybrać na etapie bootloadera, może być nagranie spakowanego obrazu pierwszej partycji dysku do pliku o wskazanej nazwie. Uniwersalny router. W bootloaderze podajemy adres sieci oraz adres interfejsu zewnętrznego/bramy domyślnej (lub zaznaczamy, że adres należy uzyskać przez DHCP). Linux po załadowaniu konfiguruje sieć, uruchamia serwer DHCP dla sieci wewnętrznej oraz podstawowy routing z maskaradą. Ta lista nie wyczerpuje oczywiście wszystkich możliwości, jakie może nam dawać taka konfiguracja to tylko najbardziej oczywiste pomysły. Cechy, jakie powinien spełniać taki jednozadaniowy Linux, to przede wszystkim: 1. Instalacja typu live na usuwalnym bootowalnym medium Najlepiej, by po załadowaniu Linux pozwalał na usunięcie medium z napędu. 2. Ładowanie systemu w trybie unattended System powinien wszystkie potrzebne pytania zadać (i odpowiedzi uzyskać) na etapie bootloadera, natomiast po załadowaniu systemu nie powinien wymagać żadnej interakcji użytkownika. W szczególności nie powinien pytać o hasło. 3. Szybkość i minimalizm System powinien zawierać wyłącznie składniki potrzebne do wykonania pojedyńczej czynności, do której został stworzony. Co więcej, powinien ładować się szybko, by nie dać użytkownikowi czekać. W dalszej części opiszę kolejne etapy konfiguracji systemu, w kolejności, w jakiej ładuje się system operacyjny. Spróbuję opisać, jak przy użyciu istniejących narzędzi spełnić te wymagania na każdym z etapów. Etap bootowania Jednym z kluczowych elementów konstrukcji systemu, o jakiej mówimy, jest bootloader. Esencją pomysłu jest wybranie większości cech, jakich potrzebujemy na etapie przed załadowaniem systemu operacyjnego, a więc kilka sekund po włączeniu komputera. Cała reszta procesu powinna działać w trybie unattended, czyli bez asysty użytkownika. W ten sposób zadanie, do jakiego chcemy zaprząc Linuksa, może być dowolnie długie nasza interwencja jest potrzebna raz: niemal natychmiast po włączeniu komputera. Opis ograniczę do architektury PC x86 i kompatybilnych z jednej strony z braku praktyki z innymi architekturami, z drugiej strony dlatego, że bootloadery dla pecetów są obecnie chyba najbardziej rozbudowane.

21 Anatomia i fizjologia bootloadera Od bootloadera do własnej minidystrybucji 15 Historycznie bootstrapping to słowo pochodzące od naszytych z tyłu wysokich butów pasków, które pozwalały na samodzielne wciągnięcie buta proces wciągania większego obiektu za pomocą ciągnięcia mniejszego. Ładowanie systemu po starcie komputera przebiega na podobnej zasadzie: w pamięci trwałej zapisany jest bardzo prosty program, którego pierwszym zadaniem jest pobranie do pamięci bardziej skomplikowanego programu, a potem oddanie mu sterowania. Bardziej skomplikowany program będzie w stanie załadować jeszcze bogatszy kolejny etap bootowania, bo np. będzie w stanie obsłużyć inne media, na których program będzie zapisany. Ostatnim etapem jest wczytanie systemu operacyjnego. W komputerach PC proces startowania systemu można z grubsza podzielić na następujące etapy: 1. Inicjalizacja urządzeń przez BIOS. Ten zapisany w ROM komputera podstawowy system zarządzający urządzeniami przeprowadza pierwszy etap inicjalizacji i sprawdzania urządzeń tzw. POST, Power-On Self Test. 2. BIOS ustala urządzenie bootowalne. BIOS wyszukuje wszystkie urządzenia, z których potrafi uruchomić system operacyjny. Pomijając takie szczególne przypadki jak bootowanie przez sieć, BIOS odczytuje pierwszy sektor każdego dysku, jaki wykrył, w kolejności ustalanej zwykle w programie konfiguracyjnym Setup (tzw. boot priority). Za sektor startowy, czyli boot sector, uznaje pierwszy, którego ostatnie dwa bajty to wartość 0xAA55, czyli tzw. boot signature. Nieco inny jest standard sprawdzania bootowalności dysków CD, ale o tym później. 3. Uruchomienie bootloadera pierwszego etapu. BIOS ładuje boot sector do pamięci pod konkretny adres i przekazuje mu sterowanie wykonuje instrukcję skoku. Cokolwiek znajdowało się zapisane w tym miejscu, zostaje uruchomione. BIOS przekazuje programowi w rejestrze DX procesora numer urządzenia, z którego bootsector został pobrany dzięki temu program może uzyskać dostęp do dalszych obszarów dysku. Numeracja dysków w BIOS to dość istotna sprawa, wspomnę o niej dalej. 4. Uruchomienie bootloadera drugiego etapu. Pierwszy sektor dysku to zwykle za mało, by stworzyć funkcjonalny program ładujący system operacyjny, chyba, że jest to bardzo prosty program. Dlatego zwykle w boot sectorze zapisane są instrukcje wczytujące z określonego miejsca na dysku resztę programu bootloadera. Dopiero całość wczytanego kodu tworzy kompletny program. W jaki sposób taki program jest skonstruowany, i w jaki sposób sobie będzie radził, zależy w istotnym stopniu od medium, na jakim się znajduje. Są właściwie trzy możliwości: Medium podzielone na partycje. Tak jest z większością twardych dysków, także zwykle z dyskami przenośnymi

22 16 Antoni Goldie Goldstein na USB. Bootloader szuka partycji, na której jest system operacyjny, i uruchamia go stamtąd. Pierwszy sektor medium zwany jest MBR Master Boot Record, choć tak naprawdę jest to nazwa najpopularniejszego formatu tego sektora, zawierającego typową dla PC tablicę partycji. Nowszy, ale mało popularny format to GPT GUID Partition Table, ale nie będziemy o nim mówić. Program bootloadera zapisany w MBR musi zmieścić się w 446 bajtach sektor ma ich 512, ale musi pozostać miejsce na 2 bajty sygnatury pod koniec oraz na 64 bajty tablicy partycji (po 16 na każdą partycję podstawową). Medium bez podziału na partycje. Zaraz za boot sectorem zaczyna się system plików. Pierwszy sektor nazywamy wtedy VBR Volume Boot Record. Tu program bootloadera musi się zmieścić w również niewielkiej przestrzeni 510 bajtów, ale ma prostsze zadanie musi tylko znaleźć kod systemu operacyjnego, nie musi szukać konkretnej partycji dysku. Szczególny przypadek: CD-ROM Do pewnego momentu BIOS-y nie traktowały napędu CD-ROM jak dysku w ogóle nie szukały na nim bootsectora. W związku z tym najpopularniejsze w owym czasie systemy operacyjne, tj. MS-DOS i Windows 95, nie były przystosowane do startowania z takiego medium. Kiedy opracowano specyfikację bootowalnego CD ElTorito jej częścią stały się trzy tryby traktowania przez BIOS takiego medium, zapisane w rekordzie startowym (boot record), czyli w strukturze danych znajdującej się na początku nagranego CD-ROM, w nagłówku systemu plików ISO Te tryby to: Floppy emulation BIOS traktuje CD-ROM jak dyskietkę przyporządkowuje mu numer dysku 0 (pierwszy napęd dyskietek). W nagłówku systemu plików dysku CD/DVD jest zapisana lokalizacja pliku, który uważany jest za obraz dyskietki (do 2.88 MB). BIOS, który potrafi to znaleźć, każde odwołanie do urządzenia 0 tłumaczy na odwołanie do tego fragmentu CD ROM. Hard disk emulation BIOS emuluje twardy dysk. Działa to na tej samej zasadzie, ale obraz może być większy, a numer BIOS emulowanego urządzenia urządzenia to 0x80, czyli pierwszy dysk twardy numery kolejnych dysków są przesuwane o jeden. No emulation BIOS próbuje zastartować system bez emulacji. Napędowi CD przyporządkowany jest numer urządzenia wyższy od numerów urządzeń dysku twardego. Z tego wynika, że numer urządzenia BIOS dla napędu CD-ROM zależy od formatu włożonego do napędu dysku. Do obsługi bootowania z CD-ROMów BIOS musi rozumieć i wczytać nagłówek systemu plików ISO Istnieją bootloadery, które można zainstalować tylko na konkretnym typie mediów. W szczególności, jeśli bootloader potrafi startować tylko z VBR, a chcemy umieścić go na partycji dysku twardego, w MBR tego dysku też musi się znaleźć bootloader, który załaduje do pamięci odpowiedni VBR i przekaże mu sterowanie. Takie działanie to ładowanie łańcuchowe (chain loading).

23 Od bootloadera do własnej minidystrybucji 17 Najbardziej znany bootloader instalowany w MBR to ten, którego tworzy polecenie DOS FDISK /MBR. Jego całe działanie sprowadza się do przeszukania tablicy partycji (która w MBR zajmuje ostatnie 64 bajty przed sygnaturą), znalezienia pierwszej partycji z ustawioną flagą active (czasem nazywa się ją też flagą bootable) i wykonania tego samego, co BIOS na początku: pierwszy sektor partycji jest ładowany do pamięci i uruchamiany. Przegląd bootloaderów Standardowy MBR MS-DOS Ten bootloader, przystosowany wyłącznie do działania w MBR, jest tworzony m. in. przez polecenie DOS/Windows FDISK /MBR. Wspominam o nim, bo jest najprostszy w konstrukcji i często używany. Jego działanie można w uproszczeniu opisać pseudokodem: for i := 1 to 4 do begin if PartycjaMaFlageBoot(i) then begin BootSektorPartycji := PierwszySektorPartycji(i); if BootSektorPartycji[511] <> $AA or BootSektorPartycji[512] <> $55 then begin WriteLn("Missing operating system"); Halt; end; Wykonaj(BootSektorPartycji); Halt; end; end; Jak widać, ten bootloader wykonuje dla partycji to, co BIOS dla dysków, przy czym bierze pod uwagę tylko partycje z ustawioną flagą boot (inna nazwa: flaga active). Aby ładowanie skończyło się szczęśliwie a więc rozpoczęciem działania systemu operacyjnego w VBR pierwszej partycji aktywnej musi się się znajdować kolejny bootloader. Kernel Linuksa sam w sobie zawiera kod bootloadera oraz sygnaturę pod koniec pierwszych 512 bajtów. Dlatego najprostszym sposobem na stworzenie dyskietki boot jest skopiowanie pliku z kernelem na plik urządzenia (np. poleceniem dd if=bzimage of=/dev/fd0). Takie działanie jednak uniemożliwi korzystanie z normalnego systemu plików na takim medium kernel zwykle ma ponad 500kB wielkości, gdy tymczasem w typowym przypadku system plików zaczyna się zaraz za boot sectorem. W dodatku, jeśli spróbujemy zapisać tak kernel na medium z partycjami, zamażemy tablicę partycji. Poza wyjątkowymi przypadkami nie robi się tego na twardych dyskach.

24 18 Antoni Goldie Goldstein Stare dobre LILO LInux LOader to chyba pierwszy i najbardziej znany projekt zaawansowanego bootloadera dla Linuksa. Można go zainstalować zarówno w VBR, jak i MBR. Pozwala wyświetlić semigraficzne menu, ładować łańcuchowo z dowolnej partycji lub ładować jądro Linuksa z konkretnego katalogu na partycji ext2/ext3, przekazując mu odpowiednie parametry. Potrafi też ładować obraz startowego ramdysku (initrd) dla Linuksa. Obsługuje też konsolę szeregową. LILO jest konfigurowane pod Linuksem za pomocą pliku /etc/lilo.conf, jednak nie jest on czytany na bieżąco zmiany w nim wymagają reinstalacji narzędziem /sbin/lilo. Również zmiany w geometrii dysku czy układzie urządzeń tego wymagają LILO zapamiętuje na sztywno w bootsectorze numery urządzeń i bloków. Rodzina SYSLINUX Jest to zestaw bootloaderów, stworzony przez H. Petera Anvina, przystosowanych do działania z różnego typu mediów (ale generalnie nie z MBR). Najbardziej znane elementy to: ISOLINUX Najpopularniejszy na dyskach instalacyjnych różnych Linuksów, a także często na dystrybucjach typu LiveCD. Potrafi działać w każdym trybie emulacji. SYSLINUX Do instalacji w VBR medium/partycji z systemem plików FAT. Często używane do bootowania z dyskietek. PXELINUX Do instalacji przez sieć. EXTLINUX. Dla partycji ext2/ext3. Każdy z tych bootloaderów korzysta z tego samego formatu pliku konfiguracyjnego. Poza medium instalacji są funkcjonalnie niemal identyczne: potrafią wyświetlać pliki z kilkoma ekranami powitalnymi (przełączane przez F1 - F8) ze wsparciem dla kolorów ANSI, dają wybór spośród przygotowanych pozycji systemu (w CLI). Jeśli chodzi o sam bootloading, wspierany jest bezpośrednio Linux oraz chainloading co ciekawe, zarówno z boot sectora, jak i konkretnego pliku w katalogu głównym systemu plików, o ile jest w specjalnym uruchamialnym formacie COMBOOT. Zarówno plik konfiguracyjny, jak i pliki z tekstami powitalnymi są ładowane na bieżąco w trakcie działania. Zmiany w nich nie wymagają więc reinstalacji boot sectora. GRUB Legacy Grand Unified Boot Loader GRUB powstał jako nowy projekt, gdy szukano bootloadera dla GNU Hurd z jądrem Mach. Ponieważ deweloperzy nie chcieli stwarzać kolejnego specyficznego protokołu, stworzyli uniwersalny standard komunikacji między bootloaderem a systemem operacyjnym Multiboot. Wkrótce powstała pierwsza wersja GRUB wspierająca ten standard.

25 Od bootloadera do własnej minidystrybucji 19 W tej chwili GRUB jest jednym z najbardziej zaawansowanych bootloaderów. Wspiera ładowanie natywne Linuksa, FreeBSD, NetBSD, OpenBSD oraz oczywiście dowolnego systemu operacyjnego wspierającego Multiboot. W tej chwili obejmuje to między innymi OpenSolaris, ReactOS, GNU/Hurd, nowsze wersje NetBSD. GRUB potrafi załadować także plik w formacie ELF lub a.out, jak również standardowy chainloading z partycji, pliku lub konkretnego bloku na dysku. Dzięki wbudowanej obsłudze systemów plików m. in. ext2/3, vfat, jfs, fat/vfat, xfs, reiserfs GRUB ładuje zarówno własną konfigurację, jak i konkretne kernele w sposób dynamiczny, na podstawie nazwy pliku, a nie zakodowanego sztywno numeru bloku na dysku. Interfejs użytkownika to albo semigraficzne menu, albo shell, pozwalający z poziomu bootloadera na specyfikację zestawu parametrów ładowania systemu, a także na proste czynności diagnostyczne, takie jak wypisanie dostępnych dysków czy znalezienie pliku na którejś partycji. Te cechy sprawiają, że GRUB jest świetnym kandydatem na ratunkowe CD-ROM-y. GRUB 2 Kolejna generacja GRUBa to trochę bootloader przyszłości. Wiele z jego możliwości jest w trakcie aktywnego rozwoju, jednak jest to już produkt w pełni używalny w standardowych zastosowaniach, znajduje się jako domyślny bootloader w szeregu dystrybucji. GRUB2 został praktycznie przepisany od nowa w celu pełnej modularyzacji i zwiększenia przenośności. Najciekawsze nowe cechy, które posiada, to: Skrypty shellowe możliwość pisania nie tylko szeregu poleceń w konfiguracji, ale pełnego oskryptowienia z takimi cechami, jak zmienne, instrukcje warunkowe i pętle (prace są w toku). Interfejs graficzny (nie tylko splashimage) Ładowanie modułów w trakcie pracy (a nie w trakcie instalacji). Przenośność na inne architektury (prace w toku, ale działa np. na PowerMacu). Modularne, obiektowe API programistyczne, z zarządzaniem pamięcią. Tryb rescue o minimalnej wielkości ratunek, gdy nie da się załadować drugiego etapu bootloadera Dodatkowo z miłych cech jest np. wsparcie dla NTFS i RAID. GRUB 2 jest rzeczywiście bardzo przyjemnym projektem zarówno w pomyśle, jak i w wykonaniu. Jeśli ktoś lubi zabawę w programowanie niskopoziomowe w C, polecam system jest łatwo rozszerzalny, a API modułów bardzo proste. O ile wiele funkcjonalności wymaga jeszcze dopracowania, o tyle framework programistyczny z zestawem podstawowych funkcji odpowiedników tych z libc jest w pełni używalny. Możliwości realizacji dla mini-linuksa Na tym etapie chcemy wybrać funkcję, jaką nasz mini-linux ma wykonać. Jeśli chcemy w ogóle cokolwiek konfigurować na tym etapie a nie mieć narzędzie wyłącznie

26 1A Antoni Goldie Goldstein jednego celu, jak np. dysk killer wypełnij wszystkie dyski zerami musimy z miejsca odrzucić bezpośrednie nieinteraktywne bootowanie Linuksa. Potrzebny jest wybór na starcie oraz najlepiej jakis rodzaj komunikatu powitalnego. W najprostszej wersji, jeśli wystarcza nam statyczne menu i ustalony zestaw możliwości, możemy zastosować praktycznie wszystkie interaktywne bootloadery. Pozycje do wyboru, jakie stworzymy, będą wywołaniem tego samego kernela Linuksa, któremu jednak przekażemy dodatkowy parametr. Kernel nie zwróci na niego uwagi, natomiast my będziemy mogli go odczytać po załadowaniu z pliku /proc/cmdline. Poniżej przykład pliku lilo.conf: message=intro.txt prompt install=boot-menu.b boot=/dev/sda image=/vmlinuz label="backup pierwszego dysku twardego" initrd=/initrd root=/dev/sda2 append="backup=hda" image=/vmlinuz label="backup drugiego dysku twardego" initrd=/initrd root=/dev/sda2 append="backup=hdb" a w pliku intro.txt np. taką treść: Witaj w systemie backupów. Wybierz opcję z menu lub wpisz: linux backup=<dysk>, by uruchomić backup wskazanego dysku (np. hda, hdb1, sdb itd.) Takie rozwiązanie daje niewiele interaktywności. Nie umożliwia na wczesnym etapie kontroli, czy taki dysk istnieje. W przypadku, gdy naszym ratunkowym dyskiem jest medium zapisywalne np. pendrive lub przenośny dysk twardy można sprawić, że system sam będzie aktualizował sobie listę możliwości. Trzeba skonstruować działanie trzyetapowe: 1. System bootuje się natychmiast trzeba użyć konfiguracji z ustawionym obrazem domyślnym. Ten obraz ma przekazany parametr generate. 2. Po załadowaniu systemu skrypt startowy jedyne, co wykonuje, to przeprowadza wykrywanie np. wszystkich dysków. Na tej podstawie tworzona jest konfiguracja bootloadera i zapisywana jest na naszym medium. Po tym następuje automatycznie reboot. 3. Użytkownikowi pokazuje się dynamicznie wygenerowane menu, z którego wybiera odpowiednią operację. System po załadowaniu wykonuje wskazaną czynność (np. backup dysku), po czym przywraca bootloader do stanu poprzedniego.

27 Od bootloadera do własnej minidystrybucji 1B Taki sposób jest trochę przydługi, ale działa. Do takiego trybu działania SYSLINUX lub GRUB nada się lepiej niż lilo czytają one dynamicznie plik z konfiguracją. Wystarczy więc mini-linuksowi kazać zmienić ten plik. Ten sam sposób z użyciem LILO wymagałby od nas dołączenia do mini-linuksa zestawu narzędzi do instalacji LILO. W przypadku, gdy nasze medium nie jest zapisywalne jest to np. CD-ROM można skorzystać z możliwości GRUBa. Potrafi on odczytywać plik konfiguracyjny nie tylko z partycji, na której został zainstalowany. Można więc w pierwszy etapie wykrywania zapisać potrzebne informacje w pliku na twardym dysku komputera. Tracimy jednak wtedy na uniwersalności, bo nasz dysk zadziała tylko na odpowiednio przygotowanym komputerze. Na najwięcej pozwoli nam tu zdecydowanie GRUB 2. Potrafi on wypisać wszystkie urządzenia dyskowe wraz z systemami plików, umożliwia też oskryptowienie. Można 1 np. skonstruować taki plik grub.cfg: echo "Witaj w interaktywnym systemie backupow." while [ "$disk" = "" ]; do echo "Oto urzadzenia obecne w systemie:" # ponizsze polecenie wyswietli # wszystkie dyski z opisem systemu plikow ls -l echo -n "Nazwa dysku: " read disk if ls -l $disk/; then linux /vmlinuz backup=$disk initrd /initrd boot else echo "Nie moge odczytac urzadzenia!" disk="" fi done Widać od razu, jakie możliwości daje nam przeniesienie potęgi skryptów shellowych na poziom bootloadera do tego takiego, który potrafi zamontować partycje z różnymi systemami plików. Problemy i triki Nazewnictwo dysków GRUB Gdy korzystamy z GRUB, a chcemy odwołać się do kokretnego dysku lub partycji, korzystamy ze specjalnego formatu (hdx,y ), gdzie X jest numerem fizycznego medium, a Y numerem partycji. Dysk jest numerowany od 0, a partycja od 1. Do tego Prawdę mówiąc, nie do końca można. Pętla while, dla przykładu, jeszcze nie działa (teraz w styczniu). Do 1 Pingwinariów może zadziała.

28 1C Antoni,,Goldie Goldstein dyski nie są dzielone według interfejsu ATA/SCSI ten schemat jest oparty po prostu na kolejności dysków w numeracji BIOS. Linux natomiast te dwa interfejsy rozróżnia. Jeśli mamy zamiar przekazywać Linuksowi dane konkretnego dysku/partycji, a Linux ma nie pomylić się przy identyfikacji, potrzebny jest sposób tłumaczenia jednego na drugie. Jednym ze sposobów jest skorzystanie z binarek instalacyjnych GRUB już w załadowanym systemie. Mają one możliwość wygenerowania nazw GRUB urządzeń linuksowych obecnych w systemie. Należy je porównać i w ten sposób sprawdzić, któremu dyskowi odpowiada np. (hd1,1) przekazane w parametrze. Inna metoda to skorzystanie z unikalnego identyfikatora systemu plików, o którym piszę dalej. Jedyny problem to fakt, że wskazany dysk lub partycja musi mieć do tego utworzony system plików. Instalacja na usuwalnym medium Jeśli chcemy tworzyć system na medium, którego numer BIOS jest nieznany w chwili instalacji CD ROM lub klucz USB mamy problem. Owszem, BIOS wystartuje z takiego dysku bootloader, ale bootloader nie znajdzie nam kernela. Pokrewny problem, o którym piszę niżej, to system operacyjny, który nie wie, jak zamontować medium. Jednym rozwiązaniem jest emulacja dysku twardego lub dyskietki. Przy tworzeniu systemu plików CD-ROM za pomocą mkisofs jesteśmy w stanie zażyczyć sobie konkretnej emulacji. W takim wypadku na etapie ładowania systemu nasz CD będzie albo pierwszym dyskiem twardym, albo dyskietką. Niektóre BIOS-y potrafią też uruchamiać dyski USB w trybie emulacji. Bez tego rozwiązania użycie np. LILO na usuwalnym medium jest niemożliwe. Inny sposób to użycie GRUB2, który potrafi po prostu wystartować system z tego urządzenia, z którego został załadowany. Albo nawet z urządzenia o konkretnym, zapisanym UUID systemu plików. Pokrewny problem jest taki, że GRUB do instalacji na medium wymaga wpisania w pliku /boot/grub/device.map przypisania nazwy urządzenia linuksowego do nazwy używanej przez GRUB. Jednak jest to potrzebne tylko do instalacji, nie do działania. Można taki plik wygenerować raz (w GRUB2 za pomocą grub-mkdevicemap) i zapomnieć. Przygotowanie systemu operacyjnego System zaczął się ładować. Czas zastanowić się, jak powinien być zbudowany i skonfigurowany. Kernel i system plików root Start jądra linuksa w uproszczeniu można opisać tak: 1. Rozpakowanie jądra 2. Inicjalizacja procesora

29 Od bootloadera do własnej minidystrybucji 1D 3. Ładowanie wbudowanych sterowników urządzeń 4. (opcjonalnie) Uruchomienie linuxrc w ramach initrd 5. Zamontowanie systemu plików root 6. Uruchomienie init Nie będę się zbytnio rozwodzić nad konfiguracją kernela. Wiadomo, że chcąc stworzyć mały system powinniśmy konfigurować kernel w sposób,,od zera, tj. wybierając tylko potrzebne sterowniki. Przy takim podejściu łatwo o przypadkowe wycięcie tych komponentów, bez których nie uda się piąty etap. W skrócie, żeby poprawnie zamontować główny system plików znajdujący się na twardym dysku, potrzebne jest wsparcie dla: interfejsu IDE/PATA, SATA lub SCSI dysku, napędu dla konkretnym interfejsu konkretnego chipsetu zarządzającego interfejsem (czasem są generyczne) initrd lub initramfs, jeśli chcemy z nich korzystać. Wymaganiem pośrednim dla initramfs jest system plików tmpfs. odpowiedniego systemu plików na partycji root -- najczęściej ext2, ext3 systemu plików /proc -- choćby do odczytania parametru przekazanego z kernela Jeśli przygotowujemy system tylko dla dobrze znanej grupy komputerów i nie zależy nam na uniwersalności, można nie używać w ogóle modułów kernela -- wszystkie powyższe funkcjonalności można wkompilować na sztywno. W takim wypadku Linux nie potrzebuje nawet opcji "Loadable module support". Jeśli natomiast zrobimy będziemy chcieli, by mini-linux był w stanie w uniwersalny sposób korzystać z różnego sprzętu, a w tym -- jeśli potrzebujemy elastyczności, jeśli chodzi o główny system plików, konieczne jest zaznaczenie tej opcji oraz skorzystanie z initrd/initramfs. Moduły, które będą odpowiadać za start linuxa, umieścimy na startowym ramdysku. Taki sposób działania jest typowy dla dysków ratunkowych, które mają mieć możliwość startowania Linuksa już zainstalowanego na dysku twardym. W naszym systemie chcemy uniwersalności w działaniu na różnym sprzęcie, ale nie potrzebujemy tego, jeśli chodzi o medium. Mini-linux powinien startować z ustalonego medium, z którego wczytuje konieczne dane na ramdysk, po czym działać dalej z ramdysku. W związku z tym musimy wkompilować w kernel obsługę ramdysku, initrd/initramfs oraz ewentualnie medium startowego (np. CD-ROMu ATAPI i systemu plików ISO 9660). To ostatnie jest potrzebne tylko wtedy, gdy nasz główny system plików będzie zbyt duży, by zmieścić się w RAM, lub jeśli chcemy mieć możliwość zapisu na nim z innych powodów (np. do przeprowadzenia opisanej wcześniej..aktualizacji menu). Jeśli chcemy korzystać z początkowego ramdysku, mamy do wyboru initrd i initramfs. Initrd to skompresowany obraz systemu plików. Jest to tymczasowy rootfs:

30 1E Antoni,,Goldie Goldstein kernel montuje go i uruchamia plik /linuxrc. Zadaniem tego programu jest załadowanie sterowników pozwalających na zamontowanie właściwego głównego FS. Po wykonaniu tego programu kernel próbuje zamontować docelowy system plików, jeśli jest różny od tego określonego w initrd, po czym uruchamia init. Initramfs to nowsze rozwiązanie wprowadzone w kernelu 2.6, różniące się w kilku punktach. Po pierwsze, nie jest to obraz system plików, a proste archiwum CPIO, skompresowane GZIP-em, które kernel potrafi zamontować. Każdy zamontowany system plików w działającym Linuksie jest odwzorowany w cache wirtualnego systemu plików (VFS). Tak jest nawet w przypadku ramdysku, bo jest on traktowany jak urządzenie blokowe. Natomiast tmpfs -- rozwiązanie użyte w initramfs -- istnieje wyłącznie w VFS, nie dubluje więc informacji i działa szybciej. W tym modelu kernel wykonuje /init znajdujący się w tym obrazie i jeśli to się uda, nie robi nic więcej. Zamontowanie docelowego systemu plików jest już rolą inita. Dobry opis działania można znaleźć na /Documentation/filesystems/ramfs-rootfs-initramfs.txt, a opis tworzenia na Dodatkowo, initramfs może być do kernela po prostu doklejony. W takim wypadku nasz mini-system może w ogóle nie używać bootloadera: bootsectorem będzie kernel. Sam start kernela do momentu odpalenia initrd to kilka sekund -- można więc całą interaktywność przerzucić do programu init na initramfs. Gdy już mamy elementy, które konieczne są do wystartowania systemu, pora wybrać te, których wymaga nasza konkretna funkcjonalność. Będą to na prawdopodobnie: 1. Sterowniki do różnych urządzeń dyskowych -- generyczne PATA, SATA czy SCSI, jeśli system będzie operować na dyskach 2. Wsparcie do różnych systemów plików na tych urządzeniach (ext2, ext3, JFS itp.) 3. FUSE, czyli Filesystem in Userspace. Bardzo przydatny moduł, dzięki któremu programy działające w przestrzeni użytkownika mogą montować systemy plików. W tej technologii jest zrealizowany pełny support NTFS w pakiecie ntfs3g. 4. Wsparcie dla USB i USB mass storage, jeśli chcemy korzystać z pendrive (np. jako medium docelowego backupów) 5. Obsługa sieci: xtables, advanced router, bridging, karty sieciowe -- jeśli chcemy mieć router 6. sieciowe systemy plików -- NFS, CIFS (nowsza generacja sterownika sieci Microsoft Network SMBFS) 7. support do partycji root na NFS -- i w pakiecie opcja,,kernel level network autoconfiguration, która pozwala skonfigurować sieć przez DHCP, zanim zostanie zamontowany główny system plików. W ten sposób można np. zrealizować w sieci firmowej system backupujący automatycznie zawartość dysków w stacjach roboczych na dysk serwerowy udostępniony przez sieć.

31 Od bootloadera do własnej minidystrybucji 1F Z wyjątkiem ostatniego pomysłu te sterowniki można spokojnie skompilować w modułach -- przy starcie nie będą potrzebne, co więcej, nigdy nie będą potrzebne wszystkie na raz. Do naszych zastosowań polecam stosowanie właśnie initramfs jako jedynego systemu plików. Jeśli jednak potrzebujemy dostępu do większej ilości danych, np. do zawartości CD-ROM, pojawia się problem: jak zamontować to medium? Problem jest ze sprawdzeniem, jaka została przyporządkowana dla usuwalnego dysku, z którego został zastartowany system. Tu często stosowaną metodą w starszych wersjach Linuksa było montowanie kolejnych urządzeń,,na próbę i sprawdzanie, czy na medium znajduje się jakiś charakterystyczny plik. W obecnej chwili znacznie lepszym pomysłem jest użycie UUID Universal Unique Identifier. Jest to kod jednoznacznie przyporządkowany do systemu plików, można go sprawdzić za pomocą polecenia blkid z pakietu narzędzi e2fsprogs. Nowsze wersje mount potrafią z niego korzystać -- można użyć w pliku /etc/fstab mniej więcej takiego wpisu: UUID=0280dc6d-bc50-44a3-bb8b-9534a52fee95 /mnt vfat auto 0 0 Również GRUB 2 potrafi wyszukać system plików o podanym UUID. Trzeba się tylko upewnić, że wskazany system plików wspiera tę możliwość. Dystrybucja Gdy kernel już z sukcesem wystartuje, zamontuje nasz główny system plików i uruchomi program init, pora na przygotowanie systemu, z którego nasza pojedyncza funkcjonalność będzie korzystać. Najchętniej możliwie niewielki. Normalny przebieg spraw Pierwszy i niezabijalny proces użytkownika uruchamiany przez kernel nazywamy procesem init, choć może to być dowolna binarka przekazana parametrem init= kernelowi. Jeśli tego parametru nie podamy, kernel będzie próbował kolejno uruchamiać /sbin/init, /etc/init, /bin/init, /bin/sh, po czym spanikuje. Domyślny init opiera swoje działanie na tzw. runlevels. W parametrze kernela można przekazać initowi numer runlevel, jeśli go nie podamy, init przyjmie domyślny ustawiony w /etc/inittab (opcja initdefault). Kolejne działania to uruchomienie kolejno skryptów, do których linki znajdują się w katalogu /etc/rcs.d, a potem, dla runlevelu x, w katalogu /etc/rcx.d. Na koniec init uruchamia wirtualne terminale na wskazanych konsolach. Dobór minimalnych pakietów Można oczywiście próbować przygotować po prostu minimalną wersję pełnej dystrybucji linuksa. Pod debianem polecany jest pakiet debootstrap, który ściąga minimalny zestaw pakietów z kategorii essential do wybranego katalogu i instaluje je w standardowym drzewie katalogów. Po ukończeniu takiej instalacji, w której można za pomocą parametrów zmieniać zestaw ściąganych pakietów, ma się do dyspozycji

32 20 Antoni,,Goldie Goldstein funkcjonalną instalację zajmującą w okolicach 30MB przestrzeni dyskowej. Nie jest to dużo, ale trudno to nazwać zestawem minimalnym. Do tego zadania bardzo polecam pakiet do tworzenia własnego RescueCD, który można znaleźć pod adresem Jest to zestaw narzędzi, które pozwalają z poziomu Linuksa stworzyć docelowy system plików, a potem w symulowanym środowisku instalować i odinstalowywać pakiety za pomocą standardowego Debianowego systemu pakietów. Korzystają one z apt-get, ale przy niewielkich zmianach można uruchomić w środowisku chroot przyjemniejszy w użytkowaniu aptitude. Inne podobne projekty umożliwiające dobieranie zawartości dysku to np. MiniLinux /) czy Damn Small Linux choć ten ostatni to raczej system desktopowy. Dobór ręczny binarek i system startowy Jeśli chcemy zastosować metodę budowania od zera i dobierania wyłącznie elementów potrzebnych, ale pozostawienia normalnego systemu startowego, pamiętajmy o pozostawieniu narzędzi, bez których system nam nie wystartuje: 1. bash lub odpowiednik 2. narzędzia takie jak cat, sed, grep, ls, touch 3. mount 4. pliki w /etc: passwd, shadow, fstab, mtab (ten ostatni może być linkiem do / /proc/mounts) Ogólnie rzecz biorąc należy zajrzeć do skryptów startowych w /etc/rc?.d zdecydować, które będą nam potrzebne, po czym znaleźć zestaw binariów, z których korzystają. Ten sposób jest jednak niezbyt prosty i narażony na błędy. Lepszym pomysłem jest modyfikacja skryptów startowych, by od razu wykonywały tylko tę czynność, o którą nam chodzi. Należy zacząć od samego programu init -- i właściwie na nim skończyć. Najprostszą metodą jest zastąpienie / /sbin/initha! A twierdziłeś, że init to binarka. KL przez skrypt napisany w shellu. Przykładowo taki: #!/bin/bash mount -a dysk=$(cat /proc/cmdline \ sed s/.*backup=\([^ ]*\).*/\1/ ) nazwa=$(echo $dysk_do_backupu sed s/\//_/g ) dd if=$dysk of=/backupy/$nazwa.img bs=$[1024*1024] echo Gotowe! umount -a mount / -o remount,ro reboot -f -h -w

33 Od bootloadera do własnej minidystrybucji 21 To oczywiście będzie mieć sens, jeśli system rootfs, albo przynajmniej katalog /backup, będziemy mieć zamontowany przez sieć albo na naszym zapisywalnym medium, a backup ma być pełnym obrazem dysku. Do tego jest tu założenie, że w parametrze kernela backup= dostaniemy linuksową nazwę urządzenia, np. /dev/hda2. Każdy potrafi zapewne dostosować to sobie do własnych wymagań -- może się tu zjawić np. wywołanie mkisofs i cdrecord, by backup wypalić od razu na CD/DVD. Teraz pora wybrać wszystkie elementy zależne. Z tego krótkiego spisu właściwie trzeba pamiętać o mount i umount -- wymagają obecności /etc/fstabnieprawda. KL i /etc/mtab, przynajmniej jako symlinku do /proc/mounts. Ponieważ korzystamy z bash, przyda się plik /etc/profile. Trzeba mieć w ścieżce binarki -- prócz wymienionych cat, sed, dd, reboot. Co do reszty, zostaje jeszcze kwestia zależności bibliotecznych. Aby w ogóle móc uruchamiać programy używające dynamicznych bibliotek, w systemie musimy mieć podstawową bibliotekę ld-linux oraz -- prawie zawsze -- bibliotekę libc, czyli pliki /lib/ld-linux.so.* i /lib/libc.so.*. Prócz tego, jeśli chcemy poznać zależności konretnej binarki, posłużmy się poleceniem ldd: trilian:~# ldd which mount linux-gate.so.1 => (0xb7ee7000) libblkid.so.1 => /lib/libblkid.so.1 (0xb7ec6000) libuuid.so.1 => /lib/libuuid.so.1 (0xb7ec2000) libselinux.so.1 => /lib/libselinux.so.1 (0xb7ea8000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7d4d000) /lib/ld-linux.so.2 (0xb7ee8000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7d49000) Widać, że musimy dołączyć do zestawu biblioteki: libblkid, libuuid, libdl i libselinux. Musimy tylko uważać, żeby nie kopiować (tylko) symlinków, a prawdziwe pliki. Oczywiście, trzeba również sprawdzić, czy te nowe biblioteki mają spełnione zależności, tym samym programem. Z wymienionych tylko libuuid ma jako dodatkową zależność libuuid, które i tak mamy na spisie. Można napisać zgrabny skrypt, który gromadzi rekurencyjnie wszystkie te biblioteki na podstawie listy binarek. Takie narzędzie jest najlepszym sposobem na dobieranie minimalnej dystrybucji, póki korzystamy z normalnego libc; nie bierze jednak oczywiście pod uwagę koniecznych domyślnych plików konfiguracyjnych -- te musimy dobierać indywidualnie do każdego programu. Ostatnim, o czym koniecznie trzeba pamiętać, jest zestaw specjalnych plików urządzeń. Można korzystać z systemu plików udev, jednak zanim demon udevd wystartuje, tworząc urządzenia, musi istnieć kilka podstawowych plików (tworzymy je poleceniem mknod). Są to na pewno /dev/null, /dev/console, /dev/zero, / /dev/stdin, /dev/stdout, /dev/stderr. Do tego wszystkie pliki urządzeń, które musimy zamontować, zanim wystartujemy udevd, przy czym jeśli chcemy, możemy instrukcje tworzenia ich wpisać po prostu do skryptu /init w initramfs. Uwaga: stworzenie ich w standardowym /init będzie zbyt późne. Kernel potrzebuje dostępu do konsoli wcześniej.

34 22 Antoni,,Goldie Goldstein Bardziej radykalne sposoby na zmniejszenie objętości Pierwszą metodą jest oszczędzenie na binarkach. Podstawowa rzecz to zastąpienie basha mniejszym shellem. Na zamianie go na np. ash zyskujemy prawie pół megabajta. Należy się tylko upewnić, że skrypty, których używamy, nie korzystają z rozszerzeń specyficznych dla basha. Pójściem krok dalej jest skorzystanie z narzędzia takiego jak busybox. Jest to pojedyncza binarka, którą da się w dodatku skompilować statycznie, zawierająca cały zestaw narzędzi, zarówno tekstowych, jak i systemowych. Są to takie podstawowe programy jak cat, sed, grep, tail, cut, cp, mv, rm, mount, find, ps i tak dalej -- kompletny mini-system w jednym pakiecie. Ale uwaga! Większość tych programików nie obsługuje pełnego zestawu opcji POSIX, jakie są opisane dla ich pełnych odpowiedników. Trzeba brać to pod uwagę pisząc skrypty. Kolejnym etapem odchudzania systemu jest przykrojenie biblioteki libc, która sama w sobie zajmuje powyżej megabajta. Jest kilka projektów, które pozwalają zaoszczędzić na wielkości. Najbardziej znane to uclibc, klibc, dietlibc. Korzystanie z nich wymaga rekompilacji wszystkich binarek, z których chcemy korzystać. Nie ze wszystkimi się to uda, bo te biblioteki dają API libc,,przycięte do podstawowych potrzeb. Nie udało mi się skompilować busyboxa pod uclibc, choć podobno są tacy, którym się to udało. Ostatnim pomysłem, już bardzo radykalnym i raczej ciekawostką przyrodniczą, jest w ogóle rezygnacja z libc. Istnieje projekt asmutils, który zawiera zestaw prostych binarek skompilowanych statycznie, napisanych w czystym asemblerze. Polecam wszystkim, którzy chcą się pobawić asemblerem, ale tutaj możliwości programów zostały naprawdę ograniczone -- praktycznie żadnej analizy opcji.

35 Wydajność i optymalizacja w systemach informatycznych Radosław Korzeniewski Wstęp Tematem referatu będzie przedstawienie pojęcia wydajności, sposobów jej pomiaru i analizy oraz optymalizacji systemu informatycznego. Każdy system informatyczny dysponuje teoretyczną oraz rzeczywistą wydajnością. Bardzo często wartości teoretyczne drastyczne różnią się od wartości rzeczywistych, osiąganych przez dany system informatyczny aplikację i infrastrukturę. Najczęściej przyczyną tych rozbieżności jest istnienie w systemie informatycznym wąskich gardeł, które spowodowane są zazwyczaj nieoptymalną pracą samej aplikacji. Obszary dyskowego i sieciowego wejścia/wyjścia, obszar pamięci wirtualnej czy szeregowania procesów, w każdym z nich system/aplikacja może pracować nieoptymalnie. Opisane zostaną najczęstsze przyczyny powstawania wąskich gardeł, metody ich znajdywania i analizy oraz sposoby optymalizacji aplikacji prowadzące do ich minimalizacji. Definicje Jak zwykle w tego typu rozprawach rozpoczynamy od definicji tematu, którym będziemy się zajmować. Co to więc jest wydajność w systemach informatycznych? Wydajność systemu informatycznego to możliwość wykonania określonego zadania lub określonej ilości zadań w określonym czasie.

36 24 Radosław Korzeniewski Co to dla nas w praktyce oznacza? Daje to nam dwa podstawowe i niezależne stopnie swobody w zwiększaniu wydajności: zwyczajnie, poprzez skrócenie czasu wykonania zadania lub zwiększenie ilości zadań bez zwiększania czasu wykonania. Poprawa każdego ze składników będzie rezultatem całkowicie odmiennego podejścia do optymalizacji systemu informatycznego a w szczególności może być związana z architekturą danego systemu. Zazwyczaj skracanie czasu wykonania zadania realizowane jest poprzez zastosowanie nowocześniejszych i zazwyczaj szybszych elementów składowych: procesorów, pamięci czy dysków. Niestety, kiedy uda nam się zakupić najszybsze dostępne w danym momencie komponenty, a otrzymana wydajność w dalszym ciągu nie będzie zadowalająca, to może okazać się, że będziemy musieli zmienić sposób w jaki nasze zadanie jest realizowane, czyli zwiększać ilość realizowanych zadań zamiast skracania czasu. Kolejną definicją jest Hierarchia dostępu do informacji : Czas dostępu do informacji zwiększa się wraz ze wzrostem ilości informacji do jakiej mamy dostęp. Wzrost ten zazwyczaj jest nieliniowy. Dla systemów informatycznych zależność tę bardzo dobrze ilustruje poniższy schemat: Rejestry Pamięć podręczna cache Pamięć operacyjna Pamięć dyskowa Dyski optyczna i pamięć taśmowa Biblioteki pamięci masowej i nośniki off-line Na samej górze hierarchii mamy rejestry procesorów. Dostęp do tych rejestrów realizowany jest w jednym cyklu zegara procesora, przez co instrukcje korzystające z rejestrów nie muszą czekać na dostęp do danych. Z oczywistych względów ilość takich rejestrów jest ograniczona. Przez wiele lat kolejną w hierarchii była pamięć operacyjna RAM o znacznie większej pojemności w porównaniu do rejestrów procesora. Z czasem wielkość pamięci RAM urosła tak bardzo, że różnica w czasie dostępu pomiędzy rejestrami procesora a pamięcią RAM była tak duża, że wymagało to wprowadzenia czegoś pośredniego - tak powstała koncepcja pamięci cache. Początkowo pamięć cache miała wielkość pojedynczych KiB, czyli wielkości dawnych pamięci RAM. Z biegiem czasu także wielkość pamięci cache rozrosła się na tyle, że sama pamięć cache musiała się podzielić na dwa (L1, L2), a obecnie na trzy (L1, L2, L3) poziomy. Następną w kolejności jest pamięć masowa, czyli dyski twarde (oraz coraz częściej pamięć SSD). Dostęp do tej pamięci jest znacznie dłuższy od czasów dostępu do pamięci RAM, pamięć ta ma także znacznie większe pojemności. W tym przypadku czas dostępu zazwyczaj ograniczony jest poprzez prawa fizyki, a w szczególności mechaniki w przypadku klasycznych dysków twardych z obrotowymi talerzami i ruchomą głowicą odczytująco/zapisującą. Dalsze zwiększanie ilości dostępnej informacji nieuchronnie oznaczać będzie przekroczenie możliwości technicznych pojedynczego systemu i sięgnięcie do zasobów znajdujących się w innych systemach informatycznych, czyli

37 Wydajność i optymalizacja w systemach informatycznych 25 dalszy wzrost czasu dostępu. W pewnym momencie i tutaj dojdziemy do granic możliwości technicznych, więc dane zaczną być składowane na nośnikach nie podłączonych do systemów informatycznych, czyli dostępne off-line, np. taśmy w magazynie. Kolejnym ważnym aspektem wydajności, a dokładniej jej optymalizacji jest pojęcie wąskiego gardła (ang. bottleneck): Wąskim gardłem nazywamy ten element w systemie informatycznym, którego nieoptymalna praca powoduje największe ograniczenie w osiągnięciu wymaganej wydajności. W przypadku kiedy system informatyczny posiada wymaganą wydajność nie ma sensu mówić o wąskich gardłach, co nie znaczy, że one nie istnieją. Z powodu istnienia hierarchii dostępu do informacji, odwołania systemu informatycznego do dowolnej warstwy mającej dłuższy czas dostępu okupione będzie oczekiwaniem na realizację zlecenia ograniczeniem wydajności. W przypadku kiedy system informatyczny będzie miał niewystarczającą wydajność to wąskim gardłem będzie ten element, na którym będzie następowało największe sumaryczne opóźnienie. Zazwyczaj wąskim gardłem jest najwolniejszy element w systemie, chyba że ilość odwołań do niego będzie na tyle nieduża, że sumaryczne opóźnienie będzie pomijalne. W przypadku kiedy w procesie optymalizacji systemu znajdziemy wąskie gardło i je wyeliminujemy, to do czasu osiągnięcia wymaganej wydajności, wąskie gardło będzie istniało w innym miejscu naszego środowiska. W dalszych punktach opiszę poszczególne obszary systemów informatycznych, opisując ich wpływ na osiąganą wydajność i możliwe optymalizacje. Pomiary wydajnościowe benchmarki Jeśli wiemy już teoretycznie co to jest wydajność, to pora na odrobinę praktyki, czyli pomiary wydajnościowe. Zgodnie z definicją powinniśmy potrafić wykonać dwie czynności: po pierwsze, zmusić nasz system informatyczny do wykonania określonej pracy, a następnie zmierzyć czas, w jakim praca ta została wykonana. Z pomiarem czasu nie powinniśmy mieć praktycznie problemów, w końcu ludzie pomiar czasu doskonalą od tysiącleci. Problemem może być za to zmuszenie naszego systemu do wykonania pracy. Owszem, uruchomienie prostego programu do kompresji plików czy kompilatora nie jest zbytnio skomplikowane ale zasymulowanie pracy 1000 czy 2000 użytkowników może być już problemem. Problemem może być dla nas także zbudowanie pełnego środowiska produkcyjnego, tylko po to, aby wykonać testy wydajnościowe. Jak w takim przypadku porównać wydajnościowo różne systemy informatyczne? Należy skorzystać z benchmarków. Idea benchmarków jest prosta. Przygotowujemy określoną pracę do wykonania (ang. workload) i mierzymy jak szybko jest ona wykonywana na różnych systemach informatycznych. Alternatywnie mierzymy jak dużo pracy jesteśmy w stanie wykonać w określonym czasie. Ten, na którym praca zostanie wykonana najszybciej lub wykona jej najwięcej, ma największą wydajność. Jednym z pierwszych benchmarków był wskaźnik MIPS (ang. Million Instructions Per Seconds), który określał jak dużo instrukcji dany procesor był w stanie wykonać w ciągu każdej sekundy. Wskaźnik ten funkcjonował od lat 70 ubiegłego wieku, a jako wzorcową maszynę traktowano VAX 11/780, która posiadała w przybliżeniu wydajność 1 MIPS. Podstawowym problemem tego benchmarku

38 26 Radosław Korzeniewski było to, że praktycznie nie można było go porównywać pomiędzy różnymi architekturami procesorów, ze względu na to, że w różnych architekturach do wykonania tej samej pracy często potrzebne były różne ilości instrukcji. Do tego w benchmarku MIPS nigdy nie było ustalonego formalnie zakresu wykonywanej pracy, przez co producenci procesorów zaczęli mierzyć szybkość wykonywania najszybszej instrukcji każdego procesora: NOP. Dzięki takiemu zabiegowi użytkownicy mogli dowiedzieć się jak szybko ich procesor nic nie robi. Z tych powodów w późniejszych latach powstały szeregi różnorodnych benchmarków nakierowanych na pomiary różnych obszarów wydajności systemów informatycznych. Rzeczywiste aplikacje zazwyczaj mają bardzo różne charakterystyki obciążenia systemu. Mamy aplikacje które wykonują głównie obliczenia, także obliczenia zmiennopozycyjne, są takie które generują dużą ilość odwołań do urządzeń wejścia/wyjścia, w tym do pamięci masowej albo do sieci, są takie, które alokują bardzo dużo pamięci, są wreszcie takie które mają charakterystykę mieszaną. To oznacza że, nie da się przygotować i wykonać uniwersalnego testu wydajnościowego i zmuszeni jesteśmy do wykonywania czy porównywania różnych benchamarków z różnych obszarów systemów informatycznych. Powstało więc sporo różnych benchmarków. Niektóre z nich zostały opracowane przez organizacje lub zrzeszenia firm informatycznych i mają na celu wiarygodne porównanie wydajnościowe różnych systemów informatycznych, na różnych obszarach. Najbardziej znanymi są m.in.: SPEC (Standard Performance Evaluation Corporation) TPC (Transaction Processing Performance Council) SPC (Storage Performance Council) Każda z powyższych organizacji dostarcza wielu rodzajów benchmarków nastawionych na testowanie specyficznych obszarów systemów informatycznych lub specyficznych aspektów wydajnościowych. Innymi znanymi benchmarkami są m.in.: Bonnie++ SysBench IOzone Czy poleganie zatem na wynikach benchmarków jest dobrym pomysłem? Zanim odpowiemy na to pytanie zastanówmy się co tak naprawdę jest wykonywane podczas przykładowych benchmarków? Dla przykładu benchmark SPEC CINT2006 zawiera następujące programy: tabela 1.

39 Wydajność i optymalizacja w systemach informatycznych 27 Benchmark Lang Application Area Brief Description 400.perlbench C Programming Language Derived from Perl V The workload includes SpamAssassin, MHonArc (an indexer), and specdiff (SPEC s tool that checks benchmark outputs). 401.bzip2 C Compression Julian Seward s bzip2 version 1.0.3, modified to do most work in memory, rather than doing I/O. 403.gcc C C Compiler Based on gcc Version 3.2, generates code for Opteron. 429.mcf C Combinatorial Optimization 445.gobmk C Artificial Intelligence: Go 456.hmmer C Search Gene Sequence Vehicle scheduling. Uses a network simplex algorithm (which is also used in commercial products) to schedule public transport. Plays the game of Go, a simply described but deeply complex game. Protein sequence analysis using profile hidden Markov models (profile HMMs) 458.sjeng C Artificial A highly-ranked chess program that also Intelligence: chess plays several chess variants. 462.libquantum C Physics / Quantum Computing 464.h264ref C Video Compression 471.omnetpp C++ Discrete Event Simulation 473.astar C++ Path-finding Algorithms Simulates a quantum computer, running Shor s polynomial-time factorization algorithm. A reference implementation of H.264/AVC, encodes a videostream using 2 parameter sets. The H.264/AVC standard is expected to replace MPEG2 Uses the OMNet++ discrete event simulator to model a large Ethernet campus network. Pathfinding library for 2D maps, including the well known A* algorithm. 483.xalancbmk C++ XML Processing A modified version of Xalan-C++, which transforms XML documents to other document types. Tabela 1 CINT2006 (Integer Component of SPEC CPU2006) (źródło:

40 28 Radosław Korzeniewski W przeważającej większości przypadków nasz system nie będzie wykonywał większości powyższych zadań. Co najwyżej, pierwsze trzy (perl, bzip, gcc) mogą jakoś wpasować się w pojedyncze zadania spotykane w naszych systemach. Może inne testy będą bardziej odpowiednie, dla przykładu opis benchmarku TPC-C: As an OLTP system benchmark, TPC-C simulates a complete environment where a population of terminal operators executes transactions against a database. The benchmark is centered around the principal activities (transactions) of an order-entry environment. These transactions include entering and delivering orders, recording payments, checking the status of orders, and monitoring the level of stock at the warehouses. However, it should be stressed that it is not the intent of TPC-C to specify how to best implement an Order-Entry system. While the benchmark portrays the activity of a wholesale supplier, TPC-C is not limited to the activity of any particular business segment, but, rather, represents any industry that must manage, sell, or distribute a product or service. (źródło: Czyli testujemy system logistyczny klasyczne OLTP, ale czy podobne do naszego? Procesory, wątki i procesy Podstawową częścią systemu komputerowego jest procesor. Klasyczny procesor posiada pojedynczy potok wykonawczy, który zasilany jest strumieniem rozkazów realizujących wykonywane zadanie. We wczesnych systemach komputerowych/operacyjnych oznaczało to wykonywanie pojedynczego zadania od początku do końca, a następnego dopiero po zakończeniu poprzedniego (systemy wsadowe, ang. batch). Współczesne systemy operacyjne realizują wielozadaniowość (ang multitasking) za pomocą podziału czasu procesora (ang. time-sharing) oraz wieloprocesorowości (ang. multiprocessor). Aby to było możliwe, z każdym realizowanym zadaniem związany jest tzw. kontekst zadania, czyli zbiór wszystkich rejestrów danych, stanu oraz adresowych dostępnych dla programów użytkownika (i nie tylko). Ilość danych przechowywanych w kontekście zadania zależna jest od architektury danego procesora. Każdorazowe przełączenie zadania oznacza zapamiętanie kontekstu zadania właśnie realizowanego (przerwanego) oraz załadowanie kontekstu zadania wyznaczonego do wznowienia. Proces ten jest bardzo czasochłonny i powinien być realizowany jak najrzadziej. Podczas pracy systemu komputerowego występują okresy wykonywania programów/zadań użytkowników, zadań systemu operacyjnego, oczekiwania na realizację operacji wejścia/wyjścia czy okresy całkowitej bezczynności. Stosunek każdego z tych okresów określa procentowe obciążenie systemu oznaczane jako: user%, system%, wait%, idle%. Zazwyczaj pożądane jest, aby wartości system% oraz wait% utrzymywały się przy jak najmniejszych wartościach, natomiast user% i dopełnienie do całości - idle% na poziomie zapewniającym wymagany czas odpowiedzi systemu na realizowaną pracę. Oczywiście dla konkretnego przypadku obciążenia pożądany stosunek tych wartości może być całkowicie inny. Szczegółowego omówienia wymagają dwa wskaźniki: system% oraz wait% (zwany także iowait%). Wskaźnik system% oznacza procentowy czas, jaki nasze programy spędzają w jądrze systemu operacyjnego,

41 Wydajność i optymalizacja w systemach informatycznych 29 wykonując działania operacyjne, zarządzanie sprzętem, pamięcią czy innymi programami. Z jednej strony wydaje się, że działania te powinny być dla nas pożyteczne, z drugiej strony bardzo wiele z tych działań z punktu widzenia naszego przetwarzania jest zwyczajnie stratą czasu przez, który spada wydajność naszego systemu. Wskaźnik wait%, wbrew powszechnemu przekonaniu należy sumować ze wskaźnikiem idle%, a nie system%. Jego istnienie nie jest do końca uzasadnione i w niektórych systemach Unix wskaźnik ten został usunięty, albo na stałe pokazywany jest z wartością zero (np. w Solarisie 10). W rzeczywistości jego istnienie nie jest za bardzo pomocne w analizie wydajnościowej systemu, cytując podręcznik polecenia sar: %iowait Percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request. Biorąc pod uwagę, że odwołania systemu do dysku są znacznie dłuższe od czasów wykonania instrukcji procesora, to jakiekolwiek odwołanie do dysku od razu spowoduje skok wartości tego wskaźnika (o ile w tym czasie nie było uruchomionych innych procesów konsumujących procesor w trybie user albo system). Takie zachowanie bardzo często powoduje problemy interpretacyjne i fałszowanie statystyk, wystarczy uruchomić zwykłe kopiowanie pojedynczego pliku, aby się o tym przekonać. Kolejnym wskaźnikiem pracy systemu związanym z obciążeniem procesora lub procesorów jest load average (pol. średnie załadowanie jako, że określenie to nie podoba się autorowi w dalszej części referatu nie będzie używane) wyświetlany zazwyczaj jako zbiór trzech wartości obliczanych dla okresu uśrednienia 1, 5 i 15 minut. Wskaźnik ten jest ściśle związany z długością kolejki procesów gotowych do wykonania, wykonywanych (status R ) lub w stanie nieprzerywalnego uśpienia (status D ). Przyjęło się traktować, że wskaźnik ten nie powinien być większy niż dwukrotność liczby jednostek wykonawczych w serwerze procesorów/rdzeni. Krótkotrwałe przekroczenie tego progu nie oznacza jeszcze problemów z naszym systemem. Pamiętać należy także, że analizowanie wskaźnika load average powinno być zawsze powiązane z procentową utylizacją procesorów, w przeciwnym wypadku możemy dojść do skrajnie błędnych wniosków, za sprawą tzw. dobrowolnych przełączeń kontekstu (ang. voluntary context switches). Pozostaje nam jeszcze jeden element związany z wydajnością systemu obsługa przerwań. Przerwania są nieodzownym elementem każdego systemu i praktycznie wszystkie są obsługiwane przez jądro, co oznacza utylizację w obszarze system. Ze względu na swoją funkcjonalność obsługa przerwania zawsze poprzedzona jest przełączeniem kontekstu. Z definicji obsługa przerwania powinna być maksymalnie krótka, ale nie zawsze jest to regułą. W związku z tym, im więcej przerwań nasz system musi obsłużyć, tym więcej czasu musimy przeznaczyć na ich obsługę odkładając na bok wykonywanie programów użytkownika, zwiększając wskaźnik utylizacji system%. Przerwania w systemie są nieodzowne, nie oznacza to jednak że wszystkie powinny być przez nas system obsługiwane, a dokładniej, że nasz system powinien je generować. W jaki sposób dowiedzieć się jak wygląda utylizacja i jakie są statystyki w naszym systemie? Praktycznie każdy system klasy Unix dostarcza spory arsenał narzędzi służących wyłącznie do wyświetlania informacji wydajnościowych. Najpopularniejszym z nich jest top, chociaż narzędzie to wcale nie wywodzi się z systemów Unix.

42 2A Radosław Korzeniewski Narzędzie to jest bardzo poręczne i domyślnie uruchomione daje jako taki pogląd na to, co może faktycznie dziać się w naszym systemie. Niestety jest to narzędzie interaktywne i poza możliwością wyświetlenia kilku ciekawych informacji nie jest pomocne we wstępnej analizie. Następnym w kolejności jest vmstat, które dokładniej omówione zostanie w części poświęconej pamięci wirtualnej, a które potrafi wyświetlić kilka bardzo ważnych statystyk związanych z obszarem CPU. Mamy więc statystyki utylizacyjne user% (cpu:us), system% (cpu:sy), idle% (cpu:id), wait% (cpu:wa), do tego statystyki ilości przerwań (system:in) oraz przełączenia kontekstu (system:cs), oraz aktualne długości kolejek procesów oczekujących na wykonanie (procs/kthr:r) i w stanie nieprzerywalnego uśpienia (procs/kthr:b). Statystyki te wraz ze statystykami utylizacji pamięci operacyjnej (memory:free) i wirtualnej (memory:swap) oraz aktywnością podsystemu IO (disk/io:bi,bo) dają nam podstawowy ogląd na stan naszego systemu, chwilowo bez zagłębiania się w szczegóły. Narzędzie to tak samo jak top, pokazuje aktualną sytuację w systemie i jeśli chcielibyśmy dokonać analizy wydajnościowej obejmującej dłuższy okres, to dane z vmstat a należało by w jakiś sposób zapamiętać w pliku do dalszej obróbki (np. stworzenia wykresów). Na szczęście systemy klasy Unix dorobiły się potężnego narzędzia zbierającego statystyki systemowe i raportującego je w bardzo użytecznych formatach (np. CSV, XML). Tym narzędziem jest sar (ang. system activity reporting). Sar to w rzeczywistości zbiór kilku specjalizowanych narzędzi, służących do zbierania danych (sadc, sa1, sa2), wyświetlania danych zebranych w przeszłości i zapisanych w dedykowanych plikach, wyświetlenia danych zebranych podczas uruchomienia narzędzia (sar), czy generowania danych do dalszej obróbki (sadf). Zbierane dane obejmują m.in. statystyki transferów IO, statystyki stronicowania, pamięci operacyjnej i wirtualnej, statystyki aktywności urządzeń blokowych, przerwań, sieci oraz utylizacji procesorów i obciążenia systemu zadaniami. Standardową procedurą zbierania danych jest cykliczne uruchamianie programu sa1 oraz sa2 (np. z cron a), które zapisują dane statystyczne w plikach zlokalizowanych w /var/log/sysstat (w systemie Linux) lub /var/adm/sa (w systemach Unix), podzielonych na pliki dzienne. Uruchomienie polecenia sar bez argumentów, powoduje odczytanie danych statystycznych zebranych we wspomnianych wcześniej plikach. Odpowiednimi opcjami możemy wskazać z jakiego czasu mają być wyświetlane statystyki (opcje -s i -e), jakie mają to być statystyki (opcje -bbcdqrruvwwynpi lub -A) lub jeśli nie interesują nas dane historyczne, możemy zweryfikować aktualne obciążenie systemu (podając interwał zbierania statystyk oraz ilość wyświetleń). Jedną z właściwości sar-a jest możliwość raportowania statystyk obciążeniowych z podziałem na poszczególne procesory/jednostki wykonawcze. Dzięki temu jesteśmy w stanie zweryfikować rozkład obciążenia względem zakładanej charakterystyki pracy systemu, w szczególności aplikacje jednowątkowe w środowisku wieloprocesorowym. Podobne analizy można wykonać przy użyciu narzędzia mpstat, ale w przeciwieństwie do sar-a wyświetlane mogą być wyłącznie statystyki aktualne, bez historycznych. W Linuksie narzędzie mpstat wyświetla generalnie te same informacje, które dostępne są za pomocą narzędzia sar, jedyną dodatkową i użyteczną różnicą jest wyświetlanie ilości przerwań obsługiwanych przez poszczególne procesory. W systemach Unix narzędzie mpstat wyświetla znacznie więcej użytecznych informacji z podziałem na poszczególne procesory, w szczególności ilość migracji wątków pomiędzy procesorami czy statystyki obsługi muteksów.

43 Wydajność i optymalizacja w systemach informatycznych 2B # pidstat head Linux generic (deimos) :41:11 PID %user %system %CPU CPU Command 11:41:11 1 0,00 0,01 0,01 0 init 11:41:11 4 0,00 0,00 0,00 0 ksoftirqd/0 11:41:11 7 0,00 0,00 0,00 1 ksoftirqd/1 11:41:11 9 0,00 0,00 0,00 0 events/0 11:41: ,00 0,00 0,00 1 events/1 11:41: ,00 0,00 0,00 1 kblockd/1 11:41: ,00 0,00 0,00 1 pdflush Statystyka obciążenia systemu Linux z podziałem na poszczególne proce- Tabela 4 sory. Kiedy już zorientowaliśmy się w ogólnej sytuacji w systemie czas na lokalizację najbardziej obciążających system procesów. W tym przypadku na szybko ponownie możemy sięgnąć po program top. Program ten wyświetla zarówno ogólne statystyki obciążenia systemu, w tym load average, utylizację procesorów, pamięci operacyjnej i wirtualnej jak i cyklicznie aktualizowaną listę procesów systemowych, posortowaną zgodnie z preferencjami użytkownika, np. utylizacją procesora (domyślnie), zajętością pamięci, itp. Mimo tego, że program top jest programem interaktywnym, to ma użyteczną opcję -b dzięki, której możemy zapisywać informacje wyświetlane przez ten program do pliku lub przekierowywać do innych programów. Top dostępny jest domyślnie w systemie Linux, w pozostałych systemach Unix trzeba go doinstalować. Mimo tego inne systemy Unix posiadają programy o zbliżonej/podobnej funkcjonalności, np. prstat w systemie Solaris czy topas w systemie AIX. Informacje podawane przez program top dostępne są także w innych narzędziach, np. w programie ps (szczególnie opcje -efllm czy -eo lista formatów ). W Linuksie dostępne jest dodatkowo narzędzie pidstat wyświetlające podobne informacje jak ps. W przypadku weryfikacji odwołań systemowych bardzo pomocne są narzędzia śledzące takie jak: strace, truss czy dtrace, kprobes. Narzędzia te umożliwiają zapoznanie się z zachodzącą interakcją aplikacji z systemem operacyjnym. Programy strace czy truss logują informację o każdym (lub wskazanym przez opcje) wywołaniu systemowym, jakie generuje aplikacja. Możliwe jest także logowanie czasu wykonania poszczególnych wywołań systemowych (strace opcja -t lub -r), czy bardzo ciekawe podsumowanie statystyczne wszystkich wywołań (strace opcja -c). Na tej podstawie, podczas szczegółowej analizy wydajnościowej, jesteśmy w stanie stwierdzić, czy nasza aplikacja jest w stanie osiągnąć zakładany przez nas poziom wydajności i co można zrobić aby wydajność była większa. Pamięć cache, operacyjna i wirtualna Pamięć operacyjna (RAM) jest podstawowym rodzajem pamięci w systemach komputerowych. W pamięci tej przechowywane są wszelkie elementy wymagane w aktualnej

44 2C Radosław Korzeniewski # mpstat 1 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl Tabela 2 Przykład działania narzędzia mpstat w systemie Solaris. Jak widać statystyki wait% wynoszą 0 pracy systemu. Mamy więc: kod programu (w tym kod systemu operacyjnego i programów użytkownika), dane, struktury systemowe, bufory, itp. Zgodnie ze schematem hierarchii dostępu do informacji, z powodu swojej pojemności pamięć operacyjna zazwyczaj jest znacznie szybsza od pamięci masowej (dyski) i wolniejsza od procesora (rejestrów). Różnice w tych wydajnościach (ang. latency gap) muszą być niwelowane za pomocą pośrednich bytów, zwanych pamięcią cache (pamięć pośrednia, notatnikowa). Pamięć cache, pomiędzy procesorem a pamięcią RAM jest implementowana za pomocą specjalistycznego układów lub bloków w strukturze procesora. Pamięć ta organizowana jest w bloki, zwane liniami pamięci cache, które są najmniejszymi zarządzanymi elementami pamięci. Zasada pracy pamięci cache jest prosta. Podczas każdego odwołania procesora do pamięci RAM, dane pobierane z lub zapisywane do pamięci RAM przechodzą przez pamięć cache, która zapamiętuje adres odczytywanych lub zapisywanych danych, oraz same dane. W przypadku odczytu, kiedy wymaganych danych nie ma w pamięci cache, dane te są pobierane przez kontroler pamięci cache z pamięci RAM i finalnie dostarczane do procesora. W przypadku zapisywania danych, są one zawsze zapisywane do pamięci cache, a następnie do pamięci RAM. Szczegóły powyższych działań zależą od konkretnej implementacji pamięci cache, w szczególności sposobu wyboru konkretnej linii pamięci cache, do której następował będzie dostęp czy sposobu zapisu/aktualizacji danych w pamięci RAM. W przypadku używania pamięci cache w systemie wieloprocesorowym, czyli wielu

45 Wydajność i optymalizacja w systemach informatycznych 2D # sar -uq SunOS borkos 5.10 Generic_ sun4u 01/01/ :00:00 %usr %sys %wio %idle 01:00: :00: :00: :00: :00: :00: :00: :00: :20: :40: :00: :20: :40: :00: :20: :40: :00: :20: Average :00:00 runq-sz %runocc swpq-sz %swpocc 01:00: :00: :00: :00: :00: :00: :00: :00: :20: :40: :00: :20: :40: :00: :20: :40: :00: :20: Average Tabela 3 Przykład działania polecenia sar ukazującego dane historyczne dla statystyk obciążenia procesora oraz kolejki wykonywanych zadań (system Solaris). Ponownie wait% równe 0

46 2E Radosław Korzeniewski pamięci cache umiejscowionych przy każdym z procesorów, sprawy dodatkowo się komplikują, ponieważ pamięci cache muszą być w jakiś sposób synchronizowane pomiędzy sobą. Synchronizacja ta, jest wymagana ze względu na umożliwienie pracy systemu jako SMP, gdzie odwołanie do dowolnego obszaru pamięci z dowolnego procesora funkcjonalnie musi dawać takie same efekty. Problem synchronizacji rozwiązywany jest za pomocą nasłuchu szyny adresowej przez kontrolery pamięci cache i oznaczanie stanu bloków pamięci cache, za pomocą tzw. protokołu MESI (Modified, Exclusive, Shared, Invalid). Co powoduje, że pamięć cache jest tak przydatna? Podstawą tego sukcesu jest efekt lokalności odwołań występujący w praktycznie każdym programie komputerowym (m.in. dzięki zastosowaniu mechanizmu pętli). Jeśli procesor odwołał się do jakiegoś obszaru pamięci, to z bardzo dużym prawdopodobieństwem następne odwołanie odbędzie się bardzo blisko poprzedniego odwołania. Jeśli więc podczas pobierania zawartości danej komórki pamięci RAM uda nam się pobrać dodatkowo zawartość kilku sąsiadujących z nią komórek, które następnie umieścimy w bardzo szybkiej pamięci cache, zanim procesor będzie chciał te dane to uzyskamy efekt znacznego przyśpieszenia dostępu do pamięci, bez faktycznego zwiększenia szybkości pracy pamięci RAM. Analogicznie odbywa się podczas zapisu danych do pamięci. Jeśli zamiast oczekiwać na zakończenie operacji zapisu do relatywnie wolniejszej pamięci RAM, dane zostaną zapisane do znacznie szybszej pamięci cache, a do pamięci RAM w późniejszym czasie, to także uzyskamy efekt przyśpieszenia dostępu. Z biegiem czasu różnica szybkości pracy procesorów i pamięci RAM stała się tak duża, że pojedyncza pamięć cache stała się niewystarczająca. Tak powstał podział dotychczasowej pamięci cache na poziomy. Początkowo dwa poziomy L1 (poziom bliżej procesora) oraz L2 (poziom bliżej pamięci RAM), obecnie coraz częściej trzy poziomy: L1, L2, L3. Pomimo tego podziału, zasada pracy każdej z pamięci cache jest z grubsza taka sama. Pamięci różnią się oczywiście pojemnością i związanym z tymczasem dostępu oraz algorytmami zarządzania. Każdorazowe odwołanie się kontrolera pamięci cache do pamięci operacyjnej (odczyt lub zapis) traktowane jest jako zdarzenie cache-miss które powoduje opóźnienie w wykonywaniu programu. Im więcej takich zdarzeń, tym większy jest spadek szybkości wykonywania programu. Przeciwdziałać temu możemy na kilka sposobów. Po pierwsze możemy zwiększyć wielkość pamięci cache (obecnie wyłącznie jako zmianę procesora na model z większą ilością pamięci cache). Po drugie, możemy tak zmodyfikować algorytm działania naszego programu, aby zwiększyć lokalność odwołań do pamięci. W końcu, możemy wykorzystać fakt wstrzymania wykonywania obecnego programu i w środowisku wielozadaniowym dokonać przełączenia zadań na takie, które ma dane dostępne. Niestety, z każdym z tych sposobów wiążą się pewne ograniczenia. W pierwszym przypadku wielkość dostępnej pamięci cache jaką możemy kupić jest mimo wszystko ograniczona. W drugim przypadku, może okazać się, że nie jesteśmy w stanie zmodyfikować zastosowanego algorytmu (z różnych powodów, braku lepszego algorytmu czy braku dostępu do źródeł). W trzecim przypadku może okazać się, że architektura naszego procesora nie wspiera specyficznej obsługi tego typu zdarzeń. W przypadku pamięci masowej (dysków) różnice w dostępie są jeszcze większe i to nie tylko ze względu na różnice w opóźnieniach, ale także ze względu na sposób adresowania. Odczytać lub zapisać możemy jeden lub więcej sektorów o standardowej

47 Wydajność i optymalizacja w systemach informatycznych 2F wielkości 512 bajtów (wiele narzędzi tą wielkość traktuje jako podstawową jednostkę danych). Każdorazowe odwołanie się do urządzenia dyskowego, oznacza wysłanie żądania, którego czas przetworzenia liczony jest od kilku do kilkudziesięciu ms. W porównaniu do czasu dostępu do pamięci RAM, czas ten jest milion razy większy. W tym czasie nasz program zazwyczaj zwyczajnie bezproduktywnie czeka. Zasadne jest więc przeznaczenie niewykorzystywanej pamięci RAM na pamięć cache. Także i w tej sytuacji wykorzystujemy właściwość lokalności odwołań w żądaniach dostępu. To założenie powoduje często niezrozumienie, bo pamięć cache formalnie konsumuje wolną pamięć operacyjną, zmniejszając wskaźnik dostępnej/wolnej pamięci, jednak obszar ten nie może być traktowany jako pamięć zajęta, bo nie wpływa on na zmniejszenie się dostępnej pamięci dla programów użytkowych. Dodatkowo pamięć ta ma jedną, podstawową różnicę w porównaniu do pamięci cache procesora: pamięć ta jest organizowana i zarządzana przez system operacyjny, więc mamy na nią, a dokładniej na jej sposób działania, znacznie większy wpływ. Kolejnym pojęciem związanym z zarządzaniem pamięcią operacyjną systemu komputerowego jest pamięć wirtualna. Wirtualizacja pamięci to taki mechanizm, który umożliwia korzystanie z potencjalnie znacznie większego obszaru pamięci niż faktycznie jest dostępna w systemie komputerowym. Wirtualizacja pamięci realizowana jest zazwyczaj za pomocą mechanizmu stronicowania pamięci, w którym przestrzeń adresowa pamięci dzielona jest na wiele jednakowych, lub z góry założonych wielkościowo kawałków stron pamięci. Każdy z tych kawałków może znajdować się w różnych stanach, w szczególności, może być niezaalokowany, zaalokowany w pamięci RAM, zaalokowany poza pamięcią RAM (obszar swap lub kod programu na filesystemie), czy posiadać atrybuty dostępu, np. tylko do odczytu, niewykonywalny, itp. Jeśli do tego dodamy mechanizm translacji adresów wirtualnych/logicznych (w zależności od stosowania mechanizmu segmentacji) na adresy fizyczne pamięci RAM, to otrzymamy zasady działania pamięci wirtualnej we współczesnych systemach komputerowych. Aby cały ten mechanizm sprawnie działał w pamięci systemu komputerowego musi być zdefiniowany specjalny obszar w którym umiejscowiona będzie tablica translacji adresów i atrybutów każdej ze stron pamięci (ang. Page Translation Table). Wielkość tej tablicy zależy od wielkości wirtualnej przestrzeni adresowej każdego z procesów (nie wspominając o przestrzeni adresowej jądra). W przypadku popularnej architektury procesorów x86 alokowany jest 1MiB na każdy 1GiB wirtualnej przestrzeni adresowej. W przypadku aplikacji alokujących duże ilości współdzielonej pamięci, gdzie duże ilości tych samych stron są zamapowane w wielu przestrzeniach adresowych aplikacji, tablice stron opisujące ten stan zaczynają być sporym narzutem zaalokowanej pamięci, której zarządzaniu system operacyjny musi poświęcać sporo czasu. Przykładami takich typów aplikacji są systemy bazodanowe, gdzie sesje użytkowników odwzorowywane są jako oddzielne procesy podłączone do wspólnego obszaru pamięci współdzielonej (ang. shared memory segments) i komunikujące się za jej pomocą. Z zasady działania stronicowania wynika, iż translacja adresu wirtualnego/logicznego odbywa się przy każdorazowym odwołaniu procesora do pamięci, zarówno przy pobieraniu kolejnych instrukcji, jak i podczas dostępu do danych. W zależności od architektury procesora lub systemu operacyjnego, tablice stron zorganizowane są zazwyczaj w wielopoziomowe drzewa albo tablice mieszające (ang. hash table). Taka organizacja, oznacza wymóg kilkukrotnego odwołania się

48 30 Radosław Korzeniewski do pamięci w celu pobrania wymaganych danych, co byłoby nieakceptowalne z punktu widzenia wydajności pojedyncze odwołanie do pamięci zastępujemy wielokrotnym odwołaniem, w celu translacji adresów wirtualnych na rzeczywiste. Aby zniwelować ten niekorzystny efekt w procesorach stosuje się specjalne bufory cache ujące dane z tablic stron zwane TLB (Translation Lookaside Buffer). Ze względu na wydajność w procesorach stosuje się relatywnie niewielkie wielkości tych buforów, zazwyczaj 64 lub 128 elementów. W przypadku stosowania 4kiB stron oznacza to tylko 512kiB fizycznej przestrzeni adresowej. Każdorazowe odwołanie do strony nie posiadającej wpisu w TLB oznacza pojawienie się zdarzenia typu TLB-miss i potrzebę wymiany pojedynczego wpisu w TLB, co powoduje wstrzymanie aktualnie wykonywanego ciągu instrukcji. W przypadku niewielkich stron pamięci: 4kiB czy 8kiB sytuacje takie w obecnych systemach komputerowych (z wielo-gib pamięciami RAM) występują dosyć często. Problem ten można zniwelować, poprzez zastosowanie tzw. dużych stron o wielkości 2MiB, 4MiB lub 8MiB (ang. largepage, hugepage). W tym momencie dochodzimy do ostatniego elementu funkcjonalności, jaką daje pamięć wirtualna, czyli stronicowanie na żądanie (ang. demand paging). Jak już było wspomniane wcześniej, jedną z właściwości elementu tablicy stron są atrybuty strony, wśród których istnieją znaczniki określające czy dana strona istnieje w pamięci RAM (albo poza nią), czy odbywał się do niej dostęp lub, czy była modyfikowana. Znaczniki te są wykorzystywane przez system operacyjny do implementacji takich mechanizmów jak opóźniona alokacja stron pamięci (ang. delayed allocation), czy kopiowanie stron przy zapisie (ang. copy on write) oraz najważniejszego, przenoszenia stron do obszaru wymiany (ang. swapping). Obszar wymiany (ang. swap space) jest obszarem zaalokowanym na wolniejszym od pamięci RAM nośniku danych, zazwyczaj w pamięci masowej dyskach. W przypadku, kiedy programy użytkownika zażądają alokacji pamięci, która przekroczy dostępną dla systemu komputerowego pamięć RAM, system operacyjny może zdecydować o przeniesieniu pewnych stron pamięci do obszaru wymiany, a zwolnioną w ten sposób pamięć przeznaczyć na wymagane alokacje. Tak przeniesiona strona w tablicy stron jest oznaczana jako niedostępna i w przypadku, kiedy jakiś proces odwoła się do niej ponownie, wygenerowany zostanie wyjątek i system operacyjny sprowadzi wymaganą stronę z obszaru swap do pamięci RAM (przy okazji może nastąpić wyrzucenie innej strony do tego obszaru). Systemy Unix posiadają sporo narzędzi umożliwiających weryfikowanie stanu pamięci wirtualnej i wykorzystania zasobów. Praktycznie wszystkie opisywane do tej pory narzędzia wyświetlają takie dane. Podstawowymi informacjami są: ilość wolnej pamięci RAM, zajętość obszaru wymiany (lub ilość wolnego obszaru wymiany), wielkości pamięci przeznaczonej na bufory czy pamięć cache, liczniki aktywności stronicowania (w tym pagein, pageout, major i minor fault), aktywności obszaru wymiany (swapin, swapout), aktywności obszarów buforów i cache czy aktywności daemona odpowiedzialnego za zarządzanie pamięcią (pageout, kswapd, itp.). W systemie Linux bardzo ciekawe informacje dotyczące zajętości pamięci można uzyskać z pliku /proc/meminfo. Wewnętrznie czujemy, czym jest ilość wolnej pamięci RAM czy zajętość obszaru wymiany, jednak co oznaczają te wszystkie pagein, pageout, major i minor fault, itp.? Na początek stronicowanie. Z tym obszarem związane są takie parametry jak: pagein, pageout, minor i major fault. Alokowanie nowych stron oraz obsługa mechanizmu copy-on-write, uwidoczniona jest we wskaźniku minor fault

49 Wydajność i optymalizacja w systemach informatycznych 31 # vmstat 1 kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr m0 m1 m5 m6 in sy cs us sy id Tabela 9 Klasyczne narzędzie vmstat (system Solaris). Przy analizie problemów z brakiem pamięci, szczególną uwagę należy zwrócić na statystykę sr (scan rate). wyjątek obsługi stron, zrealizowany bez odwołania do dysku. W przypadku, kiedy wyjątek obsługi stron zakończył by się odwołaniem do dysku, uwidocznione to by zostało we wskaźniku major fault. W przypadku stosowania mechanizmów mapowania plików do pamięci procesu (funkcja mmap) związana z tym aktywność (odczyt lub zapis strony pamięci), uwidoczniona będzie w parametrach pagein i pageout. W niektórych systemach możemy otrzymać dodatkowo informacje o stronicowaniu z podziałem na rodzaje stron: wykonywalne, anonimowe lub plików (Solaris vmstat opcja -p). Statystyki aktywności obszaru wymiany ukazane są we wskaźnikach swapin i swapout. Ze względu na istnienie filesystemów typu swapfs, nie każde odwołanie do obszaru wymiany musi od razu oznaczać braków pamięci. Z aktywnością tą związany jest dodatkowy wskaźnik ukazujący pracę daemona swapowania pageout/kswapd scan rate (Solaris) lub pgscank/pgscand (Linux). Wartości te większe od zera oznaczają przekroczenie ustawionych poziomów, przy których daemon się budzi i rozpoczyna działalność wywrotową, poszukując kandydatów (stron) do wyrzucenia do obszaru wymiany w celu zwolnienia pamięci. Do opisania mamy jeszcze kilka pojęć związanych z podziałem alokowanej pamięci: Bufory w ogólności jest to pamięć używana przez jądro lub sterowniki w celu buforowania odwołań do urządzeń. Cache jest to pamięć podręczna przeznaczona na zwiększenie szybkości odwołań do plików (jej mechanizm był opisany wcześniej). Strony anonimowe (ang. Anonymous Pages) są to zaalokowane strony pamięci, nie przypisane do konkretnego procesu, ani przestrzeni jądra. Strony te są najczęściej wykorzystywane dla pamięci cache, buforów czy implementacji tmpfs, itp. Strony zamapowane (ang. Mapped) strony zaalokowane za pomocą wywołania funkcji mmap, szeroko wykorzystywanej m.in. w dynamicznym linkowaniu. Slab strony zaalokowane przez alokator płytowy. Alokator płytowy służy do efektywnego alokowania różnych obiektów w sposób minimalizujący fragmentacje pamięci. W systemie Linux szczegółowe informacje o rodzajach obiektów zaalokowanych za pomocą tego alokatora można uzyskać w pliku /proc/slabinfo. Tablice stron obszar pamięci przeznaczony na implementację mechanizmu stronicowania opisanego wcześniej. Wskaźnik ten dostępny jest w systemie Linux we wspomnianym wcześniej pliku /proc/meminfo. Dla architektury x86 każdy element tablicy stron zajmuje 4 bajty, stąd możemy wyliczyć ilość zdefiniowanych stron. Im więcej definicji stron w pamięci, tym więcej czasu procesor musi spędzać na przeładowywaniu elementów TLB zmniejszając efektywność tego mechanizmu. W przypadku systemu Solaris i procesorów SPARC, za pomocą narzędzia trapstat (szczególnie opcja -T) jesteśmy w stanie zweryfikować ilość zdarzeń TLB-miss generowanych prαzez te procesory. Rozwiązaniem problemu zbyt dużej ilości stron pamięci, jest wykorzystanie tzw. dużych stron (ang. largepages, hugepages), co było opisane wczesniej.

50 32 Radosław Korzeniewski # cat /proc/meminfo MemTotal: kb MemFree: kb Buffers: kb Cached: kb SwapCached: 4564 kb Active: kb Inactive: kb HighTotal: 0 kb HighFree: 0 kb LowTotal: kb LowFree: kb SwapTotal: kb SwapFree: kb Dirty: 644 kb Writeback: 0 kb AnonPages: kb Mapped: kb Slab: kb PageTables: kb NFS_Unstable: 0 kb Bounce: 0 kb CommitLimit: kb Committed_AS: kb VmallocTotal: kb VmallocUsed: kb VmallocChunk: kb Tabela 5 Informacja o zajętości pamięci w systemie Linux dostępna w pliku /proc/meminfo. Dla systemów 64bitowych należy zignorować wartości VmallocTotal i VmallocChunk Podsystem dyskowy, dyski i macierze Dyski twarde są jednym z typów urządzeń pamięci masowej, które są obecnie najczęściej, spośród wszystkich typów, spotykanymi elementami systemów informatycznych. Pierwsze dyski twarde pojawiły się w latach pięćdziesiątych ubiegłego wieku i od tamtej pory ogólna zasada ich działania praktycznie się nie zmieniła. Dyski twarde (w ogólności) składają się z aluminiowego talerza lub talerzy pokrytych warstwą magnetyczną (talerze wirują), ruchomego ramienia z głowicami odczytująco/zapisującymi dane na talerzach oraz elektroniki sterującej całym urządzeniem. Przez ponad 50 lat założenia pierwotnego projektu były z roku na rok coraz bardziej udoskonalane. Coraz szybciej kręciły się talerze, coraz szybciej głowice się przesuwały. Dane zapisywane na cylindrycznych ścieżkach były coraz mniejsze i było ich coraz więcej. W międzyczasie dyski zamknięto w sztywnych metalowych obudowach. Rosła pojemność, rosła szybkość działania, ale ogólna zasada pracy pozostała bez zmian.

51 Wydajność i optymalizacja w systemach informatycznych 33 # cat /proc/slabinfo slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail> nfs_direct_cache : tunables : slabdata nfs_write_data : tunables : slabdata nfs_read_data : tunables : slabdata nfs_inode_cache : tunables : slabdata nfs_page : tunables : slabdata fscache_cookie_jar : tunables : slabdata rpc_buffers : tunables : slabdata rpc_tasks : tunables : slabdata rpc_inode_cache : tunables : slabdata dlm_conn : tunables : slabdata fib6_nodes : tunables : slabdata ip6_dst_cache : tunables : slabdata ndisc_cache : tunables : slabdata (...) Tabela 6 Przykład szczegółowych statystyk dotyczących alokatora płytowego, dostępnych w pliku /proc/slabinfo. Informacja użyteczna w przypadku alokacji zbyt dużej ilości pamięci typu Slab. Tak więc, w przeciwieństwie do procesora i pamięci RAM opisywanych wcześniej, dyski twarde są w głównej mierze urządzeniami mechanicznymi. Mechanika ta, jest głównym czynnikiem wpływającym na szybkość dostępu do danych i główną barierą w zwiększaniu szybkości działania dysków. Zasada działania dysku jest prosta. Dane zapisane są na cylindrycznych ścieżkach na wirujących z dużą prędkością (5400rpm, 7200rpm, 15000rpm) talerzach, nad którymi podczas operacji dostępu do danych przesuwa się ramię z głowicami. Zastanówmy się, co trzeba zrobić, aby odczytać dowolną daną z dysku twardego. Po pierwsze, kontroler dysku musi otrzymać odpowiednie żądanie dostępu w którym zawarta jest informacja z którego miejsca dysku chcemy odczytać dane. Następnie

52 34 Radosław Korzeniewski # trapstat 1 vct name cpu32 cpu33 cpu34 cpu35 cpu36 cpu37 cpu38 cpu39 cpu64 cpu65 cpu fp-disabled fp-xcp-other cleanwin level level level a level d level e level int-vec itlb-miss dtlb-miss (...) Tabela 7 Statystyki niskopoziomowych zdarzeń dostępnych w narzędziu trapstat. Szczególną uwagę należy zwrócić na wartości itlb-miss i dtlb-miss (system Solaris/SPARC). ramię z głowicami jest pozycjonowane nad wybraną ścieżką z danymi. Teraz oczekujemy na obrócenie się talerza, do czasu kiedy właściwe dane znajda się pod ustawioną głowicą. Jeśli wszystko przebiegło bez problemów, następuje odczyt danych i ich transmisja do komputera. Ile cała operacja może trwać? Zwyczajnie policzmy. Transmisja żądania dostępu trwa nie więcej niż 0,1 0,2 µs. Pozycjonowanie głowicy, to czas opisywany w specyfikacjach technicznych dysków jako avg seek time. Oczywiście, nie wiemy gdzie aktualnie znajduje się głowica i jak daleko będzie musiała się przesunąć, więc wybranie wartości średniej daje bardzo dobre przybliżenie. Wartość średniego czasu przesunięcia (avg seek time) zależy od modelu dysku i waha się w okolicach 3 6 ms. Następnie, musimy poczekać aż talerz obróci się na wymaganą pozycję (rotation latency). Tutaj czas oczekiwania zależy od tego, jak szybko kręci się dysk i dla obecnie produkowanych dysków maksymalnie wynosi: 5400 RPM 11 ms (średnio 5,5 ms) 7200 RPM 8 ms (średnio 4 ms) RPM 4 ms (średnio 2 ms) Na zakończenie odczytujemy dane i transferujemy je do komputera, dla standardowego bloku filesystemu ext2/3 4KiB, trwa to kolejne kilkadziesiąt µs.

53 Wydajność i optymalizacja w systemach informatycznych 35 # trapstat -T 10 1 cpu m size itlb-miss %tim itsb-miss %tim dtlb-miss %tim dtsb-miss %tim %tim u 8k u 64k u 512k u 4m u 32m u 256m k 8k k 64k k 512k k 4m k 32m k 256m u 8k u 64k u 512k u 4m u 32m u 256m k 8k k 64k k 512k k 4m k 32m k 256m (...) u 8k u 64k u 512k u 4m u 32m u 256m k 8k k 64k k 512k k 4m k 32m k 256m ==========+===============================+===============================+==== ttl Tabela 8 Ponownie narzędzie trapstat (system Solaris/SPARC) i bardziej szczegółowe statystyki dotyczące TLB. W poniższym przypadku system obsługuje dwie wielkości stron pamięci 8KiB i 4MiB. Podsumujmy. Transfery, jako setki, czy nawet tysiące razy krótsze możemy spokojnie pominąć. Dla przykładowego dysku Hitachi Ultrastar 15K300 o parametrach: interfejs = 4Gbit/s FC, avg seek time = 3,4 ms, RPM = 15000, mamy średnio 5,4 ms. Ile takich operacji jesteśmy w stanie wykonać w ciągu sekundy, przy założeniu odczytywania za każdym razem innego, losowego bloku (taka sytuacja bardzo często

54 36 Radosław Korzeniewski # vmstat -p 1 memory page executable anonymous filesystem swap free re mf fr de sr epi epo epf api apo apf fpi fpo fpf Tabela 10 Szczegółowe statystyki dotyczące mechanizmu stronicowania, czyli rozbicie na elementy wartości pi oraz po. W szczególności statystyki fpi oraz fpo oznaczają aktywność dostępu za pomocą mmap. # sar -p SunOS borkos 5.10 Generic_ sun4u 01/01/ :00:00 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s 01:00: :00: :00: :00: :00: :00: :00: :00: :20: :40: :00: :20: :40: :00: :20: :40: :00: :20: Average Tabela 11 Solaris). Statystyki mechanizmu stronicowania dostępne w narzędziu sar (system występuje w przypadku baz danych)? Obliczamy i wychodzi 185 operacji. Dla przykładowego 4 KiB bloku filesystemu otrzymujemy zawrotną prędkość 740 KiB/s. Niewiele, a jak wygląda to dla dysku w moim laptopie: SAMSUNG HM060HI, SA- TA/150, avg seek time = 12 ms, RPM = 5400, po obliczeniach mamy: 57 operacji i 228 KiB/s fatalnie. Oczywiście, jest to tzw. najgorszy przypadek, kiedy odczytujemy za każdym razem inny blok na dysku, a i sama wielkość bloku nie jest zbyt duża. Ten

55 Wydajność i optymalizacja w systemach informatycznych 37 # sar -w SunOS borkos 5.10 Generic_ sun4u 01/01/ :00:00 swpin/s bswin/s swpot/s bswot/s pswch/s 01:00: :00: :00: :00: :00: :00: :00: :00: :20: :40: :00: :20: :40: :00: :20: :40: :00: :20: Tabela 12 Tym razem statystyki mechanizmu swapowania dostępne w narzędziu sar (system Solaris) najgorszy przypadek, jak już wspomniano wcześniej, wcale nie jest taki niemożliwy do osiągnięcia, taką charakterystykę ma wiele systemów bazodanowych. Co można zrobić, aby przyśpieszyć całą ta sytuację, w końcu specyfikacja producenta takiego Ultrastar 15K300 twierdzi, że jesteśmy w stanie wyciągnąć nawet 123 MB/s? Trzeba zapewnić dyskowi optymalne warunki pracy. Na początek, należy maksymalnie ograniczyć losowe odwołania do dysku, zastępując je dostępem sekwencyjnym. Następnie, należy komunikować się z dyskiem odpowiednio dużym blokiem 1MB lub większym. Na zakończenie, należy wykorzystać asynchroniczną komunikację z dyskiem. Komunikacja synchroniczna oznacza za każdym razem oczekiwanie na obrócenie się dysku do wymaganego sektora. Im szybciej kręci się dysk, tym krócej będziemy czekać. Ilość wykonywanych operacji wzrasta, ale to jeszcze nie maksimum możliwości. Komunikacja asynchroniczna z dyskiem możliwa jest, w przypadku kiedy dysk obsługuje kolejkowanie żądań (ang. command queuing). Taką funkcjonalność praktycznie od zawsze posiadały dyski SCSI. Dyski IDE/ATA doczekały się tego elementu niedawno. Funkcjonalność ta, była jedną z przyczyn dlaczego ówczesne dyski SCSI były znacznie wydajniejsze od dysków ATA. Komunikacja asynchroniczna ma jeszcze jedną zaletę. W przypadku, kiedy do dysku zostaną wysłane specyficznie ułożone żądania dostępu, np. sektor 0, sektor 1000, sektor 500. To odwołania takie mogą przez kontroler dysku zostać zoptymalizowane i w trakcie wędrówki głowicy sektory odczytane zostaną po

56 38 Radosław Korzeniewski kolei, a wysłane do komputera w innej kolejności niż system o nie poprosił. Współczesne systemy operacyjne zadanie to potrafią realizować po stronie modułu zwanego planistą operacji IO (ang. IO scheduler). Jeśli już przekonamy się, że nawet najszybsze obecnie dyski nie są wcale takie szybkie, jak się nam wydaje, zastanawiamy się w jaki sposób wydajność pamięci masowej możemy jednak zwiększyć? Do dnia dzisiejszego podstawową odpowiedzią jest zbudowanie macierzy RAID. Idea technologii RAID wykluła się pod koniec lat 80 XX w Berkeley. W obszarze przyśpieszenia wydajności idea jest prosta: Jeśli pojedynczy dysk jest niewystarczająco wydajny, to należy wziąć tych dysków więcej. Zapewnienie rozproszenia żądań dostępu uzyskamy poprzez naprzemienne odwoływanie się do kolejnych dysków w taki sposób, że co określoną ilość sektorów żądanie będzie trafiało na kolejny dysk, modulo ilość dostępnych dysków. W taki sposób powstał RAID0 zwany także stripe. Macierz typu RAID0 ma dwa podstawowe parametry: ilość dysków (kolumn, zwane także ang. stripe width) tworzących macierz oraz wielkość bloku przeplotu, tzw. stripe size. Ilość dysków oznacza wprost, ile żądań dostępu jesteśmy w stanie (potencjalnie) wykonać w tym samym czasie. Wielkość stripe size dobieramy do charakterystyki naszej aplikacji w taki sposób, aby potencjalnie jedna operacja mogła być rozbita na więcej niż jeden dysk, uzyskując dodatkowe przyśpieszenie obsługi. Niestety RAID0 nie zapewnia nam zabezpieczenia danych umiejscowionych na dyskach, więc w rzeczywistych, produkcyjnych systemach jest bardzo rzadko stosowany. Rozszerzeniem idei RAID0 ale z zabezpieczeniem danych jest RAID5 (striping z rozproszoną informacją sum kontrolnych) oraz RAID10 (stripe mirrorów) lub RAID01 (mirror stripe ów). Niestety zabezpieczenie danych kosztuje (pomijam straty pojemności), czasami nawet sporo. Jak to wygląda w obu przypadkach? W przypadku RAID10/01: odczyty analogiczna wydajność jak RAID0, chyba że stosujemy dodatkową optymalizację typu round-robin, wtedy powinniśmy mieć dodatkowe zwiększenie wydajności; zapisy przy klasycznej metodzie zapisu (sekwencyjna), osiągniemy dwukrotny spadek wydajności, w przypadku równoległej metody zapisu spadek powinien być niewielki, wręcz niezauważalny. W przypadku RAID5 sytuacja z odczytem jest analogiczna jak w przypadku RAID0 (pomijam wypadkowy dysk przeznaczony na sumy kontrolne), zapis natomiast składa się z dwóch operacji odczytu (dane i parzystość) oraz dwóch operacji zapisu. Mamy więc co najmniej dwukrotny spadek wydajności niż w przypadku RAID0 czy RAID10RR. Z tego powodu RAID5 uważany był do tej pory za znacznie wolniejszy od RAID10 i z tego powodu rzadko był wykorzystywany w systemach wysokowydajnych. Ostatnio jednak sytuacja w tym obszarze się mocno zmieniła. Zmiana związana była ze znaczącym wzrostem wydajności i możliwości kontrolerów w macierzach RAID. Inżynierowie projektujący takie kontrolery (a dokładniej programiści piszący do nich oprogramowanie), zauważyli, że w przypadku kiedy kontroler nazbiera wystarczająco dużo danych do zapisu na wolumen RAID5, to zamiast każdorazowo zapisywać pojedynczy blok i aktualizować sumę kontrolną, kontroler od razu zapisze cały pasek danych wraz z wyliczona sumą (zamiast odczytaną i zmodyfikowaną). Taka optymalizacja zaoszczędzi nam ogromnych ilości operacji odczytu poprzedzających dotychczasowe operacje zapisu. Wbrew pozorom taka sytuacja nie zdarza się rzadko. Dla przykładu, obliczmy: stripe size = 16KiB, ilość dysków w grupie = 4; daje nam to wielkość całego paska danych 48KiB. Wygenerowanie 48KiB IO nie jest problemem, dla przykładu ZFS posiada standardowy blok w rozmiarze 128KiB. Nawet jeśli system komputerowy nie jest w stanie generować większych operacji IO niż np. 8KiB (najpopularniejsza

57 Wydajność i optymalizacja w systemach informatycznych 39 wielkość bloku bazodanowego, dostęp surowy), to ze względu na istnienie pamięci cache kontrolera macierzy RAID, jest on w stanie skumulować kilka asynchronicznych odwołań w większą partię i wykonać optymalizację zapisu. Drugim aspektem wpływającym na dalszą poprawę wydajności mechanizmu RAID jest wprowadzenie nowego sposobu zarządzania dostępną przestrzenią dyskową w macierzach. Dotychczas projektowane macierze dawały administratorom bardzo ograniczone możliwości budowania grup raidowych ograniczone, bo ściśle trzymające się pomysłu sprzed prawie 20 lat. Tak więc administrator był w stanie zbudować sobie dowolnego RAID-a z prawie dowolnej ilości dysków. Musiał jednak wybierać pomiędzy elastycznością zarządzania zasobami a osiągana wydajnością. Budowane były więc grupy raidowe, ograniczone do kilku, może kilkunastu dysków. Grupa taka była następnie dzielona na plasterki (o minimalnej szerokości stripe width * stripe size) i każdy z nich był przydzielany do tego samego lub różnych systemów. Istniejący podział było bardzo trudno zmienić, a dalsza rozbudowa macierzy nie dawała oczekiwanego zwiększenia wydajności. W tym momencie pojawili się producenci macierzy, którzy całkowicie zmienili sposób w jakim macierz zarządza przestrzenią. W macierzach tych grupy raidowe składają się z prawie wszystkich dysków jakie posiada macierz (chyba że podzielimy ją sobie inaczej). Przestaje istnieć pojęcie stripe width, bo dane i sumy kontrolne są zapisywane po kolei na wszystkich dyskach. Podział wolumenów nie musi już zamykać się w wielokrotności paska raid, może kończyć się w dowolnym miejscu. Dało to możliwość maksymalnego rozpraszania zapisywanych danych po wszystkich dyskach w macierzy. Problem zbyt obciążonych grup raidowych praktycznie przestał istnieć. Jeśli natomiast ilość dysków w macierzy, ze względów wydajnościowych, jest niewystarczająca (sumaryczna ilość IOPS), to trywialna rozbudowa macierzy o kolejne dyski powoduje, w ogólności, natychmiastową poprawę wydajności. Z tego zdania wyciągnąć możemy jedną z prawidłowości, jaką rządzi się wydajność macierzy dyskowych: Im więcej dysków posiada macierz, tym więcej operacji jest w stanie wykonać. Prawidłowości tej nie zmienia montowanie coraz większych pamięci cache (sięgających już dziesiątek a nawet setek GiB) w samych macierzach. Prawidłowość tą potwierdza benchmark SPC-1, którego zestawienie przedstawia rysunek 1. Jeśli osiągana, w najlepszych i największych nawet macierzach, wydajność jest dla nas niewystarczająca, to pozostają nam twory w postaci macierzy krzemowych (ang. RAM Solid State Disk). Macierze takie w ogólności składają się ze specjalistycznego komputera posiadającego ogromną ilość pamięci RAM (setki, tysiące GiB), która to pamięć służy w prost jako pamięć masowa. W przeciwieństwie do zwykłych macierzy, posiadających duże pamięci cache, w macierzach krzemowych, podczas normalnej pracy, nigdy nie występuje potrzeba oczekiwania na odczytanie danych z dysków. Z tego powodu czas dostępu do takiej macierzy jest bliski szybkości pamięci RAM, a obsługa losowego dostępu nie różni się od dostępu sekwencyjnego. Macierze te mają jednak dwie wady. Po pierwsze, w przeliczeniu na 1GiB przestrzeni netto, są to jedne z najdroższych macierzy na rynku. Po drugie, wielkości macierzy są bardzo ograniczone i w obecnych czasach wykracza niewiele ponad pojedyncze TiB. Z tego powodu stosowanie tych macierzy ograniczone jest do specyficznych obszarów systemów informatycznych, np. Oracle RedoLog. W przypadku podsystemu IO podstawowymi narzędziami, które służą do weryfikacji statystyk są iostat oraz poznany wcześniej sar. Statystyki są wyświetlane z podziałem na każdy z dysków, a w przypadku systemu Linux także z podziałem

58 3A Radosław Korzeniewski Rys 1 Zestawienie wyników wydajności benchamarku SPC-1 z uwzględnieniem ilości dysków i ilości osiągniętych iops. (dzięki pracy i uprzejmości Mara na urządzenia LVM. Ze statystyk tych możemy się dowiedzieć, m.in. o ilości operacji IO obsłużonych przez dany dysk (r/s, w/s) oraz ilości danych przesłanych z/do danego dysku (kr/s, rkb/s, kw/s, wkb/s) z podziałem na odczyt i zapis. Kolejnymi bardzo ważnymi statystykami są średnie długości kolejek po stronie systemu operacyjnego (wait, avgqu-sz) i samego dysku (actv). W przypadku kiedy kolejka po stronie systemu operacyjnego będzie większa od zera, oznacza to że system operacyjny wysyła żądania szybciej niż dysk jest w stanie je przetworzyć. W przypadku systemu Linux bardzo ciekawe mogą być statystyki określone jako ilość scalonych żądań dostępu na poziomie urządzenia blokowego (rrqm/s oraz wrqm/s). Wartości te wraz ze wskaźnikiem avgrqsz pokazują jak możemy zmienić charakterystykę odwołań naszej aplikacji do dysków aby osiągnąć wzrost wydajności. Na zakończenie należy wspomnieć o statystykach związanych z czasem przetwarzania żądań do dysku, w tym: średni czas oczekiwania żądania w kolejce po stronie systemu operacyjnego (wsvc_t, await), średni czas przetwarzania żądania przez dysk (asvc_t, svctm) oraz procentowa utylizacja dysku (%busy, %util). Statystyka obciążenia dysku w przypadku podłączonych fizycznych dysków może mieć jeszcze jakiś sens, ale w przypadku dysków wystawionych z macierzy RAID sensu absolutnie nie ma i wskaźnik ten powinien być w tym przypadku ignorowany.

59 Wydajność i optymalizacja w systemach informatycznych 3B # iostat -dkx 5 Linux el5 (loara) 01/01/2009 Device: rrqm/s wrqm/s r/s w/s rkb/s wkb/s avgrq-sz avgqu-sz await svctm %util sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl sdm sdn sdo sdp (...) sdaa sdab sdac sdad sdae sdaf sdag sdah sdai sdaj (...) dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm dm Tabela 13 Przykładowe statystyki z narzędzia iostat (system Linux). Optymalizacja systemów informatycznych Proces optymalizacji wydajności (zwany także strojeniem lub ang. tuningiem), nigdy nie jest procesem szablonowym. Owszem, w każdym przypadku opiera się na analizie danych uzyskanych z tych samych, czy podobnych narzędzi, wyciąganiu wniosków oraz modyfikacji środowiska zgodnie z tymi wnioskami. Z tego powodu nie doczekaliśmy się i zapewne nigdy nie doczekamy automatycznych narzędzi do analizy wydajnościowej systemów. Proces ten, jak już zostało to wspomniane, w ogólności polegać będzie na analizie parametrów, statystyk i wskaźników pracy systemu, analizie i poszukiwaniu wąskich gardeł, które ograniczają osiągnięcie wymaganej wydajności, a następnie takiej modyfikacji systemu która wyeliminuje, lub zminimalizuje wpływ wąskiego gardła na osiąganą wydajność. Wymaganą modyfikacją systemu może być odpowiednia zmiana parametrów pracy systemu operacyjnego lub aplikacji, w tym ilość alokowanych przez system lub aplikację zasobów albo zmiana algorytmów realizacji zadania (poprawki w kodzie aplikacji). Wymagana modyfikacja,

60 3C Radosław Korzeniewski # iostat -xnzc 5 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device c c0t1d c0t0d c c1t a376287d c1t a376287d c c c3t d434344d c3t d434244d c3t d434144d c3t d433944d c3t d433844d c3t d453644d c3t d453935d c3t d453835d c3t d453735d c3t d453635d c3t d453535d c3t d453435d c3t d453335d c3t d453235d c3t d453135d c3t d453035d c3t d444639d c3t d444631d c3t d444544d c3t d444539d c3t d444444d c3t d444335d c3t d444144d c3t d444135d nfs1:/replika/datafile nfs2:/replika/data Tabela 14 Dla kontrastu statystyki z narzędzia iostat w systemie Solaris. Ciekawą opcją są statystyki zbiorcze dla całego kontrolera. może także oznaczać większe zmiany w środowisku, jak rozbudowa, czy rekonfiguracja sprzętu albo całkowita zmiana architektury rozwiązania. Podczas poszukiwania wąskich gardeł systemu zawsze wychodzi się od bardzo ogólnej analizy podstawowych parametrów pracy poszczególnych systemów. Weryfikuje się wskaźniki utylizacji procesorów, wielkość kolejek do dysków, dostępną pamięć, czy błędy na interfejsach sieciowych. Parametry te, przyrównuje się do wartości oczekiwanych dla danego typu systemu. Inne wartości będzie miało środowisko bazodanowe OLTP, inne aplikacja klasy DSS a jeszcze inne serwer plików NAS. W tym momencie, zazwyczaj, uwidacznia się obszar, w którym wąskie gardło powinno być poszukiwane. Rozpoczynają się bardziej szczegółowe analizy, weryfikowane są specyficzne dla danego obszaru wskaźniki. Niejednokrotnie na tym etapie, a czasem wcześniej, pojawia się potrzeba zebrania statystyk pracy systemu w dłuższym okresie danych historycznych. Wynika to często ze specyfiki pracy danego środowiska, kiedy dane zbierane podczas sesji interaktywnej nie wykazują problemów. Często też, szczególnie dla systemów o wsadowej charakterystyce pracy, informacja o wydajności przetwarzania dostępna jest po

61 Wydajność i optymalizacja w systemach informatycznych 3D zakończeniu zadań, trudno jest więc dokładnie określić kiedy system pracuje niewydajnie. Dużą ilość danych historycznych najlepiej analizuje się za pomocą wykresów. Odpowiednio dobrane wykresy mogą pokazać nam pojedyncze anomalie pracy systemu czy wyznaczyć trendy na przyszłość. Czasami także analiza szczegółowa nie przynosi oczekiwanych wyników, wtedy rozpoczynają się analizy debugingowe (polskie określenie analizy odpluskwiające jest w tym przypadku mocno nieprecyzyjne). Pomimo swojej nazwy, analizy te nie mają na celu znalezienia błędów w aplikacji czy systemie operacyjnym (chociaż często się to udaje), ale należą do analiz niskopoziomowych. Analizowane mogą być poszczególne sesje TCP, wzorce odwołań do dysków, czy mechanizmy alokacji pamięci przez system operacyjny, i wiele innych. Takie badania często wykazują anomalie, o które nigdy naszego systemu byśmy nie podejrzewali, często anomalie te finalnie okazują się błędami implementacyjnymi i mogą być rozwiązane tylko poprzez poprawki w kodzie. Kiedy uda nam się bardzo dokładnie określić co jest wąskim gardłem ograniczającym naszą wydajność, przychodzi czas na najtrudniejszą część naszej pracy, modyfikacji środowiska. W tym miejscu należy wspomnieć o bardzo ważnej zasadzie optymalizacji zgodnie z którą aż 80% możliwego do osiągnięcia wzrostu wydajności zależy od aplikacji a tylko 20% od infrastruktury. Druga z ważnych zasad optymalizacji wskazuje, że poprawa wydajności mniejsza niż 15% może zostać niezauważona przez użytkowników interaktywnych. Zasady te, nie muszą być wyrocznią w danym przypadku, ale wynikają z doświadczeń administratorów na całym świecie, realizujących prace optymalizacyjne systemów informatycznych. Tłumacząc na nasz język: więcej można osiągnąć poprawiając aplikację poprzez zmianę algorytmów pracy, ograniczenie wywołań systemowych, zmianę zapytań do bazy danych, itp. niż zmieniając parametry pracy systemu informatycznego czy kupując droższe serwery. Z drugiej strony, jeśli nasze optymalizacje dały mniej niż 15% przyśpieszenia, to nie oczekujmy pochwały dyrektora, więc po co się przemęczać? Ale wracając do naszych modyfikacji, dla określonego wąskiego gardła, zawsze będziemy mieli wiele możliwości poprawy. W związku z tym powinniśmy wybrać to które będzie dawało największy zysk wydajnościowy. Oczywiście, nasz dyrektor nie musi podzielać tego zdania, szczególnie, kiedy będzie to najdroższe i najtrudniejsze we wdrożeniu rozwiązanie. Często, zamiast wybierać jedno najlepsze rozwiązanie, poprzestaniemy na wdrożeniu kilku z różnych obszarów. Jesteśmy już po dwóch etapach optymalizacji systemu. Teraz nadszedł czas na trzeci, czyli weryfikację osiągniętego rezultatu. Po pierwsze należy zweryfikować, czy system osiągnął wymaganą wydajność. Jeśli tak, to zawieszamy nasze dalsze prace do następnego razu, który wcześniej czy później nastąpi. Jeśli jednak nasze dotychczasowe prace nie dały akceptowalnych wyników, to proces rozpoczynamy od nowa, tym razem robiąc głębszą analizę (np. analizę debugingową, jeśli nie była wcześniej robiona). Takich iteracji możemy zrobić sporo, a wszystko zależy od wielkości stopniowych poprawek jakie dokonywaliśmy w każdym z kroków. Podsumowanie Zapewne większość czytających ten referat spodziewało się przedstawienia Świętego Grala optymalizacji wydajnościowej, recepty, która uleczy wszystkie za wolno działające systemy. Takiej recepty jaką otrzymuje się od lekarza, gdy mamy gorączkę

62 3E Radosław Korzeniewski a kaszel nam doskwiera, coś co po tygodniu stosowania sprawi, że ponownie czujemy się lepiej. Osoby te zapewne dziwią się, że właśnie doszliśmy do podsumowania. Jakiego podsumowania!!!? krzyczą zapewne, nie dowierzając powierzchowności z jakim temat został przedstawiony. W pewnym sensie mają rację temat wydajności i optymalizacji został w tym referacie tylko liźnięty, to dopiero początek. Na świecie nie jedną książkę na ten temat napisano, nie jeden artykuł, nie jeden wykład chociaż założę się że ówczesne Harkeliny miały i tak większe nakłady. Takie same odczucia miałem i ja, kiedy kończąc kolejne szkolenie z optymalizacji i tuningu kolejnego systemu operacyjnego, uzmysławiałem sobie, że tak naprawdę, to ja już to wszystko kiedyś wiedziałem, że opisywane na wykładach, szkoleniach czy w książkach rzeczy są więcej niż trywialne wiedząc jak to wszystko działa sami dochodzimy do tego, dlaczego działa dobrze lub źle. Jednak każde z tych spotkań dawało mi najważniejszą rzecz, za każdym razem dowiadywałem się czegoś nowego, poszerzałem swój kąt widzenia na systemy informatyczne. Z każdym poznanym nowym narzędziem, czy nowym sposobem interpretacji danych, mgła zakrywająca do tej pory te systemy zaczynała powoli opadać. Mimo wielu lat doświadczenia widzę, że w dalszym ciągu mgła nie opadła całkowicie, może w pewnych miejscach są lokalne przejaśnienia, ale poszerzenie kąta patrzenia pozwala także odkryć, że horyzont jest dalej, niż wcześniej przypuszczałem. Przesuwanie się horyzontu, to nowe technologie i funkcjonalności, to także nowa skala działania. Każda z nich niesie swój niepowtarzany folklor, do którego trzeba się przyzwyczaić i który trzeba w końcu poznać. Czy Święty Gral optymalizacji wydajnościowej istnieje? Jak powiedziała jedna z cenionych przeze mnie osób Jeśli istniała by jedna, uniwersalna metoda na poprawę wydajności, to producenci systemów informatycznych już dawno by ją stosowali i kasowali za to niemałe pieniądze. Świat jest jednak inny. Optymalizacja do doświadczenie, wiedza i umiejętność analizy faktów. Pamiętając, że każdy przypadek jest inny, a nad każdym przypadkiem trzeba się pochylić, nie pozostaje nam nic innego jak ochoczo zabrać się do weryfikacji naszej wiedzy. Rys 2 loadavg=3

63 Bezpieczeństwo portali społecznościowych w ujęciu robaków Web 2.0 Borys Łącki Wstęp Portale społecznościowe zadomowiły się w naszej rzeczywistości już na dobre. Nasi znajomi nieustannie próbują skontaktować się z nami z ich pomocą. Często okazuje się, że odnajdują nas bliscy, z którymi nie mieliśmy kontaktu od bardzo dawna. Wiele wspaniałych wspomnień, emocjonujące nowe znajomości oraz wiele innych atrakcji, których dostarczają nam portale społecznościowe sprawia, że ilość użytkowników tego typu usługi stale rośnie. Pomijając aspekty związane z bezpieczeństwem danych identyfikujących użytkowników takich portali, warto zastanowić się nad wykorzystaniem tak dużej liczby użytkowników w trochę innym niż przewidywali twórcy witryny celu. Robak komputerowy to w skrócie samoreplikujący się program komputerowy. Zazwyczaj, gdy myślimy o robaku komputerowym naszym pierwszym skojarzeniem będzie rodzaj złośliwego oprogramowania przemieszczającego się pomiędzy kolejnymi komputerami. Przykładem najpopularniejszych robaków tego typu może być np. robak Blaster czy Sasser obydwa wykorzystujące błędy systemu operacyjnego Windows. Szkodliwa aplikacja po przejęciu systemu niezabezpieczonego użytkownika, próbuje atakować inne komputery podłączone do sieci w celu zarażenia swoją kopią jak największej ilości maszyn. Jednak mając na myśli robaki ery Web 2.0 musimy uzmysłowić sobie, iż ten typ robaka wykorzystuje wyłącznie interakcję użytkownika odwiedzającego strony WWW i przenosi się w obrębie atakowanych serwerów za pomocą przeglądarki stron WWW. Do tego zadania wykorzystywane są najczęściej błędy takie jak XSS (Cross Site Scripting) oraz CSRF (Cross Site Request Forgery).

64 40 Borys Łącki XSS/CSRF XSS (Cross-Site Scripting) jest to błąd polegający na wstrzyknięciu złośliwej zawartości, która doprowadza do uruchomienia kodu (np. JavaScript, HTML) w przestrzeni użytkownika (zwyczajowo poprzez interpreter kodu przeglądarki stron WWW), czyli z ograniczonymi uprawnieniami. Dodany kod dołączany jest do treści zaufanej witryny i w jej kontekście się wykonuje. Najczęściej błąd ten wykorzystywany jest do do kradzieży danych typu Cookies lub wymuszeniu na użytkowniku odwiedzenia konkretnego adresu URL. CSRF (Cross Site Request Forgery) opiera się przekierowaniu użytkownika posiadającego określone uprawnienia w serwisie internetowym do określonego adresu URL, czego wynikiem staje się wykonanie zamierzonej i specyficznej akcji z prawami użytkownika ofiary. Do przeprowadzenia ataku wykorzystującego błąd CSRF najczęściej używany jest znacznik HTML <IMG>, gdyż przeglądarka stron WWW automatycznie wczytuje adresy URL oznaczone tym tagiem. Ponadto mechanizmy zagnieżdżonej ramki oraz kodu JavaScript umożliwiają przekierowanie użytkownika w podobny sposób. Robak (XSS/CSRF) W przypadku robaków WWW wykorzystujących błędy XSS/CSRF najprostszym przykładem schematu działania takiego szkodnika będzie sytuacja, w której intruz zapisuje w opisie swojego profilu na portalu społecznościowym złośliwy kod XSS. Niczego nieświadomy inny zalogowany do serwisu użytkownik portalu (ofiara), odwiedzając stronę z opisem profilu intruza automatycznie zostaje zarażony złośliwym kodem, w taki sposób, iż jego przeglądarka stron WWW pobiera ów złośliwy kod, a następnie umieszcza go we własnym opisie profilu (czyli w opisie ofiary). W ten sposób, jeśli kolejny zalogowany do serwisu społecznościowego użytkownik odwiedzi profil intruza lub profil pierwszej ofiary intruza, ponownie dojdzie do zakażenia kolejnego profilu. Intruz tworząc robaka opartego o taką zasadę działania może wykorzystać dodatkowy adres URL do kontrolowania zawartości złośliwego kodu. Dzięki temu uzyskuje on kontrolę nad wykonywanymi przez ofiary poleceniami. XSS Statystyki Jak wykazują statystyki błędy typu XSS są najczęściej pojawiającymi się błędami związanymi z szeroko pojętym bezpieczeństwem aplikacji WWW. Podczas zautomatyzowanych badań firma WhiteSecurity 1 wykazała, iż ponad 67% testowanych serwisów było podatnych na tego typu ataki. Podobnie, przeglądając bazę znanych luk w zabezpieczeniach CVE 2, można zauważyć, iż w roku 2008 błędy XSS stanowiły większość. Na przestrzeni ostatniego roku, mnie i moim współpracownikom (i nie tylko nam :), z powodzeniem udało się odnaleźć błędy typu XSS w największych polskich portalach aukcyjnych, bankowych i społecznościowych

65 Bezpieczeństwo portali społecznościowych Samy Worm Opisując robaki internetowe w portalach społecznościowych należy wspomnieć o najsłynniejszym przypadku zwanym Samy Worm. 3 W roku 2005 Samy Kamkar (nastolatek) postanowił, iż spróbuje obejść zabezpieczenia sprawdzające poprawność wprowadzanych danych przez użytkowników, portalu społecznościowego MySpace.com. Głównym celem takiego działania była chęć stworzenia profilu o mocno oryginalnym wyglądzie, a co za tym idzie, zdobycia popularności i uznania wśród odwiedzających portal (docelowo nastoletnich dziewczyn). Obchodząc poszczególne warstwy systemu zabezpieczeń Samy zdał sobie sprawę, że może pokusić się o napisanie samoreplikującego się robaka, który w założeniu będzie działał w taki sposób jak opisywany dwa akapity wcześniej. Dodatkowym aspektem (poza automatycznym infekowaniem profilów innych użytkowników) było dopisanie do opisu ofiary tekstu: but most of all, samy is my hero, co znacząco wpłynęło na skuteczność całej akcji. Po pierwszych 13 godzinach Samy Worm zainfekował 6373 profile. Usatysfakcjonowany Samy postanowił odpocząć i przespał 5 następnych godzin, zupełnie nieświadomy, że jego robak w postępie geometrycznym rozprzestrzenia się pomiędzy kolejnymi użytkownikami portalu MySpace. Po 18 godzinach od umieszczenia złośliwego kodu w swoim profilu, robak zebrał żniwo w postaci ponad 1 miliona zainfekowanych kont użytkowników. Było to 10% wszystkich użytkowników zarejestrowanych w serwisie. Jak się okazało po przekroczeniu magicznej bariery 1 miliona ofiar, system MySpace został całkowicie wyłączony przez pracowników firmy, celem usunięcia złośliwych danych z opisów użytkowników oraz usprawnienia filtrów zabezpieczających. Podobne robaki lecz już na mniejszą skalę atakowały użytkowników największych portali społecznościowych (Yahoo, Orkut, hi5, badoo) 4. Nasza-Klasa.pl XSS Zastanawiając się nad metodą umożliwiającą zbadanie jak szybko w dzisiejszych czasach mogłaby rozprzestrzeniać się podobna epidemia, dokonałem następujących testów. W pierwszej kolejności został odkryty błąd XSS w portalu Nasza-Klasa.pl umożliwiający stworzenie robaka. Następnie przez okres 1 miesiąca zapisywane były dane dotyczące Aktywnych Znajomych w portalu społecznościowym (w odstępach 5 minutowych) dla mojego profilu. Okazało się, że z 291 Znajomych w przeciągu miesiąca osób zalogowało się przynajmniej raz do serwisu, a średni czas spędzony jako osoba aktywna przekroczył 21 godzin miesięcznie (należy pamiętać o różnicach realnego aktywnego czasu korzystania z portalu, a wynikami badania, które to z uwagi na niedokładność funkcjonalności w portalu mogą różnić się o kilkanaście minut per logowanie). Każdego dnia prawie 1/3 wszystkich moich znajomych logowała się do serwisu choćby na kilka minut, co oznacza, że robak wykorzystujący portale społecznościowe mógłby stać się realnym i poważnym zagrożeniem dla innych użytkowników sieci

66 42 Borys Łącki Wykop.pl CSRF Odmienną metodologię, ale podobne wnioski charakteryzowały badanie w serwisie społecznościowym Wykop.pl. Do serwisu została dodana strona internetowa zawierająca interesującą internautów treść, ukazującą film nakręcony podczas oficjalnej premiery Potężnego Indeksowego Wyświetlacza Oknowego w wersji drugiej. Wyświetlacz ten charakteryzował się tym, iż poszczególne okna jednego z akademików Politechniki Wrocławskiej odpowiadały pojedynczym pikselom. Ponadto została dodana treść reklamująca serwis która z założenia miała nie zainteresować użytkowników serwisu Wykop. Film prezentujący ogromny wyświetlacz został odebrany przez użytkowników bardzo pozytywnie (zgodnie z założeniem). Wykorzystując błąd CSRF udało nam się uzyskać następujący efekt: każdorazowo odwiedzający (zalogowany do serwisu Wykop.pl) stronę z filmem ukazującym PIWO2, wykopywał czyli polecał stronę opisującą pajacyk.pl. Podobnie w sytuacji gdy użytkownik odwiedził stronę zachęcającą do wizyty na portalu pajacyk.pl wykopywał naszą stronę reklamująca film z PIWO2. Dodatkowo każda z dwóch podstron automatycznie wykopywała samą siebie. Dzięki temu udało nam się doprowadzić do sytuacji, w której użytkownicy portalu wykop.pl nieświadomie wykopali wiadomość na temat strony pajacyk.pl. W godzinach nocnych (02:00-07:00) odnotowany przyrost utrzymywał się na średnim poziomie, by w okolicach godziny 7 rano drastycznie wzrosnąć. Przez następne 2 godziny ilość wykopujących stronę z serwisem pajacyk.pl rosła w równie zastraszającym tempie. Warto nadmienić, iż w przypadku obu badanych serwisów społecznościowych, współpraca, a następnie naprawa odnalezionych błędów przebiegała bardzo sprawnie i profesjonalnie, co cieszy szczególnie i pokazuje, że firmy poważnie traktujące swoich użytkowników, równie poważnie podchodzą do ich bezpieczeństwa. Podsumowanie Sposobów na walkę z błędami w aplikacjach WWW jest wiele, lecz najważniejszą sprawą jest, by zdać sobie sprawę z nadchodzących zagrożeń. Do najpopularniejszych metod pozytywnie wpływających na bezpieczeństwo należą m.in.: szczegółowa kontrola danych wejściowych i wyjściowych, hardening konfiguracji usług serwerowych oraz aktualizacja oprogramowania po stronie klienta. Informacje o robakach atakujących portale społecznościowe pojawiają się w mediach często i wraz z nieuchronnym rozwojem technologii WWW będą gościć na naszych ekranach coraz częściej. Wykorzystanie tego typu aplikacji do masowej manipulacji treścią, uzyskania dostępu do poufnych danych, ataków DDoS, spamowania lub infekcji systemów użytkowników końcowych powoli stanie się obiektem zainteresowań cyberprzestępców. Należy uświadomić sobie, iż wraz z niesamowitym przyrostem liczby użytkowników portali społecznościowych, musimy zatroszczyć się także o ich odpowiednie zabezpieczenie. A wszystko to po to by w czasach nadchodzących czasów Web 6.0 mogło nam się żyć jeszcze spokojniej i przyjemniej :]

67 Garnkiem miodu w zombie detekcja, analiza, dns-blackholing na przykładzie systemu HoneyPot nepenthes Borys Łącki Obserwując trendy ostatnich kilkunastu miesięcy oraz zachowanie organizacji i firm zajmujących się zarabianiem milionów dolarów na nielegalnej działalności w sieci, możemy dojść do zaskakującego jednakże prawdziwego i wzbudzającego grozę wniosku: Aktualnie całościowe bezpieczeństwo sieci internet jest mocno zagrożone, a obecnie stosowane środki nie umożliwiają nam całkowitej eliminacji źródła ataków. Z uwagi na to, iż cyberprzestępstwami zajmują się zorganizowane grupy przestępcze, musimy zrozumieć, że poznając zasady ich działania, uzyskujemy możliwość skutecznego reagowania na zbliżające się zagrożenia. W chwili obecnej zasadnicza większość poważnych incydentów wywodzi się bezpośrednio z zarządzanych przez przestępców sieci botnet. Botnet teoria Botnet to setki tysięcy komputerów zainfekowanych złośliwym oprogramowaniem umożliwiającym całkowitą kontrolę nad przejętym systemem. Zarażony komputer staje się częścią większej sieci maszyn słuchających rozkazów nadchodzących z serwerów zarządzających (ang. Command&Control C&C), przy jednoczesnym wykonywaniu poleceń legalnego właściciela. Charakterystyczną cechą botnetu jest to, że stara się on rozprzestrzeniać w celu przejęcia jak największej ilości urządzeń. Skanowanie sieci w poszukiwaniu podatności na ataki (znane oraz nie, czyli 0-day), spam zachęcający do instalacji złośliwego oprogramowania, wiadomości wysyłane za pomocą komunikatorów to tylko niektóre metody wykorzystywane przez twórców sieci botnet.

68 44 Borys Łącki Topologie sieci botnet Wyróżniamy trzy podstawowe topologie. Podstawowa i najczęściej spotykana scentralizowana oparta o model klient serwer. To boty łączą się do serwera zarządzającego (C&C) i wykonują przekazane im komendy. Z uwagi na prostotę i możliwość zablokowania serwera C&C, metoda ta zostaje skutecznie wypierana przez topologię P2P, znaną głównie z programów do wymiany danych pomiędzy użytkownikami. Jest ona z powodzeniem wykorzystywana przez przestępców od kilku lat. Dzięki bardziej zaawansowanej budowie i braku scentralizowanych serwerów, eksploracja czy dezaktywacja takiej sieci jest mocno utrudniona. Dlatego też największe sieci przejętych komputerów komunikują się obecnie w ten sposób. Na koniec należy nadmienić o topologii przyszłości, aktualnie nie wykorzystywanej (a przynajmniej nie został odkryty żaden twór korzystający wyłącznie z takich metod komunikacji). Zaprzęgająca na swój użytek wszelkie usługi wykorzystywane przez użytkowników końcowych, a więc wyszukiwarki internetowe, portale społecznościowe, grupy dyskusyjne, wiadomości itp. A wszystko po to, aby jeszcze bardziej skomplikować system komunikacyjny, a co za tym idzie znacząco utrudnić wykrycie i dezaktywację sieci botnet. Wykorzystanie sieci botnet Należałoby zastanowić się do czego może zostać wykorzystana sieć złożona z kilkuset tysięcy komputerów, nad którymi mamy kontrolę. Oczywiście w pierwszej kolejności na myśl przychodzą projekty typu lecz nie należy zapominać, że w dzisiejszych czasach sieci botnet służą przede wszystkim przestępcom i przede wszystkim do zarabiania pieniędzy. Rozsyłanie niechcianej poczty (spam), zmasowane ataki sieciowe (wymuszenia), kradzież środków finansowych (phishing), kradzieże tożsamości, dokumentów itp. to główne źródła zysku, z których czerpią zarządzający sieciami botnet. Milionowe przychody, łatwy zarobek oraz zainteresowani takimi usługami klienci sprawiają, że czarny rynek kwitnie i ma się z roku na rok coraz lepiej. Bezpieczeństwo użytkowników Mimo rosnącej świadomości końcowego użytkownika 88% internautów musimy zdać sobie sprawę, że rośnie także zaangażowanie przestępców w wymyślanie coraz to skutecz- posiada regularnie aktualizowany niejszych sposobów na przejęcie komputera użytkownika. Dziś regularnie aktualizowane systemy anty- program antywirusowy. wirusowe już nie wystarczają. Masa coraz to bardziej specjalistycznego oprogramowania mającego za zadanie ochraniać system przed atakami wszelkiej maści Badanie CBOS, sprawiają, że użytkownik czuje się coraz bardziej osaczony i zniewolony zagrożeniami czyhającymi na niego w sieci. Niestety jak pokazują badania, skuteczność systemów antywirusowych pozostawia wiele do życzenia, a wykrywalność nowych próbek kształtuje się na niezadowalającym poziomie (< 15%).

69 Garnkiem miodu w zombie Atakowani jesteśmy z każdej strony (internetowej :) oraz na wszystkie możliwe sposoby. Popularne niegdyś stwier- (pierwsze 48 godzin od czasu Błędy w Google chrome dzenie, że używamy alternatywnej czyli bezpiecznej przeglądarki stron WWW Handler Crash, SaveAs publikacji przeglądarki): URL utraciło rację bytu. Błędy umożliwiające stack-based overflow, uruchomienie złośliwego kodu po odwiedzeniu odpowiednio spreparowanej stro- Malicious link DoS, Inspect Automatic File Download, ny WWW, odkryte zostały w każdej nawet Element DoS średnio popularnej przeglądarce WWW i wciąż odnajdywane są nowe. W dobie zmasowanych ataków podmieniających witryny internetowe, nie możemy już twierdzić, że odwiedzamy wyłącznie zaufane strony WWW. Nawet wiadomość pochodząca z zaufanego źródła, może stać się przyczyną naszej zguby. Wykresy organizacji zajmujących się agregowaniem danych dotyczących sieci botnet, jasno wykazują, że ilość za- podmienionych stron Ponad rażonych systemów zatrważająco rośnie. (< 24 godziny) Także rozmiary sieci botnet dochodzące do kilku milionów komputerów sprawiają, że należy poważniej przyjrzeć się problemowi. Aktualnie, na każdej konferencji związanej z bezpieczeństwem, są poruszane zagadnienia związane z sieciami typu botnet. Narzędzia Cena za rozesłanie spamu: wiadomości $ wiadomości dziennie 600 $ wiadomości ICQ 150 $ 1 wiadomość SMS 0.2 $ Cena za DDoS: 1 godzina $ 1 dzień 100 $ > 1 dzień 200 $ 10 minut free Co ciekawe aby zostać początkującym twórcą sieci botnet, nie musimy posiadać tajemnej wiedzy przeznaczonej wyłącznie dla wąskiego grona specjalistów. Już za kilkadziesiąt dolarów 1 możemy zakupić oprogramowanie, które udostępni nam kontrolę nad siecią botnet, wykonanie masowego spammingu lub ataku sieciowego. W zależności od naszego zaangażowania oraz zasobności portfela, na czarnym rynku możemy zamówić specjalne wersje złośliwego oprogramowania wykonujące określone przez nas zadania. Większość zakupionych narzędzi posiada wygodne (czytaj: klikane) interfejsy użytkownika, a samo korzystanie z nich nie nastręcza większych trudności nawet początkującemu użytkownikowi komputera. W razie problemów ze zdobyciem Niestety, organizatorom Pingwinariów nie udało się zdobyć specjalnej zniżki dla uczestników. 1 Pracujemy nad tym. [przyp. red.]

70 46 Borys Łącki odpowiednich danych możemy dokonać zakupów numerów kart kredytowych, dokumentów tożsamości czy coraz popularniejszych kont telefonii VoIP. Wysłanie 1 miliona wiadomości typu spam kosztuje obecnie kilka dolarów, a za kilkaset dolarów możemy za pomocą rozproszonego ataku sieciowego doprowadzić do blokady usług wielu instytucji czy firm. Omijanie testów CAPTCHA czy ukrywanie naszego oprogramowania przed skanerami antywirusowymi to kolejne usługi wychodzące zainteresowanym naprzeciw. Detekcja Nie zapominając o tym, że sieci którymi administrujemy, także mogą stać się celem ale i źródłem ataku, należy dołożyć wszelkich starań aby zminimalizować możliwy impakt. Detekcja złośliwego oprogramowania w sieci może opierać się na kilku metodach. Boty podczas prób poszukiwania nowych ofiar, masowo skanują sieć w celu wykrycia jak największej ilości podatnych na atak maszyn. W związku z tym analiza wszelkiej maści nadmiarowych i odbiegających od standardowych pakietów sieciowych, może pomóc nam we wczesnym wykryciu intruzów w naszej sieci. Dzięki bardziej wnikliwej analizie wyższych warstw sieciowych możliwa jest detekcja zainfekowanych komputerów już w bardzo wczesnym stadium ich rozwoju, a co za tym idzie zmniejszenie szkód wyrządzonych przez zainfekowane systemy. Warto pamiętać także o podstawowej, zazwyczaj nie analizowanej przez administratorów sieci właściwości określającej wrogą działalność. Mianowicie o wysyłaniu dużej ilości niechcianej poczty z komputerów podłączonych do zarządzanej sieci. Jest to ewidentnie znak, że system został podłączony do sieci botnet i jest wykorzystywany do rozsyłania spamu co w bardzo niedalekiej przyszłości może objawić się także dodatkowymi działaniami takimi jak choćby udział w ataku sieciowym (jako atakujący). Zwracam w tym miejscu szczególną uwagę na bardzo prosty acz interesujący skrypt, wykorzystujący do swojego działania język skryptowy bash oraz aplikację ngrep, która analizuje ilość wysyłanych wiadomości z komputerów w naszej sieci i na podstawie ilości docelowych serwerów pocztowych oraz wartości nagłówka mail from skutecznie wykrywa spamujące komputery. Skrypt znajduje się pod adresem: /files/spamdetector.sh HoneyPot nepenthes Bardziej skomplikowaną i interesującą metodą zdobywania informacji zarówno o atakujących jak i atakowanych jest wykorzystanie oprogramowania HoneyPot. Systemy HoneyPot (ang. beczka miodu) są to aplikacje lub specjalnie przygotowane systemy operacyjne, skonstruowane w taki sposób aby udając prawdziwy i co najważniejsze podatny na atak system operacyjny, doprowadzić do złapania w pułapkę atakującej zawartości. Wykorzystywane przez nas oprogramowanie to oparty o model otwartego oprogramowania HoneyPot nepenthes Dostępny na platformy Linuksowe oraz BSD umożliwia emulowanie usług, które zostają zaatakowane przez złośliwy kod. Tak uzyskany złośliwy kod, może następnie zostać przeanalizowany przez aplikacje typu SandBox czyli uruchamiany w specjalnym środowisku system operacyjny, rejestrujący wszystkie możliwe zmiany (zapis/odczyt

71 Garnkiem miodu w zombie Wykres 1 Grudzień 2008 Godzina 17.xx: 4173 ataki danych z dysków, zmiany w rejestrze, połączenia sieciowe) występujące od momentu uruchomienia złośliwego oprogramowania. Całość procesu można zautomatyzować w taki sposób, że przejęte próbki zostają wysłane do jednego z darmowych Sand- Boxów, a do nas trafia już gotowy raport z poczynań szkodliwej aplikacji. Dzięki temu, jesteśmy w stanie przeanalizować w bezpieczny sposób działanie poszczególnych botów. Nepenthes może także działać (jak to ma miejsce w naszym przypadku) jako część większej sieci detekcji. W naszą działalność zaangażowane jest grono znajomych z całej Polski i dzięki temu możemy uzyskać pełniejszy obraz pozyskanych w ten sposób danych. Statystyki Podsumowując 2 letni okres działalności naszej sieci detekcji złośliwego oprogramowania warto podać dane statystyczne. Od lutego 2007 roku nasze systemy HoneyPot zostały zaatakowane ponad trzy i pół miliona razy, co daje średnio 3.57 ataku na minutę. W obecnej fazie rozwoju nasz projekt posiada adresów IP podłączonych do sieci wykrywającej intruzów. Zostaliśmy zaatakowani z unikatowych adresów IP (137 krajów). Najczęściej ataki pochodziły z Wielkiej Brytanii, Polski, Niemiec, Włoch i Francji. Do naszej bazy danych trafiło sztuk różnego złośliwego oprogramowania. Najbardziej popularny adres IP z naszych klas adresowych był atakowany razy, natomiast najbardziej aktywny atakujący próbował przejąć nasze systemy razy! DNS-blackholing Z zebranych próbek wyodrębniliśmy 489 domen internetowych wykorzystywanych jako serwer zarządzający (C&C). Z uwagi na fakt, że większość złośliwego oprogramo-

72 48 Borys Łącki /etc/bind/named.conf główny konfig dnsblackholing.conf plik domeny zone "powiekszswojinteres.pl" IN { $TTL 15m type IN SOA ns1.domena.pl. admin.domena.pl. ( file dnsblackholing.conf ; serial }; 4h ; refresh 30m ; retry 14d ; expire 15m ; negative_ttl IN NS IN NS IN A IN A Konfiguracja 1 Bind9 submit-postgres { server " "; // use ips,domains/hostnames won t work! user "user"; // db user pass "hasłord"; // db pass db "mwcollect"; // which database to use options ""; // not sure if options already work spooldir "/var/spool/nepenthes/submitpostgres/"; }; Konfiguracja 2 nepenthes z bazą PostgreSQL wania korzysta z usługi DNS i rozpoznaje swój serwer C&C za pomocą nazwy domenowej, warto skorzystać z mechanizmu DNS-blackholingu czyli blokowania możliwości podłączenia bota do centrali poprzez brak możliwości zamiany adresu domenowego na prawidłowy adres IP. W tym celu należy skonfigurować serwer DNS, z którego korzystają nasi użytkownicy w taki sposób aby działał jako master dla konkretnej domeny (domeny blokowanej). W przypadku gdy użytkownicy naszej sieci korzystają z własnych zewnętrznych serwerów DNS należy wymusić korzystanie z naszego serwera DNS obsługującego DNS-blackholing, za pomocą odpowiednich dyrektyw systemu firewall. Dzięki uzyskaniu kontroli nad adresem IP, do którego podłączać się będą przekierowane boty, uzyskujemy możliwość szczegółowej analizy protokołów komunikacyjnych, aby jako rezultat końcowy usunąć złośliwe oprogramowanie poprzez mechanizmy zdalnej aktualizacji szkodliwej aplikacji. Warto w tym miejscu nadmienić, że tego typu ingerencja w system użytkownika może mieć negatywne konsekwencje prawne i etyczne. Korzystając z systemu DNS-blackholing jesteśmy w stanie drastycznie podnieść poziom bezpieczeństwa użytkowników naszej sieci.

73 Garnkiem miodu w zombie submit-norman { // this is the adress where norman sandbox reports will be sent urls ("http://www.norman.com/microsites/nsic/submit/special/45773/", "http://luigi.informatik.uni-mannheim.de/submit.php?action=verify"); }; Konfiguracja 3 Wysyłanie wyników do Sandboxa Normana Metoda ta jest o wiele skuteczniejsza od blokady w systemie firewall często zmieniających się adresów IP. Dodatkowo interesujące jest to, że nawet systemy, które zostały świeżo zainfekowane nie mają możliwości podłączenia się do systemu centralnego i wykonywania poleceń osoby zarządzającej. Niesamowity rozwój i ekspansja wszelkich form komunikacji na przestrzeni ostatnich kilkunastu lat sprawiły, iż w dniu dzisiejszym nie wyobrażamy sobie świata bez wszechobecnych sieci łączących wszystko i wszędzie, pod każdą postacią i o każdej porze dnia i nocy. Z pomocą technologii pracujemy, uczymy się i bawimy, jednocześnie zapominając, że wszystkie dobrodziejstwa, które przynosi nam sieć internet, narażone są (a tym samym narażeni są sami jej użytkownicy) na niebezpieczeństwa związane z różnorodnymi rodzajami ataków. Pomimo wielu lat pracy, zaangażowania tysięcy ludzi i setek milionów dolarów wydanych na ochronę systemów informatycznych, nadal wiele aspektów związanych z bezpieczeństwem pozostaje pod dużym znakiem zapytania, a nadchodzące lata pokażą czy, jeśli nie wojnę to choć kolejną bitwę będziemy w stanie wygrać...

74

75 Terroryzm i cyberterroryzm Michał Młotek Ministerstwo Spraw Wewnętrznych i Administracji Departament Infrastruktury Teleinformatycznej Wydział Bezpieczeństwa Systemów i Infrastruktury Teleinformatycznej Nadszedł XXI wiek. Nie dojeżdżamy co prawda helikopterami do pracy, nie żywimy się pigułkami, nie latamy na urlop na Marsa czy nawet Księżyc. Mamy jednak Sieć. Internet. Medium dostępu do informacji, o jakim jeszcze do niedawna można było jedynie marzyć. Jednak każda rzecz ma swoje dwie strony tę jasną i tę ciemną. Przypatrzmy się wobec tego tej mrocznej stronie i o jej wpływie na nas wszystkich. Zanim zacznie się mówić o jakichkolwiek sprawach związanych z nowymi technologiami (do jakich niewątpliwie należy cała działka IT) koniecznie trzeba mieć ustalony słownik pojęciowy. Bez tego każdy będzie mówił to samo, a myślał o zupełnie o czym innym. W związku z tym, mając na uwadze temat całości, niezbędne jest ustalenie znaczeń przynajmniej trzech słów: cyberterroryzm, terroryzm, cyberprzestępstwo. Niestety już na tym etapie zaczynają się pierwsze problemy. W polskim prawie nie ma czegoś takiego jak cyberterroryzm. Po prostu. Efektem tego jest niemożność zarówno ścigania aktów tego typu, jak i prowadzenia działań zmierzających do podwyższenia bezpieczeństwa w ogólnie pojętej cyberprzestrzeni państwa. Aktualnie prowadzone są prace mające na celu zatwierdzenie przez Radę Ministrów dokumentu Program ochrony cyberprzestrzeni RP na lata Pozwoli to na rozpoczęcie działań w trzech kierunkach prawnym, technicznym i edukacyjnym. Planowanymi efektami będzie dostosowanie obowiązujących aktów prawnych do rzeczywistości państwa informacyjnego, stworzenie jednolitej polityki bezpieczeństwa dla administracji rządowej oraz podniesienie świadomości społeczeństwa w zakresie zagrożeń jakie mogą płynąć z internetu.

76 4C Michał Młotek Zobaczmy wobec tego terroryzm. Tu już jest lepiej. Mamy Kodeks Karny i Konwencję Rady Europy O Zapobieganiu Terroryzmowi. Co prawda treści zawarte w tym drugim dokumencie nie są nam zbyt przydane w zakresie definicji, albowiem: po pierwsze stanowi on po prostu katalog wykroczeń, które należy traktować jako działania terrorystyczne (i nie ma tam mowy o atakach na systemy teleinformatyczne) po drugie, Polska tej konwencji nie ratyfikowała. Na szczęście zostaje nam Kodeks Karny, który wyraźnie definiuje działania terrorystyczne: czyn zabroniony zagrożony karą pozbawienia wolności, której górna granica wynosi co najmniej 5 lat, popełniony w celu: 1) poważnego zastraszenia wielu osób, 2) zmuszenia organu władzy publicznej Rzeczypospolitej Polskiej lub innego państwa albo organu organizacji międzynarodowej do podjęcia lub zaniechania określonych czynności, 3) wywołania poważnych zakłóceń w ustroju lub gospodarce Rzeczypospolitej Polskiej, innego państwa lub organizacji międzynarodowej a także groźba popełnienia takiego czynu. Kodeks Karny zawiera również bardzo przydatny Rozdział XXXIII: Przestępstwa przeciwko ochronie informacji. Dokładnie, interesują nas artykuły 267, 268, 268a, 269, 269a i 269b, które w lepszy, czy gorszy, sposób usiłują spenalizować część przestępstw internetowych. W dalszej części przestępstwa te będą określane jako cyberprzestępstwa. Polegając na słownictwie KK proponuję, na potrzeby poniższej lektury ustalić, iż jako cyberterroryzm rozumie się działania terrorystyczne popełniane poprzez lub przeciwko sieciom teleinformatycznym lub/oraz systemom komputerowym. Wiemy już czym jest terroryzm, a czym cyberterroryzm. Czym się więc różnią? Każdy atak terrorystyczny, poza zwyczajową otoczką walki o wyższe cele, ma tak naprawdę tylko jedną motywację spowodować uderzenie w decydentów poprzez skrzywdzenie ludzi. Atak taki bardzo często realizowany jest nieskomplikowanymi metodami, co jednakże nie wyklucza skomplikowanych przygotowań. Czasem społeczeństwo nie jest atakowane bezpośrednio (na przykład wysadzenie centrum handlowego w godzinach jego zamknięcia, czy informacja o bombie przekazana władzom na tyle wcześnie, iż jest możliwość jej dezaktywacji jeszcze przed eksplozją). Psychoza jednak pozostaje.

77 Terroryzm i cyberterroryzm 4D W przypadku cyberterroryzmu powyższe podstawy pozostają. Nieskomplikowany i skuteczny atak powodujący jak największe zamieszanie, chaos i strach przed powtórzeniem jest ideałem dla terrorystów. Własnie poprzez wzbudzenie strachu terroryści mogą osiągnąć swój cel (na przykład wycofanie wojsk z okreslonych terytoriów). Patrząc pod względem strukturalnym, ataki cyberterrorystyczne są jedynie podzbiorem wszystkich ataków terrorystycznych. Nic innowacyjnego, żadna nowa jakość, nie została dodana poprzez zaistnienie sektora IT. Poza tym, iż stał się kolejnym, potencjalnym celem. Trzeba pamiętać, pewne grupy społeczne są bardziej narażone na ataki. Przykładowo, w przypadku ekstremistycznej grupy zielonych wydaje się, iż najmniej prawdopodobny będzie atak na sklep ze zdrową żywnością. Raczej można się spodziewać czegoś przy elektrowni atomowej... Zauważyć należy, że ofiara końcowa będzie ta sama. Zmieni się tylko metoda. Weźmy, jako przykład, ów sklep z chabaniną, który wzięli na cel terroryści. Mamy XXI wiek, więc obok sklepu fizycznego, jest i sklep internetowy. Jakie są potencjalne możliwości ataku na obiekt i do jakiej grupy można je przyporządkować? Można sklep obrzucić puszkami z farbą, można im na witrynie wymalować MOR- DERCY!. Można tez włamać się na ich stronę, zamalować ją na czerwono i wpisać KANIBALE!. Czy jednak to jest terroryzm? Chyba nie, wszystko to jest raczej czystej wody chuligaństwem. Nie zostały spełnione przesłanki terroryzmu, a zwłaszcza warunek poważnego zastraszenia wielu osób. Oczywiście, patrząc literalnie na zapisy Kodeksu Karnego, każde działanie, które powoduje wykonanie przez Policję określonych działań, może być zakwalifikowane jako terroryzm. Jednakże rozpatrując skutki przez pryzmat atakującego, należy raczej brać pod uwagę skalę. Działania, które spowodują rutynowe działania Policji czy prokuratury raczej nie powinny być traktowane jako terrorystyczne. Co innego zastraszenie społeczeństwa lub uruchomienie niestandardowych procedur przez organy rządowe. Aby została spełniona powyższa przesłanka, atakujący może w różny sposób eskalować środki. O ile w świecie rzeczywistym sklep ten mógłby zostać wysadzony w powietrze, czy mięso tam sprzedawane zarażone szczepem Staphylococcus aureus 1 to w cyberprzestrzeni najwyżej na jego stronę internetową można przypuścić atak DoS 2 (lub DDoS 3 ) lub defacement 4. Dodatkowo atakujący może użyć serwera WWW do rozprzestrzeniania wirusów, jednakże nie będzie to atak zwrócony ściśle przeciwko sklepowi, lecz raczej przeciwko jego klientom. I to tyle. 1 Gronkowiec złocisty bakteria powodująca zakażenia ropne skóry, tkanek podskórnych oraz tkanek miękkich, a także zakażenia układowe. W przypadku szczepu MRSA zwana flesh eating bacteria. 2 DoS Denial of Service Atak na system teleinformatyczny mający na celu zablokowanie dostępności do usług zapewnianych przez ten system. Atak może polegać np. na wywołaniu dużej ilości procesów, przez co system nie przyjmuje dalszych zapytań lub na zablokowaniu łącza do systemu. 3 DDoS Distributed Denial of Service Rozproszony atak zablokowania dostępności. Różnica między DDoS a DoS polega na przeprowadzeniu go z dużej ilości komputerów. Pozwala na zablokowanie wysokowydajnych systemów, poprzez atak przez systemy o niższej wydajności lub posiadających np. słabsze łącze 4 Defacement atak polegający na zamianie treści strony WWW. KL

78 4E Michał Młotek Proszę zwrócić uwagę, iż kradzieży danych osobowych, czy numerów kart kredytowych, ze sklepu internetowego nie damy rady zaliczyć do cyberterroryzmu. Jest to oczywiste cyberprzestępstwo, lecz nie zostały nadal spełnione warunki terroryzmu. Tak naprawdę, taki sklep praktycznie nie jest dobrym celem na atak cyberterrorystyczny. Nawet 100% sukces ataku nie przyniesie oczekiwanych (przez terrorystów) celów takich jak wzbudzenie paniki, czy nawet zyskanie rozgłosu. Atak cyberterrorystyczny z zasady jest skierowany przeciwko systemom, których awarię ludzie odczują boleśnie. Aby nie być gołosłownym zdefiniowano w prawie takie potencjalne cele. Jest to infrastruktura krytyczna i oznacza systemy oraz wchodzące w ich skład powiązane ze sobą funkcjonalnie obiekty, w tym obiekty budowlane, urządzenia, instalacje, usługi kluczowe dla bezpieczeństwa państwa i jego obywateli oraz służące zapewnieniu sprawnego funkcjonowania organów administracji publicznej, a także instytucji i przedsiębiorców. Infrastruktura krytyczna obejmuje systemy: [... ] b) łączności i sieci teleinformatycznych, (Ustawa z dn. 26 kwietnia 2007 r. o zarządzaniu kryzysowym Dz. U. z 2007, nr 89, poz. 590) Proszę zwrócić uwagę, iż definicja infrastruktury krytycznej jest napisana z punktu widzenia państwa, a nie obywateli. Biorąc dodatkowo specyfikę cyberprzestrzeni, zakres ofiar końcowych możemy sporo rozszerzyć. Pozwolę sobie podzielić cały ten zakres na podgrupy: systemy teleinformatyczne administracji publicznej, systemy bankowe, systemy usług dla ludności, sieć internet. Jakie są przesłanki właśnie do takiego podziału? Im bardziej systemy administracji publicznej zostaną uszkodzone a dane w nich przetwarzane zmienione, tym mniejsze zaufanie społeczne dla administracji. Przykład przy kontroli dokumentów okazuje się, że dowód osobisty jest kradziony. Każdy. Podobną sytuację można wyobrazić sobie z samochodami. Należy bezwzględnie pamiętać, iż systemy bazodanowe administracji publicznej są, w wielu przypadkach, rejestrami referencyjnymi. Oznacza to, iż dane w nich zawarte są traktowane, przez systemy korzystające z tych danych, jako najbardziej godne zaufania. Systemy bankowe zostały wydzielone jako kolejny podzakres, ze względu na to, że pieniądz jest krwią państwa. Im bardziej uniemożliwi się działanie systemów bankowych, tym większe problemy zostaną wywołane na innych frontach. Dodatkowo,

79 Terroryzm i cyberterroryzm 4F uniemożliwienie dostępu obywateli do ich oszczędności może stanowić spore utrudnienie dla działań mających na celu uspokojenie sytuacji w kraju (o ile wzbudzenie tego typu niepokojów było jednym z celów ataku). Usługi dla ludności to największy dział, który obejmuje sprawy począwszy od najprostszych, takich jak strony WWW z wiadomościami z kraju i ze świata, poprzez gazety, oświetlenie ulic, zasilanie, do tych naprawdę krytycznych dla obywateli jak szpitale czy system kamer CCTV... Uderzenie w sieć internet jest najbardziej krytycznym, dla systemów teleinformatycznych, z działań. Można spróbować przejąć kontrolę nad informacją przesyłaną w sieci w danym kraju. Atak na serwery DNS, routery przedsiębiorców telekomunikacyjnych itp. Przedstawienie faz przygotowania ataku i jego efektów to temat na oddzielny artykuł, poniżej przedstawiona zostanie faza przygotowania głównej platformy do wyprowadzenia ataku bezpośredniego. Należy wyraźnie zaznaczyć, że cele końcowe ataku nie są jedynymi ofiarami działań cyberterrorystycznych. Wszystkie działania terrorystyczne, które mają mieć jakąkolwiek szansę powodzenia, muszą mieć za sobą dużą dawkę logistyki. Proszę pamiętać, że za każdym atakiem stoją miesiące zbierania informacji, szykowania broni, treningów i przygotowań. Otóż właśnie te przygotowania są największym (nie licząc końcowego ataku) zagrożeniem dla wszystkich. Proszę się zastanowić jakie informacje przetwarzacie w swoich systemach i jak mogą się one przydać terrorystom. Praktycznie wszystkie informacje i wszystkie systemy są przydatne atakującemu. Nawet nasz internetowy sklep z mięsem. To co przedtem było tylko cyberprzestępstwem nagle staje się platformą cyberataku. Przykład: Firma zajmująca się sprzedażą gier, dzwonków i tapet na komórki. Przejęcie jej systemu i rozesłanie wszystkim użytkownikom opartych na systemie operacyjnym Symbian telefonów firmy Nokia jedenastu SMS-ów, o treści (tak, ze spacją na końcu) spowoduje zablokowanie (częściowe lub pełne) tych telefonów. Trzeba pamiętać o tym, że zgodnie z uzgodnioną na początku definicją mówimy o ataku za pomocą lub przeciwko systemom IT. Wiadomo, że każdy system ma wady i słabsze strony. Każdy można pokonać. Metod na to jest sporo, a im bardziej zdeterminowany atakujący, tym tych metod jest więcej. Co najciekawsze, celami większości ataków nie będą zazwyczaj systemy należące do infrastruktury krytycznej. Zaatakowane będą inne, czasem zupełnie niepowiązane systemy.mogą być one celem najróżniejszych działań, począwszy od tych najbardziej spokojnych, jak znalezienie jak największej ilości informacji o potencjalnych celach, poprzez kradzież tożsamości osób korzystających z przejętego serwisu, aż do kradzieży danych osobowych (lub innych) dotyczących wybranych osób. Proszę zwrócić uwagę te wszystkie ataki nie stanowią de facto aktów terroryzmu. Najwyżej są to cyberprzestępstwa. Dopiero wykorzystanie danych zdobytych dzięki powyższym działaniom może być traktowane jako terroryzm. I niestety tutaj wkraczamy w najbardziej nieprzyjemny obszar w całym temacie cyberterroryzmu. Mowa o sytuacjach, gdy działania przeciwko systemom przekładają się na działania przeciwko ludziom.

80 50 Michał Młotek Przykład: System teleinformatyczny przedszkola. Dzięki udanemu włamaniu możemy pozyskać informacje o dzieciach i osobach uprawnionych do ich odbioru. Zmiana w tych danych posłuży do porwania dziecka administratora systemu teleinformatycznego firmy telekomunikacyjnej. Powie wszystko, czego chcemy. Oczywiście uzyskanie danych to nie wszystko. Potrzebna jest jeszcze platforma ataku. Od dawna wiadomo jaka ona będzie botnety 5 Podkreślam platforma. Poza brutalnymi atakami przez botnety prowadzone będą również profilowane ataki przeciwko poszczególnym celom. Atak poprzez botnet, ze względu na wolumen ruchu, jaki będzie generował będzie najbardziej widoczny. Można się spierać, czy wyrządzi najwięcej szkód. Jest to zależne od planów atakującego. Jakie środki zgromadził i przeciwko czemu występuje. W zależności od tego potrzebował będzie różnych usług, jakie można zakupić na czarnym rynku. Podziemie komputerowe zmieniło się. Już skończyły się czasy dzikiego zachodu z jego mitami i podziwianymi rewolwerowcami. Wiadomo, że wszystko można kupić. Jest to zazwyczaj jedynie kwestia ceny. Pieniądze, jakimi się obraca są czasem naprawdę bardzo duże. Mimo że koszt wynajęcia jednego zombie 6 (do przeprowadzenia ataku DDoS) na jedną minutę to około 10 centów, należy pamiętać o skali ataku i długości jego trwania. 7 Zapomnijcie o postaci samotnego hackera włamującego się do Pentagonu i zostawiającego wpis w skrzynce kontaktowej. To jest kryminalne podziemie, które postępuje jak każde kryminalne podziemie. Tu nie ma różnicy. Wracając do ataków przez botnet, warto zastanowić się nad podstawowymi technikami pozyskiwania kolejnych zombie do kontrolowanej sieci Pierwsza to automatyczne włamania do systemów, które dołączą do botnetu (i same z kolei będa prowadziły takie próby włamań). Druga, to spam i powiązane z nim zabiegi socjotechniczne mające na celu skłonienie użytkownika komputera do zainstalowania oprogramowania. Botnety są wykorzystywane do wielu celów. Za ich pomocą można w sposób rozproszony skanować systemy, które w późniejszym okresie będą celem ataku. Można za ich pomocą, w późniejszej fazie, przeprowadzać ataki DDoS lub ataki pozorujące. Botnety to jednak przysłowiowe mięso armatnie. Pionki. Są skuteczne jedynie dzięki swojej wielkości. Atakujący potrzebować będzie bezpiecznych systemów wymiany informacji, spotkań, przechowywania danych, koordynacji działań itp. I tu właśnie pojawia się Linux. Wszystko co jest potrzebne, czarny rynek może dostarczyć. Przestrzeń dyskowa? Moc procesora? System zarządzania? To są usługi jakie bez problemu można kupić na wolnym rynku. Po co do tego czarny rynek? Usługi zapewniane przez podziemie zapewniają jedną rzecz, która dla terrorystów jest przydatna anonimowość i długi 5 Botnet grupa komputerów zombie wykonujących działania zgodnie z poleceniami zewnętrznego operatora (zwanego czasami zombiemasterem) 6 Zombie komputer, który został zarażony wrogim oprogramowaniem. Wykonuje, ukrywając przed użytkownikiem, działania nakazane przez zewnętrznego operatora. Najczęściej zombie służy do wysyłania spamu, ataków DDoS, skanowania innych systemów lub rozprowadzania wirusów 7 Źródła: Shadowserver Foundation, Bob Sullivan The Red Tape Chronicles (blog), Zhen Li, Qi Liao, Aaron Striegel Botnet Economics: Uncertainty Matters, Andrea M. Matwyshyn Penetrating the Zombie Collective: Spam as an International Security Issue

81 Terroryzm i cyberterroryzm 51 czas reakcji administratorów. Dobry system jest w cenie. A te z pingwinem uważane są za dobre. Ze względu na swoją specyfikę, Linuksy używane głównie jako systemy serwerowe, stanowią dla cyberterroryzmu bardzo dobrą, potencjalną platformę przygotowywania i kierowania atakiem. Systemy linuksowe zazwyczaj posiadają sporo miejsca na dyskach, dobre łącza, elastyczny system operacyjny, który w prosty sposób można dostosować do potrzeb atakującego, są stosunkowo niezawodne i posiadają cechę bardzo przydatną dla wrogich działań: zazwyczaj działają 24h na dobę. Jest jedna dobra informacja jeśli wasz system będzie zbyt kłopotliwy do przejęcia jako platforma działań wstępnych, to raczej nikt Was (lub Waszych dzieci) nie będzie porywał, nikt nie będzie szantażował ani próbował odciąć od sieci. Informacja zła jeśli jednak wasz system zostanie wykorzystany jako platforma ataku, to będziecie musieli się sporo nagimnastykować, aby udowodnić że to nie Wy przeprowadziliście działania terrorystyczne. Bo wszystko będzie na Was wskazywać drodzy administratorzy. Jeśli, jednakże, macie systemy, które mogą być potraktowane jako cele bezpośrednie... No cóż. Im bardziej Wasz system może wpłynąć na sytuację w kraju, w tym większym niebezpieczeństwie jest on i Wy. Stajecie się celem. Należy pamiętać, iż przy odpowiedniej determinacji atakującego, standardowe zabezpieczenia mogą nie zdać egzaminu. Przykład: Serwerownie operatora telekomunikacyjnego (podstawowa i dwie zapasowe). Cel ataku: odcięcie użytkowników. Działania: Fizyczne zniszczenie rakietami ppanc dwóch serwerowni. Odcięcie zasilania i łączności trzeciej z użyciem koparki. Niestety, trzeba stwierdzić, iż na dzień dzisiejszy, większość systemów pozostających w rękach prywatnych jest bardzo podatna na zagrożenia fizyczne. Znamienny jest tu kazus Somalii, gdzie kilka-kilkanaście osób przejmuje cały statek. Podobnie, w przypadku systemów IT, kilkanaście osób z kałasznikowami jest w stanie przejąć prawie każde datacenter. A jeśli nie przejąć, to zniszczyć. Część rozwiązań bezpieczeństwa zakłada, że niektóre osoby są w 100% godne zaufania. Jest to oczywiście nieprawda, bo każdego można zmusić do oddania hasła roota, czy odpowiedniego kodu PIN (np. rozwiercając kolano tej osobie). Większość systemów nie jest przygotowana na tak zdecydowane działania skierowane przeciwko nim. Większość z nich ulegnie. Niestety nie będzie tutaj pozytywnego podsumowania. W przypadku profesjonalnie przeprowadzonego ataku cyberterrorystycznego, a zwłaszcza w przypadku takiego ataku sponsorowanego przez wrogie państwo, po zaatakowanych systemach pozostaną tylko zgliszcza. Czasem fizyczne, czasem tylko w danych. Nie będzie to piękny widok. Jeśli atak został zaplanowany poważnie, to może się okazać, że cały kraj płonie, jest pozbawiony energii, nie działają żadne systemy oparte na internecie, nie ma łączności. Co więcej nie macie pewności, czy dane, które ocalały, nie zostały w złośliwy sposób zmienione. Nie wiecie, czy w waszych systemach, które się obroniły, nie tykają bomby zegarowe. Nie wiecie, czy Zakłady Azotowe w Puławach nie produkują fosgenu zamiast nadtlenku wodoru. Po takim ataku, nie każdy kraj się podniesie.

82

83 FLOSS 21 Wieku (wstęp do panelu dyskusyjnego kijem w mrowisko ) Robert BoBsoN Partyka Sytuacja programistów przed latami osiemdziesiątymi ubiegłego wieku przypominała stan, który dla niektórych propagatorów i sympatyków FLOSS może być kojarzony z programistycznym rajem. Idee, algorytmy i źródła oprogramowania krążyły między uczelniami i laboratoriami firmowymi bez większych przeszkód. Technologia rozwijała się bardzo dynamicznie. Lata osiemdziesiąte i podbój rynku przez komputery osobiste (także w zastosowaniach biznesowych) przyciągnął uwagę wielkich korporacji. Chęć dominacji i utrzymywania przewagi nad konkurencją doprowadziła do przerwania idylli programistów. Przedsiębiorstwa informatyczne zamykają dostęp do źródeł, obejmując je wraz ze stosowanymi algorytmami tajemnicą handlową. Rozpoczyna się era dominacji zamkniętego oprogramowania. Równocześnie patentowy wyścig zbrojeń nabiera rozpędu. Sytuacja ta od strony marketingowej wydaje się być logiczna i dobrze umotywowana. Nie spotyka się także z globalnym sprzeciwem konsumentów. Z takim stanem rzeczy nie zgadza się jednak m.in. Richard Matthew Stallman znany w środowisku hakerów jako RMS. Ogłasza on walkę z zamkniętym oprogramowaniem poprzez projekt GNU. Zakłada Fundację Wolnego Oprogramowania (FSF) i wygłasza jej podstawowe założenia, które mają być od tej pory znane jako cztery wolności: Wolność uruchamiania programu w dowolnym celu, Wolność analizowania, w jaki sposób program działa oraz dostosowywania programu do własnych potrzeb. Oczywistym warunkiem jest dostęp do kodu źródłowego programu.

84 54 Robert BoBsoN Partyka Wolność rozpowszechniania kopii programu bez ograniczeń, Wolność wprowadzania ulepszeń i uzupełnień do programu i publicznego rozpowszechniania tych ulepszeń. Również i w tym przypadku konieczny dostęp do kodu źródłowego programu. Od tej pory są to wartości głoszone przez Stallmana na całym świecie. Czy jednak mają szansę na przetrwanie w obliczu globalnego uzależnienia od oprogramowania nie spełniającego tych założeń? Kropla drąży skałę nie siłą, lecz częstym padaniem. powiedział kiedyś Gariopontus. Propagowane przez RMSa idee i wartości padają na podatny grunt środowiska hakerów. Ci, którym wydają się one zbyt radykalne i oderwane od rzeczywistości, łagodzą je tworząc ruch Otwartego Oprogramowania. Ruch ten staje się druga stroną tego samego medalu. Dla wielu obie ideologie stają się stylem życia. Czy jednak w oparciu o te wartości można zbudować biznes? W 1995 roku na rynek wkracza Red Hat. Staje się ona dostawcą systemu operacyjnego znanego pod nazwą RedHat Enterprise Linux. Kolejne lata przynoszą informacje o kolejnych przedsiębiorstwach wkraczających na rynek otwartych rozwiązań. Bum dot-com, a następnie kryzys wywołany przeinwestowaniem w projekty internetowe przynosi kolejną falę zainteresowania wolnym i otwartym oprogramowaniem. Ten wydawałoby się nie broniący się z biznesowego punktu widzenia model rozwoju oprogramowania okazuje się odporny na efekty kolejnych mikro i marko kryzysów gospodarczych. Przyciąga to uwagę wielkich korporacji, które reagują jednak w sposób diametralnie różny. Od ataku na idee wolnościowe jako zagrażające rozwojowi (m. in. Microsoft) po wyraźne zainteresowanie i poparcie (m. in. SUN, IBM, Intel). Biznes w modelu Open Source? Czy też może idee wolnościowe i społeczności z nimi związane stają się jedynie narzędziem w starciu informatycznych gigantów? Lata dziewięćdziesiąte i kolejny wiek przynoszą eskalację działań prawnych na polu wzajemnego zwalczania się gigantów branży IT. Na porządku dziennym są wojny patentowe. Prawo autorskie po kolejnych modyfikacjach staje się karykaturą własnej nazwy. Jego celowość podważają nawet osoby, których interesu ma ono chronić. Prawo patentowe i autorskie staje się także zagrożeniem modelu rozwoju oprogramowania zgodnego z wolnościowymi ideami głoszonymi zarówno przez Richarda Stallmana jak i przez sympatyków Otwartego Oprogramowania takich jak Linus Torvalds. Zagrożenie to jest dostrzeżone i spotyka się z silnym sprzeciwem. Następuje zagęszczenie działań mających na celu uświadomienie społeczeństwom zagrożeń płynących z braku reakcji na coraz głębiej sięgające ograniczenia wolności konsumenta. Równocześnie podjęte działania przeciwko poszerzaniu zakresu prawa patentowego jak i przeciw sporej ilości już udzielonych patentów przynoszą efekty w postaci m.in. nowej wersji GPL oraz zwycięskiej kampanii przeciwko wprowadzeniu patentów na oprogramowanie w UE. Obronną ręką w tym starciu wyszły wszystkie organizacje związane z ruchem wolnego i otwartego oprogramowania. Wielcy zwycięzcy i wielcy przegrani to korporacje branży IT. W cieniu patentowej wymiany ognia dochodzi do niebywałego zdarzenia. Firma Novell, która przejęła prawa do SuSE Linux - podpisuje umowę z Microsoft. Na jej

85 Floss 21 Wieku 55 podstawie firmy rozpoczynają współpracę nad zwiększeniem interoperacyjności oferowanych przez nie systemów operacyjnych. Dodatkowo Microsoft uzyskuje prawo do dystrybucji oprogramowania SLED i SLES. Nikogo prawdopodobnie nie dziwi, że robi to bardzo skutecznie. Umowa ta dla jednych jest oznaką przemian czekających świat IT, dla innych dopuszczeniem się przez firmę Novell zdrady wolnościowych ideałów. Zdania są podzielone. Jedni gratulują Novellowi zdrowego rozsądku, inni odżegnują go od czci i wiary wręcz nawołując do bojkotu. Przy analizie podjętych przez tę firmę działań należy brać pod uwagę, iż ma ona za sobą długą drogę w rozwoju oprogramowania zamkniętego, zaś doświadczenie na rynku oprogramowania procentuje widocznym przyspieszeniem rozwoju systemu SuSE. Popularyzacja internetu powoduje silne zmiany cywilizacyjne. Informacja staje się wartością. Równocześnie globalna pajęczyna pozwala na zmianę przyjętych metod rozwoju oprogramowania. We współczesnym świecie otwarte oprogramowanie staje się popularne. Bycie Open Source i popieranie ruchów wolnościowych coraz częściej postrzegane jest jako bycie na bieżąco z trendami. Równocześnie rozmyciu ulega społeczne zrozumienie różnic między wolnym a otwartym. Dla wielu nie ma różnicy lub jest ona nieistotna. Popieranie otwartego lub/i wolnego oprogramowania w wielu przypadkach staje się pozą równie istotną jak ipod w kieszeni i RedBull w ręce. Zanik świadomości idei niesie poważne zagrożenia dla społeczności wolnego i otwartego oprogramowania. Wiele pytań pozostaje otwartych i bez jednoznacznych odpowiedzi. Nad tą problematyką pochylą się osoby, które zbiorą się na debacie Kijem w mrowisko Pingwinaria 2009 serdecznie zapraszam. Staw powstały przez nowe Otwarte Źródło

86

87 Linux pod kominem Paweł Kolega Dariusz Marcinkiewicz Wstęp Zadaniem tego referatu jest zarysować budowę SZARPA, jego działanie oraz sposób w jaki system jest konfigurowany. Sam system SZARP jest już dość dobrze opisany: SZARP jest tematem trzech prac magisterskich (jedna z nich jest właśnie w trakcie powstawania) oraz kilku artykułów opublikowanych na portalach internetowych. Na oficjalnej stronie SZARP-a można znależć akutalne newsy na temat rozwoju systemu, obszerną dokumentacje, źródła systemu, skompilowane wersje dla Debiana i MS Windows przykładowe dane i konfiguracje systemu. Historia systemu SZARP SZARP (System Zbierania ARchiwizacji i Prezentacji danych) jest systemem typu SCADA (ang. Supervisory Control And Data Acquisition). Historia tego systemu rozpoczęła się w 1991 roku, wtedy to został napisany zalążek systemu pracujący pod kontrolą systemu operacyjnego DOS umożliwiający zbieranie i przeglądanie danych. Bardzo szybko okazało się, że podstawową wadą tego systemu jest jednowątkowość i do jednoczesnego zbierania oraz przeglądania danych potrzebnę są... dwa komputery. W związku z tym podjęto decyzję przesiadki na bardziej poważny system operacyjny. Do wyboru były w zasadzie dwa systemy: wczesne wersje MS-Windows lub rodzina Unix. Postawiono na to drugie rozwiązanie (konkretnie stosowano USL Unix SVR4.2 firmy Consensys, a potem także Novell UnixWare 1.1 i 2.0 i ostatecznie SCO UnixWare 2.1). Zmiana systemu operacyjnego, dzięki wielowątkowości, umożliwiła modularyzację oprogramowania można było oddzielić programy odpowiedzialne za prezentację danych od programów odpowiedzialnych za ich zbieranie i przetwarzanie. Na przełomie lat , a więc po pojawieniu się pierwszych,

88 58 Paweł Kolega, Dariusz Marcinkiewicz Rys 1 System SZARP i jego otoczenie stosunkowo łatwych w obsłudze i zarządzaniu dystrybucji Linuxa przeportowano całe oprogramowanie na ten właśnie system. Dodatkowymi korzyściami użytkowania Linuxa w porównaniu z poprzednikiem była znacznie większa ilość obsługiwanego sprzętu oraz brak opłat za licencję. Decyzja sprzed 16 laty o wyborze systemu operacyjnego okazała się strzałem w dziesiątkę. System SZARP w liczbach Ponad 26 tysięcy monitorowanych parametrów Ponad 200 komputerów z zainstalowanym systemem 2000 użytkowników około 700 w grupie Praterm, 1300 w innych systemach ciepłowniczych 42 monitorowane ciepłownie i elektrociepłownie o zainstalowanej mocy 2190MW 223 monitorowane węzły cieplne 15 programistów rozwijających system 16 lat rozwoju 230 tysięcy linii kodu 51 tysięcy linii dokumentacji Oprogramowanie na licencji GPL 17 obsługiwanych protokołów komunikacji 30 typów obsługiwanych urządzeń

89 Linux pod kominem 59 Jak działa SZARP SZARP zajmuje się gromadzeniem danych dotyczących stanu procesów technologicznych, pozwala na ich bieżące monitorowanie, kontrolowanie, a w niewielkim stopniu, też takimi procesami steruje. Poza monitorowaniem bieżącego stanu, SZARP archiwizuje dane opisujące przebieg procesów technologicznych, a następnie pozwala na ich analizę. SZARP obecnie prawie wyłącznie wykorzystywany jest do monitorowania pracy systemów ciepłowniczych. W standardowym scenariuszu system instalowany jest na ciepłowni, zbieraniem oraz archiwizacją danych zajmuje się jeden dedykowany do tego komputer klasy PC z zainstalowanym systemem Debian GNU/Linux. Bieżące wartości parametrów procesu technologicznego udostępniane są za pomocą protokołu HTTP do aplikacji klienckich, którymi zazwyczaj są terminale, pracujące też pod Debianem, znajdujące się w tej samej sieci LAN lub też działające na Windowsach X-Servery. Dane archiwalne przesyłane są też na bieżąco do centrali firmy w Warszawie, skąd później trafiają na inne ciepłownie, na laptopy kierowników ciepłowni, itp. Za ciekawostkę można uznać fakt, że przesyłanie danych archiwalnych między komputerami realizowane jest wyłącznie albo za pomocą aplikacji rsync, albo, w przypadku windowsowej wersji SZARP-a, za pomocą dedykowanej do tego celu aplikacji, bazującej również w dużej mierze na koncepcjach wykorzystywanych w rsync u. Architektura systemu W pierwszym przybliżeniu system SZARP można podzielić na dwie główne warstwy. Warstwę odpowiedzialna za interakcję z systemem ciepłowniczym wymieniająca dane z regulatorami, licznikami oraz innego typu urządzeniami lub też np. z innymi instalacjami systemu SZARP, warstwa ta zajmuje się również archiwizacją zgromadzonych wartości parametrów. Druga warstwa zajmuje się prezentacją danych w postaci raportów, wykresów oraz tablic synoptycznych. Pierwsza z warstw składa się z kilku aplikacji. Za jej serce może uchodzić program koncentrujący (parcook), parcook trzyma w globalnym segmencie pamięci dzielonej bieżące oraz średnie wartości wszystkich parametrów systemu, wylicza także wartości parametrów pochodnych. Drugi komponent warstwy stanowią programy zbierające dane z poszczególnych sterowników przemysłowych, nazywane w nomenklaturze SZARP-a demonami. Programy te zazwyczaj implementują konkretne protokoły za pomocą których porozumiewają się urządzeniami określonego typu, choć ich zastosowanie nie ogranicza się tylko do wymiany danych z urządzeniami, na przykład, istnieją demony potrafiące wyciągać dane ze stron WWW. Zebrane dane wrzucane są do wspólnego dla całego systemu, zarządzanego przez program parcook, segmentu pamięci dzielonej. Kolejna aplikacja tej warstwy, meaner3 zajmuje się archiwizacją danych, cyklicznie pobierając wartości parametrów z pamięci dzielonej i zapisując je w bazie danych SZBASE. Do tej warstwy należy jeszcze program sender zajmuje się on wysyłaniem wartości parametrów do sterowników, parametry te wysyłane są za pośrednictwem wspomnianych już demonów. Są tu także programy: analiza (program zajmujący się analizowaniem i częściowym sterowaniem procesów przemysłowych); program psetd pośredniczący między aplikacjami klienckimi a regulatorami, pozwalający użytkownikom na zmianę określonych typów nastaw. Na pograniczu tej

90 5A Paweł Kolega, Dariusz Marcinkiewicz Rys 2 Przepływ danych w systemie SZARP warstwy znajduje się program paramd udostępnia on aktualne wartości parametrów za pomocą protokołu HTTP. Komunikacja między wszystkimi programami tej warstwy odbywa się za pomocą standardowych, posixowych mechanizmów komunikacji międzyprocesowej (pamięci dzielonej, kolejek komunikatów, semaforów). Na warstwę prezentacji składa się klika programów: program przeglądający, służący do analizy danych historycznych, do którego głównych zadań należy przedstawianie tych danych w formie wykresów czasowych (funkcje programu zostaną omówione w dalszej cześci referatu); raporter, pokazujący bieżące wartości parametrów; kontroler3 pozwalający na kontrolę wartości parametrów oraz system ISL, prezentujący stan procesu technologicznego w postaci tablicy synoptycznej (on także zostanie później omówiony). Baza danych SZBASE Pierwotnie dane o zbieranych parametrach SZARP przechowywał w komecyjnej bazie danych dbase IV. Związanych z tym faktem było kilka problemów. Przede wszystkim baza ogólnego przeznaczenia nie była optymalnym rozwiązaniem dla specyfiki danych przechowywanych przez system. Część funkcjonalność udostępniana przez tego typu

91 Linux pod kominem 5B szbase demon meaner3 parcook demon demon paramd (HTTP) sender Rys 3 Architektura warstwy zbierającej i wymieniającej dane bazę nie była systemowi SZARP do niczego potrzebna, a przyczyniała się do sporego narzutu zarówno czasowego występującego przy odczycie danych oraz pamięciowego sposób przechowywania danych powodował, że rozmiar bazy był niepotrzebnie duży. Ponadto synchronizacja zawartości bazy danych między poszczególnymi systemami stanowiła duży kłopot (zachowanie spójności danych). Nie bez znaczenia na pewno jest też fakt występowania błędów w kodzie systemu dbase, co prawda firma tworząca dbase a udostępniała swoim klientom kod źródłowy, jednak jego debugowanie, chociażby ze względu na rozmiar kodu, było zajęciem uciążliwym. Stąd pomysł na stworzenie własnego formatu bazy danych, odpowiadającego specyfice systemu SZARP. Na czym ta specyfika polega? Przede wszystkim na tym, że w bazie przechowujemy tylko jeden rodzaj danych liczbowe wartości parametrów o ustalonym rozmiarze (szesnastobitowe liczby ze znakiem), przypisane do ściśle określonych chwil w czasie (każda dana zawiera 10-minutową średnią wartość parametru). Kolejną przyjemną cechą jest sposób w jaki korzystamy z danych, wykonujemy tylko jeden rodzaj dostępu odczyt wartości parametru dla zadanego przedziału czasowego, nie interesuje nas np. operacja wyszukania w bazie rekordów o określonej wartości. SZBASE przechowuje dane w plikach, w którym każdy trzyma wartości jednego parametru z okresu miesiąca. Daje nam to względnie małe pliki o rozmiarach ok. 8kB. W takich plikach nie przechowujemy nic więcej niż surowe wartości parametrów. O tym, do jakiej chwili w czasie odnosi się dana wartość określa jej pozycja w pliku, i tak wartość

92 5C Paweł Kolega, Dariusz Marcinkiewicz z godziny 00:00 1 lutego 2009 roku będzie zajmowała dwa pierwsze bajty w pliku o nazwie szb (nazwa pliku określa z jakiego roku oraz miesiąca pochodzą dane), wartość dla tego samego dnia z godziny 02:00 będzie przechowywana w bajtach 24 25, itd. Pozostaje jeszcze kwestia przyporządkowania parametrów do poszczególnych plików, które określane jest przez ich położenie w drzewie katalogów bazy, a to z kolei zależy od unikalnej, w ramach instalacji SZARPa, nazwy tekstowej parametru. Weźmy jakiś parametr, np. temperatura zewnętrzna, którą SZARP pobiera ze sterownika, parametr taki zwyczajowo ma nazwę Sieć:Sterownik:Temperatura zewnętrzna, jego pliki umieszczane będą w katalogu $(katalog_główny_bazy)/siec/sterownik/temperatura_zewnetrzna/ Jak widać z powyższego opisu, struktura bazy jest bardzo prosta. Prostota ta daje nam bardzo dużo: prosty, krótki kod systemu bazy danych realizującego dostęp do danych około 3000 linii kodu C++. Operacja dopisywania nowych wartości do bazy jest trywialna dopisujemy kolejne wartości do końca pliku z aktualnego miesiąca. To samo dotyczny przesyłania zawartości danych na inne komputery wystarczy przesłać brakujące fragmenty plików - nie ma indeksów, nie przechowujemy innych średnich niż 10-minutowe (w bazie dbase, ze względu na szybkość dostępu, przechowywane były też średnie wyższych rzędów, co wymagało troszczenia się o zachowanie ich spójności). Program przeglądający Największy jeśli chodzi o ilość kodu, a także udostępnioną funkcjonalność program systemu SZARP. Program przeglądający pozwala na zaawansowaną analizę danych historycznych. Podstawowe zadanie aplikacji to prezentacja wykresów czasowych wartości poszczególnych parametrów technologicznych. Użytkownik korzystający z programu ma natychmiastowy dostęp do wszystkich danych z całego okresu funkcjonowania na ciepłowni systemu SZARP. Do licznych funkcji programu można zaliczyć: prezentowanie różnych rodzajów średnich: 10-minutowych, godzinowych, dziennych, 8-godzinnych, dziennych oraz miesięcznych możliwość porównywania wartości tego samego parametru z różnych okresów czasowych analizę zależności między parametrami - wykresy X/Y pokazujące wartości jednego parametru w funkcji drugiego, znajdywanie korelacji między parametrami - zestawianie ze sobą (w tzw. oknach) sobą dowolnych parametrów równoczesny dostęp do danych z różnych instalacji systemu możliwość tworzenia przez użytkownika własnych parametrów (parametrów definiowalnych) będącymi pochodnymi zbieranych parametrów, użytkownik dostaje do dyspozycji pełny język skryptowy (LUA), za pomocą którego może zapisywać własne parametry, które następnie mogą zostać poddane analizie. - globalny system komentarzy, pozwalający uprawionym użytkownikom mającym dostęp do Internetu (a nie tylko znajdujących się na określonej ciepłowni) umieszczanie adnotacji

93 Linux pod kominem 5D Rys 4 System SZARP na biurku operatora z widocznym programem przeglądającym do określonych momentów czasowych poszczególnych wykresów. Tak dodane komentarze dostępne dla wszystkich użytkowników programu przeglądającego. Program, jak większość aplikacji klienckich SZARPa, jest aplikacją crossplatformową, kod kompilowany jest do binarek działających na systemie Linux jak i MS-Windows, w tym wypadku stosujemy cross-compilację za pomocą mingw. ISL Kolejnym elementem systemu SZARP jest system ISL. System ISL zajmuje się prezentacją danych w postaci tablic synoptycznych pokazujących schemat fragmentu systemu ciepłowniczego z naniesionymi na nim informacjami o aktualnym stanie procesu technologicznego, zazwyczaj w postaci wartości poszczególnych parametrów, oraz sytuacjach alarmowych, wynikających np. z przekroczenia dopuszczalnych wartości poszczególnych parametrów. Rdzeniem systemu ISL jest SVG, oparty na XMLu język służący do opisu grafiki wektorowej i wektorowo-rastrowej. Wykorzystuje inne technologie XML-owe, takie jak XLink, XPointer, CSS (Cascading Stylesheets arkusze stylów) i DOM2 (Document Object Model)2. Może być łączony z językiem SMIL (Synchronized Multimedia Integration Language). Został pomyślany jako standard prezentowania grafiki wektorowej w przeglądarkach WWW. Umożliwia tworzenie dokumentów animowanych, bądź przy wykorzystaniu animacji deklaratywnych, bądź

94 5E Paweł Kolega, Dariusz Marcinkiewicz Rys 5 Schemat ISL obrazujący pracę kotłów za pomocą skryptów modyfikujących strukturę dokumentu (DOM). Dokumenty SVG mogą być w pełni interaktywne, modyfikując swoją zawartość w odpowiedzi na działania użytkownika, także takie jak zmiana powiększenia dokumentu. Każdy obiekt może być dowiązaniem. Bez problemu można łączyć w jednym dokumencie SVG, XHTML, MathML i ewentualne inne XML-owe języki prezentacji danych. Standard przewiduje też możliwość rozszerzania języka przez użytkownika, na potrzeby konkretnej aplikacji. Takim rozszerzeniem jest właśnie ISL (Industry Schema Language), rozszerzenie polega to w tym przypadku na dołączeniu do elementów SVG dodatkowych atrybutów z nowej przestrzeni nazw. Instalacja systemu ISL złożona jest z dwóch komponentów serwera paramd, udostępniającego informacje o aktualnych wartościach parametrów za pośrednictwem protokołu HTTP, oraz przeglądarki internetowej prezentującej schemat systemu oraz pobrane od serwera paramd wartości. Wygląd tablicy synoptycznej jest opisywany właśnie za pomocą języka SVG. Klient pracujący z systemem nie potrzebuje żadnych aplikacji poza przeglądarką internetową zarówno Firefox i Opera standardowo obsługują grafikę wektorową zapisaną w tym formacie. Interakcja z serwerem paramd odbywa się z pomocą techniki AJAX (w poprzednich wersjach ISL a, serwer po jakiejkolwiek zmianie musiał za każdym razem wysyłać do przeglądarki cały dokument SVG z naniesionymi nań aktualnymi wartościami parametrów, obecnie aktualizacja dokumentu odbywa się wyłącznie po stronie klienta). Na stronie systemu SZARP można zobaczyć przykładowy dokument ISL wizualizujący temperaturę. Konfiguracja SZARP-a Konfigurację systemu SZARP można podzielić na kilka zasadniczych części: konfiguracja aplikacji umożliwia zarządzanie poszczególnymi modułami systemu, konfiguracja prezentacji i kolekcji danych umożliwia określenie jakie dane mają być zbierane, prezentowane i przetwarzane w systemie.

Narzędzie konfiguracji rozruchu

Narzędzie konfiguracji rozruchu Narzędzie konfiguracji rozruchu 1. By skorzystać z narzędzia konfiguracji rozruchu na początek konieczne jest utworzenie płyty ratunkowej bądź wykorzystanie narzędzia IT Edition i uruchomienie maszyny

Bardziej szczegółowo

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz

Bardziej szczegółowo

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego Cel ćwiczenia: Celem zajęć jest zdobycie doświadczenia i umiejętności instalacji systemu operacyjnego z rodziny Unix bez wykorzystania

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy

Bardziej szczegółowo

Struktura dysku. Dyski podstawowe i dynamiczne

Struktura dysku. Dyski podstawowe i dynamiczne Struktura dysku Dyski podstawowe i dynamiczne System Windows 2000 oferuje dwa rodzaje konfiguracji dysków: dysk podstawowy i dysk dynamiczny. Dysk podstawowy przypomina struktury dyskowe stosowane w systemie

Bardziej szczegółowo

Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Etapy uruchamiania systemu

Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Etapy uruchamiania systemu Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE Etapy uruchamiania systemu 010 2 Systemy operacyjne i sieci komputerowe. Część 010. I. Etapy uruchamiania systemu Windows

Bardziej szczegółowo

Partition Wizard Home Edition Aplikacja przeznaczona do partycjonowania dysków twardych, obsługująca również macierze RAID oraz dyski o pojemności

Partition Wizard Home Edition Aplikacja przeznaczona do partycjonowania dysków twardych, obsługująca również macierze RAID oraz dyski o pojemności 10 najlepszych darmowych programów do partycjonowania i zarządzania dyskami Odpowiedni podział dysku pozytywnie wpływa na działanie systemu. Prezentujemy 10 najlepszych darmowych programów do partycjonowania

Bardziej szczegółowo

GRUB (GRand Unified Bootloader) - jest bootloaderem instalowanym standardowo w Ubuntu, potrafiącym obsłużyć kilka systemów jednocześnie (Multiboot).

GRUB (GRand Unified Bootloader) - jest bootloaderem instalowanym standardowo w Ubuntu, potrafiącym obsłużyć kilka systemów jednocześnie (Multiboot). GRUB (GRand Unified Bootloader) - jest bootloaderem instalowanym standardowo w Ubuntu, potrafiącym obsłużyć kilka systemów jednocześnie (Multiboot). GRUB ładuje system operacyjny do pamięci przekazuje

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 006 Wydajność systemu 2 SO i SK/WIN Najprostszym sposobem na poprawienie wydajności systemu, jeżeli dysponujemy zbyt małą ilością pamięci RAM

Bardziej szczegółowo

Administracja serwerami

Administracja serwerami 1. Start systemu. System operacyjny Linux startuje w następujących krokach; o BIOS i Boot Manager (GRUB); o Jądro systemu (Kernel); o Startowy ramdysk (Initial Ram File System, Initial RAM Disk); o Proces

Bardziej szczegółowo

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Systemy Operacyjne i Sieci Komputerowe Klasa: pierwsza Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

Spis Treści: Przygotowanie do instalacji lub trybu Live Testowanie systemu bez instalacji (Live) Instalacja Luwe OS Web

Spis Treści: Przygotowanie do instalacji lub trybu Live Testowanie systemu bez instalacji (Live) Instalacja Luwe OS Web Spis Treści: 1. 2. 3. 4. Wstęp Przygotowanie do instalacji lub trybu Live Testowanie systemu bez instalacji (Live) Instalacja Luwe OS Web 1. Wstęp Witaj w podręczniku instalacji i pracy w trybie Live systemu

Bardziej szczegółowo

2009-03-21. Paweł Skrobanek. C-3, pok. 321 e-mail: pawel.skrobanek@pwr.wroc.pl pawel.skrobanek.staff.iiar.pwr.wroc.pl

2009-03-21. Paweł Skrobanek. C-3, pok. 321 e-mail: pawel.skrobanek@pwr.wroc.pl pawel.skrobanek.staff.iiar.pwr.wroc.pl Wrocław 2007-09 SYSTEMY OPERACYJNE WPROWADZENIE Paweł Skrobanek C-3, pok. 321 e-mail: pawel.skrobanek@pwr.wroc.pl pawel.skrobanek.staff.iiar.pwr.wroc.pl 1 PLAN: 1. Komputer (przypomnienie) 2. System operacyjny

Bardziej szczegółowo

SecureDoc Standalone V6.5

SecureDoc Standalone V6.5 SecureDoc Standalone V6.5 Instrukcja instalacji WinMagic Inc. SecureDoc Standalone Instrukcja Instalacji Spis treści Zanim przystąpisz do instalacji... 3 Tworzenie kopii zapasowej... 3 Wymagania systemowe...

Bardziej szczegółowo

Policealne Studium Zawodowe w Grudziądzu. Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE. Windows XP klonowanie instalacji z wykorzystaniem sysprep

Policealne Studium Zawodowe w Grudziądzu. Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE. Windows XP klonowanie instalacji z wykorzystaniem sysprep Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE Windows XP klonowanie instalacji z wykorzystaniem sysprep Grudziądz, 2011 Wojciech Boruciński Pojęcia: SID Przygotowanie systemu do klonowania Wykonanie obrazu

Bardziej szczegółowo

Sektor. Systemy Operacyjne

Sektor. Systemy Operacyjne Sektor Sektor najmniejsza jednostka zapisu danych na dyskach twardych, dyskietkach i itp. Sektor jest zapisywany i czytany zawsze w całości. Ze względów historycznych wielkość sektora wynosi 512 bajtów.

Bardziej szczegółowo

Wstęp 5 Rozdział 1. SUSE od ręki 13

Wstęp 5 Rozdział 1. SUSE od ręki 13 Wstęp 5 Rozdział 1. SUSE od ręki 13 KDE czy GNOME? 13 Jak uruchomić SUSE Live-CD z interfejsem GNOME? 14 Jak uruchomić SUSE Live-CD z interfejsem KDE? 15 Jak zmienić rozdzielczość ekranu? 16 Jak wyświetlić

Bardziej szczegółowo

Instrukcja krok po kroku instalacji Windows Vista w nowym komputerze

Instrukcja krok po kroku instalacji Windows Vista w nowym komputerze Instrukcja krok po kroku instalacji Windows Vista w nowym komputerze Dostajemy wiele sygnałów od użytkowników portalu VISTA.PL w sprawie instalacji Windows Vista krok po kroku. W tym FAQ zajmę się przypadkiem

Bardziej szczegółowo

Q E M U. http://www.qemu.com/

Q E M U. http://www.qemu.com/ http://www.qemu.com/ Emulator procesora Autor: Fabrice Bellard Obsługiwane platformy: Windows, Solaris, Linux, FreeBSD, Mac OS X Aktualna wersja: 0.9.0 Większość programu oparta na licencji LGPL, a sama

Bardziej szczegółowo

Archiwizowanie nagrań i naprawa bazy danych

Archiwizowanie nagrań i naprawa bazy danych ROZDZIAŁ 6 Archiwizowanie nagrań i naprawa bazy danych Pliki wideo mogą być archiwizowane z dysku twardego na zewnętrzne nośniki, takie jak CD-R, DVD, MO lub ZIP. Tworzenie kopii plików audio/wideo Pliki

Bardziej szczegółowo

BIOS, tryb awaryjny, uśpienie, hibernacja

BIOS, tryb awaryjny, uśpienie, hibernacja BIOS, tryb awaryjny, uśpienie, hibernacja Wykład: BIOS, POST, bootstrap loader, logowanie, uwierzytelnianie, autoryzacja, domena, tryb awaryjny, stan uśpienia, hibernacja, wylogowanie, przełączanie użytkownika,

Bardziej szczegółowo

Przed restartowaniem routera odłącz wszystkie urządzenia podłączone pod porty USB.

Przed restartowaniem routera odłącz wszystkie urządzenia podłączone pod porty USB. Podłączanie i konfiguracja zewnętrznych dysków i pamięci masowych do router ów firmy ASUS. Routery wyposażone w porty USB mają możliwość podłączenia zewnętrznych dysków twardych po przez port USB i udostępniania

Bardziej szczegółowo

MIGRATE TO 3TB. Przewodnik

MIGRATE TO 3TB. Przewodnik MIGRATE TO 3TB Przewodnik Koncepcja produktu Główni odbiorcy Migrate to 3TB to podręczne rozwiązanie, które rozwiązuje problem z niekompatybilnością pomiędzy nowoczesnymi systemami operacyjnymi Microsoft

Bardziej szczegółowo

Przed restartowaniem routera odłącz wszystkie urządzenia podłączone pod porty USB.

Przed restartowaniem routera odłącz wszystkie urządzenia podłączone pod porty USB. Podłączanie i konfiguracja zewnętrznych dysków i pamięci masowych do router ów firmy ASUS. Routery wyposażone w porty USB mają możliwość podłączenia zewnętrznych dysków twardych po przez port USB i udostępniania

Bardziej szczegółowo

INSTRUKCJA I WSKAZÓWKI

INSTRUKCJA I WSKAZÓWKI INSTRUKCJA I WSKAZÓWKI korzystania z maszyny wirtualnej Oracle VirtualBox 4 Michał Karbowańczyk, wrzesień 2011 Spis treści 1 Informacje wstępne...4 1.1 Nazewnictwo...4 1.2 Legalność...4 1.3 Instalacja

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

REFERAT PRACY DYPLOMOWEJ REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja środowiska do automatyzacji przeprowadzania testów aplikacji internetowych w oparciu o metodykę Behavior Driven Development. Autor: Stepowany

Bardziej szczegółowo

1. Pamięć wirtualna. 2. Optymalizacja pliku pamięci wirtualnej

1. Pamięć wirtualna. 2. Optymalizacja pliku pamięci wirtualnej 1. Pamięć wirtualna Jeśli na komputerze brakuje pamięci RAM wymaganej do uruchomienia programu lub wykonania operacji, system Windows korzysta z pamięci wirtualnej, aby zrekompensować ten brak. Aby sprawdzić,

Bardziej szczegółowo

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa)

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa) IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa) Przedstawione poniżej instrukcje dotyczą instalowania IBM SPSS Statistics wersji 20 przy użyciu licencja sieciowa. Ten dokument

Bardziej szczegółowo

INSTALACJA LICENCJI SIECIOWEJ NET HASP Wersja 8.32

INSTALACJA LICENCJI SIECIOWEJ NET HASP Wersja 8.32 INSTALACJA LICENCJI SIECIOWEJ NET HASP Wersja 8.32 Spis Treści 1. Wymagania... 2 1.1. Wymagania przy korzystaniu z klucza sieciowego... 2 1.2. Wymagania przy uruchamianiu programu przez internet... 2 2.

Bardziej szczegółowo

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX Materiały: www.staff.amu.edu.pl/~evert/asi.php W razie nieobecności proszę o zapoznanie się z materiałem z ćwiczeń w domu Zaliczenie

Bardziej szczegółowo

UNIFON podręcznik użytkownika

UNIFON podręcznik użytkownika UNIFON podręcznik użytkownika Spis treści: Instrukcja obsługi programu Unifon...2 Instalacja aplikacji Unifon...3 Korzystanie z aplikacji Unifon...6 Test zakończony sukcesem...9 Test zakończony niepowodzeniem...14

Bardziej szczegółowo

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja 7 Windows Serwer 2003 Instalacja Łódź, styczeń 2012r. SPIS TREŚCI Strona Wstęp... 3 INSTALOWANIE SYSTEMU WINDOWS SERWER 2003 Przygotowanie instalacji serwera..4 1.1. Minimalne wymagania sprzętowe......4

Bardziej szczegółowo

DLA WINDOWS 1. USTAWIANIE SKOKU W CZASIE 2.WYBÓR CHRONIONYCH PLIKÓW 3.POWRÓT DO PRZESZŁOŚCI

DLA WINDOWS 1. USTAWIANIE SKOKU W CZASIE 2.WYBÓR CHRONIONYCH PLIKÓW 3.POWRÓT DO PRZESZŁOŚCI MASZYNA CZASU DLA WINDOWS 1. USTAWIANIE SKOKU W CZASIE Zainstaluj program Genie Timeline 2012 i uruchom go. Aplikacja utworzy na Pulpicie Windows nowy folder o nazwie No-BackupZone. Jeżeli chcesz wykluczyć

Bardziej szczegółowo

Wybrane programy do tworzenia bootowalnego dysku USB

Wybrane programy do tworzenia bootowalnego dysku USB Wybrane programy do tworzenia bootowalnego dysku USB Rufus mały program narzędziowy do formatowania i tworzenia bootowalnego urządzenie typu flash (pendrive, memory card itp.). Można utworzyć z bootowalnego

Bardziej szczegółowo

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian 1 / 12 Content list / Spis Treści 1. Hardware and software requirements, preparing device to upgrade Wymagania sprzętowe i programowe, przygotowanie urządzenia do aktualizacji 2. Installing drivers needed

Bardziej szczegółowo

Najczęściej występujące problemy z instalacją i konfiguracją i ich rozwiązania.

Najczęściej występujące problemy z instalacją i konfiguracją i ich rozwiązania. Najczęściej występujące problemy z instalacją i konfiguracją i ich rozwiązania. Q. Jak uruchomić instalator? A. Trzeba nadać instalatorowi atrybut 'wykonywalny'. Można to zrobić wydając polecenie `chmod

Bardziej szczegółowo

System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS

System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS System operacyjny UNIX system plików System plików systemu UNIX (s5fs) System plików ma strukturę drzewa. Na samym szczycie znajduje się korzeń (root), symbolicznie przedstawiany jako /. Z punktu widzenia

Bardziej szczegółowo

Narzędzie Setup Instrukcja obsługi

Narzędzie Setup Instrukcja obsługi Narzędzie Setup Instrukcja obsługi Copyright 2007, 2008 Hewlett-Packard Development Company, L.P. Windows jest zastrzeżonym znakiem towarowym firmy Microsoft Corporation, zarejestrowanym w USA. Informacje

Bardziej szczegółowo

DESKTOP Internal Drive. Przewodnik po instalacji

DESKTOP Internal Drive. Przewodnik po instalacji DESKTOP Internal Drive Przewodnik po instalacji Przewodnik po instalacji Seagate Desktop 2013 Seagate Technology LLC. Wszelkie prawa zastrzeżone. Seagate, Seagate Technology, logo Wave i FreeAgent to znaki

Bardziej szczegółowo

Wirtualizacja aplikacji: spakuj i wdrażaj aplikacje szybko i łatwo za pomocą ZENworks Application Virtualization

Wirtualizacja aplikacji: spakuj i wdrażaj aplikacje szybko i łatwo za pomocą ZENworks Application Virtualization Wirtualizacja aplikacji: spakuj i wdrażaj aplikacje szybko i łatwo za pomocą ZENworks Application Virtualization Piotr Szewczuk konsultant Novell Sp. z o.o. PSzewczuk@Novell.PL Jak wygląda dzisiaj stacja

Bardziej szczegółowo

Jak używać funkcji prostego udostępniania plików do udostępniania plików w systemie Windows XP

Jak używać funkcji prostego udostępniania plików do udostępniania plików w systemie Windows XP Jak używać funkcji prostego udostępniania plików do udostępniania plików w systemie Windows XP System Windows XP umożliwia udostępnianie plików i dokumentów innym użytkownikom komputera oraz innym użytkownikom

Bardziej szczegółowo

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika Warsztaty AVR Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR Dariusz Wika 1.Krótki wstęp: Eclipse to rozbudowane środowisko programistyczne, które dzięki możliwości instalowania

Bardziej szczegółowo

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

I. Informacje ogólne. Jednym z takich systemów jest Mambo. MAMBO (CMS) I. Informacje ogólne CMS, Content Management System ("system zarządzania treścią") jest to jedna lub zestaw aplikacji internetowych pozwalających na łatwe utworzenie oraz późniejszą aktualizację

Bardziej szczegółowo

Paragon Camptune X. Podręcznik użytkownika

Paragon Camptune X. Podręcznik użytkownika Paragon Software Group - PSG ul. Śląska 22/21 42-217 Częstochowa, Polska Tel.: +48 (34) 343 81 81 Internet: www.paragon-software.pl E-mail: kontakt@paragon-software.pl Paragon Camptune X Podręcznik użytkownika

Bardziej szczegółowo

Program PortaScan wersja 1.0.3. Instrukcja obsługi

Program PortaScan wersja 1.0.3. Instrukcja obsługi Porta KMI Poland Sp. z o.o. Bolszewo, ul. Szkolna 26 Program PortaScan wersja 1.0.3 Instrukcja obsługi Wykonano: Dział IT Porta KMI Poland Sp. z o.o. Program PortaScan wersja 1.0.3. Instrukcja instalacji

Bardziej szczegółowo

Backup Exec Disaster Recovery - konfiguracja płyty ratunkowej i przywracanie całego systemu operacyjnego z kopii bezpieczeństwa

Backup Exec Disaster Recovery - konfiguracja płyty ratunkowej i przywracanie całego systemu operacyjnego z kopii bezpieczeństwa Backup Exec Disaster Recovery - konfiguracja płyty ratunkowej i przywracanie całego systemu operacyjnego z kopii bezpieczeństwa Współczesne organizacje muszą dbać o ochronę kluczowych danych związanych

Bardziej szczegółowo

Client Management Solutions i Mobile Printing Solutions

Client Management Solutions i Mobile Printing Solutions Client Management Solutions i Mobile Printing Solutions Instrukcja obsługi Copyright 2007 Hewlett-Packard Development Company, L.P. Windows jest zastrzeżonym znakiem towarowym firmy Microsoft Corporation,

Bardziej szczegółowo

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 2 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

TWORZENIE PROJEKTU W RIDE

TWORZENIE PROJEKTU W RIDE TWORZENIE PROJEKTU W RIDE Zintegrowane środowisko programistyczne RIDE7 firmy Raisonance umożliwia tworzenie, kompilację i debuggowanie kodu źródłowego na wiele różnych platform sprzętowych. Pakiet oprogramowania

Bardziej szczegółowo

Wirtualizacja. Metody, zastosowania, przykłady

Wirtualizacja. Metody, zastosowania, przykłady Wirtualizacja Metody, zastosowania, przykłady Wirtualizacja - Definicja Użycie oprogramowania w celu stworzenia abstrakcji (iluzji) posiadanych zasobów. Historia Pierwsze szerzej znane zastosowanie: komputer

Bardziej szczegółowo

Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1)

Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1) Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1) 1. Ustawiamy w biosie bootowanie systemu z CD-ROMu bądź z dyskietki (tworzymy wówczas dyskietki startowe). 2. Aby rozpocząć proces instalacji

Bardziej szczegółowo

Instalacja Ubuntu 12.12

Instalacja Ubuntu 12.12 Instalacja Ubuntu 12.12 Instalację systemu operacyjnego zaczynamy jak zawsze od stworzenia (jeśli nie posiadamy oryginalnego) odpowiedniego nośnika. Można użyć płyty lub innego odpowiednio przygotowanego

Bardziej szczegółowo

Small Business Server. Serwer HP + zestaw NOWS

Small Business Server. Serwer HP + zestaw NOWS Small Business Server Serwer HP + zestaw NOWS Co to jest NOWS? Novell Open Workgroup Suite (NOWS) to: zestaw 10 rozwiązań w 1 pakiecie narzędzia do budowy infrastruktury IT całej firmy produkty dla użytkowników

Bardziej szczegółowo

DLA DREAMBOX & FLASHWIZARD

DLA DREAMBOX & FLASHWIZARD INSTALACJA I KONFIGURACJA NFS SERVER DLA DREAMBOX & FLASHWIZARD z wykorzystaniem MS Services for Unix Wymagania: Windows 2000 lub XP Professional System plików NTFS Pliki Passwd & Group które kopiujemy

Bardziej szczegółowo

Skanowanie podsieci oraz wykrywanie terminali ABA-X3

Skanowanie podsieci oraz wykrywanie terminali ABA-X3 Skanowanie podsieci oraz wykrywanie terminali ABA-X3 Terminale ABA-X3 od dostarczane od połowy listopada 2010 r. są wyposażane w oprogramowanie umożliwiające skanowanie podsieci w poszukiwaniu aktywnych

Bardziej szczegółowo

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7?

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7? Temat. Architektura systemu Windows 7. 1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7? 3) Do czego służy narzędzie BCD. Edit?

Bardziej szczegółowo

SYSTEM OPERACYJNY. Monika Słomian

SYSTEM OPERACYJNY. Monika Słomian SYSTEM OPERACYJNY Monika Słomian CEL znam podstawowe zadania systemu operacyjnego porządkuję pliki i foldery KRYTERIA rozumiem zadania systemu operacyjnego potrafię wymienić przykładowe systemy operacyjne

Bardziej szczegółowo

Silent setup SAS Enterprise Guide (v 3.x)

Silent setup SAS Enterprise Guide (v 3.x) SAS Institute TECHNICAL SUPPORT Silent setup SAS Enterprise Guide (v 3.x) Silent Setup ( cicha instalacja oprogramowania) pozwala na instalację Enterprise Guide (lub całości oprogramowania SAS) na wielu

Bardziej szczegółowo

PARAGON GPT LOADER. Przewodnik

PARAGON GPT LOADER. Przewodnik PARAGON GPT LOADER Przewodnik Koncepcja produktu Główni odbiorcy Użytkownicy Windows XP Rozmiar dysków 3TB nie jest obsługiwany przez szeroko popularny system Windows XP 32- bitowy. Pomimo, że dwie nowe

Bardziej szczegółowo

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT O co chodzi? - Przypomnienie Hackathon - http://en.wikipedia.org/wiki/hackathon A hackathon is an event in which computer programmers

Bardziej szczegółowo

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer; 14.3. Podstawy obsługi X Window 14.3. Podstawy obsługi X Window W przeciwieństwie do systemów Windows system Linux nie jest systemem graficznym. W systemach Windows z rodziny NT powłokę systemową stanowi

Bardziej szczegółowo

Metasploit Part 1. The Beginning

Metasploit Part 1. The Beginning Metasploit Part 1 The Beginning Co to jest Metasploit? Historiia Terminologia Rodzaje Payload ów Opisy modułów Podstawy Konsoli Agenda Metasploit... czyli? Framework do pentestów Napisany w Ruby Zawiera

Bardziej szczegółowo

DOS COMMAND.COM. Rys. 2. Główne moduły programowe systemu operacyjnego DOS. Interpreter poleceń. Rys. 3. Warstwowa struktura systemu DOS

DOS COMMAND.COM. Rys. 2. Główne moduły programowe systemu operacyjnego DOS. Interpreter poleceń. Rys. 3. Warstwowa struktura systemu DOS System Operacyjny DOS DOS (ang. Disc Operating System) jest to 16-bitowy jednozadaniowy system operacyjny. Głównym zadaniem systemu jest obsługa plików w systemie FAT (ang. File Allocation Table) i wsparcie

Bardziej szczegółowo

Oprogramowanie Alternatywne

Oprogramowanie Alternatywne Oprogramowanie Alternatywne Instalacja Systemów Operacyjnych Wojciech Sobieski Olsztyn 2005 System Operacyjny System operacyjny - (Operating System, OS), program (w sensie ogólnym, w realizacji układ wielu

Bardziej szczegółowo

Administracja systemem Linux p. 1

Administracja systemem Linux p. 1 Administracja systemem Linux mgr inż. Łukasz Kuczyński lkucz@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Administracja systemem Linux p. 1 Start systemu Linux Administracja systemem Linux

Bardziej szczegółowo

ERASMUS + : Trail of extinct and active volcanoes, earthquakes through Europe. SURVEY TO STUDENTS.

ERASMUS + : Trail of extinct and active volcanoes, earthquakes through Europe. SURVEY TO STUDENTS. ERASMUS + : Trail of extinct and active volcanoes, earthquakes through Europe. SURVEY TO STUDENTS. Strona 1 1. Please give one answer. I am: Students involved in project 69% 18 Student not involved in

Bardziej szczegółowo

PROFESJONALNE USŁUGI BEZPIECZEŃSTWA

PROFESJONALNE USŁUGI BEZPIECZEŃSTWA PROFESJONALNE USŁUGI BEZPIECZEŃSTWA Przewodnik instalacji i konfiguracji systemu zabezpieczeń Check Point VPN-1/FireWall-1 SmallOffice NG SmallOffice jest uproszczoną w zakresie zarządzania wersją systemu

Bardziej szczegółowo

ZAJĘCIA 4 Zarządzanie dyskami

ZAJĘCIA 4 Zarządzanie dyskami ZAJĘCIA 4 Zarządzanie dyskami Uwaga ogólna Wykonywanie niektórych ćwiczeń z bieżących zajęć wiąże się ze zmianami w sektorze rozruchowym dysku twardego, które powodują utratę dostępu do systemu Linux.

Bardziej szczegółowo

DVD MAKER USB2.0 Instrukcja instalacji

DVD MAKER USB2.0 Instrukcja instalacji DVD MAKER USB2.0 Instrukcja instalacji Spis treści V1.0 Rozdział1: Instalacja karty telewizyjnej DVD MAKER USB2.0...2 1.1. Zawartość opakowania...2 1.2. Wymagania systemowe...2 1.3. Instalacja sprzętu...2

Bardziej szczegółowo

PROFITEC TREND Exclusive OTB HDD 2,5 Enclosure

PROFITEC TREND Exclusive OTB HDD 2,5 Enclosure PROFITEC TREND Exclusive OTB HDD 2,5 Enclosure PL MT5075 Instrukcja obsługi PL 2 Spis treści Zawartość zestawu...2 Właściwości...2 Specyfikacja...2 Wymagania systemowe...3 Instalacja dysku...3 Podłączenie

Bardziej szczegółowo

SystimPlus. Dokumentacja (FAQ) dla wersji: v1.14.05.12

SystimPlus. Dokumentacja (FAQ) dla wersji: v1.14.05.12 SystimPlus Dokumentacja (FAQ) dla wersji: v1.14.05.12 Spis treści 1.Co to jest SystimPlus?... 1 2.Instalacja i wymagania... 1 3.Jakie drukarki fiskalne obsługuje SystimPlus?... 3 4.Jak połączyć się z drukarką

Bardziej szczegółowo

Instrukcja obsługi przełącznika KVM ATEN CS661. Opis urządzenia. Instalacja urządzenia

Instrukcja obsługi przełącznika KVM ATEN CS661. Opis urządzenia. Instalacja urządzenia Instrukcja obsługi przełącznika KVM ATEN CS661 Opis urządzenia Przełącznik ATEN CS661 jest urządzeniem małych rozmiarów, które posiada zintegrowane 2 kable USB do podłączenia komputera lokalnego (głównego)

Bardziej szczegółowo

Komputery bezdyskowe - wprowadzenie

Komputery bezdyskowe - wprowadzenie Komputery bezdyskowe - wprowadzenie Jakub 'skaarj' Kulczyński qba@bryza.net 3 VII 2005 Zastosowania Terminale dla pracowników w firmie Komputery domowe Stacje robocze Routery Serwery Komputer bezdyskowy

Bardziej szczegółowo

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to

Bardziej szczegółowo

Podstawy technologii informacyjnej. Beata Kuźmińska

Podstawy technologii informacyjnej. Beata Kuźmińska Podstawy technologii informacyjnej Beata Kuźmińska Podstawowe definicje Informatyka - nazwa powstała w 1968 roku, stosowana w Europie. Informatyka zajmuje się całokształtem przechowywania, przesyłania,

Bardziej szczegółowo

STATISTICA 8 WERSJA JEDNOSTANOWISKOWA INSTRUKCJA INSTALACJI

STATISTICA 8 WERSJA JEDNOSTANOWISKOWA INSTRUKCJA INSTALACJI STATISTICA 8 WERSJA JEDNOSTANOWISKOWA INSTRUKCJA INSTALACJI Uwagi: 1. Użytkownicy korzystający z systemów operacyjnych Windows 2000, XP lub Vista na swoich komputerach muszą zalogować się z uprawnieniami

Bardziej szczegółowo

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli Diagnostyka stanu nawierzchni - DSN Generalna Dyrekcja Dróg Krajowych i Autostrad Warszawa, 21 maja 2012 Historia dokumentu

Bardziej szczegółowo

Linux Elementy instalacji. 1 Podział dysku na partycje. 2 Konfiguracja sprzętu (automatycznie) 3 Założenie użytkowników

Linux Elementy instalacji. 1 Podział dysku na partycje. 2 Konfiguracja sprzętu (automatycznie) 3 Założenie użytkowników Linux: co to takiego? Linux komputerowa Linuksa i podstawowa konfiguracja Marcin Bieńkowski Instytut Informatyki Uniwersytet Wrocławski Wielozadaniowy system operacyjny Darmowy i wolnodostępny Dość podobny

Bardziej szczegółowo

inode instalacja sterowników USB dla adaptera BT 4.0

inode instalacja sterowników USB dla adaptera BT 4.0 instalacja sterowników USB dla adaptera BT 4.0 2014 ELSAT 1. Instalowanie sterownika USB dla adaptera BT4.0 Oprogramowanie do obsługi inode na komputery PC z Windows wymaga współpracy z adapterem obsługującym

Bardziej szczegółowo

Poziomy wymagań Konieczny K Podstawowy- P Rozszerzający- R Dopełniający- D Uczeń: - zna rodzaje sieci - zna topologie sieciowe sieci

Poziomy wymagań Konieczny K Podstawowy- P Rozszerzający- R Dopełniający- D Uczeń: - zna rodzaje sieci - zna topologie sieciowe sieci WYMAGANIA EDUKACYJNE PRZEDMIOT: Administracja sieciowymi systemami operacyjnymi NUMER PROGRAMU NAUCZANIA (ZAKRES): 351203 1. Lp Dział programu Sieci komputerowe Poziomy wymagań Konieczny K Podstawowy-

Bardziej szczegółowo

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie Strona 1 z 5 Połączenia Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie Przed instalacją oprogramowania drukarki do systemu Windows Drukarka podłączona lokalnie to drukarka

Bardziej szczegółowo

Warstwy systemu Windows 2000

Warstwy systemu Windows 2000 Warstwy systemu Windows 2000 Tryb użytkownika (User Mode) Tryb jądra (Kernel Mode) Tryb użytkownika (User Mode) Zarządzanie pamięcią wirtualną Cechy charakterystyczne systemu Windows XP: system bardzo

Bardziej szczegółowo

OPTIMA PC v2.2.1. Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 2011 ELFON. Instrukcja obsługi. Rev 1

OPTIMA PC v2.2.1. Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 2011 ELFON. Instrukcja obsługi. Rev 1 OPTIMA PC v2.2.1 Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 Instrukcja obsługi Rev 1 2011 ELFON Wprowadzenie OPTIMA PC jest programem, który w wygodny sposób umożliwia konfigurację

Bardziej szczegółowo

Instalacja Linuksa i podstawowa konfiguracja. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Instalacja Linuksa i podstawowa konfiguracja. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski komputerowa Instalacja Linuksa i podstawowa konfiguracja Marcin Bieńkowski Instytut Informatyki Uniwersytet Wrocławski komputerowa () Instalacja Linuksa 1 / 17 Linux: co to takiego? Linux Wielozadaniowy

Bardziej szczegółowo

Comodo Endpoint Security Manager instrukcja instalacji.

Comodo Endpoint Security Manager instrukcja instalacji. Comodo Endpoint Security Manager instrukcja instalacji. Na początek pobierz i uruchom plik instalacyjny. Link do tego pliku znajduje się w e-mailu potwierdzającym wraz z otrzymaną licencją. Plik ten należy

Bardziej szczegółowo

Podstawowa konfiguracja routerów. Interfejsy sieciowe routerów. Sprawdzanie komunikacji w sieci. Podstawy routingu statycznego

Podstawowa konfiguracja routerów. Interfejsy sieciowe routerów. Sprawdzanie komunikacji w sieci. Podstawy routingu statycznego Podstawowa konfiguracja routerów Interfejsy sieciowe routerów Sprawdzanie komunikacji w sieci Podstawy routingu statycznego Podstawy routingu dynamicznego 2 Plan prezentacji Tryby pracy routera Polecenia

Bardziej szczegółowo

Instalacja Windows XP z USB, pendrive-a lub karty pamięci flash

Instalacja Windows XP z USB, pendrive-a lub karty pamięci flash Instalacja Windows XP z USB, pendrive-a lub karty pamięci flash W tym artykule przedstawię jak przygotować instalacje Winodws XP uruchamianą z pamięci USB (Pendrive), zewnętrznych dysków HDD czy kart pamięci

Bardziej szczegółowo

Konfiguracja podglądu obrazu z kamery IP / rejestratora BCS przez sieć LAN.

Konfiguracja podglądu obrazu z kamery IP / rejestratora BCS przez sieć LAN. Konfiguracja podglądu obrazu z kamery IP / rejestratora BCS przez sieć LAN. Aby oglądać obraz z kamery na komputerze za pośrednictwem sieci komputerowej (sieci lokalnej LAN lub Internetu), mamy do dyspozycji

Bardziej szczegółowo

INSTRUKCJA INSTALACJI

INSTRUKCJA INSTALACJI INSTRUKCJA INSTALACJI TcpMDT ver. 7 Aplitop, 2014 C/ Sumatra, 9 E-29190 MÁLAGA (SPAIN) web: www.aplitop.com e-mail: support@aplitop.com Spis treści Instalacja MDT ver. 7... 3 Wymagania systemowe... 3 Menu

Bardziej szczegółowo

Opis administracji terminali ABA-X3 v.1.5.0

Opis administracji terminali ABA-X3 v.1.5.0 Opis administracji terminali v.1.5.0 System terminalowy jest scentralizowany oznacza to, że Użytkownik stacji roboczej (terminala) jest całkowicie uzależniony od konfiguracji wprowadzonej przez Administratora.

Bardziej szczegółowo

Część zadań będzie już zrobiona, np. część programów zainstalowana, ale proszę przeczytać instrukcje i ew. np. zainstalować w domu.

Część zadań będzie już zrobiona, np. część programów zainstalowana, ale proszę przeczytać instrukcje i ew. np. zainstalować w domu. Część zadań będzie już zrobiona, np. część programów zainstalowana, ale proszę przeczytać instrukcje i ew. np. zainstalować w domu. Najpierw zainstalujemy program do symulowania napędu CD/DVD, żeby móc

Bardziej szczegółowo

Video Recording Manager export Wizard Version 1.0. Instrukcja obsługi oprogramowania

Video Recording Manager export Wizard Version 1.0. Instrukcja obsługi oprogramowania Video Recording Manager export Wizard Version 1.0 pl Instrukcja obsługi oprogramowania Video Recording Manager export Wizard Spis treści pl 3 Spis treści 1 Wstęp 4 2 Ogólne informacje o systemie 4 3 Instalacja

Bardziej szczegółowo

ABA-X3 PXES v. 1.5.0 Podręczna instrukcja administratora. FUNKCJE SIECIOWE Licencja FDL (bez prawa wprowadzania zmian)

ABA-X3 PXES v. 1.5.0 Podręczna instrukcja administratora. FUNKCJE SIECIOWE Licencja FDL (bez prawa wprowadzania zmian) Grupa Ustawienia Sieciowe umożliwia skonfigurowanie podstawowych parametrów terminala: Interfejs ETH0 Umożliwia wybór ustawień podstawowego interfejsu sieciowego. W przypadku wyboru DHCP adres oraz inne

Bardziej szczegółowo

Automatyczna instalacja oraz zmiana konfiguracji w ramach całego klastra.

Automatyczna instalacja oraz zmiana konfiguracji w ramach całego klastra. Automatyczna instalacja oraz zmiana konfiguracji w ramach całego klastra. WP 12 Marek Zawadzki Częstochowa Gdańsk, Poznań, Zielona Góra Plan prezentacji: zarządzanie oprogramowaniem

Bardziej szczegółowo

Instalacja programu Warsztat 3 w sieci

Instalacja programu Warsztat 3 w sieci Instalacja programu Warsztat 3 w sieci (proszę uważnie przeczytać do końca) Spis treści 1 Przed instalacją...2 2 Przeprowadzanie po raz pierwszy instalacji sieciowej...3 2.1 Dane umieszczone na jednej

Bardziej szczegółowo

MS Windows Vista. Spis treści. Autor: Jacek Parzonka, InsERT

MS Windows Vista. Spis treści. Autor: Jacek Parzonka, InsERT MS Windows Vista Autor: Jacek Parzonka, InsERT Spis treści SPIS TREŚCI... 1 WSTĘP... 2 PROBLEMY... 2 UŻYWANIE AUTENTYKACJI WINDOWS DLA MS SQL SERVERA 2005 EXPRESS... 2 Run as administrator... 3 Modyfikacja

Bardziej szczegółowo

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty MeetingHelper Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania Instrukcja obsługi dla programisty W tej części został zawarty opis uruchamiania projektu programistycznego,

Bardziej szczegółowo

Instrukcja instalacji Zespołu Diagnostycznego Delphi w systemie Vista.

Instrukcja instalacji Zespołu Diagnostycznego Delphi w systemie Vista. Instrukcja instalacji Zespołu Diagnostycznego Delphi w systemie Vista. Przed przejściem do dalszej części niniejszej instrukcji upewnij się, czy modułbluetooth, który jest zamontowany w Twoim urządzeniu

Bardziej szczegółowo

Volume Snapshot for Mac OS X. Podręcznik użytkownika

Volume Snapshot for Mac OS X. Podręcznik użytkownika Volume Snapshot for Mac OS X Podręcznik użytkownika Spis treści Wstęp...3 Omówienie funkcji...3 Główne funkcje...3 Obsługiwane nośniki...3 Migawka kontra archiwizacja pliku...4 Pierwsze kroki...4 Wymagania

Bardziej szczegółowo

Obudowa zewnętrznego dysku USB 2.0, 2.5" (6.35cm)

Obudowa zewnętrznego dysku USB 2.0, 2.5 (6.35cm) Obudowa zewnętrznego dysku USB 2.0, 2.5" (6.35cm) Podręcznik użytkownika DA-71001 DA-71002 Przedmowa Gratulujemy zakupu naszego produktu! Przedstawimy nową koncepcję zapisu łączącą bezpieczeństwo z wygodą.

Bardziej szczegółowo