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

  • Construiți o pereche de chei RSA pentru autentificare folosind ssh-keygen. Copiați cheia publică nouă folosind ssh-copy-id. Folosiți man pentru utilizarea acestor comenzi
  • Instalați NFS pe Raspberrypi (aveți nevoie de pachetele nfs-kernel-server și rpcbind)
  • Editați fișierul /etc/exports pentru a conține o intrare pentru folder-ul /home/pi. Restartați server-ul (Hint:/etc/init.d/)
  • Montați partiția nouă folosind comanda mount. Comanda o să fie de forma:
$ sudo mount -t nfs hostname:folder

2. HTTP

  • Instalați lighttpd
  • Navigați pe pagina default
  • Urmăriți instrucțiunile pentru a crea o pagină nouă cu conținut al vostru și pentru a activa scripturile cgi
  • Folosiți netstat -lntp ca să aflați cum se cheamă procesul cu server-ul web
  • Folosiți ps -elf ca să aflați cum se cheamă user-ul sub care rulează server-ul web
  • Puneți scriptul 1.sh din laborator într-un folder cgi-bin din root-ul server-ului web și navigați către el. Ce informații obțineți?

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.

  • mergeți în directorul cgi­-bin în /www şi creeați un fişier 1.sh în acesta. *Faceţi-l executabil* şi scrieţi în el următoarele linii (de ex. copy-paste în terminal în vi insert-mode):
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>"
  • accesaţi http://<ip>/cgi­-bin/1.sh şi observaţi rezultatul. Scriptul executat trimite ieşirea pe stdout, aceasta fiind trimisă browserului. În cazul de faţă sunt afişate variabilele de mediu.

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.

  • creaţi un fişier on.sh, faceţi-l executabil şi aprindeţi din el un LED de pe placă. Creaţi un fişier similar off.sh pentru stingerea respectivului LED.
  • creaţi în index.html (în rădăcina ierarhiei web) două forme cu metoda POST, conţinând un singur buton submit fiecare, pentru a aprinde respectiv stinge LEDul din interfaţa web.

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

  • Instalați php, varianta CGI (cu binar) (Hint: apt-cache search)
  • Activați php așa cum ați activat cgi, dar uitați-vă în folder-ul /etc/lighttpd/conf-available după numele modulului
  • Testați instalarea de PHP cu
phpinfo.php
<?php
phpinfo();
?>
  • Pentru un Hello World cu scripting în PHP, rulați scriptul:
index.php
<html><body>
<?php
$cpuinfo = `cat /proc/cpuinfo`;
echo $cpuinfo
?>
</body></html>
  • Adăugați informații despre parametrii pe care îi primește kernel-ul la pornire
  • Adăugați informații pe pagină despre device-ul pe care este montat '/'

Punctaje

  • (2p) Mediul de dezvoltare
  • (2p) HTTP
  • (3p) CGI
  • (3p) PHP
si/lab/2020/hidden/lab3.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