Table of Contents

Tema 3

Ce trebuie să știu? Studiați secțiunea de Cunoștințe evaluate și suportul agregat necesar temei.

Thread nou? Nu. Pentru o ușoară parcurgere a mesajelor, folosiți thread-urile de discuții existente în cadrul forumului, fără a crea altele. În consecință, thread-urile (subiectele de discuții) nou create vor fi șterse.

Căutare. Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum.

Printscreen/poză? Nu. În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum imgur sau alternativele sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsuri, vor fi șterse.

Actualizări. Urmăriți atât forumul cât și modificările aduse enunțului/checker-ului, modificări ce sunt publicate și explicate în paragrafele de mai jos.

Regulament. Înainte și în timpul realizării temei, vă rugăm să parcurgeți indicațiile legate de realizarea temelor, încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe cs.curs.pub.ro pentru întrebări și neclarități legate de teme.

Întrebări frecvente. În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de întrebări frecvente întâlnite în cadrul temelor. Să țineți cont, va rugăm, și de recomandările de comunicare electronică.

Ajutor reciproc. Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți.

Informații generale

Deadline: 4 Decembrie, ora 23:55
Timp de lucru: 7 zile
Punctaj: 0.8 puncte din nota finală
Formular pentru trimitere temă: https://goo.gl/forms/vjzVNNczk5A29uLI3

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

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ă

Cunoștințe evaluate

Testarea temei. Finalizarea temei. Mașină virtuală.

Instrucțiuni de utilizare a checkerului uso

Descărcare mașină virtuală și informații despre aceasta

  • Mașina virtuală și link-ul de unde poate fi ea descărcată se găsesc pe pagina cu informații despre mașina virtuală.

Testarea temei se va face doar pe mașina virtulă (aici) autentificat ca utilizator student, folosind utilitarul uso. Acesta poate fi executat în orice moment pentru a verifica dacă au fost rezolvate corect task-urile. Nu lucrați autentificat ca utilizator root în sistem, la nicio temă. Din acest motiv există posibilitatea să nu vă treacă testele. Pe de altă parte, nu este o metoda de siguranță să lucrați autentificat ca utilizator root din motive de securitate și/sau permisiuni.

Utilitarul uso implementează testele doar pentru task-urile temei curente. La fiecare temă nouă, pentru a folosi utilitarul uso, primul pas este să porniți tema folosind comanda sudo uso start. În caz contrar, nu veți avea actualizat checker-ul pentru tema curentă.

Verificați versiunea utilitarului uso cât și a checker-ului, afișată la rularea comenzii sudo uso start sau sudo uso check, pe prima linie a output-ului. Asigurați-vă că aveți ultima versiune înainte de a continua lucrul pentru temă. Versiunea actuală este specificată în secțiunea Informații generale prezentă în enunțul temei. Pentru situațiile în care nu dispuneți de ultima versiune a utilitarului uso sau checker-ului, rulați sudo uso update.

Finalizarea temei se realizează prin rularea comenzii sudo uso submit și încărcarea codului returnat de această comandă (32 de caractere alfanumerice), în formularul din secțiunea Informații generale. Pentru a evita transcrierea eronată a codului returnat de checker, recomandăm copierea acestuia din interfața mașinii host conectată prin SSH către mașina guest după cum urmează:

  • În cazul în care folosiți Linux sau macOS, copierea codului se realizează din terminal selectând codul emis și apăsând combinația de taste CTRL+SHIFT+C (copy)
  • În cazul in care folosiți Windows, copierea se realizează din PuTTy selectând codul codul emis (nu este nevoie să folosiți CTRL+SHIFT+C, codul fiind automat copiat la selectare).
  • După ce a fost copiat în clipboard codul emis de checker, il puteți lipi (paste) în formularul din secțiunea Informații generale

Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Puteți să sugerați diferite abordări sau să dați idei generale (dar nu comenzi) celorlalți. Urmăriți indicațiile legate de realizarea temelor. La prima abatere studentul primește un avertisment, iar punctajul obținut pe temă îi este redus cu valoarea punctajului pe task-ul respectiv. Începând cu a doua abatere, se va anula întregul punctaj pe tema curentă. Temele anterioare sau cele viitoare nu vor fi afectate. Abaterile se păstrează pe parcursul semestrului. Ori de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate în catalog.

Docker

Pe parcusul acestei teme vom folosi virtualizarea bazată pe containere. Există mai multe proiecte care automatizează lucrul cu containere Linux, iar unul dintre cele mai populare este Docker. Docker este un proiect open source început în 2013 și, în momentul de față este foarte folosit și în industrie (Google, Amazon, Microsoft). Vom folosi containere pentru această temă pentru a da senzația că avem mai multe mașini virtuale conectate la mașina virtuală de USO (usovm), cu multiple interfețe de rețea pe care le vom configura în diverse moduri cu scopul de a comunica între ele sau în Internet. În realitate, un container nu este o mașină virtuală.

Docker cheatsheet

Task 01 (20p)

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.

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 :).

Task 02 (20p)

Checkerul va genera la prima sa rulare 3 containere 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 rick morty summer && docker rm rick morty summer) și rulați din nou checkerul.

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.

Task 03 (25p)

Task 04 (15p)

Atenție! Cheile nu trebuie copiate/mutate în alt director.

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.

Scriptul va trebui:

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).

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 Informații generale. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii aici), până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte).