Tema 2 Linux - Christmas Lights

Motivație

Obiectivul temei 2 de Linux este să compuneți un sistem Linux complet, care va controla o plăcuță fictivă cu luminițe de crăciun. Se vor pune în aplicare cunoștințele dobândite în timpul laboratorului, aplicate pe placa arm_versatile din Qemu. Sistemul va prezenta o interfață web prin care se poate configura această aplicație: pattern-ul ce trebuie afișat, intervalul în care vor funcționa luminițele și frecvența la care vor funcționa luminițele.

Se urmăresc consolidarea următoarelor aptitudini:

  • lucrul cu Yocto - generarea de distribuții pentru sisteme Linux
  • configurarea Yocto și adăugarea de pachete pentru un sistem anume
  • configurări de bază pentru lucrul în rețea
  • configurarea unui server cu o interfață simplă web

În plus, se dorește explorarea unor subiecte care nu au fost tratate în laborator decât la nivel de concept

  • optimizări de spațiu pentru întregul sistem (opțional)
  • logging în sisteme cu spațiu de stocare limitat (opțional)

Componenta principală a temei

  • Aplicația/Script-urile user space care realizează controlul luminițelor
  • Server-ul de HTTP cu interfața de configurare
  • Imaginea de Linux necesară pentru task-urile de mai sus

Pentru acest lucru aveți nevoie de:

  • Un server HTTP (oricare dintre cele prezente în Yocto)
  • Interfață web cu comportament dinamic (PHP, dar puteți folosi CGI simplu, framework-uri Python, Ruby, Bash etc.)
  • Sistem de logare a acțiunilor din interfață

Tema se va dezvolta în Qemu (> v1.0.1), pentru placa arm_versatile. Se va folosi Yocto pentru generarea imaginii, așa cum este prezentat în laboratorul de Yocto. Pentru ușurință, puteți folosi interfața grafică Hob pentru a construi imaginile. Puteți pleca de la imaginea de baza pentru RaspberryPi, basic-rpi-image.

Comunicarea cu LED-urile

LED-urile ce compun luminițele de Crăciun sunt în număr de 12 și se află pe o placă generică arm-versatile. Pe această placă generică există un device driver (fictiv, nu va trebui să îl scrieți) folosit pentru a controla cele 12 LED-uri. Inițial acesta se alfă în /dev/xmas.

Pentru a transmite secveța de LED-uri, se va scrie un șir de 12 caractere format din 0 sau 1 (0 reprezintă un LED stins, 1 un LED aprins) în device driver-ul menționat anterior. Această cale va putea fi modificată din interfața web.

Interfața web

Interfața web trebuie să aibă următoarele funcționalități:

  • Activarea/dezactivarea luminițelor de Crăciun
  • Setarea căii pentru device node-ul luminițelor (default: /dev/xmas)
  • Setarea intervalului în care vor funcționa luminițele (perioada inițială este reprezentată de cele două săptămâni ale vacanței de iarnă)
  • Setarea intervalului orar în care funcționează luminițele în fiecare zi
  • Setarea frecvenței de funcționare. De bază vor fi 3 moduri: lent, normal, rapid. Puteți modifica aceste moduri cum doriți, menționând în README cum funcționează modurile alese de voi (be creative)
  • Setarea căii unde se află salvat pattern-ul curent (default: /home/root/pattern)
  • Setarea căii fișierului de log

Fișierul de log

Fișierul de log trebuie să conțină intrări de forma:

  User-ul cu IP-ul X a modificat pattern-ul
  User-ul cu IP-ul X a modificat orele de funcționare din Y în Z

Serviciile din sistem

  • ssh pe portul 22
  • http pe portul 80
  • avahi/mDNS

Alte trăsături ale sistemului

  • Login folosind user-ul 'root' cu parola 'roota'
  • IP luat automat prin dhcp la pornire
  • Sistemul se va prezenta ca temasi.local (hostname temasi, serviciu Avahi/mDNS)

Trimiterea temei

Tema va fi trimisă separat, metainformații pe moodle și arhiva propriu-zisă pe orice platformă de hosting doriți voi (Dropbox, transfer.ro, Google Drive etc)

Pe Moodle trebuie pus:

  • un fișier care să conțină:
    • link către arhiva .zip cu imaginile
    • hash-ul md5 al arhivei (obținut cu md5sum)

ATENȚIE! Nu vor fi punctate temele care nu au acest hash sau cele al caror hash nu corespunde cu arhiva downloadata de pe platforma de hosting la momentul corectării.

Arhiva (hostată oriunde, accesibilă din ziua deadline-ului, valabil măcar o săptămână) trebuie să conțină:

  • patch ce conține modificarile aduse de voi distribuției de yocto (față de commit-ul b8631416f12b8a904ce3deb036f9d5ce632937b0) și/sau layer-ului meta-raspberrypi (față de commit-ul 6c6f44136f7e1c97bc45be118a48bd9b1fef1072)
  • partiția de ext3 a sistemului (sau de alt tip, dacă aveți motive solide)
  • imaginea kernel-ului (o puteți folosi pe cea din laborator)
  • script de pornire QEMU - launch.sh
  • sursele aplicației web/userspace folosite pentru controlul luminițelor
  • fișier README cu explicații referitoare la funcționarea soluției, opțiuni speciale de configurare/optimizare folosite, etc.

Notare

Din 100p total, aveți:

  • (15p) Configurări de bază
    • User, parolă (root, roota)
    • IP luat la pornirea sistemului prin DHCP
    • Hostname temasi
    • Configurare Avahi/mDNS
    • Sistemul trebuie să răspundă din exterior la ping temasi.local
  • (5p) Configurare HTTP+PHP(or equivalent)
    • Se va puncta rularea phpinfo în lipsa altei pagini, sau echivalentul pentru alt sistem de pagini dinamice
  • (10p) Scrierea datelor corect în fișierele de configurare
  • (50p) Interfața web și sursele aplicației de control al luminițelor
  • (5p) Fișierul de log
  • (10p) Eficiența implementării, atât din punct de vedere spațiu ocupat, cât și timp de procesor ocupat
  • (5p) Readme scris clar și cu toate informațiile necesare

Bonus

  • (5p) Optimizări deosebite de spațiu ale imaginii finale
  • (5p) Se folosește logrotate pentru a ne asigura că nu va rămâne sistemul fără spațiu de stocare
  • (5p) Originalitate (într-un mod decent)
si/lab/2020/teme/2014/tema2linux.txt · Last modified: 2021/08/10 18:32 (external edit)
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