Spoločné vlastnosti
- Termín odovzdania je začiatkom februára 2017. Termín bude upresnený.
- Vypracujte obe zadania.
- Zadanie spokojne vzájomne konzultujte. Vypracovanie však musí byť samostatné a jednoznačné.
- Plagiátorstvo a identický kód je trestaný okamžitým hodnotením FX.
- Ak využijete kusy kódu alebo rady z internetu, ste povinní uviesť do zdrojového kódu odkaz na zdroj (URL blogu, odkaz na StackOverflow a pod.) Chýbajúci zdroj je považovaný za plagiátorstvo.
- Zadanie bude obhájené individuálne a ústne v termín uvedený vyššie.
- Zadanie musí implementovať celú požadovanú funkcionalitu. Vynechanie ktoréhokoľvek bodu má za následok zamietnutie zadania. Hodnotenie sa odvíja od spôsobu implementácie zadania a od odpovedí na kontrolné otázky zamerané na pochopenie vypracovania.
PowerShell: Správa balíčkov
Vytvorte jednoduchý balíčkovací správca, teda nástroj, ktorý uľahčí sťahovanie a inštaláciu softvéru do operačného systému.
Balíčkovací správca musí obsahovať nasledovné vlastnosti:
- získať zoznam dostupných balíčkov zo servera
- inštalácia balíčka podľa mena
Architektúra
Balíčkovací správca pozostáva zo serverovskej a klientskej časti. Serverovská časť reprezentuje vzdialené úložisko (repozitár) dostupných balíčkov. Klientska strana predstavuje koncový počítač, na ktorý bude inštalovaný softvér.
Balíčky
Metadáta balíčka predstavuje jednoduchý súbor s nasledovným obsahom:
- kódové označenie balíčka, bez diakritiky. Príklad:
total-commander
alebomysql
- celý názov programu. Príklad:
Total Commander
aleboMySQL
- URL adresa inštalačného súboru, napr.
http://tcmd900.s3.amazonaws.com/tcmd900x32.exe
- textový popis balíčka obsahujúci viacvetný popis balíčka
Serverovská časť
Serverovskú časť implementujte ľubovoľným, čo najjednoduchším spôsobom. Server má len dve úlohy:
- poskytnúť zoznam dostupných balíčkov
- vrátiť metadáta balíčka na základe kódového označenia
Serverovská časť môže byť statická, nežiada sa pridávanie balíčkov na server. Server môže pokojne zverejňovať balíčky cez HTTP, kde metadáta balíčka budú vo formáte CSV alebo XML alebo JSON uložené napevno na serveri student.ics.upjs.sk
vo vašom domovskom adresári. Zvoľte formát, ktorý sa bude dať ľahko spracovávať v klientskej časti. Implementácia servera sa nebude hodnotiť.
Klientska časť
Implementujte sadu skriptov v PowerShelli, ktorá dokáže:
zobraziť zoznam balíčkov na serveri. Vypisujte kódové označenia balíčka a ich celé názvy.
pm.ps1 list total-commander "A two-pane file manager similar to Total Commander" mysql "A MySQL server" http "An Apache HTTP server"
zistiť informácie o konkrétnom balíčku na základe jeho kódového označenia
pm.ps1 info total-commander Total Commander (total-commander) --------------------------------- A two-pane file manager similar to Total Commander Download from http://tcmd900.s3.amazonaws.com/tcmd900x32.exe
nainštalovať konkrétny balíček na základe jeho kódového označenia. Skript stiahne inštalačný súbor z URL určenej v metadátach balíčka a spustí ho. Samotný proces inštalácie, ktorá je obvykle grafická, ponechajte na používateľa a neriešte ho.
pm.p1 install total-commander Downloading from http://tcmd900.s3.amazonaws.com/tcmd900x32.exe Running setup from tcmd900x32.exe
Shell scription: správa inštalácií
V adresári súborového systému sa nachádza n podadresárov, ktoré zodpovedajú n nasadeným službám (tzv. adresáre deploymentov).
Jednotlivé adresáre deploymentov majú v zásade identickú štruktúru a môžu obsahovať ľubovoľné množstvo súborov a podadresárov.
Počet adresárov deploymentov môže byť ľubovoľný — nie je vylúčené nasadenie cca. 20 inštancií.
Príklad adresárovej štruktúry:
+ /opt
+ dragon1
+ WEB-INF
+ lib
+ classes
web.xml
+ dragon2
+ WEB-INF
+ lib
+ classes
web.xml
+ dragon3
+ WEB-INF
+ lib
+ classes
web.xml
Vytvorte sadu skriptov, ktorá bude predstavovať administrátorovu pomoc pri hromadnej správe súborov.
Nadradený adresár môže byť ľubovoľný. Projektové káže používať /opt
, ale nie je vylúčené umiestnenie aj v inom adresári.
Rozkopírovanie súborov
Rozkopírovanie jedného či viacerých súborov do každého deploymentu, resp. do vybraných aplikácií:
Príklad (skopírovanie web.xml
do každého deploymentu, do podadresára WEB-INF
):
masscp web.xml -t WEB-INF
Príklad (skopírovanie web.xml
do dvoch určených deploymentov):
masscp web.xml -t WEB-INF -A dragon1,dragon5
Príklad (hromadné skopírovanie všetkých XML súborov spĺňajúcich masku do všetkých deploymentov):
masscp *.xml -t WEB-INF
Príklad (hromadné skopírovanie všetkých XML súborov do dvoch určených deploymentov):
masscp *.xml -t WEB-INF -A dragon1,dragon5
Manažment konfiguračných šablón
Jednotlivé deploymenty v sebe nesú konfiguračné súbory .xml
, .properties
, .json
, .yaml
. Sú prakticky identické, líšia sa niektorými špecifickými hodnotami.
Príklad pre /opt/dragon1/WEB-INF/classes/db.json
:
{ "hostname" : "dragon1.science.upjs.sk" }
Príklad pre /opt/dragon2/WEB-INF/classes/db.json
:
{ "hostname" : "dragon2.science.upjs.sk" }
Na tento účel je ustanovený špeciálny vzorový adresár deploymentu. Má názov končiaci sa na -template
a obsahuje len šablónové súbory obsahujúce premenné v tvare ${...}
, ktoré sa neskôr nahradia skutočnými hodnotami.
Súbor /opt/dragon-template/WEB-INF/classes/db.json:
{ "hostname" : "${db.host.name}" }
Tento súbor obsahuje jednu premennú ${db.host.name}
.
Nahrádzanie obsahov premenných
Špeciálny vzorový adresár deploymentu obsahuje v adresári súbory s definíciami hodnôt premenných, ktoré sa dosadia za premenné v šablónových premenných.
Ako príklad si predstavme šabĺónový adresár deploymentu dragon-template
v adresári /opt/dragon-template
, ktorý obsahuje tri súbory:
/opt/dragon-template/dragon1.variables
/opt/dragon-template/dragon2.variables
- …
/opt/dragon-template/dragon5.variables
Súbor dragon1.variables
vyzerá nasledovne:
db.host.name=dragon1.science.upjs.sk
default.user=root
Iný súbor dragon2.variables
vyzerá nasledovne:
db.host.name=dragon5.science.upjs.sk
default.user=novotnyr
Skripty
Vytvorte skript, ktorý skopíruje súbory zo šablónového adresára deploymentu do vybranej reálnej aplikácie, pričom vyhodnotí obsahy premenných:
templatecp -A dragon1,dragon2
Vyššie uvedený príkaz skopíruje všetky šablónové súbory do príslušných aplikácií dragon1
, dragon2
a vyhodnotí obsahy premenných na základe špecifikácií v príslušných .variables
súboroch.
V prípade súboru /opt/dragon-template/WEB-INF/classes/db.json
sa nahradí obsah premennej db.host.name
hodnotou:
dragon1.science.upjs.sk
pre aplikáciudragon1
dragon2.science.upjs.sk
pre aplikáciudragon2
Nasledovný príkaz skopíruje všetky šablónové súbory do vybraných aplikácií:
templatecp -A dragon1,dragon2
Nasledovný príkaz skopíruje všetky šablónové súbory do všetkých aplikácií:
templatecp
Nasledovný príkaz skopíruje jeden šablónový súbor do všetkých aplikácií:
templatecp WEB-INF/classes/db.json
Nasledovný príkaz skopíruje jeden šablónový súbor do všetkých aplikácií:
templatecp WEB-INF/classes/db.json -A dragon1,dragon2