Tema 3

Ce trebuie să știu? Studiați secțiunea de Cunoștințe evaluate și suportul agregat necesar temei. Nu contactaţi responsabilii de temă pe mail privat decât dacă aceştia vă cer explicit (e.g. pentru debugging local, vizualizarea unor comenzi din rezolvare) Pentru orice fel de întrebare vă rugăm folositi forumul!

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. NU SE ACCEPTA POZE FACUTE CU TELEFONUL (se poate recurge la depunctări, sunt imposibil de urmărit).

Actualizări. Urmăriți în special forumul, există un topic de anunţuri. Urmăriţi ş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. Studenţii cu o atitudine pozitivă, activă şi care îşi ajută colegii pot fi răsplătiţi cu puncte karma sa un PIN USO.

Î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 acs.curs.pub.ro pentru întrebări și neclarități legate de teme.

Î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ă.

Informații generale

Deadline: 10 Decembrie, ora 23:55
Timp de lucru: 14 zile
Punctaj: 0.8 puncte din nota finală

Actualizări enunț:

  • s-a lansat versiunea iniţială

Actualizări checker: versiunea 1.0.0

  • s-a lansat versiunea iniţială

Suportul necesar pentru realizarea temei

  • 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, 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ă.

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

In cadrul acestei teme vom folosi containere de Docker. Acesta suporta doar arhitecturi pe 64 de biti. Pentru a rezolva aceasta tema, va fi nevoie sa folositi masina virtuala pe 64 de biti, aceeasi pe care ati folosit-o la celelalte teme.

In cazul task-urilor 4, 7 si 9, checkerul va da restart la containerele de Docker. Pentru a va asigura ca nu se sterg configuratiile efemere pe care le-ati efectuat pe containerele de Docker, recomandam cat mai des sa folositi sudo uso check <numar> unde <numar> este numarul taskului pe care il doriti verificat. Exemplu sudo uso check 3. Recomandam abia la final de tot rularea a sudo uso check fara vreun argument.

Pentru validarea tuturor celor 10 task-uri durata totala a checker-ului in cazul in care totul e corect e de aproximativ 2 minute pe un host (maşină fizică) cu 8 GB RAM si CPU i5 cu 2.5GHz. Problema este comanda docker care ruleaza greoi. În cazul în care sunt erori există nişte timeout-uri şi mai mult de 5 minute nu ar trebui să dureze. Dacă se întâmplă asta scrieţi-ne pe forum.

Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Dacă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum!

Aveţi voie, însă, să sugerați diferite abordări pe care mergeţi sau să dați idei generale (dar nu comenzi sau fişiere shell script) celorlalți chiar direct pe forum. Încurajăm clarificarea lucrurilor între studenţi atât timp cât nu sunt rezolvate cerinţele în mod direct.

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.

Este interzis studenților să modifice parametrii de rulare ai mașinii virtuale. Orice tentativă malițioasă de modificare a fișierelor și executabilelor care fac mașina virtuală sa ruleze in parametrii optimi (fișierele si folderele ce nu țin de enunțul temei curente), ne conferă dreptul de a oferi 0 puncte pe temele respectivului student.

Task 00 (0p) - Pregătire

Verificarea conexiunii la Internet pe mașina virtuală

Verificați că aveți IP pe interfața enp0s3:

student@usohomework:~$ ip a s dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:35:06:1b brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 84051sec preferred_lft 84051sec
    inet6 fe80::a00:27ff:fe35:61b/64 scope link
       valid_lft forever preferred_lft forever

Verificați conectivitatea către un IP din Internet:

student@usohomework:~$ ping -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=15.3 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=15.3 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=15.4 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=15.5 ms
64 bytes from 1.1.1.1: icmp_seq=5 ttl=57 time=15.2 ms
 
--- 1.1.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.261/15.401/15.573/0.106 ms

Verificați conectivitatea către un site:

student@usohomework:~$ ping -c 5 www.google.com
PING www.google.com (172.217.20.4) 56(84) bytes of data.
64 bytes from ham02s13-in-f4.1e100.net (172.217.20.4): icmp_seq=1 ttl=54 time=18.2 ms
64 bytes from ham02s13-in-f4.1e100.net (172.217.20.4): icmp_seq=2 ttl=54 time=18.3 ms
64 bytes from ham02s13-in-f4.1e100.net (172.217.20.4): icmp_seq=3 ttl=54 time=18.3 ms
64 bytes from ham02s13-in-f4.1e100.net (172.217.20.4): icmp_seq=4 ttl=54 time=18.3 ms
64 bytes from ham02s13-in-f4.1e100.net (172.217.20.4): icmp_seq=5 ttl=54 time=18.2 ms
 
--- www.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 18.245/18.315/18.379/0.178 ms

Dacă oricare din pașii de mai sus nu funcționează aveți următoarele alternative:

  1. Încercăm o configurație dinamica temporara, ar trebui să rezolve. Dacă asta rezolvă, transformați-o în configurație permanentă cu tot dns-nameservers în /etc/network/interfaces. Documentație pentru acest fișier aveți și în laborator și pe Internet:
