Differences

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

Link to this comparison view

uso-ac:teme:tema-3 [2017/11/23 20:49]
dennis.plosceanu
uso-ac:teme:tema-3 [2017/11/29 17:44] (current)
dennis.plosceanu [Informații generale]
Line 1: Line 1:
-<​hidden>​ 
 ====== Tema 3 ====== ====== Tema 3 ======
 <​note>​ <​note>​
Line 22: Line 21:
  
 <note important>​ <note important>​
-Deadline: **29 Noiembrie, ora 23:55**\\ +Deadline: **4 Decembrie, ora 23:55**\\ 
-Timp de lucru: **zile**\\+Timp de lucru: **zile**\\
 Punctaj: **0.8 puncte** din nota finală\\ Punctaj: **0.8 puncte** din nota finală\\
 Formular pentru trimitere temă: https://​goo.gl/​forms/​vjzVNNczk5A29uLI3\\ Formular pentru trimitere temă: https://​goo.gl/​forms/​vjzVNNczk5A29uLI3\\
Line 30: Line 29:
 <​note>​ <​note>​
 **Actualizări enunț:** **Actualizări enunț:**
 +  * 28 Noiembrie 2017 - precizare extra la Task04 punctul 2
 +  * 24 Noiembrie 2017 - Încă un tip la Task01 punctul 3
 +  * 23 Noiembrie 2017 - Tip în plus la Task01 punctul 3
 +</​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>​ </​note>​
 ===== Cunoștințe evaluate ===== ===== Cunoștințe evaluate =====
