Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zarządzanie i integracja aplikacji Java EE

Podobne prezentacje


Prezentacja na temat: "Zarządzanie i integracja aplikacji Java EE"— Zapis prezentacji:

1 Zarządzanie i integracja aplikacji Java EE
Przemysław Nowak

2 Literatura Bezpieczeństwo w Unixie i Internecie, Simson Garfinkel, Gene Spafford, O’Reilly & Associates, Inc. Wydawnictwo RM, 1997 Nie tylko wirusy - hacking, cracking, bezpieczeństwo Internetu, Andrzej Dudek, Wydawnictwo Helion Polityka bezpieczeństwa i ochrony informacji. Tadeusz Kifner , Wydawnictwo Helion pl.comp.security comp.os.linux.security comp.os.ms-windows.nt.admin.security comp.os.netware.security comp.security.unix i wiele innych ...

3 konfiguracja, administracja systemu
Unix (Linux) konfiguracja, administracja systemu

4 System Unix MULTICS - 1960, AT&T, GE, MIT, projekt DARPA
Unix (PDP 7) PDP 11 język C Unix BSD Unix AT&T SVR3 Unix SVR4, Unix OSF/1

5 System Unix - rodzina Unix Siódmego Wydania BSD System V3 OSF/1
FreeBSD SCO Unix BSD/OS Solaris SunOS AIX Linux

6 Linux - inicjowanie systemu
reset, BIOS ładowanie programu rozruchowego ładowanie jądra (LILO, LoadLin) inicjalizacja obszarów roboczych jądra, sprzętu, systemu plików, terminali, montowanie dysków (dmesg) init (inittab) rc.d (styl BSD i System V) procesor Pentium po resecie rozpoczyna pracę w „trybie rzeczywistym” od adresu FFFF0 (BIOS POST), następnie jest czytany program startowy z MBR głównego dysku lub dyskietki (podobnie CD-ROM el-torito), następnie ładuje się jądro, ustawiane są deskryptory segmentów dla trybu wirtualnego, włączany jest tryb wirtualny... When an Intel based computer system is turned on, the BIOS goes through a simple procedure that triggers the booting of an operating system. The BIOS reads the first physical sector of the disk into memory locations 0000:7C00 through 0000:7DFF and performs a JMP to it. On hard disks, the first physical sector is the Master Boot Record. For floppy drives, the first physical sector is the Boot Sector. The master boot record is needed for hard disks because hard disks can be partitioned into multiple logical drives. The BIOS does not care whether it is loading a master boot record or a boot sector. When booting from hard disks, the master boot record moves itself to 0000:0600, and then overwrites it's original location (0000:7C00) with the boot sector. When booting from a floppy drive, which has no partitioning information and therefore no master boot record, only the boot sector is effectively loaded. The master boot record program is simpler to follow in comparison to the boot sector program (examples of both programs for DOS based systems may be obtained in commented assembler source from the author's web page). A DOS boot sector program actually overwrites sections of itself in order to squeeze BIOS data into the 512 byte block of usable memory. Why it does this instead of simply using another region of memory to store the BIOS data is beyond me. The boot sector is a somewhat ugly assembler program to look at. When the boot sector is executed, none of the DOS interrupt handlers are in place yet. Everything must be done through the BIOS. The actual code in the boot sector varies depending on the operating system, yet it always attempts to boot the operating system. Note that the format of the disk is irrelevant, as the boot sector program uses only physical addresses and low level BIOS functions to access the drives.

7 /etc/inittab /etc/inittab
Plik definiuje czynności które proces init powinien wykonywać gdy system przechodzi na poszczególne poziomy pracy. identyfikator : poziomy_startu : akcja : proces si::sysinit:/etc/rc.d/rc.sysinit pf::powerfail:/sbin/genpowerfail start c1:1235:respawn:/sbin/agetty tty1 linux /etc/rc.d/rc.sysinit Skrypt uruchamiany przy starcie systemu. Powinien zawierać podstawową inicjalizację systemu, taką jak przyłączanie lokalnych i systemowych partycji, włączanie ograniczeń dla użytkowników, ustawienie zegara systemowego czy załadowanie modułów systemu. 'Identyfikator' jest sekwencją max. do czterech znaków identyfikującą rekord danych w pliku. 'Poziomy_startu' podają listę poziomów, przy przejściu na które ma być uruchamiany dany proces. 'Akcja' opisuje akcję, która ma zostać podjęta, a 'proces' specyfikuje proces do uruchomienia.

8 Skrypty startowe (SystemV)
/etc/rc.d/init.d/ Katalog zawierający skrypty uruchamiające i zatrzymujące poszczególne serwisy i demony podczas przejść pomiędzy różnymi poziomami startu. /etc/rc.d/rcX.d/ Katalogi zawierające dowiązania do tych skryptów z katalogu /etc/rc.d/init.d/, które mają zostać uruchomione bądź zatrzymane przy przejściu na konkretny poziom startu systemu. X oznacza numer poziomu startu. /etc/rc.d/rc Skrypt wykonywany przy zmianie poziomu startu systemu. Uruchamia wszystkie skrypty z odpowiedniego katalogu /etc/rc.d/rcX.d, podając im parametr w zależności od pierwszej litery w nazwie dowiązania: S oznacza, że skrypt ma uruchomić dany serwis lub demona, zaś K znaczy, że serwis ten należy zamknąć. /etc/rc.d/rc.local Skrypt wykonywany jako ostatni przy starcie systemu. Może uruchamiać różne dodatkowe procesy. /etc/profile Plik zawiera ustawienia zmiennych środowiskowych przy starcie systemu.

