This is an old revision of the document!


Tema 2

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 SĂ FOLOSIŢI 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.

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 acs.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: 16 Decembrie 2019 ora 23:55
Timp de lucru: 14 zile
Punctaj: 1.0 puncte din nota finală

Actualizări enunț:

  • 6 decembrie - update cerinta task 3

Actualizări checker:
Versiunea curentă: versiunea 1.0.0

  • 3 decembrie - update checker task 1
  • 4 decembrie - update checker task 2
  • 6 decembrie - update checker task 3

Cunoștințe evaluate

se recomandă citirea cu atenție a întregului enunț înainte de rezolvarea task-urilor sau de a pune întrebări pe forum sau colegilor din jur

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

Verificaţi toate indicaţiile din Tema 0 cu privire la maşina virtuală şi configuratiile necesare. Dacă aveţi probleme postați pe forum!

Orice shell script pe care îl creaţi trebuie să înceapă cu shebang-ul #!/bin/bash, adică:

#!/bin/bash
 
#aici puneţi comenzile voastre

FOARTE IMPORTANT: Asiguraţi-vă că aţi dat drept de execuţie pentru toată lumea: chmod a+x /path/to/my/script.sh

In cazul task-urilor, scripturile scrise de voi sunt rerulate la sudo uso check si sudo uso submit. Rularea unui script este echivalenta cu /cale/catre/script.sh In cazul in care scriptul face ceva ce nu ar trebui, aveti grija sa corectati inainte sa dati sudo uso check sau sudo uso submit. De asemenea sudo uso check si sudo uso submit șterg orice fisier ce trebuie creat de scripturile voastre înainte de a rula scriptul (de exemplu la primul task, fisierul users va fi sters de fiecare data pentru a ne asigura ca scriptul îl genereazaă corect)

Pentru validarea tuturor celor 6 task-uri durata totală a checker-ului in cazul in care totul e corect e de aproximativ 1 minut pe un sistem cu 8 GB RAM si CPU i5 cu 2.5GHz

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.

Task obligatoriu pentru toate temele la final

Când finalizați tema si asigurați-vă că ați submis 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.

Cerinţele temei

Task 00 (0p) - Pregătire

Creaţi în /home/student un director numit tema2-scripts și un altul numit tema2-scripts-output. În primul director veți pune toate fişierele necesare rezolvării temei, iar în al doilea veți genera toate fișierele după rularea scripturilor. Porniti lucrul la tema 2

student@usohomework:~$ sudo uso start 2

Verificarea temei

  • verificare toate task-urile
student@usohomework:~$ sudo uso check
  • verificare task X, unde X = (1..5). Tema are 6 task-uri:
student@usohomework:~$ sudo uso check 5

Dacă vom anunţa pe forum că apar modificări la checker trebuie rulată comanda sudo uso update. Mai jos aveți un exemplu de update de chacker.

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

Punctarea temei

Fiecare task are număr de puncte pe care checker-ul îl acordă în mod automat. Din nota maximă pe care o veţi obţine se pot scădea 10 puncte. Asistenţii vor evalua conţinutul scripturilor cerute şi a configuraţiilor de sistem din task-uri.

Task 01 (10 p)

În directorul home/student/tema2-scripts, creați un script numit users.sh ce sortează alfabetic utilizatori din fișierul /etc/passwd care lansează servicii în sistem și afișează numele și serviciile aferente acestora pentru primii 10. Numele utilizatorilor și serviciul aferent vor fi separate prin : (ex. irc:irc). Scriptul va afișa informațiile în fișierul /home/student/tema2-scripts-output/users.out.

Vom considera că toți utilizatorii care lansează servicii în sistem au atribuit shell-ul /usr/sbin/nologin.

Task 02 (20p)

Se apropie sărbătorile așa că trebuie să ne pregătim să dăm mesaje celor dragi în mod inteligent! Drept urmare, în cadrul acestui exercițiu veți crea un script care va genera automat mesajele pentru prieteni și familie.