student@usohomework:~$ sudo ip a f dev enp0s3 && sudo dhclient enp0s3 
  1. Dacă doar conexiunea către google.com pică dar către 1.1.1.1 merge: Faceți configurația de DNS în fișierul /etc/systemd/resolved.conf → din cauza unui bug de systemd trebuie configurate DNS și FallbackDNS

Pregătire checker

Porniţi lucrul la tema 3

student@usohomework:~$ sudo uso start 3

Dacă vom anunţa pe forum că apar modificări la checker trebuie rulată comanda. Mai jos e cum trebuie să arate outputul la succes

student@usohomework:~$ sudo uso update
User logged in as: mbarbulescu
Updatam tema. Te rog asteapta...
Tema updatata.

Conexiune SSH

Conectaţi-vă la maşina virtuală folosind SSH. ESTE RECOMANDAT SĂ LUCRAŢI FOLOSIND SSH LA ACEASTA TEMĂ, veţi avea nevoie de lucru în mai multe terminale!

mihai@wormhole:~$ ssh -l student -p 2222 localhost
 
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
student@localhost's password: 
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.19.0-041900rc8-generic x86_64)
(...)
Last login: Sun Nov 25 21:01:19 2018 from 10.0.2.2
 
student@usohomework:~$ 

Pentru cei la care host-ul pe maşina fizică este Windows puteţi folosi utilitarul Putty. Aveţi aici un tutorial de Putty. Pur şi simplu alegeţi ca IP 127.0.0.1, protocol SSH, port 2222. Open and have fun. Deschideţi atâtea instanţe de Putty câte terminale aveţi nevoie (recomandăm minim 5 - 4 containere, 1 pentru maşina de USO)

Revedeţi şi Task-ul 3 de la Tema 0

Task 01 (11p)

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 toate configurările, în acest caz. Pentru comoditate, folosiți Save the machine state în loc de Power off atunci când închideți mașina virtuală.

ÎNTREBAŢI PE FORUM DACĂ CEVA NU IESE, E CEL MAI IMPORTANT TASK!

Pentru a opri un container (exact cum ati opri un calculator), folositi sudo docker stop xyz unde xyz este containerul.
Pentru a restarta un container (exact cum ati restarta un calculator), folositi sudo docker restart xyz unde xyz este containerul.

Dacă vă e lene să prefixaţi de fiecare dată comanda cu sudo puteţi adăuga utilizatorul student în grupul docker şi nu veţi avea nevoie de sudo. Pentru checker-ul de uso totuşi e nevoie de sudo.

Docker survival guide pentru temă

Pentru a intra cu un shell pe un container de docker xyz, comanda este sudo docker exec -ti xyz bash. Pentru a ne usura treaba, aveti aici un set de aliasuri pentru usurinta de a intra in ele. Aliasurile se dau copy paste in terminalul masinii virtuale, putand fi folosite imediat ulterior. La inchiderea terminalului, aliasurile se pierd si trebuie date din nou.

Veti avea 4 containere: carol, ferdinand, titulescu si cantacuzino.

alias go_carol="sudo docker exec -u student -ti carol bash"
alias go_titulescu="sudo docker exec -u student -ti titulescu bash"
alias go_cantacuzino="sudo docker exec -u student -ti cantacuzino bash"
alias go_ferdinand="sudo docker exec -u student -ti ferdinand bash"
 
alias go_carol_root="sudo docker exec -ti carol bash"
alias go_titulescu_root="sudo docker exec -ti titulescu bash"
alias go_cantacuzino_root="sudo docker exec -ti cantacuzino bash"
alias go_ferdinand_root="sudo docker exec -ti ferdinand bash"

Vom folosi go_xyz pentru a intra in terminalul containerului xyz cu userul student. Vom folosi go_xyz_root pentru a intra in terminalul containerului xyz cu userul root. Revedeti sectiunea din laboratorul 5 dedicata alias-urilor pentru a vi le seta corect pe masina virtuala

Pe toate containerele exista userul student cu parola student. Pe containere nu exista comanda sudo, de aceea folosim 2 aliasuri pentru fiecare container: unul pentru a intra ca student, celalalt pentru a intra ca root. Setup-ul temei este descris în poza de mai jos:

Task 02 (11p)

Masina voastra virtuala este legata intr-o retea cu celelalte containere folosind interfata usobr0.
Nu schimbati adresa IP a masinii voastre virtuale de pe aceasta interfata (192.168.1.1/24).

Containerele se leaga de retea folosind interfata eth0.
Aceasta este interfata ce trebuie modificata la exercitiile ce urmeaza.

  • Configurati carol si ferdinand sa poata comunica (da ping) unul cu celalalt. Ele au deja adrese puse pe interfetele eth0, insa nu pot comunica. Checkerul va verifica daca acestea pot vorbi cu masina virtuala (192.168.1.1).