9 Skrypty Bourne’a nigdy SUID, jeżeli tak jednak być musi należy napisać C wrapper wywołujący (exec) skrypt jedna z pierwszych instrukcji: IFS= następna w kolejności: PATH= (bo inaczej te zmienne są dziedziczone) csh nie używać! problemy z wieloma rzeczami... (http://www.ooblick.com/text/CshProgrammingConsideredHarmful.ht ml)

10 Linux - podstawowe elementy
jądro, funkcje systemowe, moduły jądra procesy i wątki, sygnały, identyfikatory procesów, inne atrybuty zarządzanie pamięcią system plików, prawa dostępu, rodzaje plików urządzenia fizyczne sieć, konfiguracja, usługi użytkownicy, grupy, kontrola dostępu, uprawnienia, użytkownik root, jądro - zapewnia przełączanie między programami, przydziela pamięć, obsługuje urządzenia fizyczne, zapewnia usługi w postaci funkcji systemowych jądro monolityczne i mikrojądro, moduły proces 0 - samo jądro (szeregowanie zadań), proces 1 - init, każdy proces (oprócz 0) posiada proces macierzysty, procesy mogą być uszeregowane w grupy, proces posiada 3 identyfikatory, proces posiada także deskryptory otwartych plików, priorytet (nice), ograniczenie wielkości pliku, środowisko: zmienne - katalog bieżący i ścieżki, umask atrybuty pliku: nazwa, właściciel, grupa, prawa dostępu, licznik dowiązań, SUID, GUID, i-węzły, katalogi urządzenia znakowe i blokowe, dyski, terminale protokół IP, konfiguracja interfejsu sieciowego (ifconfig), adresy (/etc/hosts, DNS), usługi (/etc/services, /etc/inetd), zdalne terminale (telnet), dostęp do plików (ftp, nfs), poczta elektroniczna, usługi adresowe, data i czas, zdalne wywoływanie procdur lista użytkowników (/etc/passwd), identyfikatory i hasła (/etc/passwd, /etc/shadow), zmiana tożsamości (su), katalog domowy, powłoka (shell), przynależność do grup (/etc/groups), uprawnienia użytkownika root (UID 0)

11 System plików UNIXa Blok startowy Blok specjalny Bloki struktur i-node
Bloki danych 1 2... dysk (partycja) jest podzielony na bloki system plików posługuje się pojęciem i-node i-node (i-węzeł) odpowiada plikowi, katalogowi lub innym obiektom (pliki specjalne, gniazdka, kolejki FIFO) Blok specjalny zawiera informacje dotyczące całego systemu plików (rozmiar bloku, liczba bloków, typ systemu plików, liczba i-węzłów, prawa dostępu i czas ostatniej zmiany...) Lista i-węzłów zaczyna się od bloku o numerze 2. I-węzły są numerowane od 1, ale węzła o numerze 1 nie używa żaden plik - może on być używany przez listę uszkodzonych bloków dyskowych. Główny katalog dysku zaczyna się od i-węzła o numerze 2.

12 Budowa i-node Prawa dostępu Blok danych Właściciel Blok danych Rozmiar
Czasy ... Blok danych Blok danych ... Bezpośrednie wskazania bloków danych Blok danych Blok pośredni Blok danych Dwustopniowe wskazanie pośrednie Blok danych Trójstopniowe wskazanie pośrednie Blok danych

13 Użytkownicy i ich działania
identyfikatory hasła grupy superużytkownik (root) system plików i uprawnienia użytkowników programy SUID i GUID polecenie chown /etc/passwd - baza danych o użytkownikach i ich hasłach (w nowszych systemach /etc/shadow) Nazwa - dowolny ciąg znaków (od 1 do 8, czasem więcej, zaleca się litery i cyfry, nazwy zawierające znaki specjalne mogą być źródłem problemów) Hasło - dowolny ciąg znaków (od 1 do 8, czasem więcej, nie zaleca się jedynie znaków kontrolnych, które mogą być interpretowane przez terminal), w pliku /etc/passwd (lub /etc/shadow) w postaci zaszyfrowanej (hasła użytkownika używa się jako klucza algorytmu DES i szyfruje się 25 razy dane zerowe, w procesie szyfrowania uwzględnia się „sól” - jedną z 4096 wartości) wynik szyfrowania (64 bity) zamienia się na 11 znaków, dodaje 2 znaki „soli” i zapisuje w pliku /etc/passwd. Niektóre systemy sieciowe (np.. NIS, NIS+ firmy Sun operują na sieciowej wersji bazy danych /etc/passwd) Zmiana hasła - program passwd (zaleca się sprawdzić możliwość logowania po zmianie hasła), można wymuszać „silne” hasła, okresową zmianę hasła „Złe hasła” = drzwi otwarte Zapisywanie haseł - hasło nie może wyglądać jak hasło! Hasła jednorazowe, tokeny Używanie haseł w kilku miejscach Identyfikatory użytkowników i grup (/etc/groups) Konto superużytkownika - każde konto z UID równym 0 Znajdowanie programów z SUID i SGID: find / \(-perm o -perm \) -type f -print Znajdowanie plików urządzeń: find / \( -type c -o -type b \) -exec ls -l {} \;

14 Użytkownicy - plik /etc/passwd
Plik zawierający dane o użytkownikach systemu i ich hasłach. Informacja jest podana następująco: identyfikator : zaszyfrowane_hasło : numer_użytkownika : numer_grupy : katalog_domowy : interpretator_poleceń Hasła są podane w postaci zaszyfrowanej. tomek:&1$2fg5zZ#$1$mTx/.Y5:505:501:/home/tomek/:/bin/bash Ze względu na bezpieczeństwo zaszyfrowane hasła mogą być umieszczane w pliku /etc/shadow, z prawami do czytania tylko dla administratora systemu, wówczas w pliku /etc/passwd w ich miejsce umieszcza się '*'.

15 Linux - logowanie użytkowników
init inittab fork, exec getty getty getty ..... exec podanie nazwy użytkownika login passwd chdir, setgid, setuid, exec shell podanie hasła (jeżeli potrzebne) sh

16 /etc/bashrc Plik zawiera ustawienia niektórych zmiennych środowiskowych oraz synonimów wspólnych dla wszystkich użytkowników.

17 Ochrona kont użytkowników
konta bez haseł tomek::101:100:Tomasz Bezhasla:/home/tomek:/bin/bash konta grupowe martwe konta usermod ... konta domyślne news:x:9:13:news:/usr/lib/news: konta uruchamiające jedno polecenie date::99:100:date:/tmp:/sbin/date konta z ograniczonymi interpreterami (bash -r) tomek::101:100:Tomasz Ograniczony:/home/tomek:/bin/bash -r konta z ograniczonym systemem plików tomek::101:100:Tomasz Ograniczony:/home/tomek:* ograniczenia pory logowania bash -r (rbash) nie można zmieniać katalogu przez cd nie można zmieniać wartości zmiennych środowiskowych SHELL, PATH, ENV, BASH_ENV nie można używać / w nazwach programów używać przekierowywania strumieni >, <, >>, &>, >& używać exec aby zmienić używany interpreter poleceńte oraz inne ograniczenia te ograniczenia są nieaktywne w skryptach uruchomionych za pośrednictwem bash

18 Grupy użytkowników /etc/group
Plik zawiera informacje o grupach użytkowników w systemie. Każda linia jest formatu: identyfikator_grupy : zaszyfrowane_hasło : numer_grupy : lista_użytkowników users::501:tomek,jurek,ania

19 Złe hasła imiona i nazwiska osób (rodziny, szefów, znajomych, dzieci), zwierząt imiona postaci bajkowych (np. frodo, gandalf itp.) nazwa systemu operacyjnego i komputera numery telefonów, numery rejestracyjne samochodów daty urodzenia inne informacje dające się łatwo zdobyć (np. adresy) nazw użytkowników w żadnej postaci (np. pisanych wielkimi literami lub podwójnie) słów ze słowników (także z innych języków) nazw własnych (miejsc, państw, krain geograficznych) wyrazów składających się z powtórzonej jednej litery (np. aaaaaaaa), prostych wzorów (np. qwerty) każdego z powyższych napisanych wspak każdego z powyższych z dołączoną jedna cyfrą

20 Dobre hasła wielkie i małe litery jednocześnie
cyfry i/lub znaki interpunkcyjne pomieszane z literami zawierają pewne znaki kontrolne lub spacje są łatwe do zapamiętania są przynajmniej siedmioznakowe dają się szybko wpisać

21 Specjalne metody identyfikacji
Hasła jednorazowe (np. OPIE - One time Password In Everything) Tokeny (np. SecurID firmy Secure Dynamics, NetSecure firmy Digital Pathways) systemy wykorzystujące cechy biofizyczne użytkowników

22 Ochrona konta root bezpieczne terminale grupa wheel /etc/securetty
/etc/suauth root:user1,usr2:OWNPASS root:ALL EXCEPT GROUP WHEEL:DENY usr1:user10:NOPAS /etc/securetty - plik zawierający nazwy terminali, z których administrator może się logować do systemu.

23 Uprawnienia użytkownika root
zmiana wartości nice dowolnego procesu wysyłanie dowolnych sygnałów do dowolnych procesów zmiana ograniczeń systemowych (max. czas CPU, max.rozmiary plików itp..) włączanie i wyłączanie rozliczania zmiana identyfikatora na dowolnego użytkownika (polecenie su) wylogowywanie użytkowników oraz przeładowywanie systemu zalogowanie się pomimo istnienia pliku /etc/nologin ustawianie czasu dostęp do wszystkich urządzeń odczyt i zmiana dowolnego obszaru pamięci tworzenie plików urządzeń w dowolnych miejscach systemu plików (mknod)

24 Uprawnienia użytkownika root (cd)
uruchamianie usług sieciowych na „zaufanych” portach rekonfiguracja sieci włączanie trybu „promiscous” interfejsu sieciowego odczyt, zmiana, usuwanie plików i programów uruchamianie dowolnego programu montowanie i odmontowywanie systemu plików dodawanie, usuwanie, zmiana kont użytkowników regulowanie ograniczeń miejsca na dysku i ustawianie systemu rozliczania używanie polecenia chroot zapisywanie plików pomimo 100% zapełnienia dysku

25 Uprawnienia użytkownika root (czego root nie może)
dokonywać zmian w systemie plików zamontowanym „read only” - ale może pisać do „surowego” urządzenia lub zamontować dysk „read/write” odmontować system plików zawierający otwarte pliki lub w którym jakiś proces ma swój bieżący katalog odszyfrować zawartość pliku /etc/passwd - ale może zmodyfikować program login, tak aby hasła użytkowników były logowane, może też poleceniem passwd zmienić hasło konta z powyższych wynikają pewne przesłanki: wybrane pliki należy zapisywać na nośnikach wymiennych ważne pliki należy szyfrować jeżeli to możliwe, dyski należy montować w trybie „read only” należy tworzyć kopie zapasowe działającego systemu

26 Konfigurowanie systemu Linux

27 Konfiguracja typowe urządzenia i linki do nich (mouse, modem, cdrom, zip) punkty montowania dysków (szczególnie wymiennych) drukarka interfejs sieciowy konfiguracja autoryzacja ftp, telnet, ssh i inne usługi poczta (mime) nfs, samba, ncp (klient, server) ppp httpd X server linuxconf i inne

28 Typowe urządzenia i linki do nich (mouse, modem, cdrom, zip)
/dev/mouse -> /dev/psaux (dla gpm) /dev/modem -> /dev/ttyS0 (dla minicom) /dev/cdrom -> /dev/hdc /dev/sda4 -> /dev/zip wiele programów odwołuje się do urządzeń fizycznych w „standardowy” sposób, dla ułatwienia sobie życia należy utworzyć linki na ogół można również znienić prawa dostępu do tych urządzeń, tak aby użytkownicy mogli ich używać np: ln -s /dev/ttyS0 /dev/modem

29 Punkty montowania dysków
/etc/fstab, /etc/mtab Np.: /dev/fd0 /mnt/floppy auto user,noauto 0 1 /dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 1 /dev/zip /mnt/zip vfat user,noauto,exec 0 1 /dev/hda1 /mnt/win vfat user,noauto 0 1 server:/export /mnt/server nfs defaults mount /mnt/cdrom mount -t iso9660 -o ro,user,noauto /dev/cdrom /mnt/cdrom /etc/fstab - zawiera statyczne informacje o różnych systemach plików przyłączonych do systemu. Jest on czytany przez programy ale nie zmieniany. Każda linia ma postać: s_block_dev mount_point fstype mntops freq passno s_block_dev - specjalne urządzenie blokowe lub zdalny system plików, który ma zostać przyłączony. mount_point - punkt przyłączenia danego systemu plików w drzewie katalogów. fstype - typ systemu plików, np. ext2 albo msdos. Typ systemu plików „auto” - wygodne dla dyskietek z systemami „msdos” i „vfat” oraz dla automounter'ów - próbowane są wszystkie rozpoznawalne typy na podstawie „superblock”, można usystematyzować poszukiwania plikiem /etc/filesystems mntops - opcje używane przy przyłączaniu danego systemu plików. Różne typy systemów plików używają specyficznych dla siebie opcji (należy czytać manual - polecenie mount) freq - parametr używany przez komendę dump. passno - parametr używany przez program fsck do ustalenia kolejności sprawdzania systemów plików. /etc/mtab - aktualna lista zamontowanych systemach plików (podobnie jak /proc/mounts). Są to wiadomości zmieniane dynamicznie przez komendy mount i unmount. Format danych jest taki sam jak w pliku /etc/fstab.

30 Drukarki z portem równoległym (/dev/lp0), szeregowym (/dev/ttyS0), USB (/dev/usb/lp0), drukarki sieciowe tzw. drukarki GDI (Windows) na ogół nie są obsługiwane! Postscript lub ghostscript oprócz lpd czasem używane są również takie systemy jak LPRng jest możliwe skonfigurowanie drukarki tak, aby drukowała na drukarkach sieciowych innego systemu wykorzystującego lpd, samba oraz ncp drukarką może być fax-modem z oprogramowaniem (np.. efax, mgetty) aby ustawić „standardową” drukarkę należy zdefiniować zmienną środowiska (np.. dla bash) PRINTER="printer_name"; export PRINTER

31 LPD - Line Printer Deamon
lpd - spooling system (lpd, lpr, lpq, lpc, lprm) baza danych - /etc/printcap # LOCAL djet500 lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:

32 CUPS - Common UNIX Printing System
obsługuje IPP (Internet Printing Protocol) administracja, konfiguracja, status itp. przez WWW lub przez lpadmin obsługa szyfrowania (TLS i SSL) obsługa rozliczania (zadania/strony) sterowanie dostępem dla użytkowników obsługa PPD (PostScript Printer Description) API oraz biblioteki konfiguracja klienta - /etc/cups/client.conf

33 Interfejs sieciowy ifconfig lo 127.0.0.1 route add -host 127.0.0.1 lo
ifconfig eth netmask up route add -net netmask eth0 route add default gw eth0 /etc/services, /etc/protocols /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/wu.ftpd -l -i -a - v telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd istotne informacje zawierają również pliki: /etc/services, /etc/protocols, /etc/networks

34 Interfejs sieciowy cd.. /etc/host.equiv, ~/.rhosts Demon tcpd:
logowanie i sterowanie dostępem (/etc/host.allow, /etc/host.deny) # <service list>: <host list> [: command] /etc/hosts, /etc/networks, /etc/nsswitch.conf, /etc/resolv.conf masquarading, firewall - będzie jeszcze o tym mowa.... ipchains, iptables ipchains -A forward -s /24 -j MASQ

35 Interfejs sieciowy - filtr pakietów
Warstwa aplikacji Programy klientów i serwerów Zapora sieciowa Źrodłowe i docelowe porty TCP/UDP Znaczniki stanu połączeń TCP Źródłowe i docelowe adresy IP Komunikaty ICMP Warstwa transportowa TCP, UDP Warstwa sieci IP, ICMP Warstwa łącza danych adresy MAC Sprzęt

36 ipchains (kernel 2.2.x) Suma kontrolna Poprawność Łańcuch wejściowy
Demaskarada DENY DENY DENY / REJECT Łańcuch przekazujący Decyzja o rutingu Łańcuch wyjściowy DENY / REJECT DENY / REJECT Proces lokalny

37 iptables (kernel 2.4.x) Suma kontrolna Poprawność Decyzja o rutingu
DROP DROP Decyzja o rutingu Łańcuch przekazujący Decyzja o rutingu DROP / REJECT Łańcuch wyjściowy Łańcuch wejściowy DROP / REJECT DROP / REJECT Proces lokalny

38 Interfejs sieciowy cd.. Serwer ftp: - /etc/ftpusers
wu.ftpd, proftpd... anonymous ftp -> wydzielony system plików i chroot serwer - sendmail, qmail klient - mail, pine fetchmail nfs: /etc/fstab, /etc/exports /home / (rw, no_root_squash)

39 Interfejs sieciowy cd.. DNS: bind /etc/named.conf
bind uruchamiany na poziomie uprzywilejowania nadzorcy, zwykłego użytkownika, w pułapce chroot traffic shaper tc

40 Interfejs sieciowy cd.. samba: /etc/smb.conf dial-in server: mgetty
ppp: /usr/sbin/pppd, /etc/ppp/*, /etc/inittab http: /usr/lib/apache/*

41 Program routed uruchamiany przy starcie systemu (ze skryptów rc.d)
sprawdza, które interfejsy sieciowe są skonfigurowane i czynne (muszą być co najmniej 2) wysyła i odbiera w pętli komunikaty oraz modyfikuje tablice rutowania w jądrze /etc/gateways - dodatkowy plik konfiguracyjny net/host - trasa wiedzie do sieci/komputera nazwa1 - nazwa sieci lub komputera (/etc/networks, /etc/hosts, DNS lub vv.xx.yy.zz) nazwa2 - nazwa rutera pośredniczącego (opis jw) wartość - liczba przeskoków passive - ruter nie wymienia informacji poprzez RIP, trasa do niego jest instalowana w jądrze po starcie routed i nigdy się nie zmienia, nie jest też rozgłaszana active - ruter wymienia informacji poprzez RIP, trasa do niego jest traktowana identycznie jak trasy zidentyfikowane poprzez interfejsy sieciowe external - ruter zewnętrzny (pasywny), informuje routed że inny proces będzie się zajmował tą ścieżką i nie należy jej ani uwzględniać, ani rozgłaszać ani używać (użyteczne gdy dwa rutery mają dostęp do tego samego rutera zewnętrznego) <net | host> nazwa1 gateway nazwa2 metric wartość <passive | active | external>

42 Program gated obsługuje protokoły wewnętrzne RIP, OSPF, Hello, ISIS
obsługuje protokoły zewnętrzne EGP, BGP mogą być uruchomione jednocześnie różne protokoły ścieżki wyznaczone przez protokół wewnętrzny mogą być publikowane przez protokół zewnętrzny polecenia konfiguracyjne w jednym pliku za pomocą spójnej składni

43 Program gated - konfiguracja (1)
zawartość pliku /etc/gated.conf emulacja routed rip yes ; - emulacja routed „pasywnego” rip yes { nobroadcast ; } ;

44 Program gated - konfiguracja (2)
Protokół RIP i OSPF interfaces { interface le0 passive ; } ; autonomoussystem 283 ; snmp yes ; rip yes { broadcast ; defaultmetric 5 ; interface le version 2 multicast ; ospf yes { traceoptions lsabuild protocol; monauthkey "XXXXXXXX" ; backbone { authtype simple ; interface al. { priority 2 ; } ; interface le { authkey "YYYYYYYY" ; }; static { default gateway preference 140 retain ; rip broadcast - rozgłaszanie nawet wtedy jeżeli jest tylko jeden interfejs sieciowy rip defaultmetric - miara odległości dla ścieżek otrzymanych od innych protokołów ospf traceoptions lsabuild - śledzenie budowy komunikatów LSA (Link State Advertisement) ospf monauthkey - hasło dla monitorowania programem ospf_monitor ospf backbone - definicja obszaru ospf backbone priority - priorytet przy wyborze jako ruter dedykowany ospf backbone authkeu - hasło autoryzacji pakietów ospf static - ścieżka statyczna static preference - preferencja ścieżki static retain - ścieżka ma być wykorzystywana nawet gdy nie działa gated

45 Program gated - konfiguracja (3)
export proto ospfase type 1 { proto bgp as { ALL metric 1; }; proto direct { }; export proto bgp as 2021 { proto ospfase { ospf yes { area { authtype none; networks { mask ; }; interface cost 1 { retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; routerdeadinterval 40; }; interface retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; }; backbone { interface retransmitinterval 5; transitdelay 1; priority 1; hellointerval 60; routerdeadinterval 180; }; Szkielet OSPF (Area ) Ruter ID: AS: 1019 bgp yes { preference 50; group type External peeras 2021 { peer ; }; IGP peeras 1019 peer ; BGP IGP Ruter A interfaces { options all passive; }; autonomoussystem 1019; routerid ; rip no; hello no; egp no; OSPF Area: bgp group type external peeras - bgp jest używany jako klasyczny protokół bramki brzegowej (wszyscy sąsiedzi z grupy należą do zewnętrznego AS) bgp group type external peeras .... peer - sąsiad o numerze jest członkiem grupy BGP External: do AS 2021

46 X Server programy do konfiguracji:
XF86Setup, XConfigurator, xf86config /etc/inittab id:4:initdefault: x1:4:wait:/etc/rc.d/rc.4 ~/.xinitrc, ~/.xsession ~/.Xdefaults XF86Setup: konfiguracja sprzętu (myszka, karty graficzna, monitor) xdm, kdm, gdm - program zastępujący login, uruchamiany (np.) .ze skryptu rc.4 xinit - „surowy” start Xwindows (umożliwia wybór manager X spośród wielu dostępnych - KDE, GNOME, FVWM, itp.) startx - skrypt uruchamiający Xwindows ~/.xinitrc - skrypt inicjalizacyjny (zawiera listę poleceń wykonywanych przy starcie) ~/.Xdefaults - ustawienia systemu X (lista czcionek, rozmiary i położenie okien, kolory itp..)

47 Demony systemowe cron bind syslogd, klogd inetd i inne

48 Konfiguracja cron’a - crontab
/etc/crontab minuty godzina dzień_miesiąca miesiąc dzień_tygodnia program_do_wykonania znak '*' oznacza wykonanie o każdej dozwolonej wartości dla danego pola, można podawać listy wartości i zakresy plik crontab zawiera instrukcje dla demona cron służącego do uruchamiania różnych programów o ściśle określonych porach. Plik powinien ustawiać potrzebne zmienne systemowe: ścieżka interpretatora poleceń (SHELL), który ma być użyty do wykonania podanych dalej programów, ścieżki dostępu do tych programów (PATH), ewentualnie także nazwa użytkownika, do którego ma być wysyłana poczta będąca wynikiem wykonania podanych poleceń (MAILTO). Następne linie opisują kiedy i jakie programy powinny być uruchamiane. Uwaga: do edycji pliku należy stosować polecenie crontab -e zamiast normalnej edycji.

49 Sciany ogniowe (firewall) (1)
atak sieciowy

50 Sciany ogniowe (firewall) (2)
www nieuzasadnione korzystanie z zasobów sieciowych

51 Sciany ogniowe (firewall) (3)
blokowanie dostępu do całej sieci z określonych miejsc w Internecie monitorowanie komunikacji, nawet rejestrowanie całej wymiany danych (nieocenione w przypadkach analizy zdarzeń) szyfrowanie/deszyfrowanie ruchu pomiędzy oddziałami organizacji ściana ogniowa pozwala na filtrowanie pakietów

52 Filtracja pakietów (1) filtracja na podstawie typu protokołu (np. blokowanie komunikatów ICMP) filtracja poziomu warstwy sieciowej (IP) przekazanie pakiety na podstawie adresów IP nadawcy i/lub odbiorcy filtracja poziomu warstwy transportowej (na podstawie numerów portów - rodzajów usług) filtracja na poziomie warstwy aplikacji (serwery proxy) NAT (masquarading) - ukrywanie struktury sieci

53 Filtracja pakietów (2) filtracja statyczna filtracja dynamiczna
reguły „sztywno” ustalone, duża szybkość działania, mała elastyczność filtracja dynamiczna zasady zmieniane w czasie funkcjonowania systemu (odblokowywanie połączeń „na żądanie”), analiza ruchu i blokowanie wykrytych ataków

54 NAT B A C NAT nie istnieje fizyczne połączenie komputerów A i B oraz A i C, przesyłane pakiety są modyfikowane w komputerze realizującym NAT - zmiana adresów IP z punktu widzenia komputera A komunikuje się on wyłącznie z komputerem realizującym NAT, nie ma on żadnych informacji o strukturze sieci lokalnej w sieci lokalnej można używać adresów prywatnych 10.x.x.x, x.x, ...

55 NAT

56 NAT - konfiguracja

57 Zastosowanie NAT Korzyści:
redukcja zapotrzebowania na adresy publiczne łatwość organizacji sieci używając adresów prywatnych przezroczystość (dla niektórych aplikacji) bezpieczeństwo Wady: złożone dostosowanie niektórych protokołów (np. FTP) brak skalowania wprowadzenie dodatkowych węzłów sieci (multihomed networks) brak fizycznego połączenia end-to-end dla zapewnienia bezpieczeństwa potrzebny IPsec

58 Firewall - architektura DMZ
Serwer ftp, http, news, DNS DMZ Strefa zdemilitaryzowana Strefa zdemilitaryzowana chroni klientów sieci lokalnej przed atakami wymierzonymi w serwery świadczące usługi publiczne. Ochrona serwerów i sieci lokalnej jest niezależna.

59 Zapory sieciowe (firewall) - pożądane cechy
Wybór odpowiednich filtrów (pakietów, połączeń, usług itp.) Odporność na ataki Wydajność Monitorowanie sieci Dodatki (VPN, legalizacja i autoryzacja) Uwaga: zapory nie chronią przed atakami z wewnątrz sieci!

60 Firewall sieciowy Warstwa aplikacji Zapora sieciowa
Programy serwera i klienta Zapora sieciowa Warstwa transportowa TCP, UDP źródłowe i docelowe porty TCP/UDP znaczniki stanu połączeń TCP Warstwa sieci IP, ICMP. IGMP źródłowe i docelowe adresy IP protokoły ICMP, IGMP.... Warstwa łącza danych MAC źródłowe i docelowe adresy sprzętowe Sprzęt

61 Netfilter CRC Poprawność DROP DROP Pre-Routing Forward Post-Routing
DROP / REJECT Input Output DROP / REJECT DROP / REJECT Lokalny proces

62 Netfilter - Przyklad (1)

63 Netfilter - Przyklad (2)
DMZ: Mail server SMTP to external Accept SMTP from internal and external Accept POP-3 from internal Name server Send DNS to external Accept DNS from internal, external and packet filter box Web server Accept HTTP from internal and external Rsync access from internal Packet Filter box: PING any network TRACEROUTE any network Access DNS Internal: Allow WWW, ftp, traceroute, ssh to external Allow SMTP to Mail server Allow POP-3 to Mail server Allow DNS to Name server Allow rsync to Web server Allow WWW to Web server Allow ping to packet filter box

64 Netfilter - Przyklad (3)
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done iptables -A INPUT -i ! lo -j DROP iptables -A OUTPUT -i ! lo -j DROP iptables -A FORWARD -j DROP ifconfig eth netmask ifconfig eth netmask pppd route add default ppp0 iptables -N internal-dmz iptables -N external-dmz iptables -N internal-external iptables -N dmz-internal iptables -N dmz-external iptables -N external-internal iptables -N icmp-accept iptables -N NEVER iptables -N LOGDROP

65 Netfilter - Przyklad (4)
iptables -A NEVER -j LOG --log-level alert --log-prefix "filter ERROR: ” iptables -A NEVER -j DROP iptables -A LOGDROP -m limit -j LOG --log-prefix "filter: ” iptables -A LOGDROP -j DROP iptables -A FORWARD -i eth1 -o eth0 -j internal-dmz iptables -A FORWARD -i eth1 -o ppp0 -j internal-external iptables -A FORWARD -i eth0 -o ppp0 -j dmz-external iptables -A FORWARD -i eth0 -o eth1 -j dmz-internal iptables -A FORWARD -i ppp0 -o eth0 -j external-dmz iptables -A FORWARD -i ppp0 -o eth1 -j external-internal iptables -A FORWARD -j NEVER iptables -A icmp-accept -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type source-quench -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type parameter-problem -j ACCEPT

66 Netfilter - Przyklad (5)
iptables -A internal-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A internal-dmz -p tcp -d $MAILSERVER --dport pop-3 -j ACCEPT iptables -A internal-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport rsync -j ACCEPT iptables -A internal-dmz -p icmp -j icmp-accept iptables -A internal-dmz -j LOGDROP ptables -A external-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A external-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A external-dmz -p icmp -j icmp-accept iptables -A external-dmz -j DROP

67 Netfilter - Przyklad (6)
iptables -A internal-external -p tcp --dport www -j ACCEPT iptables -A internal-external -p tcp --dport ssh -j ACCEPT iptables -A internal-external -p udp --dport 33434: j ACCEPT iptables -A internal-external -p tcp --dport ftp -j ACCEPT iptables -A internal-external -p tcp --dport 1024: j ACCEPT iptables -A internal-external -p icmp --icmp-type ping -j ACCEPT iptables -A internal-external -j LOG iptables -A internal-external -j REJECT iptables -A dmz-internal -p tcp ! --syn -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-internal -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER rsync -j ACCEPT iptables -A dmz-internal -p icmp -j icmp-accept iptables -A dmz-internal -j NEVER

68 Netfilter - Przyklad (7)
iptables -A dmz-external -p tcp -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-external -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-external -p icmp -j icmp-accept iptables -A dmz-external -j NEVER iptables -A external-internal -p tcp ! --syn --sport www -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ssh -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ftp -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport 1024: j ACCEPT iptables -A external-internal -p icmp --icmp-type pong -j ACCEPT iptables -A external-internal -j DROP iptables -N external-if iptables -N dmz-if iptables -N internal-if

69 Netfilter - Przyklad (8)
iptables -A INPUT -i ppp0 -j external-if iptables -A INPUT -i eth0 -j dmz-if iptables -A INPUT -i eth1 -j internal-if iptables -A external-if -p icmp --icmp-type pong -j ACCEPT iptables -A external-if -j icmp-accept iptables -A external-if -j DROP iptables -A dmz-if -p tcp ! --syn -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p udp -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p icmp --icmp-type pong -j ACCEPT iptables -A dmz-if -j icmp-accept iptables -A dmz-if -j NEVER iptables -A internal-if -p icmp --icmp-type ping -j ACCEPT iptables -A internal-if -p icmp --icmp-type pong -j ACCEPT iptables -A internal-if -j icmp-accept iptables -A internal-if -j LOGDROP iptables -D 1 input; iptables -D 1 forward; iptables -D 1 output

70 Apache + JAVA + TOMCAT

71 Instalacja serwera Apache 2
Aktualizacja oprogramowania apt-get update apt-get –u upgrade Instalacja serwera www apt-get install apache2 apt-get install libapache2-mod-jk

72 Apache 2 Pliki konfiguracyjne serwera www znajdują się w katalogu /etc/apache2. Strony dostępne na serwerze można znaleźć w podkatalogu /etc/apache2/sites-available. W przypadku definiowania pojedynczego Virtual hosta można tego dokonać bezpośrednio w pliku /etc/apache2/apache2.conf

73 Instalacja Javy Pakiet do pobrania:
W celu dokonania instalacji należy: mv jdk-6u24-linux-i586.bin /usr/local chmod +x jdk-6u24-linux-i586.bin ./jdk-6u24-linux-i586.bin rm jdk-6u24-linux-i586.bin

74 Konfiguracja W pliku /etc/profile dodać
export JAVA_HOME=/usr/local/java Zmodyfikować zmienna PATH do postaci: if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/local/java/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/java/ bin" fi

75 Instalacja serwera Apache Tomcat
Aplikacja dostępna pod adresem Po pobraniu należy wykonać: mv apache-tomcat tar.gz /usr/local/; cd /usr/local/ tar zxvf apache-tomcat tar.gz ls -s apache-tomcat tomcat Z poziomu konsoli: cd /usr/local/tomcat/bin/ chmod 755 shutdown.sh startup.sh

76 workers.properties # This file provides minimal jk configuration properties needed to # connect to Tomcat. # # We define a worker named ‘default’ #workers.tomcat_home=/usr/locale/tomcat/ workers.java_home=/usr/local/java/ ps=/ worker.list=default worker.default.port=8009 worker.default.host=localhost worker.default.type=ajp13 worker.default.lbfactor=1

77 Apache -> Tomcat W pliku apache2.conf
# mod_jk config # workers.properties JkWorkersFile /etc/apache2/workers.properties# Where to put jk logs JkLogFile /var/log/apache2/jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “ #JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat –ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat “%w %V %T”

78 Virtual Host /etc/apache2/sites-available:
<VirtualHost *:80> ServerName test.dmcs.pl ServerAdmin JkMount /* default JkMount /*.jsp default DirectoryIndex index.jsp index.html # Globally deny access to the WEB-INF directory <LocationMatch ‘.*WEB-INF.*’> AllowOverride None deny from all </LocationMatch> </VirtualHost>

79 Apache restart /etc/init.d/apache2 stop /usr/local/tomcat /bin/startup.sh /etc/init.d/apache2 start

80 Apache ANT

81 ANT Producent: Apache Software Foundation
System operacyjny: GNU/Linux, Windows, Mac OS, BeOS Pierwsze wydanie: 19 lipca 2000 Aktualna wersja stabilna: 1.8.2

82 Czym jest ANT ? Narzędzie, służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make Napisany w Javie do wykorzystania z programami napisanymi w tym języku. Co najważniejsze, jest to open-source na licencji Apache Software Fundation. Apache Ant to narzędzie służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make ale napisane w języku Java do wykorzystania przede wszystkim z programami napisanymi w tym języku. Od razu zauważalną różnicą pomiędzy Ant i Make jest to, że Ant używa plików w formacie XML do opisu procesu budowy i jego zależności, gdzie Make ma własny format Makefile. Domyślnie plik XML nazywa się build.xml. Ant jest jednym z projektów Apache Software Foundation.

83 Ant a Make ? W pliku Makefile czynności określone jako komendy powłoki – zależne od platformy Ant rozwiązuje ten problem Użycie XML‘a i pliku build.xml Jednym z głównych celów Ant było rozwiązanie problemu przenośności Make. W pliku Makefile czynności potrzebne do stworzenia target są określone jako komendy powłoki, które są zależne od platformy. Ant rozwiązuje ten problem dostarczając dużą ilość wbudowanych funkcji, co gwarantuje identyczne zachowanie na wszystkich platformach. Np. w ww. pliku build.xml target clean kasuje rekursywnie folder classes. W pliku Makefile byłoby to zapisane w następujący sposób:

84 Schemat build.xml <project name="project_name" basedir="." default="default" <property name="src" value="./src" /> <target name="default"> <task1 param1="value" /> <task2> <type param="value" /> </task2> </target> </project>

85 Przykładowy build.xml <?xml version="1.0"?> <project name="Hello" default="compile"> <target name="clean" description="remove intermediate files"> <delete dir="classes"/> </target> <target name="compile" description="compile the Java source code to class files"> <mkdir dir="classes"/> <javac srcdir="." destdir="classes"/> <target name="jar" depends="compile" description="create a Jar file for the application"> <jar destfile="hello.jar"> <fileset dir="classes" includes="**/*.class"/> <manifest> <attribute name="Main-Class" value="HelloProgram"/> </manifest> </jar> </project> Poniżej znajduje się przykładowy plik build.xml dla prostej aplikacji "Hello, world" napisanej w języku Java. Definiuje trzy targets – clean, compile, jar, każdy z nich ma dołączony opis. Target jar ma opisany cel compile jako zależność. To mówi programowi Ant że zanim rozpocznie target jar musi ukończyć target compile. Każdy target to czynności jakie musi wykonać Ant żeby zbudować dany target. Np. do zbudowania target compile Ant musi najpierw stworzyć folder o nazwie classes (Ant stworzy go jeżeli jeszcze nie istnieje), po czym odwoła się do kompilatora Javy

86 ANT wymagania - JDK 1.2 lub nowsza download - http://ant.apache.org
najnowsza wersja - Ant (27-December )

87 Do czego można użyć ANT’a?
Ant możne pobierać kod źródłowy systemu kontroli wersji CVS, Subversion, Synergy, Perforce, ClearCase i wiele innych Ant można skompilować kod źródłowy Ant pozwala na przeprowadzanie testów jednostkowych JUnit3, JUnit4, TestNG lub dowolną aplikację testową Ant może pakować skompilowany kod i zasoby jars, wars, ears, tars, zips Ant może obsłużyć zależności pomiędzy target’ami Ant zawiera ponad 80 podstawowych zadań, a 60 opcjonalnych zadań Istnieje ponad 100 narzędzi firm trzecich i zadania pisemne na Ant Ant rozszerzeń można łatwo napisane dla innych unikalnych problem

88 Ant – przykładowa instalacja
rozpakować apache-ant bin.tar.gz do /usr/local/ant export ANT_HOME=/usr/local/ant exportJAVA_HOME=/usr/local/java export PATH=$PATH:$ANT_HOME/bin

89 Ant terminologia (1) project:
<project> jest element najwyższego poziomu w skrypt Ant <project> ma trzy atrybuty opcjonalne: name nazwa projektu default domyślnego celu używać, gdy nie jest zdefiniowany cel basedir katalog bazowy, z którego wykonywane są ścieżki

90 Ant terminologia (2) target:
Każdy projekt definiuje zero lub więcej target’ów target jest zbiorem zadań, które mają być zrealizowane Podczas uruchamiania Ant’a, można wybrać target(s), które będą wykonane Gdy żaden target nie jest wywołany, zostanie wykonany domyślnym target mogą być wykonywane warunkowo mogą być zdefiniowane zależności między target’ami

91 przykład <target name="A"/> <target name="B" depends="A"/> <target name="C" depends="A"/> <target name="D" depends="B,C"/> Załóżmy, że chcemy wykonać cel D, który zależy od B i C C zależy od A B zależy od A więc najpierw jest wykonywany A, następnie B, następnie C i na końcu D

92 Ant terminologia (3) tasks
task jest to fragment kodu, który może być wykonany task może mieć wiele atrybutów Ant zawiera ponad 80 podstawowych zadań i 60 opcjonalnych Istnieje ponad 100 zadań firm trzecich napisanych dla Ant rozszerzenia Ant (zadania) mogą być z łatwością napisane innych unikalnych problem

93 Ant terminologia (4) Properties
properties ma nazwę i wartość (case-sensitive) properties mogą być stosowane w wartości atrybutów zadania Odbywa się to poprzez umieszczenie nazwy pomiędzy "$ {" i "}" w wartości atrybutu Np., jeśli jest właściwość "builddir„ o wartości „build", może być wykorzystana w atrybucie: ${builddir}/classes . Jest to rozwijane w czasie wykonywania do postaci: build/classes Ant umożliwia dostęp do wszystkich właściwości systemu, jak gdyby zostały zdefiniowane przy użyciu <PROPERTY> zadania. Na przykład, $ {os.name} rozszerza się do nazwy systemu operacyjnego. Lista właściwości systemu patrz Javadoc z System.getProperties

94 Własności wbudowane Ant umożliwia dostęp do wszystkich właściwości systemu, jak gdyby zostały zdefiniowane przy użyciu <PROPERTY> zadania. Na przykład, $ {os.name} rozszerza się do nazwy systemu operacyjnego. Ant ma kilka wbudowanych właściwości: basedir - bezwzględną ścieżkę do projektu bazowego katalogu (zgodnie z atrybutem basedir z <project>) ant.file - ścieżkę bezwzględną buildfile ant.version - wersja Ant ant.project.name - nazwa projektu, który jest aktualnie wykonywany, ale jest w atrybut name <project> ant.java.version Lista właściwości systemu patrz Javadoc z System.getProperties

95 Ant dostępne środowiska
WSAD / RAD / Eclipse Ant zbudowany jest na tych IDE Wszystkie posiadają wyspecjalizowane "Ant View" z linii poleceń Automatyzacja środowiska (CruiseControl) Wymaga JDK W dalszej części tej rozmowy będzie przy założeniu, że w linii poleceń jest używany, ale wszystko będzie nadal działać w IDE

96 Wiersz poleceń Ant ant [ options ] [ target-names ] uruchamia target określony nazwa i te od których zależy można podać wiele nazw oddzielonych spacjami -D opcja określa właściwość, która może być wykorzystana przez cele i zadania. np. -Dproperty-name=property-value ant -help wymienia inne opcje wiersza polecenia

97 Podstawowe zadania <copy> <concat> <delete> <filter> <fixcrlf> <get> <mkdir> <move> <replace> <sync> <tempfile> <touch>

98 Zadania kompilacji <javac> Kompiluje określony plik źródłowy <apt> Uruchomienie narzędzia procesor adnotacji (apt), a następnie opcjonalnie kompiluje kod <rmic> Uruchamia rmic kompilator

99 Zadania archwizacji <zip> , <unzip> tworzy plik zip. <jar> , <unjar> buduje plik jar <war> , <unwar> rozszerzenie pliku Jar na, archiwum www

100 Zadania testowe <junit> Działa z badań w ramach testów JUnit. <junitreport> Łączy poszczególne pliki XML generowane przez zadania Junit i generuje arkusz raportu.

101 Zadania własności <dirname> Ustawia własności do wartości ostatniego elementu ścieżki. <loadfile> Ładuje plik do własności. <propertyfile> Tworzy lub modyfikuje pliki własności. <uptodate> Ustawia właściwość, jeżeli dany plik jest nowszy niż docelowy zestaw plików źródłowych.

102 Inne zadania <echo> tekst Echoes do System.out lub do pliku. <javadoc> Generuje kod dokumentacji za pomocą narzędzia javadoc. <sql> Wykonuje szereg instrukcji SQL poprzez JDBC do bazy danych.

103 Usuwanie, tworzenie i kopiowanie
Najważniejsze elementy pliku build.xml <deltree dir="${build}"/> <mkdir dir="${build}/${src}" /> <copy todir="${build}/${src}"> <fileset dir="${src}"> <include name="*.xml"/> <exclude name="index.xml"/> </fileset> </copy>

104 Komendy systemowe Ant umożliwia wykonywanie komend systemowych.
 <exec failonerror="true" executable="/bin/mimic_cmd">     <arg value='"startDaemon()"' />  </exec>

105 Apache MAVEN

106 Maven Producent: Apache Software Foundation
Pierwsze wydanie: 25th June 2007 Aktualna wersja stabilna: 3.0.3

107 Literatura • Maven: The Definitive Guide book/reference/public-book.html • Developing with Eclipse and Maven n/download-book?file=books/m2eclipse-book.pdf • Opisy wtyczek

108 Czym jest Apache Maven Narzędzie automatyzującym budowę programowania na platformę Java. Funkcjonalności realizowane poprzez wtyczki automatycznie pobierane przy ich pierwszym wykorzystaniu. Plik określający sposób budowy aplikacji nosi nazwę POM-u (ang. Project Object Model).f

109 Cele Mavena Budowanie oprogramowania ma zakończyć się osiągnięciem wybranego przez budującego celu. Dostępnych celów jest wiele. Pula celów nie jest bezpośrednio określona przez twórcę POM-a, lecz przez wtyczki rozszerzające funkcjonalność Mavena. Poszczególne cele mogą wymagać wcześniejszej realizacji innych celów, np. cel package (zbudowanie paczki dystrybucyjnej) wymaga uprzedniej realizacji compile (kompilacja kodów źródłowych) oraz test (uruchomienie testów automatycznych). tak jak ma to miejsce w przypadku Anta lub Make'a,

110 Cykle życia (1) Mianem głównego cyklu życia projektu określa się uszeregowanych kolejno osiem najważniejszych z punktu widzenia budowy aplikacji celów. Powodzenie każdego kolejnego celu uzależnione jest od pomyślnej realizacji celów znajdujących się wcześniej w cyklu: validate - sprawdzenie, czy projekt jest poprawny i czy wszystkie niezbędne informacje zostały określone compile - kod źródłowy jest kompilowany test - przeprowadzane są testy jednostkowe

111 Cykle życia (2) package - budowana jest paczka dystrybucyjna integration-test - zbudowany projekt umieszczany jest w środowisku testowym, gdzie przeprowadzane są testy integracyjne verify - sprawdzenie, czy paczka jest poprawna install - paczka umieszczana jest w repozytorium lokalnym - może być używana przez inne projekty jako zależność deploy - paczka umieszczana jest w repozytorium zdalnym (opublikowana)

112 Co to POM ? POM, czyli Project Object Model, to dokument XML-owy kompleksowo opisujący projekt. POM nie tylko precyzuje szczegóły budowy produktu, ale też może przechowywać informacje o zespole programistów, zastosowanych systemach wspomagających rozwój oprogramowania. W Mavenie dokument POM nosi nazwę pom.xml.

113 Przykład POM (1) <project>
<modelVersion>4.0.0</modelVersion> <!-- Podstawowe informacje dla Mavena  <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties>

114 Przykład POM (2) <!-- Ustawienia budowania --> <build>...</build> <!-- Ustawienia generowania strony HTML z dokumentacją i raportami --> <reporting>...</reporting>

115 Przykład POM (3) <!-- Ogólne informacje o projekcie --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors>

116 Przykład POM (4) </project>
<!-- Ustawienia środowiska tworzenia projektu --> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>

117 Powiązania pomiędzy plikami POM
Agregacja - Mechanizm mający na celu rozbicie dużego projektu na podprojekty (moduły), by ułatwić zarządzanie źródłami. POM głównego projektu agreguje POM-y modułów, te zaś mogą agregować POM-y swoich podmodułów itd. Dziedziczenie - Każdy POM ma rodzica, którym jest inny dokument POM. Eliminuje to potrzebę jawnego określania wszystkich elementów w POM-ie każdego modułu Zależność Dziedziczenie- - jeżeli dana opcja nie została sprecyzowana w konkretnym POM-ie, to jest ona pobierana z rodzica. Jeżeli rodzic również jej nie określa, to z rodzica rodzica itd, ponieważ dziedziczenie POM-ów jest przechodnie. Jeżeli rodzic nie jest podany wprost, to jest nim tzw. Super POM - dokument określający domyślną konfigurację. Nie należy mylić dziedziczenia z agregacją - dziedziczenie to mechanizm mający na celu ograniczenie powielania treści POM-ów, podczas gdy agregacja ma na celu modularyzację projektu. Dziedziczenie jest niezależne od podziału projektu na moduły, choć oba mechanizmy bardzo często występują razem.

118 Tworzenie POM Programista może napisać POM-a samodzielnie od podstaw, prościej jednak użyć Mavena, który potrafi wygenerować prostego POM-a samodzielnie: mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

119 Wtyczki Większość funkcjonalności Mavena dostępna jest za pośrednictwem wtyczek. Każda z wtyczek posiada wyspecyfikowane cele które może realizować. Dany cel może być wywołany używając poniższej składni: mvn [nazwa-wtyczki]:[nazwa-celu] Przykładowo kompilacji kodu można dokonać wywołując mvn compile:compile.

120 Generowanie raportów Jedną z funkcjonalności Mavena jest zautomatyzowana generacja strony internetowej projektu. Strona, oprócz ogólnych informacji ustalanych na podstawie POM-a, zawiera również zbiór raportów dokumentujących projekt. W skład raportów wchodzą najczęściej Javadoc, kody źródłowe itd.

121 Maven a Ant Apache Ant jest innym narzędziem na platformę Java automatyzującym proces budowy oprogramowania. Pracując z Antem, programista tworzy skrypt (Buildfile) określający krok po kroku sposób budowy programu. W Mavenie natomiast określa raczej co ma zostać zbudowane i w jaki sposób, niż kiedy i w jakiej kolejności. Kolejność wykonywania poszczególnych faz jest ustalana przez Mavena. Maven wydaje się być mniej elastyczny niż Ant, nie jest to jednak prawdą, gdyż ostatecznie można nakazać Mavenowi wywołanie Anta. Na korzyść Mavena przemawia fakt, że stworzenie i utrzymanie pliku POM wymaga zwykle znacznie mniej pracy, niż Antowego Buildfile'a.

122 Instalacja Mavena

123 Konfiguracja środowiska
Pobierz Maven2 ze strony Zainstaluj Maven2 w maven_home Dodaj ścieżkę maven_home/bin do PATH (uwaga Linux/Windows) Ustal lokalizację JDK w zmiennej środowiskowej JAVA_HOME

124 Maven z Netbeans Zainstaluj plugin Maven w NetBeans (Tools → Plugins)
Sprawdź czy w Tools → Options → Miscellaneous znajduje się zakładka Maven Na zakładce Maven podać lokalizację maven_home (o ile NetBeans sam nie wykrył Maven-a po PATH)

125 Maven z Eclipse • Pobierz plik archiwum z Eclipse. Dla przykładowej instalacji jako baza posłużyła wersja Eclipse 3.5 JavaEE (Galileo) • Zainstaluj Mylyn dla Eclipse 3.5: • Zainstaluj AspectJ dla Eclipse 3.5 • Zainstaluj Subclipse 1.6 • Zainstaluj GEF dla Eclipse 3.5 • Zainstaluj m2eclipse

126 Maven z Eclipse • W konfiguracji Eclipse jako masznę JAVA podać tę z pakietu JDK (eclipse.ini), np.: -vm e:\Programs\Java\jdk1.6.0_14\bin\javaw.exe • Dodać ścieżkę w Window → Preferences → Maven → Installations do katalogu w którym zainstalowano maven2 • Uwaga! Warto wyłączyć automatyczne budowanie projektu w Eclipse

127 Tworzenie projektu

128 Informacje wstępne • Projekty można tworzyć z poziomu: – Środowiska programistycznego – Linii poleceń i samego maven-a • Projekty tworzy się na podstawie tzw. archetypów np.: – Dla aplikacji bazującej na spring – Dla modułu EJB – Dla aplikacji WEB itd. • Środowisko programistyczne tak naprawdę wykorzystuje te archetypy i mavena do utworzenia określonego typu projektu

129 Projekt nadrzędny (POM)
Utworzyć nowy projekt Maven File → New → Project (Alt+Shift+N) Wybrać Maven Project Wybrać archetyp (można przeszukiwać listę) groupId: org.codehouse.mojo.archetypes artifactId: pom-root

130 Docelowa struktura projektów

131 SuperPOM Jest to podstawowa konfiguracja dostarczana przez konkretną dystrybucję maven Kolejne wydanie maven może używać nowszych wtyczek (o wyższych numerach wersji) niż to z którego aktualnie korzystasz. Jeżeli coś działało w wersji, której do tej pory używałeś, to nie znaczy że będzie działało w wersji nowszej. Wniosek: zawsze podawaj numery wersji wtyczek w pom.xml

132 Projekt nadrzędny (POM)
Do podania są następujące wartości: lokalizacja projektu na dysku grupId artifactId (nazwa projektu w IDE) wersja Plik pom.xml powinien mieć następującą postać: <modelVersion>4.0.0</modelVersion> <groupId>project.samples</groupId> <artifactId>NazwaProjektu</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>NazwaProjektu Multi Project</name> <url>http://maven.apache.org</url>

133 Projekt typu JEE 5 Enterprise (EAR)
Projekt typu EAR składa (ang. assembly) dostępne moduły (artefakty) w archiwum EAR File → New Project (Ctrl+Shift+N) Wybrać Maven Project i Next Rozwinąć listę: Archetypes from Remote Maven Repositories (można wpisywać nazwę archetypu – Quick Search) Wybrać z listy: JEE 5 EAR Archetype i Next Podać: nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish

134 Projektu typu UTILITY (JAR)
File → New Project (Ctrl+Shift+N) Wybrać Maven Project i Next Wybrać Maven Quickstart Archetype i Next Podać: nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish Zmienić wersję Java na wymaganą, np.:1.5 (Project →Properties → Sources)

135 Projekt JEE 5 EJB (JAR) File → New Project (Ctrl+Shift+N)
Wybrać Maven Project i Next Rozwinąć listę Archetypes from Remote Maven Repositories Wybrać z listy JEE 5 ejb jar archetype (można wpisywać nazwę archetypu – Quick Search) i Next Podać nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish

136 Projekt JEE 5 Web (WAR) File → New Project (Ctrl+Shift+N)
Wybrać Maven Project i Next Rozwinąć listę Archetypes from Remote Maven Repositories Wybrać z listy JEE 5 web application archetype (można wpisywać nazwę archetypu – Quick Search) i Next Podać nazwę projektu, lokalizację, grupę i wersję, zatwierdzić Finish Z Project → Properties → Frameworks dodać framework web którego będziemy używać w projekcie

137 Konfiguracja projektu EAR
Dodaj jako zależności moduł ejb i moduł web <dependency> <groupId>pl.test.was</groupId> <artifactId>WebModule</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <artifactId>EjbModule</artifactId> <type>ejb</type>

138 Konfiguracja maven-ear-plugin
Dodaj do pliku pom wtyczkę maven-ear-plugin W konfiguracji wtyczki należy dopisać: <modules> <webModule> <groupId>pl.test.was</groupId> <artifactId>WebModule</artifactId> </webModule> <ejbModule> <artifactId>EjbModule</artifactId> </ejbModule> </modules> Powyższe moduły zostaną załączone do archiwum EAR w formie spakowanej (jar i war) EAR może zawierać 0..1 moduł WEB (war), 0..N modułów EJB (jar) i 0..N innych bibliotek JAR

139 Budowa aplikacji EJB3/3.1 W przypadku gdy chcemy aby moduły EJB i WEB nie były umieszczane razem w formie jednej aplikacji EAR, to pojawia się problem związany z zależnościami. Aplikacja WEB musi zawierać część kodu aplikacji EJB, a dokładniej specyfikację interfejsów komponentów EJB z których będzie korzystać. Projekt Maven dla EJB musi więc, oprócz zbudowania aplikacji EJB, wygenerować także archiwum jar zawierające te interfejsy.

140 Konfiguracja maven-ejb-plugin
Ustawić wartość generateClient na true Wskazać w <clientIncludes> co ma zostać umieszczone w kliencie <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <generateClient>true</generateClient> <clientIncludes> <!--Dołącz do klienta tylko "zdalne interfejsy"--> <clientInclude> pl/test/sos/ejb/endpoint/*Remote.class </clientInclude> </clientIncludes> <ejbVersion>3.0</ejbVersion> </configuration> </plugin>

141 Konfiguracja projektu WEB
W projekcie aplikacji WEB należy dodać zależność względem wcześniej wygenerowanego klienta aplikacji EJB – wartość <type> ustawiona na ejb-client <dependency> <groupId>${project.groupId}</groupId> <artifactId>EjbModule</artifactId> <version>${EjbModule.ver}</version> <type>ejb-client</type> </dependency> Maven wie, że nie należy dołączać archiwum jar z aplikacją EJB tylko archiwum jar klienta tej aplikacji. Zwróć uwagę na możliwość zastosowania: parametru EjbModule.ver, który zostały zdefiniowany w pliku konfiguracyjnym nadrzędnego projektu maven (pom) parametru standardowego project.groupId

142 PARAMETRY

143 Parametry standardowe
Odwołanie do parametru ma postać ${nazwa_parametru} Standardowo dostępne wartości: project.* - wartości z Maven POM settings.* - ustawienia z settings.xml env.* - zmienne środowiskowe java.lang.System

144 Parametry standardowe: project
• Najczęściej wykorzystywane wartości project.* – artifactId – groupId – version – build.* • directory • sourceDirectory

145 Parametry standardowe: settings
Generalnie bardzo rzadko wykorzystuje się w ustawieniach projektu wartości z settings.xml Najczęściej wykorzystywane wartości z settings.* localRepository offline Za to bardzo wygodnie jest tam wpisać dane uwierzytelniające w sekcji <servers> dla wykorzystywanych serwerów podanych w sekcji <distributionManagement> pliku pom.xml

146 Parametry standardowe: env
Najczęściej wykorzystywane wartości env.* path home java_home Jeżeli to tylko możliwe, powinno się używać wartości dostępnych poprzez java.lang.System

147 Parametry standardowe: java.lang.System
Wartości bardzo często wykorzystywane Najbardziej popularne to: java.version java.home user.home user.dir line.separator file.separator os.*

148 Parametry użytkownika
• Można definiować własne parametry • Wykorzystywane podczas konfiguracji projektu i przy filtrowaniu • Przykład definicji: <properties> <EJBModule.ver>1.0-SNAPSHOT</EJBModule.ver> <WEBModule.ver>1.0-SNAPSHOT</WEBModule.ver> </properties> • Przykład użycia: <dependency> <groupId>pl.szsk.was</groupId> <artifactId>WebModule</artifactId> <version>${WEBModule.ver}</version> <type>war</type> </dependency>

149 Filtrowanie Proces podstawiania wartości parametrów w plikach
W pliku musi znajdować się odwołanie do parametru w postaci ${nazwa_parametru} Pozwala na zmianę treści plików konfiguracyjnych czy też samych plików źródłowych aplikacji np: Konfiguracja połączenia do bazy danych Adres WebService w adnotacji Proces filtrowania musi zostać jawnie uaktywniony. SUPERPOM ma domyślne ustawienia jak poniżej: <resources> <resource>src/main/resources</resource> <filtering>true</filtering> </resources>

150 Filtrowanie: przykład filtrowania źródeł
<resources> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <!-- domyślnie zasoby są kopiowane do target/classes --> <targetPath>../filtered-sources</targetPath> </resource> <!—trzeba podać też katalog z normalnymi plikami zasobów, inaczej ich nie skopiuje--> <directory>src/main/resources</directory> </resources>

151 Generowanie strony projektu

152 Generowanie strony projektowej (Site)
• Sekcja <reporting >: konfiguracja raportów generowanych na potrzeby projektu <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.1.2</version> </plugin> <artifactId>maven-javadoc-plugin</artifactId> <version>2.6</version> <configuration> <aggregate>true</aggregate> </configuration> </plugins> </reporting>

153 Generowanie strony projektowej (Site)
W przypadku projektu wielomodułowego, strona będzie generowana z osobna dla każdego projektu. Raporty można zintegrować ustawiając wartość aggregate na true. Agregacja następuje dopiero po wykonaniu celu site:deploy • Dla celu site:deploy należy skonfigurować distributionManagement, tzn miejsce w którym zostanie umieszczona strona projektu. Może być to także okalizacja na serwerze plików czy też www (transport np.: scp). <distributionManagement> <site> <id>Test</id> <url>file://d://javaProg//docs</url> </site>

154 Konfiguracja serwerów: przykład
• Plik pom.xml <distributionManagement> <site> <id>Test</id> <name>Test Site</name> <url>scp://nazwa_serwera/sciezka_do_np_public_html/</url> </site> </distributionManagement> • Plik settings.xml <servers> <server> <username>uzytkownik</username> <password>haslo</password> <filePermissions>664</filePermissions> <directoryPermissions>775</directoryPermissions> <configuration></configuration> </server> </servers>

155 Informacje o projekcie: przykład
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.1.2</version> <reportSets> <reportSet> <reports> <report>index</report> <report>project-team</report> <report>dependencies</report> <report>dependency-convergence</report> <report>dependency-management</report> <report>plugin-management</report> <report>plugins</report> <report>summary</report> <report>scm</report> </reports> </reportSet> </reportSets> </plugin> Informacje brane są z plików pom.xml.

156 Listę członków zespołu projektowego bądź też organizacji należy umieścić w sekcji <developers>. Można też stworzyć dodatkową listę w sekcji <contributors> dla osób bądź jednostek przekazujących coś na rzecz projektu. Jeżeli generowane są raporty z scm (np. changelog) to id powinno być zgodne z loginem w tym systemie. <developers> <developer> <id>test</id> <name>test user</name> <organization>Technical University of Lodz</organization> <organizationUrl>http://www.p.lodz.pl</organizationUrl> <timezone>CET</timezone> <roles> <role>kierownik projektu</role> <role>pracownik</role> </roles> </developer> </developers>

157 Informacje o projekcie: summary
• Dane podstawowe o projekcie <name>Test</name> <description>Opis projektu</description> <url>http://strona_domowa_projektu</url> • Warto wpisać dane jednostki organizacyjnej. Informacja ta jest umieszczana dodatkowo w wielu raportach np.: javadoc <organization> <name>Technical University of Lodz</name> <url>http://www.p.lodz.pl</url> </organization>

158 Informacje o projekcie: scm
Wyświetlane są podstawowe informacje o systemie scm użytym w projekcie, oraz jak z niego korzystać. Wymaga podania stosownych url w sekcji scm: <scm> <connection>scm:svn:svn://adres_repozytorium</connection> <url>http://adres_www_repozytorium</url> </scm> Można też w tej sekcji ustalić developerConnection dla scm. Ten url wykorzystywany jest przy operacjach zapisu connection jest tylko dla operacji oczytu url jest wykorzystywany w wielu raportach do podlinkowania plików źródłowych (o ile w ogóle system scm udostępnia pliki np. po http)

159 Informacje o projekcie: scm
Skonfigurowanie sekcji scm pozwala z poziomu Maven wykonywać operacje w systemie scm np. commit, update itd. Wiele innych wtyczek bazuje na scm

160 Raporty na stronie projektowej
W sekcji <reporting> można dodać wiele wtyczek generujących pożyteczne raporty. We wcześniej przedstawionym przykładzie znajdował się maven- javadoc-plugin W większości z nich należy zwrócić uwagę na sposób kodowania źródeł i sposób kodowania generowanego raportu. Domyślnie przyjmowane jest ISO Do ustalenia tych wartości warto zdefiniować w pliku pom parametry np. <source.enc> czy też <source.ver>, jak w przykładzie na kolejnym slajdzie. Parametry te powinny być także użyte np. w konfiguracji maven- compiler-plugin

161 Problemy przy generowaniu strony
• Z uwagi na złożoność generowania strony projektowej, może pojawić się wyjątek OutOfMemoryError. Należy wtedy zmienić ustawienia maszyny wirtualnej dla maven set MAVEN_OPTS=-Xmx1024m -Xms512m - XX:PermSize=256m -XX:MaxPermSize=512m mvn site

162 Praca z repozytorium

163 Konfiguracja klienta svn po ssh
• Założenia – Dostęp do repozytorium poprzez svn+ssh – Uwierzytelnianie z wykorzystaniem klucza prywatnego • Potrzebne są następujące programy – klient subversion (np. Collabnet) – putty (do konfiguracji ssh) – plink (do utworzenia połączenia ssh) – puttygen (gdy chcemy generować klucze)

164 Konfiguracja klienta svn po ssh
• Wygodnie jest do PATH dodać ścieżkę do katalogu z zainstalowanymi programami putty, puttygen i plink (w tym przypadku nawet bardzo wskazane) oraz svn • W profilu użytkownika w Application Data\Subversion (%APPDATA%\Subversion) znajduje się plik konfiguracyjny config. Ustawienia można także wprowadzić z poziomu rejestru – patrz plik README • Domyślnie svn poszukuje ssh do nawiązania połączenia svn+ssh. Zmieniamy to na plink.exe w sekcji [tunnels] [tunnels] ssh = plink.exe

165 Konfiguracja połączenia svn po ssh
• Uruchomić putty • Skonfigurować sesję – Session: • hostname: • connection type: SSH • session name: nazwa_sesji – Connection/SSH • Wybrać wersję protokołu – najlepiej v2 – Connection/SSH/Auth • Wskazać lokalizację pliku z kluczem prywatnym • Zapisać sesję z poziomu Session

166 Test i konfiguracja maven
• Wykonać dowolne polecenie svn na repozytorium np.: svn ci svn+ssh://nazwa_sesji/lokalizacja_repo • Konfiguracja maven: <scm> <connection>scm:svn:svn+ssh://nazwa_sesji/lokalizacja_repo</connection> <developerConnection>scm:svn:svn+ssh://nazwa_sesji/lokalizacja_repo</deve loperConnection> <url>http://nazwa_serwera_web_svn/lokalizacja_repo</url> </scm> • Wykonać polecenie: mvn scm:checkin -Dmessage="test" • Jeżeli wszystko przebiegło pomyślnie oznacza to, że maven został prawidłowo skonfigurowany do pracy z repozytorium

167 BUDOWA PLANOWANEGO WYDANIA APLIKACJI

168 Konfiguracja wtyczki maven-release-plugin
Przez „wydanie” rozumiemy utworzenie planowanej finalnej wersji projektu Jeżeli skonfigurowano projekt zgodnie z wcześniejszymi slajdami to jest on praktycznie gotów do użycia tej wtyczki • Wtyczka nie wymaga wtedy dodatkowej konfiguracji, aczkolwiek można to zrobić. <plugin> <artifactId>maven-release-plugin</artifactId> <version>2.0-beta-9</version> </plugin>

169 Cele wtyczki release:clean – usunięcie informacji (dodatkowych plików) po wykonaniu release:prepare release:prepare – przygotowanie wydania w SCM. release:rollback – wycofanie zmian z ostatniego wydania release:perform – wykonanie wydania z systemu SCM release:stage – wykonanie wydania do innego repozytorium albo katalogu release:branch – utworzenie rozgałęzienia aktualnego projektu z aktualizacją numerów wersji

170 Przygotowanie wydania, cel: prepare
• Sprawdzenie zgodności źródeł z repozytorium (<scm>) • Zmiana numerów wersji w plikach pom.xml (część interaktywna, możliwy jest tryb wsadowy) • Zmiana informacji w <scm> tak aby odpowiadała nowej lokalizacji wydania w repozytorium, np. w systemie svn katalog tags • Wykonanie testów • Zatwierdzenie zamian w repozytorium (tags) • Podniesienie numerów wersji z jednoczesnym dodaniem SNAPSHOT • Zatwierdzenie zmian w repozytorium dla wersji rozwojowej np. w systemie svn katalog trunk

171 Inne przydatne cele projektowe
Po wykonaniu celu prepare dobrze jest wykonać clean, celem usunięcia tymczasowych kopii plików pom.xml i informacji o przygotowanym ostatnim wydaniu W przypadku problemów z dokończeniem przygotowania wydania, gdy wykonane zostały zmiany w repozytorium można wycofać te zmiany przy pomocy celu rollback Można jednak po dokonaniu poprawek w konfiguracji kontynuować przygotowanie wydania przy pomocy celu prepare (takie jest domyślne ustawienie dla wtyczki, które oczywiście można zmienić)

172 Wydanie projektu, cel: perform
Pobranie ostatniego wydania projektu Wykonanie celów: – deploy – umieszczenie artefaktów projektowych w repozytorium maven – site-deploy – umieszczenie strony projektowej na dedykowanym serwerze

173 Hudson

174 „Ręczna” integracja

175 Automatyczna integracja

176 Ciągła integracja CI, Ciągła integracja (ang. Continous Integration) – zestaw zaleceń i praktyk, które mają skrócić czas dostarczenia oprogramowania do użytkowników dzięki usprawnieniu integracji kodu.

177 CI - zalety Repozytorium kodu Automatyzacja build-ów
Automatyzacja testów Commit codziennie, build co noc Izolacja środowiska testowego od produkcyjnego Szybkie build-y, wyniki dostępne dla każdego Automatyzacja instalacji

178 Systemy CI Hudson - https://hudson.dev.java.net Apache Continuum - CruiseControl - LuntBuild - TeamCity -

179 CI

180 CI

181 Hudson - instalacja i uruchomienie
java -jar hudson.war deploy w kontenerze Tomcat Dostęp: Instalacja Hudson‘a jest wyjątkowo prosta. Wystarczy posiadać kontener servlet‘ów – może to być na przykład Apache Tomcat. W przypadku Tomcat‘a wystarczy jedynie przekopiować ściągnięty ze strony producenta plik hudson.war do katalogu webapps. Następnie uruchamiamy Tomcat‘a i to już wszystko! Przy standardowej konfiguracji Hudson powinien być dostępny pod adresem Konfiguracja Hudson‘a odbywa się poprzez Manage Hudson/System Configuration dostępne z głównej stronie. Minimalne ustawienia, jakie należy wprowadzić, to między innymi: lokalizacja instalacji JDK lokalizacja instalacji Ant/Maven konfiguracja serwera SMTP z którego będzie korzystał Hudson Instalacji plugin‘ów należy dokonać poprzez opcję Manage Hudson/Manage Plugins. Po zainstalowaniu wtyczek należy zrestartować serwer aplikacji. W tym momencie powinniśmy posiadać już Hudson‘a w postaci pozwalającej nam na osiągnięcie wyżej wskazanych celów. Teraz czeka nas jeszcze trochę pracy poza ACI związanej z czynnościami, które należy wykonać nawet, jeżeliby projekt nie korzystał z dobrodziejstw CI.

182 HUDSON - zalety Prosta instalacja, Prosta obsługa,
Możliwość obsługi dowolnych projektów (Ant, Maven, Make), Powiadomienia przez RSS/ /komunikator, Build-y w środowisku rozproszonym, Wtyczki wyświetlające raporty, metryki itp., Wykresy w postaci trendów.

183 Wtyczki SCM - integracja z systemami zarządzania kodem (inne niż SVN, CVS), Build triggers - wyzwalacze, Build tools - integracja z narzędziami do buildów, Build wrappers - dodatkowe operacje przed / po buildzie, Build notifiers - dodatkowe powiadomienia, Slave controllers - dodatkowe opcje zarządzania rozproszeniem obliczeń, Build reports - raporty, statystyki, wykresy, External site integrations - integracja z systemami zewn. Np. JIRA, Artifact uploaders - zarządzanie artefaktami, Page decorators - ozdobniki.

184 Tworzenie zadania Hudson‘a (1)
Mając już gotowy projekt wraz z działającym skryptem budującym należy utworzyć zadanie Hudsona: z głównego panelu sterowania Hudson wybieramy opcję New Job określamy nazwę dla tworzonego zadania wybieramy free-style jako rodzaj projektu i przechodzimy do następnego ekranu, gdzie wpiszemy pozostałe szczegóły wybieramy system kontroli wersji z którego będzie korzystał Hudson (w naszym przypadku będzie to Subversion) jako warunek wywołania procesu integracji (Build Triggers) wybieramy cykliczne odpytywanie repozytorium (Poll SCM) w harmonogramie wpisujemy łańcuch znaków zgodny z formatem crond (np. */2 * * * * – odpytywanie co 2 minuty)

