Table of Contents

HTTP/PHP. Configurări de bază

Introducere

În laboratoarele precedente am investigat un pic sistemul pe care lucrăm și am văzut cum pornește și cum se comportă. Acum vom face niște configurări de bază în acest sistem.

Raspberrypi permite rularea unui server HTTP şi găzduirea unui mic sit web. Vom instala unul dintre servere-le lightweight de web, lighttpd. Vom încerca două tipuri diferite de generare a paginilor dinamice, prin CGI cu scripturi bash și PHP, pe care le vom folosi pentru a afișa informații din sistem pe o pagină web.

Exerciții

0. VNC

Dacă n-ați apucat data trecută, faceți exercițiul cu VNC și cu scriptul de pornire din lab2

1. Mediul de dezvoltare în SI

$ sudo mount -t nfs hostname:folder

2. HTTP

3. CGI

Serverul web poate genera dinamic pagini. Aceasta se realizează prin execuţia de scripturi aflate în directorul cgi­bin din rădăcina serverului, folosindu-se o metodă standard numită Common Gateway Interface. CGI presupune execuţia unui script specificat în cererea HTTP (identificat ca orice alt fişier de pe server), care poate primi parametri dintr-o formă web pe stdin şi prin variabilele de mediu, respectiv poate genera pagini dinamice scriind pe stdout.

1.sh
#!/bin/sh
echo "Content-­type: text/html"
echo ""
echo "<HTML><HEAD><TITLE>Sample CGI Output</TITLE></HEAD>"
echo "<BODY><p>"
echo ­-n "Generated "
date
echo "</p><pre>"
env
echo "</pre>"
echo "</BODY></HTML>"

Metoda CGI permite execuţia oricărui script pe server, putându-se astfel efectua orice operaţie. În mod normal s-ar restricţiona accesul la sistem spre exemplu rulând serverul web sub un utilizator fără privilegii.

Exemplu de cod HTML:

<form method="post" action="/cgi­-bin/on.sh">
<input type="submit" name="on" value="LED On" />
</form>

Chiar dacă scripturile nu generează ieşire, browserul le va interpreta ca downloaduri goale (pentru că a emis o cerere şi aşteaptă un fişier ca răspuns, mecanismul CGI se desfăşoară doar pe server, fără ştirea sau interesul browserului). Trebuie ca ele să trimită un răspuns de tip redirect la pagina iniţială pentru a obţine o interfaţă rezonabilă. Aceasta se face adăugând în scripturi următorul cod:

echo "HTTP/1.0 302 OK"
echo "Location: /"

Pentru a aprinde respectiv stinge LEDul se poate folosi infrastructura sysfs, care presupune crearea de către kernel a unui arbore virtual de fișiere care oferă informații și control asupra unor dispozitive.

Astfel, pentru a controla singurul LED controlabil de pe placă (led-ul ACT - activity), se va folosi interfața din /sys/class/leds/led0/. Fiecare scriere sau citire într-un/dintr-un fișier din acest folder are o anumită semnificație. brightness controlează nivelul de luminozitate al LED-ului (în cazul acestui LED 0 înseamnă închis și orice număr între 1 și 255 înseamnă aprins), trigger desemnează o sursă de informație pe care LED-ul să o urmărească.

Spre exemplu:

cat /sys/class/leds/led0/trigger

afișează toate modurile de auto-trigger ale LED-ului, cu paranteze pătrate ('[' și ']') în jurul modului curent. Modul curent se selectează scriind în fișier textul unuia dintre moduri. În mod default este selectată sursa mmc0 pe LED, ceea ce înseamnă că LED-ul va pulsa la activități de scriere/citire pe cardul SD.

Pentru a aprinde LEDul Act, se poate scrie în brightness, atâta vreme cât este selectat modul none de trigger, altfel valoarea scrisă va fi cu siguranță suprascrisă imediat.

4. PHP

phpinfo.php
<?php
phpinfo();
?>
index.php
<html><body>
<?php
$cpuinfo = `cat /proc/cpuinfo`;
echo $cpuinfo
?>
</body></html>

Punctaje