Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso-ac:teme:tema-3 [2016/12/14 19:29]
giorgiana.vlasceanu [Informații generale]
uso-ac:teme:tema-3 [2017/11/29 17:44] (current)
dennis.plosceanu [Informații generale]
Line 21: Line 21:
  
 <note important>​ <note important>​
-Deadline: **18 Decembrie, ora 23:55**\\ +Deadline: **Decembrie, ora 23:55**\\ 
-Timp de lucru: **zile**\\ +Timp de lucru: **zile**\\ 
-Punctaj: **0.puncte** din nota finală\\ +Punctaj: **0.puncte** din nota finală\\ 
-Formular pentru trimitere temă: https://​goo.gl/​39NdTB\\+Formular pentru trimitere temă: https://​goo.gl/​forms/​vjzVNNczk5A29uLI3\\
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 **Actualizări enunț:** **Actualizări enunț:**
-  * Nu există +  * 28 Noiembrie 2017 precizare extra la Task04 punctul 2 
-**Actualizări utilitar ''​uso'':​ <color red>​versiunea v16 "Gold Blackbird"</​color>​** +  * 24 Noiembrie 2017 - Încă un tip la Task01 punctul 3 
-  * Nu există +  * 23 Noiembrie 2017 - Tip în plus la Task01 punctul 3
-**Actualizări checker: <color red>​versiunea 1</​color>​** +
-  * Nu există +
-**Actualizări deadline:​** +
-  * Extindere dealine cu o zi+
 </​note>​ </​note>​
  
 +<​note>​ 
 +**Actualizări checker:​** 
 +  * 26 Noiembrie 2017 V4 
 +    * Task01 - verificare ca parola userului ''​smith''​ să fie ''​smith''​ 
 +    * Task05 - Ștergere de fișiere create de checker 
 +  * 25 Noiembrie 2017 V3 
 +    * Task05 - Match case sensitive pentru verificarea tipurilor de date din tabelă 
 +  * 24 Noiembrie 2017 V2  
 +    * Task03 - Adăugat mesaj de eroare în plus pentru un caz netratat (mai multe adrese IP pe o interfață) 
 +    * Task04 - Timeout mai mare pentru check-ul dacă script-ul send_to_all.sh cere parolă 
 +</​note>​
 ===== Cunoștințe evaluate ===== ===== Cunoștințe evaluate =====
  
Line 46: Line 52:
   * folosirea utilitarelor de lucru cu mașini aflate la distanță;   * folosirea utilitarelor de lucru cu mașini aflate la distanță;
   * noțiuni simple de shell scripting;   * noțiuni simple de shell scripting;
-  * înlănțuiri de comenzi ​și comunicare eficientă interproces.+  * stocarea ​și prelucrarea datelor
  
 ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== ===== Testarea temei. Finalizarea temei. Mașină virtuală. =====
Line 70: Line 76:
   * pentru a șterge o imagine folosiți comanda ''​docker rmi''​.   * pentru a șterge o imagine folosiți comanda ''​docker rmi''​.
  
-==== Task 01 (25p) ====+==== Task 01 (20p) ====
 <note important>​ <note important>​
 **Toate** celelalte taskuri următoare sunt dependende de rezolvarea corectă și completă a Taskului 1. În cazul în care opriți sau dați reboot mașinii virtuale de USO containerele vor fi și ele oprite. Va trebui să refaceți o parte din configurări,​ în acest caz. Pentru comoditate, folosiți **Save the machine state** în loc de **Power off**. **Toate** celelalte taskuri următoare sunt dependende de rezolvarea corectă și completă a Taskului 1. În cazul în care opriți sau dați reboot mașinii virtuale de USO containerele vor fi și ele oprite. Va trebui să refaceți o parte din configurări,​ în acest caz. Pentru comoditate, folosiți **Save the machine state** în loc de **Power off**.
 </​note>​ </​note>​
   * **[2p]** Descărcați imaginea ''​i386/​ubuntu:​latest''​ folosind comanda ''​docker pull''​.   * **[2p]** Descărcați imaginea ''​i386/​ubuntu:​latest''​ folosind comanda ''​docker pull''​.