Pentru început, vom porni de la mesajul din fișierul numit “template.txt” (fișier regăsit la următorul link de github).

Formatul fișierului template.txt este următorul:

<formula_adresare> <nume>,

-continut mesaj-

<formula_incheiere>,
<semnatura>

Scriptul va primi prin redirectare un fisier în care informațiile pentru fiecare contact se găsesc pe o linie diferită sub forma: <NouaFormaDeAdresare>,<NumeleDestinatarului>,<UrareaDeFinal>,<SemnaturaExpeditor>

Noile fișiere create în urma rulării scriptului se vor afla într-un folder numit ChristmasMessages, aflat in /home/student/tema2-scripts-output, iar fiecare fișier din folder va avea următoarea denumire: MesajPentru<NumeleDestinatarului>.

Task 03 (20 p)

Pentru rezolvarea acestui task veți avea nevoie de pachetele genisoimage si tree.

Gigel și-a cumpărat un Raspberry Pi și ar vrea să îl folosească pentru diferite scopuri. Gigel încă nu a auzit de virtualizare așa că s-a gândit să își țină copii ale sistemului de fișiere pe sistemul fizic. Astfel, pentru o sarcină anume, Gigel poate încărca în spațiul de stocare al Raspberry Pi-ului o imagine a sistemului de fișiere pentru a îndeplini o anumită sarcină.

Ajutați-l pe Gigel să creeze fișierul /home/student/tema2-scripts/mount_images.sh care, primind ca argument tipul operațiunii, face următoarele:

  1. Dacă tipul operațiunii este “MOUNT”:
    • Primește încă un paramentru în linia de comandă care reprezintă calea către imaginea ce trebuie montată
    • Montează temporar imaginea și copiază conținutul imagininii în /home/student/extracted/$NUME_IMAGINE
    • Dacă primește și argumentul opțional lung –destination, destinația devine calea ce succedă parametrul
    • Dacă se primește și parametrul lung –directories, copiază doar directoarele din lista care succedă parametrul. Usage: –directories=”dir1 dir2 dir3”
  2. Dacă tipul operațiunii este “CREATE”:
    • Primește doi parametri: calea către sistemul de fișiere ce trebuie copiat și nume pentru imaginea ce vă fi creată

Hint: getopt

Task 04 (20 p)

În fișierul /home/student/tema2-scripts/weather.sh creați un one-liner care primește argumente în linia de comandă. Argumentele sunt de forma <Oras temperatura vreme> (ex. Bucuresti 10 soare). Scriptul va realiza următoarele acțiuni:

  1. (5 p) Va adăuga o intrare de forma <Oras temperatura vreme> în fișierul /home/student/tema2-scripts-output/weather.info.

Ex: La rularea comenzii ./weather.sh Bucuresti 10 soare fișierul weather.info va conține linia Bucuresti 10 soare.

Pentru acest one-liner, nu adăugați linia #!/bin/bash în fișier.

  1. (10 p) Va memora starea actuală a vremii și a temperaturii pentru fiecare oraș în fișierul live.info (dacă un oraș există, informațiile vor fi actualizate, dacă nu există, se va adăuga o intrare nouă). Fiecare linie din fișierul live.info va fi de forma Oras temperatura vreme.

Ex: După rularea comenzilor ./weather.sh Bucuresti 10 soare și ./weather.sh Bucuresti 8 ploaie fișierul live.info va conține linia Bucuresti 8 ploaie.

  1. (5 p) Modificati one-liner-ul într-un script numit /home/student/tema2-scripts/weather_script.sh care realizează aceleași acțiuni, dar poate primi argumentele în orice ordine.

În rezolvarea acestei cerințe, păstrați și fișierul inițial, weather.sh.

Ex: După rularea comenzilor ./weather_script.sh soare 10 Bucuresti și ./weather_script.sh Bucuresti ploaie 8 fișierul weather.info va conține liniile Bucuresti 10 soare și Bucuresti 8 ploaie, iar fișierul live.info va conține linia Bucuresti 8 ploaie.

