Batocera: aggiungere supporto a script php (via command line)

Tags: 

Avendo la necessità di eseguire PHP via command line (per poter eseguire degli script php) su una macchina batocera, ci si accorge che il problema è più complesso del previsto: batocera nel suo repository di pacchetti non ha la possibilità di installare PHP, e anche facendo delle ricerche non ho trovato nulla a riguardo.

Dopo qualche prova sono riuscito tramite flatpak (supportato nativamente da batocera) e l'ambiente org.freedesktop.Sdk.

  • Da specificare che la soluzione illustrata sotto NON permette di aggiungere un server web con supporto PHP: anche se potrebbe essere una base anche per quello.
  •  

    Per prima cosa installiamo i flatpak che servono (la prima riga serve per aggiungere il repository standard):

    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    flatpak install flatpak install org.freedesktop.Sdk
    flatpak install org.freedesktop.Sdk.Extension.php83

     

    A questo punto eseguendo questo comando possiamo entrare nell'ambiente SDK:

    flatpak run org.freedesktop.Sdk

     

    Ci accorgeremo subito però di alcuni problemi:

  • l'eseguibile di php non è nel path, e quindi non è eseguibile semplicemente tramite comando "php"
  • eventuali script che cercano php in "/usr/bin" ovviamente non funzionano
  •  

    La guida dell'estensione php per freedesktop.sdk ci spiega che l'eseguibile si trova in "/usr/lib/sdk/php83/bin", e che è possibile eseguire il comando ". /usr/lib/sdk/php83/enable.sh" per modificare l'ambiente in modo da avere il comando "php" eseguibile direttamente.

    Come fare per velocizzare questa operazione e quindi creare un ambiente che, con un solo comando, sia già pronto per l'uso?

     

    Creiamo un file eseguibile, da mettere in una cartella che poi sarà condivisa con l'ambiente SDK, che faccia da "inizializzatore" (tipo un "bash_profile"). Io ad esempio ho creato "/userdata/bin/php-sandbox-init-env" con questo contenuto:

    . /usr/lib/sdk/php83/enable.sh
    alias gamelist.php='php /userdata/bin/gamelist.php'
    echo "Initialized"

    La prima riga abilita l'ambiente PHP, la seconda è un esempio per fare in modo che un mio script PHP (nella stessa cartella "bin") sia eseguibile semplicemente richiamandolo (come detto sopra, la riga "#!/bin/php" che c'è all'inizio degli script non funzionerà). La terza riga è solo per essere sicuri che l'inizializzatore abbia funzionato (quando entriamo scriverà "Initialized").

     

    A questo punto possiamo avviare l'ambiente inizializzato con il comando sottostante (che io ho messo in uno script "php-sandbox.sh" cosi' faccio prima a richiamarlo):

    flatpak run --filesystem=/userdata/bin/ --filesystem=/userdata/roms/ --command=bash org.freedesktop.Sdk --init-file /userdata/bin/php-sandbox-init-env

    Questo comando avvia l'sdk, specificando 2 folder che sono condivisi con l'ambiente esterno: "/userdata/bin/" (che contiene gli script) e "/userdata/roms/" (questo è solo un esempio per permettere all'ambiente sdk/php di accedere alle rom batocera, ma potete mettere quello che vi serve).

    "--command=bash" permette di eseguire la shell all'avvio, mentre "--init-file /userdata/bin/php-sandbox-init-env" dice di eseguire come prima cosa per inizializzare l'ambiente lo script preparato prima.

     

    Tutto fatto, a questo punto avviando dalla shell batocera "php-sandbox.sh" si entra in una shell con il comando "php" disponibile, con gli script che mi servono e con la possibilità di operare nelle roms.

     

    A me non interessa, e quindi non sono andato oltre, ma immagino che eseguendo l'sdk dandogli i permessi di accedere alla rete, e avviando nell'ambiente sdk un server web (penso ce ne siano a disposizione, anche minimali) poi si possa avere un ambiente web php... chissà!

     

    Riferimenti:

    https://wiki.batocera.org/systems:flatpak#using_the_terminal_ssh

    https://docs.flatpak.org/en/latest/sandbox-permissions-reference.html

    https://github.com/flathub/org.freedesktop.Sdk.Extension.php83

    Aggiungi un commento

    Scrivi la risposta in lettere (ad esempio "tre" e non "3")