-  * **[5p]** Creați și porniți un container Docker cu numele ''​uso-base''​ care folosește imaginea descărcată la punctul anterior. Containerul trebuie să rămână pornit. Urmăriți exemplul [[https://​docs.docker.com/​engine/​reference/​commandline/​run/#/​assign-name-and-allocate-pseudo-tty---name--it|de aici]]. +  * **[4p]** Creați și porniți un container Docker cu numele ''​dimension-c137''​ care folosește imaginea descărcată la punctul anterior. Containerul trebuie să rămână pornit. Urmăriți exemplul [[https://​docs.docker.com/​engine/​reference/​commandline/​run/#/​assign-name-and-allocate-pseudo-tty---name--it|de aici]]. 
-  * **[5p]** Instalați pachetele ''​inetutils-ping'',​ ''​iproute2'',​ ''​openssh-server'',​ ''​sshpass''​ , ''​vim''​ și ''​sudo''​ pe containerul ''​uso-base''​. +  * **[4p]** Instalați pachetele ''​inetutils-ping'',​ ''​iproute2'',​ ''​openssh-server'',​ ''​sshpass''​ , ''​sqlite3'',​ ''​vim''​ și ''​sudo''​ pe containerul ''​dimension-c137''​. 
-  * **[3p]** Adăugați utilizatorul ''​student''​ pe containerul ''​uso-base''​ cu parola ''​student''​. Setați directorul home al acestuia la ''/​home/​student''​ și shellul la ''/​bin/​bash''​. +<note tip> 
-  * **[7p]** Asigurați-vă că puteți realiza o conexiune ''​ssh''​ între mașina virtuală de USO (''​usovm''​) și containerul ''​uso-base''​ folosind userul ''​student''​. +Pot apărea probleme dacă încercați să instalați pachetele cu ''​docker exec'',​ atașați-vă la containere cu ''​docker attach''​ și rulați de acolo. 
-  * **[3p]** Creați o imagine a containerului ''​uso-base''​ cu numele ''​uso/​ubuntu''​. **Hint**: ''​docker commit''​+O să primiți, probabil, în primă instanță ''​Unable to locate package ...''​. Trebuie să vă prindeți de ce :). 
 +</​note>​ 
 +  * **[2p]** Adăugați utilizatorul ''​smith''​ pe containerul ''​dimension-c137''​ cu parola ''​smith''​. Setați directorul home al acestuia la ''/​home/​smith_residence''​ și shellul la ''/​bin/​bash''​. 
 +  * **[6p]** Asigurați-vă că puteți realiza o conexiune ''​ssh''​ între mașina virtuală de USO (''​usovm''​) și containerul ''​dimension-c137''​ folosind userul ''​smith''​. 
 +  * **[2p]** Creați o imagine a containerului ''​dimension-c137''​ cu numele ''​dimension-c137/​ubuntu''​. **Hint**: ''​docker commit''​
  
-==== Task 02 (30p) ====+==== Task 02 (20p) ====
  
-Checkerul va genera la prima sa rulare 3 containere ''​uso1''​''​uso2''​ și ''​uso3'' ​care folosesc imaginea creată la Task 1. Vă puteți atașa la oricare dintre ele folosind comanda ''​docker attach CONTAINER_NAME''​. În cazul în care ați făcut o configurație greșită și doriți reinițializarea containerelor,​ ștergeți-le (''​docker stop uso1 uso2 uso3 && docker rm uso1 uso2 uso3''​) și rulați din nou checkerul. +Checkerul va genera la prima sa rulare 3 containere ​care folosesc imaginea creată la Task 1: 
-  * **[6p]** Configurați în mod static temporar, pe interfața ''​eth1''​ a containerului ''​uso1'',​ a 11-a adresă asignabilă din rețeaua ''​192.168.42.0/​24''​. + 
-  * **[6p]** Configurați în mod static temporar, pe interfeța ''​eth1''​ a containerului ''​uso2'', ​a 12-a adresă asignabilă din rețeaua ''​192.168.42.0/​24''​. Testați conectivitatea între cele 2 containere prin intefețele ''​eth1''​ folosind comanda ''​ping''​. +  * ''​rick'' ​- cu userul ​''​rick''​ și parola ''​rick''​ 
-  * **[6p]** Configurați cele 2 containere astfel încât fiecare să se poată conecta la celălalt prin ''​ssh''​ cu credențialele ​''​student:​student'' ​de pe userul '​student'​. Conexiunea va folosi adresa IP asignată intefețelor ''​eth1'',​ nu ''​eth0''​+  * ''​morty''​ - cu user ''morty'' ​si parola ​''​morty''​ 
-  * **[4p]** Faceți configurările necesare astfel încât mașina virtuală de USO (host-ul) să se poată conecta prin ''​ssh'',​ de pe userul ''​student'',​ fără parolă, la cele 2 containere ''​uso1''​ și ''​uso2''​ pe IP-urile configurate pe intefețele ''​eth1''​. Conexiunea trebuie să se poată realiza pentru userul ''​student''​ de pe containere. +  * ''​summer''​ - cu userul ''​summer''​ și parola ''​summer''​ 
-  * **[8p]** Faceți configurările necesare astfel încât mașina virtuală de USO (host-ul) să se poată conecta prin ''​ssh'',​ de pe userul ''​student'',​ fără parolă, la containerul ''​uso2''​ pe IP-ul configurat pe intefeța ''​eth1''​. Conexiunea trebuie să se poată realiza pentru userul ''​root''​ de pe container.+ 
 +Vă puteți atașa la oricare dintre ele folosind comanda ''​docker attach CONTAINER_NAME''​. În cazul în care ați făcut o configurație greșită și doriți reinițializarea containerelor,​ ștergeți-le (''​docker stop rick morty summer ​&& docker rm rick morty summer''​) și rulați din nou checkerul. 
 + 
 +  * **[7p]** Configurați în mod static temporar, pe interfața ''​eth1''​ a containerului ''​rick'',​ a 11-a adresă asignabilă din rețeaua ''​192.168.137.0/​24''​. 
 +  * **[7p]** Configurați în mod static temporar, pe interfeța ''​eth1''​ a containerului ''​morty'', ​ultima ​adresă asignabilă din rețeaua ''​192.168.137.0/​24''​. Testați conectivitatea între cele 2 containere prin intefețele ''​eth1''​ folosind comanda ''​ping''​. 
 +  * **[6p]** Configurați cele 2 containere astfel încât fiecare să se poată conecta la celălalt prin ''​ssh''​ cu credențialele de mai sus. Conexiunea va folosi adresa IP asignată intefețelor ''​eth1'',​ nu ''​eth0''​.
  
 <note important>​ <note important>​
-Containerele ''​uso1''​ și ''​uso2''​ trebuie să fie pornite la finalul acestui task. Interfețele ''​eth1''​ ale celor două containere trebuie să aibă configurată câte o singură adresă IP.+Containerele ''​rick''​ și ''​morty''​ trebuie să fie pornite la finalul acestui task. Interfețele ''​eth1''​ ale celor două containere trebuie să aibă configurată câte o singură adresă IP.
 </​note>​ </​note>​
 +
  
 ==== Task 03 (25p) ==== ==== Task 03 (25p) ====
-  * **[4p]** Opriți interfața ''​eth0''​ de pe containerul ''​uso3''​. 
-  * **[7p]** Configurați în mod static permanent, pe interfața ''​eth1''​ a containerului ''​uso3''​ o adresă liberă, la alegere, din rețeaua ''​192.168.42.0/​24''​. **Hint**: Adresa ''​192.168.42.1''​ este asignată intefeței ''​usobridge''​ de pe host (''​usovm''​). Un container nu poate fi rebootat, testați faptul că ați făcut configurările corecte folosind comanda ''​service networking restart''​ în containerul ''​uso3''​. 
-  * **[7p]** Faceți configurările necesare atfel încât containerul ''​uso3''​ să aibă conexiune la internet. Testați folosind comanda ''​ping -c 2 8.8.8.8''​. Configurarea trebuie să fie permanentă. 
-  * **[7p]** Configurați containerul ''​uso2''​ altfel încât comanda ''​ping google.com''​ să se execute cu succes. ​ 
  
-==== Task 04 (20p) ==== +  ​* **[3p]** Opriți interfața eth0 de pe containerul ​''​summer''​
-  ​* **[15p]** Scrieți un script aflat în directorul ​''​/​home/​student/​tema3/​'' ​de pe mașina virtuală de USO (''​usovm''​), cu numele ​''​iface-info.sh'' ​care afișează informații despre ​interfață de rețea primită ca parametru. Rezultatul trebuie ​să respecte următorul format ​(exact 3 linii): +  * **[7p]** Configurați în mod static permanent, ​pe interfața ​''​eth1'' ​a containerului ​''​summer''​ o adresă astfel încât ​să poată da ping cu succes pe adresele setate pe containerele rick si morty (atenție și la adresa setată pe interfața ​''​usobridge''​ de pe host).Un container nu poate fi rebootat, testați faptul că ați făcut configurările corecte folosind comanda ​''​service networking restart'' ​în containerul ​''​summer''​. 
-<code bash> +  * **[7p]** Faceți configurările necesare atfel încât containerul ​''​summer'' ​să aibă conexiune la internet. Testați folosind ​comanda ''​ping -c 2 8.8.8.8''​. Configurarea ​trebuie ​să fie permanentă. 
-student@usovm:​~$ /​home/​student/​tema3/​iface-info.sh enp0s8 +  * **[8p]** Configurați containerul ​''​morty'' ​astfel încât comanda ​''​ping google.com'' ​să se execute cu succes.
-MAC: 08:​00:​27:​0E:​C4:​CA +
-IP: 172.28.128.4 +
-Netmask: 255.255.255.0 +
-</​code>​ +
-Restricții și precizări:​ +
-  * scriptul trebuie să scrie rezultatul ​la ''​stdout'';​ +
-  * în caz că nu primește niciun argument trebuie să afișeze mesajul ​''​Gimme more args'' ​la ''​stderr'';​ +
-  * în cazul în care primește un singur argument, îl va trata ca pe o interfață ​de pe host (mașina virtuală de USO)+
-  * în cazul în care interafața oferită prin primul argument nu există, scriptul va afișa la ''​stderr'' ​mesajul ​''​No such interface''​; +
-  * dacă intefața nu are IP/Netmask se va afișa '​N/​A'​ în locul valorilor respective. +
-  ​în caz de eroare (nu primește niciun argument sau interfața nu există), scriptul va ieși cu valoarea de retur ''​1''​+
-  * în caz de succes, scriptul va ieși cu valoarea de retur ''​0'';​ +
-  * dacă interfața are mai multe adrese IP se va afișa doar prima (în ordinea dată de comanda ''​ip address show''​); +
-  * adresa MAC trebuie ​afișată cu upper case, de exemplu ''​08:​00:​27:​0E:​C4:​CA'',​ nu ''​08:​00:​27:​0e:​c4:​ca'';​ +
-  * în cazul în care interfața primită ca parametru este ''​lo'' ​se va afișa MAC-ul acesteia ca fiind ''​00:​00:​00:​00:​00:​00'' ​(așa cum raportează ''​ip address show''​).+
  
-  ​* **[5p]** Extindeți scriptul ​''​iface-info.sh'' ​pentru a putea primi două argumentePrimul argument este numele unei interfețe, iar al doilea este numele unui container pornit. **Hint**''​docker exec''​ +==== Task 04 (15p) ==== 
-Restricții și precizări suplimentare față de primul subpunct+  ​* **[7p]** Generați o pereche de chei [[https://​en.wikipedia.org/​wiki/​Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] (id_ecdsa și id_ecdsa.pub) de lungime 384 biți în directorul ​''​/​home/​student/​tema3/​keys'' ​de pe mașina virtuală de USO (''​usovm''​)NU setați niciun passphrase pentru ele. 
-  * în cazul în care scriptul ​primește ​două argumente, primul argument este numele unei interfețe, iar al doilea este numele unui container pornit. Scriptul va afișa informații despre interfața dată, aceasta fiind o interfață din container; +  ​* **[8p]** Faceți configurările necesare astfel încât userul ​''​student'' ​de pe host (''​usovm''​) să se poată conecta pe userii de pe cele 3 containere (''​rick'',​ ''​morty'',​ ''​summer''​),​ fără parolă, folosind cheile generate la subpunctul anterior (va trebui să faceți posibilă conexiunea prin ''​ssh''​ si pe containerul summer cum ați făcut ​și la task-ul 2 pentru ''​rick''​ și ''​morty''​). 
-  * în cazul în care containerul dat ca argument nu există sau nu este pornit, scriptul va afișa la ''​stderr'' ​mesajul ​''​No such container''​; + 
-  * dacă nici interfața, nici containerul nu există (sau nu rulează), prioritate are mesajul de eroare pentru container, afișându-se la ieșierea de eroare ​''​No such container''​+<note important>​ 
-  * dacă se primesc mai mult de două argumente, începând cu al treilea acestea vor fi ignorate.+Atenție! Cheile nu trebuie copiate/​mutate în alt director. 
 +</​note>​ 
 + 
 +==== Task 05 (20p) ==== 
 + 
 +În urma primei rulări a checkerului pe acest task, pe cele 3 containere (''​rick'',​ ''​morty'',​ ''​summer''​) se va popula câte o bază de date folosind ''​sqlite3''​. 
 +  * **[8p]** Creați în mașina virtuala folosind ''​sqlite3''​ (o sa trebuiască instalat pachetul) o bază de date numită ''​rickandmorty.db''​ (în ''/​home/​student/​tema3/​task5''​) și în ea o tabelă nouă numită ''​characters''​ cu 3 coloane: 
 +    * name - varchar de maxim 50 de caractere, nu poate fi null 
 +    * age - număr întreg 
 +    * episode - varchar de maxim 100 de caractere, nu poate fi null 
 +  * **[12p]** Scrieți un script ''​select.sh'' ​în ''/​home/​student/​tema3/​task5''​ de pe mașina virtuală ​care primește ​argumente
 +    * numele unei baze de date (path către un fișier ''​*.db''​) 
 +    * numele unei tabele din baza de date 
 +Scriptul va trebui: 
 +  * să selecteze din tabelă intrările care corespund utilizatorului curent (coloana name din tabelă conține numele utilizatorului care rulează scriptul) 
 +  * să scrie rezultatul selecției în format ​''​csv'' ​într-un fișier numit ''​query.csv'' ​în directorul home al utilizatorului curent 
 + 
 +Pentru testare va trebui să aveți o tabelă în care să inserați date (preferabil creați o altă tabelă cu aceleași coloane ca ș''​characters'' ​pentru că checker-ul va șterge la rulare toate datele din aceasta).
  
 ===== Task obligatoriu pentru toate temele (0p) ===== ===== Task obligatoriu pentru toate temele (0p) =====
  
 Asigurați-vă că ați submis tema și ați încărcat codul aferent submisiei în formularul din secțiunea de [[#​informatii_generale|Informații generale]]. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii [[uso:​teme:​instructiuni-checker#​pasi|aici]]),​ până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte). Asigurați-vă că ați submis tema și ați încărcat codul aferent submisiei în formularul din secțiunea de [[#​informatii_generale|Informații generale]]. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii [[uso:​teme:​instructiuni-checker#​pasi|aici]]),​ până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte).
- 
uso-ac/teme/tema-3.1481736589.txt.gz · Last modified: 2016/12/14 19:29 by giorgiana.vlasceanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0