Task 05 (20 p)

Creați un script în directorul /home/student/tema2-scripts/ numit animals.sh care generează cu ajutorul utilitarului cowsay toate imaginile din fișierul /home/student/tema2-scripts/cows.txt, alături de mesajul primit, sortate lexicografic după mesaj.
Dacă un cowfile nu se găsește la calea specificată în variabila de mediu COWPATH, atunci nu se va genera imagine cu acesta.

Imaginile trebuie sa fie afișate una sub alta în fișierul /home/student/tema2-scripts-output/cows-results.txt.

Fișierul /home/student/tema2-scripts/cows.txt o să fie generat automat de către checker. Acesta este alcătuit din mai multe linii în formatul <cowfile>,<message> unde fiecare linie reprezintă o imagine specificată în variabila de mediu COWPATH și un mesaj pe care să îl afișeze.

Utilitarul cowsay se folosește de variabila de mediu COWPATH pentru căutarea tuturor fișierelor cowfile.

Exemplu fișier cows.txt

Exemplu fișier cows.txt

turtle,”aaaaaaaaa”
dragon,”b”

Exemplu execuție

Exemplu execuție

[student@uso]$ /home/student/tema2-scripts/animals.sh
[student@uso]$ cat /home/student/tema2-scripts-output/cows-results.txt
 _____________
< "aaaaaaaaa" >
 -------------
    \                                  ___-------___
     \                             _-~~             ~~-_
      \                         _-~                    /~-_
             /^\__/^\         /~  \                   /    \
           /|  O|| O|        /      \_______________/        \
          | |___||__|      /       /                \          \
          |          \    /      /                    \          \
          |   (_______) /______/                        \_________ \
          |         / /         \                      /            \
           \         \^\\         \                  /               \     /
             \         ||           \______________/      _-_       //\__//
               \       ||------_-~~-_ ------------- \ --/~   ~\    || __/
                 ~-----||====/~     |==================|       |/~~~~~
                  (_(__/  ./     /                    \_\      \.
                         (_(___/                         \_____)_)
 _____
< "b" >
 -----
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \    
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \ 
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

Programul nu trebuie să afișeze mesaje de eroare.

Hint!

  • man cowsay
  • redirectare

Task 06 (10 p)

Realizați un script în directorul /home/student/tema2-scripts numit backup_task.sh care creează un director cu numele /home/student/tema2-scripts-output/backup-confs și salvează în acesta toate fișierele cu extensia .conf din /etc (în mod recursiv), indiferent de tipul acestora.

Toate erorile vor fi raportate în fișierul /home/student/tema2-scripts-output/backup-confs/errors.txt.

Mai departe, scriptul va realiza modificările necesare, astfel încât toate fișierele din directorul /home/student/tema2-scripts/backup-confs de dimensiune mai mare de 1K să fie redenumite prin adăugarea sufixului _large.

Atenție! Verificarea se va face rulând scriptul drept utilizatorul student.

Task 07 (0p)

Creați un fișier numit readme.txt în folder-ul /home/student/tema2-scripts (același în care ați pus și script-urile). Conținutul acestuia este:

Prima linie: nume,prenume,grupa

Urmatoarele linii: Task0X - descriere succinta (maxim 3 randuri) a modului in care ai rezolvat + erorile raportate de checker si de ce considerați că e correct cum ați făcut.

La final: alte probleme generale pe care le-ați avut la checker independent de un task specific. Nu scrieți prea mult, fiți clari, succinți și punctați strict problema și ce ați încercat.

Ca să nu pierdeți ce ați muncit lăsați toate scripturile în /home/student/tema2-scripts

Task obligatoriu pentru toate temele la final

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

Ca să nu pierdeți ce ați muncit lăsați toate scripturile în /home/student/tema2-scripts. Verificați înainte de submit că ele sunt acolo!

uso/teme/tema-2.1607691916.txt.gz · Last modified: 2020/12/11 15:05 by ioana_maria.culic
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