Fakulta elektrotechniky a informatiky Katedra informatiky
Absolvova´nı´ individua´lnı´ odborne´
praxe
Individual Professional Practise in the Company
2009 Jan Pleva
V Ostraveˇ 30. cˇervna 2009 . . . .
Na´vrh a realizace komunikace klienta se serverem. Komunikace musı´ procha´zet prˇes kli- entsky´ firewall bez jeho dalsˇı´ho nastavova´nı´, data musı´ by´t sˇifrova´na, nava´zana´ komuni- kace musı´ by´t stabilnı´, automaticke´ prˇesmeˇrova´nı´ komunikace prˇi vy´padku prima´rnı´ho prˇipojovacı´ho kana´lu, automaticke´ navazova´nı´ spojenı´. Na´vrh sekunda´rnı´ho zpu˚sobu prˇipojenı´ prˇi vy´padku hlavnı´ho druhu prˇipojenı´. U´ prava zvolene´ linuxove´ distribuce (Slax) pro potrˇeby sondy. Ukla´da´nı´ konfigurace na externı´ me´dium (USB flash disk), omezenı´ cˇaste´ho za´pisu na flash disk, automaticke´ nacˇı´ta´nı´ konfigurace po startu, zmeˇna konfigurace za´meˇnou flash media s jiny´m konfiguracˇnı´m souborem.
Klı´cˇova´ slova: virtua´lnı´ priva´tnı´ sı´t’, klient-server komunikace, monitoring, Slax, ukla´- da´nı´ konfigurace
Abstract
The design and implementation of communication between client and server. The com- munication must run through the client firewall without its further setting, the data must be ciphered, the established communication must be stable, the automatic rerouting of communication during primary connection channel dropout, the automatic connection establishment. The design of secondary connection during main connection dropout.
Modification of chosen linux distribution (Slax) for probe needs. Saving the configura- tion on an external medium (USB flash disk), the limitation of frequent writing to flash disk, the automatic configuration loading after startup, the change of configuration by replacing the flash medium with another configuration file.
Keywords: virtual private network ,client-server communication, monitoring, Slax, sav- ing of configuration
3G – Third generation
CDMA – Code division multiple access
EDGE – Enhanced data rates for GSM evolution
GPRS – General packet radio service
GRE – Generic Routing Encapsulation
GSM – Global system for mobile
HDD – Hard disk drive
HTTP – Hypertext Transfer Protocol
HTTPS – Hypertext Transfer Protocol Secure
HW – Hardware
IDE – Integrated Device Electrocnics
IP – Internet Protocol
IPSec – IP security
ISDN – Integrated Services Digital Network
IT – Information technology
kbps – kilobit per second
L2TP – Layer 2 Tunneling Protocol
LAC – L2TP Access Concentrator
LNS – L2TP Network Server
PPP – Point-to-Point Protocol
PPTP – Point-to-Point Tunneling Protocol
RAM – Random-access Memory
SIM – Subscriber identity module
SMS – Short message service
SSL – Secure sockets layer
SSTP – Secure Socket Tunneling Protocol
SW – Software
TCP – Transmission Control Protocol
TLS – Transport Layer Security
TTL – Transistor-transistor-logic
USB – Universal Serial Bus
VPN – Virtual Private Network
Obsah
1 U´ vod 4
2 Zada´nı´ 5
3 Komunikace sonda-server 6
3.1 Monitorovacı´ sonda . . . 6 3.2 Volba prima´rnı´ho druhu prˇipojenı´ . . . 6 3.3 Volba sekunda´rnı´ho druhu prˇipojenı´ . . . 9
4 Ukla´da´nı´ konfigurace 11
4.1 Teoreticky´ rozbor . . . 11 4.2 Provedene´ zmeˇny a u´pravy ve filesyste´mu . . . 11
5 Za´veˇr 14
6 Literatura 15
Prˇı´lohy 17
A Zdrojovy´ ko´d rc.saveconf 18
Seznam obra´zku ˚
1 Spojenı´ Client - Nagios server . . . 8 2 Datova´ na´rocˇnost komunikace client-Nagios server . . . 9
Seznam vy´pisu ˚ zdrojove´ho ko ´ du
1 rc.saveconf - rˇı´dı´cı´ promeˇnne´ . . . 12
2 rc.S - spusˇteˇnı´ skriptu rc.saveconf . . . 13
3 rc.S - mapova´nı´ USB filesyste´mu . . . 13
4 Zdrojovy´ ko´d rc.saveconf . . . 18
1 U ´ vod
Odbornou praxi jsem vykona´val u firmy Storyflex a.s., Soukenicka´ 3181/19, 702 00 Os- trava, ktera´ se zaby´va´ prˇedevsˇı´m doda´vkou a implementacı´ softwarove´ho a hardwaro- ve´ho vybavenı´ urcˇene´ho pro za´lohova´nı´ dat a syste´mu˚, pro ukla´da´nı´ a migraci dat v prostrˇedı´ sˇiroke´ho spektra platforem a poskytova´nı´ s tı´m souvisejı´cı´ch servisnı´ch sluzˇeb.
Jedna ze za´kladnı´ch sluzˇeb v tomto odveˇtvı´ je poskytova´nı´ monitoringu zarˇı´zenı´, ktera´
by umozˇnˇovala predikci budoucı´ch proble´mu se zarˇı´zenı´m, nebo by na prˇı´padnou po- ruchu bylo upozorneˇno v co nejkratsˇı´m mozˇne´m termı´nu. Za´rovenˇ se na monitorova´nı´
dajı´ na´sledneˇ postavit dalsˇı´ doplnˇkove´ sluzˇby, jako naprˇı´klad okamzˇita´ vy´meˇna nebo oprava zrˇı´zenı´, garance dostupnosti sluzˇby atd. Zvolene´ rˇesˇenı´ monitorovacı´ho syste´mu bylo postaveno na Nagios monitoring serveru. My´m u´kolem beˇhem praxe byl na´vrh a optimalizace monitorovacı´ch sond1a nalezenı´ vhodne´ho zabezpecˇenı´ komunikace mezi sondou a monitorovacı´m centrem.
1jednotka zajisˇt’ujı´cı´ spojenı´ do za´kaznicke´ sı´teˇ
2 Zada´nı´
Pro monitorovacı´ syste´m storage syste´mu˚ navrhneˇte a optimalizujte:
1. SW platformu monitorovacı´ch sond ve vztahu k stabiliteˇ syste´mu, mozˇnostem ak- tualizacı´, vzda´lene´ spra´vy, minimalizace na HW na´roky
2. Proveˇrˇte a popisˇte ru˚zne´ mozˇnosti vhodne´ho zabezpecˇenı´ komunikace mezi sondou se zameˇrˇenı´m na propustnost informacı´ z a do za´kaznicke´ sı´teˇ, resp. monitorovacı´ho centra
3 Komunikace sonda-server
Cı´lem te´to cˇa´sti je zvolenı´ vhodne´ho rˇesˇenı´ pro komunikaci monitorovacı´ sondy se serve- rem, na´vrh za´lozˇnı´ho spojenı´, ktere´ bude vyuzˇito v prˇı´padeˇ vy´padku spojenı´ prima´rnı´ho.
Provedu vy´beˇr nejvhodneˇjsˇı´ho protokolu s ohledem na komunikaci, ktera´ by meˇla pro- cha´zet prˇes klientsky´ firewall bez jeho dalsˇı´ho nastavova´nı´, data musı´ by´t sˇifrova´na, nava´zana´ komunikace by meˇla by´t co nejvı´ce stabilnı´.
3.1 Monitorovacı´ sonda
Monitorovacı´ sonda je v tomto prˇı´padeˇ pocˇı´tacˇ klasicke´ konstrukce s omezenı´m vy´skytu mechanicky´ch cˇa´stı´ (ventila´tory chlazenı´, harddisk) a s maxima´lnı´ velikostı´ jednoho slotu racku. Sonda se skla´da´ ze za´kladnı´ desky, procesoru, RAM pameˇtı´, IDE flash modulu a prˇı´- padneˇ dalsˇı´ch zarˇı´zenı´. Jako operacˇnı´ syste´m byl zvolen Slax - UNIXovy´ operacˇnı´ syste´m, ktery´ vycha´zı´ z linuxove´ distribuce Slackware. Jeho volba byla ucˇineˇna s prˇihle´dnutı´m na potrˇeby jednoduche´ho prˇida´va´nı´ a odebı´ra´nı´ aplikacˇnı´ch programu˚, jednoduchost, malou velikost distribuce, snadnou instalaci, omezenı´ za´pisu dat na pameˇt’ove´ me´dium, spolehlivost a snadnou modifikovatelnost.
Sonda jako takova´ slouzˇı´ k vytvorˇenı´ sı´t’ove´ho tunelu mezi Nagios serverem a klient- skou sı´tı´, dı´ky cˇemuzˇ je mozˇne´ potrˇebne´ sluzˇby a hardware monitorovat.
3.2 Volba prima´rnı´ho druhu prˇipojenı´
Nasˇı´ snahou je vytvorˇit prˇipojenı´ neza´visle´ na klientske´m sı´t’ove´m rˇesˇenı´ (firewall, proxy) a za´rovenˇ je vhodne´, aby data byla chra´neˇna prˇed zneuzˇitı´m, zmeˇnou nebo odposlechem (putujı´ prˇes verˇejnou sı´t’- internet).
3.2.1 Teoreticky´ rozbor
Jako nejlepsˇı´ zpu˚sob se jevı´ pouzˇitı´ zabezpecˇene´ho spojenı´ VPN tunelem, ktery´ propojı´
Nagios server a monitorovana´ zarˇı´zenı´ v klientske´ sı´ti. Za´rovenˇ je vsˇak potrˇeba bra´t v u´vahu fakt, zˇe neˇktere´ protokoly neumı´ vytva´rˇet obousmeˇrne´ tunely (naprˇ. IPsec), cozˇ se mu˚zˇe sta´t proble´mem, pokud ma´ klient restriktivneˇ nastaven firewall a neocˇeka´vanou komunikaci firewall odmı´ta´ a zahazuje.
Za´kladnı´ tunelovacı´ protokoly:
• GRE - Generic Routing Encapsulation
– spı´sˇe jen na´vrh samotne´ho syste´mu zapouzdrˇenı´ paketu˚
– prˇı´lisˇ jednoduchy´
– NENI´ sˇifrova´n – tudı´zˇ jej nenı´ mozˇne´ pouzˇı´t
• IPoverIP
– obdoba GRE – vytvorˇenı´ nove´ho packetu do ktere´ho je vlozˇen prˇedchozı´
• PPTP - Point-to-Point Tunneling Protocol – vyuzˇı´va´ point to point protokol – vyuzˇı´va´ slabsˇı´ho sˇifrovanı´
– teˇzˇce pronika´ firewallem (dveˇ sı´t’ove´ relace)
• L2TP - Layer 2 Tunneling Protocol – LAC (koncentra´tor)
– LNS (server)
– spojenı´ inicializova´no LAC
– sˇifrovanı´ pomocı´ IPSec = jednosmeˇrne´
– od firmy Cisco
– nutnost nastavenı´ vy´jimek u firewallu klienta
• SSTP – Secure Socket Tunneling Protocol
– obousmeˇrny´ PPP (peer-to-peer protokol) zapouzdrˇeny´ do HTTPS – sˇifrova´no pomocı´ SSL (TCP 443)
– protokol pro vzda´lenou spra´vu vyvinuty pro Microsoft Windows Longhorn a Microsoft Windows 2008
– Nestandardizovany´ a uzavrˇeny´ - pouze Windows platforma
• OpenVPN (OpenVPN 2.1 rc15)
– umozˇnˇuje tunelovanı´ prˇes port 443 – umozˇnˇuje pru˚chod prˇes http proxy – dostupne´ pro linuxovou platformu – sˇifrova´nı´ pomocı´ OpenSSL
– obousmeˇrny´ tunel 3.2.2 Za´veˇr
Rozhodl jsem se vyuzˇı´t protokolu OpenVPN, ktery´ splnˇuje vesˇkere´ zadane´ pozˇadavky.
Tunelova´nı´ prˇes port 443 zajistı´ takrˇka bezproble´move´ procha´zenı´ firewally, protozˇe tento port je beˇzˇneˇ uzˇı´va´n pro transport zabezpecˇene´ho HTTP protokolu a proto by´va´ velmi cˇasto povolen. Vytva´rˇı´ obousmeˇrny´ komunikacˇnı´ tunel a nepotrˇebuje tudı´zˇ mı´t otevrˇen dalsˇı´ port.
Obra´zek1:Spojenı´Client-Nagiosserver
3.3 Volba sekunda´rnı´ho druhu prˇipojenı´
3.3.1 Teoreticky´ rozbor
Na´vrhem sekunda´rnı´ho prˇipojenı´ se snazˇı´me vyhnout stavu, kdy by prˇi at’uzˇ neocˇeka´va- ne´m nebo ocˇeka´vane´m vy´padku internetove´ konektivity za´kaznı´ka dosˇlo k situaci, kdy nebude mozˇno zjistit aktua´lnı´ stav zarˇı´zenı´, nebo dokonce dojde k nerozpoznane´mu vy´- padku monitorovane´ sluzˇby nebo zarˇı´zenı´. Vzhledem k faktu zˇe mezi klientem (sondou) a serverem probı´ha´ komunikace maxima´lneˇ na u´rovni textovy´ch rˇeteˇzcu˚ ko´dovany´ch do packetu˚, nenı´ datova´ na´rocˇnost nikterak vysoka´ (obra´zek 2). Mu˚zˇeme tedy bra´t v u´vahu i prˇipojenı´ pomala´, ktera´ nejsou pro beˇzˇnou sı´t’ovou komunikaci (web, webove´ aplikace) vhodna´, jmenoviteˇ mobilnı´ sı´t’(GSM) a analogovy´ modem.
Obra´zek 2: Datova´ na´rocˇnost komunikace client-Nagios server
• GSM prˇipojenı´ (GPRS, EDGE, 3G...)
+ pru˚meˇrneˇ 40kbps (srovnatelne´ s dial-up) + dostupne´
+ mu˚zˇe by´t soucˇa´stı´ sondy (s vy´stupem na externı´ ante´nu v prˇı´padeˇ potrˇeby) + zmeˇna druhu prˇipojenı´ podle dostupnosti (GPRS/GSM/EDGE)
+ nevyzˇaduje zˇa´dny´ za´sah do klientske´ komunikacˇnı´ sı´teˇ – neza´visle´
+ snadna´ zmeˇna poskytovatele pomocı´ SIM (vy´beˇr nejlepsˇı´ho pokrytı´/sluzˇeb) + podpora vı´ce rezˇimu˚ prˇipojenı´ v jednom zarˇı´zenı´
- pomale´ (dial-up, GPRS, prˇesto nejspı´sˇ dostatecˇne´) - prˇi zatı´zˇenı´ mozˇne´ proble´my s prˇipojenı´m/rychlostı´
- velke´ odezvy
• Dial-up - klasicke´ vyta´cˇene´ prˇipojenı´ prˇes telefonnı´ linku + pru˚meˇrneˇ 50 kbps
+ dostupne´
+ levne´ (z hlediska na´kladu˚ na zarˇı´zenı´)
+ nena´rocˇne´ technicky
- mozˇnost za´vislosti na internetove´m prˇipojenı´ jako takove´m (naprˇ. prˇi ISDN) - dodatecˇna´ kabela´zˇ vedoucı´ k sondeˇ
- v prˇı´padeˇ velke´ho zatı´zˇenı´ telefonnı´ sı´teˇ se nemusı´ prˇipojenı´ podarˇit (vy´padky)
• ostatnı´ druhy sekunda´rnı´ho prˇipojenı´ (wi-fi, ADSL ...) + rychlost
+ minima´lnı´ odezva
- jsou limitovane´ pokrytı´m (wi-fi)
- velikost a instalace ante´ny (wi-fi, satelit) - dostupnost (ADSL, wi-fi)
- je nesmysl platit dveˇ rovnocenne´ prˇipojenı´ k internetu, pokazˇde´ jine´ a jinde Shrnutı´m a porovna´nı´m prˇipojenı´ jako nejlepsˇı´ vycha´zı´ zpu˚sob prˇipojenı´ pomocı´ tech- nologie GSM, proto budeme nada´le uvazˇovat tuto mozˇnost. Mozˇnosti zpu˚sobu prˇipojenı´:
• GSM/GPRS modem
– nejcˇasteˇji se´riove´ rozhranı´ (USB, COM)
– zbytecˇne´ (zapouzdrˇene´ v pouzdrˇe, rˇesˇenı´ prˇevodnı´ku˚ USB/COM = cena navı´c)
• GSM/GPRS modul
– rozhranı´ TTL/RS232 serial
– pouze deska modulu bez dalsˇı´ch zbytecˇnostı´
– integrovatelne´ do sondy
Zarˇı´zenı´ GSM modemu cˇasto obsahuje sluzˇby navı´c (SMS, E-mail, rˇı´zenı´ prˇes SMS atd), ktere´ je mozˇne´ take´ vyuzˇı´t. Detekce samotne´ho vy´padku prˇipojenı´ a jeho nava´zanı´
pomocı´ GPS modulu je v rezˇii operacˇnı´ho syste´mu. Vzhledem k tomu, zˇe se jedna´ o standardnı´ modem pouzˇı´vajı´cı´ AT prˇı´kazy, jeho vyuzˇitı´, nastavenı´ a zprovozneˇnı´ pod linuxovy´mi OS by nemeˇl prˇedstavovat zˇa´dny´ proble´m. GSM modul bude umı´steˇn uvnitrˇ sondy a prˇipojen prˇes se´riove´ rozhranı´. Napa´jecı´ napeˇtı´ by´va´ nejcˇasteˇji mezi 3 – 25V a ma´
pomeˇrneˇ velkou toleranci (cˇasto i kolem 10V), takzˇe ani s napa´jenı´m nenı´ proble´m.
3.3.2 Za´veˇr
Pro sekunda´rnı´ prˇipojenı´ v prˇı´padeˇ vy´padku bych doporucˇoval vyuzˇitı´ technologie GSM.
Podle dostupnosti jednotlivy´ch sluzˇeb sı´teˇ je pak mozˇne´ pouzˇı´t GPRS (dnes jizˇ dostupne´
kdekoliv, kde je mobilnı´ sı´t’), prˇı´padneˇ jine´, rychlejsˇı´ technologie (EDGE, CDMA). V prˇı´padeˇ slabe´ho signa´lu, je mozˇne´ pozˇı´t externı´ ante´nu pro lepsˇı´ prˇı´jem. Jako urcˇity´
bonus pak mu˚zˇe prˇijı´t vhod konfigurace a rˇı´zenı´ GSM modemu pomocı´ SMS.
4 Ukla´da´nı´ konfigurace
Nasˇı´m cı´lem je u´prava linuxove´ distribuce tak, abychom mohli snadno ulozˇit konfigu- raci syste´mu (naprˇ. nastavenı´ sı´teˇ), za´rovenˇ vsˇak chceme toto ukla´da´nı´ minimalizovat na nezbytnou mı´ru, abychom prˇedesˇli prˇedcˇasne´mu znicˇenı´ USB pameˇt’ovy´ch mediı´ flash, ktere´ ma´ byt’ velky´, prˇesto omezeny´ pocˇet za´pisu˚. Nacˇı´ta´nı´ konfigurace by meˇlo pro- bı´hat automatizovaneˇ z pameˇt’ove´ho USB flash media, cˇı´mzˇ se zajistı´ mozˇnost za´meˇny konfigurace sondy prostou vy´meˇnou USB flash media a restartem sondy.
4.1 Teoreticky´ rozbor
Nasˇe rˇesˇenı´ bude vycha´zet z mozˇnostı´ pouzˇite´ distribuce. Acˇkoliv umozˇnˇuje tato distri- buce ukla´da´nı´ zmeˇn - tzv. changes - prˇi jejich zapnutı´ by se vy´razneˇ zvy´sˇil pocˇet ukla´da´nı´
na medium, na ktere´ by se zmeˇny ukla´daly. Bohuzˇel se ukla´da´ nejen konfigurace ale i jake´koliv zmeˇny souboru˚, logu˚, vnitrˇnı´ch promeˇnny´ch a dalsˇı´ch polozˇek, jejichzˇ ukla´danı´
pro na´s nenı´ podstatne´. Proto musı´me navrhnout vlastnı´ zpu˚sob ukla´da´nı´ konfigurace.
Distribuce Slax vyuzˇı´va´ pro rozsˇı´rˇenı´ funkcˇnosti LZM moduly, cozˇ je ve sve´ podstateˇ jen adresa´rˇova´ struktura zkomprimova´na LZM kompresı´, ktere´ se prˇipojı´ do korˇene filesyste´mu prˇed samotny´m zavedenı´m syste´mu. Te´to vlastnosti jsem se rozhodl vyuzˇı´t pro ukla´da´nı´ konfigurace. Vytvorˇı´m tedy skript, ktery´ zkopı´ruje soubory, ktere´ chceme do ulozˇene´ konfigurace zahrnout, zkomprimuje je LZM kompresi a tento ”modul” pak na´sledneˇ zkopı´ruje do adresa´rˇe/slax/modules/, kde se nacha´zejı´ moduly nahra´vane´
beˇhem startu. Prˇi startu skript porovna´ modul na USB flash mediu se souborem na vnitrˇnı´m HDD (v nasˇem prˇı´padeˇ IDE flash modulu) a v prˇı´padeˇ rozdı´lnosti jej nahradı´
souborem z USB flash media.
4.2 Provedene´ zmeˇny a u´ pravy ve filesyste´mu
Nejdrˇı´ve je potrˇeba vytvorˇit samotny´ skript, ktery´ bude tuto cˇinnost prova´deˇt. Aby se pak prˇi startu vzˇdy spustil a provedla se prˇı´padna´ aktualizace modulu, je nutne´ prˇidat spusˇteˇnı´ tohoto skriptu do inicializacˇnı´ho skriptu syste´mu - /etc/rc.d/rc.S. Tento skript obsahuje prˇı´kazy, ktere´ se majı´ vykonat po zavedenı´ ja´dra syste´mu.
Z uzˇivatelske´ho hlediska je take´ vhodne´ vytvorˇit v adresa´rˇi /usr/binsymbolicky´
odkaz na tento skript (prˇı´kazln [volby] existujı´cı´_soubor novy_odkaz), aby bylo mozˇne´ jej spustit bez zada´va´nı´ jake´koliv cesty ke skriptu, ale pouze na´zvem skriptu, prˇesneˇji rˇecˇeno jme´na souboru odkazujı´cı´ho na tento skript.
• Editace
– /etc/rc.d/rc.S - startovacı´ skript
• Nove´ soubroy
– /etc/rc.d/rc.saveconf - skript zajisˇt’ujı´cı´ nacˇı´ta´nı´ a ukla´da´nı´ zmeˇn – /usr/bin/save-conf - symbolicky´ odkaz na skript rc.saveconf
4.2.1 rc.saveconf
Skript slouzˇı´cı´ k ukla´da´nı´ a nacˇı´ta´nı´ konfigurace. Jme´no souboru bylo zvoleno v za´vislosti na dodrzˇenı´ analogie pojmenova´nı´ skriptu˚ v adresa´rˇi/etc/rc.d.
Ulozˇenı´ konfigurace pod vy´chozı´m na´zvem na externı´ pameˇt’ove´ me´dium se provede zavola´nı´m skriptu bez parametru, ulozˇenı´ do pracovnı´ho adresa´rˇe se provede s para- metrem-saveza ktery´m volitelneˇ na´sleduje na´zev souboru pod ktery´m se konfigurace ulozˇı´.
save-config
save-config -save [jme´no_souboru]
Postup ukla´da´nı´ je pak na´sledujı´cı´: Pokud je volba pro ukla´da´nı´ prˇedchozı´ch zmeˇn zapnuta a za´rovenˇ existuje modul s prˇedchozı´mi zmeˇnami, jsou tyto pu˚vodnı´ zmeˇny nakopı´rova´ny do docˇasne´ho adresa´rˇe. Pote´ na´sleduje nakopı´rova´nı´ adresa´rˇe changes obsahujı´cı´ aktua´lnı´ zmeˇny provedene´ od poslednı´ho startu. Kopı´rova´nı´ konkretnı´ch slo- zˇek a souboru˚ je omezeno a upraveno nastavenı´m promeˇnny´ch na zacˇa´tku skriptu (vy´pis ko´du 1). Tı´mto zı´ska´me kompletnı´ provedene´ zmeˇny azˇ do okamzˇiku spusˇteˇnı´ ukla´da- cı´ho procesu. Po zkopı´rova´nı´ jsou odstraneˇny docˇasne´ datove´ soubory, ktere´ nemajı´ s hlediska konfigurace zˇa´dny´ vy´znam. Pote´ jsou konfiguracˇnı´ soubory zabaleny do LZM archivu.
Nacˇı´ta´nı´ konfigurace je zajisˇteˇno parametrem -loadza ktery´m volitelneˇ na´sleduje na´zev souboru.
save-conf -load [jme´no_souboru]
Skript porovna´ soubor na externı´m pameˇt’ove´m mediu se souborem na vnitrˇnı´m u´lozˇisˇti a v prˇı´padeˇ rozdı´lnosti je soubor nahrazen souborem z externı´ho pameˇt’ove´ho me´dia.
Nakonec jsou tady parametry -h nebo -help pro na´poveˇdu a parametr -debug slouzˇı´cı´ k testovacı´m u´cˇelu˚m.
Nastavenı´ chova´nı´ skriptu je pomocı´ na´sledujı´cı´ch promeˇnny´ch:
############ OBECNE NASTAVENI ####################
# USB MOUNTPOINT−na jakou cestu se ma USB disk namapovat (/mnt/sda1)
# HD MOUNTPOINT−na jakou cestu se ma HDD namapovat (/mnt/hda1)
# USB DEVPOINT −jak je systemem USB rozpoznano (/ dev/sda)
# HD DEVPOINT −jak je systemem HDD rozpoznan (/ dev/hda1)
# MODULES DIR −Cesta k ’modules’ adresari
# DEFAULT FILE NAME−Defaultni nazev souboru konfigurace
# SAVECONF LOG−logy o nahrati / aktualizaci modulu (pokud neni potreba pouzit /dev/null)
# SAVECONF ERR−logy o neexistujicich cestach a chybach branicich v dokonceni skriptu
# (pokud neni potreba pouzit /dev/null )
############### SAVE−CONFIG ########################
# TMPDIR −adresar kam se zkopiruji kopie vsech zmenenych souboru
# adresar musi existovat, podadresar se vytvori sam
# CHANGES −cesta k adresari se zmenami−changes
# DIRS TO SAVE −jmenny´ seznam adresaru, ktere jsou v CHANGES a maji se zalohovat
# odeleno mezerou napr. DIRS TO SAVE=”etc opt root var”
# INC CHANGE={1|0} −ulozene zmeny se tykaji POUZE aktualne pozmenenych souboru!!!!
Pokud je potreba
# zachovat i predchozi zmeny, je treba zkopirovat image puvodniho modulu ulozeneho
# v pameti. !!! POZOR!! Kopiruje se vzdy jen image z nazvem DEFAULT FILE NAME !!!
Vy´pis 1: rc.saveconf - rˇı´dı´cı´ promeˇnne´
4.2.2 rc.S
Postupny´m testova´nı´m jsem jako nejlepsˇı´ pro spusˇteˇnı´ skripturc.saveconfzvolil po- zici hned za cˇa´stı´, ktera´ ma´ na starosti otestova´nı´ namapova´nı´ korˇenove´ho filesyste´mu.
Vlozˇı´me za tuto cˇa´st tedy na´sledujı´cı´ ko´d:
# Save−config load
if [ −x /etc/ rc .d/rc .saveconf ]; then sh / etc / rc .d/rc .saveconf−load else
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
echo”saveconf: Skript nenalezen”
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
date>/root / err . log
echo”Error: Skript / etc / rc .d/rc .saveconf nenalezen!”>>/root/err.log fi
Vy´pis 2: rc.S - spusˇteˇnı´ skriptu rc.saveconf
za´rovenˇ jsem beˇhem testova´nı´ musel zakomentovat automaticke´ mapova´nı´ USB file- syste´mu, protozˇe docha´zelo ke sˇpatne´mu namapova´nı´. Zakomentoval jsem tedy na´sle- dujı´cı´ cˇa´st skriptu:
# Mount usbfs:
if grep−wq usbfs /proc/filesystems;then if ! grep−wq usbfs /proc/mounts ;then
/sbin/mount−v usbfs /proc/bus/usb−t usbfs fi
fi
Vy´pis 3: rc.S - mapova´nı´ USB filesyste´mu
5 Za´veˇr
Doufa´m, zˇe ma´ pra´ce byla pro firmu Storyflex a.s. prˇı´nosem a mnou navrhnuta´ a na´sledneˇ zrealizovana´ rˇesˇenı´ zadany´ch proble´mu˚ budou spolehliveˇ plnit svoji funkci.
Vzhledem k neusta´le´mu obrovske´mu vy´voji v oblasti IT mohou mı´t mnou navrzˇena´
rˇesˇenı´ beˇhem kra´tke´ho obdobı´ na´stupce, prˇı´padneˇ zcela nove´ technologie, ktere´ le´pe vyhovujı´ zadanı´, stejneˇ jako mu˚zˇe dojı´t k zastara´nı´ neˇktere´ho z pouzˇity´ch rˇesˇenı´, jako naprˇı´klad vy´razne´ zkra´cenı´ doby, potrˇebne´ pro prolomenı´ mnou zvolene´ sˇifry, cˇı´mzˇ se rˇesˇenı´ sta´va´ nesplnˇujı´cı´m zada´nı´ a tı´m take´ nevhodny´m. Proto sledova´nı´ dalsˇı´ho vy´voje v tomto odveˇtvı´ a jeho na´sledna´ integrace, je vhodna´, nebo dokonce nutna´. Zvla´sˇtnı´m prˇı´padem je pak zhotovene´ rˇesˇenı´ ukla´da´nı´ konfigurace, ktere´ by zajiste´ bylo mozˇne´
rozsˇı´rˇit naprˇı´klad o vhodne´ mapova´nı´ USB diskovy´ch zarˇı´zenı´ a skript je mozˇne´ napsat vı´ce obecneˇ s pomoci funkcı´.
Jan Pleva
6 Literatura
[1] PRU˚ CHA, Ondrˇej,Vsˇe kolem VPN : Vsˇe co jste chteˇli veˇdeˇt o VPN, ale ba´li jste se zeptat [online]
c2005 [cit. 2008-10-31] Dostupny´ z WWW:
<http://home.zcu.cz/˜ondrous>. [2] SPENNEBERG, Ralf,IPsec HOWTO[online]
Revision 0.9.96. c2003 , Revision 0.9.96 - Feb 26 2007 [cit. 2008-10-31]
Dostupny´ z WWW:
<http://www.ipsec-howto.org/t1.html>. [3] HABRMAN, Robert,Sı´t’ove´ protokoly[online]
2007 [cit. 2008-10-31]. Dostupny´ z WWW:
<http://www.owebu.cz/serialy.php?serial=63>. [4] LUHOVY´, Karel,Virtua´lnı´ priva´tnı´ sı´teˇ VPN[online]
2003 [cit. 2008-10-31] Dostupny´ z WWW:
<http://www.svetsiti.cz/
view_list.asp?rubrika=Tutorialy&temaID=219>. [5] KA´ RA, Michal,Seria´l Tuneluji, tunelujesˇ, tunelujeme[online]
2003 [cit. 2008-10-31]. Dostupny´ z WWW:
<http://www.root.cz/serialy/tuneluji-tunelujes-tunelujeme/>. [6] Cisco Systems,Layer 2 Tunnel Protocol[online]
c1992-2006 [cit. 2008-10-31]. Dostupny´ z WWW:
<http://www.cisco.com/
warp/public/cc/pd/iosw/tech/l2pro_tc.htm>. [7] SˇEVECˇEK, Ondrˇej,L2TP, IPSec a PPTP[online]
[2003] [cit. 2008-10-31]. Dostupny´ z WWW:
<http://www.sevecek.com/index.php?id=15>. [8] SˇINDELKA, Vladimı´r,Na rychlosti prˇipojenı´ (ne)za´lezˇı´[online]
2005 [cit. 2008-10-24]. Dostupny´ z WWW:
<http://www.finance.cz/
zpravy/finance/54835-na-rychlosti-pripojeni-ne-zalezi/>. [9] BRBLA,Prˇipojenı´ k internetu[online]
c2003-2009 [cit. 2008-10-24]. Dostupny´ z WWW:
<http://www.abowe.brbla.net/1-kapitola-uzivatelske-minimum/
pripojeni-k-internetu/gprs.php>. [10] Prˇipojenı´: gsm[online]
c2004-2009 [cit. 2008-10-24]. Dostupny´ z WWW:
<http://rychlost.cz/pripojeni-internetu/gsm/>.
[11] Microsoft Corporation,VPN Tunneling Protocols[online]
c2009 [cit. 2009-01-23]. Dostupny´ z WWW:
<http://technet.microsoft.com/
en-us/library/cc771298%28WS.10%29.aspx>. [12] JEROEN,SSTP and SSTP is that confusing??[online]
[2007] [cit. 2009-01-24]. Dostupny´ z WWW:
<http://www.buit.org/
2007/11/30/sstp-and-sstp-is-that-confusing/>.
[13] Gibson Research Corporation, Port Authority Database : Port 443 [online]
c2008 [cit. 2009-01-23]. Dostupny´ z WWW:
<http://www.grc.com/port_443.htm>.
[14] OpenVPN Technologies, OpenVPN Technologies : Documentation [online]
c2002-2009 [cit. 2009-01-23]. Dostupny´ z WWW:
<http://openvpn.net/
index.php/open-source/documentation.html>. [15] Slax: your pocket operating system[online]
Dostupny´ z WWW:
<http://Slax.org/>.
[16] The Slackware Linux Project[online]
Dostupny´ z WWW:
<http://slackware.com/>. [17] ,SLAX save & restore changes[online]
c2006-2009 [cit. 2009-02-27]. Dostupny´ z WWW:
<http://www.pendrivelinux.com/slax-savingrestoring-settings/>. [18] KRAUSE, Michal,Linux - pohled do nitra[online]
1999 [cit. 2009-02-27]. Dostupny´ z WWW:
<http://www.root.cz/clanky/linux-pohled-do-nitra/>. [19] KRAUSE, Michal,Linux - druhy´ pohled do nitra[online]
1999 [cit. 2009-02-27]. Dostupny´ z WWW:
<http://www.root.cz/clanky/linux-druhy-pohled-do-nitra/>. [20] BOHDAN, Milar,Seria´l o BASHi[online]
2005 [cit. 2009-04-03]. Dostupny´ z WWW:
<http://www.linuxexpres.cz/praxe/serial-o-bashi>. [21] SHEPPARD, Simon,Bash command : Linux MAN Pages[online]
Last update: June 24th [cit. 2009-04-03]. Dostupny´ z WWW:
<http://www.ss64.com/bash/>.
[22] DVORˇA´ K, Josef,Regula´rnı´ vy´razy a program grep[online]
[cit. 2009-04-03]. Dostupny´ z WWW:
<http://www.josef-dvorak.webzdarma.cz/36unx/36unx.htm>. [23] VA´ CLAVI´K, Jirˇı´,Linux v prˇı´kazech - porovna´va´nı´ souboru˚[online]
2006 [cit. 2009-04-03]. Dostupny´ z WWW:
<http://www.linuxsoft.cz/article.php?id_article=1136>.
A Zdrojovy´ ko ´ d rc.saveconf
# !/ bin /bash
#
############ OBECNE NASTAVENI ####################
# USB MOUNTPOINT−na jakou cestu se ma USB disk namapovat (/mnt/sda1)
# HD MOUNTPOINT−na jakou cestu se ma HDD namapovat (/mnt/hda1)
# USB DEVPOINT −jak je systemem USB rozpoznano (/ dev/sda)
# HD DEVPOINT −jak je systemem HDD rozpoznan (/ dev/hda1)
# MODULES DIR −Cesta k ’modules’ adresari
# DEFAULT FILE NAME−Defaultni nazev souboru konfigurace
# LOGY−vhodne pro odaleni chybicek, napriklad pri jinem umisteni USB klicenky atp.
# SAVECONF LOG−logy o nahrati / aktualizaci modulu (pokud neni potreba pouzit /dev/null)
# SAVECONF ERR−logy o neexistujicich cestach a chybach branicich v dokonceni skriptu
# (pokud neni potreba pouzit /dev/null ) USB MOUNTPOINT=/mnt/sda1
HD MOUNTPOINT=/mnt/hda1 USB DEVPOINT=/dev/sda HD DEVPOINT=/dev/hda1
MODULES DIR=$HD MOUNTPOINT/slax/modules DEFAULT FILE NAME=save−config.lzm
SAVECONF LOG=/root/saveconf.log SAVECONF ERR=/root/saveconf−err.log
############### SAVE−CONFIG ########################
# TMPDIR −adresar kam se zkopiruji kopie vsech zmenenych souboru
# adresar musi existovat, podadresar se vytvori sam
# CHANGES −cesta k adresari se zmenami−changes
# DIRS TO SAVE −jmenny´ seznam adresaru, ktere jsou v $CHANGES a maji se zalohovat
# odeleno mezerou napr. DIRS TO SAVE=”etc opt root var”
# INC CHANGE={1|0} −ulozene zmeny se tykaji POUZE aktualne pozmenenych souboru!!!!
Pokud je potreba
# zachovat i predchozi zmeny, je treba zkopirovat image puvodniho modulu ulozeneho
# v pameti. !!! POZOR!! Kopiruje se vzdy jen image z nazvem
$DEFAULT FILE NAME !!!
TMPDIR=/tmp
CHANGES=/mnt/live/memory/changes DIRS TO SAVE=”etc opt root”
INC CHANGE=1 case”$1” in
−load )
if [ −e $SAVECONF ERR ];then rm $SAVECONF ERR
fi
if [ −e $SAVECONF LOG ];then rm $SAVECONF LOG
fi
date>>$SAVECONF LOG
echo>>$SAVECONF LOG
echo”Mounting USB...”
mkdir $USB MOUNTPOINT
# Unmounting sda∗
for mnt in ” ” 1 2 3; do
echoumount $USB DEVPOINT$mnt done
mount $USB DEVPOINT $USB MOUNTPOINT echo”Mouting HDA”
mount $HD DEVPOINT $HD MOUNTPOINT echo”End mouting...”
if [ ”$2” = ” ” ]; then
MODUL USB=$USB MOUNTPOINT/$DEFAULT FILE NAME# Soubor na USB MODUL HD=$MODULES DIR/$DEFAULT FILE NAME# Cil kam se bude kopirovat else
MODUL USB=$USB MOUNTPOINT/$(basename ”$2” .lzm).lzm# Soubor na USB MODUL HD=$MODULES DIR/$(basename ”$2” .lzm).lzm# Cil kam se bude kopirovat fi
echoMODUL USB=$MODUL USB>>$SAVECONF LOG echoMODUL HD=$MODUL HD>>$SAVECONF LOG
echo>>$SAVECONF LOG
# Existuje adresar modules if [ ! −d $MODULES DIR ];then
echoVytvarim ”$MODULES DIR” ...>>$SAVECONF LOG echo”Vytvarim ”$MODULES DIR” ...”
mkdir $MODULES DIR if [$?−ne 0 ]; then
echoVytvoreni ”$MODULES DIR” selhalo!>>$SAVECONF ERR exit 1
fi
echo>>$SAVECONF LOG
# Vse se zda v poradku else
echoAdresar ”$MODULES DIR” existuje>>$SAVECONF LOG echo”Adresar ”$MODULES DIR” existuje [OK]”
fi
# Kontrola existence souboru na pametovem mediu
if [ −e $MODUL USB ];then # −e/TRUE−existuje soubor ...
echo”Modul $MODUL USB... [OK]”
# Kontrola adresare s moduly if [ −d $MODULES DIR ];then
echo”$MODULES DIR existuje [OK]”
# Porovna´me, zda se stary a novy´ modul lisi
if [ −e $MODUL HD ] && ! cmp $MODUL HD $MODUL USB>/dev/null;then echo”Prepisuji soubor ”$MODULES DIR” souborem ”$MODUL USB””>>
$SAVECONF LOG
echo”∗∗∗Prepisuji starou konfiguraci ∗∗∗”
cp $MODUL USB $MODULES DIR chmod 755 $MODUL HD
echo””>>$SAVECONF LOG
echo”∗∗∗∗ls −l $MODULES DIR ∗∗∗∗”>>$SAVECONF LOG ls −l $MODULES DIR>>$SAVECONF LOG
date>>$SAVECONF LOG
echo”===== UPDATE =====”>>$SAVECONF LOG
echo””>>$SAVECONF LOG
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
echo” Konfigurace aktualizovana...”
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
shutdown−nrF now# Po uspesnem zavedeni je potreba jeste restartovat
# Pokud neexistuje configuracem tak ji jen nahrajeme elif [ ! −e $MODUL HD ];then
echoKopuruji modul ”$MODUL USB”do”$MODULES DIR”>>$SAVECONF LOG echo”∗∗∗Kopiruji konfiguraci ... ∗∗∗”
cp $MODUL USB $MODULES DIR chmod 755 $MODUL HD
echo””>>$SAVECONF LOG
date>>$SAVECONF LOG
echo”===== COPY =====”>>$SAVECONF LOG
echo””>>$SAVECONF LOG
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
echo” Nova konfigurace nahrana...”
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
shutdown−nrF now# A restartujeme
# Soubory se zdaji byt shodne, pokracujeme dal else
echoSoubor je shodny.>>$SAVECONF LOG echo”∗∗∗Soubory jsou shodne....preskakuji ∗∗∗”
echo” ∗∗∗∗ls $MODULES DIR ∗∗∗∗ ” ls $MODULES DIR>>$SAVECONF LOG
echo””>>$SAVECONF LOG
fi else
echoNeexistuje adresar ”$MODULES DIR”>>$SAVECONF ERR fi
else
echoNeni mozne nacist modul $MODUL USB !
echoNeni mozne nacist modul $MODUL USB !>>$SAVECONF ERR fi
exit 0
;;
−debug )
if [ −e $SAVECONF ERR ];then rm $SAVECONF ERR fi
#find −name modules−type d>/root/find−modules.log
date>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ Parametry ∗∗∗∗∗”>>$SAVECONF LOG echop0=$0, p1=$1, p2=$2, p3=$3>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ lsusb ∗∗∗∗∗”>>$SAVECONF LOG lsusb>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ fdisk−l ∗∗∗∗∗”>>$SAVECONF LOG fdisk −l>>$SAVECONF LOG
#umount /dev/sda1 /mnt/usbflash
echo>>$SAVECONF LOG
echo>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l /mnt ∗∗∗∗∗”>>$SAVECONF LOG ls −l /mnt/>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l /mnt/live ∗∗∗∗∗”>>$SAVECONF LOG ls −l /mnt/live >>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗∗ ls−l $HD MOUNTPOINT ∗∗∗∗∗∗∗”>>$SAVECONF LOG ls −l $HD MOUNTPOINT>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
∗∗∗∗∗∗∗ls−l usbflash∗∗∗∗∗∗∗>>$SAVECONF LOG ls −l /mnt/usbflash>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l / ∗∗∗∗∗”>>$SAVECONF LOG
ls −l / >>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
exit 0
;;
−−help )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2
echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
−h )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2 echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
” ” )
umount $USB DEVPOINT
mount $USB DEVPOINT $USB MOUNTPOINT
#TMPDIR=/home/icewind/TEMP
#CHANGES=/home/icewind/TEMP/changes if [ −d $TMPDIR ];then
TMPDIR=”$TMPDIR/tmpConfigSave”
else
echo”Chyba v docasne´m adresari. Adresar neexistuje.”
exit 1 fi
echo”Pripravuji docasny adresar ($TMPDIR)”
if [ −d $TMPDIR ];then rm−rf $TMPDIR fi
mkdir−p $TMPDIR #−p/no err if exist
if [ $INC CHANGE = 1 ] && [−e $MODULES DIR/$DEFAULT FILE NAME ];then echo”Kopiruji predchozi zmeny”
for DIR in /mnt/live /memory/images/$DEFAULT FILE NAME/∗;do if [ −d ”$DIR” ]; then
cp−aR $DIR $TMPDIR fi
done else
echo”Nenalezl jsem modul $MODULES DIR/$DEFAULT FILE NAME. Preskakuji kopirovani konfigurace...”
fi
for DIR in $DIRS TO SAVE;do cp−aR $CHANGES/$DIR $TMPDIR done
# cp−aR $CHANGES/{etc,home,opt,root,var}$TMPDIR #−a/archive, R/recursive
echo”Promazavam soubory ’.wh.∗’”
find $TMPDIR−typef−name ”.wh.∗”−delete # .wh.??
echo”Promazavam docasne soubory...(Caches)”
for CACHE in $(find $TMPDIR−typed−name ”Cache”) ;do# find typ/dir, name/”Chache”
if [ −n $CACHE ];then rm−Rf $CACHE/∗
fi done
if [ −d $TMPDIR/var/lib/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/lib/pacman fi
if [ −d $TMPDIR/var/cache/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/cache/pacman fi
if [ −d $TMPDIR/var/run ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/run fi
if [ −d $USB MOUNTPOINT ];then
DESTINATION=”$USB MOUNTPOINT”/”$DEFAULT FILE NAME”
else
echo”Neexistuje $USB MOUNTPOINT. Ukladam do $(pwd)...”
DESTINATION=”$(pwd)”/”$DEFAULT FILE NAME”
fi
if [ −e $DESTINATION ];then
echo”Mazu puvodni soubor, budu prepisovat...”
rm−f $DESTINATION fi
echo”Vytvarim modul $DESTINATION....”
echo””
mksquashfs $TMPDIR $DESTINATION−b 256KB>mksquashfs.log if [ $?−ne 0 ]; then
echo”Error building module”
catmksquashfs.log exit 1
fi echo
echo”Uklizim soubory po vytvorene zaloze”
if [ −d $TMPDIR ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR fi
echoSoubor\”$DESTINATION\” byl uspesne vytvoren.
chmod oga−x $DESTINATION exit 0
;;
−save )
if [ −d $TMPDIR ];then
TMPDIR=”$TMPDIR/tmpConfigSave”
fi
echo”Pripravuji docasny adresar ($TMPDIR)”
if [ −d $TMPDIR ];then rm−rf $TMPDIR fi
mkdir−p $TMPDIR #−p/no err if exist
if [ $INC CHANGE = 1 ] && [−e $MODULES DIR/$DEFAULT FILE NAME ];then echo”Kopiruji predchozi zmeny”
for DIR in /mnt/live /memory/images/$DEFAULT FILE NAME/∗;do if [ −d ”$DIR” ]; then
cp−aR $DIR $TMPDIR fi
done else
echo”Nenalezl jsem modul $MODULES DIR/$DEFAULT FILE NAME. Preskakuji kopirovani konfigurace...”
fi
for DIR in $DIRS TO SAVE;do cp−aR $CHANGES/$DIR $TMPDIR done
# cp−aR $CHANGES/{etc,home,opt,root,var}$TMPDIR #−a/archive, R/recursive
echo”Promazavam soubory ’.wh.∗’”
find $TMPDIR−typef−name ”.wh.∗”−delete # .wh.??
echo”Promazavam docasne soubory...(Caches)”
for CACHE in $(find $TMPDIR−typed−name ”Cache”) ;do# find typ/dir, name/”Chache”
if [ −n $CACHE ];then rm−Rf $CACHE/∗
fi done
if [ −d $TMPDIR/var/lib/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/lib/pacman fi
if [ −d $TMPDIR/var/cache/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/cache/pacman fi
if [ −d $TMPDIR/var/run ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/run fi
if [ ”$2” = ” ” ] && [−d $USB MOUNTPOINT ];then
DESTINATION=”$USB MOUNTPOINT”/”$DEFAULT FILE NAME”
elif [ ”$2” = ” ” ] && [ ! −d $DESTINATION ];then
echo”Neexistuje vy´chozı´ cesta /mnt/sa1. Ukla´da´m do $(pwd)”
DESTINATION=”$(pwd)”/”$DEFAULT FILE NAME”
else
echo”Zmeˇneˇne´ jme´no, ukla´da´m do $(pwd)”
DESTINATION=”$(pwd)/$(basename ”$2” .lzm).lzm”
fi
if [ −e $DESTINATION ];then
echo”Mazu puvodni soubor, budu prepisovat...”
rm−f $DESTINATION fi
echo”Vytvarim modul $DESTINATION....”
echo””
mksquashfs $TMPDIR $DESTINATION−b 256KB>mksquashfs.log if [ $?−ne 0 ]; then
echo”Error building module”
catmksquashfs.log
exit 1 fi echo
echo”Uklizim soubory po vytvorene zaloze”
if [ −d $TMPDIR ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR fi
echoSoubor\”$DESTINATION\” byl uspesne vytvoren.
chmod oga−x $DESTINATION exit 0
;;
∗ )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2 echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
esac exit 0
Vy´pis 4: Zdrojovy´ ko´d rc.saveconf