The images finally f-ing work

This commit is contained in:
2024-11-21 19:50:11 +01:00
parent 19d5f55661
commit b673188ed1

175
tp5.md
View File

@@ -129,6 +129,181 @@ ensuite c'est une histoire de faire les bons chmods a la racine pour assigner le
## 2. Hotplug et mdev
Led bleue : `/sys/class/leds/d2/device/leds/d2/`
Led rouge : `/sys/class/leds/d2/device/leds/d3/`
Dans chacuns de ces repertoires on peut trouver un fichier brightness dans lequel on peut mettre 0 ou 1 pour changer l'étât des leds.
Ensuite avec le fichier depuis le git compressé
`xz --decompress disk.img.xz`
Ensuite on peut utiliser dd pour copier le contenu dans la clé usb
`dd if=./disk.img of=/dev/sdb`
la destination est /dev/sdb qui représente la clé usb que on vient d'insèrer.
`mkdir media` à la racine de notre système embarqué
Quand on plugg la clé USB sur notre système embarqué le nom est SDA
donc dans media : `mkdir sda`
`mount /dev/sda /media/sda`
On peut voir que désormais dans le repertoire media/sda on a bien toutes les images :
```
/media/sda # ls
alien.jpg grimsel_pass.jpg rhone_winter.jpg
antelope.jpg ice.jpg sardinia.jpg
appenzell.jpg island.jpg shark.jpg
autumn.jpg jet_d'eau.jpg snail.jpg
azores.jpg jonction.jpg sphere.jpg
bamboo.jpg kauai.jpg stranger.jpg
beach.jpg lagoa_do_fogo.jpg sunrise.jpg
bee.jpg leaves.jpg sunset.jpg
blossoms.jpg lizard.jpg sup.jpg
boat.jpg lone_horse.jpg surfer.jpg
chateau_d'oex.jpg lost+found swan1.jpg
cyclists.jpg magnolia.jpg swan2.jpg
daisy.jpg misty.jpg tentacles.jpg
dendelion.jpg moutain_haze.jpg the_view.jpg
dropplets.jpg paradise.jpg tortoises.jpg
elephant.jpg peak.jpg tulips.jpg
fern.jpg peaks.jpg turtle.jpg
flower.jpg petals.jpg vertigo.jpg
flower_dropplets.jpg rain_forest.jpg vines.jpg
glacier.jpg rhone.jpg
```
Ensuite pour faire ces actions de manière automatique on va crééer le fichier /etc/mdev.conf sur le système embarqué.
```
sd[a-z] 0:0 777 @/etc/usb_automount.sh $MDEV
```
Cette commande permet de dire que pour tout perpherique dans /dev qui commence par sd qui appartiendra a root et au groupe 0 et avec les permissions 777 et ca va lancer le script automount.sh avec comme argument le nom du peripherique.
Pour le script on doit allumer la led rouge
Créer le repertoire /media/[nom du peripherique]
monter le peripherique dans /media/[nom du peripherique]
Installer le contenu de ce repertoire dans le repertoire correspondant dans le site web sous www
Démonter le peripherique
Eteindre la led rouge
```sh
#echo "$1 Mounted !" >> /dev/console
echo 1 > /sys/class/leds/d2/device/leds/d3/brightness
echo "mounting fs" >> /dev/console
mkdir /media/$1
mount /dev/$1 /media/$1
echo "transferring files" >> /dev/console
install /media/$1/* /media/installed/
echo "unmounting" >> /dev/console
umount /media/$1
rm -r /media/$1
echo "done" >> /dev/console
echo 0 > /sys/class/leds/d2/device/leds/d3/brightness
```
Quand on lance ce script on a bien la led rouge qui s'allume pour indiquer que le transfers est en cours et elle s'eteint quand c'est fini.
Et quand on va regarder dans le repertoire installed après coup :
```
/media # ls ./installed/
alien.jpg grimsel_pass.jpg sardinia.jpg
antelope.jpg ice.jpg shark.jpg
appenzell.jpg island.jpg snail.jpg
autumn.jpg jet_d'eau.jpg sphere.jpg
azores.jpg jonction.jpg stranger.jpg
bamboo.jpg kauai.jpg sunrise.jpg
beach.jpg lagoa_do_fogo.jpg sunset.jpg
bee.jpg leaves.jpg sup.jpg
blossoms.jpg lizard.jpg surfer.jpg
boat.jpg lone_horse.jpg swan1.jpg
chateau_d'oex.jpg magnolia.jpg swan2.jpg
cyclists.jpg misty.jpg tentacles.jpg
daisy.jpg moutain_haze.jpg test
dendelion.jpg paradise.jpg the_view.jpg
dropplets.jpg peak.jpg tortoises.jpg
elephant.jpg peaks.jpg tulips.jpg
fern.jpg petals.jpg turtle.jpg
flower.jpg rain_forest.jpg vertigo.jpg
flower_dropplets.jpg rhone.jpg vines.jpg
glacier.jpg rhone_winter.jpg
```
Maintenant il faut que on fasse un script qui créée une page web et qui affiche toutes les images du repertoire pour qu'on puisse les voir depuis le site web.
```sh
#!/bin/sh
echo "Content-type: text/html"
echo "<html>"
echo "<body>"
echo "<h1>Image gallery</h1>"
# Loop through all image files in the current directory
for img in /image_gallery/*.jpg; do
if [ -f "$img" ]; then
echo "<div>"
echo "<img src=\"$img\" style=\"max-width: 300px; height: auto; margin: 10px;\" alt=\"$img\">"
echo "<p>$img</p>"
echo "</div>"
fi
done
echo "<p><a href=\"/\"><img src=\"/gohome.png\" border=\"0\"></a></p>"
echo "</body></html>"
```
On peut ensuite modifier le script original par
```sh
#echo "$1 Mounted !" >> /dev/console
echo 1 > /sys/class/leds/d2/device/leds/d3/brightness
echo "mounting fs" >> /dev/console
mkdir /media/$1
mount /dev/$1 /media/$1
echo "transferring files" >> /dev/console
install /media/$1/* /var/www/cgi-bin/image_gallery/
echo "unmounting" >> /dev/console
umount /media/$1
rm -r /media/$1
echo "done" >> /dev/console
echo 0 > /sys/class/leds/d2/device/leds/d3/brightness
```
Maintenant les images sont directements installées au bon endroit mais va savoir pourquoi ca ne veut pas marcher. Les liens sont generés correctements par le script mais les images ne s'affichent pas c'est l'enfer je ne comprends pas pourquoi.
Ok après avoir passé LITTERALLEMENT 1h30 sur ce problème j'ai compris pourquoi. Dans la config de HTTP le repertoire cgi-config est utilisé comme un repertoire de fichiers executables. Le problème est que du coup les images ne peuvent pas être executées et cela sort un 404.
En déplaceant les images dans le repertoire /var/www/image_gallery/ Plus de problèmes les images peuvent être lues correctement et le site les affiches correctement !
On peut delete toutes les images et dès que on rebranche la clé usb pouf elles sont toutes installées et ca marche nikel ! (Envie de me defenestrer)