Modifier et personnaliser sa neufbox 4
Vous n'êtes pas connecté.
Modération goundoulf : renommage du titre. Titre original : "site http supplémentaire"
Dans le cadre du test de ob4full en local, j'essaye d'avoir un autre site local géré aussi par le serveur lighttpd
Ma solution basique est de considérer que tous les appels se feront à partir d'une url de la forme
http://neufbox/xxxx/
et avec des pages htm ou des scripts .cgi contenus dans cgi-bin
physiquement j'ai stocké les pages et les scripts dans
/datas/httpd/xxxx/
Pour cela il faut modifier le fichier
/var/lighttpd.conf
avec le patch suivant
--- a/var/lighttpd.conf
+++ b/var/lighttpd.conf
@@ -3,7 +3,7 @@
server.tag = "Server"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd.log"
-server.modules = ( "mod_fastcgi" )
+server.modules = ( "mod_cgi","mod_fastcgi" )
$HTTP["url"] =~ "^/api/" {
fastcgi.server = ( "/" =>
@@ -19,7 +19,7 @@
)
}
-$HTTP["url"] !~ "^/(css|img|preview|js|api)/|/favicon\.ico$" {
+$HTTP["url"] !~ "^/(css|img|preview|js|api|xxxxx)/|/favicon\.ico$" {
fastcgi.server = ( "/" =>
((
"socket" => "/var/run/fastcgi.socket",
@@ -33,9 +33,19 @@
)
}
+$HTTP["url"] =~ "^/xxxx/" {
+ server.document-root = "/datas/httpd/"
+}
+
+$HTTP["url"] =~ "^/xxxx/cgi-bin/" {
+ server.document-root = "/datas/httpd/"
+ cgi.assign = ( ".cgi" => "" )
+}
+
mimetype.assign = (
".css" => "text/css",
".htc" => "text/x-component",
+ ".htm" => "text/html",
".js" => "application/x-javascript",
".png" => "image/png",
".ico" => "image/x-icon"Patch non fonctionnel à cause de la transformation tab en blanc
Pour avoir des scripts cgi il faut ajouter mod_cgi.so dans /opt/usr/lib et la charger au départ
cf +server.modules = ( "mod_cgi","mod_fastcgi" )
Pour que les url neufbox/xxxx/ ne soient pas traitées de façon standard ajout de la condition
+$HTTP["url"] !~ "^/(css|img|preview|js|api|xxxxx)/|/favicon\.ico$" {
Puis traitement des ces url
+$HTTP["url"] =~ "^/xxxx/" {
+ server.document-root = "/datas/httpd/"
+}
et des scripts associés
+$HTTP["url"] =~ "^/xxxx/cgi-bin/" {
+ server.document-root = "/datas/httpd/"
+ cgi.assign = ( ".cgi" => "" )
+}
et enfin ajout du type htm
+ ".htm" => "text/html",
Pour ceux qui ont tout lu
le code du compteur de visites count.cgi (dans /datas/httpd/xxxx/cgi-bin mod 755)
(ne pas oublier de créer le fichier /datas/httpd/xxxx/cgi-bin/count_file)
#!/bin/sh num=`cat count_file` num=$(expr $num + 1) echo -e $num > count_file echo -e "Content-type : text/html\n\n"; echo -e "<HTML><HEAD><TITLE>Hello world</TITLE></HEAD>\n"; echo -e "<BODY>\n"; echo -e "<DIV ALIGN=right>\n"; echo -e $num Visiteurs"\n"; echo -e "</DIV>\n"; echo -e "</BODY></HTML>\n";
et son utilisation dans datas/httpd/xxxx/index/htm
<html> <head> <Title> Test</Title> </head> <Body> Début de page <p> <iframe SRC="/download/xxxx/count.cgi" frameborder="0" width="130" height="20" marginwidth="0" marginheigth="0" scrolling="no"> </iframe> <p> fin de page </Body> </html>
Pas tout à fait ce que j'escomptais initialement à savoir un serveur régulier sur le port 80 et un supplémentaire sur le port 88
Dernière modification par SGDA (18/10/2010 08:59:15)
Hors ligne
Tu as redirigé le port 88 vers le 80? C'est ce que ça semble faire là.
Hors ligne
ce n'était pas mon but
je souhaitais que sur le port 88 utiliser une autre arborescence
finalement j'ai triché en reprenant l'astuce d'fcgiopenbox4
http://www.neufbox4.org/forum/viewtopic … d=795#p795
rajouté download ici
$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {
et la directive
$HTTP["url"] =~ "^/download/" {
server.document-root = "/datas/httpd/"
}
http://192.168.1.1/download/index.htm
m'affiche bien
Coucou
Dernière modification par SGDA (05/10/2010 22:33:45)
Hors ligne
As tu accès à l'ensemble des règles iptables, ou peux tu avoir la liste des règles courantes avec iptables -nL ?
Edit: L'astuce que tu cites semble aussi permettre l'utilisation de ports différenciés, qui correspond plus à ce que tu semblais vouloir. Tu n'as pas essayé?
Dernière modification par SergeK (05/10/2010 22:54:55)
Hors ligne
je suis sur en local. Ton fichier est conçu pour un site sur le wan
In fine je voulais tester mon compteur de visite compilé ...donc un exécutable C placé dans cgi-bin
Il va falloir que je rajoute mod_cgi.so
rajouté mod_cgi.so dans /opt/usr/lib
et mon dernier lighttpd.conf
server.document-root = "/var/www-docroot/"
server.port = 80
server.tag = "Server"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd.log"
server.modules = ( "mod_fastcgi" )
server.modules += ( "mod_cgi" )
$HTTP["url"] =~ "^/api/" {
fastcgi.server = ( "/" =>
((
"socket" => "/var/run/api.socket",
"check-local" => "disable",
"bin-path" => "/www/fcgiroot/apid",
"min-procs" => 1,
"max-procs" => 1,
"max-load-per-proc" => 4,
"idle-timeout" => 20
))
)
}
$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {
fastcgi.server = ( "/" =>
((
"socket" => "/var/run/fastcgi.socket",
"check-local" => "disable",
"bin-path" => "/www/fcgiroot/fastcgi",
"min-procs" => 1,
"max-procs" => 1,
"max-load-per-proc" => 4,
"idle-timeout" => 20
))
)
}
$HTTP["url"] =~ "^/download/" {
server.document-root = "/datas/httpd/"
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( ".sh" => "" )
}
}
mimetype.assign = (
".css" => "text/css",
".htc" => "text/x-component",
".htm" => "text/html",
".js" => "application/x-javascript",
".png" => "image/png",
".ico" => "image/x-icon"
)la page /download/index/htm
<html> <head> <Title> Test</Title> </head> <Body> coucou <IMG SRC="/cgi-bin/nph-count.sh?width=5&link=/download/index.htm"> </Body> </html>
mis dans /data/httpd/cgi-bin nph-count.sh (mêm si c'est un binaire C)
mais la commande est interceptée par fast_cgi cf /var/log/lighttpd.log
Jan 1 03:17:08 nb4 fastcgi[4806]: in src/ewf_page.c:0084:ewf_page_find - uri '/cgi-bin/nph-count.sh?width=5&link=/download/index.htm' Jan 1 03:17:08 nb4 fastcgi[4806]: in src/ewf_page.c:0161:ewf_page_find - page 'cgi' not found
PS : la NB4 n'est pas à l'heure ![]()
Dernière modification par SGDA (05/10/2010 23:13:47)
Hors ligne
Modération goundoulf : utilisation de la balise code pour une meilleure lisibilité.
Changer l'ordre des déclarations comme mentionné dans le lien de ton post précédent?
En clair
$HTTP["url"] =~ "^/download/"
avant
$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$"
Hors ligne
Pas impossible que c'était Ok car j'ai pas utilisé le bon exécutable .. à suivre
Hors ligne
pas moyen de trouver les bonnes directives pour faire exécuter un script
server.document-root = "/var/www-docroot/"
server.port = 80
server.tag = "Server"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd.log"
server.modules = ( "mod_cgi","mod_fastcgi" )
$HTTP["url"] =~ "^/api/" {
fastcgi.server = ( "/" =>
((
"socket" => "/var/run/api.socket",
"check-local" => "disable",
"bin-path" => "/www/fcgiroot/apid",
"min-procs" => 1,
"max-procs" => 1,
"max-load-per-proc" => 4,
"idle-timeout" => 20
))
)
}
$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {
fastcgi.server = ( "/" =>
((
"socket" => "/var/run/fastcgi.socket",
"check-local" => "disable",
"bin-path" => "/www/fcgiroot/fastcgi",
"min-procs" => 1,
"max-procs" => 1,
"max-load-per-proc" => 4,
"idle-timeout" => 20
))
)
}
$HTTP["url"] =~ "^/download/" {
server.document-root = "/datas/httpd/"
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( "" => "" )
}
}
mimetype.assign = (
".css" => "text/css",
".htc" => "text/x-component",
".htm" => "text/html",
".js" => "application/x-javascript",
".png" => "image/png",
".ico" => "image/x-icon"le script test.cgi
#!/bin/sh echo "content-type : text/html\n\n"; echo "<HTML>"; echo "<HEAD>"; echo "<TITLE>Hello world</TITLE>"; echo "</HEAD>"; echo "<BODY>"; echo "Hello world!"; echo "</BODY>"; echo "</HTML>";
http://192.168.1.1/download/test.cgi ou http://192.168.1.1/download/cgi-bin/test.cgi
me propose seulement de télécharger le fichier (il est dans les répertoires /datas/httpd/download et /datas/httpd/download/cgi-bin ... et exécutable)
Dernière modification par SGDA (08/10/2010 15:38:31)
Hors ligne
C'est ton copier/coller qu'est pas bon ou tu as plusieurs lignes en double dans ton fichier de conf ?
Tu es certain que lighttpd charge le module cgi ?
Chez moi j'ai créé des liens vers les modules d'origine
root@nb4:/opt/usr/lib/lighttpd# ls -lrt -rwxr-xr-x 1 root root 24762 Aug 27 18:34 mod_cgi.so -rwxr-xr-x 1 root root 8436 Aug 27 18:35 mod_alias.so -rwxr-xr-x 1 root root 8035 Aug 27 18:35 mod_access.so -rwxr-xr-x 1 root root 28961 Aug 27 18:36 mod_auth.so lrwxrwxrwx 1 root root 34 Aug 28 18:16 mod_indexfile.so -> /usr/lib/lighttpd/mod_indexfile.so lrwxrwxrwx 1 root root 32 Aug 28 18:16 mod_fastcgi.so -> /usr/lib/lighttpd/mod_fastcgi.so lrwxrwxrwx 1 root root 35 Aug 28 18:17 mod_dirlisting.so -> /usr/lib/lighttpd/mod_dirlisting.so lrwxrwxrwx 1 root root 35 Aug 28 18:17 mod_staticfile.so -> /usr/lib/lighttpd/mod_staticfile.so
et je lance lighttpd avec le paramètre -m pour lui indiquer que les modules sont dans le répertoire /opt/....
lighttpd -f /var/lighttpd.conf -m /opt/usr/lib/lighttpd
Hors ligne
oui mais copier coller corrigé. pour mod_cgi j'ai supposé que c'était Ok puisqu'il ne râle plus depuis que je l'ai copié dans /opt/usr/lib
Hors ligne
l'erreur est ici je pense :
$HTTP["url"] =~ "^/download/" {
server.document-root = "/datas/httpd/"
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( "" => "" )
}
}l'url ne peut pas à la fois matcher "^/download/" ET "^/cgi-bin/"
tu peux essayer :
$HTTP["url"] =~ "^/cgi-bin/" {
server.document-root = "/datas/httpd/"
cgi.assign = ( "" => "" )
}Hors ligne
OK test à suivre
avec
$HTTP["url"] =~ "^/download/" {
server.document-root = "/datas/httpd/"
}
$HTTP["url"] =~ "^/download/cgi-bin/" {
server.document-root = "/datas/httpd/"
cgi.assign = ( ".cgi" => "" )
}http://192.168.1.1/download/cgi-bin/test.cgi
donne
500 - Internal Server Error
http://192.168.1.1/download/cgi-bin/test.sh
donne téléchargement du fichier dans download/cgi-bin
c'est OK en fait il y avait une erreur dans le script
echo "content-type : text/html"; echo ;
et non pas
echo "content-type : text/html\n\n";
c'est mon binaire de WWW-counter qui estKO (segmentation fault)
Dernière modification par SGDA (08/10/2010 21:44:29)
Hors ligne
echo -e pour utiliser \n
Au fait, au lieu d'un binaire, il doit être possible d'utiliser directement le script pour compter les visites, ce serait plus light et souple, je trouve.
Et encore mieux serait de pouvoir rajouter derrière l'adresse du script, le nom de la page à lancer, genre : http://fxmx86.mine.nu/compteur.sh?index.htm
Bon, je dis ca mais j'y connais pas grand chose en dev HTML...
Hors ligne
C'est ce que je pensais faire ...un script ...tant pis pour le nombre en image
Hors ligne
Pas très grave, les images...
Si ca ne marche pas avec lighttpd, tu peux aussi te servir du démon httpd de Busybox ![]()
Tiens, au fait, tout ce que tu fais pourrait servir de base à un mini site d'admin pour ob4-usb !
Hors ligne
il suffit de ressortir ma version de fcgiopenbox4 qui n'était fondée que sur des scripts shell...mais sans la compréhension de silver
Dernière modification par SGDA (09/10/2010 12:52:56)
Hors ligne
Jeté un oeil dans ushare pour tranposer les commandes fam en inotify ...
Je passe la main package inotifytools à dispo si quelqu'un est intéressé
Hors ligne
Trouvé une solution très simple pour le compteur en xbm ....mais c'est plus supporté dans les navigateurs ![]()
la solution image semble nécessaire car je n'ai pa vu comment un script cgi pouvait être utilisé pour générer dynamiquement une partie d'une page html car habituellement le script génère toute la page
Dernière modification par SGDA (10/10/2010 14:33:23)
Hors ligne
Même si tu l'appelle avec un <iframe> ?
Hors ligne
Je suis preneur de la solution
Hors ligne
Par exemple : http://fr.selfhtml.org/html/frames/incorporees.htm
et dans le src du iframe tu mets l'url de ton cgi (qui affiche le compteur en texte)
Ca ne marcherait pas ça ?
Hors ligne
Si voici
index.htm
<html> <head> <Title> Test</Title> </head> <Body> Début de page <p> <iframe SRC="/download/cgi-bin/test.cgi" frameborder="0" width="50" height="20" marginwidth="0" marginheigth="0" scrolling="no" > </iframe> Visiteurs <p> fin de page </Body> </html>
test.cgi
#!/bin/sh num=`cat count_file` num=$(expr $num + 1) echo -e $num > count_file echo -e "Content-type : text/html\n\n"; echo -e "<HTML><HEAD><TITLE>Hello world</TITLE></HEAD>\n"; echo -e "<BODY>\n"; echo -e "<DIV ALIGN=right>\n"; echo -e $num "\n"; echo -e "</DIV>\n"; echo -e "</BODY></HTML>\n";
Hors ligne
SGDA a écrit:
c'est mon binaire de WWW-counter qui est KO (segmentation fault)
oui du coup tu n'as pas le droit à un segfault, sinon erreur 500 direct ![]()
Hors ligne
SGDA a écrit:
la solution image semble nécessaire car je n'ai pa vu comment un script cgi pouvait être utilisé pour générer dynamiquement une partie d'une page html car habituellement le script génère toute la page
si c'est possible, notamment en JavaScript (la "nouvelle" mode Ajax) de mettre à jour le DOM de la page courante
Hors ligne