eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£íta£·
Diplomová práce
Analýza a automatizace rutinních proces· IT administrátora server· v reálné rm¥ Bc. Josef Havel
Vedoucí práce:
Prágl Miroslav Ing., MBA
Studijní program: Elektrotechnika a informatika, strukturovaný, Navazující magisterský
Obor: Výpo£etní technika
8. kv¥tna 2010
iv
v
Pod¥kování D¥kuji spole£nosti CZI s.r.o. za vyuºití jejího prost°edí k vývoji a testování této práce.
vi
vii
Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon).
V Praze dne 8. 5. 2010
.............................................................
viii
Abstract This work is dealing with server administrator routine processes automation in a real company. At rst, the processes are analysed and after that scripts for their automation are designed and implemented. A graphical user interface is created over the scripts.
Abstrakt Práce se zabývá automatizací rutinních proces· administrátora server· v reálné rm¥. Tyto procesy nejprve analyzuje a následn¥ navrhuje a implementuje skripty pro jejich automatizaci. Nad t¥mito skripty vytvá°í gracké uºivatelské rozhraní.
ix
x
Obsah 1 Úvod
1
2 Analýza proces· administrátora server·
3
3 Moºnosti vzdálené správy server·
9
3.1
Vzdálená plocha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
Vzdálené p°ipojení klientských aplikací . . . . . . . . . . . . . . . . . . . . . .
9
3.3
Rozhraní WMI - Windows Management Instrumentation . . . . . . . . . . . .
9
3.4
WinRM - Windows Remote Management
. . . . . . . . . . . . . . . . . . . .
4 Volání skript· v PowerShell
9
10
11
4.1
Spou²t¥ní skript· v PowerShell
. . . . . . . . . . . . . . . . . . . . . . . . . .
11
4.2
Podepisování skript· . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
4.3
Vzdálené volání v PowerShell 4.3.1
. . . . . . . . . . . . . . . . . . . . . . . . . . .
P°íkazy PowerShell pro vzdálená volání
. . . . . . . . . . . . . . . . .
5 Návrh a implementace skript· pro automatizaci proces·
15 16
19
5.1
Návrh systémové databáze . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.2
Návrh klientského skriptu
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
5.3
Návrh skript· provád¥jící základní úlohy . . . . . . . . . . . . . . . . . . . . .
31
5.3.1
Vytvo°ení zálohy databáze . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.3.2
Obnovení databáze ze zálohy
32
5.3.3
Komprimace a dekomprimace souboru
5.3.4
FTPS p°enos souboru
5.3.5
Vytvo°ení webu v IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
5.3.6
Vytvo°ení DNS záznamu . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5.3.7
Zaloºení emailových schránek . . . . . . . . . . . . . . . . . . . . . . .
41
5.3.8 5.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
. . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Export p°ihla²ovacích údaj· emailových schránek . . . . . . . . . . . .
42
ídící skripty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.4.1
Skript db2production_src.ps1 . . . . . . . . . . . . . . . . . . . . . . .
43
5.4.2
Skript db2production_dst.ps1 . . . . . . . . . . . . . . . . . . . . . . .
43
5.4.3
Skript db2developer_src.ps1 . . . . . . . . . . . . . . . . . . . . . . . .
43
5.4.4
Skript db2developer_dst.ps1
. . . . . . . . . . . . . . . . . . . . . . .
44
5.4.5
Skript web2production_src.ps1 . . . . . . . . . . . . . . . . . . . . . .
44
5.4.6
Skript web2production_dst.ps1 . . . . . . . . . . . . . . . . . . . . . .
45
5.4.7
Skript inform.ps1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
xi
xii
OBSAH
6 Návrh a implementace aplikace grackého rozhraní
49
6.1
Spou²t¥ní PowerShell skript· z C# . . . . . . . . . . . . . . . . . . . . . . . .
49
6.2
Uºivatelské rozhraní
50
6.3
Na£ítání dat do uºivatelských komponent
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 Testování
50
53
7.1
Proces db2production
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
7.2
Proces db2developer
7.3
Proces crtWebsite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57 59
7.4
Proces deployWeb
64
7.5
Proces dnsCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
7.6
Proces createMailbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Záv¥r
73
Literatura
75
A Instala£ní a uºivatelská p°íru£ka
77
A.1
Systémové nároky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
A.2
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
A.3
Kongurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
A.4
Automatizované procesy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
A.5
Práce s aplikací . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
B Obsah p°iloºeného CD
89
Seznam obrázk· 4.1
Certikát vlastní certika£ní autority . . . . . . . . . . . . . . . . . . . . . . .
13
4.2
Certikát vytvo°ený k podpisu skript· . . . . . . . . . . . . . . . . . . . . . .
15
5.1
Sí´ová architektura ve spol. CZI s.r.o. . . . . . . . . . . . . . . . . . . . . . . .
20
5.2
Logický datový model databáze . . . . . . . . . . . . . . . . . . . . . . . . . .
23
6.1
Okno procesu db2production
. . . . . . . . . . . . . . . . . . . . . . . . . . .
51
7.1
Spu²t¥ný proces db2production . . . . . . . . . . . . . . . . . . . . . . . . . .
54
7.2
Ov¥°ení nastavených oprávn¥ní
. . . . . . . . . . . . . . . . . . . . . . . . . .
56
7.3
Probíhající proces db2developer . . . . . . . . . . . . . . . . . . . . . . . . . .
59
7.4
Vykonaný proces crtWebsite . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.5
Kontrola nastavení vytvo°ené website . . . . . . . . . . . . . . . . . . . . . . .
62
7.6
Kontrola nastavení chybových stránek
. . . . . . . . . . . . . . . . . . . . . .
63
7.7
Kontrola nastavení DNS záznamu . . . . . . . . . . . . . . . . . . . . . . . . .
64
7.8
Dokon£ený proces deployWeb . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
7.9
Nastavení website vytvo°ené procesem deployWeb . . . . . . . . . . . . . . . .
66
7.10 DNS záznamy nastavené procesem deployWeb . . . . . . . . . . . . . . . . . .
67
7.11 Zóny vytvo°ené procesem createDNS . . . . . . . . . . . . . . . . . . . . . . .
68
7.12 Vykonaný proces DNS Create . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
7.13 DNS záznamy vytvo°ené procesem dnsCreate
70
. . . . . . . . . . . . . . . . . .
7.14 Emailové schránky vytvo°ené procesem createMailbox
. . . . . . . . . . . . .
71
7.15 P°ístupové údaje vrácené procesem mailboxInfo . . . . . . . . . . . . . . . . .
72
A.1
Záloºka DB to Production . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
A.2
Záloºka DB to Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
A.3
Záloºka Create Website
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
A.4
Záloºka Deploy web
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
A.5
Záloºka DNS records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
A.6
Záloºka Mailboxes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
A.7
Záloºka LogEntries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
B.1
Obsah p°iloºeného CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
xiii
xiv
SEZNAM OBRÁZK
Seznam tabulek 5.1
Popis tabulky srvGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2
Popis tabulky servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 21
5.3
Popis tabulky srvRoles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.4
Popis tabulky srvAssignRoles
. . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.5
Popis tabulky DNSSettings
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.6
Popis tabulky logs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
5.7
Popis parametr· funkce runScript . . . . . . . . . . . . . . . . . . . . . . . . .
24
5.8
Parametry funkce chckIsSAPA
. . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.9
Parametry funkce getDNSSrvParams . . . . . . . . . . . . . . . . . . . . . . .
26
5.10 Parametry funkce getWebsPath . . . . . . . . . . . . . . . . . . . . . . . . . .
26
5.11 Parametry funkce getFTPCred
26
. . . . . . . . . . . . . . . . . . . . . . . . . .
5.12 Parametry funkce getLogRecords
. . . . . . . . . . . . . . . . . . . . . . . . .
27
5.13 Parametry funkce createLogRecord . . . . . . . . . . . . . . . . . . . . . . . .
27
5.14 Parametry funkce runSysQuery . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.15 Parametry funkce setConnection
. . . . . . . . . . . . . . . . . . . . . . . . .
28
5.16 Parametry funkce processOutput
. . . . . . . . . . . . . . . . . . . . . . . . .
28
5.17 Seznam proces· s provád¥nou akcí
. . . . . . . . . . . . . . . . . . . . . . . .
30
5.18 Parametry funkce BackupDB
. . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.19 Parametry funkce RestoreDB
. . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.20 Parametry funkce AddLogin . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
5.21 Parametry funkce ftpDownload
. . . . . . . . . . . . . . . . . . . . . . . . . .
36
5.22 Parametry funkce ftpUpload . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
5.23 Parametry funkce createWebsite
. . . . . . . . . . . . . . . . . . . . . . . . .
37
5.24 Parametry skriptu dnscreate.ps1
. . . . . . . . . . . . . . . . . . . . . . . . .
39
. . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5.26 Parametry skriptu createMailbox.ps1 . . . . . . . . . . . . . . . . . . . . . . .
41
5.27 Parametry skriptu mailboxInfo.ps1 . . . . . . . . . . . . . . . . . . . . . . . .
42
5.25 Parametry funkce createZone
5.28 Parametry skriptu db2production_src.ps1 . . . . . . . . . . . . . . . . . . . .
43
5.29 Parametry skriptu db2production_dst.ps1 . . . . . . . . . . . . . . . . . . . .
44
5.30 Parametry skriptu db2developer_src.ps1 . . . . . . . . . . . . . . . . . . . . .
44
5.31 Parametry skriptu db2developer_dst.ps1 . . . . . . . . . . . . . . . . . . . . .
45
5.32 Parametry skriptu web2production_src.ps1
. . . . . . . . . . . . . . . . . . .
45
5.33 Parametry skriptu web2production_dst.ps1
. . . . . . . . . . . . . . . . . . .
46
Tabulka srvGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
A.1
xv
xvi
SEZNAM TABULEK
A.2
Tabulka servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
A.3
Tabulka DNSSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
Kapitola 1
Úvod Praxe ukazuje, ºe administrace a údrºba server· vyºaduje mnoho rutinních £inností, které se neustále opakují. Tyto £innosti zabírají jejich administrátor·m £as, který by mohli v¥novat nap°. rozvoji stávajících nebo implementaci nových sluºeb. Tato práce je zaloºena na základ¥ mých praktických zku²eností, získaných ve spole£nosti CZI s.r.o. V této spole£nosti v sou£asné dob¥ pracuji na pozici systémového administrátora. Spole£nost CZI s.r.o. se zabývá vývojem a hostingem webových aplikací na platform¥ ASP a ASP.NET. Úkolem této práce je analyzovat rutinní procesy administrátora a navrhnout skripty, které tyto procesy zautomatizují. Jednotlivé procesy jsou navrºeny a popsány v druhé kapitole. T°etí kapitola se zabývá moºnostmi vzdálené správy server·. tvrtá kapitola popisuje implementaci zvolené technologie vzdálené správy Windows Remote Management 2.0 ve skriptovacím jazyku PowerShell. Samotný návrh a implementace skript· je popsána v kapitole páté. Aby se usnadnilo uºivateli skript· zadávání vstupních parametr· p°i spou²t¥ní implementovaných proces·, je v ²esté kapitole nad skripty navrºeno a implementováno gracké rozhraní. P°edposlední kapitola je nazvána Testování a ukazuje praktické pouºití grackého rozhraní na v²ech navrºených procesech. P°íloha obsahuje uºivatelskou p°íru£ku popisující instalaci, konguraci a nasazení vytvo°eného produktu. Tento projekt jsem nazval SAPA, coº je akronym ke slovnímu spojení Skripty pro
Automatizaci Proces· Administrátora.
1
2
KAPITOLA 1.
ÚVOD
Kapitola 2
Analýza proces· administrátora server· Hlavní £inností spole£nosti CZI s.r.o je vývoj a provoz webových aplikací, poskytování emailových a hostingových sluºeb. Procesy, které má administrátor server· na starosti se tedy odvíjí od poºadavku komplexní správy související s provozem webových aplikací a souvisejících sluºeb, jako je správa emailových schránek a vedení DNS záznam·. Ve²keré sluºby jsou provozovány na technologiích rmy Microsoft. innosti, které administrátor server· opakovan¥ provádí lze shrnout do n¥kolika kategorií:
1. Nasazování a správa webových aplikací. 2. Práce s DNS záznamy. 3. Práce s emailovými schránkami.
Nasazování a správa webových aplikací Databázové servery jsou provozovány na Microsoft SQL Server 2008 (dále MS SQL server), aplika£ní £ást potom na Internet Information Server 7 a 7.5 (dále IIS). Nasazování webových aplikací do provozu je nejrozsáhlej²í proces, který zahrnuje mnoºství krok·, jeº je pot°eba vykonat. Nasazení webové aplikace na produk£ní server se skládá ze dvou samostatných £ástí:
1. P°enos databáze z vývojového na produk£ní server. 2. P°enos WEB aplikace z vývojového na produk£ní server.
Tyto £ásti nechám i nadále jako dva samostatné procesy, lze je provést odd¥len¥ a n¥kdy m·ºe nastat i situace, kdy p°ená²íme na produk£ní server jen databázi, protoºe aplikace je tam jiº umíst¥na.
3
4
KAPITOLA 2.
ANALÝZA PROCES ADMINISTRÁTORA SERVER
P°enos MS SQL databáze z vývojového na produk£ní server V tomto procesu p°emístíme kopii databáze umíst¥né na produk£ním, ev. testovacím MS SQL serveru, p°eneseme ji na produk£ní MS SQL server a tam provedeme její obnovení z vytvo°ené kopie. Kopii databáze provedeme vytvo°ením tzv. full backup, tedy plné zálohy. Z celé databáze se tak vytvo°í jeden soubor, který lze p°enést na jiný server a tam obnovit, £ímº se vytvo°í databáze ve stavu, jakém byla zálohována. Databáze mohou být velké a mít nap°. i stovky MB. Nicmén¥ tyto zálohy jdou velmi dob°e zkomprimovat, nap°. na desetinu své p·vodní velikosti. V MS SQL server 2008 lze nastavit komprimaci zálohy p°ímo p°i jejím vytvá°ení a následn¥ ji automaticky dekomprimovat p°i obnovení, nicmén¥ tato funk£nost je podporována aº v edici Enterprise. Ve spol. CZI s.r.o je pouºívána edice Standard, takºe kompresi a dekompresi budeme provád¥t externím nástrojem. Zkomprimovanou zálohu musíme n¥jakým zp·sobem p°enést na produk£ní server. K tomuto ú£elu vyuºijeme protokol FTP v jeho zabezpe£ené verzi, kdy jsou p°ená²ená data ²ifrována, tj. FTPS. Po dekomprimaci databáze následuje její vytvo°ení na MS SQL serveru, provedeme tzv. database restore, tj. obnovení databáze. Aby se web aplikace mohla p°ipojovat do databáze, pot°ebuje se nejprve p°ihlásit na MS SQL server. K tomu pot°ebuje znát p°ihla²ovací údaje. Proto je nutné zaloºit na MS SQL serveru uºivatele, majícího oprávn¥ní p°istupovat do dané databáze. P°ístupová oprávn¥ní se d¥lí na dv¥ £ásti: p°ihlá²ení na MS SQL server a oprávn¥ní pro p°ístup do databáze. Pro p°ístup uºivatele na MS SQL server se zakládá tzv. login, ur£ující pravidla p°ístupu na server a zejména uºivatelské jméno a heslo. Aby mohl uºivatel, který se p°ihlásí daným login p°istupovat k databázi (pomineme nastavení serverových rolí), je pot°eba v dané databázi vytvo°it objekt typu user, tedy uºivatele. Tomuto uºivateli se nastaví oprávn¥ní, denující akce, které bude moci na dané databázi provád¥t. Na²e aplikace budou £íst a zapisovat data do databáze, takºe daný uºivatel bude mít nastavena oprávn¥ní db_datareader a
db_datawriter. Posledním krokem je propojení objekt· user a login. Daným uºivatelským jménem a heslem se provede autentizace na MS SQL server a aplikace bude mít oprávn¥ní pro £tení a zápis dat do obnovené databáze. Kaºdá aplikace bude mít tedy vlastní p°ístupové údaje na MS SQL server a bude moci pracovat pouze s daty své databáze. Objekty user a login budeme pojmenovávat vºdy stejn¥ jako databázi. Objekt user je sou£ástí databáze, tj. v¥t²inou bude jiº vytvo°ený po obnovení databáze. Proto musíme kontrolovat, zda jiº existuje, £i nikoliv. Dokonce m·ºe nastat i situace, kdy v databázi existuje i objekt login. To nastane v p°ípad¥, kdy na serveru jiº databáze daného jména existuje a my ji budeme chtít p°epsat databází ze zálohy. V tomto p°ípad¥ tyto objekty propojíme, aby m¥li stejný tzv. security identier.
Proces p°enosu databáze na produk£ní server se tedy skládá z t¥chto krok·: 1. Vytvo°ení zálohy databáze na vývojovém, ev. testovacím serveru. 2. Komprimace zálohy databáze. 3. P°enos komprimovaného souboru protokolem FTPS na produk£ní server. 4. Dekomprimace zálohy databáze. 5. Obnovení databáze z backup souboru na MS SQL server.
5
6. Vytvo°ení uºivatele na MS SQL serveru a nastavení hesla. 7. Svázání uºivatele na MS SQL serveru s uºivatelem v obnovené databázi.
P°enos WEB aplikace z vývojového na produk£ní server Tento proces zahrnuje vytvo°ení nového webu na produk£ním WEB serveru a p°enesení kopie zdrojových kódu z vývojového, ev. testovacího serveru na server produk£ní. První úlohou v tomto procesu je vytvo°ení nového WEBu v rámci IIS na produk£ním serveru. Na daný web m·ºe být nasm¥rováno více domén najednou. P°i vytvá°ení nové website musí být tedy umoºn¥no zadat více doménových jmen, tzv. hostheaders. V¥t²inou je poºadováno, aby web server akceptoval doménová jména (nej£ast¥ji druhého °ádu) sou£asn¥ s variantou domény t°etího °ádu za£ínající www. Na IIS serveru jsou weby provozovány v rámci tzv. Application Pools, £esky nazývaných
Fondy aplikací. Kaºdý Application Pool tvo°í na serveru samostatný proces, v rámci n¥hoº je webová aplikace spou²t¥na. Pod jedním procesem m·ºe b¥ºet více aplikací, které ho sdílí. Nevýhoda sdílených proces· spo£ívá v tom, ºe se aplikace mohou navzájem ovliv¬ovat. Pokud jedna aplikace shodí proces, jsou tím ovlivn¥ny i ostatní aplikace, které tento proces sdílí. Naopak výhodou je, ºe sdílením t¥chto proces· jsou ²et°eny systémové prost°edky. Dáme tedy moºnost uºivateli, aby si zvolil, zda se má pro aplikaci vytvo°it nový Application pool, coº je vhodné u náro£n¥j²ích aplikací. Aby byl na serveru v provozovaných webových aplikací p°ehled, bude web v IIS pojmenován podle hlavního doménového jména, stejn¥ tak i adresá°, ve kterém budou umíst¥ny zdrojové kódy. Zdrojové kódy budeme op¥t pro rychlej²í p°enos komprimovat a na cílový server p°ená²et protokolem FTPS. Poslední £ást tohoto procesu tvo°í nastavení DNS záznam· nastavených doménových jmen. Budeme p°edpokládat, ºe daná zóna na DNS serveru jiº existuje (její vytvo°ení bude samostatný proces). Na DNS serveru nastavíme záznamy typu CNAME na hodnotu plného doménového jména webového serveru. U domén druhého °ádu, které budou tvo°it zónu nelze dle RFC normy nastavit CNAME, místo toho nastavíme A záznam s IP adresou, která bude získána p°ekladem doménového jména webového serveru.
Proces se skládá z t¥chto krok·: 1. Vytvo°ení adresá°e a nastavení nového webu v IIS na produk£ním webovém serveru. 2. Komprese zdrojových kódu aplikace na vývojovém, ev. testovacím serveru. 3. P°enos komprimovaných zdrojových kódu na produk£ní server protokolem FTPS. 4. Dekomprese zdrojových kód· aplikace. 5. Nastavení DNS záznam· poºadovaných domén, sm¥°ujících na webový server.
P°enos databáze z produk£ního SQL serveru na vývojový P°i provozování aplikací nastávají situace, kdy v aplikaci vznikne chyba, která je závislá na konkrétních datech. Pokud není chyba triviální, je ve v¥t²in¥ p°ípad· nutné vývojá°i
6
KAPITOLA 2.
ANALÝZA PROCES ADMINISTRÁTORA SERVER
zp°ístupnit produk£ní databázi, tedy p°enést ji na vývojový server. P°enos databáze bude podobný jako p°i p°enosu databáze opa£ným sm¥rem, tj. z vývojového prost°edí do produk£ního. Rozdíl bude v tom, ºe na vývojovém serveru uvnit° rmy nemusí být nastaven a pouºíván FTP server. Záloha databáze se vytvo°í a zkomprimuje na produk£ním serveru. Poté se k tomuto serveru p°ipojí vývojový server uvnit° rmy a stáhne si tuto zálohu protokolem FTPS. Po rozbalení a obnovení databáze na vývojovém serveru budeme provád¥t stejný postup s vytvo°ením uºivatele a p°ístupu na MS SQL server. V¥t²inou budeme p°episovat star²í verzi databáze, takºe dojde pouze ke svázání objekt· user a login.
Proces se skládá z t¥chto krok·: 1. Vytvo°ení zálohy databáze na produk£ním serveru. 2. Komprimace zálohy databáze. 3. P°ipojení vývojového serveru protokolem FTPS a staºení komprimované databáze z produk£ního serveru. 4. Dekomprimace zálohy databáze. 5. Obnovení databáze z backup souboru na MS SQL server. 6. Vytvo°ení uºivatele na MS SQL serveru a nastavení hesla, pokud to bude pot°eba. 7. Svázání uºivatele na MS SQL serveru s uºivatelem v obnovené databázi.
Vytvo°ení webu ze ²ablony v rámci jednoho serveru P°i implementaci webových aplikací se vyuºívá jiº hotového systému, na který se aplikuje jiná graka. Úkolem administrátora je v tomto p°ípad¥ vytvo°it novou website dle existujícího vzoru, tedy ²ablony. V²e se bude odehrávat na jednom (vývojovém) serveru. Pro novou website bude vytvo°en adresá°, do n¥hoº budou nakopírovány zdrojové kódy webu tvo°ícího ²ablonu. Dále z n¥j bude p°evzato nastavení virtuálních adresá°· a chybových stránek (stránek posílaných, pokud server odpoví kódem 404 apod.). Posledním úkonem bude moºnost vytvo°it v p°íslu²né zón¥ na DNS serveru CNAME, resp. A záznamy dle nastavených hostheaders.
Proces se skládá z t¥chto krok·: 1. Vytvo°ení nové website v IIS dle nastavení webu tvo°ícího ²ablonu. 2. Nakopírování zdrojových kód· ze ²ablony do adresá°e s novým webem. 3. P°evzetí nastavení virtuálních adresá°· a chybových stránek. 4. Zaloºení CNAME, resp. A záznamu na DNS serveru.
7
Práce s DNS záznamy Ve spole£nosti CZI s.r.o. je provozován jeden primární DNS server, na platform¥ Microsoft DNS server. Mezi nej£ast¥j²í úkony na DNS serveru je vytvá°ení nových DNS zón, dále pak nastavování jednotlivých DNS záznam·. Vytvo°ení DNS zóny je samostatný úkon, který se provádí bezprost°edn¥ po registraci domény u doménového registrátora. Po vytvo°ení nové DNS zóny obsahuje tato zóna n¥které p°eddenované záznamy. Jedná se o SOA a NS záznam. SOA obsahuje Serial number, které se inkrementuje p°i kaºdé zm¥n¥ provedené v dané zón¥ a je implicitn¥ nastaveno na hodnotu 1. Pro v¥t²í p°ehlednost toto £íslo nastavíme, aby odpovídalo formátu yyyymmdd01, kde yyyy je £ty°místný formát roku, mm dvouciferný formát m¥síce a dd dvouciferný formát dne. Hodnota 01 je po£áte£ní hodnota, která se jako první bude inkrementovat p°i zm¥n¥ DNS záznam·. Dle SOA záznamu se tak pozná, kdy byla zóna na DNS serveru vytvo°ena. Dále je v SOA záznamu uveden kontakt na správce zóny (responsible person), který je implicitn¥ hostmaster.<jmeno_pocitace>. Zóna také obsahuje implicitní NS záznam, jehoº hodnota je jméno po£íta£e. Toto nastavení je nevyhovující a je pot°eba ho upravit na správné hodnoty. Nakonec p°idáme do zóny druhý NS záznam na sekundární jmenný server.
Proces se skládá z t¥chto krok·: 1. Vytvo°ení nové primární dop°edné zóny (Forward Lookup Zone ). 2. Editace SOA záznamu, nastavení Serial number a administra£ního kontaktu. 3. Editace implicitn¥ vytvo°eného NS záznamu. 4. Vytvo°ení druhého NS záznamu.
Dále se v zón¥ vytvá°í A, CNAME a MX záznamy. Ty se v²ak v¥t²inou vytvá°í jako sou£ást jiných proces·, nap°. po vytvo°ení webu v IIS, nicmén¥ bude administrátorovi umoºn¥no tyto záznamy nastavovat samostatn¥.
Práce s emailovými schránkami Emailový server ve spol. CZI s.r.o. je provozován na produktu Merak Mail Server, spole£nosti IceWarp Ltd. Pro své klienty spol. CZI s.r.o. provozuje jeden emailový server, ºádný záloºní zde není, takºe i v doménách se bude nastavovat pouze jeden MX záznam. Mezi rutinní £innosti administrátora pat°í vytvá°ení nových emailových schránek na základ¥ dodaných emailových adres a dále pak export p°ihla²ovacích údaj· k jednotlivým schránkách, a´ uº po po£áte£ním vytvo°ení schránek, £i na základ¥ ºádosti klienta, který své p°ihla²ovací údaje ztratil. Ob£as klienti poºadují i výpis v²ech emailových schránek své domény.
Proces se skládá z t¥chto krok·: 1. Ov¥°ení, zda na emailovém serveru existuje doména zakládaných email·. 2. Vytvo°ení domény na emailovém serveru, pokud neexistuje.
8
KAPITOLA 2.
ANALÝZA PROCES ADMINISTRÁTORA SERVER
3. Zaloºení emailových ú£tu v dané domén¥. 4. Získání p°ihla²ovacích údaj· k vytvo°eným emailovým ú£t·m. 5. Pokud se p°i zakládání schránek vytvá°ela na emailovém serveru nová doména, vytvo°í se v dané domén¥ MX záznam na emailový server.
Kapitola 3
Moºnosti vzdálené správy server· V této kapitole popí²i n¥kolik metod, kterými lze vzdálen¥ spravovat servery na platform¥ Microsoft Windows.
3.1 Vzdálená plocha První metoda je práce na serveru p°es vzdálenou plochu (Remote desktop). Tato metoda spo£ívá v p°ihlá²ení administrátora na server protokolem RDP, jehoº server naslouchá ve výchozím nastavení na portu 3389. Administrátor vidí pracovní plochu vzdáleného serveru podobn¥, jako by se díval na monitor p°ímo p°ipojený k serveru. Tato metoda je ur£ena zejména pro práci v grackém rozhraní a pro automatizaci proces· ji ºádným zp·sobem nevyuºijeme.
3.2 Vzdálené p°ipojení klientských aplikací Tato metoda vyuºívá klientské aplikace, které jsou spou²t¥ny na stanici administrátora a p°ipojují se na server za ú£elem správy ur£ité sluºby. Jako p°íklad m·ºe poslouºit nástroj Microsoft SQL Management Studio pro správu databázového serveru Microsoft SQL Server. Protoºe kaºdá aplikace naslouchá na ur£itém portu serveru, je t°eba na rewallu, za kterým jsou umíst¥ny servery, otev°ít p°íslu²né porty. Tyto aplikace mívají £asto gracká rozhraní, nicmén¥ £asto k nim existují i konzolové verze, které by ²ly k automatizaci proces· vyuºít. Nevýhodu vidím v pot°eb¥ aplikací komunikovat vºdy po jiném portu, coº klade v¥t²í nároky na nastavení rewallu. To m·ºe být problém, pokud se o zabezpe£ení stará externí rma nebo máme servery umíst¥ny u klienta a staráme se pouze o jejich správu. Nastává tak fáze komunikace se správcem rewallu a zd·vod¬ování, ºe daná komunikace je pro nás pot°ebná a nep°edstavuje bezpe£nostní riziko. Dal²í problém by mohl nastat, pokud bychom na serveru provozovali aplikaci, u které by nebyla moºnost vzdálené správy (Remote management).
3.3 Rozhraní WMI - Windows Management Instrumentation WMI je sluºba, která umoº¬uje spravovat a °ídit systémy dálkov¥. Je dostupná v opera£ních systémech rmy Microsoft od verze Windows 2000. WMI v sob¥ zahrnuje úloºi²t¥ objekt·,
9
10
v
KAPITOLA 3.
kterých
jsou
obsaºeny
informace
MONOSTI VZDÁLENÉ SPRÁVY SERVER
od
zprost°edkovatel·
sluºby
WMI
[13].
Tito
zprost°edkovatelé komunikují se sou£ástmi opera£ního systému, aplikacemi a sluºbou WMI. P°íkladem takovéhoto zprost°edkovatele m·ºe být zprost°edkovatel registru, který umoº¬uje pracovat s hodnotami systémového registru. WMI je navrºeno pro p°ístup z r·zných programovacích jazyk·, nap°. C/C++, C#, ale i skriptovacích prost°edí jako je VBScript nebo PowerShell. WMI je zaloºeno na DCOM (Distributed Component Object Model), coº má za následek obtíºnou komunikaci skrze rewall. DCOM p°i°azuje pro komunikaci náhodn¥ jeden TCP a UDP port, o kterém se klient dozví tak, ºe nejprve kontaktuje Service Control Manager (SCM), naslouchající standardn¥ na portu 135 (TCP i UDP). e²ením je nastavit DCOM, aby pouºíval vyhrazený rozsah port· a ten na rewallu otev°ít.
3.4 WinRM - Windows Remote Management WinRM je implementace WS-Management protokolu, zaloºeném na Simple Object Access Protocol (SOAP). Tento protokol byl vyvinut výrobci HW a SW pro pot°eby vzdálené správy. Jedná se tedy o textový protokol, který pouºívá k vým¥n¥ zpráv formát XML. Výhodou oproti WMI je, ºe vyuºívá pro p°íchozí komunikaci pouze jeden port. Pro verzi WinRM 1.1 a star²í se jedná o TCP port 80 (HTTP) a 443 (HTTPS). Nová verze WinRM 2.0, uvedená s Windows 2008 Server R2 poslouchá standardn¥ na portu TCP 5985. Windows Remote Management obsahuje krom¥ serverové £ásti také klienta WinRS - Windows Remote Shell. WinRS umoº¬uje spou²t¥t procesy na vzdáleném systému. WinRM je obsaºen v systémech Windows Vista, Windows Server 2003 R2 a vy²²í.
Kapitola 4
Volání skript· v PowerShell V p°edchozí kapitole jsem uvedl n¥kolik metod jak spravovat vzdálené servery. Pro vzdálené spou²t¥ní
skript·
na
serveru
se
nabízí
vyuºití
poslední
metody
-
Windows
Remote
Management. Je to metoda nejnov¥j²í a v sou£asné dob¥ preferovaná, její výhodu vidím zejména v snadném nastavení rewallu, p°es který bude komunikace probíhat. Pro ve²kerou komunikaci sta£í otev°ít TCP port 5985. Zárove¬ je i komunikace bezpe£ná, protoºe WinRM podporuje ²ifrovaný p°enos dat. Tuto metodu tedy pouºiji pro komunikaci se vzdálenými servery, a to ve verzi WinRM 2.0. Úkolem této práce je navrhnout skripty pro automatizaci proces·. Jako skriptovací jazyk lze pouºít VBScript, nicmén¥ vhodn¥j²í bude pouºít PowerShell, který je modern¥j²í, objektov¥ orientovaný a zaloºený na platform¥ .NET. PowerShell ve verzi 1.0 je sou£ástí opera£ního systému Windows 2008 Server, Windows 7 a Windows 2008 Server R2 jiº standardn¥ obsahují verzi 2.0. PowerShell lze také doinstalovat do Windows 2003 Server SP2 a Windows Vista. Jako skriptovací jazyk tedy volím PowerShell ve verzi 2.0.
4.1 Spou²t¥ní skript· v PowerShell Kdyº se pokusíme ve výchozím nastavení po instalaci spustit v PowerShell skript, setkáme se s tímto hlá²ením:
File C:\Scripts\SAPA\inform.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details. At line:1 char:13 + .\inform.ps1 <<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException PowerShell nabízí t°i moºnosti, jak nastavit politiku zabezpe£ení p°i volání skript·. Jsou to moºnosti:
•
Unrestricted
11
12
KAPITOLA 4.
•
RemoteSigned
•
AllSigned
VOLÁNÍ SKRIPT V POWERSHELL
Danou úrove¬ bezpe£nostní politiky nastavíme p°íkazem Set-ExecutionPolicy, jako parametr se uvede úrove¬ zabezpe£ení. Unrestricted znamená, ºe budeme moci spou²t¥t jakýkoliv skript, a´ uº ho spou²tíme odkudkoliv. RemoteSigned zakazuje spou²t¥ní digitáln¥ nepodepsaných skript· ze sí´ového umíst¥ní, nap°. namapované sí´ové jednotky. Poslední volba AllSigned vyºaduje, aby byly digitáln¥ podepsané v²echny skripty. Dále je²t¥ existuje volba Restricted, která je nastavena jako výchozí a ta zakazuje spou²t¥ní jakýchkoliv skript·. Nastavení úrovn¥ zabezpe£ení je nutné provád¥t s administrátorským oprávn¥ním. Pokud máme po£íta£e v domén¥, je moºné tato nastavení provád¥t hromadn¥ pomocí Group Policy. Výhoda podepisování skript· spo£ívá ve skute£nosti, ºe podepsaný skript nelze podvrhnout a také nelze spou²t¥t skripty, které n¥kdo upravil po jejich podepsání.
4.2 Podepisování skript· Pro podepisování skript· je pot°eba certikát ur£eny pro podepisování kódu. Certikát lze zakoupit od certika£ní autority, které nebývají levné. Nicmén¥ existuje moºnost vytvo°it si vlastní certika£ní autoritu, kterou lze skripty podepisovat. K tomuto ú£elu lze pouºít utilitu
makecert.exe, která je sou£ástí .NET Framework SDK [10]. Vytvo°ení ko°enového certikátu provedeme tímto p°íkazem:
makecert -n "CN=PowerShell Local CZI s.r.o. Certificate Root" -a sha1 -r -sv root.pvk root.cert -ss Root -sr localMachine
Parametry mají tento význam: •
n - jméno certikátu dle standardu X.500
•
a - pouºitý algoritmus, vybrat lze mezi sha1 a md5
•
r - ur£uje, ºe se vytvo°í Self-signed certikát, tj. podepsany sám sebou.
•
sv - ur£uje soubor s privátním klí£em. Pokud neexistuje, dojde k jeho vytvo°ení.
•
root.cert je název souboru, do kterého se uloºí certikát.
•
ss - název úloºi²t¥, do kterého se certikát uloºí, Root znamená, ºe bude za°azen mezi ko°enové certika£ní autority
•
sr - udává umíst¥ní, kam se certikát uloºí, na výb¥r je localMachine - bude dostupný v rámci po£íta£e, tj. pro v²echny uºivatele a currentuser - bude dostupný pouze pro aktuálního uºivatele
4.2.
PODEPISOVÁNÍ SKRIPT
13
Obrázek 4.1: Certikát vlastní certika£ní autority
Po spu²t¥ní p°íkazu se objeví dialogové okno, do kterého zadáme privátní klí£ certika£ní autority, pokud soubor s privátním klí£em dosud neexistuje. Vytvo°ený certikát poté najdeme mezi d·v¥ryhodnými certika£ními ú°ady. Dal²ím krokem je vytvo°ení certikátu, kterým se budou skripty podepisovat. K tomuto kroku op¥t vyuºijeme aplikaci makecert, s následujícími parametry:
makecert -pe -n "CN=CZI PowerShell Scripts" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cert -ss MY Oproti minulému volání p°íkazu makecert p°ibyly parametry:
•
iv - privátní klí£ vydavatele certikátu (vzniklého p°i vytvá°ení certika£ní autority)
•
ic - soubor s certikátem vydavatele
•
eku - identikátor objektu OID, v tomto p°ípad¥ p°edur£uje certikát k podepisování kódu
•
ss - ur£uje jméno úloºi²t¥, do kterého se certikát uloºí, volbou MY se certikát uloºí mezi osobní certikáty
14
KAPITOLA 4.
VOLÁNÍ SKRIPT V POWERSHELL
Osobní certikáty ur£ené k podepisování kódu si vypí²eme v PowerShell p°íkazem Get-
ChildItem, dostaneme následující výpis:
PS C:\> Get-ChildItem cert:\CurrentUser\My -CodeSigningCert Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My Thumbprint Subject ---------------CF1F06E778703500C7C5D9A5E2B8F797F11319D1 CN=CZI PowerShell Scripts Protoºe je certikát v úloºi²ti jako jediný, je umíst¥n v poli, které vrací Get-Item na pozici 0. Uloºíme si ho do prom¥nné $cert :
$cert = @(Get-ChildItem cert:\CurrentUser\My -CodeSigning)[0] Následn¥ s tímto certikátem podepí²eme skript signed.ps1 :
Set-AuthenticodeSignature signed.ps1 $cert Podpis se do skriptu umístí na konec souboru:
Write-host 'Self signed script' # SIG # Begin signature block # MIIERgYJKoZIhvcNAQcCoIIENzCCBDMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUuMnQdrOmpc9yJ5OkXGTuT4Vf # SI6gggJMMIICSDCCAbWgAwIBAgIQsD8tF6YcMq5Mkqzh26PriDAJBgUrDgMCHQUA # MDAxLjAsBgNVBAMTJUNaSSBQb3dlclNoZWxsIExvY2FsIENlcnRpZmljYXRlIFJv ... # 9w0BAQEFAASBgD2NJlSJDhGTu8HXJ01vvz/adlmryCXFfp8E0xrix5itrgbmF5L6 # 7KzgAZBdldS7SQvTyo9XIwJ+jP2TS1z3jAZyT0amlHIae2YX/Tm+KNDso2LodMoR # S8GFS41oaj2wpb+Rh2PtF54Ep9g/lYyKE1omeaKMhvzItQzd/zGDy1m6 # SIG # End signature block I p°esto, ºe je certikát umíst¥n v d·v¥ryhodných certika£ních autoritách, PowerShell se p°i prvním spu²t¥ní skriptu zeptá, zda má této autorit¥ d·v¥°ovat:
Do you want to run software from this untrusted publisher? File C:\PS\signed.ps1 is published by CN=CZI PowerShell Scripts and is not trusted on your system. Only run scripts from trusted publishers. [V] Never run [D] Do not run [R] Run once [A] Always run [?] Help: Pokud zvolíme moºnost Always run, PowerShell se p°í²t¥ jiº ptát nebude a skript spustí. Aby bylo moºné skript spustit i na jiném po£íta£i s nastavením politiky spou²t¥ní skript· na
AllSigned, je nutné exportovat certikát námi vytvo°ené certika£ní autority do souboru, ten
4.3.
VZDÁLENÉ VOLÁNÍ V POWERSHELL
15
Obrázek 4.2: Certikát vytvo°ený k podpisu skript·
p°enést na cílový po£íta£ a tam jej naimportovat do úloºi²t¥ d·v¥ryhodných certika£ních autorit. Tyto úkony lze provést nap°. z MMC konzole, do které p°idáme SNAP-IN certikáty. Podepisování skript· je uºite£né v p°ípad¥, kdy chceme mít jistotu, ºe na²e skripty nikdo nezm¥nil (p°i zm¥n¥ se musí znovu podepsat) nebo v p°ípad¥, kdyº bychom skripty distribuovali dále a klienti by cht¥li mít jistotu, ºe pochází opravdu od nás. Podepisování skript· bych doporu£il v institucích s vysokým zabezpe£ením, jako jsou nan£ní instituce apod. Osobn¥ si myslím, ºe v prost°edí spole£nosti CZI s.r.o. podepisovat skripty není nutné.
4.3 Vzdálené volání v PowerShell Ke vzdálenému volání pouºívá PowerShell sluºby Windows Remote Management, zmín¥ný v p°edchozí kapitole. Aby vzdálený po£íta£ p°ijímal volání PowerShell, je na n¥m nutné nejprve nakongurovat sluºbu WinRM. PowerShell tuto úlohu usnad¬uje tím, ºe poskytuje cmdlet Enable-PSRemoting, který pot°ebná nastavení provede. Pokud tedy pot°ebujeme, aby vzdálený po£íta£ p°ijímal volání, p°ihlásíme se na n¥j nap°. p°es vzdálenou plochu, spustíme PowerShell a v n¥m cmdlet Enable-PSRemoting [8]. PowerShell vypí²e následující hlá²ení:
PS C:\> Enable-PSRemoting
16
KAPITOLA 4.
VOLÁNÍ SKRIPT V POWERSHELL
WinRM Quick Configuration Running command "Set-WSManQuickConfig" to enable this machine for remote management through WinRM service. This includes: 1. Starting or restarting (if already started) the WinRM service 2. Setting the WinRM service type to auto start 3. Creating a listener to accept requests on any IP address 4. Enabling firewall exception for WS-Management traffic (for http only). Do you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All
[S] Suspend
[?] Help:
Po zvolení "Y"PowerShell provede vypsané body 1. - 4. První bod nastartuje sluºbu WinRM pokud jiº neb¥ºí, druhý ji nastaví, aby se spou²t¥la ihned po startu po£íta£e. T°etí bod povolí p°ipojení ke sluºb¥ WinRM z jakékoliv IP adresy a poslední otev°e ve Windows Firewall TCP port 5985 pro p°íchozí spojení. Pokud chceme vzdálené volání PowerShell zakázat, provedeme to obdobn¥ p°íkazem Disable-PSRemoting.
4.3.1
P°íkazy PowerShell pro vzdálená volání
Invoke-Command P°íkaz Invoke-Command umoº¬uje spustit skript na vzdáleném po£íta£i a ve²kerý výstup (standardní, chybový...) vrací zp¥t ke klientovi. Jméno nebo IP adresu vzdáleného po£íta£e p°edáme p°íkazu parametrem ComputerName. Pokud chceme na vzdáleném po£íta£i spustit více p°íkaz· a nechceme je dávat do samostatného souboru, lze je vloºit do bloku a p°i volání pouºít parametr -ScriptBlock. Pokud uºivatel, který p°íkaz volá, nemá na vzdáleném po£íta£i p°ístupová oprávn¥ní nebo chceme pouºít jiná, p°idáme navíc parametr -Credential. P°íklad vykonání dvou p°íkaz· na vzdáleném po£íta£i:
PS C:\> Invoke-Command -scriptBlock{cd c:\; ls } -ComputerName testw7 -Credential Get-Credential Directory: C:\ Mode ---d---d---d-r-...
LastWriteTime ------------8.4.2010 20:13 14.7.2009 4:37 8.4.2010 20:33
Length Name PSComputerName ------ ----------------inetpub testw7 PerfLogs testw7 Program Files testw7
Na vzdáleném po£íta£i nejprve do²lo k nastavení aktuálního adresá°e na c: a poté byl vypsán jeho obsah. Cmdlet Get-Credential zajistí zobrazení dialogového okna, do kterého zadáme uºivatelské jméno a heslo ke vzdálenému po£íta£i. Tyto údaje se následn¥ pouºijí jako hodnota parametru -Credential.
4.3.
VZDÁLENÉ VOLÁNÍ V POWERSHELL
17
Enter-PSSession P°íkaz Enter-PSSession umoº¬uje interaktivní p°ipojení ke vzdálenému po£íta£i. To znamená, ºe uºivatel p°ed sebou vidí konzoli vzdáleného po£íta£e, podobn¥ jako u SSH p°ipojení v unixovém prost°edí. P°íklad interaktivního p°ipojení ke vzdálenému po£íta£i:
PS C:\> Enter-PSSession -ComputerName testw7 -Credential Get-Credential [testw7]: PS C:\Users\Administrator\Documents>
New-PSSession Tento p°íkaz slouºí k vytvo°ení trvalého p°ipojení ke vzdálenému po£íta£i. Pokud nap°. voláme n¥kolikrát po sob¥ p°íkaz Invoke-Command, vytvo°í se pokaºdé do£asné p°ipojení, coº je pomalá operace. Trvalé p°ipojení se vyplatí v p°ípadech, kdy pot°ebujeme provést více volání p°íkazu Invoke-Command zasebou. Volání je pak výrazn¥ rychlej²í. P°íklad vytvo°ení a pouºití trvalého p°ipojení:
PS C:\>$s = New-PSSession -ComputerName testw7 -Credential Get-Credential PS C:\>Invoke-Command -Session $s -ScriptBlock { ls c:\ } První p°íkaz vytvo°í nové trvalé spojení se vzdáleným po£íta£em a uloºí jeho referenci do prom¥nné $s. Druhý p°íkaz vytvo°ené p°ipojení vyuºije a na vzdáleném po£íta£i vykoná výpis ko°enového adresá°e c:. Výstup p°íkazu p°enese na konzoli uºivatele volajícího p°íkaz.
18
KAPITOLA 4.
VOLÁNÍ SKRIPT V POWERSHELL
Kapitola 5
Návrh a implementace skript· pro automatizaci proces· V p°edchozí kapitole jsem uvedl n¥kolik p°íkaz· PowerShell pro vzdálená volání. Pro vykonání skript· na vzdáleném po£íta£i pouºijeme cmdlet Invoke-Command. V kapitole 2 byly popsány procesy, které je pot°eba zautomatizovat. Kaºdý proces se skládá z n¥kolika samostatných £ástí. Serverové skripty proto rozd¥lím do dvou vrstev. První vrstva bude zahrnovat skripty provád¥jící základní úlohy, jako je nap°. p°enos souboru FTP(s) protokolem, zálohování databáze na serveru apod. Skripty z této vrstvy poté budou volány pomocí skript· druhé, °ídící vrstvy. Pro lep²í pochopení toto uvedu na p°íkladu p°enosu databáze z vývojového serveru na produk£ní. V tomto procesu je zapot°ebí provést tyto kroky:
1. Na vývojovém serveru vytvo°it zálohu databáze. 2. Zálohu databáze zkomprimovat. 3. Komprimovaný soubor s databází p°enést protokolem FTPS na produk£ní server. 4. Na produk£ním serveru komprimovaný soubor s databází dekomprimovat. 5. Na produk£ním serveru provést obnovu databáze ze zálohy.
Vý²e uvedené kroky jsou slovním popisem °ídícího skriptu a body 1. - 5. jsou voláními skript· základních úloh. V °ídícím skriptu budou tedy volány skripty provád¥jící tyto základní úlohy:
•
Záloha MS SQL databáze,
•
Komprese souboru.
•
FTP upload.
•
Dekomprese souboru.
•
Obnova MS SQL databáze.
19
20KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Tyto °ídící a základní skripty budou volány na vzdálených po£íta£ích a budou tedy tvo°it serverovou £ást aplikace. Klientskou £ást bude tvo°it skript, kterému budou p°edávány uºivatelem parametry a dle nich bude volat p°íkazem Invoke-Command p°íslu²ný skript °ídící vrstvy. Aby nebylo nutné kopii serverových skript· udrºovat na kaºdém serveru, budou skripty uloºeny v sí´ovém úloºi²ti, tzv. Script repository. Toto sí´ové úloºi²t¥ bude dostupné jako sdílená sí´ová sloºka a m·ºe být umíst¥no na libovolném serveru. Pokud máme servery ve více odd¥lených sítích, bude vhodné mít v kaºdé síti jedno repository. P°ístup k repository bude tak rychlej²í a dále odstraní pot°ebu kongurovat rewall pro tuto sluºbu. P°i vzdáleném volání skriptu budeme vºdy pot°ebovat ur£ité informace o vzdáleném serveru. Jedná se nap°. o p°ihla²ovací údaje na server, FTP(s) p°ístupové údaje apod. Pro ú£ely evidence t¥chto údaj· navrhneme systémovou databázi, v níº budou tyto údaje uloºeny. Abychom nemuseli mít dv¥ databáze, pro klientskou a serverovou £ást, budeme na£ítat data z databáze pouze v klientské £ásti. Pokud bude data pot°ebovat serverová £ást, budeme je p°edávat jako parametry p°íkazu Invoke-Command. Architektura, pro níº budou skripty vyvíjeny je zobrazena na obr. 5.1. Servery jsou ve dvou odd¥lených sítích spojených linkou WAN. V první síti jsou servery vývojové, jedná se o servery uvnit° spole£nosti. V druhé síti jsou servery produk£ní, umíst¥né v housingovém centru. V uvedené architektu°e se nachází dv¥ samostatná script repository.
Obrázek 5.1: Sí´ová architektura ve spol. CZI s.r.o.
5.1.
NÁVRH SYSTÉMOVÉ DATABÁZE
21
5.1 Návrh systémové databáze V této £ásti vytvo°íme podp·rnou databázi pro klientskou £ást aplikace. Servery rozd¥líme do skupin. Kaºdá skupina bude mít specické nastavení n¥kterých atribut·. Nap°. ve spole£nosti CZI s.r.o. m·ºeme servery rozd¥lit do dvou základních skupin. V první skupin¥ jsou servery umíst¥né v provozovn¥ spole£nosti, tedy servery vývojové a testovací. Druhá skupina zahrnuje servery produk£ní, které jsou umíst¥ny v housingovém centru. Tyto skupiny a jejich atributy budeme uchovávat v tabulce srvGroups.
Název sloupce
datový typ
Popis hodnoty
grpName
nvarchar(50)
název skupiny (primární klí£)
scriptPath
nvarchar(50)
cesta ke script repository
scriptRepUser
nvarchar(50)
uºivatelské jméno pro p°ístup ke script repository
scriptRepPasswd
nvarchar(50)
heslo pro p°ístup ke script repository
transferPath
nvarchar(50)
cesta k adresá°i s uploadovanými soubory
ftpUser
nvarchar(50)
uºivatelské jméno pro FTP p°ístup na server
ftpPasswd
nvarchar(50)
heslo pro FTP p°ístup na server
WebsPath
nvarchar(50)
cesta k webroot adresá°i
Tabulka 5.1: Popis tabulky srvGroups Cesta k adresá°i s uploadovanými soubory se zadává pouze u server·, na které je nutné provád¥t upload soubor·, nap°. SQL nebo WEB server. Cesta WebsPath se zadává pouze u WEB server·. Tyto skupiny budeme p°i°azovat jednotlivým server·m. Ty budeme evidovat v tabulce
servers. Jednotlivé sloupce popisuje tab. 5.2.
Název sloupce
datový typ
Popis hodnoty
hostname
nvarchar(50)
název po£íta£e (primární klí£)
fqdn
nvarchar(50)
plné doménové jméno
grpName
nvarchar(50)
název skupiny (cizí klí£ do tabulky srvGroups)
username
nvarchar(50)
uºivatelské jméno pro p°ihlá²ení k serveru
password
nvarchar(50)
heslo pro p°ihlá²ení k serveru
Tabulka 5.2: Popis tabulky servers Nyní máme servery za°azeny do skupin, dále pro n¥ denujeme tzv. role. Role bude ozna£ení sluºby, kterou server poskytuje. Nap°. SQL server bude mít roli SQL, DNS server roli DNS apod. Pro seznam rolí vytvo°íme referen£ní tabulku srvRoles. Bude obsahovat pouze jeden sloupec, a to název role. Protoºe na jednom serveru m·ºe fungovat nap°. SQL i WEB server zárove¬, vytvo°íme tabulku srvAssignRoles, která bude p°i°azovat server·m jejich role. Ve skriptech budeme nastavovat DNS záznamy. P°i vytvá°ení nové DNS zóny budeme pot°ebovat znát n¥které parametry. Jedná se nap°. o plné doménové jméno primárního a sekundárního DNS serveru. Pro tyto ú£ely zaloºíme tabulku DNSSettings, viz tab. 5.5.
22KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Název sloupce
datový typ
Popis hodnoty
roleName
nvarchar(50)
název role (primární klí£)
Tabulka 5.3: Popis tabulky srvRoles
Název sloupce
datový typ
Popis hodnoty
id
int
identikátor záznamu (primární klí£, autom. inkr.)
hostname
nvarchar(50)
název po£íta£e (cizí klí£ do tabulky servers)
roleName
nvarchar(50)
název role (cizí klí£ do tabulky srvRoles)
Tabulka 5.4: Popis tabulky srvAssignRoles
Název sloupce
datový typ
Popis hodnoty
id
int
identikátor záznamu (primární klí£, autom. inkr.)
hostname
nvarchar(50)
název po£íta£e (cizí klí£ do tabulky servers)
primNS
nvarchar(50)
primární jmenný server
secNS
nvarchar(50)
sekundární jmenný server
adminEmail
nvarchar(50)
email na správce zóny
priority
int
priorita DNS serveru (unikátní)
Tabulka 5.5: Popis tabulky DNSSettings
Hodnota sloupce adminEmail se bude zadávat ve formátu pro DNS server, tj. znak @ je nahrazen znakem .. Sloupec priorita ur£uje prioritu nameserveru. Vy²²í prioritu ur£uje niº²í £íslo. Tento atribut jsem p°idal za ú£elem nastavování DNS záznam· v automatizovaných procesech, jako je nap°. zakládání nového webu. Skriptu se tak nebude muset p°edávat hodnota s názvem DNS serveru a vybere se vºdy ten s nejvy²²í prioritou. Ve spol. CZI s.r.o. je ve°ejný DNS server pouze jeden, takºe záznamy se budou vºdy vytvá°eny pouze na n¥m. O operacích provád¥ných na serverech budeme vést záznamy. Do databáze p°idáme dal²í tabulku logs. Logický datový model navrºené databáze je na obr. 5.2.
5.1.
NÁVRH SYSTÉMOVÉ DATABÁZE
Obrázek 5.2: Logický datový model databáze
23
24KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Název sloupce
datový typ
Popis hodnoty
id
int
identikátor záznamu (primární klí£, autom. inkr.)
date
smalldatetime
datum a £as provedení operace
action
nvarchar(50)
ozna£ení provedeného procesu
success
bit
ur£uje, zda proces skon£il úsp¥²n¥, £i chybou
output
test
informace o b¥hu procesu, vrácené ze server·
Tabulka 5.6: Popis tabulky logs
5.2 Návrh klientského skriptu Klientský skript se bude jmenovat client.ps1 a bude zpracovávat parametry od uºivatele. Jeho hlavním ú£elem bude spou²t¥ní skript· na vzdálených serverech. Tuto úlohu bude provád¥t funkce runScript. Dále bude obsahovat podp·rné funkce, nap°. pro získávání parametr· z navrºené databáze a nakonec rozhodovací bloky p°íkazu switch pro zpracování vstup· od uºivatele a volání funkce runScript. Níºe uvedu popis v²ech funkcí tohoto skriptu.
Funkce runScript Spou²tí skript na vzdáleném po£íta£i.
Parametr
Popis
[string]$scriptName
Jméno souboru s °ídícím skriptem (bez p°ípony) v script repository.
[string]$remServer
Doménové jméno nebo IP adresa vzdáleného po£íta£e.
[object]$arguments = $null
Argumenty p°edávané vzdálenému po£íta£i.
Tabulka 5.7: Popis parametr· funkce runScript
Popis funkce Nyní popí²i, jaké kroky funkce p°i svém b¥hu vykonává. Protoºe se na server pot°ebujeme vzdálen¥ p°ihlásit, budeme pot°ebovat p°ihla²ovací údaje. Abychom je nemuseli manuáln¥ zadávat p°i kaºdém volání skriptu, navrhli jsme si databázi, v niº tyto a podobné údaje uchováváme. Jako první krok tedy funkce provede tento dotaz do databáze, z níº zjistí v²echny pot°ebné údaje, které bude pot°ebovat:
$query = select fqdn, username, password, scriptPath, scriptRepUser, scriptRepPasswd, transferPath from servers join srvGroups on servers.grpName = srvgroups.grpName where fqdn = `'$remServer`' PowerShell pro p°edávání p°ihla²ovacích údaj· vyuºívá objekt PSCredential, který se p°edává parametru Credential. Protoºe heslo nejde tomuto objektu p°edat ve form¥ £istého textu, je nutné provést jeho konverzi na zabezpe£ený °et¥zec:
5.2.
25
NÁVRH KLIENTSKÉHO SKRIPTU
$pwds = ConvertTo-SecureString $remSPasswd -AsPlainText -Force $srcCred = New-Object System.Management.Automation.PSCredential ($remsUser, $pwds) invoke-command -ComputerName $remServer -Credential $srcCred -ScriptBlock { ... } Hodnotu v prom¥nné $srcCred lze jiº p°edat parametru Credential ve funkci Invoke-
Command.
V
dal²ím
kroku
jiº
následuje
samotné
volání
funkce
Invoke-Command
s parametrem -ScriptBlock, kterému p°edáme p°íkazy, jeº má na vzdáleném po£íta£i vykonat. Protoºe máme skripty ve sdíleném úloºi²ti, p°ipojíme si toto úloºi²t¥ jako sí´ovou jednotku. Pouºijeme p°ístupové údaje pro p°ihlá²ení k repository na£tené z databáze. Abychom se nepokou²eli p°i°adit sí´ové jednotce písmeno, které je jiº pouºito, funkce nejprve testuje odzadu abecedy písmena a jednotku namapuje pod první volné písmeno. Po p°ipojení jednotky se provede p°íkaz Invoke-Expression, který spustí skript z p°ipojeného script repository, jehoº jméno bylo p°edáno funkci Invoke-Command parametrem ArgumentList. Zde je ukázka kódu s voláním °ídícího skriptu:
$net = New-Object -com WScript.Network; $net.mapnetworkdrive($drive, $scriptPath, $false, $shareSUser, $shareSPasswd) #run script on remote computer Invoke-Expression ("$drive\$scriptName.ps1 " + $arguments) $net.removenetworkdrive($drive, $true) #with force dismount
Funkce chckIsSAPA Ov¥°uje, zda je FQDN (úplné doménové jméno) vzdáleného po£íta£e v systémové databázi. Tato funkce je ve skriptu volána pro zdrojový i cílový server (pokud je vyºadován) p°ed voláním jakéhokoliv vzdáleného skriptu, aby nedo²lo k provedení £ásti procesu na zdrojovém serveru a z d·vodu chybného zadání cílového serveru nebyl proces dokon£en. Pokud není server v databázi nalezen, dojde k vyvolání výjimky [7] a ukon£ení skriptu.
Parametr
Popis
[string]$remServer
FQDN vzdáleného po£íta£e.
Tabulka 5.8: Parametry funkce chckIsSAPA
Funkce getDNSSrvParams Vrací ze systémové databáze parametry pro vytvá°ené zóny na DNS serveru. Mezi tyto parametry pat°í FQDN primárního i sekundárního jmenného serveru a emailový kontakt na správce DNS zóny. Pokud není funkci p°edán parametr $fqdn, vrátí hodnoty DNS serveru s nejvy²²í prioritou.
26KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Parametr
Popis
[string]$fqdn = $null
FQDN DNS serveru.
return [string[]]
Vrací pole s parametry pro vytvá°ené zóny na DNS serveru.
Tabulka 5.9: Parametry funkce getDNSSrvParams
Funkce getWebsPath Vrací ze systémové databáze plnou cestu k adresá°i, kde jsou umíst¥ny zdrojové kódy web·. Vyuºívá se p°i vytvá°ení nových web· na WEB serverech.
Parametr
Popis
[string]$remServer
FQDN vzdáleného po£íta£e.
return [string]
Vrací °et¥zec s plnou cestou k adresá°i s umíst¥ním web·.
Tabulka 5.10: Parametry funkce getWebsPath
Funkce getFTPCred Vrací ze systémové databáze p°ihla²ovací údaje na FTP(S) daného serveru.
Parametr
Popis
[string]$remServer
FQDN vzdáleného po£íta£e.
return [string[]]
Vrací pole s p°ihla²ovacími údaji na daný FTP server v po°adí uºivatelské jméno, heslo.
Tabulka 5.11: Parametry funkce getFTPCred
Funkce getLogRecords Vrací ze systémové databáze záznamy logu zadaného po£tu, se°azené od nejnov¥j²ích.
Funkce createLogRecord Vytvá°í záznam v logu do tabulky logs systémové databáze. Zaznamenává se aktuální datum a £as, provedený proces, zda skon£il úsp¥²n¥, £i nikoliv a informa£ní výstupy vrácené °ídícími skripty na vzdálených serverech. Funkci je p°edáváno pouze jméno provedeného procesu, ostatní údaje jsou p°edávány globálními prom¥nnými, viz funkce processOutput.
Funkce runSysQuery Vykonává SQL dotaz na systémové databázi.
5.2.
NÁVRH KLIENTSKÉHO SKRIPTU
Parametr
Popis
[int]$cnt
Po£et posledních záznam·, které se mají vrátit.
return [string[]]
Vrací pole se záznamy logu.
27
Tabulka 5.12: Parametry funkce getLogRecords
Parametr
Popis
[string]$action
Jméno provedeného procesu.
Tabulka 5.13: Parametry funkce createLogRecord
Parametr
Popis
[string]$Query
et¥zec s SQL dotazem.
return [string[]]
Vrací pole s výsledky dotazu. Pokud je vráceno více záznam·, je pole dvojrozm¥rné.
Tabulka 5.14: Parametry funkce runSysQuery
Funkce setConnection Testuje p°ipojení k systémové databázi a nastavuje heslo do globální prom¥nné, aby ho nebylo nutné zadávat p°i dal²ích voláních skriptu. Pokud není parametru $passwd p°edáno heslo a dosud není nastaveno v globální prom¥nné $global:SQLPasswd, zobrazí se uºivateli ºádost o vloºení hesla na standardní vstup. Heslo je p°e£teno a uloºeno za²ifrované jako
SecureString. Pokud se p°ipojení k databázi nezda°í, vyhodí se výjimka s popisem chyby. Dále nastavuje p°ipojovací °et¥zec do databáze a ukládá ho do prom¥nné $script:conn_options, platné v rámci skriptu.
Funkce processOutput Zpracovává výstup vrácený vzdálenými po£íta£i. Je navrºena za ú£elem ukládání výpis· t¥chto po£íta£·, do prom¥nné $script:logEntry za ú£elem uloºení do tabulky s logy. Pokud na za£átku výpisu nalezne °et¥zec -Error-, nastaví prom¥nnou $script:actionSuccess na hodnotu
$false, coº indikuje, ºe n¥který skript skon£il chybou. Po tomto zpracování p°edává obsah prom¥nné $output do výstupní pipeline.
Funkce getHelp Vypisuje do výstupní pipeline obsah souboru s nápov¥dou ke klientskému skriptu. Obsah této nápov¥dy je uloºen v souboru getHelp.txt, nacházejícího se ve stejném adresá°i jako klientský skript. Funkce nemá ºádné parametry.
28KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Parametr
Popis
[string] $SqlServer
Jméno nebo IP adresa SQL Serveru.
[string] $DB
Název systémové databáze.
[string] $LoginN
P°ihla²ovací jméno na SQL Server.
[string] $passwd = $null
Heslo pro p°ipojení k SQL Serveru.
Tabulka 5.15: Parametry funkce setConnection
Parametr
Popis
[string] $Output
et¥zec ur£ený pro výstupní pipeline.
Tabulka 5.16: Parametry funkce processOutput
Popis krok· klientského skriptu P°ed spu²t¥ním vzdáleného skriptu funkcí runScript je nutné zpracovat uºivatelský vstup. Proces, který se má vykonat je p°edáván do skriptu v prom¥nné $action. Na základ¥ obsahu této prom¥nné je p°íkazem switch provedeno v¥tvení dle poºadovaného spu²t¥ní procesu. Níºe uvádím p°íklad tohoto zpracování na procesu db2production:
switch ($action) { "db2production" { $dbNameSrc = $p2 $dstServer = $p3 $dbNameDest = $dbndst if (!$dbNameDest) { $dbNameDest = $dbNameSrc } chckIsSAPA $dstServer $ftpCred = getFTPCred $dstServer $srcSArgs = ($dbNameSrc, $ftpCred[0], $ftpCred[1], $dstServer) if ($instsrc) { $srcSArgs += "-instance $instsrc" } runScript "db2production_src" $remServer $srcSArgs | ForEach-Object { [string]$o = $_; if ($o -like '`[*`]*') { processOutput $o } else { $retv = $_ } } $compFile = $retv $dstSargs = ($compFile, $dbNameDest) if ($instdst) { $dstSargs += "-instance $instdst" } if ($overwrite) { $dstSargs += "-overwrite $overwrite" } runScript "db2production_dst" $dstServer $dstSargs | ForEach-Object {
5.2.
}
NÁVRH KLIENTSKÉHO SKRIPTU
29
[string]$o = $_; if ($o -like '`[*`]*') { processOutput $o } else { $retv = $_ } } $loginPasswd = $retv if ($loginPasswd) { processOutput "Password to created login $dbNameDest : $loginPasswd" }
Zpracování výstupu Pro výpis na konzoli se v PowerShell pouºívá funkce Write-Host. Protoºe bude mít ale tato klientská £ást grackou nadstavbu, nelze tento p°íkaz pro vypisování pouºít. Skript musí posílat výstupy p°es výstupní pipeline. Pro zápis do pipeline se vyuºívá funkce Write−Output. PowerShell má tu vlastnost, ºe pokud uvnit° funkce pouºijeme dal²í funkci nebo p°íkaz, který má denován návratovou hodnotou, tato hodnota se vºdy p°edá do výstupní pipeline bez ohledu na to, zda byl pouºit p°íkaz return. Pokud se pouºije na konci funkce p°íkaz
return, vrátí se volajícímu v²echny hodnoty z výstupní pipeline naráz. Pokud místo return pouºíváme funkci Write−Output, zapisuje se do pipeline standardního výstupu ihned, tj. volající má k dispozici hodnoty je²t¥ d°íve, neº skon£í volaná funkce. Protoºe chceme být o probíhajících procesech informování i v pr·b¥hu vzdálených volání, pouºijeme ve v²ech skriptech k p°edávání hodnot p°íkaz Write−Output. Dále je pot°eba odli²it návratové hodnoty funkcí a skript· od informativních výpis·. K tomuto rozli²ení jsem pouºil takového formátu informativních zpráv, v n¥mº za£ínají vºdy stejným uvozením, tj. znakem [, pokra£ují názvem po£íta£e, kde jsou p°íkazy vykonávány a kon£í znakem ]. Toto zpracování je moºné vid¥t vºdy u volání funkce runScript, viz. vý²e.
P°ístupové oprávn¥ní P°ístupové údaje ke vzdáleným server·m jsou uloºeny v systémové databázi. Aby nemohl procesy spou²t¥t kdokoliv má p°ístup ke klientské £ásti aplikace, je p°i prvním spu²t¥ní skriptu uºivatel vyzván k zadání hesla k této databázi. Toto heslo se p°e£te a uloºí do globální prom¥nné $global:SQLPasswd jako typ SecureString. P°i dal²ím spu²t¥ní klientského skriptu je z této prom¥nné na£teno a roz²ifrováno, aby ho uºivatel nemusel znovu zadávat. Jedná se o ov¥°ení v·£i Login na MS SQL serveru, kde je uloºena systémová databáze. Ostatní údaje pot°ebné pro p°ipojení k databázi jsou uloºeny v souboru cong.ps1. P°ístupová oprávn¥ní nejsou nijak roz£len¥na a kaºdý uºivatel mající p°ístup do databáze m·ºe spou²t¥t v²echny procesy. Kongura£ní údaje v souboru cong.ps1 :
[string]$SqlServer = "czidnet2" # Name or IP adress of SQL server [string]$DB = "sapa" # Name of database [string]$LoginN = "sapa" # Login name to SQL Server
30KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Spou²t¥ní jednotlivých proces· Jak jiº bylo °e£eno vý²e, název procesu, který se má spustit, je p°edáván skriptu v prom¥nné
$action. Tyto procesy jsou rozebrané v kapitole 2. P°ed spu²t¥ním procesu jsou vºdy nejprve zpracovány parametry skriptu a dále pak spou²t¥ny jednotlivé °ídící skripty na vzdálených serverech. Níºe uvádím tabulku ozna£ující jednotlivé procesy. Ve sloupci Volané skripty jsou názvy °ídících skript·. N¥které jsou spou²t¥né jen p°i ur£ité volb¥, zejména se to týká nastavování DNS záznam·.
Ozn. procesu Provád¥ná akce
Volané skripty
db2production
P°enos databáze z vývojového SQL serveru na
db2production_src
produk£ní.
db2production_dst
P°enos databáze z produk£ního SQL Serveru na
db2developer_src
vývojový.
db2developer_dst
P°enos webové aplikace z vývojového serveru na
crtWebDev
produk£ní.
dnscreate
Vytvo°ení nového webu, s moºností ze ²ablony.
web2production_src
db2developer
crtWebsite
deployWeb
web2production_dst dnscreate dnsCreate
Práce s DNS záznamy.
dnscreate
createMailbox
Vytvá°ení emailových schránek.
createMailbox dnscreate
mailboxInfo
Získávání
p°ístupových
údaj·
k
emailovým
mailboxInfo
schránkám.
Tabulka 5.17: Seznam proces· s provád¥nou akcí
5.3.
31
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
5.3 Návrh skript· provád¥jící základní úlohy V této £ásti popí²i skripty provád¥jící základní úlohy. Mezi tyto úlohy pat°í:
•
Vytvo°ení zálohy databáze.
•
Obnovení databáze ze zálohy.
•
Komprimace a dekomprimace souboru.
•
FTP p°enos souboru.
•
Vytvo°ení webu v IIS.
•
Vytvo°ení DNS záznamu.
•
Zaloºení emailových schránek.
•
Export p°ihla²ovacích údaj· emailových schránek.
P°i návrhu t¥chto skript· budu dbát, aby byly pouºitelné nejen v rámci tohoto projektu, ale i samostatn¥.
5.3.1
Vytvo°ení zálohy databáze
Skript backupdb.ps1 bude ur£en k vytvo°ení zálohy (backup) MS SQL databáze. Záloha se umístí do adresá°e ur£eného pro vytvá°ení záloh databází. Tento adresá° bude skriptem zji²t¥n z nastavení MS SQL serveru. Tuto zálohu je nutné ponechat na serveru, protoºe bude slouºit jako základ pro diferenciální zálohování, které probíhá automaticky. Skript obsahuje funkci BackupDB, provád¥jící celé zálohování. Ta je volána po spu²t¥ní skriptu s parametry uvedenými v tab 5.18.
Parametr
Popis
[string]$serverName
Jméno
nebo
p°ipojujeme
IP k
adresa
jiné,
neº
MS
SQL
výchozí
serveru.
Pokud
instanci,
zadáváme
se
<server>\
. [string]$dbName
Název databáze.
return [string]
Jméno souboru se zálohou databáze, v£etn¥ plné cesty.
Tabulka 5.18: Parametry funkce BackupDB Stejnými parametry, v uvedeném po°adí, se volá i tento skript. Pro práci s MS SQL serverem z PowerShell pouºiji SQL Server Management Objects (SMO) [14]. SMO je kolekce objekt· navrºená pro programové °ízení MS SQL serveru. Do PowerShell je zapot°ebí p°idat na za£átek skriptu tyto reference:
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer .SmoExtended")
32KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
První reference zajistí zp°ístupn¥ní základního jmenného prostoru SMO, objekty pro zálohu a obnovu databází jsou umíst¥ny ve jmenném prostoru SmoExtended. Zálohu databáze v PowerShell provede tento kód:
$server = new-object ('Microsoft.SqlServer.Management.Smo.Server') $serverName $dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup") $dbBackup.Database = $dbName $dbBackup.Devices.AddDevice($backupFile , "File") $dbBackup.Action = "Database" $dbBackup.SqlBackup($server) První °ádek provede p°ipojení k MS SQL serveru. Na druhém °ádku se vytvo°í objekt pro práci se zálohami. Následuje p°edání jména databáze. Metoda AddDevice p°idá za°ízení s umíst¥ním záloh. V na²em p°ípad¥ je to soubor, tedy File, v prom¥nné $backupFile je uloºena plná cesta k souboru, do n¥hoº bude vytvo°ena záloha. Metoda SqlBackup spustí zálohu databáze. Neº doje k vytvo°ení zálohy databáze, skript nejprve zkontroluje, zda na daném SQL serveru databáze daného jména existuje. Pokud tomu tak není, dojde k vyhození výjimky. Soubor se zálohou bude pojmenován dle jména databáze, za kterým bude následovat aktuální datum a £as, tj. _yyyyMMdd_HHmmss.bak. Záloha se umístí do backup adresá°e, daného v nastavení MS SQL serveru. Cestu k tomuto adresá°i obsahuje vlastnost
$server.Settings.BackupDirectory.
5.3.2
Obnovení databáze ze zálohy
Skript restoredb.ps1 provede obnovení databáze na MS SQL serveru ze souboru s její zálohou [4]. Dále vytvo°í login a uºivatele v databázi, pokud neexistuje. Skript obsahuje dv¥ funkce. První se jmenuje RestoreDB a provádí obnovení databáze ze souboru. Druhá addLogin nastavuje oprávn¥ní pro p°ístup k databázi. Skript se volá stejnými parametry jako funkce RestoreDB. Její parametry jsou uvedené v tab. 5.19
Parametr
Popis
[string]$serverName
Jméno
nebo
p°ipojujeme
IP k
adresa
jiné,
neº
MS
SQL
výchozí
serveru.
Pokud
se
instanci,
zadáváme
<server>\. [string]$backupFile
Úplná cesta k souboru se zálohou databáze.
[string]$restoreDBName
Jméno, pod kterým se obnoví databáze.
[string]$overwrite
Pokud databáze jiº na serveru existuje a tento parametr má hodnotu overwrite, dojde k jejímu p°epsání.
Tabulka 5.19: Parametry funkce RestoreDB Pro obnovení databáze z PowerShell jsou pot°eba dva objekty:
$backupDevice = New-Object("Microsoft.SqlServer.Management.Smo.BackupDeviceItem") ($backupFile, "File") $smoRestore = New-object("Microsoft.SqlServer.Management.Smo.Restore")
5.3.
33
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
První slouºí k p°ipojení souboru se zálohou databáze, druhý provádí její obnovu na server. Funkce nejprve zjistí, zda na serveru jiº databáze daného jména existuje. Pokud ano a je nastavena prom¥nná $overwrite, dojde k jejímu p°epsaní, v opa£ném p°ípad¥ dojde k vyvolání výjimky a ukon£ení skriptu. Pokud na serveru jiº databáze existuje a chceme ji p°epsat, zavolá se metoda $server.KillAllProcesses($restoreDBName), která ukon£í v²echna p°ipojení k databázi, aby ji bylo moºné p°epsat. Databáze na MS SQL serveru se m·ºe skládat ze t°í fyzických soubor·. První soubor má p°íponu .mdf a je to hlavní datový soubor databáze. Druhý s p°íponou .ldf obsahuje transak£ní log databáze a t°etí .ncf obsahuje fulltextový katalog (pokud je sou£ástí databáze). Tyto soubory mohou být na serveru umíst¥ny v r·zných adresá°ích, £i diskových jednotkách. Soubor se zálohou databáze v²echny tyto t°i soubory obsahuje. P°i obnovování databáze je nutné zadat cestu, kde budou tyto soubory umíst¥ny. Tyto cesty jsou uloºeny v nastavení MS SQL serveru. Umíst¥ní datových soubor· získáme z vlastnosti
$server.Settings.DefaultFile. Ne vºdy v²ak musí být tato hodnota vypln¥na. Pokud zadána není,
pouºijeme
cestu
s
umíst¥ním
datového
souboru
systémové
databáze
master,
$server.Information.MasterDBPath. Stejným zp·sobem zjistíme cestu k výchozímu adresá°i s transak£ními logy. Tu obsahuje vlastnost $server.Settings.DefaultLog, a pokud není tato hodnota nastavena, pouºijeme $server.Information.MasterDBLogPath. Umíst¥ní soubor· s fulltextovým katalogem jiº tak snadné není. Z neznámého d·vodu tato cesta v nastavení serveru chybí a je ji nutné získat ze systémového registru. PowerShell umí pracovat s registrem stejn¥ jako se souborovým systémem. Výchozí cestu k soubor·m s fulltextovými katalogy získáme takto:
#actual instance name, for default it is MSSQLSERVER $instanceName = $server.ServiceName #path to instance list $inst = "HKLM:\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL" #get instance id for current instance $instanceId = (Get-ItemProperty HKLM:\$inst).$instanceName #get setup properties of actual instance $instSetup = "HKLM:\Software\Microsoft\Microsoft SQL Server\$instanceId\Setup" $FullTextPath = (Get-ItemProperty HKLM:\$instSetup)."FullTextDefaultPath" Prvním krokem je zji²t¥ní jména p°ipojené instance. To se nachází ve vlastnosti
$server.ServiceName. Dále je pot°eba zjistit ID dané instance. To je uloºeno v registru pod klí£em nazvaném stejn¥ jako jméno instance, viz. prom¥nná $instanceId. Cesta k adresá°i s fulltextovými katalogy se zadává p°i instalaci. Instala£ní nastavení je uloºeno ve v¥tvi, na kterou odkazuje p°edposlední °ádek vý²e uvedeného kódu. Samotná cesta k fulltextovým katalog·m je uvedena v klí£i FullTextDefaultPath. Pokud daný klí£ v registru neexistuje, znamená to, ºe na SQL serveru není nainstalována sluºba fulltextu. V tom p°ípad¥ nelze obnovu databáze provést, o £emº je uºivatel upozorn¥n vyvoláním výjimky. Tímto postupem jsme zjistili, kam mají být soubory databáze na serveru uloºeny. Soubor se zálohou databáze si sebou nese tyto hodnoty uloºené ze serveru, na n¥mº byla záloha provedena. Tyto cesty se v²ak mohou na jiném serveru li²it, proto je nutné provést tzv. relokaci. V PowerShell proto vytvo°íme objekt t°ídy
34KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Microsoft.SqlServer.Management.Smo.RelocateFile a tomuto objektu nastavíme vlastnosti LogicalFileName
a
PhysicalFileName.
LogicalFileName
je
logické
jméno
souboru
a
PhysicalFileName je úplná cesta k danému souboru. Logické jméno soubor· necháváme stejné jako na zdrojovém serveru. Fyzické soubory pojmenováváme dle jména databáze. Po nastavení v²ech parametr· spustíme obnovení metodou $smoRestore.SqlRestore($server). Po obnovení databáze na SQL server provedeme nastavení p°ístupových oprávn¥ní. Tento úkol zajistí funkce AddLogin. Její parametry jsou v tab. 5.20.
Parametr
Popis
[string]$serverName
Jméno
nebo
p°ipojujeme
IP k
adresa
jiné,
neº
MS
SQL
výchozí
serveru.
Pokud
instanci,
zadáváme
se
\<server>. [string]$dbName
Jméno databáze.
return [string]
Pokud funkce na serveru zaloºí nového uºivatele, vrátí vygenerované heslo.
Tabulka 5.20: Parametry funkce AddLogin Na MS SQL server je moºné se p°ihlásit dv¥ma zp·soby. První je Windows Authentication, p°i n¥mº probíhá ov¥°ení uºivatele v·£i lokálním uºivatel·m ve Windows nebo proti uºivatel·m v domén¥. My budeme vºdy pouºívat druhý zp·sob, a to SQL Server Authentication, kdy je uºivatelské jméno a heslo uloºeno p°ímo na SQL serveru. Nejprve si funkce zjistí, zda v databázi existuje uºivatel a login stejného jména jako databáze. Pokud neexistuje login, zaloºí se jako první, a to následovn¥:
$newlogin = New-object ('Microsoft.SqlServer.Management.Smo.Login') ($server, $dbName) $newlogin.PasswordPolicyEnforced = $false $newlogin.DefaultDatabase = $dbName $newlogin.LoginType="SqlLogin" $passwd = createPassword $newlogin.Create($passwd) D·leºité je nastavit vlastnost PasswordPolicyEnforce na hodnotu $false, jinak po ur£ité dob¥ dojde k expiraci hesla a aplikace se nebude moci k databázi p°ipojit. Novému uºivateli je vygenerováno heslo. Heslo je generováno funkcí createPassword, která je v samostatném souboru /general/generpasswd.ps1. Tuto funkci jsem p°evzal [6] a pozm¥nil tak, aby vytvo°ené heslo obsahovalo pouze písmena a £íslice. Jeho délka je 20 znak·. V dal²ím kroku se kontroluje, zda v databázi existuje uºivatel, pojmenovaný jako databáze. Pokud ne, dojde k jeho zaloºení:
$newuser = New-Object ('Microsoft.SqlServer.Management.Smo.User') $newuser.parent = $db $newuser.name = $dbName $newuser.login = $dbName
5.3.
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
35
$newuser.defaultSchema = "dbo" $newuser.Create() $newuser.AddToRole("db_datareader") $newuser.AddToRole("db_datawriter") Objektu Smo.User se p°edá název databáze, v níº se má vytvo°it, jméno a také login. Vytvo°ený uºivatel tak bude propojen s login do databáze. Po vytvo°ení uºivatele se mu nastaví pro danou databázi oprávn¥ní db_datareader a db_datawriter. Tato oprávn¥ní umoºní uºivateli zápis a £tení dat z databáze. Pokud v databázi jiº uºivatel existuje, je nutné ho svázat s p°íslu²ným login, tj. nastavit ob¥ma objekt·m stejné Security ID (SID). To zajistí spu²t¥ní procedury sp_change_user_login.
5.3.3
Komprimace a dekomprimace souboru
Pro tuto úlohu PowerShell neobsahuje ºádný cmdlet. Z tohoto d·vodu jsme nuceni pouºít externích nástroj·. P·vodn¥ jsem kompresi provád¥l opensource knihovnou DotNetZip. Narazil jsem v²ak na nutnost nastavovat oprávn¥ní pro spou²t¥ní .NET aplikací ze sí´ového umíst¥ní, proto jsem se rozhodl k tomuto ú£elu pouºít rad¥ji aplikaci 7-zip [12] ve verzi pro p°íkazovou °ádku. P°íkaz pro komprimaci souboru volaný z PowerShell vypadá takto:
&$spath\general\bin\7zip\7za.exe a -tzip $compFile $sourceFile > $null Komprimace bude vºdy volána z n¥jakého °ídícího skriptu. Prom¥nná $spath obsahuje cestu ke spou²t¥nému skriptu. Po spu²t¥ní skriptu je totiº cesta nastavena do adresá°e
windows\system32. Tato cesta se získá následovn¥:
$spath = Split-Path -parent $MyInvocation.MyCommand.Definition Vlastnost $MyInvocation.MyCommand.Denition obsahuje cestu i se jménem skriptu, proto je zde pouºita je²t¥ funkce Split-Path, která z úplné cesty vrátí adresá°. Skript nebo externí aplikace se v PowerShell spustí tak, ºe se p°ed cestu ke skriptu zadá znak & nebo p°íkazem
Invoke-Expression. Aplikace 7za.exe je volána s parametrem -tzip, který znamená, ºe vytvo°ený archív bude ve formátu zip. Za ním následuje parametr $compFile, udávající jméno archívu, v£etn¥ p°ípony. V parametru $sourceFile m·ºe být cesta k souboru nebo maska, dle níº se vyberou soubory ke kompresi. Pokud se má adresá° zkomprimovat v£etn¥ podadresá°·, tedy rekurzivn¥, volá se 7za.exe navíc s parametrem -r. P°íkaz pro dekomprimaci souboru vypadá následovn¥:
Invoke-Expression "$spath\general\bin\7zip\7za.exe x $fullName -o$path -aoa" Parametr x znamená, ºe bude provedeno rozbalení archívu, jehoº cesta je v prom¥nné
$fullName. Cílový adresá° následuje po zadání parametru -o. Poslední parametr -aoa zajistí p°epsání soubor·, pokud v cílové cest¥ jiº existují.
36KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Parametr
Popis
[string]$server
FQDN nebo IP adresa FTP serveru.
[string]$srcle
Název souboru, který se má ze serveru stáhnout.
[string]$targetle
Název souboru pro stahovaný soubor.
[string]$username
Uºivatelské jméno na FTP server.
[string]$password
Heslo na FTP server.
[bool]$usessl=$true
Ur£uje, zda se pro p°enos pouºije zabezpe£ená verze FTP.
Tabulka 5.21: Parametry funkce ftpDownload
5.3.4
FTPS p°enos souboru
Skript zaji²´ující FTPS p°enos souboru je umíst¥n v souboru general\ftp.ps1. Skript obsahuje dv¥ funkce. Jedna provádí upload souboru na server [5] a druhá download. Za£nu funkcí
FTPDownload stahující soubor ze serveru. Její parametry jsou v tab. 5.21. FTP p°enos zaji²´uje v PowerShell t°ída System.Net.FtpWebRequest. P°ipojení k serveru protokolem FTPS vypadá takto:
$sourceuri = "ftp://" + $server + "/" + $srcfile # Create a FTPWebRequest object to handle the connection to the ftp server $ftp = [System.Net.FtpWebRequest]::create($sourceuri) # set the request's network credentials for an authenticated connection $ftp.Credentials = New-Object System.Net.NetworkCredential($username,$password) $ftp.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile $ftp.UseBinary = $true $ftp.UsePassive = $true $ftp.EnableSsl = $usessl # set to accept all certificates (selfsigned etc.) [System.Net.ServicePointManager]::ServerCertificateValidationCallback={$true} $ftpresponse = $ftp.GetResponse() # get a download stream from the server response $responsestream = $ftpresponse.GetResponseStream() ... Nejprve se vytvo°í objekt t°ídy System.Net.FtpWebRequest, kterému se p°edá plná adresa k souboru. Ikdyº p°enos bude probíhat protokolem FTPS, uvádí se v adrese pouze protokol FTP. Následn¥ se vytvo°í objekt t°ídy NetworkCredential, nesoucí uºivatelské jméno a heslo k FTP serveru. Dále denujeme, ºe budeme soubor stahovat, p°ená²et data binární v pasivním reºimu a zda budeme data p°ená²et ²ifrovan¥ p°es SSL. Pokud bude na serveru certikát podepsaný sám sebou (selfsigned), je d·leºité nastavit vlastnost
5.3.
37
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
ServerCerticateValidationCallback na hodnotu $true, jinak bude p°ipojení odmítnuto. Metoda GetResponseStream vrátí ukazatel na stream dat ze serveru a lze s ním pracovat stejn¥ jako s lokálním souborem. Z tohoto streamu jsou data £tena a ukládána do souboru po blocích o velikosti 1024 byte. Druhá funkce ftpUpload pracuje podobn¥ s tím rozdílem, ºe soubor ze serveru nestahuje, ale nahrává ho tam. Její parametry jsou v tab. 5.22.
Parametr
Popis
[string]$server
FQDN nebo IP adresa FTP serveru.
[string]$srcle
Úplná cesta k souboru, který se má nahrát na server.
[string]$targetle
Jméno, pod kterým bude uloºen p°ená²ený soubor.
[string]$username
Uºivatelské jméno na FTP server.
[string]$password
Heslo na FTP server.
[bool]$usessl=$true
Ur£uje, zda se pro p°enos pouºije zabezpe£ená verze FTP.
Tabulka 5.22: Parametry funkce ftpUpload
5.3.5
Vytvo°ení webu v IIS
Skript pro vytvo°ení nového webu v IIS se jmenuje createWeb.ps1 a je umíst¥n v adresá°i
\iis. Obsahuje funkci createWebsite, která se volá se stejnými parametry jako skript. Tyto parametry jsou v tab. 5.23.
Parametr
Popis
[string[]]$hosthdrs
Pole obsahující hostheaders, jeº mají být danou website akceptovány.
[string]$path
Cesta k adresá°i, který se vytvo°í a bude ko°enovou (root) sloºkou webu.
[string[]]$vDirs
Pole
denující
virtuální
adresá°e.
Poloºky
pole
tvo°í
dvojice, první nese jméno virtuálního adresá°e, druhá fyzickou cestu k tomuto adresá°i. [string[]]$errCodes
Pole denující chybové stránky. Poloºky pole tvo°í dvojice, první nese chybový kód, druhá URL k jeho obsluze.
[string]$www
Pokud
nabývá
hodnoty
True,
vytvo°í
hostheaders
i
s variantou www.. [string]$napp
Pokud nabývá hodnoty True, vytvo°í pro aplikaci nový
Application pool, pojmenovaný dle prvního hostheader. return [string[]]
Vrací pole nastavených hostheaders.
Tabulka 5.23: Parametry funkce createWebsite Nové website budou vytvá°eny na Windows 2008 Server (IIS 7) a Windows 2008 Server R2 (IIS 7.5). Microsoft pro administraci IIS 7 poskytuje Snap-In do PowerShell s názvem
38KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
WebAdministration [11]. Tento Snap-In p°idává do PowerShell cmdlet pro správu IIS. Do Windows 2008 Server je ho nutné doinstalovat, v nov¥j²í verzi Windows 2008 R2 je jiº sou£ástí instalace IIS ve form¥ modulu do PowerShell. Aby bylo moºné p°íkazy pro správu IIS pouºívat, je nutné v p°ípad¥ IIS 7 do PowerShell importovat Snap-In WebAdministration a do IIS 7.5 stejn¥ pojmenovaný modul. Import t¥chto modul· je ve skriptech pracujících s IIS provád¥n tímto kódem:
$wa = Get-Module WebAdministration if ($wa -eq $null) { # is not Windows 2008 R2 with IIS 7.5 $isreg = Get-PSSnapin | Where-Object { $_.Name -eq "webadministration" } if ($isreg -eq $null) { Add-PSSnapin WebAdministration } } else { Import-Module WebAdministration } Nejprve je zji²´ováno, zda v systémy existuje modul WebAdministration. Pokud ano, jedná se o IIS 7.5 a je naimportován modul WebAdministration. V opa£ném p°ípad¥ se jedná o IIS 7 a do PowerShell je p°idán Snap-In stejného jména. S IIS se pracuje podobn¥ jako se souborovým systémem a je dostupný pod jednotkou IIS:. Nyní uvedu p°íkazy modulu WebAdministration [15], pouºité ve skriptu:
1. New-WebAppPool $hosthdrs[0] > $null 2. New-Website $webName -HostHeader $hosthdrs[0] -PhysicalPath $path -ApplicationPool $hosthdrs[0] > $null 3. New-WebBinding -Name $webName -HostHeader $hosthdrs[$i] 4. New-WebVirtualDirectory -Site $webName -Name $vdn -PhysicalPath $vdp 5. set-WebConfigurationProperty -Filter //httperrors/error[@statusCode=$errC] -PSPath 'IIS:\' -name responseMode -value ExecuteURL -location $webName 6. set-WebConfigurationProperty -Filter //httperrors/error[@statusCode=$errC] -PSPath 'IIS:\' -name path -value $errP -location $webName
První p°íkaz vytvo°í v IIS nový Application pool. Druhý vytvo°í novou website, nastaví první hostheader a p°i°adí webu fyzickou cestu, která bude tvo°it ko°enový adresá° webu. Pokud vytvá°íme pro aplikaci samostatný Application pool, nastaví se tomuto webu p°i jeho vytvo°ení. Dal²í hostheaders se nastavují p°íkazem New-WebBinding, jemuº se p°edá jméno webu, které je v rámci IIS unikátní, a poºadovaný hostheader. Virtuální adresá°e se vytvá°í p°íkazem na °ádku £. 4. Parametru -Site se p°edá název webu, dále parametry tvo°í jméno virtuálního adresá°e a fyzická cesta k mapovanému adresá°i. R·zné kongura£ní vlastnosti v IIS se nastavují p°íkazem set-WebCongurationProperty. My tento p°íkaz pouºijeme k nastavení chybových stránek. Parametr -Filter denuje vlastnost, kterou chceme nastavit,
-PSPath a -location ur£uje cestu k webu, kterého se nastavení týká. Parametr -name a -value pak denují parametr a hodnotu, která se má nastavit. V p°ípad¥ chybových stránek nastavujeme vlastnost responseMode na hodnotu ExecuteURL. To zajistí, ºe chybové stránky budou obsluhovány stránkami zadanými jako URL. Parametr path nastaví URL, které bude obsluhovat daný chybový kód.
5.3.
39
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
5.3.6
Vytvo°ení DNS záznamu
K práci s DNS serverem Microsoft dosud nenabízí ºádný Modul, £i Snap-In. S DNS serverem lze tak pracovat pomocí p°íkazové utility dnscmd nebo prost°ednictvím WMI. Já jsem pro práci s DNS zvolil metodu WMI, která se více hodí pro uºití ve skriptech [1]. Na DNS serveru budeme vytvá°et nové DNS zóny, nastavovat A, CNAME a MX záznamy. Skript zaji²´ující tyto £innosti se jmenuje dnscreate.ps1 a je ho moºné volat parametry uvedenými v tab. 5.24.
Par. 1
Par. 2
Popis
ZONE
Název DNS zóny.
<prim_nameserver>
Primární jmenný server.
<sec_nameserver>
Sekundární jmenný server
Administra£ní kontakt v DNS formátu.
Úplné doménové jméno záznamu.
IP adresa cílového serveru.
Plné
A
CNAME
doménové
jméno,
kde
se
má
záznam
vytvo°it.
MX
Plné doménové jméno cílového serveru.
<domain_name>
Úplné jméno domény, v n¥mº se má záznam vytvo°it.
Doménová jména po²tovních server·.
Tabulka 5.24: Parametry skriptu dnscreate.ps1 Dle hodnoty parametru 1 dojde k vytvo°ení p°íslu²ného záznamu v DNS. Pro vytvo°ení kaºdého typu záznamu je ve skriptu vytvo°ena jedna funkce. Novou DNS zónu vytvá°í funkce
createZone. Její parametry jsou v tab. 5.25.
Parametr
Popis
[string] $zname
Jméno vytvá°ené DNS zóny.
[string] $pns
Doménové jméno primárního jmenného serveru.
[string] $sns
Doménové jméno sekundárního jmenného serveru.
[string] $aemail
Administrativní kontakt na správce zóny.
Tabulka 5.25: Parametry funkce createZone P°ed vytvo°ením kaºdého záznamu se zkontroluje, zda jiº neexistuje. V PowerShell se WMI objekty získávají p°íkazem Get-WmiObject. Parametr Namespace ur£í, z jakého jmenného prostoru chceme objekt získat. Parametr -Class vybere WMI t°ídu, s jejíº objekty budeme pracovat a nakonec -Filter omezí výb¥r zón na jednu námi zadanou. Existence DNS zóny se ov¥°í takto:
$drec = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_Zone -Filter "ContainerName=`'$zname`'"
40KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
if ($drec) { Throw("script: dnscreate, Zone $zname already exists") } Pokud zóna jiº existuje, dojde k vyvolání výjimky. V dal²ím kroku dojde k vytvo°ení objektu
MicrosoftDNS_Zone a zavolání metody CreateZone, která zónu vytvo°í:
$drec = [WmiClass]"\\localhost\root\MicrosoftDNS:MicrosoftDNS_Zone" $drec.CreateZone($zname, 0, $false) > $null Hodnota 0 znamená, ºe vytvo°ená zóna bude zóna primární. T°etí parametr metody
CreateZone ur£uje, zda bude zóna tzv. DSIntegrated. To by nastalo v p°ípad¥, kdy bychom zónu vytvá°eli na doménovém °adi£i. Tehdy nejsou zóny vytvá°eny v samostatných souborech, ale p°ímo v Active Directory. Zóna je vytvo°ena s implicitními hodnotami SOA a NS. Ty je pot°eba zm¥nit na hodnoty, které byly p°edány skriptu. To zajistí metoda Modify objektu zóny:
#get created zone $zone = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_SOAType -Filter "ContainerName=`'$zname`'" $SN = (get-date -f yyyyMMdd) + "01" #TTL, SerialNumber, PrimaryServer, ResponsibleParty, RefreshInterval, #RetryDelay, ExpireLimit, MinimumTTL $zone.Modify(3600, $SN, $pns, $aemail, 900, 600, 86400, 3600) > $null Význam parametr· metody Modify je uveden v komentá°i nad jejím voláním. Podobn¥ zm¥níme nastavení vytvo°eného NS záznamu. Nakonec p°idáme NS záznam sekundárního jmenného serveru:
#get default created NS $ns = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_NSType -Filter "ContainerName=`'$zname`'" $ns.Modify(3600, $pns) > $null #create secondary NS $drec = [WmiClass]"\\localhost\root\MicrosoftDNS:MicrosoftDNS_NSType" $drec.CreateInstanceFromPropertydata("localhost",$zname,$zname,1,3600,$sns) Dal²í typy DNS záznam· budeme vytvá°et stejn¥ jako vý²e uvedený NS záznam. Nejprve si vytvo°íme objekt dané WMI t°ídy a následn¥ zavoláme metodu pro vytvo°ení záznamu
CreateInstanceFromPropertydata. A záznam bude zakládat funkce createA, záznam typu CNAME funkce createCNAME a MX záznam funkce createMX. V²echny tyto funkce mají parametry typu [string] stejného významu a po°adí, jako parametry skriptu pro jednotlivé typy záznam·, uvedené v tabulce 5.24.
5.3.
41
NÁVRH SKRIPT PROVÁD
JÍCÍ ZÁKLADNÍ ÚLOHY
5.3.7
Zaloºení emailových schránek
Skript zakládající emailové schránky se jmenuje createMailbox.ps1 a je volán s parametry, viz tab. 5.26.
Parametr
Popis
<mailbox1,mailbox2...>
Emailové adresy odd¥lené znakem ,
return ([boolean], [String[]])
Logická hodnota oznamuje vytvo°ení nové domény, pole °et¥zc· nese formátované p°ístupové údaje.
Tabulka 5.26: Parametry skriptu createMailbox.ps1 Jak jiº bylo uvedeno v kapitole £.2, emailový server ve spol. CZI s.r.o. je provozován na produktu Merak Mail Server. Ke správ¥ tohoto serveru z p°íkazové °ádky je s produktem instalován
nástroj
tool.exe.
Tento
nástroj
budeme
z
PowerShell
volat
p°íkazem
Invoke-Expression následovn¥:
$msgcrt = Invoke-Expression "tool create account $mail u_accounttype 1" Uvedený p°íkaz vytvo°í na emailovém serveru novou schránku, jejíº emailová adresa je v prom¥nné $mail. Pokud dojde p°i zakládání schránky k chyb¥ - m·ºe se nap°. stát, ºe schránka jiº na serveru existuje, chybové hlá²ení se uloºí do prom¥nné $msgcrt. V tom p°ípad¥ vyhodíme výjimku. P°ed zaloºením schránky je pot°eba zkontrolovat, zda doména, v niº chceme zakládat schránku, existuje. Pokud doména zatím neexistuje, zaloºíme ji následovn¥:
Invoke-Expression "tool create domain $domain" Prom¥nná $domain nese jméno domény, které zjistíme z emailové adresy. Existenci domény ov¥°íme tímto p°íkazem:
Invoke-Expression "tool display domain $domain" Pokud doména existuje, je vráceno její jméno, v opa£ném p°ípad¥ text "Domain not found.". P°i zakládání emailové schránky server automaticky vytvo°í heslo. Po zaloºení v²ech schránek, které jsou skriptu p°edávané jako pole emailových adres, je pot°eba provést export p°ístupových údaj·. To provedeme op¥t voláním nástroje tool.exe :
$accInfo = Invoke-Expression "tool export account $mail u_password" Toto volání vrátí uºivatelské jméno a heslo odd¥lené £árkou. Tento p°íkaz zopakujeme pro v²echny nyní zaloºené emailové adresy a p°ístupové údaje zformátujeme do podoby zasílané uºivatel·m emailových schránek. Uºivatelské jméno a heslo se zapisují v£etn¥ popisku do souboru v do£asném adresá°i uºivatele, pod kterým je skript spu²t¥n. Po zapsání p°ihla²ovacích údaj· ze v²ech zakládaných emailových schránek se nakonec souboru p°idá pati£ka, která je obsahem souboru \settings\mailinfo_footer.txt. Obsah tohoto souboru je na konci skriptu nahrán do prom¥nné p°íkazem get-content a vrácen do výstupní pipeline. Výstup obsahující p°ístupové údaje vypadá takto:
42KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Uºivatelské jméno: <email1> Heslo: Uºivatelské jméno: <email2> Heslo: ... server p°íchozí po²ty POP3: server odchozí po²ty SMTP: - server vyºaduje ov¥°ení pomocí uºivatelského jména a hesla, které je stejné jako pro server p°íchozí po²ty webové rozhraní: postupy na nastavení emailových klient· a filtrování spamu: <support_url> S obsahem tohoto souboru je sou£asn¥ vrácena logická hodnota, která nabývá hodnoty
$true, pokud do²lo k zaloºení domény. Pokud jsme zakládali doménu, klientský skript následn¥ zavolá proces dnscreate, který do dané domény p°idá MX záznam, ale jen v p°ípad¥, ºe ºádný MX záznam neobsahuje. V opa£ném p°ípad¥ bude vyvolána výjimka.
5.3.8
Export p°ihla²ovacích údaj· emailových schránek
Skript zaji²´ující tuto £innost se jmenuje mailboxInfo.ps1 a pracuje obdobn¥ jako p°edchozí skript.
Parametr
Popis
<email1, domain1...>
Emailové adresy nebo domény odd¥lené znakem ,
return [String[]]
Pole °et¥zc· s formátovanými p°ístupovými údaji.
Tabulka 5.27: Parametry skriptu mailboxInfo.ps1 Skriptu je p°edáváno pole °et¥zc· s kombinací emailových adres a domén. Dle toho, zda poloºka tohoto pole obsahuje znak @ je vyhodnoceno, zda se jedná o doménu nebo emailovou adresu. Pokud se chceme dostat k p°ístupovým údaj·m celé domény, p°idáme p°ed jméno domény znaky *@:
$accinfo = Invoke-Expression "tool export account *@$account u_password" Prom¥nná $accinfo pak obsahuje pole °et¥zc·, kde kaºdá poloºka obsahuje uºivatelské jméno a heslo odd¥lené znakem , .
5.4.
43
ÍDÍCÍ SKRIPTY
5.4 ídící skripty V p°edchozí £ásti jsem popsal skripty provád¥jící základní úlohy na serverech. Pokud se proces skládá z více základních úloh, jsou tyto úlohy spou²t¥ny °ídícími skripty. Nyní uvedu seznam t¥chto skript· a popí²i kroky, které provádí. innost jednotlivých proces· je popsána v tabulce 5.17.
5.4.1
Skript db2production_src.ps1
Tento skript je volán v procesu db2production a spou²tí se na vývojovém serveru, kde je uloºena databáze pro nasazení na produk£ní server.
Parametr
Popis
[string]$dbToTransfer
Jméno vývojové databáze.
[string]$dstFTPUser
Uºivatelské jméno pro p°ihlá²ení p°es FTP produk£ního DB serveru.
[string]$dstFTPPasswd
Heslo pro p°ihlá²ení p°es FTP produk£ního DB serveru.
[string]$dstServer
Jméno nebo IP adresa produk£ního serveru.
[string]$instance
Jméno instance vývojového MS SQL serveru. Je nutné zadat, pokud instance není výchozí.
return [string]
Název souboru na cílovém FTP serveru.
Tabulka 5.28: Parametry skriptu db2production_src.ps1 Nejprve dojde k volání skriptu backupdb.ps1, pomocí n¥hoº je vytvo°en soubor s plnou zálohou databáze. Tento soubor je následn¥ zkomprimován a nahrán pomocí protokolu FTPS na produk£ní databázový server. Tímto úkoly skriptu kon£í.
5.4.2
Skript db2production_dst.ps1
Tento skript je volán na produk£ním databázovém serveru, kam byl p°edchozím skriptem nahrán zkomprimovaný soubor se zálohou databáze. V prvním kroku skript dekomprimuje soubor se zálohou databáze. Cesta k adresá°i s nahraným souborem je uloºena v systémové databázi a skriptu je p°edávána parametrem
$FilePath. Samotný název souboru je v parametru $compFile. Po rozbalení databáze je volán skript restoredb.ps1, který zajistí obnovení databáze ze zálohy a nastaví k databázi p°ístupová oprávn¥ní. Nakonec je soubor se zálohou databáze smazán, stejn¥ tak i jeho komprimovaná verze.
5.4.3
Skript db2developer_src.ps1
Tento skript je volán v první £ásti procesu db2developer. Jeho úkolem je provést zálohu databáze na produk£ním serveru, tuto zálohu zkomprimovat a umístit ji do adresá°e dostupného p°es protokol FTP.
44KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Parametr
Popis
[string]$compFile
Název souboru se zálohou MS SQL databáze.
[string]$destDBName
Jméno, pod kterým se má databáze obnovit.
[string]$instance
Jméno instance vývojového MS SQL serveru. Je nutné zadat, pokud instance není výchozí.
[string]$FilePath
Cesta k adresá°i, do n¥hoº byl p°es FTP nahrán soubor s databází (je uloºena v systémové databázi).
[string]$dstServer
Jméno nebo IP adresa produk£ního serveru.
[string]$overwrite
Pokud
nabývá
hodnoty
True
a
cílová
databáze
jiº
existuje, bude p°epsána.
Tabulka 5.29: Parametry skriptu db2production_dst.ps1
Parametr
Popis
[string]$dbToTransfer
Jméno databáze ur£ené k p°enosu.
[string]$FilePath
Cesta k adresá°i dostupného protokolem FTP z vývojového serveru.
[string]$instance
Jméno instance MS SQL serveru. Je nutné zadat, pokud instance není výchozí.
return [string]
Jméno souboru se zkomprimovanou zálohou databáze.
Tabulka 5.30: Parametry skriptu db2developer_src.ps1
5.4.4
Skript db2developer_dst.ps1
Skript se spou²tí na vývojovém MS SQL serveru s parametry uvedené v tabulce 5.31. V prvním kroku se skript p°ipojí protokolem FTPS na produk£ní databázový server, odkud stáhne komprimovaný soubor se zálohou databáze. Jméno tohoto souboru je vráceno p°edchozím skriptem a je p°edáno v parametru $compFile. Soubor se stáhne do adresá°e, zadaného v systémové databázi (tabulka srvGroups, sloupec transferPath ). Následn¥ je soubor dekomprimován a zavolán skript restoredb.ps1, který provede obnovení zálohy databáze na server. V posledním kroku je smazán soubor se zálohou i zip archív.
5.4.5
Skript web2production_src.ps1
Skript je volán v první fázi procesu web2production a slouºí k p°enosu zdrojových kódu webové aplikace z vývojového WEB serveru na produk£ní. Na za£átku skriptu prob¥hne import modulu, resp. Snap-In do PowerShell, aby bylo moºné pouºívat cmdlets pro práci s IIS. Dále se p°ipojí k IIS a dle názvu website ur£í fyzickou cestu k webu, jeº chceme p°ená²et:
$srcPath = ls IIS:\Sites\ | Where-Object { $_.Name -eq $webName } | ForEach-Object { $_.PhysicalPath }
5.4.
45
ÍDÍCÍ SKRIPTY
Parametr
Popis
[string]$compFile
Jméno databáze ur£ené k p°enosu.
[string]$destDBName
Cesta k adresá°i dostupného protokolem FTP z vývojového serveru.
[string]$srcServer
Jméno instance MS SQL serveru. Je nutné zadat, pokud instance není výchozí.
[string]$srcFTPUser
Uºivatelské jméno pro FTP p°ipojení na produk£ní DB server.
[string]$srcFTPPasswd
Heslo pro FTP p°ipojení na produk£ní DB server.
[string]$lePath
Cesta
k
adresá°i,
do
n¥hoº
se
p°es
FTP
stáhne
komprimovaný soubor z databází. [string]$instance
Jméno instance MS SQL serveru. Je nutné zadat, pokud instance není výchozí.
[string]$overwrite
Nabývá-li
hodnoty
True
a
databáze
jiº
na
serveru
existuje, bude p°epsána.
Tabulka 5.31: Parametry skriptu db2developer_dst.ps1
Parametr
Popis
[string]$webName
Název website k p°enosu.
[string]$dstFTPUser
Uºivatelské jméno pro p°ístup na FTP produk£ního web serveru.
[string]$dstFTPPasswd
Heslo pro p°ístup na FTP produk£ního web serveru.
[string]$dstServer
Doménové jméno nebo IP adresa produk£ního web serveru.
return [string]
Název souboru nahrávaného na produk£ní web server.
Tabulka 5.32: Parametry skriptu web2production_src.ps1
V tomto p°ípad¥ s IIS pracujeme stejn¥ jako se souborovým systémem. V²echny soubory v daném adresá°i se dále zkomprimují a výsledný archív je p°enesen FTPS protokolem na produk£ní webový server. Po p°enosu je archív na vývojovém serveru smazán.
5.4.6
Skript web2production_dst.ps1
Tento skript se spou²tí na produk£ním webserveru po nahrání zkomprimovaných zdrojových kód· webové aplikace. Jako první se dle hodnot uvedených parametr· vytvo°í nová website. V druhém kroku dojde k rozbalení archívu se zdrojovými kódy aplikace do ko°enového adresá°e webové aplikace. Následn¥ je soubor s archívem smazán. Protoºe v¥t²ina aplikací zapisuje do adresá°e data, v posledním kroku skript vyhledá tento adresá° a nastaví na n¥m oprávn¥ní pro zápis [9], ale jen pro uºivatele, pod kterým je webová aplikace spu²t¥na (implicitn¥ IUSR). Tohoto uºivatele zjistíme z PowerShell p°íkazem get-webcongurationproperty :
(get-webconfigurationproperty /system.webServer/security/authentication/
46KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
anonymousAuthentication -name username -PsPath 'IIS:' -Location $webName).Value Oprávn¥ní zápisu do adresá°e data pro tohoto uºivatele nastavíme takto:
$acl = Get-Acl $dataDir $ac = New-Object System.Security.Accesscontrol.Filesystemaccessrule( $IIS_account,"Modify", "Allow") $acl.SetAccessRule($ac) Set-Acl $dataDir $acl Do prom¥nné $acl je p°edán objekt s oprávn¥ními adresá°e $dataDir. Dále je vytvo°eno nové pravidlo ACL, povolující uºivateli $IIS_account m¥nit soubory a sloºky. Toto pravidlo je p°idáno mezi oprávn¥ní adresá°e data. P°íkaz Set-Acl nastaví adresá°i nová (modikovaná) ACL oprávn¥ní.
Parametr
Popis
[string]$compFile
Jméno souboru se zkomprimovanými zdrojovými kódy.
[string]$path
Úplná cesta ke ko°enovému adresá°i webové aplikace.
[string[]]$hosthdrs
Pole s doménami, které bude aplikace akceptovat.
[string[]]$vDirs
Pole
s
nastavením
virtuálních
adresá°·.
Prvky
tvo°í
dvojice, první udává jméno virtuálního adresá°e, druhá fyzickou cestu k mapovanému adresá°i. [string[]]$errCodes
Pole s nastavením chybových stránek. Prvky tvo°í dvojice, první udává £íslo chybového stavu, druhá URL obsluhující tento stav.
[string]$www
Nabývá-li hodnoty True, vytvo°í se v²echny hostheaders i s variantou www..
[string]$napp
Nabývá-li hodnoty True, vytvo°í se pro aplikaci nový
Application pool. [string]$FilePath
Obsahuje cestu k adresá°i, v n¥mº je nahrán archív se zdrojovými kódy.
return [string[]]
Pole s nastavenými hostheaders.
Tabulka 5.33: Parametry skriptu web2production_dst.ps1
5.4.7
Skript inform.ps1
Tento skript slouºí jako podp·rný prost°edek a obsahuje dv¥ funkce: listDB() a listWeb(). První vrací pole °et¥zc· ze seznamem databází, druhá pole se seznamem website, a to ze server·, na nichº jsou volány.
Podp·rné prost°edky klientského skriptu Mimo volání jednotlivých proces· ve v¥tvích p°íkazu switch, lze v prom¥nné $action pouºít parametry getSrv, getLog a getHelp. První parametr vrací pole se seznamem hostname
5.4.
ÍDÍCÍ SKRIPTY
47
a doménových jmen server· dle zadané role. Parametr getLog zajistí vrácení zadaného po£tu záznam· z logu umíst¥ném v systémové databázi a getHelp volá funkci getHelp, vypisující uºivateli do konzole nápov¥du ke klientskému skriptu.
48KAPITOLA 5. NÁVRH A IMPLEMENTACE SKRIPT PRO AUTOMATIZACI PROCES
Kapitola 6
Návrh a implementace aplikace grackého rozhraní V p°edchozí kapitole byl popsán návrh a implementace skript· pro automatizaci rutinních £inností administrátora server·. Tato kapitola se zabývá návrhem a implementací aplikace tvo°ící gracké rozhraní ke klientskému skriptu. Z tohoto rozhraní budou procesy spou²t¥ny a zárove¬ bude uºivatel informován o £innosti probíhajícího procesu. Aplikace bude napsána pod rozhraním .NET v programovacím jazyce C#.
6.1 Spou²t¥ní PowerShell skript· z C# Základní úlohou aplikace je spou²t¥ní klientského skriptu client.ps1 s p°íslu²nými parametry zadanými uºivatelem. Abychom mohli spou²t¥t PowerShell skripty programov¥ ze C# [3], je pot°eba p°idat do kódu referenci na System.Management.Automation. P°íslu²ná knihovna je instalována spolu s PowerShell, ve výchozím nastavení ji najdeme v C:\Program Files\Reference
Assemblies\Microsoft\WindowsPowerShell\v1.0 \System.Management.Automation.dll. Následující funkce spustí zadaný p°íkaz nebo skript v PowerShell:
private Collection RunScriptSync(string scriptText) { Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.Open(); // create a pipeline and feed it the script text Pipeline pipeline = runspace.CreatePipeline(); pipeline.Commands.AddScript(scriptText); Collection results = pipeline.Invoke();
}
runspace.Close(); return results;
49
50KAPITOLA 6. NÁVRH A IMPLEMENTACE APLIKACE GRAFICKÉHO ROZHRANÍ
První °ádek funkce vytvo°í nový runspace pro spu²t¥ní PowerShell. Dále je vytvo°ena
pipeline, do níº je následn¥ p°edána cesta ke skriptu (v prom¥nné scriptText ). Zavoláním metody pipeline.Invoke dojde ke spu²t¥ní skriptu v prost°edí PowerShell. Hodnoty z výstupní pipeline jsou typu PSObject a jsou vráceny jako kolekce objekt·. Zavoláním metody ToString() na tyto objekty dojde k jejich konverzi na datový typ string a lze tak s t¥mito výstupy pracovat v textovém tvaru. Nevýhoda tohoto volání PowerShell spo£ívá v tom, ºe vrací výsledky aº po provedení skriptu. To je pro nás nep°ijatelné, protoºe chceme být pr·b¥ºn¥ informováni o pr·b¥hu proces· volaných na vzdálených serverech. e²ením je pouºítí metody pipeline.InvokeAsync(). Tato metoda vytvo°í nové vlákno, které vykoná skript na pozadí. Pro zpracování výstupu z pipeline slouºí metoda DataReady objektu pipeline.output. Tato metoda bude vyvolána vºdy, kdyº budou ve výstupní pipeline n¥jaká data. Dal²í výhoda spo£ívá v moºnosti ukon£ení vykonávaného skriptu. Díky zpracování skriptu v samostatném vlákn¥ nebude blokováno uºivatelské rozhraní a uºivatel bude moci, nap°. pomocí tla£ítka, zavolat metodu pipeline.stop() a ukon£it b¥h skriptu. Dále budou vyuºívány metody OnDataEnd a OnErrorReady. První bude volána po skon£ení skriptu, druhá nám bude p°edávat zprávy ze standardního chybového výstupu PowerShell. Pro snadn¥j²í a p°ehledn¥j²í pouºití jsou funkce asynchronního volání PowerShell poskytovány jednoduchou t°ídou PipelineExecutor [2].
6.2 Uºivatelské rozhraní Uºivatelské rozhraní bude mít dv¥ £ásti. První bude zahrnovat komponenty pro vstupy uºivatele, druhé bude zprost°edkovávat výstup z PowerShell. Prvky pro zadávání uºivatelských vstup· rozd¥líme do skupin dle jednotlivých spou²t¥ných proces·. K tomuto seskupení nám poslouºí komponenta tabControl. Ta bude mít stejný po£et záloºek, jako je po£et proces·. P°i spou²t¥ní kaºdému procesu zadáváme minimáln¥ jeden vzdálený server. Tyto servery budou na£ítány ze systémové databáze do prvk· ComboBox. Dále na serverech vybíráme databáze nebo jednotlivé website. Seznamy t¥chto prvk· budeme na£ítat do komponenty ListBox, zajistí se tím v¥t²í p°ehlednost p°i výb¥ru. Uºivatelské rozhraní je znázorn¥no na obr. 6.1. V dolní £ásti obrazovky je umíst¥na komponenta RichTextBox, v níº se budou zobrazovat informace vrácené z výstupní pipeline PowerShell. Kaºdá záloºka bude obsahovat tla£ítka
Start a Stop, kterými se spustí, resp. p°ed£asn¥ ukon£í vybraný proces. Poslední záloºka je pojmenována Log entries a zobrazuje záznamy o vykonaných procesech. Více o uºivatelských prvcích a ovládání aplikace je uvedeno v uºivatelské p°íru£ce, uvedené v p°íloze.
6.3 Na£ítání dat do uºivatelských komponent V kaºdém procesu je t°eba zadat jeden nebo dva servery, na nichº bude proces spu²t¥n. Do prvk· ComboBox budeme na£ítat hostname z databáze, ale nep°ímo voláním skriptu
.\client.ps1 getSrv . Pouºití hostname bude p°ehledn¥j²í, ikdyº v parametrech skriptu uvádíme vºdy doménové jméno. Tyto seznamy budou po dobu b¥hu aplikace uloºené v datových typech Dictionary, kde hostname bude klí£ a doménové jméno hodnota záznamu. Nebude se tak muset provád¥t p°i kaºdém na£ítání prvk· stejný dotaz do databáze a následn¥ bude u²et°en dotaz pro vyhledání doménového jméno k hostname. T¥chto seznam· bude
6.3.
NAÍTÁNÍ DAT DO UIVATELSKÝCH KOMPONENT
51
Obrázek 6.1: Okno procesu db2production
vytvo°en stejný po£et jako je serverových rolí. Dal²ím na£ítaným seznamem je seznam web· a databází. Ten je ov²em nutné spustit p°ímo na daném serveru. Pro tento úkol máme op¥t podporu v klientském skriptu. P°íslu²ný seznam získáme spu²t¥ním .\client.ps1 inform <listDB | listWeb>, s p°íslu²nými parametry dle toho, jaký seznam poºadujeme. Na£ítání uvedených seznam· zahrnuje jedno spu²t¥ní skriptu, proto jsou tyto kroky volány synchronn¥, jak je uvedeno v ukázkovém kódu na za£átku této kapitoly.
52KAPITOLA 6. NÁVRH A IMPLEMENTACE APLIKACE GRAFICKÉHO ROZHRANÍ
Kapitola 7
Testování V této kapitole uvedu reálné p°íklady pouºití kaºdého procesu, spou²t¥ného z grackého prost°edí aplikace. Po provedení procesu ov¥°ím výsledek jeho £innosti. P°edpokladem je, ºe v²echny servery jsou nakongurované pro pouºití se skripty SAPA s p°íslu²nými rolemi dle zadání úkol·. Pro kaºdý proces stanovím n¥kolik úkol·. Tyto úkoly pomocí aplikace vykonám a vyhodnotím. U kaºdého úkolu uvedu volání klientského skriptu s parametry, který je sestaven na základ¥ vloºených vstup· v grackém uºivatelském rozhraní. Dále pro kaºdý úkol uvedu výstup z PowerShell, který informuje o prob¥hlých £innostech. ádky tohoto výpisu mohou být z úsporných d·vod· zkráceny, coº ozna£uji znakem * na konci °ádku.
7.1 Proces db2production Tento proces zajistí p°enos databáze z vývojového databázového serveru na produk£ní. P°edpokladem je existence databáze db2transfer na zdrojovém serveru a dále, ºe na cílovém serveru tato databáze neexistuje.
Seznam úkol· 1. Prove¤te p°evod databáze db2transfer z vývojového serveru czidnet1 na produk£ní server czidnet2. Ov¥°te existenci databáze na cílovém serveru a vytvo°ení p°ístupových údaj· k databázi. 2. Na cílovém serveru zm¥¬te jednu hodnotu v tabulce table1 a spus´te proces je²t¥ jednou. Proces by m¥l skon£it chybou z d·vodu existence cílové databáze. Ov¥°te, ºe na cílovém serveru nebyla zm¥n¥ná tabulka p°epsána. 3. Za²krtn¥te polí£ko overwrite, spus´te proces a ov¥°te, zda byla cílová databáze p°epsána. 4. P°eneste databázi db2transfer ze serveru czidnet1 na produk£ní server czidnet2 a tam prove¤te její obnovení pod jménem db2transfer_v2. Ov¥°te, ºe databáze byla na cílovém serveru vytvo°ena, v£etn¥ p°ístupových údaj·.
53
54
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.1: Spu²t¥ný proces db2production
Provedení úkol· 1. Na kart¥ db2production vybereme zdrojový server CZIDNET1, na£teme jeho databáze a ozna£íme db2transfer. V poli Destination DB server vybereme CZIDNET2. Za²krtávací tla£ítka uvedená pod výb¥rem cílového serveru ponecháme neza²krtnutá. Tla£ítkem
Start spustíme vykonávání procesu. Zadaná kongurace je uvedena na obr. 7.1.
Vykonaný skript client.ps1 db2production czidnet1.praha.czi.cz db2transfer czidnet2.praha.czi.cz
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Backing up db db2transfer... [CZIDNET1] Compressing file D:\MSSQL\backup\db2transfer_20100423_203229..
7.1.
PROCES DB2PRODUCTION
55
[CZIDNET1] FTP Uploading file D:\MSSQL\backup\db2transfer_20100423_203229.. [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Decompressing d:\_transfer\db2transfer_20100423_203229.bak.zip.. [CZIDNET2] Restoring DB d:\_transfer\db2transfer_20100423_203229.bak... Password to created login db2transfer : PkAqDno8g4Wy8DS4niKe [SERVERMASTER] Action finished
Vyhodnocení Na serveru CZIDNET2 je vytvo°ena databáze db2transfer. Otev°eme sloºku Logins a ov¥°íme, ºe v ní existuje login nazvaný db2transfer. Klikneme na n¥j pravým tla£ítkem a zvolíme Properties. V User mappings ov¥°íme, ºe tento login má nastavena p°ístupová oprávn¥ní pro £tení a zápis do databáze, viz. obr. 7.2. 2. Na serveru CZIDNET2 zm¥níme v tabulce table1 hodnotu original value 2 na new value 2. Následn¥ spustíme proces znovu.
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Backing up db db2transfer... [CZIDNET1] Compressing file D:\MSSQL\backup\db2transfer_20100423_210824* [CZIDNET1] FTP Uploading file D:\MSSQL\backup\db2transfer_20100423_2108* [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Decompressing d:\_transfer\db2transfer_20100423_210824.bak.z* [CZIDNET2] Restoring DB d:\_transfer\db2transfer_20100423_210824.bak... [-Error-] Script: restoredb, Error has occured: Script: restoredb, database db2transfer already exists
Vyhodnocení Proces skon£il dle o£ekávání chybou, z d·vodu existence databáze. P°i kontrole hodnoty v tabulce table1 na serveru CZIDNET2 zjistíme, ºe zm¥n¥ná hodnota z·stala zachována. Nedo²lo tedy k p°epsání databáze. 3. Nyní za²krtneme polí£ko overwrite a op¥t spustíme proces.
Vykonaný skript client.ps1 db2production czidnet1.praha.czi.cz db2transfer czidnet2.praha.czi.cz -overwrite
56
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.2: Ov¥°ení nastavených oprávn¥ní
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Backing up db db2transfer... [CZIDNET1] Compressing file D:\MSSQL\backup\db2transfer_20100423_21190* [CZIDNET1] FTP Uploading file D:\MSSQL\backup\db2transfer_20100423_2119* [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Decompressing d:\_transfer\db2transfer_20100423_211904.bak.z* [CZIDNET2] Restoring DB d:\_transfer\db2transfer_20100423_211904.bak... [SERVERMASTER] Action finished
Vyhodnocení Proces byl vykonán úsp¥²n¥, pohledem do tabulky table1 na cílovém serveru zjistíme, ºe hodnota, kterou jsme m¥nili je op¥t nastavena na original value 2. Tím je dokázáno, ºe databáze byla p°epsána. Podíváme-li se jako v úkolu £. 1 na vlastnosti login, op¥t má databáze nastavena oprávn¥ní pro £tení a zápis. Tento login byl tedy svázán s novou databází.
7.2.
PROCES DB2DEVELOPER
57
4. V poslední £ásti testující tento proces za²krtneme polí£ko Destination DB name a do textového pole zadáme db2transfer_v2. Proces spustíme.
Vykonaný skript client.ps1 db2production czidnet1.praha.czi.cz db2transfer czidnet2.praha.czi.cz -dbndst db2transfer_v2
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Backing up db db2transfer... [CZIDNET1] Compressing file D:\MSSQL\backup\db2transfer_20100423_213918* [CZIDNET1] FTP Uploading file D:\MSSQL\backup\db2transfer_20100423_2139* [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Decompressing d:\_transfer\db2transfer_20100423_213918.bak.zi* [CZIDNET2] Restoring DB d:\_transfer\db2transfer_20100423_213918.bak... Password to created login db2transfer_v2 : SK986SK06Lmu6sYKohVZ [SERVERMASTER] Action finished
Vyhodnocení Na serveru czidnet2 byla vytvo°ena databáze db2transfer_v2 i s p°íslu²ným login. Ov¥°ení oprávn¥ní provedeme stejn¥ jako v úkolu £.1 a zjistíme, ºe jsou nastavena správn¥.
7.2 Proces db2developer Tento proces slouºí k p°enosu databáze z produk£ního serveru na vývojový. P°edpokladem provedení test· tohoto úkolu je existence databáze db2transfer na serveru czidnet2.
Seznam úkol· 1. Zm¥¬te v tabulce table1 v databázi db2transfer na vývojovém serveru jednu hodnotu. Prove¤te p°esun produk£ní databáze db2transfer ze serveru CZIDNET2 na vývojový server CZIDNET1. P·vodní databázi na vývojovém serveru p°epi²te. Ov¥°te, zda do²lo k p°enosu databáze (p°epsaná hodnota v tabulce byla nahrazena) a do²lo k propojení existujícího login s uºivatelem v p°enesené databázi. 2. Prove¤te p°esun databáze jako v kroku 1, ale tentokrát ji pojmenujte db2transfer_prod. Ov¥°te p°enos databáze a vytvo°ení p°ístupových údaj·.
58
KAPITOLA 7.
TESTOVÁNÍ
Provedení úkol· 1. V okn¥ DB to Developer vybereme produk£ní server CZIDNET2 a na£teme seznam jeho databází. Zvolíme databázi db2transfer a nastavíme cílový server na CZIDNET1. Databázi chceme p°epsat, takºe za²krtneme polí£ko Overwrite if DB exists. Klikneme na tla£ítko Start a proces se spustí, viz. obr 7.3.
Vykonaný skript client.ps1 db2developer czidnet2.praha.czi.cz db2transfer czidnet1.praha.czi.cz -overwrite
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Backing up db db2transfer... [CZIDNET2] Compressing file D:\MSSQL\backup\db2transfer_20100423_222207.* [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] FTP Downloading file db2transfer_20100423_222207.bak.zip [CZIDNET1] Decompressing d:\_transfer\db2transfer_20100423_222207.bak.zip [CZIDNET1] Restoring DB d:\_transfer\db2transfer_20100423_222207.bak... [SERVERMASTER] Action finished
Vyhodnocení Spu²t¥ný skript byl proveden úsp¥²n¥. Pohledem do tabulky table1 p°enesené databáze zjistíme, ºe zm¥n¥ná hodnota byla p°epsána a je stejná jako na produk£ním serveru. Tím jsme ov¥°ili, ºe databáze byla p°epsána. Dále otev°eme vlastnosti objektu login
db2transfer. V nabídce User Mapping vidíme, ºe oprávn¥ní pro zápis a £tení do databáze jsou za²krtnuta. Do²lo tedy ke spárování objekt· user a login. 2. Oproti p°edchozímu úkolu od²krtneme polí£ko pro p°epsání databáze a za²krtneme
Destination DB name, a zadáme hodnotu db2transfer_prod. Proces spustíme.
Vykonaný skript client.ps1 db2developer czidnet2.praha.czi.cz db2transfer czidnet1.praha.czi.cz -dbndst db2transfer_prod
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Backing up db db2transfer... [CZIDNET2] Compressing file D:\MSSQL\backup\db2transfer_20100423_225* [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] FTP Downloading file db2transfer_20100423_225439.bak.zip
7.3.
PROCES CRTWEBSITE
59
Obrázek 7.3: Probíhající proces db2developer
[CZIDNET1] Decompressing d:\_transfer\db2transfer_20100423_225439.bak.* [CZIDNET1] Restoring DB d:\_transfer\db2transfer_20100423_225439.bak... [SERVERMASTER] Password to created login db2transfer_prod : vrzIedM0BS* [SERVERMASTER] Action finished
Vyhodnocení Skript prob¥hl bez problém· a bylo vygenerováno heslo na MS SQL server. To zna£í, ºe byl vytvo°en nový login a nastaveno mu heslo. Podíváme-li se na server CZIDNET1, vidíme, ºe databáze je vytvo°ena a p°ístupová oprávn¥ní jsou nastavena správn¥.
7.3 Proces crtWebsite Tento proces vytvá°í novou website, s moºností zadat ²ablonu, která bude do nového webu zkopírována. P°edpokladem je, ºe na serveru CZIDNET1 je vytvo°ena website tempWeb
60
KAPITOLA 7.
TESTOVÁNÍ
s jedním virtuálním adresá°em a nastavenou alespo¬ jednou chybovou stránku. V adresá°i
D:\Webs je následující souborová struktura:
D:\WEBS +---core | 404.htm | 500.htm | core.htm | \---tempWeb | index.htm | +---data | file.txt | +---dir1 | file1.htm | \---dir2 file2.htm Dále na serveru CZIDNET2 musí existovat DNS zóna server.net.
Seznam úkol· 1. Na serveru CZIDNET1 vytvo°te website s hostheaders web1.net a www.web1.net. Dále nastavte virtuální adresá° webcore sm¥°ující do adresá°e d:\webs\core a obsluhu chybových stránek s kódem 404 na URL /core/404.htm a s kódem 500 na URL /core/500.htm. 2. Na serveru CZIDNET1 vytvo°te nový web s hostheader web.server.net. Jako ²ablonu pouºijte web tempWeb a umíst¥te ho do adresá°e web_server_net. Nakonec nastavte na DNS serveru CZIDNET2 p°íslu²ný DNS záznam na tento web.
Provedení úkol· 1. Na záloºce Create website vybereme web server CZIDNET1 a do pole Host headers vloºíme hodnotu web1.net. Protoºe chceme vytvo°it i variantu s www, necháme za²krtnuté polí£ko Add hosth. with www. Do textového pole Virtual directories zadáme webcore, d:\webs\core. Budeme nastavovat i chybové stránky, takºe do pole Error
pages vloºíme na první °ádek hodnotu 404, /core/404.htm a na druhý hodnotu 500, /core/500.htm. Ostatní nastavení necháme na výchozích hodnotách.
Vykonaný skript client.ps1 crtWebsite czidnet1.praha.czi.cz "web1.net"web1.net -www -napp -vDirs "webcore, d:\webs\core"-errCodes "404, /core/404.htm,500, /core/500.htm"
7.3.
PROCES CRTWEBSITE
61
Obrázek 7.4: Vykonaný proces crtWebsite
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Creating website web1.net... [SERVERMASTER] Action finished
Vyhodnocení Skript prob¥hl v po°ádku. Otev°eme správce IIS na serveru czidnet1 a ov¥°íme nastavení vytvo°eného webu, viz obr. 7.5. Byl vytvo°en virtuální adresá° webcore, dle obsahu jeho adresá°e vidíme, ºe je nastaven do správného fyzického adresá°e. V okn¥ Site
Bindings vidíme, ºe web akceptuje ob¥ domény ze zadání úkolu. Nakonec zbývá prov¥°it nastavení chybových stránek, viz obr. 7.6. Vidíme, ºe URL jsou na p°íslu²ných chybových kódech nastavena správn¥. 2. Do pole hostheaders zadáme hodnotu web.server.net. V²echna za²krtávací polí£ka od²krtneme. Protoºe chceme umístit web do zvoleného adresá°e, vloºíme do pole
62
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.5: Kontrola nastavení vytvo°ené website
Destination directory hodnotu web_server_net. Nastavení virtuálních adresá°· ani chybových stránek nenastavujeme, budou p°eneseny z webu tvo°ícího ²ablonu. Tuto ²ablonu vybereme v seznamu Create from template website - zvolíme tempWeb. Tla£ítkem Start spustíme proces.
Vykonaný skript client.ps1 crtWebsite czidnet1.praha.czi.cz "web.server.net"web_server_net -setDNS -temName tempWeb
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Creating website web.server.net... [CZIDNET1] Copying files from D:\Webs\tempWeb to d:\webs\web_server_net... [CZIDNET1] Creating virtual directories... [CZIDNET1] Setting ErrPages... [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS record web.server.net IN CNAME czidnet1.praha.czi.cz... [SERVERMASTER] Action finished
7.3.
PROCES CRTWEBSITE
63
Obrázek 7.6: Kontrola nastavení chybových stránek
Vyhodnocení Na serveru CZIDNET1 ov¥°íme, ºe byla vytvo°ena website web.server.net. Web má nastavený virtuální adresá° core do sloºky D:\webs\core, takºe nastavení virtuálního adresá°e bylo p°eneseno. Pohledem do souborové struktury vidíme, ºe obsahuje stejné soubory a adresá°ovou strukturu jako tempWeb :
D:\WEBS\WEB_SERVER_NET | index.htm | +---data | file.txt | +---dir1 | file1.htm | \---dir2 file2.htm Dále ov¥°íme, ºe nastavení chybových stránek bylo p°eneseno. V IIS vidíme stejné nastavení chybových stránek jako na obr. 7.6, coº odpovídá nastavení webu tempName. Jako poslední ov¥°íme na serveru CZIDNET2 nastavení DNS záznamu. Otev°eme
DNS Manager a zónu server.net. Vidíme, ºe byl vytvo°en CNAME záznam na server czidnet1.praha.czi.cz, viz obr. 7.7
64
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.7: Kontrola nastavení DNS záznamu
7.4 Proces deployWeb Tento proces p°ená²í webovou aplikaci z vývojového web serveru na produk£ní. P°edpokladem je existence webu web.server.net na serveru CZIDNET1, vytvo°eného p°edchozím procesem a na serveru CZIDNET2 nakopírovaný adresá° D:\webs \core, který byl jiº pouºit v p°edchozích úkolech. Dále musí na serveru CZIDNET2 existovat zóna prod.net.
Seznam úkol· 1. P°eneste web web.server.net z vývojového serveru CZIDNET1 na produk£ní webový server CZIDNET2. Hostheaders nastavte na web.prod.net, www.prod.net a prod.net. Vytvo°te virtuální adresá° core s fyzickou cestou D:\webs \core. Chybové stránky s kódem 404 nasm¥rujte na URL /core/404.htm a s kódem 500 na URL /core/500.htm. Pro web vytvo°te nový Application pool a nastavte DNS záznamy.
Provedení úkol· 1. Na kart¥ Deploy Web vybereme zdrojový web server CZIDNET1 a na n¥m website se jménem web.server.net. V seznamu Destination server vybereme CZIDNET2. Do pole Hostheaders zadáme v²echny poºadované domény. Zru²íme za²krtnutí polí£ka
Add hosth. with www, prtoºe hostheader web.prod.net s touto subdoménou vytvo°it nechceme. Vytvo°ení nového Application pool zajistíme za²krtnutím p°íslu²ného polí£ka. Totéº platí i pro nastavení DNS. Virtuální adresá° a chybové stránky nastavíme dle zadání, viz obr. 7.8
Vykonaný skript client.ps1 deployWeb czidnet1.praha.czi.cz web.server.net czidnet2.praha.czi.cz "prod.net, web.prod.net,www.prod.net"-napp -setDNS -vDirs "core, d:\webs\core"-errCodes "404, /core/404.htm,500, /core/500.htm"
7.4.
PROCES DEPLOYWEB
65
Obrázek 7.8: Dokon£ený proces deployWeb
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet1.praha.czi.cz... [CZIDNET1] Compressing web.server.net to file d:\webs\web_server_net\web.s* [CZIDNET1] FTP Uploading file d:\webs\web_server_net\web.server.net_20100* [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating webSite prod.net ... [CZIDNET2] Decompressing web.server.net_2010042454.zip to d:\webs\prod.net... [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS record prod.net IN CNAME czidnet1.praha.czi.cz... [CZIDNET2] Creating DNS record web.prod.net IN CNAME czidnet1.praha.czi.cz... [CZIDNET2] Creating DNS record www.prod.net IN CNAME czidnet1.praha.czi.cz... [SERVERMASTER] Action finished
66
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.9: Nastavení website vytvo°ené procesem deployWeb
Vyhodnocení Nejprve ov¥°íme na serveru CZIDNET2, zda byla vytvo°ena website dle zadaných nastavení. Virtuální adresá° core odkazuje do správného fyzického adresá°e. V²echny soubory webu jsou p°eneseny. V Advanced Settings ov¥°íme, ºe byl vytvo°en nový Application pool a v rámci n¥ho web spu²t¥n, viz obr. 7.9. Ve stejném okn¥ vidíme, ºe danému webu byly p°i°azeny v²echny t°i hostheaders. V rámci IIS zbývá ov¥°it nastavení
chybových
stránek.
Pohledem
do
sloºky
Error Pages
vidíme,
ºe
oba
nastavované kódy mají p°i°azeny správná URL. V posledním kroku v DNS Manager ov¥°íme, zda byly na server nastaveny v²echny poºadované domény. Zóna obsahuje dva CNAME a jeden A záznam na server czidnet1, coº odpovídá nastaveným hostheaders, viz obr. 7.10.
7.5.
67
PROCES DNSCREATE
Obrázek 7.10: DNS záznamy nastavené procesem deployWeb
7.5 Proces dnsCreate Proces zakládá zóny a jednotlivé DNS záznamy na DNS serveru.
Seznam úkol· 1. Na DNS serveru CZIDNET2
vytvo°te nové zóny domain1.net, domain2.net a
domain3.net. 2. V zón¥ domain1.net vytvo°te A záznam mail na IP adresu 192.168.1.20. 3. Vytvo°te CNAME záznam web2.domain1.net s FQDN czidnet1.praha.czi.cz. 4. Vytvo°te MX záznam pro doménu domain1.net s mailservery mail.domain1.net a post.server.net.
Provedení úkol· 1. P°esuneme se na záloºku DNS records a vybereme server CZIDNET2. Typ záznamu necháme na ZONE a do pole Zone name na kaºdý °ádek napí²eme v²echny t°i zóny. Proces spustíme.
Vykonaný skript client.ps1 dnsCreate czidnet2.praha.czi.cz ZONE "domain1.net,domain2.net,domain3.net"
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS ZONE domain1.net... [CZIDNET2] Creating DNS ZONE domain2.net... [CZIDNET2] Creating DNS ZONE domain3.net... [SERVERMASTER] Action finished
68
KAPITOLA 7.
TESTOVÁNÍ
Obrázek 7.11: Zóny vytvo°ené procesem createDNS
Vyhodnocení Skript prob¥hl bez chyb, pomocí DNS Manager ov¥°íme, ºe v²echny zóny byly vytvo°eny dle parametr· zadaných v systémové databázi aplikace, viz obr. 7.11. 2. Na kart¥ DNS records zm¥níme typ záznamu na A. Do pole Domain name vloºíme úplné doménové jméno, tedy mail.domain1.net. V poli Value of DNS record uvedeme IP adresu 192.168.1.20, viz. obr 7.12.
Vykonaný skript client.ps1 dnsCreate czidnet2.praha.czi.cz A mail.domain1.net "192.168.1.20"
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS record mail.domain1.net IN A~192.168.1.20... [SERVERMASTER] Action finished 3. Budeme vytvá°et CNAME, takºe ve výb¥ru Type of record zvolíme tento záznam. V poli Domain name zadáme úplné doménové jméno CNAME záznamu - web2.domain1.net, odkazující se na FQDN czidnet1.praha.czi.cz, které zadáme do pole Value of DNS
record.
Vykonaný skript client.ps1 dnsCreate czidnet2.praha.czi.cz CNAME web2.domain1.net "czidnet1.praha.czi.cz"
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS record web2.domain1.net IN CNAME czidnet1.praha.czi.cz [SERVERMASTER] Action finished
7.5.
69
PROCES DNSCREATE
Obrázek 7.12: Vykonaný proces DNS Create
4. Na záv¥r vytvo°íme dva MX záznamy. Vybereme tento typ záznamu, v poli Domain
name uvedeme doménové jméno, v n¥mº chceme záznam vytvo°it (domain1.net) a pole s hodnotou záznamu vyplníme doménovými jmény po²tovních server·, odd¥lené £árkou (mail.domain1.net, post.server.net).
Vykonaný skript client.ps1
dnsCreate
czidnet2.praha.czi.cz
MX
"domain1.net""mail.domain1.net,
post.server.net"
Výstup z PowerShell [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS records for domain domain1.net, with MX servers: mail.domain1.net post.server.net... [SERVERMASTER] Action finished
70
KAPITOLA 7.
TESTOVÁNÍ
Vyhodnocení úkol· 1 - 4 Vytvo°ení v²ech DNS záznam· prob¥hlo v po°ádku, viz obr. 7.13. MX záznamy mají váhy s rozdílem 5 v po°adí zadání jejich doménových jmen, coº je explicitn¥ nastaveno uvnit° skriptu.
Obrázek 7.13: DNS záznamy vytvo°ené procesem dnsCreate
7.6 Proces createMailbox Tento proces zakládá emailové schránky na Merak Mail server. P°edpokladem je, ºe na serveru CZIDNET2 existují DNS zóny testdomain.net a test.net.
Seznam úkol· 1. Na
serveru
MAIL01
zaloºte
emailové
schránky
[email protected],
[email protected]. 2. Ze schránek vytvo°ených v p°edchozím úkolu exportujte p°ístupové údaje.
Provedení úkol· 1. P°esuneme se na kartu Mailboxes a zvolíme server MAIL01. Do pole Mailbox / domain
list vloºíme na kaºdý °ádek jednu emailovou adresu. Volbu Action ponecháme na Create mailbox a klikneme na tla£ítko Start.
Vykonaný skript client.ps1 createMailbox post.czi.cz "[email protected],[email protected]"
7.6.
PROCES CREATEMAILBOX
71
Výstup z PowerShell [SERVERMASTER] Connecting to post.czi.cz... [MAIL01] Checking if domain testdomain.net exists... [MAIL01] Creating domain testdomain.net... [MAIL01] Creating Mailbox [email protected]... [MAIL01] Creating Mailbox [email protected]... [SERVERMASTER] Connecting to czidnet2.praha.czi.cz... [CZIDNET2] Creating DNS records for domain testdomain.net, with MX servers: post.czi.cz... [SERVERMASTER] Action finished
Vyhodnocení Doména testdomain.net dosud na emailovém serveru neexistovala, tudíº byla vytvo°ena. V této domén¥ byly následn¥ vytvo°eny zadané schránky. Protoºe do²lo na serveru k zaloºení nové domény, posledním krokem tohoto procesu bylo vytvo°ení MX záznamu na DNS serveru, dle systémové databáze. Vytvo°ení emailových schránek ov¥°íme v Icewarp Merak Mail Server Administrator, viz obr. 7.14
Obrázek 7.14: Emailové schránky vytvo°ené procesem createMailbox
2. Ze serveru chceme získat p°ístupové údaje k vytvo°eným emailovým ú£t·m. Protoºe doména více ú£t· neobsahuje, m·ºeme do pole Mailbox / domain list zadat pouze název domény, tedy hodnotu testdomain.net. Ozna£íme volbu Get accounts a spustíme proces.
72
KAPITOLA 7.
TESTOVÁNÍ
Vykonaný skript client.ps1 mailboxInfo post.czi.cz "testdomain.net"
Výstup z PowerShell [SERVERMASTER] Connecting to post.czi.cz... [MAIL01] Getting testdomain.net domain accounts information... [SERVERMASTER] Action finished
Vyhodnocení Výsledkem procesu je otev°ené okno s p°ístupovými údaji v²ech ú£t· zadané domény, viz obr. 7.15.
Obrázek 7.15: P°ístupové údaje vrácené procesem mailboxInfo
Kapitola 8
Záv¥r Výsledkem práce je komplexní °e²ení proces· správy webových aplikací a souvisejících sluºeb v oblasti hostingu, na modelovém p°íkladu spole£nosti CZI s.r.o. e²ení je jiº v sou£asné dob¥ nasazeno ve spole£nosti CZI s.r.o. a vyuºíváno jejími IT administrátory k rutinní správ¥ server·. Výhoda tohoto °e²ení spo£ívá p°edev²ím v úspo°e £asu IT administrátora oproti neautomatizovanému vykonávání proces· popsáných v této práci. Dal²ím p°ínosem je jednotný zp·sob provád¥ní proces·, daný jejich automatizací. Základ °e²ení tvo°í skripty, které se °ízen¥ spou²tí na serverech. Tyto skripty jsou uloºeny v tzv. script repository, coº usnad¬uje správu a nasazení t¥chto skript·. Tato £ást tvo°í serverovou stranu. Skripty jsou na stran¥ klienta obsluhovány samostatným skriptem, který zpracovává vstupy od uºivatele a jednotlivé procesy spou²tí. Jedná se o klientský skript, který navíc pr·b¥h v²ech proces· zaznamenává, vyhodnocuje a záznamy o jejich pr·b¥hu ukládá do databáze. Nad tímto skriptem je navrºena a implementována aplikace, poskytující uºivateli gracké rozhraní. Spou²t¥ní proces· je tak snadn¥j²í a více intuitivní oproti zadávání mnoha parametr· do p°íkazové °ádky. Vý²e uvedenými funk£nostmi jsou spln¥ny poºadavky zadání. P°i °e²ení jsem cht¥l vyuºít moderní prost°edky vzdálené správy, proto jsem p°i návrhu a implementaci zvolil sluºbu Windows Remote Management 2.0 a PowerShell 2.0. Tyto prost°edky vy²ly na podzim roku 2009 spolu s Windows 7 a Windows 2008 R2. Jsou v sou£asné dob¥ preferované a budou podporovány i v dal²ích verzích a produktech spole£nosti Microsoft. Výsledný produkt této práce je ur£en pro uºití administrátory, kte°í jsou podrobn¥ seznámeni s £inností skript· a dané problematice rozumí.
73
74
KAPITOLA 8.
ZÁV
R
Literatura [1] Administering microsoft dns in powershell.
http://http://www.indented.co.uk/index.php/2008/12/30/,
stav z 14.3. 2010.
[2] Asynchronously execute powershell scripts from c#.
http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx, stav z 20.4. 2010. [3] How to run powershell scripts from c#.
http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx,
stav z 15.4. 2010.
[4] Sql server powershell : How to restore sql server databases using smo and powershell.
http://www.sqlmusings.com/2009/06/01/,
stav z 7.2. 2010.
[5] Upload les with ftp using powershell.
http://stackoverflow.com/questions/1867385/,
stav z 18.3. 2010.
[6] A. Bell. Powershell - less code, same result.
http://www.leadfollowmove.com/archives/powershell,
stav z 15.2. 2010.
[7] J. Bennett. Trap exception in powershell.
http://huddledmasses.org/trap-exception-in-powershell/,
stav z 12.3. 2010.
[8] R. Chaganti. Powershell 2.0 remoting guide.
http://www.ravichaganti.com/blog/?tag=powershell-remoting,
stav z 25.2. 2010.
[9] N. Goude. Powershell 2.0 remoting guide.
http://www.powershell.nu/2009/02/13/,
stav z 25.3. 2010.
[10] S. Hanselman. Signing powershell scripts.
http://www.hanselman.com/blog/SigningPowerShellScripts.aspx, stav z 5.4. 2010. [11] Microsoft. Windows powershell snap-in.
http://www.iis.net/download/powershell,
stav z 13.3. 2010. [12] I. Pavlov. 7-zip, 2009. [13] C.
Russel
and
S.
http://www.7-zip.org/,
Crawford.
Microsoft
stav z 10.2. 2010.
Windows
Server
2008,
Velký
administrátora. Computer Press, a.s., 2009. [14] E. Sarmiento. Backup sql server databases with a windows powershell script.
http://www.mssqltips.com/tip.asp?tip=1862,
75
stav z 7.2. 2010.
pr·vodce
76
LITERATURA
[15] T. Titus. Accessing microsoft.web.administration through powershell.
http://blogs.iis.net/tobintitus/archive/2006/11/30/,
stav z 26.3. 2010.
P°íloha A
Instala£ní a uºivatelská p°íru£ka A.1 Systémové nároky Aplikace má dv¥ £ásti, klientskou a serverovou. Pro b¥h skript· serverové i klientské £ásti musí být v systému nainstalován PowerShell ve verzi 2.0. PowerShell ve verzi 2.0 je standardní sou£ástí Windows 7 a Windows Server 2008 R2. Dále je moºné skripty spou²t¥t ve Windows Vista SP1 a vy²²í, Windows Server 2008 SP1 a vy²²í, a Windows Server 2003 SP2. Do t¥chto systém· lze PowerShell 2.0 doinstalovat. Klientská £ást aplikace se skládá ze t°í £ástí:
•
klientský skript client.ps1
•
databáze v MS SQL
•
gracké uºivatelské rozhraní
Klientská £ást Klientský skript vyºaduje ke svému b¥hu PowerShell 2.0 a databázový server Microsoft SQL Server 2005 /2008 v libovolné edici. Gracké uºivatelské rozhraní vyºaduje .NET framework ve verzi 3.5.
Serverová £ást Skripty jsou primárn¥ ur£eny pro servery s opera£ním systémem Windows 2008 Server. Servery, na nichº budou skripty vykonávány, musí mít nainstalován PowerShell 2.0 a sluºbu Windows Remote Management 2.0. Ob¥ tyto £ásti lze nainstalovat v rámci balí£ku Windows Management Framework Core. Tento balí£ek lze stáhnout v sou£asné dob¥ na stránkách
http://support.microsoft.com/kb/968929/en-us/.
To neplatí pro Windows 2008 R2,
tam je PowerShell 2.0 sou£ástí systému a sluºbu Windows Remote Management je nutné do systému p°idat jako features s názvem WinRM IIS Extension. Na SQL serverech musí být nainstalován MS SQL Server 2005/2008 v libovolné edici (mimo Express), spolu s SQL Client Connectivity SDK. MS SQL Server m·ºe být provozován na
77
78
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Windows 2003 Server a vy²²í. Web servery musí mít nainstalován IIS7 a vy²²í. Web servery s IIS 7 (OS Windows Server 2008) musí mít nainstalovány Windows PowerShell Snap-In for IIS 7. Tento Snap-In je nutné stáhnout a nainstalovat samostatn¥, v sou£asné dob¥ je ke staºení na stránkách
http://www.iis.net/download/PowerShell.
Web servery, které jsou provozovány na OS
Windows 2008 R2, a mají tedy IIS 7.5, musí mít nainstalovány IIS Management Scripts and Tools (jsou sou£ástí systému). Na produk£ních WEB a SQL serverech musí být nainstalován FTPS server. Servery s rolí DNS mohou být provozovány na Windows 2003 Server a vy²²í. Na emailovém server musí být nainstalován produkt Merak Mail Server ve verzi 9.0 a vy²²í.
A.2 Instalace Instalace klientské £ásti Klientská £ást se nachází v adresá°i SAPA_client, umíst¥ném na instala£ním médiu. Tento adresá° nakopírujte do libovolného adresá°e lokálního pevného disku. Dále postupujte dle t¥chto krok·: 1. Na MS SQL server spus´te skript createdb.sql z adresá°e DB. Dojde k vytvo°ení databáze sapa. Pokud si p°ejete databázi pojmenovat jinak, zm¥¬te ve skriptu toto jméno na °ádku £. 1 a 3. Dále vytvo°te na MS SQL serveru Login a nastavte pro tento Login oprávn¥ní db_datareader a db_datawriter databáze. Oprávn¥ní db_datawriter vyºaduje pouze tabulka logs, na ostatní tabulky sta£í oprávn¥ní pro £tení dat. 2. Otev°ete soubor cong.ps1, najdete ho v adresá°i SAPA_client. Soubor obsahuje toto nastavení:
[string]$SqlServer = "localhost" # Name or IP adress of SQL server [string]$DB = "sapa" # Name of database [string]$LoginN = "sapa" # Login name to SQL Server
Do prom¥nné $SqlServer nastavte jméno nebo IP adresu po£íta£e, na n¥mº jste v p°edchozím kroku vytvo°ili databázi. Prom¥nné $DB p°i°a¤te jméno databáze, pokud jste ho m¥nili a do $LoginN vloºte p°ihla²ovací jméno na MS SQL server. 3. Ve výchozím nastavení je spou²t¥ní skript· v PowerShell zakázáno. Otev°ete PowerShell s administrátorským oprávn¥ním a zadejte p°íkaz Set−ExecutionPolicy remotesigned, který povolí spou²t¥ní lokálních nepodepsaných skript·. Tímto je instalace klientské strany ukon£ena.
Instalace serverové £ásti Serverovou £ást aplikace tvo°í script repository a dále jednotlivé servery, které se skripty ovládají. Script repository je sdílená sloºka, obsahující serverové PowerShell skripty. Tato
A.3.
79
KONFIGURACE
sloºka musí být dostupná ze v²ech server·, na nichº se mají skripty spou²t¥t. T¥chto script repository m·ºe být více, coº je ºádoucí, pokud jsou spravované servery umíst¥ny ve vzdálených sítích a mezi t¥mito sít¥mi je blokováno sdílení sloºek, resp. protokol SMB. Serverovou £ást nainstalujete následujícími kroky:
1. Na
server(y),
zastávající
funkci
script
repository
nakopírujte
do
zvoleného
adresá°e skripty z adresá°e SAPA. Na této sloºce nastavte sdílení (sta£í oprávn¥ní pro £tení).
2. Na kaºdém serveru, kde budou skripty vyuºívány je t°eba nastavit politiku PowerShell, aby bylo moºné skripty spou²t¥t. Skripty se budou spou²t¥t ze script repository, coº je z hlediska ovládaného serveru sí´ové úloºi²t¥. Následující nastavení je nutné provést pro kaºdý server. Spus´te PowerShell s administrátorským oprávn¥ním, zadejte p°íkaz
Set−ExecutionPolicy unrestricted a potvr¤te jeho vykonání. Politika unrestricted umoºní spou²t¥t na serveru jakékoliv PowerShell skripty. Nastavení remotesigned, které lze pouºít na klientské stanici v tomto p°ípad¥ pouºít nelze, protoºe skripty budou spou²t¥ny ze sí´ového umíst¥ní.
3. Dále je na kaºdém serveru nutné nakongurovat sluºbu Windows Remote Management. PowerShell tuto konguraci usnad¬uje tím, ºe obsahuje cmdlet Enable-PSRemoting. Zadejte tento p°íkaz do konzole PowerShell a spus´te. PowerShell se dotáºe, zda má vykonat pot°ebná nastavení. Jedná se o start sluºby WinRM, nastavení naslouchání ze v²ech IP adres a povolení výjimky ve Windows Firewall. Toto nastavení potvr¤te. Sluºba WinRM standardn¥ naslouchá na portu 5985, pokud je mezi klientskou stanicí a cílovými servery rewall, tento port na n¥m pro p°íchozí poºadavky otev°ete.
4. Na serverech s rolemi IIS a SQL vytvo°te adresá°, který bude pouºíván pro vým¥nu soubor·. Vytvo°te FTP ú£et s oprávn¥ními pro £tení i zápis soubor·, který se do tohoto adresá°e bude p°ipojovat.
A.3 Kongurace Po provedení instalace klientské a serverové £ásti je t°eba provést konguraci. Ve²kerá kongurace je umíst¥na v databázi vytvo°ené p°i instalaci klientské £ásti. K editaci hodnot v t¥chto tabulkách m·ºete pouºít nap°. Microsoft SQL Server Management Studio.
Role
Kaºdému serveru lze p°i°adit roli dle toho, jaké sluºby jsou na n¥m provozovány. Podle toho jsou jednotlivé servery nabízeny v seznamech jednotlivých proces·. Celkem jsou denovány 4 role: SQL, IIS, DNS a MAIL. Tyto role ur£ují sluºby, které jsou na serverech provozovány. Seznam t¥chto rolí je uloºen v tabulce srvRoles.
80
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Skupiny server· Servery jsou rozd¥leny do skupin, mající spole£né nastavení. Mezi tato nastavení pat°í p°ístupové údaje ke script repository, cesta k adresá°i pro vým¥nu soubor·, p°ístupové údaje na FTP produk£ních server· a cesta k adresá°i pro umis´ování webových aplikací. Tato nastavení jsou uloºena v tabulce srvGroups. Tuto tabulku otev°ete a vytvo°te min. jednu skupinu, s hodnotami popsanými v tab. A.1.
Název atributu
Popis
grpName
Název skupiny.
scriptPath
Úplná cesta ke script repository, nap°. \\lesrv\Scripts.
scriptRepUser
Uºivatelské jméno pro ov¥°ení p°ístupu ke script repository
scriptRepPasswd
Heslo k zadanému uºivatelskému jménu pro p°ístup ke script repository.
transferPath
Cesta k adresá°i, zadaného v posledním kroku instalace serverové £ásti, nap°. D:\transfer. Tato hodnota se uplatní pro servery s rolemi SQL a IIS.
ftpUser
Uºivatelské jméno na FTP server produk£ních server·. Tato hodnota se uplatní u produk£ních server· s rolemi IIS a SQL.
ftpPasswd
Heslo pro p°ístup na FTP server produk£ních server·. Tato hodnota se uplatní u produk£ních server· s rolemi IIS a SQL.
WebsPath
Cesta k adresá°i, v n¥mº se budou vytvá°et nové weby, nap°. D:\webs. Tato hodnota se uplatní jen u server· s rolí IIS.
Tabulka A.1: Tabulka srvGroups
Nastavení server· Po nastavení skupin je t°eba do t¥chto skupin p°i°adit servery. Otev°ete tabulku servers a vypl¬te pro kaºdý server hodnoty popsané v tab. A.3.
Název atributu
Popis
hostname
Jméno serveru (musí být jedine£né).
fqdn
Úplné doménové jméno serveru.
grpName
Název skupiny, zadané v tabulce srvGroups.
Username
Uºivatelské jméno s administrátorskými oprávn¥ními. Tímto ú£tem dojde ke vzdálenému p°ihlá²ení na server.
Password
Heslo uºivatele zadaného p°edchozím atributem.
Tabulka A.2: Tabulka servers
P°i°azení rolí server·m Význam rolí byl vysv¥tlen vý²e. Jak jiº bylo °e£eno, kaºdý server m·ºe mít více rolí, dle toho, kolik sluºeb poskytuje. Tyto role se server·m p°i°azují v tabulce srvAssignRoles. Tuto
A.4.
81
AUTOMATIZOVANÉ PROCESY
tabulku otev°ete. V atributu hostname vypl¬te jméno po£íta£e (musí být jiº zadán v tabulce
servers ). Do druhého atributu zadejte název jedné role, kterou bude server zastávat dle tabulky srvRoles. Pokud má server více rolí, zadejte název serveru znovu a p°i°a¤te mu dal²í roli.
Nastavení parametr· DNS server· V této tabulce se nastavují parametry DNS server·, které jsou pouºity p°i zakládání nové zóny. Krom¥ t¥chto parametr· je zde atribut priorita. Server s nejvy²²í prioritu (nejniº²í hodnota atributu priority ) je pouºit p°i nastavování DNS záznam· v procesech crtWebsite a
deployWeb (budou popsány dále). Tyto parametry nastavte v tabulce DNSSettings, viz tab. A.3.
Název atributu
Popis
hostname
Jméno serveru (dle tab. servers).
primNS
Doménové jméno primárního jmenného serveru.
secNS
Doménové jméno sekundárního jmenného serveru.
adminEmail
Emailový
kontakt
na
správce
zóny
(v
DNS
formátu,
nap°.
hostmaster.company.com.). priority
Priorita DNS serveru.
Tabulka A.3: Tabulka DNSSettings
A.4 Automatizované procesy Aplikace provádí automatizaci celkem sedmi proces·. Níºe bude £innost t¥chto proces· popsána.
Proces db2production Tento proces provede plnou zálohu databáze na vývojovém serveru s rolí SQL. Tuto zálohu zkomprimuje a protokolem FTPS p°enese na produk£ní server s rolí SQL. Následn¥ tuto databázi na produk£ním serveru ze zálohy obnoví, v databázi vytvo°í uºivatele a na serveru login
stejného
jména
jako
databáze.
Databázi
nastaví
oprávn¥ní
db_datareader
a
db_datawriter. Pokud uºivatel nebo login jiº v databázi existuje, sváºí se tyto objekty dohromady. Bude pak moºné p°ihlásit se na MS SQL server s login stejného jména jako databáze a v této databázi £íst a zapisovat data.
Proces db2developer Tento proces provede zálohu databáze na produk£ním serveru s rolí SQL a tuto zálohu zkomprimuje. Následn¥ se k tomuto serveru p°ipojí protokolem FTPS vývojový server s rolí SQL a zálohu databáze si stáhne. Následn¥ provede dekompresi a obnovení databáze na MS SQL server. P°ístupové údaje k databázi nastaví stejným zp·sobem jako v procesu
db2production.
82
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Proces crtWebsite Tento proces zaloºí novou website na serverech s rolí IIS. Nový web je moºné vytvo°it na základ¥ ²ablony, kterou tvo°í jiná website ze stejného serveru. Z této website jsou zkopírovány zdrojové kódy, nastavení virtuálních adresá°· a chybových stránek (ErrorPages). Dále pro vytvo°ený web nastaví p°íslu²né DNS záznamy.
Proces deployWeb Tento proces p°enese zdrojové kódy webu z vývojového serveru s rolí IIS na produk£ní server s rolí IIS. Tyto zdrojové kódy jsou na vývojovém serveru zkomprimovány a následn¥ protokolem FTPS nahrány na produk£ní server. Na produk£ním serveru je vytvo°ena nová website dle zadaných parametr·. Tyto zdrojové kódy jsou rozbaleny a nahrány do ko°enového adresá°e vytvo°ené website. Pokud v tomto adresá°i existuje adresá° data, jsou pro ú£et, pod nímº je website spu²t¥na, nastavena na tento adresá° práva Modify (M¥nit). V posledním kroku proces vytvo°í pro web pat°i£né DNS záznamy.
Proces dnsCreate Tento proces zaloºí na daném DNS serveru r·zné typy záznam·. Jedná se o vytvo°ení nové zóny a dále záznam· A, CNAME a MX. MX záznamy jsou nastavovány s váhou za£ínající na hodnot¥ 10 a pro dal²í servery jsou zvy²ovány s krokem 5.
Proces createMailbox Proces zakládá na emailovém serveru schránky, p°ípadn¥ i nové domény. Na záv¥r nastaví na DNS serveru v dané domén¥ MX záznam.
Proces mailboxInfo Tento proces je dopl¬kem k p°edchozímu a provádí export p°ístupových údaj· z emailových schránek nebo vypisuje seznam v²ech email· z daných domén.
A.5 Práce s aplikací V této £ásti bude popsána práce s grackým uºivatelským rozhraním SAPA GUI. Aplikace je umíst¥na v adresá°i klientské £ásti SAPA_client\GUI \SAPAgui.exe. Po spu²t¥ní se aplikace zeptá na p°ístupové heslo. Tímto heslem se aplikace p°ipojí k databázi. Zadejte heslo, které jste nastavili p°i vytvá°ení login na MS SQL server p°i instalaci klientské £ásti aplikace. Uºivatelské jméno tohoto uºivatele je zadáno v souboru cong.ps1 v adresá°i s klientským skriptem. Pokud bylo heslo zadáno správn¥, aplikace se spustí a v rozbalovacích seznamech budou na£teny servery p°íslu²ných rolí. V opa£ném p°ípad¥ dojde k ukon£ení aplikace. Aplikace obsahuje n¥kolik panel·, jejichº po£et je stejný jako po£et proces·. Kaºdý panel ovládá jeden proces, s výjimkou Mailbox, ten ovládá procesy dva. Na kaºdém panelu je umíst¥no tla£ítko Start a Stop. Tla£ítkem Start se proces spou²tí, jeho b¥h lze kdykoliv
A.5.
PRÁCE S APLIKACÍ
83
p°eru²it tla£ítkem Stop. Ve spodní £ásti aplikace se nachází £erné okno, v n¥mº budou vypisovány informace o pr·b¥hu provád¥ní procesu. Práv¥ provád¥ná £ást bude ozna£ena ºlutým písmem, úsp¥²n¥ provedené £ásti budou zeleným písmem a pokud dojde k chyb¥, bude výstup s popisem chyby ozna£en £erven¥. Dále bude popsáno zadávání parametr· a spou²t¥ní jednotlivých proces·.
Záloºka DB to Production
Tato záloºka spou²tí proces db2production. V poli Source server se nabízí k výb¥ru hostname server· s rolemi SQL. Vyberte n¥který ze server·. Seznam databází na vybraném serveru na£tete tla£ítkem Load DBs. Na£tení databází bude n¥kolik sekund trvat, první p°ipojení ke vzdálenému serveru má del²í odezvu. Ze seznamu databází jednu vyberte, tato databáze bude p°enesena na produk£ní server. Ten vyberte ze seznamu Destination DB server. Pokud chcete, aby se databáze jmenovala jinak, neº na zdrojovém serveru, za²krtn¥te polí£ko Destination
DB name a zadejte nové jméno databáze. Existuje-li databáze na cílovém serveru a vy ji chcete p°epsat, za²krtn¥te polí£ko Overwrite if DB exists. Proces spustíte klepnutím na tla£ítko Start.
Obrázek A.1: Záloºka DB to Production
84
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Záloºka DB to Developer Tato záloºka spou²tí proces db2developer. Okno má stejné ovládací prvky jako p°edchozí záloºka. P°i zadávání hodnot postupujte stejným zp·sobem. Rozdíl je ve sm¥ru a zp·sobu, kterým je databáze p°ená²ena. Nyní bude zdrojový server produk£ní SQL server a cílový bude server vývojový.
Obrázek A.2: Záloºka DB to Developer
Záloºka Create Website Na této záloºce se spou²tí proces crtWebsite. V rozbalovacím seznamu Web server jsou zobrazeny servery s rolí IIS. Vyberte server, na n¥mº chcete novou website vytvo°it. V poli
Host headers zadejte domény, které bude daná website akceptovat. Na kaºdý °ádek vloºte jednu doménu. Pokud chcete, aby website p°ijímala v²echny domény druhého °ádu i se subdoménou www., zadejte do tohoto pole pouze domény druhého °ádu a za²krtn¥te polí£ko Add hosth. with www. Na serveru bude vytvo°ena sloºka stejného jména jako první poloºka v poli Host headers. Cesta k této sloºce bude za£ínat cestou uvedenou v kongura£ní databázi, viz. Instalace klientské £ásti. Pokud chcete adresá° pojmenovat jinak, od²krtn¥te polí£ko Directory as 1st header a zadejte vlastní název adresá°e. Má-li být website spou²t¥na v samostatném Application pool, za²krtn¥te polí£ko Create new application pool. P°ejeteli si po vytvo°ení website nastavit na DNS serveru záznamy na tuto website, za²krtn¥te
Set DNS records. U domén druhého °ádu bude nastaven A záznam s IP adresou, která
A.5.
PRÁCE S APLIKACÍ
85
bude získána p°ekladem doménového jména webového serveru. U domén vy²²ích °ád· bude vytvo°en záznam typu CNAME, s hodnotou doménového jména webového serveru. Vytvo°ené website lze nastavit virtuální adresá°e. K tomu slouºí pole Virtual directories. Virtuální adresá° se denuje kaºdý na nový °ádek. Zadává se ve formátu , <path>. Nejprve je zadáno jméno virtuálního adresá°e, následuje odd¥lova£ , a plná cesta k fyzickému adresá°i. Nap°. core, d:\webs\. Podobným zp·sobem jako virtuální adresá°e lze zadávat URL obsluhující chybové stránky. Kaºdá obsluha se zadává op¥t na nový °ádek, ve formátu <statusCode>, URL. Nap°. 404, /err404.htm bude vracet stránku err404.htm z ko°enové adresá°e webu, pokud poºadovaná stránka nebude existovat. Poslední moºností tohoto procesu je vytvo°it web na základ¥ ²ablony, kterou bude p°edstavovat jiná website na tomtéº serveru. Tento web m·ºete vybrat ze seznamu Create from template
website.
Obrázek A.3: Záloºka Create Website
Záloºka Deploy web Tato záloºka obsluhuje proces deployWeb. V seznamu Source server vyberte server s rolí IIS. Do seznamu Select website to deploy jsou následn¥ na£teny website vybraného serveru. Zvolte tu, jeº chcete nasadit na produk£ní server a ten vyberte v poli Destination server. Ostatní ovládací prvky a pole jsou stejná jako na záloºce Create website a jsou stejného významu. Nastavte tato pole stejným zp·sobem jako na kart¥ Create website.
86
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Obrázek A.4: Záloºka Deploy web
Záloºka DNS records Tato záloºka spou²tí proces dnsCreate. V seznamu DNS Server vyberte server s rolí DNS, se kterým chcete pracovat. Pokud chcete zaloºit novou zónu, zvolte ve skupin¥ Type of record hodnotu ZONE. Na serveru lze vytvo°it více zón najednou. Tyto zóny zadejte do pole Zone
name, kaºdou na samostatný °ádek. Zaloºení zón spustíte tla£ítkem Start. Pokud chcete zaloºit v DNS A, CNAME nebo MX záznam, vyberte ze skupiny Type of record p°íslu²ný typ záznamu. Do pole Domain name vloºte jméno domény, v níº chcete záznam vytvo°it. P°edpokladem je, ºe DNS server obsahuje zónu, která odpovídá domén¥ druhého °ádu. Do pole Value vloºte v p°ípad¥ A záznamu IP adresu serveru. Pokud nastavujete CNAME, lze do pole Domain name zadat více domén odd¥lených £árkou. Záznamy budou poté vytvo°eny ve více zónách. Do pole Value zadejte doménové jméno (FQDN) serveru, kam má být záznam sm¥rován. P°i nastavování MX záznam· zadejte do pole Domain name doménu, která má MX záznam obsahovat. Pole Value napl¬te doménovými jmény po²tovních server· a odd¥lte je znakem , .
Záloºka Mailboxes Tato záloºka pracuje s procesy createMailbox a mailboxInfo. V poli Mail Server vyberte server s rolí MAIL. Pro vytvo°ení nových emailových schránek vloºte do pole Mailbox /
A.5.
87
PRÁCE S APLIKACÍ
Obrázek A.5: Záloºka DNS records
domain list seznam emailových adres, kaºdou na jeden °ádek. V poli Action zvolte Create mailbox a proces spus´te. Po vytvo°ení schránek dojde k otev°ení nového okna, v n¥mº budou zobrazeny p°ístupové údaje k t¥mto schránkám. Na konec tohoto seznamu se vloºí obsah souboru mailinfo_footer.txt s informacemi k nastavení p°ístupu. Obsah tohoto souboru m·ºete m¥nit, nachází se ve script repository, v adresá°i settings. Pokud chceme získat z emailového serveru seznam p°ístupových údaj· ke schránkám, zadejte emailové adresy schránek do stejného pole jako p°i jejich vytvá°ení. Pokud chcete získat p°ístupové údaje ke v²em schránkám dané domény, zadejte do tohoto pole jen název domény. Domén m·ºete zadat více najednou a lze je kombinovat s emailovými adresami. Poté v poloºce
Action zvolte Get account a proces spus´te. Jestliºe pot°ebujete získat pouze seznam emailových adres dané domény, za²krtn¥te volbu Only account list. P°ístupové údaje, resp. seznam emailových schránek bude po dokon£ení procesu zobrazen v samostatném okn¥.
Záloºka LogEntries Tato záloºka obsahuje tabulku s informacemi o posledních 50-ti provedených procesech. Pro kaºdý záznam je ve spodní £ásti zobrazeno okno s informacemi o pr·b¥hu procesu. Ve sloupci
date je zaznamenán datum a £as ukon£ení procesu, sloupec action udává jméno spu²t¥ného procesu a polí£ko v posledním sloupci success je za²krtnuto, pokud proces prob¥hl bez chyby.
88
PÍLOHA A.
INSTALANÍ A UIVATELSKÁ PÍRUKA
Obrázek A.6: Záloºka Mailboxes
Obrázek A.7: Záloºka LogEntries
P°íloha B
Obsah p°iloºeného CD
Obrázek B.1: Obsah p°iloºeného CD
89