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