Task 03 (11p)

  • Configurați în mod static temporar, pe interfetele eth0 ale containerelor urmatoarele adrese:
  • 192.168.1.14/24 pe carol
  • 192.168.1.27/24 pe ferdinand
  • 192.168.1.34/24 pe cantacuzino
  • 192.168.1.41/24 pe titulescu

Task 04 (11p)

In cazul task-urilor 4, 7 si 9, checkerul va da restart la containerele de Docker. Pentru a va asigura ca nu se sterg configuratiile efemere pe care le-ati efectuat pe containerele de Docker la punctele anterioare, recomandam cat mai des sa folositi sudo uso check <numar> unde <numar> este numarul taskului pe care il doriti verificat. Exemplu sudo uso check 3. Recomandam abia la final de tot rularea a sudo uso check fara vreun argument.

  • Faceţi configuraţiile de la Task 03 sa fie permanente (dupa un restart al containerului, configuraţiile încă să existe).

In cadrul acestui task, se vor restarta containerele la rularea sudo uso check 4 sau sudo uso check. Restartarea dureaza aproximativ 15 - 20 de secunde, de aceea verificarea poate sa dureze ceva timp.

Task 05 (11p)

  • Nu ne putem conecta cu SSH pe titulescu de pe celelalte containere sau de pe masina virtuala. Rezolvati problema. Faceti ca problema sa nu revina la un restart al containerului titulescu (nu se puncteaza daca doar ati rezolvat temporar problema).

Task 06 (11p)

  • Pe containerul cantacuzino pare să nu fie conexiune la internet (ping google.com va eşua). Investigaţi care este sursa problemei şi realizaţi configuraţia necesară. Puteţi folosi orice adresă publică o găsiţi pe Internet, nu există restricţii, important e să rezolvaţi problema.

Task 07 (11p)

In cazul task-urilor 4, 7 si 9, checkerul va da restart la containerele de Docker. Pentru a va asigura ca nu se sterg configuratiile efemere pe care le-ati efectuat pe containerele de Docker la punctele anterioare, recomandam cat mai des sa folositi sudo uso check <numar> unde <numar> este numarul taskului pe care il doriti verificat. Exemplu sudo uso check 3. Recomandam abia la final de tot rularea a sudo uso check fara vreun argument.

  • La task-ul 06 probabil că aţi realizat o configuraţie temporară. Plănuim ca după un restart al containerului cantacuzino problema să nu mai revină, e nevoie să realizaţi o configuraţie permanentă, care să fie disponibilă şi după reboot.

Task 08 (11p)

  • Configuraţi SSH astfel incat userul student de pe containerul titulescu sa se poata conecta la userul student de pe containerul cantacuzino fara sa i se ceara parola. (student@titulescustudent@cantacuzino)
  • Configuraţi un server de SAMBA (smb) pe cantacuzino. Creaţi un folder /mnt/trianon pe care sa il distribuiţi prin samba şi în el creaţi fişierele: franta, marea_britanie, sua, italia, japonia, regatul_sarbocroat, cehoslovacia, ungaria. Share-ul se va numi trianon.
  • Montati pe containerul titulescu filesystemul share-uit prin samba in directorul /mnt/smb.

Hint: tipul de filesystem va fi cifs, altfel veţi avea probleme la mount

Știați că? Samba este o metodă de file sharing de pe o mașină Linux către o mașină cu Windows, un samba share se poate monta simplu în Windows cu \\<ip_host>\nume_share

Task 09 (12p)

In cazul task-urilor 4, 7 si 9, checkerul va da restart la containerele de Docker. Pentru a va asigura ca nu se sterg configuratiile efemere pe care le-ati efectuat pe containerele de Docker la punctele anterioare, recomandam cat mai des sa folositi sudo uso check <numar> unde <numar> este numarul taskului pe care il doriti verificat. Exemplu sudo uso check 3. Recomandam abia la final de tot rularea a sudo uso check fara vreun argument.

  • Realizaţi configuraţia de montare a share-ului trianon de pe cantacuzino de la Task 08 în mod permanent pe containerul titulescu (dupa restart-ul containerului să găsim în /mnt/smb gata montat tratatul de la Trianon)

Dupa reboot un asemenea tip de filesystem este dificil de montat automat. Folositi mount -a pentru a simula remontarea tuturor mount-urilor persistente (asta face si checkerul oricum).

Task obligatoriu pentru toate temele la final

Când finalizați tema si asigurați-vă că ați trimis tema cu sudo uso submit.

Este interzis studenților să modifice parametrii de rulare ai mașinii virtuale. Orice tentativă malițioasă de modificare a fișierelor și executabilelor care fac mașina virtuală sa ruleze in parametrii optimi (fișierele si folderele ce nu țin de enunțul temei curente), ne conferă dreptul de a oferi 0 puncte pe temele respectivului student.

uso/teme/tema-3.txt · Last modified: 2019/11/27 21:30 by razvan.serban
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