Téma 8: Aplikace Microsoft Windows v CentOS a skriptování Představení a používání aplikací pro spuštění aplikací Windows a úvod do skriptování 1
I přesto, že na UNIX-like like systémech najdete plno aplikací, které splňují veškeré požadavky může se stát, že budete potřebovat využít některou aplikaci nebo nástroj, který je určený jen pro Windows. Může se jednat např. o databázové systémy, nebo programy pro integraci s MS síťovými službami. Dalším typický příkladem jsou hry, které jsou majoritně vyvíjeny pro prostředí Windows. Nebo tyto nástroje použijete jen proto, že jinak dostupný program pro Váš požadavek neexistuje v jiné než Windows-like podobě. Protože Windows aplikace používají zcela jiné spouštěcí formáty a postupy, je potřeba nějakým způsobem vytvořit pro tyto programy prostředí. Tuto možnost zajišťují právě programy, které vytvářejí jakousi vrstvu pro spouštění těchto aplikací. Vytváří v podstatě, s velkou nadsázkou řečeno, malý virtuální počítač. Rozhodně, ze své zkušenosti doporučuji, nespoléhat se na tyto nástroje z hlediska spolehlivost malé chybovosti, je potřeba si uvědomit, že program neběží nativně! Nástrojů je celá řada, některé zdarma, některé nikoliv. Win4Lin Je komerční nástroj pro používání Windows nebo aplikací pro Windows na PC používající Linux. Ve své podstatě pracuje jako malý virtuální počítač. Dostupný na adrese: http://vbridges.com/home.php/ QEMU Je emulátor procesoru, který používá binární překlad. Na QEMU je postaven např. VirtualBox, částečně ho také používá i XEN. Více informací naleznete na adrese: http://en.wikipedia.org/wiki/qemu. WINE Další z aplikací určených pro vytváření Windows vrstvy, která umožňuje běh aplikací určených pro Windows. Je zcela zdarma a dlouhodobě vyvíjena a aktualizována. Více se programu budeme věnovat ve cvičení. Jistě jste se dočetli o nástrojích jako jsou Cedega a CodeWeavers. Nástroj Cedega je postaven na wine. Je určen především pro komerční hry. Dostupný na: www.transgaming.com. Jedná se tedy o komerční verzi WINE. Nástroj CodeWeavers je zcela jiný nástroj, kerý používá CrossOver Linux, jedná se také o komerční nástroj. Dostupný je na tomto webu: http://www.codeweavers.com/products/crossover/#dl, kde poskutují 30-denní zkušební verzi. 2
Zadání cvičení 1. Nainstalujte Wine do CentOS. 2. Zjistěte, kde jsou tyto disky - cestu k nim. Jaké standardně vytváří? 3. Přidejte disk s písmenem D: a namapujte optickou mechaniku. 4. Instalujte pomocí wine aplikaci ccleaner. Určenou pro prostředí MS Windows. 5. Nalezněte seznam nainstalovaných aplikací wine (jedná se o obdobu Přidat/odebrat aplikaci v prostředí Windows). 6. Prozkoumejte nástroj Wine file (Wine => Wine file). 7. Namapujte COM1 a LPT1 port. Pozor je nutné mít COM a LPT port definovány na virtuálním stroji! Pokud nemáte uvažujte jak by jste tuto úlohu provedli. 8. Přidejte nový TrueType font (soubory s příponou.ttf) do wine. 9. Bonus - XEN. 10. Úvod do skriptování. 10.1. Pokuste se vytvořit soubor s nastavením síťových rozhraní. Soubor nazvaný ifconfig.txt bude umístěn do: /home/fimuhk/ifconfig.txt 10.2. Definujte alias: ls, který bude vypisovat všechny soubory a složky a jejich velikost v čitelném formátu, ted např. v MB. 10.3. Pokuste se vytvořit 5 souborů najednou pomocí příkazu: touch. Dále vytvořte soubory s tímto názvem: FILE11, FILE12, FILE13, FILE14, FILE21, FILE22, FILE23, FILE24, FILE31, FILE32, FILE33, FILE34, také pomocí příkazu touch, všechny soubory budou mít příponu.txt. Po vytvoření těchto souborů, vypište obsah složky, kde jste soubory vytvořili. Vše v jednom řádku (využijte řetězení příkazů). 10.4. Vytvořte soubor s názvem obsah.txt, který bude obsahovat tyto řádky (využijte konzolový editor nano [pico, vi]): /tmp; /etc; /home (bez středníků!) Programu ls s parametrem -l vložte obsah souboru jako argument. 10.5. Napište skript, který vytvoří dvě uživatelské skupiny databaze a site. Dále vytvořte uživatele karel, který bude ve skupině databáze a uživatele martin, který bude ve skupině site. Uživatel karel bude mít vytvořenou domovskou složku. Uživatel Martin nikoliv. V daším kroku otestujete, zda-li existují domovské složky nově vytvořených uživatelů, pokud ano provede se toto: Vytvoříse soubor info.txt, vlastníkem tohoto souboru bude uživatel martin. Změníte také skupinu na databaze. Dále změníte přístupová práva tak aby vlastník mohl cokoliv, skupina bude moci pouze soubor číst a ostatní nic. Do souboru info napíšete ifnormace, kterou školu studujete a, který obor. Na dalším řádku napíšete informaci, jaký shell používá uživatel martin. O všech akcích, které jste provedli, budete informovat. Informaci podáte jako výpis do řádku konzole. O případném neúspěchu vytvoření souboru podáte také informaci. 3
Řešení: 1. Nainstalujte Wine do CentOS. V prvním kroku je potřeba nejprve přidat repozitář, ze které se bude instalovat wine instalovat, protože ve standardních repozitářích se wine nenachází. Přidejte repozitář EPEL pomocí: [root@localhost:~] # rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epelrelease-6-5.noarch.rpm Protože ještě neumíte použít příkaz sudo je nutné se přihlásit jako root (příkaz: su). Po přidání repozitáře aplikujte tento příkaz: [root@localhost:~] # yum install wine Systém Vás vyzve k potvrzení instalace a později také k importu klíče, všude odpovězte Y. Všiměnte si také, že wine je svázán s několika balíčky. Balíčku jsou uvedeny v následující tabulce. wine-capi ISDN support for wine wine-cms Color Management for wine wine-core Wine core package wine-devel Wine development environment wine-ldap LDAP support for wine wine-tools Additional wine tools wine-twain Twain (image scanning) support for wine wine-openal OpenAL sound support for wine wine-pulseaudio PulseAudio support for wine wine-alsa ALSA sound support for wine wine-jack JACK sound support for wine wine-esd ESD sound support for wine wine-oss OSS sound support for wine wine-nas NAS sound support for wine 4
Nyní jste nainstalovali nástroj wine. Složku naleznete v horním menu GNOME Applications => Wine. Wine obsahuje nejen spouštěcí vrtsvu MS windows ale i některé základní programy např.: Notepad nebo regedit. Můžete tyto programy vyzkoušet. Velmi důležitou částí je nastavení wine, spustíte pomocí wine-config ve složce Wine. Tento nástroj lze také spustit pomocí příkazu: [FimUHK@localhost:~] $ winecfg 5
Zde můžete konfigurovat jak samotné aplikace tak třeba i knihovny. Můžete dokonce nastavovat i jejich implentaci tzn. knihovna se může chovat nativně ale i jako builtin. Tuto možnost můžete využít např. při instalaci kancelářského balíčku MS Office 2007 a vyšší. Wine si vytváří i samostatné logické disky, které jsou umístěny jako složka (resp. soubor) na Vašem PC. 2. Zjistěte, kde jsou tyto disky - cestu k nim. Jaké standardně vytváří? První možností jak zjistit cestu k diskům je v záložce Drives v wine-config. Druhá možnost je přes použití hledání v Linuxu. Zjistíte, že složka wine se nechází ve Vašem domovském adresáři, ovšem pozor tato složka je skrytá. Cesta je tedy obecně: /home/uzivatel/.wine. Wine vždy vtvoří disky C: a Z:. Disk C:/ je logická jednotka taková jak ji známe z prostředí MS Windows. A Z: je root linuxového systému tedy: /. Disky pochopitelně můžete přidávat sami. 3. Přidejte disk s písmenem D: a namapujte optickou mechaniku. Spustíme nástroj wine-config: [FimUHK@localhost:~] $ winecfg Na záložce Drives přidáme novou mechaniku pomocí tlačítka Add, zvolíme písmeno D:. V řádku path zvolte Browse a nalezněte optickou mechaniku, nebo můžete napsat rovnou do řádku s cestou: /dev/sr0. 4. Instalujte pomocí wine aplikaci ccleaner. Určenou pro prostředí MS indows. Aplikaci stáhněte z internetu, je zdarma a volně dostupná. Spusťte terminál a spusťte instalaci: [FimUHK@localhost:~] $ wine /home/fimuhk/downloads/ccsetup311.exe 6
Druhá možnost jak instalovat aplikace je přes: Applications => Wine => Wine applications Uninstaller a tlačítko Install. Aplikace se poté automaticky přidá, do složky Wine, odkud jí můžete spouštět. Pozor ovšem na to když spustíte aplikaci z terminálu a píšete celou cestu ke spuštěcímu souboru. Windows používá zpětná lomítka, Linux jen v případě kdy se jedná o speciální znak nebo mezeru v cestě k souboru. Příkaz může vypadat třeba takto: [FimUHK@localhost:~] $ wine C:\program files\appdir\app/\1.exe" Seznam podporovaných aplikací nalezněte na této adrese: http://appdb.winehq.org/ Můžete si vybrat libovolnou aplikaci a vyzkoušet další instalaci. 5. Nalezněte seznam nainstalovaných aplikací wine (jedná se o obdobu Přidat/odebrat aplikaci v prostředí Windows). Applications => Wine => Wine applications Uninstaller nebo příkaz: [FimUHK@localhost:~] $ wine control // kde zvolíte Add/remove programs, otevře se stejné okno jak v předchozím kroku. 6. Prozkoumejte nástroj Wine file (Wine => Wine file). 7
Jedná se v podstatě o průzkumníka, můžete se tak pohybovat v celém systémovém systému. 7. Namapujte COM1 a LPT1 port. Pozor je nutné mít COM a LPT port definovány na virtuálním stroji! Pokud nemáte uvažujte jak by jste tuto úlohu provedli. Wine pracuje s Windows vrstvou tzn. že používá i Windows značení. Protože jsou COM a LPT port mapovány na Linux v souborech a to zpravidla ve složce dev, je potřeba vytvořit symbolické odakzy. [FimUHK@localhost:~] $ ln -s /dev/lp0 lpt1 [FimUHK@localhost:~] $ ln -s /dev/ttys0 com1 Pozor na to, ve které složce se právě nacházíte! Je zvykem umisťovat tyto odkazy v rámci wine do složky $HOME/.wine/dosdevices, v našem případě: /home/fimuhk/.wine/dosdevices. 8. Přidejte nový TrueType font (soubory s příponou.ttf) do wine. Stáhněte z internetu libovolný TrueType font. Instalaci provedete jednoduše skopírováním souboru do složky C:\windows\Fonts. Příkazem: [FimUHK@localhost:~] $ copy /home/fimuhk/downloads/font.ttf /home/fimuhk/.wine/drive_c/windows/font 9. XEN (čti: zen). Je dalším virtualizačním nástrojem. Xen Vám umožní běh několika systémů najednou a to i v prostředí CentOS. Je také velmi oblíbený nástroj pro virtualizaci v oblasti serverů, kde dokáže být skutečně mocný. Předpoklady pro použití XEN: 8
a) Dostatek operační paměti RAM - minimálně 256MB pro každou instalaci. b) Dostatek místa na HDD, pro sever minimálně 600MB, pro stanice 2-3GB. c) PAE podpora - pro zjištění podpory pae aplikujte tento příkaz: [FimUHK@localhost:~] $ cat /proc/cpuinfo grep pae flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 mmx fxsr syscall mmxext 3dnowext 3dnow up pokud se nic nevypíše, pak zde není podpora PAE. d) Podpora virtualizačních technologií u stanic pokud používají Intel VT nebo AMD-V. Podporu zjistíte opět pomocí příkazu (argumentem pro grep bude: vmx (pro Intel) nebo svm (pro AMD)): [FimUHK@localhost:~] $ cat /proc/cpuinfo grep vmx [NEBO] svm pokud se nic nevypíše, pak nemáte podporu virtualizační technologie. e) Pro použité XEN je nutné mít nainstalovaný GRUB. Instalace XEN se budou sami přidávat do menu.lst. Bohužel v naší instalaci CentOS nenainstalujeme. Za domácí úkol, zkuste znovu nainstalovat CentOS s podporou jádra pro Xen. Postupujte podle tohoto návodu: http://www.howtoforge.com/centos_5.0_xen 10. Úvod do skriptování Před cvičením uvádím některé zdroje, které jistě využijete: 1. Seriál o BASH => http://www.linuxexpres.cz/praxe/serial-o-bashi 2. BASH => http://www.abclinuxu.cz/clanky/navody/bash-i 3. BASH očima Bohdana Milara => http://ii.iinfo.cz/r/k/bash_ocima_bohdana_milara.pdf Uvedené zdroje určitě doporučuji projít protože zde nebudu uvádět úplně vše. Určitě jste jako administrátoři operačních systémů přemýšleli nad tím jak některé operace automatizovat, tedy nepsat pořád tentýž příkaz dokola znovu, ale dokonce jej ještě dynamicky rozšiřovat o další parametry. Lze říci, že jakýkoliv příkaz, který v Linuxu použijete, se dá umístit do skriptu. Skriptem nazýváme soubor, jehož obsahem jsou systémové a jiné příkazy. Skript je zpravidla textový soubor. Skriptovacích jazyků je celá řada. My se budeme zabývat především jazykem BASH. Dalším skriptovacím jazykem je např. awk, sed nebo Perl. Perl jste již použili v předchozích úlohách, stejně tak awk. Jazyk awk a sed je určen především ke zpracování textů, Perl ostatně také. 9
Bash je unixový shell, který mimo jiné vytváří příkazový interpret. Název BASH je zkratka Bourne Again SHell. Bash splňuje řadu norem, tou nejdůležitější je POSIX. Každý uživatel CentOS má definovaný shell. V prostředí CentOS se jedná především o Bash. Shell nemusí být pouze Bash, můžete se setkat i s jinými např. ksh nebo sh. To jaký shell konkrétní uživatel používá, zjistíte jednoduše pomocí tohoto příkazu: [FimUHK@localhost]$ cat /etc/passwd backup:x:134:34:backup:/var/backups:/bin/sh list:x:238:38:mailing List Manager:/var/list:/bin/sh.. atd. Poslední informace je právě používaný shell uživatele. V tomto případě oba dva vypsaní uživatelé backup a list používá jako shell: sh. Cesta k tomuto interpretru je: /bin/sh. Druhou možností jak zjistit, jaký shell využívá přihlášený uživatel je pomocí tohoto příkazu: [FimUHK@localhost]$ echo $SHELL /bin/bash Zjištění standardního shellu lze provést také pomocé: [FimUHK@localhost]$ ls l /bin/sh lrwxrwxrwx 1 root root 4 čen 19 02:24 /bin/sh -> bash V případě, že vytváříte nového uživatele, systém se Vás zeptá jaký shell chcete použít. Ve výchozím nastavení v CentOS6.0 nabídne bash. Toto nastavení lze měnit individuálně pro každého uživatele nebo změníte šablonu pro vytváření uživatelů. Toto nastavení lze měnit pomocí programu skel, který je umístěn v /bin/skel. Jestliže chcete, změnit shell jakéhokoliv uživatele není nic jednodušího než použít příkaz usermod: [FimUHK@localhost]$ usermod -s /bin/bash UZIVATEL Každý uživatel, který používá bash, má také svůj profil, který je zpravidla umístěný v jeho domovském adresáři a obsahuje hned několik souborů: ~/.bash_profile ~/.bashrc ~/.bash_logout ~/.bash_history 10
Nevýhoda Bash je v jeho rychlosti jestliže ho porovnáme se strojově překládaným kódem. Je značně pomalejší. V našich skriptech to ovšem určitě nebudeme pozorovat. Jako motivační příklad, lze ukázat tento skript: Jako ukázku destrukčního skriptu pak toto: [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / echo You live Základní příkazy: set - vypíše seznam všech deklarovaných proměnných. cp - kopíruje soubory rm - ruší soubory mkdir - vytváří adresáře rmdir - ruší prázdné adresáře ln - vytvoří odkazy na soubory chmod - změní přístupová práva k souborům ls, dir, vdir - vypíše obsah adresářů find - vyhledávání souborů which - zobrazí absolutní cestu k programu df - vypisuje informace o připojených FS ps - informace o spuštěných procesech cat, less - výpis souboru na obrazovku xargs - spustí zadaný příkaz a zbylé argumenty čte ze standardního vstupu grep - tiskne řádky, které odpovídají zadanému vzoru wc - vypíše počet písmen, slov a řádků sort - setřídí řádky Jedná se tedy o příkazy, které můžete používat i v běžně v konzoly. Pro přesměrování používá standardní znaky tedy: > - přesměrování standardního výstupu do souboru >> - přesměrování standardního výstupu do souboru, pokračuje od konce zapsaných dat < - přesměrování standardního vstupu do souboru <<input - přesměrování standardního vstupu do souboru, jestliže nalezne řetězec input zašle také znak konce souboru 11
Pro chybová hlášení resp. chybovou hodnotu, používá Linux hodnoty: 0; 127; 1; 126. 0=úspěch; 127=EE -> Error excec; 1=chyba; např.: ls -z => neexistuje; 126=chyba ve spuštění, např. z důvodu práv. Bash, také umí řetězit příkazy pomocí znaku ; (středník). Obecně pak příkazy mohou vypadat např. takto: [user@localhost]$ příkaz_1; příkaz_2;..; příkaz_n Další možností jak řetězit příkazy je používání podmínek, základní možnost bez dalšího programování pomocí příkazu IF nebo CASE apod. je použítí znaků: & a. Tedy: [user@localhost]$ ls -l && gzip vystup.txt Program gzip provede svůj úkol pouze v případě, že se provede příkaz ls -l. [user@localhost]$ ls -l gzip vystup.txt Příkaz gzip se provede pouze v případě, že se neprovede příkaz ls -l. 1. Pokuste se vytvořit soubor s nastavením síťových rozhraní. Soubor nazvaný ifconfig.txt bude umístěn do: /home/fimuhk/ifconfig.txt Pokud Vám systém nepovolí čtení ifconfig, můžete buď použít sudo nebo vytvořit odkaz na program sbin, jako argument bude složka /sbin/, protože tam mají uživatelé standardně přístup. [FimUHK@localhost]$ ifconfig -a > /home/fimuhk/ifconfig.txt 2. Definujte alias: ls, který bude vypisovat všechny soubory a složky a jejich velikost v čitelném formátu, ted např. v MB. [FimUHK@localhost]$ alias ls='ls -h' [FimUHK@localhost]$ ls 3. Pokuste se vytvořit 5 souborů najednou pomocí příkazu: touch. Dále vytvořte soubory s tímto názvem: FILE11, FILE12, FILE13, FILE14, FILE21, FILE22, FILE23, FILE24, FILE31, FILE32, FILE33, FILE34, také pomocí příkazu touch, všechny soubory budou mít příponu.txt. Po vytvoření těchto souborů, vypište obsah složky, kde jste soubory vytvořili. Vše v jednom řádku (využijte řetězení příkazů). [FimUHK@localhost]$ touch FILE{1,2,3}{1,2,3,4}.txt 4. Vytvořte soubor s názvem obsah.txt, který bude obsahovat tyto řádky (využijte konzolový editor nano [pico, vi]): 12
/tmp /etc /home Programu ls s parametrem -l vložte obsah souboru jako argument. Řešení: [FimUHK@localhost]$ ls -l obsah.txt 5. Napište skript, který vytvoří dvě uživatelské skupiny databaze a site. Dále vytvořte uživatele karel, který bude ve skupině databáze a uživatele martin, který bude ve skupině site. Uživatel karel bude mít vytvořenou domovskou složku. Uživatel Martin nikoliv. V daším kroku otestujete, zda-li existují domovské složky nově vytvořených uživatelů, pokud ano provede se toto: Vytvoříse soubor info.txt, vlastníkem tohoto souboru bude uživatel martin. Změníte také skupinu na databaze. Dále změníte přístupová práva tak aby vlastník mohl cokoliv, skupina bude moci pouze soubor číst a ostatní nic. Do souboru info napíšete ifnormace, kterou školu studujete a, který obor. Na dalším řádku napíšete informaci, jaký shell používá uživatel martin. O všech akcích, které jste provedli, budete informovat. Informaci podáte jako výpis do řádku konzole. O případném neúspěchu vytvoření souboru podáte také informaci. Řešení: groupadd databaze groupadd site useradd -m -G databaze karel useradd -G site martin if [ -d /home/karel ]; then touch /home/karel/info.txt chown martin /home/karel/info.txt chgrp site /home/karel/info.txt chmod 740 /home/karel/info.txt && else fi echo -e "Univerzita HK \n FIM \n IM5 \n Jako vychozi shell pouzivam: '$SHELL'" >> /home/karel/info.txt echo "Soubor info.txt byl vytvoren a vlastnikem souboru je karel, chmod je 740." echo Uzivatel karel nema vytvorenu domovskou slozku nemohu proto vytvorit soubor info.txt. exit 0 13