Line 70: Line 83:
   * **[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]].   * **[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]].
   * **[4p]** Instalați pachetele ''​inetutils-ping'',​ ''​iproute2'',​ ''​openssh-server'',​ ''​sshpass''​ , ''​sqlite3'',​ ''​vim''​ și ''​sudo''​ pe containerul ''​dimension-c137''​.   * **[4p]** Instalați pachetele ''​inetutils-ping'',​ ''​iproute2'',​ ''​openssh-server'',​ ''​sshpass''​ , ''​sqlite3'',​ ''​vim''​ și ''​sudo''​ pe containerul ''​dimension-c137''​.
 +<note tip>
 +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.
 +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''​.   * **[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''​.   * **[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''​   * **[2p]** Creați o imagine a containerului ''​dimension-c137''​ cu numele ''​dimension-c137/​ubuntu''​. **Hint**: ''​docker commit''​
  
-==== Task 02 (15p) ====+==== Task 02 (20p) ====
  
 Checkerul va genera la prima sa rulare 3 containere care folosesc imaginea creată la Task 1: Checkerul va genera la prima sa rulare 3 containere care folosesc imaginea creată la Task 1:
Line 84: Line 101:
 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. 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.
  
-  * **[5p]** 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 interfața ''​eth1''​ a containerului ''​rick'',​ a 11-a adresă asignabilă din rețeaua ''​192.168.137.0/​24''​. 
-  * **[5p]** 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''​. +  * **[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''​. 
-  * **[5p]** 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''​.+  * **[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>​
Line 95: Line 112:
 ==== Task 03 (25p) ==== ==== Task 03 (25p) ====
  
-  * **[2p]** Opriți interfața eth0 de pe containerul ''​summer''​. +  * **[3p]** Opriți interfața eth0 de pe containerul ''​summer''​. 
-  * **[6p]** 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''​. +  * **[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''​. 
-  * **[6p]** 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ă. +  * **[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ă. 
-  * **[6p]** Configurați containerul ''​morty''​ astfel încât comanda ''​ping google.com''​ să se execute cu succes. +  * **[8p]** Configurați containerul ''​morty''​ astfel încât comanda ''​ping google.com''​ să se execute cu succes.
-  * **[5p]** Faceți configurările necesare pe mașina virtuală de USO (''​usovm''​) astfel încât să fie posibilă conectarea la containerele ''​rick'',​ ''​morty''​ și ''​summer''​ folosind numele lor. De exemplu: +
-<code bash> +
-student@usovm:​~$ ping rick +
-student@usovm:​~$ ping morty +
-student@usovm:​~$ ping summer +
-</​code>​+
  
 ==== Task 04 (15p) ==== ==== Task 04 (15p) ====
-  * **[5p]** 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. +  * **[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. 
-  * **[5p]** 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''​)+  * **[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''​).
-  * **[5p]** Scrieți un script ''​~/​tema3/​task4/​send_to_all.sh''​ (în home-ul userului ''​student''​ de pe mașina virtuală) care primește o cale către un fișier ca argument și trimite prin ssh (Hint: ''​man scp''​) fișierul primit ca argument în directoarele home ale utilizatorilor ''​rick'',​ ''​morty''​ și ''​summer''​ de pe containerele asociate fără a cere parolă. Puteți să presupuneți că argumentul primit de script este tot timpul valid.+
  
-==== Task 05 (25p) ====+<note important>​ 
 +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''​. Î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''​.
-  * **[5p]** 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: +  * **[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 - string ​de maxim 50 de caractere, nu poate fi null+    * name - varchar ​de maxim 50 de caractere, nu poate fi null
     * age - număr întreg     * age - număr întreg
-    * episode - string ​de maxim 100 de caractere, nu poate fi null +    * episode - varchar ​de maxim 100 de caractere, nu poate fi null 
-  * **[7p]** Scrieți un script ''​select.sh''​ în ''/​home/​student/​tema3/​task5''​ de pe mașina virtuală care primește 2 argumente:+  * **[12p]** Scrieți un script ''​select.sh''​ în ''/​home/​student/​tema3/​task5''​ de pe mașina virtuală care primește 2 argumente:
     * numele unei baze de date (path către un fișier ''​*.db''​)     * numele unei baze de date (path către un fișier ''​*.db''​)
     * numele unei tabele din baza de date     * numele unei tabele din baza de date
Line 126: Line 140:
  
 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 și ''​characters''​ pentru că checker-ul va șterge la rulare toate datele din aceasta). 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 și ''​characters''​ pentru că checker-ul va șterge la rulare toate datele din aceasta).
- 
-  * **[7p]** Copiați scriptul ''​select.sh''​ pe toate cele 3 containerele în home-urile userilor asociați (scriptul trebuie să se numească tot ''​select.sh''​). 
-Scrieți un script nou numit ''​wabalubadubdub.sh''​ în ''/​home/​student/​tema3/​task5''​ care primește ca argumente: 
-    * numele unui user de pe un container 
-    * ip-ul unui container 
-    * numele unei baze de date (path către un fișier ''​*.db''​) 
-    * numele unei table in baza de date 
-Scriptul va trebui să ruleze **prin ssh** scriptul ''​select.sh''​ pe userul și ip-ul primite ca argument. 
-Scriptului ''​select.sh''​ i se vor da argumentele 3 și 4 (numele bazei de date si al tabelei). 
- 
-Apoi scriptul va trebui să copieze **prin ssh** (Hint: ''​man scp''​) fișierul rezultat în urma comenzii rulate (fișierul ''​query.csv''​) în **directorul curent** și cu numele ''​query_remote.csv''​. 
- 
-<note important>​ 
-Atenție! Trebuie **neapărat** să rulați comanda **prin ssh**. Dacă rulați comanda folosind altceva (cum ar fi ''​docker exec''​) rezolvarea nu se va puncta (chair dacă checkerul vă dă punctajul). 
-</​note>​ 
- 
-  * **[6p]** Extindeți scriptul să insereze datele din fișierul copiat în tabela creată de voi la primul punct al exercițiului. 
- 
-<note tip> 
-Hints: 
-  * http://​www.sqlitetutorial.net/​sqlite-import-csv/​ 
-  * http://​tldp.org/​LDP/​abs/​html/​here-docs.html 
-</​note>​ 
- 
-<note important>​ 
-Nu trebuie să tratați cazurile cu input invalid. 
-</​note>​ 
  
 ===== 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).
-</​hidden>​ 
- 
uso-ac/teme/tema-3.1511462945.txt.gz · Last modified: 2017/11/23 20:49 by dennis.plosceanu
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