Fornire file CGI Python su un NAS Synology
Non riesco a far sì che i file Python vengano serviti con Apache 2.2 o 2.4 senza un errore 500. Ho installato WebStation, python, perl, php e Apache 2.2 e 2.4 installati.
Posso fornire file statici benissimo con Apache. Quando provo a fornire un cgi di base "ciao mondo", ottengo un errore 500. L'errore è
[cgid: errore] [pid 10076: tid 140542621480832] (2) Nessun file o directory di questo tipo: AH01241: exec di ['/volume2/Development/WebRepo/cgi-bin/test.py' non riuscito.
Ho provato a eseguire sia uno script perl che uno script python. Entrambi vengono eseguiti correttamente da una riga di comando, ma non da Apache (stessi errori di "nessun file di questo tipo ..") Nota anche che questo è un errore 500, non 404, quindi sta vedendo il file. Posso fornire file HTML statici senza problemi.
Lo script Python non potrebbe essere più semplice:
#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";
Tutti i file hanno 755 autorizzazioni. Il percorso per Python è corretto. Non so cosa fare dopo.
Risposte
Python può fornire script CGI pronti all'uso, usando http.server.CGIHTTPRequestHandler.
Sul mio Synology NAS ho installato il pacchetto ufficiale Python3 (versione 3.8.2-0150). Posso accedere al NAS come SSH admine aggiungere uno script:
mkdir -p app/cgi-bin
cat << EOF > app/cgi-bin/hello.py
#!/usr/bin/env python3
print('Content-Type: text/html')
print()
print('<html><body><h2>Hello World!</h2></body></html>')
EOF
Dopodiché posso eseguirlo in questo modo (nota che --directorynon ha effetto per --cgiquindi sono cdlì):
cd app && python3 -m http.server --cgi
Poi sulla mia macchina, posso curl http://nas:8000/cgi-bin/hello.py.
In esecuzione all'avvio
È possibile eseguirlo automaticamente all'avvio tramite l'utilità di pianificazione.
Pannello di controllo → Utilità di pianificazione → Crea → Attività attivata → Script definito dall'utente . Compila questi nella scheda Generale :
- Attività: Python CGI
- Utente: admin
- Abilitato: [x]
E script definito dall'utente nella scheda Impostazioni attività :
cd /var/services/homes/admin/app
python3 -m http.server --cgi
Quindi puoi eseguirlo manualmente. Dovrebbe essere eseguito anche al riavvio.
Autorizzazioni
Se si desidera eseguire l'attività come root, assicurarsi che i permessi dei file siano corretti dal rootpunto di vista di. Nel mio caso c'è discrepanza per qualche motivo.
$ ls -l app/cgi-bin/hello.py -rwxrwxrwx+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py $ sudo ls -l app/cgi-bin/hello.py
Password:
-rwx--x--x+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py