185 Tworzenie zadania Hudson‘a (2)
następnie definiujemy, co właściwie będzie oznaczać dla Hudson‘a zbudowanie aplikacji – w naszym przypadku chcemy, aby było to wywołanie przy pomocy Ant‘a domyślnego celu zdefiniowanego w skrypcie budowania (zaznaczamy Invoke Ant) przyszedł czas na określenie czynności, które zostaną wykonane po zakończeniu budowania aplikacji – zgodnie z wcześniejszymi ustaleniami będzie interesowało nas: zachowanie artefaktów (validator.jar) z procesu budowania (Archive the artifacts) opublikowanie wyników testów jednostkowych (Publish JUnit test result report) opublikowanie wyników pokrycia kodu testami (Record Emma coverage report) opublikowanie wyników sprawdzenia jakości kodu przy użyciu checkstyle‘a (Report violations) wysłanie informacji o integracji, która się nie powiodła ( Notification)

186 Dodatkowe zdania uzyskanie zbudowanej wersji aplikacji z konkretnego build‘a analiza zmienności w czasie różnych parametrów opisujących aplikację w celu określenia trendów (np. procentowe pokrycie testami kodu źródłowego) zatwierdzenie zmian w repozytorium, które spowodują niebudowanie się aplikacji spowoduje wysłanie maila na wskazany adres

187 Podsumowanie Hudson stanowił bardzo ważne ogniwo w procesie wytwarzania, dla większości standardowych zastosowań powinien być odpowiedni. pozostając bardzo intuicyjny oraz łatwy w konfiguracji dostarcza możliwości na zupełnie wystarczającym poziomie zaawansowania.


Pobierz ppt "Zarządzanie i integracja aplikacji Java EE"

Podobne prezentacje


Reklamy Google