PDA

Bekijk de volledige versie : ipkg-Web-Managment cgi-bin Script von NSLU2 auf WL-HDD + ASUS umbauen



WLAN-Fan
29-02-2008, 10:27
The ipkg Web Frontend


Hi,

für die NSLU2 gibt es ein ipkg-Web-Managment Tool.
Es ist für die NSLU2 geschrieben auf denen das NSLU2-Debian läuft.
Also keine Oleg oder OpenWRT oder zu der Gruppe gehörende FirmeWare.

Leider kann ea auf der WL-HDD so nicht per ipkg installiert werden, weil es andere Pfade nutzt. Da es ja nicht für die Oleg-Firmware geschrieben wurde.

Daher möchte ich das von dem NSLU2-Debian auf die Oleg-FirmeWare portieren.

Im Grund müssten nur ein paar Pfade geändert werden, dachte ich.
Aber irgendwo scheint doch noch etwas tiefer der "Wurm" drin zu stecken.

Aber vielleicht sehr ihr ja den springenden Punkt warum es sich nicht o einfach portieren lässt oder das es sich einfach portieren lässt nur bis jetzt das noch nicht gefunden wurde was es ist das geändert werden muß.

Es besteht aus 2 Dateien:
package.cgi

#!/bin/sh
#
# $Id: package.cgi 6240 2007-06-17 22:29:05Z marceln $
#

if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

PROG=${0##*/}
TMPFILE=/tmp/${PROG}.$$

#
# HTML Header
#
cat << EOF
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta name="generator" content="CGI:shell" />
<meta name="version" content="\$Id: package.cgi 6240 2007-06-17 22:29:05Z marceln $" />
<title>ipkg web</title>
<style type="text/css">
h1, h2 {
font-family: Arial, Helvetica, sans-serif;
color: #004;
}

table {
border-top: 1px solid #eee;
border-right: 1px solid #eee;
width: 100%;
}

th, td {
padding: 2px 4px;
border-left: 1px solid #eee;
border-bottom: 1px solid #eee;
}

table a {
background: #ddd;
color: #004;
text-decoration: none;
margin: 1px;
padding: 2px 4px;
font-family: Arial, Helvetica, sans-serif;
font-size: 75%;
}

table a.ins {
background: #dfd;
border-left: 1px solid #cec;
border-bottom: 1px solid #cec;
}

table a.upd {
background: #ddf;
border-left: 1px solid #cce;
border-bottom: 1px solid #cce;
}

table a.del {
background: #fdd;
border-left: 1px solid #ecc;
border-bottom: 1px solid #ecc;
}
</style>
</head>

<body>
<h1>The ipkg web frontend</h1>
<form methode="GET">
<table>
<tr>
<td>Sync packages</td>
<td>
<input type="radio" name="updatedb" value="n" checked>no</input>
<input type="radio" name="updatedb" value="y">yes</input>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<select name="typefilter">
<option selected value="none">NONE</option>
<option value="update">Updates</option>
<option value="installed">Installed</option>
<option value="not">Not installed</option>
</select>
</td>
</tr>
<tr>
<td>Filter</td>
<td><input type="text" name="namefilter"></td>
</tr>
</table>
<input type="submit" name="submit">&nbsp;<input type="reset">
</form>
EOF

NAMEFILTER=.

# QUERY_STRING=task=install&package=atk
IFS='&'
set -- ${QUERY_STRING}
for i in $@
do
case ${i%%=*} in
task)
TASK="${i#*=}"
;;
package)
PACKAGE="${i#*=}"
;;
updatedb)
UPDATEDB="${i#*=}"
;;
typefilter)
TYPEFILTER="${i#*=}"
;;
namefilter)
if [ "${i#*=}" ]
then
NAMEFILTER="${i#*=}"
fi
;;
submit)
SUBMIT="${i#*=}"
;;
*)
echo "<b>ERROR</b>: Unkown option '${i}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
done

if [ ! -f /opt/bin/bash ]
then
echo "<h2>Please install bash</h2>"
echo "<p>I recomend to install bash because this cgi script will"
echo "run more than two times faster with bash</p>"
fi

if [ "${UPDATEDB}" = y ]
then
echo "<h2>Upgrading package list</h2>"
echo '<pre>'
ipkg update </dev/null
echo '</pre>'
fi

if [ "${TASK}" = install ]
then
echo "<h2>Install ${PACKAGE}</h2>"
echo '<pre>'
ipkg -force-defaults install "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${TASK}" = update ]
then
echo "<h2>Update ${PACKAGE}</h2>"
echo '<pre>'
ipkg -force-defaults upgrade "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${TASK}" = delete ]
then
echo "<h2>Delete ${PACKAGE}</h2>"
echo '<pre>'
ipkg -force-defaults remove "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${SUBMIT}" != "" ]
then
echo '<h2>Package list</h2>'
ipkg list_installed >${TMPFILE}
trap "[ -f ${TMPFILE} ] && rm ${TMPFILE}" 0

echo '<table border="1" cellpadding="0" cellspacing="0">'
echo '<tr><th>task</th><th>Package</th><th>I-Ver</th><th>P-Ver</th><th>Comment</th><th>Delete</th></tr>'
ipkg list | grep -- "${NAMEFILTER}" | while read line
do
INSTALLED=""
NAME=${line%% - *}
line=${line#* - }
VERSION=${line%% - *}
VERSION=${VERSION% -}
COMMENT=${line#* - }
if [ "$COMMENT" = "$line" ]
then
COMMENT='&nbsp;'
fi
instline=$(grep "^${NAME} - " ${TMPFILE})
if [ "${instline}" != "" ]
then
INSTALLED=Y
DEL="<a href='$PROG?task=delete&amp;package=${NAME}' class='del'>delete</a>"
instline=${instline#* - }
IVER=${instline%% - *}
if [ "${IVER}" = "${VERSION}" ]
then
TASK='&nbsp;'
else
TASK="<a href='$PROG?task=update&amp;package=${NAME}' class='upd'>update</a>"
fi
else
DEL='&nbsp;'
IVER='&nbsp;'
TASK="<a href='$PROG?task=install&amp;package=${NAME}' class='ins'>install</a>"
fi
SHOW=0
case "${TYPEFILTER}" in
none)
SHOW=1
;;
update)
[ "${INSTALLED}" ] && [ "${IVER}" != "${VERSION}" ] && SHOW=1
;;
installed)
[ "${INSTALLED}" ] && SHOW=1
;;
not)
[ -z "${INSTALLED}" ] && SHOW=1
;;
*)
echo "<b>ERROR</b>: Unkown typefilter '${TYPEFILTER}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
[ "${SHOW}" = 1 ] && echo "<tr><td>${TASK}</td><td>${NAME}</td><td>${IVER}</td><td>${VERSION}</td><td>${COMMENT}</td><td>${DEL}</td></tr>"
done
echo '</table>'
fi

echo '</body>'
echo '</html>'
und sluginfo:

#!/bin/sh
#
# $Id: sluginfo.cgi 7479 2007-12-18 22:29:09Z marceln $
#
if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

showcommand() {
NAME=$1
shift
PROG=$1
shift
if [ -f ${PROG} ]
then
echo "<h3>${NAME}</h3>"
echo "<pre>"
${PROG} "$@"
echo "</pre>"
fi
}

showfile() {
FILE=$1;
BASE=${FILE##*/}
shift
if [ -f "${FILE}" ]
then
showcommand "${BASE}" "/bin/cat" "${FILE}"
fi
}

runprog() {
PROG=$1;
BASE=${PROG##*/}
shift
showcommand "${BASE}" "${PROG}" "$@"
}

cd /tmp
cat << EOF
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="sh" />
<meta name="version" content="\$Id: sluginfo.cgi 7479 2007-12-18 22:29:09Z marceln $" />
<title>sluginfo</title>
</head>
<body>
<h1>Slug info</h1>
<ol>
<li><a href="#sys">System</a></li>
<li><a href="#soft">Installed software</a></li>
<li><a href="#disk">Disks</a></li>
<li><a href="#network">Network</a></li>
<li><a href="#samba">samba</a></li>
</ol>
EOF
echo '<a id="sys" /><h2>System</h2>'
showfile /etc/motd
runprog /opt/bin/uname -a
showfile /proc/cpuinfo
showfile /proc/meminfo
showfile /proc/bus/usb/devices
runprog /sbin/lsmod
runprog /bin/ps
runprog /bin/dmesg
echo '<a id="soft" /><h2>Installed software</h2>'
runprog /usr/bin/ipkg list_installed
echo '<a id="disk" /><h2>Disks</h2>'
showfile /proc/mounts
runprog /bin/df
showcommand "sda" /sbin/fdisk -l /dev/sda
showcommand "sdb" /sbin/fdisk -l /dev/sdb
showcommand "sdc" /sbin/fdisk -l /dev/sdc
showcommand "sdd" /sbin/fdisk -l /dev/sdd
echo '<a id="network" /><h2>Network</h2>'
runprog /sbin/ifconfig
runprog /sbin/route
showfile /etc/resolv.conf
runprog /opt/bin/host ipkg.nslu2-linux.org
runprog /bin/ping -c 2 ipkg.nslu2-linux.org
runprog /usr/bin/wget http://ipkg.nslu2-linux.org
echo '<a id="samba" /><h2>Samba</h2>'
showfile /opt/etc/samba/smb.conf
showfile /opt/etc/samba/user_smb.conf
showfile /var/log/samba/log.smbd
showfile /var/log/samba/log.nmbd
echo '</body>'
echo '</html>'
Wobei sluginfo nur Informationen zum System ausgibt.
Dieses Script habe ich schon an die WL-HDD angepasst, kann sein das ich noch was übersehen.

Das script package.cgi muß noch bearbeitet werden.
Als erstes muß das hier angepasst werden:

if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi
Haben wir auf der WL-HDD eine bash? Oder wie heisst das Ding und wo liegt es, so das der Pfad geändert werden kann?

Würde nach anpassen das auch ohne die Installation von einem zusätzlichen thttpd WebServer mit dem Originalen WebServer funktionieren?


Ein:

ipkg list | grep bash
bash - 3.2.17-1 - A bourne style shell
dash - 0.5.3-1 - dash (Debian Almquist Shell) is a POSIX compliant shell that is much smaller than bash.
which - 2.18-1 - which prints out the full path of the executablesthat bash(1) would execute when the passed program names would have been enter
hat das ergeben.
Brauche ich die bash? Ich habe doch schon root Zugriff über Putty.

Gruß WLAN-Fan.

wengi
04-03-2008, 11:48
Hi,

Das ist halt eine andere shell. Wenn das Webinterface die braucht kannst Du sie installieren.
Welche shell für welchen user genutzt wird steht in der /etc/passwd.
Du kannst die bash shell einfach über ipkg installieren.
Sollte zum laufen der cgi-scripte aber nicht notwendig sein.

wengi

WLAN-Fan
04-03-2008, 12:22
Hi,

Das ist halt eine andere shell.
Quelle: www

/bin/sh ist die Bourne Shell. Sie stammt von AT&T und ist Closed Source. Daher wirst du sie auch nicht bei deiner Linux Distribution finden.

/bin/bash ist die Bourne Again Shell, die freie Variante der Bourne Shell. Die Bash ist 100% sh-kompatibel.

die /bin/bash eigentlich die gebräuchlichste Shell.
Fast alle Skripte werden für sie geschrieben.

Die einzige Shell, die die bash übertrifft, ist die ZSH.

Unterschiede sind z.B., dass die ZSH auch Tippfehler korrigieren kann (muss extra eingeschaltet werden), standardmäßig bei TAB-Vervollständigung die Vorschläge anzeigt (bei der Bash muss man normalerweise 2xTAB drücken, lässt sich aber konfigurieren), die ZSH Completion für Programme wir apt-get liefert und bei rpm -i TAB z.B. nur noch die Dateien mit der Endung .rpm anzeigt.

Die sh ist quasi der Vorgänger der Bash (andersrum ist es korrekter: die Bash ist der Nachfolger der sh, quasi ein verbesserter Klon).

Die sh ist älter als die Bash und ist nicht ganz so mächtig, hat also weniger "Optionen". Da aber früher unter Unix so ziemlich alles mit dieser Shell gemacht wurd, wird sie auch heute noch benutzt und ist sozusagen der kleinste gemeinsame Nenner. Schreibst du unter Linux ein Shellscript für die /bin/sh, so läuft dieses auch unter Solaris oder beispielsweise FreeBSD, denn auch diese haben eine /bin/sh mit genau der selben Syntax. Die Bash hingegen findest du auf solchen Systemen vielleicht nicht, daher schreibt man Scripte auf meist für /bin/sh.

Es gibt noch einen weiteren Grund, warum man für /bin/sh schreiben sollte, der allerdings auf Linux leider NICHT zutrifft (was ich wirklich dumm finde). Unter FBSD ist /bin/sh beispielsweise ein eigenständiges Programm, also nicht wie bei Linux einfach ein zweiter Name für die Bash. Das hat zwei Vorteile:
1) /bin/sh (die eigenständige Shell) startet erheblich schneller als die Bash im sh-Modus. Beim Booten werden gleich ein paar Dutzend Shells gestartet, so daß das eine große Zeitersparnis bringt.
2) Die sh enthält eben wirklich nur die Features der sh, nicht mehr. Die bash hingegen hat die Features der sh und der bash. Das wirkt sich nicht nur auf die Performance aus, sondern auch auf den RAM-Verbrauch. Der kann schonmal 1MB höher bei Linux ausfallen, als bei FBSD mit einer eigenständigen /bin/sh. Das klingt nicht viel, aber wenn auf einem System 20 Scripte laufen, sind das schon 20MB (vor allen Dingen unnötige MB!).

Warum verwenden wir sh und nicht die bash?
Also warum muß ich die mir nachinstallieren?
Ist die sh in dem BusyBox Paket dabei und die bash nicht?
Wenn das so ist weil die sh kleiner als die bash ist?
Wie funktioniert das generel mit dem BusyBox Paket?
Ist das nur eine Zusammenstellung wichtiger Programme (Binarys)?
Oder ist das ein Programm was diese wichtigen Programme enthält?

Kann ich auch mit normal mit "/bin/sh" per Putty einloggen und dann auf die "bash" wechseln?

Wenn das Webinterface die braucht kannst Du sie installieren.
Du kannst die bash shell einfach über ipkg installieren.
Sollte zum laufen der cgi-scripte aber nicht notwendig sein.
Was müsste an dem Script umgeschrieben werden damit das ohne die bash sondern mit der sh funktioneirt?

Welche shell für welchen user genutzt wird steht in der /etc/passwd.
Was passiert wenn ich das auf bash ändere für meinen Nutzter root und die bash noch gar nee installiert habe oder sie wieder deinstalliere?
Habe ich mich dann entgültig ausgesperrt aus meinem System?

Gruß.

WLAN-Fan
04-03-2008, 13:17
Hi,

Installation von bash scheitert an BuildRoot, Warum?

ipkg install bash
Installing bash (3.2.17-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/bash_3.2.17-1_mipsel.ipk
Installing readline (5.2-2) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/readline_5.2-2_mipsel.ipk
An error ocurred, return value: 2.
Collected errors:
Package readline wants to install file /opt/info/dir.old
But that file is already provided by package buildroot
Package readline wants to install file /opt/info/dir
But that file is already provided by package buildroot
So dann habe ich in der Datei "package" alle
"/opt/bin/bash"
durch
"/bin/sh"
ersetzt.

Leider kommt dann im webGui die Fehlermeldung:
packagesh: packagesh: 160: ipkg: not found
und
packagesh: packagesh: 248: ipkg: not found

Was soll das aussagen?

Liegt der Wurm eventuell hier:

ipkg list_installed | grep ipkg
ipkg-opt - 0.99.163-9 - The Itsy Package Manager
ipkg-web - 7-7 - A web frontend for ipkg
So gleich mal das probiert:

ipkg remove ipkg-web
Removing package ipkg-web from /opt/...
Successfully terminated.
hat nix geholfen.

Also mal das probiert:

ipkg -force-defaults upgrade
Upgrading adduser on /opt/ from 1.8.2-1 to 1.9.1-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/adduser_1.9.1-1_mipsel.ipk
Upgrading coreutils on /opt/ from 6.9-6 to 6.9-7...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/coreutils_6.9-7_mipsel.ipk
Upgrading e2fsprogs on /opt/ from 1.40.2-4 to 1.40.3-4...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/e2fsprogs_1.40.3-4_mipsel.ipk
Installing e2fslibs (1.40.3-4) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/e2fslibs_1.40.3-4_mipsel.ipk
Upgrading findutils on /opt/ from 4.2.31-3 to 4.2.32-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/findutils_4.2.32-1_mipsel.ipk
Upgrading hdparm on /opt/ from 6.9-1 to 8.1-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/hdparm_8.1-1_mipsel.ipk
wget: server returned error 404: HTTP/1.1 404 Not Found
Upgrading less on /opt/ from 416-1 to 418-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/less_418-1_mipsel.ipk
Upgrading libuclibc++ on /opt/ from 0.2.2-4 to 0.2.2-6...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/libuclibc++_0.2.2-6_mipsel.ipk
Upgrading libxml2 on /opt/ from 2.6.30-2 to 2.6.31-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/libxml2_2.6.31-1_mipsel.ipk
Upgrading man on /opt/ from 1.5p-4 to 1.6f-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/man_1.6f-1_mipsel.ipk
Upgrading man-pages on /opt/ from 2.33-3 to 2.76-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/man-pages_2.76-1_mipsel.ipk
Upgrading nano on /opt/ from 2.0.6-1 to 2.0.7-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/nano_2.0.7-1_mipsel.ipk
Upgrading nmap on /opt/ from 4.20-1 to 4.53-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/nmap_4.53-1_mipsel.ipk
Upgrading pcre on /opt/ from 7.4-1 to 7.6-2...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/pcre_7.6-2_mipsel.ipk
Configuring adduser
update-alternatives: Linking //opt/bin/su to coreutils-su
Configuring coreutils
update-alternatives: Linking //opt/bin/[ to coreutils-lbracket
update-alternatives: Linking //opt/bin/base64 to coreutils-base64
update-alternatives: Linking //opt/bin/basename to coreutils-basename
update-alternatives: Linking //opt/bin/cat to coreutils-cat

SCHNIP
...
SCHNAP

Configuring libxml2
Configuring man
Configuring man-pages
Configuring nano
Configuring nmap
Configuring pcre
Successfully terminated.
Collected errors:
ipkg_download: ERROR: Command failed with return value 1: `wget -q -P /opt/ipkg-hGXEx7 http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/hdparm_8.1-1_mipsel.ipk'
Failed to download hdparm. Perhaps you need to run 'ipkg update'?

was auch immer der Befehl so richtig macht. Weiß das einer?

So jetzt nehem ich das Script auseinander.
Das gelöscht:
if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

PROG=${0##*/}
TMPFILE=/tmp/${PROG}.$$
Kommt das:

packagesh: packagesh: 242: cannot create : Directory nonexistent packagesh: packagesh: 242: ipkg: not found task Package I-Ver P-Ver Comment Delete
packagesh: packagesh: 242: ipkg: not found
Gruß.

wengi
04-03-2008, 14:13
1) Warum verwenden wir sh und nicht die bash?
2) Also warum muß ich die mir nachinstallieren?
3) Ist die sh in dem BusyBox Paket dabei und die bash nicht?
4) Wenn das so ist weil die sh kleiner als die bash ist?
5) Wie funktioniert das generel mit dem BusyBox Paket?
6) Ist das nur eine Zusammenstellung wichtiger Programme (Binarys)?
7) Oder ist das ein Programm was diese wichtigen Programme enthält?
8) Kann ich auch mit normal mit "/bin/sh" per Putty einloggen und dann auf die "bash" wechseln?

9) Was müsste an dem Script umgeschrieben werden damit das ohne die bash sondern mit der sh funktioneirt?

10) Was passiert wenn ich das auf bash ändere für meinen Nutzter root und die bash noch gar nee installiert habe oder sie wieder deinstalliere?
Habe ich mich dann entgültig ausgesperrt aus meinem System?

So viele Fragen :D
Ich antworte mal nach bestem Wissen und Gewissen.

1) Durch 3) beantwortet
2) Durch 3) beantwortet. Man kann halt nicht alles ins Flash packen.
3) richtig. Mach mal einen "ls -la /bin" und Du wirst sehen, was busybox alles macht.
4) ist das eine Frage??? Die sh ist mit drin. Alles Andere musst Du die Entwickler von busybox fragen.
5) siehe http://de.wikipedia.org/wiki/Busybox
6) Nein. http://de.wikipedia.org/wiki/Busybox
7) Ja. http://de.wikipedia.org/wiki/Busybox
8) Ja. Einfach mal /opt/bin/bash aufrufen. Mit exit gehts zurück in die sh.
9) keine Ahnung...
10) Klassische Aussperrung. Das ist auch der Grund, warum in der passwd so was wie "/bin/nologin" drinsteht, wenn ein User sich nicht anmelden können soll.

wengi

WLAN-Fan
04-03-2008, 14:39
Das Problem ist das ich die bash nicht installeiren kann.
Siehe obige Fehlermeldung.

Daher mein Versuch das mit der sh zu machen.
Aber das klappt auch nee.

WLAN-Fan
04-03-2008, 23:40
Was macht die Zeile:

PROG=${0##*/}
TMPFILE=/tmp/${PROG}.$$ ?

wengi
05-03-2008, 07:40
Hi,
da scheint wohl der Fehler zu sein.
[admin@blechbuechse root]$ PROG=${0##*/}
[admin@blechbuechse root]$ set
HOME='/usr/local/root'
IFS='
'
LOGNAME='admin'
PATH='/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PPID='27998'
PROG='-sh'
PS1='[\u@\h \W]$ '
PS2='> '
PS4='+ '
PWD='/tmp/local/root'
SHELL='/bin/sh'
TERM='xterm'
USER='admin'
_='set' Da kommt also nur '-sh' raus.
Es soll aber ein Dateiname gebaut werden.
Gib doch einfach mal einen festen Dateinamen an.

Also so was wie
TMPFILE=/tmp/temptest.tmp
Das ist zwar ins Blaue geraten aber vielleicht funktionierts.

wengi

WLAN-Fan
05-03-2008, 09:22
Hi,

das mit dem

#TMPFILE=/tmp/harddisk/0/${PROG}.$$
TMPFILE=/tmp/temptest.tmp
hat auch leider nicht geklapt.

es schreibt nix rein in die Datei.

Gruß.

wengi
05-03-2008, 09:41
Hi,

nach der ganzen Diskussion habe ich mir die beiden Datein mal kurz angesehen. :o
Dir ist bewusst, dass es sich um shell-scripts handelt, die html Dateien generieren?
Eigentlich müssen die nur ausgeführt werden. Das Script überprüft ob bash installiert ist, macht aber auch ohne bash weiter...

Ich werds bei gelegenheit mal testen
wengi

thE_29
05-03-2008, 11:00
Mit dem lighthttpd und fast-cgi sowie perl geht das ganze tip top ;)

Nur wenn ich die bash installiere, dann kommt bei der intalled Liste nix raus! Ohne bash ist es langsam, aber er zeigt was an...

WLAN-Fan
05-03-2008, 12:11
Hi,

... Dir ist bewusst, dass es sich um shell-scripts handelt, die html Dateien generieren?
Jo :) .

Also was habe ich gemacht?:
A.) Zuerst mal nach dem Paket gesucht:

ipkg list | grep ipkg
ipkg-opt - 0.99.163-9 - The Itsy Package Manager
ipkg-web - 7-7 - A web frontend for ipkg

B.) Dann versucht das Paket zu installieren mit ipkg:

ipkg install ipkg-web
Installing ipkg-web (7-7) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/ipkg-web_7-7_mipsel.ipk
ipkg: extract_archive: /home/httpd/: Read-only file system
ipkg: extract_archive: /home/httpd/html/: No such file or directory
ipkg: extract_archive: /home/httpd/html/Management/: No such file or directory
ipkg: /home/httpd/html/Management/sluginfo.cgi: No such file or directory
ipkg: /home/httpd/html/Management/package.cgi: No such file or directory
Configuring ipkg-web
Successfully terminated.
Was natürlich nicht geht da die Pfadangaben zu dem WebServer auf der NSLU2-Debian ganz anders sind als die der ASUS-Oleg-FirmeWare mit naträglich installiertem thttpd-WebServer oder LightHTTP.

C.) Nun das Paket im Win geladen mit der URL von oben:
http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/ipkg-web_7-7_mipsel.ipk

D.) Aus ipkg-web_7-7_mipsel.ipk einfach ipkg-web_7-7_mipsel.ipk.rar gemacht durch umbenennen.

E.) Das ganze entpackt bis ich die beiden Dateien hatte:
package.cgi
sluginfo.cgi

F.) Die dann per WinSCP oder per Samba auf meine WL-HDD geschoben,
in den Web-Ordner vom thttpd/2.25b PHP/5.2.5 (http://www.acme.com/software/thttpd/) /opt/share/www/cgi-bin

G.) das .cgi entfernt als Dateiendung

H.) zum testen erstmal alle Rechte den beiden Dateien gegeben

I.) dann in Browser aufgerufen
http://IP.of.your.Router:8080/cgi-bin/sluginfo
und es funktioneirt (siehe auch Bildanhang):

Slug info
System
Installed software
Disks
Network
samba
System
uname
Linux Willi 2.4.20 #75 Fri Apr 6 00:12:23 MSD 2007 mips GNU/Linux
cpuinfo
system type : Broadcom BCM947XX
J.) dann in Browser aufgerufen
http://IP.of.your.Router:8080/cgi-bin/package
und zeigt erstmal die Seite an, fein fein bis hier hin, aber eben nur bis hier hin (siehe Bildanhang).

The ipkg web frontend
Sync packages no yes
Type: NONE Updates Installed Not installed
Filter

Please install bash
I recomend to install bash because this cgi script will run more than two times faster with bash

K.) So jetzt auf Type. Installed gesetz und Anfrage senden
und schon kommt die Fehlermeldung (siehe Bildanhang):

package02: package02: 248: ipkg: not found

L.) nun munter in der "package" mit einem Texteditor drin rum gewurzelt und keine Erfogle erziehl, nur nebenbei ein bischen Shell-Script gelernt.

Das hier habe ich installiert:

ipkg list_installed | grep php
php - 5.2.5-1 - The php scripting language
php-thttpd - 2.25b-5.2.5-1 - php-thttpd is thttpd webserver with php support

ipkg list_installed | grep http
php-thttpd - 2.25b-5.2.5-1 - php-thttpd is thttpd webserver with php support

ipkg list_installed | grep cgi
[admin@Willi cgi-bin]$

So jetzt habe ich mal das gemacht:

ipkg list | grep cgi
haserl - 0.9.20-1 - Haserl is a small program that uses shell or Lua script to create cgi web scripts.
mod-fastcgi - 2.4.2-3 - mod_fastcgi is an Apache module providing language independent, scalable, open extension to CGI.
perl-cgi-application - 3.31-2 - Framework for building reusable web-applications
perl-scgi - 0.6-1 - The Perl SCGI server library.
php-fcgi - 5.2.5-1 - The php scripting language, built as an fcgi module
py-scgi - 1.12-2 - Server-side implementation of the SCGI protocol.
py25-scgi - 1.12-2 - Server-side implementation of the SCGI protocol.
Und dann das installiert:

ipkg install php-fcgi
Installing php-fcgi (5.2.5-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/php-fcgi_5.2.5-1_mipsel.ipk
Configuring php-fcgi
Successfully terminated.
Hat auch nix gebracht. Was muß ich da noch konfigurieren an dem "php-fcgi"?

-----------------------------------------------------------------------------------------

So rufe ich nun das Script ohne Parameter über Putty auf kommt das:

[admin@Willi cgi-bin]$ ./package02
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta name="generator" content="CGI:shell" />
<meta name="version" content="$Id: package.cgi 6240 2007-06-17 22:29:05Z marceln $" />
<title>ipkg web</title>
<style type="text/css">
h1, h2 {
font-family: Arial, Helvetica, sans-serif;
color: #004;
}

table {
border-top: 1px solid #eee;
border-right: 1px solid #eee;
width: 100%;
}

th, td {
padding: 2px 4px;
border-left: 1px solid #eee;
border-bottom: 1px solid #eee;
}

table a {
background: #ddd;
color: #004;
text-decoration: none;
margin: 1px;
padding: 2px 4px;
font-family: Arial, Helvetica, sans-serif;
font-size: 75%;
}

table a.ins {
background: #dfd;
border-left: 1px solid #cec;
border-bottom: 1px solid #cec;
}

table a.upd {
background: #ddf;
border-left: 1px solid #cce;
border-bottom: 1px solid #cce;
}

table a.del {
background: #fdd;
border-left: 1px solid #ecc;
border-bottom: 1px solid #ecc;
}
</style>
</head>

<body>
<h1>The ipkg web frontend</h1>
<form methode="GET">
<table>
<tr>
<td>Sync packages</td>
<td>
<input type="radio" name="updatedb" value="n" checked>no</input>
<input type="radio" name="updatedb" value="y">yes</input>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<select name="typefilter">
<option selected value="none">NONE</option>
<option value="update">Updates</option>
<option value="installed">Installed</option>
<option value="not">Not installed</option>
</select>
</td>
</tr>
<tr>
<td>Filter</td>
<td><input type="text" name="namefilter"></td>
</tr>
</table>
<input type="submit" name="submit">&nbsp;<input type="reset">
</form>
<h2>Please install bash</h2>
<p>I recomend to install bash because this cgi script will
run more than two times faster with bash</p>
</body>
</html>

Hole ich mir jetzt die Paramer von der URL:
http://IP.of.your.Router:8080/package?updatedb=n&typefilter=installed&namefilter=&submit=Anfrage+senden (http://IP.of.your.Router:8080/package?updatedb=n&typefilter=installed&namefilter=&submit=Anfrage+senden)

?updatedb=n&typefilter=installed&namefilter=&submit=Anfrage+senden

und setzte die an den Aufruf hinten drann

./package?updatedb=n&typefilter=installed&namefilter=&submit=Anfrage+senden
kommt das:

[admin@Willi cgi-bin]$ ./package?updatedb=n&typefilter=installed&namefilter=&submit=Anfrage+senden
-sh: ./package02?updatedb=n: not found
[3] + Done ./package02?updatedb=n
[2] + Done ./package02?updatedb=n
[1] + Done(127) ./package02?updatedb=n
Scheinbar ist die Parameterübergabe nicht richtig um das per Konsole aufzurifen.
Wie müsste die erfoglen?










































Eigentlich müssen die nur ausgeführt werden. Das Script überprüft ob bash installiert ist, macht aber auch ohne bash weiter...
Würde das da auch ganz ohne cgi gehen?
Könnte ich das auch über den Origianl-Oleg-ASUS-WebServer aufrufen?
Müsste doch irgendwie zu machen sein oder?
Ich kann ja Befehle / Programme / ShellScripte mit der Original-Oleg-ASUS-WebServer aufrufen unter http://10.0.2.93/Main_AdmStatus_Content.asp.
Das habe ich ja auch für mein SIS-PM-WebGui genutzt.

Ich werds bei gelegenheit mal testen
Jo, das wäre nett wenn du da auch mal mit dran bleiben köntest.
Ist ja nicht so das das Script lebensnotwendig wäre aber, wissen wann und warum nicht es geht oder nicht geht wöllte ich schon.

Gruß.

wengi
06-03-2008, 08:11
Mahlzeit :D

Ich habe mir das mal angesehen und entschlossen, dass das alles Bullshit ist, so wie das im ipkg Paket steht.
Also hab ich mir gedacht ich ziehe die beiden Dateien direkt aus dem svn und ändere sonst nichts. Und es hat auf anhieb funktioniert.

Fünf Zeilen führen zum Erfolg:

cd /opt/share/www/cgi-bin
wget http://svn.nslu2-linux.org/svnroot/optware/trunk/sources/ipkg-web/package.cgi
wget http://svn.nslu2-linux.org/svnroot/optware/trunk/sources/ipkg-web/sluginfo.cgi
chmod u+rwx *
chmod go+rx *
Aber ich muss Euch warnen. Das Teil ist wirklich langsam. Ein List aller Pakete kann ohne weiteres 5 Minuten dauern.
Und: NEIN, ich habe an den cgi Scripts NICHTS geändert!!!

Nochmal zum Vergleich die installierten Pakete:
[admin@blechbuechse cgi-bin]$ ipkg list_installed
atop - 1.21-1 - A better top with history monitoring
bzip2 - 1.0.4-2 - Very high-quality data compression program
coreutils - 6.9-7 - Bunch of heavyweight *nix core utilities
cron - 4.1-7 - Standard vixie cron, with cron.d addition
diffutils - 2.8.1-6 - contains gnu diff, cmp, sdiff and diff3 to display differences between and among text files
e2fslibs - 1.40.3-4 - Ext2 Filesystem Libraries
e2fsprogs - 1.40.3-4 - Ext2 Filesystem Utilities
elinks - 0.11.3-1 - Full-Featured Text WWW Browser
expat - 2.0.1-1 - XML Parser library
findutils - 4.2.32-1 - File finding utilities
fontconfig - 2.5.0-0 - Font configuration library
freetype - 2.1.10-4 - Free truetype library
gconv-modules - 2.2.5-7 - Provides gconv modules missing from the firmware. These are used by glibc's iconv() implementation.
gdbm - 1.8.3-2 - GNU dbm is a set of database routines that use extensible hashing. It works similar to the standard UNIX dbm routines.
glib - 2.9.6-1 - The GLib library of C routines.
gnuplot - 4.2.rc2-5 -
groff - 1.19.2-2 - front-end for the groff document formatting system
hdparm - 8.5-1 - Linux hard drive parameter utility
ipkg-opt - 0.99.163-9 - The Itsy Package Manager
less - 418-1 - Less file browser
libbt - 1.05-5 - a C library implementing the core BitTorrent protocol
libcurl - 7.18.0-1 - Curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FI
libdb - 4.2.52-3 - Berkeley DB Libraries
libevent - 1.3d-1 - libevent to implement an event loop
libgd - 2.0.35-2 - An ANSI C library for the dynamic creation of images
libjpeg - 6b-2 - collection of jpeg tools
libpng - 1.2.25-1 - Portable Network Graphics Libraries
libtiff - 3.8.2-1 - Tag Image File Format Libraries
libuclibc++ - 0.2.2-6 - C++ standard library designed for use in embedded systems
logrotate - 3.7.1-4 - Rotates, compresses, removes and mails system log files.
lynx - 2.8.6-1 - A text browser for the World Wide Web
man - 1.6f-1 - unix manual page reader
man-pages - 2.76-1 - unix manual pages
mc - 4.6.1-3 - Midnight Commander File Manager
mini-sendmail - 1.3.6-1 - small sendmail-compatible mail forwarder
nano - 2.0.7-1 - A pico like editor
ncurses - 5.6-3 - NCurses libraries
ncursesw - 5.6-2 - NCurses libraries with wide char support.
nload - 0.7.1-1 - Nload is a console application which monitors network traffic and bandwidth usage in real time
nmap - 4.53-1 - Nmap is a feature-rich portscanner
openssl - 0.9.7m-3 - Openssl provides the ssl implementation in libraries libcrypto and libssl, and is needed by many other applications and librari
pcre - 7.6-2 - Perl-compatible regular expression library
popt - 1.7-2 - A C library for parsing command line parameters.
procps - 3.2.7-6 - PROCPS System Utilities
readline - 5.2-2 - The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are
samba2 - 2.2.12-1 - Lightweight Samba suite provides file and print services to SMB/CIFS clients.
screen - 4.0.3-2 - A screen manager that supports multiple logins on single terminal
slang - 2.1.3-1 - S-Lang is a multi-platform library designed to allow a developer to create robust multi-platform software.
termcap - 1.3.1-2 - Terminal emulation library
thttpd - 2.25b-5 - thttpd is a lightweight http server
transmission - 1.06+r5187-2 - lightweight BitTorrent client and daemon with WWW interface
uclibc-opt - 0.9.28-13 - micro C library for embedded Linux systems
unrar - 3.6.8-2 - unrar is an application that can decompress files and archives created using the RAR compression scheme
unzip - 5.52-3 - A (de)compression library for the ZIP format
xinetd - 2.3.14-7 - Highly configurable, modular and secure inetd
zlib - 1.2.3-2 - zlib is a library implementing the 'deflate' compression system.
Successfully terminated.
Der Nachteil ist natürlich, dass man die Updates des Webinterface nicht automatisch über ipkg bekommt.

der eigentliche Fehler liegt übrigens im makefile des ipkg-web Pakets.
Ich habe aber nicht den Elan das zu analysieren und auch keine Schreibrechte im SVN.
wengi

thE_29
06-03-2008, 08:14
Jo, bei mir ist es auch elend langsam!
Man muss aber dazu sagen, er guckt auch gleich nach obs ein Update gibt ;)

@wengi: installier mal die bash (sicher dir vorher aber deine /opt/etc/exports weg, weil die Installation überschreibt diese und beim removen wird sie gleich komplett gelöscht) und schau ob das Script bei installed überhaupt was zurückliefert!

wengi
06-03-2008, 08:42
Hi,

ich habe gerade festgestellt, dass es mit dem busybox-http geht und mit dem thttpd NICHT!!!

wengi

WLAN-Fan
06-03-2008, 08:43
Hi,

ok, schön das es Fortschritte gibt und scheinbar auch wieder was neues zu lernen.

Was ist svn genau? Wozu nutze ich das? Und viel wichtiger wie nutze ich das?
Soweit ich das gelesen habe ist es ein System das mehrere Programmierer an einem Projekt arbeiten können gleichzeitig und es nicht zum Datensalat kommt.

Wie bist du an die URL ran gekommen?
Was interessantes kann ich in dem svn noch so finden?

Wozu ein Make-File? Es ist doch gar kein C-Code sondern ganz normales Script.

Wobei mir nicht ganz klar ist wo der wirkliche Unterschied zwischen einem Shel-Script und einem CGI-Script ist.

Ich habe mal deine installierten IPGK-Pakete betrachtet.
Von PHP konnte ich nichts finden.
Nur den thttpd-WebServer. Den habe ich auch, aber mit "eingebautem" PHP.
Muß sagen der ist nicht immer so ganz stabil und muß von einem Watchdog ständig geprüft werden ob er noch aktiv ist. Eine bessere Alternative wäre nicht schlecht.

Es müßte doch auch Möglich sein das Shell oder CGI-Script (was ist es den nun?) von dem Original WebFrontend auszuführen. Ob die Datein nun HTML oder asp heißt ist ja egal. Die asp Dateien von der Original WebInterFace sind ja nur html Dateien die mit der.

In dem thttpd Server ist da bei dir auch cgi dabei?

Oder wo liegen bei dir die beiden Scripte?

Was ich mich immer noch frage ist was mir die Fehlermeldungen genneriert?
Das script scheinbar nicht sondern mehr das IPKG-System vermute ich.
Und die Frage ist warum tut es das?

Gruß.

WLAN-Fan
06-03-2008, 08:45
Hi,
ich habe gerade festgestellt, dass es mit dem busybox-http geht und mit dem thttpd NICHT!!! wengi
BusyBox hat einen http-Server?

Kannst du mal deine Scripte posten und sagen wo du sie abgelget hast und wie du sie aufrufst?

Gruß.

wengi
06-03-2008, 08:53
Also bei benutzung von thttpd kommt bei mir folgendes im browser:
Upgrading package list
package.cgi: package.cgi: 160: ipkg: not found
Package list
package.cgi: package.cgi: 248: ipkg: not found task Package I-Ver P-Ver Comment Delete
package.cgi: package.cgi: 248: ipkg: not found
@WLAN-Fan: Deine Fragen kommen später dran. Das sind immer gleich so viele...

wengi

thE_29
06-03-2008, 09:00
Also ich benutze lighttpd dann noch den mod-fastcgi und perl!
Habe in der config noch cgi enabled und lasse das auf /opt/bin/perl zeigen und fast-cgi ist für php da!

Aber könnte das mal jemand mit der bash testen? Und was ist wirklich der busybox-http?

WLAN-Fan
06-03-2008, 09:01
Hi,

Also bei benutzung von thttpd kommt bei mir folgendes im browser:
Das beruhigt mich das das nicht nur bei mir die Fehlermeldungen sind :rolleyes: .

@WLAN-Fan: Deine Fragen kommen später dran. Das sind immer gleich so viele ... wengi
Ok, ... ist ja immer praktisch komprimiertes Wissen zu erlangen ;) .

Gruß.

wengi
06-03-2008, 09:17
In der busybox ist auch ein http Server integriert.
Das Schweizer Taschenmesser eben.

Wenn man transmission installiert wird automatisch das entsprechen init kopiert:
/opt/etc/init.d/S80busybox_httpd

ich werde wohlauch mal lighttp testen. Wen ich das richtig sehe wird thttpd nicht wirklich weiterentwickelt.

wengi

EDIT: Wenn packages läuft sieht ein ps so aus:
23273 ? S 0:00 /usr/sbin/busybox_httpd -c /opt/etc/httpd.conf -p 8008 -h /opt/share/www
23274 ? S 0:00 \_ /usr/sbin/busybox_httpd -c /opt/etc/httpd.conf -p 8008 -h /opt/share/www
23275 ? S 0:00 \_ /bin/sh /opt/share/www/cgi-bin/package.cgi
23287 ? S 0:02 \_ ipkg list
23288 ? S 0:00 \_ grep -- .
23289 ? R 0:07 \_ /bin/sh /opt/share/www/cgi-bin/package.cgi

thE_29
06-03-2008, 09:29
Wie sieht den dieses S80 File aus?

Nachtrag: Habs schon, hab einfach transmission installiert und wegkopiert! Ist eigentlich der busy http zu empfehlen oder lieber der lighttpd? (wenn man php nicht braucht, bzw. kann der busybox php oder nur cgi-bin?)

wengi
06-03-2008, 09:55
Hi,

bis heute hat mir der busy eigentlich gereicht. Ich werde das auch zu 100% im HowTo so lassen, da alles andere für newbies zu kompliziert ist.

busy hat natürlich einige Nachteile.
z.B. keine symlinks, kein php, nur cgi.

Wenn er schon läuft: bleib bei lighttpd.

Ich habe lighttpd jetzt mit mod_cgi und perl am laufen.
wengi

NACHTRAG: "ipkg install bash" und schon funktioniert es gar nicht mehr...

thE_29
06-03-2008, 10:02
Oho!
Na dann bleibe ich bei lighttpd!

Kannst du mal testen ob das package.cgi mit bash im lighttpd läuft? Weil das geht bei mir nicht. Also es kommt keine Liste! Aber das syslug.cgi gibt alles richtig aus!

WLAN-Fan
06-03-2008, 10:08
Hi,

Wenn man transmission installiert wird automatisch das entsprechen init kopiert: /opt/etc/init.d/S80busybox_httpd
Könntest du das "S80busybox_httpd" hier mal posten damit ich das mal bei mir testen kann bitte.

Gruß.

wengi
06-03-2008, 10:22
mit bash gehts bei mir auch nicht


[admin@blechbuechse init.d]$ cat S80busybox_httpd
#!/bin/sh

PATH=/sbin:/bin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin

# Uncomment path to busybox httpd to enable startup
BUSYBOX_HTTPD=/usr/sbin/busybox_httpd

HTTPD_CONFIG=/opt/etc/httpd.conf
LISTENING_PORT=8008
INDEX=/opt/share/www/index.html

check_config(){
if [ ! -r ${HTTPD_CONFIG} ]; then
echo "Creating default ${HTTPD_CONFIG}"
cat > ${HTTPD_CONFIG} << __EOF__
# httpd.conf has the following format:
#
# A:172.20. # Allow address from 172.20.0.0/16
# A:10.0.0.0/25 # Allow any address from 10.0.0.0-10.0.0.127
# A:10.0.0.0/255.255.255.128 # Allow any address that previous set
# A:127.0.0.1 # Allow local loopback connections
# D:* # Deny from other IP connections
# /cgi-bin:foo:bar # Require user foo, pwd bar on urls starting with /cgi-bin/
# /adm:admin:setup # Require user admin, pwd setup on urls starting with /adm/
# /adm:toor:PaSsWd # or user toor, pwd PaSsWd on urls starting with /adm/
# .au:audio/basic # additional mime type for audio.au files
#
# A/D may be as a/d or allow/deny - first char case insensitive
# Deny IP rules take precedence over allow rules.
#
#
# The Deny/Allow IP logic:
#
# - Default is to allow all. No addresses are denied unless
# denied with a D: rule.
# - Order of Deny/Allow rules is significant
# - Deny rules take precedence over allow rules.
# - If a deny all rule (D:*) is used it acts as a catch-all for unmatched
# addresses.
# - Specification of Allow all (A:*) is a no-op
#
# Example:
# 1. Allow only specified addresses
# A:172.20 # Allow any address that begins with 172.20.
# A:10.10. # Allow any address that begins with 10.10.
# A:127.0.0.1 # Allow local loopback connections
# D:* # Deny from other IP connections
#
# 2. Only deny specified addresses
# 2. Only deny specified addresses
# D:1.2.3. # deny from 1.2.3.0 - 1.2.3.255
# D:2.3.4. # deny from 2.3.4.0 - 2.3.4.255
# A:* # (optional line added for clarity)
#
# If a sub directory contains a config file it is parsed and merged with
# any existing settings as if it was appended to the original configuration.
#
# subdir paths are relative to the containing subdir and thus cannot
# affect the parent rules.
#
# Note that since the sub dir is parsed in the forked thread servicing the
# subdir http request, any merge is discarded when the process exits. As a
# result, the subdir settings only have a lifetime of a single request.
#
A:*
#/cgi-bin:${USER}:password
.au:audio/basic
.asp:text/html
__EOF__
fi
}

start() {
if [ ! -x "${BUSYBOX_HTTPD}" ]; then
echo "busybox httpd ${BUSYBOX_HTTPD} not started."
exit 2
fi
check_config
echo -n "Starting busybox httpd at port ${LISTENING_PORT} ... "
${BUSYBOX_HTTPD} -c ${HTTPD_CONFIG} -p ${LISTENING_PORT} -h /opt/share/www
echo "done"
}

stop() {
echo -n "Shutting down busybox httpd... "
killall busybox_httpd
echo "done"
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 (start|stop|restart)"
exit 1
;;
esac

WLAN-Fan
06-03-2008, 10:32
Hi,

danke. Wo die *.cgi hinlegen für BusyBox http-Server?

Gruß.

wengi
06-03-2008, 10:37
Da w sie immer liegen.

/opt/share/www/cgi-bin/

wengi
06-03-2008, 10:39
@wengi: installier mal die bash (sicher dir vorher aber deine /opt/etc/exports weg, weil die Installation überschreibt diese und beim removen wird sie gleich komplett gelöscht) und schau ob das Script bei installed überhaupt was zurückliefert!

Jetzt hab ich bash natürlich installiert und gelöscht ohne die exports zu sichern.

Die ist aber nur für den nfsd...oder?

wengi

WLAN-Fan
06-03-2008, 10:49
Hi,

könntet ihr das bash-binaray hier mal bitte anhängen? So könnte ich es manuell durch kopieren bei mir einbauen. Vielleicht geht es. Ich mag Portable Programme halt.

Gruß.

wengi
06-03-2008, 11:02
Zu spät. Kann mir mal jemand den Inhalt seiner exports posten?

WLAN-Fan
06-03-2008, 11:37
Zu spät. Kann mir mal jemand den Inhalt seiner exports posten?
wolte ich machen nur habe ich die Datei gar nicht.

wengi
06-03-2008, 11:57
Ist wirklich nur für nfsd.

Danke
wengi

thE_29
06-03-2008, 12:48
OMG!
Ich meinte nicht die exports Datei! Ich verschreib mich da dauernd! Ich meinte die profile Datei!
export Datei sollte er eigentlich nicht angreifen und die liegt ja im /etc/exports ;)

Jetzt wird halt deine profile Datei weg sein! Sry fürs verwechseln!

@WLAN-FAN: sag einfach ipkg install bash dann schreibt er dir die Quelle hin!
Das markierst du und sagst, wget url_bash.ipk und dann tar xzvf bash.ipk und dann tar xzvf data.tar.gz und du hast deine binary ;)

wengi
06-03-2008, 14:13
kannst Du mir mal die profile posten?
Danke

thE_29
06-03-2008, 16:11
Meine sieht so aus


if [ `/opt/bin/whoami` != root ]; then
echo -e "USER IS NOT ALLOWED FOR ANY TERMINAL SESSION!\nCONNECTION CLOSED!"
exit
fi

export TERMINFO=/opt/share/terminfo

alias df='df -H'
alias ls='ls --color=auto -la'
alias traffic='vnstat -u && vnstat'
alias devices='nmap -sP 192.168.0.0/24'
alias unix2dos='recode lat1..ibmpc'
alias dos2unix='recode ibmpc..lat1'
alias mount='/bin/mount'

Hab halt ne Überprüfung, das sich nur root einloggen kann!
Da ich über vsftpd das andere unterbinde!

WLAN-Fan
07-03-2008, 10:50
Meine sieht so aus!Welche Datei?

thE_29
07-03-2008, 11:56
/opt/etc/profile
Und die muss ausführbar (chmod +x) sein, sonst wirds beim Anmelden net ausgeführt!

wengi
10-03-2008, 09:54
Danke :)
wengi

wengi
13-03-2008, 07:43
@WLAN-Fan

Dein Posteingang ist voll.

wengi

FastJack
20-03-2008, 12:46
bei mir funktioniert das Script wunderbar. Auch mit installierem bash.
Dauert zwar etwas bis die Seite aufgebaut ist nach ner Abfrage aber das ist annehmbar.
Hab nur in der Package.cgi noch was abändern müssen. ipkg alleine hat er als Befehl nicht gecheckt, hab dann einfach den kompletten Pfad eingefügt, also /opt/bin/ipkg.
Die Sluginfo.cgi hab ich auch noch angepasst, z.B. IPKG Pfad aktualisiert und Samba etc die Pfade zu der Logdatei richtig gesetzt.
Wirklich ne tolle Sache das Script :)

Gruß FastJack

WLAN-Fan
23-03-2008, 12:19
bei mir funktioniert das Script wunderbar. Auch mit installierem bash.
Dauert zwar etwas bis die Seite aufgebaut ist nach ner Abfrage aber das ist annehmbar.
Hab nur in der Package.cgi noch was abändern müssen. ipkg alleine hat er als Befehl nicht gecheckt, hab dann einfach den kompletten Pfad eingefügt, also /opt/bin/ipkg.
Die Sluginfo.cgi hab ich auch noch angepasst, z.B. IPKG Pfad aktualisiert und Samba etc die Pfade zu der Logdatei richtig gesetzt.
Wirklich ne tolle Sache das Script :)

Gruß FastJack
Auf was für einem Gerät?

Gruß.

FastJack
28-03-2008, 13:45
Hi WLAN-Fan,

sorry gerade erst Deine Frage gesehen. Ich hab ein wl500gP.
also habs erst letztens neu aufgesetzt. Spaßeshalber mal das Script mit und ohne Bash getestet und man merkt schon nen Unterschied beim Seitenaufbau.

Gruß FastJack

wengi
28-03-2008, 15:01
Hab nur in der Package.cgi noch was abändern müssen. ipkg alleine hat er als Befehl nicht gecheckt, hab dann einfach den kompletten Pfad eingefügt, also /opt/bin/ipkg.
Die Sluginfo.cgi hab ich auch noch angepasst, z.B. IPKG Pfad aktualisiert und Samba etc die Pfade zu der Logdatei richtig gesetzt.

Würdest Du uns die korrigierten Versionen mal zu Verfügung stellen?
wengi

FastJack
28-03-2008, 17:51
Würdest Du uns die korrigierten Versionen mal zu Verfügung stellen?
wengi

Klar, hier der Code:

sluginfo.cgi


#!/bin/sh
#
# $Id$
#
if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

showcommand() {
NAME=$1
shift
PROG=$1
shift
if [ -f ${PROG} ]
then
echo "<h3>${NAME}</h3>"
echo "<pre>"
${PROG} "$@"
echo "</pre>"
fi
}

showfile() {
FILE=$1;
BASE=${FILE##*/}
shift
if [ -f "${FILE}" ]
then
showcommand "${BASE}" "/bin/cat" "${FILE}"
fi
}

runprog() {
PROG=$1;
BASE=${PROG##*/}
shift
showcommand "${BASE}" "${PROG}" "$@"
}

cd /tmp
cat << EOF
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="sh" />
<meta name="version" content="\$Id$" />
<title>sluginfo</title>
</head>
<body>
<h1>Slug info</h1>
<ol>
<li><a href="#sys">System</a></li>
<li><a href="#soft">Installed software</a></li>
<li><a href="#disk">Disks</a></li>
<li><a href="#network">Network</a></li>
<li><a href="#samba">samba</a></li>
</ol>
EOF
echo '<a id="sys" /><h2>System</h2>'
showfile /etc/motd
runprog /opt/bin/uname -a
showfile /proc/cpuinfo
showfile /proc/meminfo
showfile /proc/bus/usb/devices
runprog /sbin/lsmod
runprog /bin/ps
runprog /bin/dmesg
echo '<a id="soft" /><h2>Installed software</h2>'
runprog /opt/bin/ipkg list_installed
echo '<a id="disk" /><h2>Disks</h2>'
showfile /proc/mounts
runprog /bin/df
showcommand "sda" /sbin/fdisk -l /dev/sda
showcommand "sdb" /sbin/fdisk -l /dev/sdb
showcommand "sdc" /sbin/fdisk -l /dev/sdc
showcommand "sdd" /sbin/fdisk -l /dev/sdd
echo '<a id="network" /><h2>Network</h2>'
runprog /sbin/ifconfig
runprog /sbin/route
showfile /etc/resolv.conf
runprog /opt/bin/host ipkg.nslu2-linux.org
runprog /bin/ping -c 2 ipkg.nslu2-linux.org
runprog /usr/bin/wget http://ipkg.nslu2-linux.org
echo '<a id="samba" /><h2>Samba</h2>'
showfile /opt/etc/samba/smb.conf
showfile /etc/samba/user_smb.conf
showfile /opt/var/log/samba/log.smbd
showfile /opt/var/log/samba/log.nmbd
echo '</body>'
echo '</html>'


package.cgi


#!/bin/sh
#
# $Id$
#

if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

PROG=${0##*/}
TMPFILE=/tmp/${PROG}.$$

#
# HTML Header
#
cat << EOF
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta name="generator" content="CGI:shell" />
<meta name="version" content="\$Id$" />
<title>ipkg web</title>
<style type="text/css">
h1, h2 {
font-family: Arial, Helvetica, sans-serif;
color: #004;
}

table {
border-top: 1px solid #eee;
border-right: 1px solid #eee;
width: 100%;
}

th, td {
padding: 2px 4px;
border-left: 1px solid #eee;
border-bottom: 1px solid #eee;
}

table a {
background: #ddd;
color: #004;
text-decoration: none;
margin: 1px;
padding: 2px 4px;
font-family: Arial, Helvetica, sans-serif;
font-size: 75%;
}

table a.ins {
background: #dfd;
border-left: 1px solid #cec;
border-bottom: 1px solid #cec;
}

table a.upd {
background: #ddf;
border-left: 1px solid #cce;
border-bottom: 1px solid #cce;
}

table a.del {
background: #fdd;
border-left: 1px solid #ecc;
border-bottom: 1px solid #ecc;
}
</style>
</head>

<body>
<h1>The ipkg web frontend</h1>
<form methode="GET">
<table>
<tr>
<td>Sync packages</td>
<td>
<input type="radio" name="updatedb" value="n" checked>no</input>
<input type="radio" name="updatedb" value="y">yes</input>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<select name="typefilter">
<option selected value="none">NONE</option>
<option value="update">Updates</option>
<option value="installed">Installed</option>
<option value="not">Not installed</option>
</select>
</td>
</tr>
<tr>
<td>Filter</td>
<td><input type="text" name="namefilter"></td>
</tr>
</table>
<input type="submit" name="submit">&nbsp;<input type="reset">
</form>
EOF

NAMEFILTER=.

# QUERY_STRING=task=install&package=atk
IFS='&'
set -- ${QUERY_STRING}
for i in $@
do
case ${i%%=*} in
task)
TASK="${i#*=}"
;;
package)
PACKAGE="${i#*=}"
;;
updatedb)
UPDATEDB="${i#*=}"
;;
typefilter)
TYPEFILTER="${i#*=}"
;;
namefilter)
if [ "${i#*=}" ]
then
NAMEFILTER="${i#*=}"
fi
;;
submit)
SUBMIT="${i#*=}"
;;
*)
echo "<b>ERROR</b>: Unkown option '${i}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
done

if [ ! -f /opt/bin/bash ]
then
echo "<h2>Please install bash</h2>"
echo "<p>I recomend to install bash because this cgi script will"
echo "run more than two times faster with bash</p>"
fi

if [ "${UPDATEDB}" = y ]
then
echo "<h2>Upgrading package list</h2>"
echo '<pre>'
/opt/bin/ipkg update </dev/null
echo '</pre>'
fi

if [ "${TASK}" = install ]
then
echo "<h2>Install ${PACKAGE}</h2>"
echo '<pre>'
/opt/bin/ipkg -force-defaults install "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${TASK}" = update ]
then
echo "<h2>Update ${PACKAGE}</h2>"
echo '<pre>'
/opt/bin/ipkg -force-defaults upgrade "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${TASK}" = delete ]
then
echo "<h2>Delete ${PACKAGE}</h2>"
echo '<pre>'
/opt/bin/ipkg -force-defaults remove "${PACKAGE}" </dev/null
echo '</pre>'
fi

if [ "${SUBMIT}" != "" ]
then
echo '<h2>Package list</h2>'
/opt/bin/ipkg list_installed >${TMPFILE}
trap "[ -f ${TMPFILE} ] && rm ${TMPFILE}" 0

echo '<table border="1" cellpadding="0" cellspacing="0">'
echo '<tr><th>task</th><th>Package</th><th>I-Ver</th><th>P-Ver</th><th>Comment</th><th>Delete</th></tr>'
/opt/bin/ipkg list | grep -- "${NAMEFILTER}" | while read line
do
INSTALLED=""
NAME=${line%% - *}
line=${line#* - }
VERSION=${line%% - *}
VERSION=${VERSION% -}
COMMENT=${line#* - }
if [ "$COMMENT" = "$line" ]
then
COMMENT='&nbsp;'
fi
instline=$(grep "^${NAME} - " ${TMPFILE})
if [ "${instline}" != "" ]
then
INSTALLED=Y
DEL="<a href='$PROG?task=delete&amp;package=${NAME}' class='del'>delete</a>"
instline=${instline#* - }
IVER=${instline%% - *}
if [ "${IVER}" = "${VERSION}" ]
then
TASK='&nbsp;'
else
TASK="<a href='$PROG?task=update&amp;package=${NAME}' class='upd'>update</a>"
fi
else
DEL='&nbsp;'
IVER='&nbsp;'
TASK="<a href='$PROG?task=install&amp;package=${NAME}' class='ins'>install</a>"
fi
SHOW=0
case "${TYPEFILTER}" in
none)
SHOW=1
;;
update)
[ "${INSTALLED}" ] && [ "${IVER}" != "${VERSION}" ] && SHOW=1
;;
installed)
[ "${INSTALLED}" ] && SHOW=1
;;
not)
[ -z "${INSTALLED}" ] && SHOW=1
;;
*)
echo "<b>ERROR</b>: Unkown typefilter '${TYPEFILTER}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
[ "${SHOW}" = 1 ] && echo "<tr><td>${TASK}</td><td>${NAME}</td><td>${IVER}</td><td>${VERSION}</td><td>${COMMENT}</td><td>${DEL}</td></tr>"
done
echo '</table>'
fi

echo '</body>'
echo '</html>'


Gruß FastJack

wengi
29-03-2008, 13:40
Danke :)
wengi

FastJack
29-03-2008, 18:41
immer gerne, wengi.
Sagt mal funtioniert bei euch auch das mit Packeten Installieren und deinstallieren? Hab vorhin gemerkt das er zwar alles toll anzeigt etc. aber wenn ich auf "install" oder "delete" klicke, passiert nichts...
Muss mal genauer schauen ob er nen log oder so ausgibt.

Gruß FastJack

WLAN-Fan
29-03-2008, 21:37
Hi,

hat es jetzt schon einer auf der WL-HDD laufen?

Gruß.

wengi
30-03-2008, 08:45
Ich habe jetzt die Version von FastJack noch nicht getestet.
Aber die ursprüngliche läuft bei mir. Ohne bash und viel Kaffee zwischendurch.

Allerdings funktioniert kein Update mit lighttpd. (Ich glaube mit busybox gings...)
Ich werd das irgendwann nochmal testen

wengi

WLAN-Fan
30-03-2008, 11:52
Hi,

ich würde es gern ohne zusätzlichen http-Server laufen lassen, einfach mit dem BussyBox eigenen http-Server oder mit haserl wenns sein muß.

Gruß.

wengi
31-03-2008, 10:19
Ist das jetzt eine Frage oder eine Aussage?
Probiers doch einfach aus.

busybox-http starten, Webseite ansteuern und irgend ein kleines Paket installieren.

wengi

FastJack
31-03-2008, 13:43
mist zu früh gefreut,
folgenden Error bekomme ich noch...
/opt/share/www/cgi-bin/package.cgi: line 168: 2531 Segmentation fault /opt/bin/ipkg -force-defaults install "${PACKAGE}" < /dev/null
Kann jemand damit was anfangen?

wengi
31-03-2008, 15:51
Das müsste wohl
/opt/bin/ipkg -force-defaults install "${PACKAGE}" > /dev/null
heißen.
wengi

FastJack
01-04-2008, 08:32
Das müsste wohl
/opt/bin/ipkg -force-defaults install "${PACKAGE}" > /dev/null
heißen.
wengi

danke für den Vorschlag, habs mal getestet sagt aber wieder den gleichen Fehler.
Muss mal noch weitersuchen, kann nach wie vor noch keine Pakete installieren oder deinstallieren :(
Klappt es denn bei euch?

Gruß FastJack

wengi
01-04-2008, 08:58
Dann könnten es noch die Anführungszeichen oder die Klammern sein.
Mein sh coding ist da nicht gut genug...
Was passiert denn, wenn Du den Befehl in der shell startest?
wengi

FastJack
01-04-2008, 12:29
also der Befehl selber klappt, wenn ich Ihn direkt in der Console eingebe :(
Deinstallieren geht auch hab ich gemerkt, nur installieren mag er nicht.
Bin im Moment ratlos wo da noch der Fehler liegt.
Naja vielleicht fällt mir noch was ein.

Gruß FastJack

Nolik
12-12-2010, 12:38
ipkg update + css redesign

http://imglink.ru/thumbnails/12-12-10/0f1bd437e11125b3141c0be31fee034a.jpg (http://imglink.ru/show-image.php?id=d3fb387866da52a3d0f804f4c8be9b0c)

http://imglink.ru/thumbnails/12-12-10/ed432092c722a5df4541b0f021d64da1.jpg (http://imglink.ru/show-image.php?id=31dc09fea4a98f1353e4d6db4fb6061d)

button
delete - work
update - not tested
install - work (??? - diffutils not install...)

please community member see code on error.

thanks.

bauerj
13-12-2010, 17:23
Looks really nice!




button
delete - work
update - not tested
install - work (??? - diffutils not install...)

please community member see code on error.

thanks.

What do you mean with that? Is there an error left?

Nolik
13-12-2010, 20:09
Looks really nice! What do you mean with that? Is there an error left?
Thanks =) I think about check code. may be i corupted code then insert design code... sorry for my english ((

i try install diffutils from ipkg web, but process freeze on downloading...
i instal from console its package

install perl from web - all ok, delete from web - diffutils - ok =))

hmm.. now i try update transmition from web console... push update button

web console info

Upgrading transmission on /opt/ from 2.12-1 to 2.13-1...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/transmission_2.13-1_mipsel.ipk

end. page loaded.

transmition not updatet (( update and upgrade from console - work nice.

bauerj
30-12-2010, 10:21
Sagt mal, wie krieg ich das denn mit dem busybox_httpd zum laufen?:confused:

Ich habe jetzt einen Ordner "/opt/www" angelegt und httpd per

busybox_httpd -h . -p 81
gestartet. Soweit richtig? Dann habe ich die Datei von Nolik als "/opt/www/cgi-bin/package.cgi" gespeichert.

Dann müsste ich doch auf
http://my.router:81/cgi-bin/package.cgi
das ganze finden. Der Server meldet aber nur:
404 Not Found
The requested URL was not found

Was hab ich falsch gemacht?

newbiefan
30-12-2010, 18:59
Sagt mal, wie krieg ich das denn mit dem busybox_httpd zum laufen
Was hab ich falsch gemacht?

Naja, da fehlt einiges: :(
siehe: http://www.wl500g.info/showpost.php?p=92347&postcount=5

das Router-Webif kann natürlich auf Port 80 bleiben, der im o.a. Beispiel genannte Aufruf startet den Webserver für Port 8080.

und den Aufruf von cgi: http://de.selfhtml.org/servercgi/cgi/cgihtml.htm#cgi_aufrufe

eventuell auch hier im Forum suchen, bzw. googeln. :p

Have fun
Newbiefan

Edit: hätte ich fast vergessen - natürlich das Verzeichnis und den Script auf 755 setzen, bzw. die Rechte für den betreffenden User setzen.

bauerj
03-01-2011, 16:27
Nein, die Rechte reichen auf jeden Fall aus;)

[bauerj@BAUER cgi-bin]$ ls -l *cgi*
-rwxrwxrwx 1 bauerj root 7761 Dec 15 16:25 package.cgi

Es scheint vielmehr am Inhalt der Datei zu liegen:confused: Wenn ich eine Datei "index.html" erstelle und hereinschreibe:

#!/bin/sh
echo "echo"
Wie man sieht, kenne ich mich mit cgi nicht aus^^

Naja, diese datei kann jetzt problemlos aufgerufen werden. Bis auf den Namen und den Inhalt ist aber alles gleich.


[bauerj@BAUER cgi-bin]$ busybox_httpd -p 81 -h .. -vv -f
[::ffff:192.168.1.52]:2521: url:/cgi-bin/index.html
[::ffff:192.168.1.52]:2522: url:/favicon.ico
[::ffff:192.168.1.52]:2522: response:404
[::ffff:192.168.1.52]:2524: url:/cgi-bin/package.cgi
[::ffff:192.168.1.52]:2524: exec package.cgi: No such file or directory
[::ffff:192.168.1.52]:2524: response:404


Liegt es vielleicht am cgi-script?
Hier mal zum kopieren:

#!/bin/sh
#
# $Id$
#

if [ "${BASH_CHECK}" != 1 -a -f /opt/bin/bash ]
then
BASH_CHECK=1; export BASH_CHECK
/opt/bin/bash $0
exit $$
fi

PROG=${0##*/}
TMPFILE=/tmp/${PROG}.$$

#
# HTML Header
#
cat << EOF
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta name="generator" content="CGI:shell" />
<meta name="version" content="\$Id$" />
<title>ipkg web</title>
<style type="text/css">
body{}
body,td,textarea,input,select{font-family:"Lucida Grande",Verdana,Arial,sans-serif}
table{-moz-box-sizing:border-box;border-collapse:separate;border-spacing:2px;display:table;text-indent:0; margin-bottom:30px}
table,caption{border-left:1px solid #CCC;border-right:1px solid #CCC}
caption,th,td{padding:8px}
caption,tfoot td{text-transform:uppercase}
caption{-moz-border-radius:6px 6px 0 0;-webkit-border-radius:6px 6px 0 0;background-color:#FFFBCC;border-color:#E6DB55;border-style:solid;border-width:1px 1px 0;color:#555;font-size:12px;line-height:19px;padding:7px 0;text-align:center}
thead{display:table-header-group;vertical-align:middle}
tfoot{display:table-footer-group;vertical-align:middle}
tbody{display:table-row-group;vertical-align:middle}
tbody tr:hover{background-color:#EEE;color:#333}
tbody tr:hover a{background-color:#FFF}
tr{display:table-row;vertical-align:inherit}
tr:nth-child(odd){background:#fafafa}
th{display:table-cell;font-weight:700;padding:1px;vertical-align:inherit}
td{vertical-align:middle}
table a{background:#ddd;color:#004;font-size:90%;margin:1px;padding:2px 4px;text-decoration:none}
table a.ins{background:#dfd;border-bottom:1px solid #cec;border-left:1px solid #cec}
table a.upd{background:#FFFBCC;border-bottom:1px solid #E6DB55;border-left:1px solid #E6DB55}
table a.del{background:#fdd;border-bottom:1px solid #ecc;border-left:1px solid #ecc}
.wide{-moz-border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;background-color:#FFF;border-color:#DFDFDF;border-spacing:0;border-style:solid;border-width:1px;clear:both;margin:20px auto 10px;width:96%}
.wide thead tr th,.wide tfoot tr th{background:#DFDFDF;color:#333}
.wide th{line-height:1.3em;padding:7px 7px 8px;text-align:left;text-shadow:0 1px 0 rgba(255, 255, 255, 0.8)}
.wide td,.wide th{border-bottom-style:solid;border-bottom-width:1px;border-color:#DFDFDF;font-size:11px;overflow:hidden}
textarea { overflow: auto; font-size: 9px; width: 99%; color:#222; line-height:16px; }
</style>
</head>

<body>
<form methode="GET">
<table class="wide">
<caption>The ipkg web frontend</caption>
<tfoot><tr><th colspan="2"><input type="submit" name="submit">&nbsp;<input type="reset"></th></tr></tfoot>
<tbody>
<tr>
<td>Sync packages</td>
<td>
<input type="radio" name="updatedb" value="n" checked>no</input>
<input type="radio" name="updatedb" value="y">yes</input>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<select name="typefilter">
<option selected value="none">NONE</option>
<option value="update">Updates</option>
<option value="installed">Installed</option>
<option value="not">Not installed</option>
</select>
</td>
</tr>
<tr>
<td>Filter</td>
<td><input type="text" name="namefilter"></td>
</tr>
</tbody>
</table>
</form>
EOF

NAMEFILTER=.

# QUERY_STRING=task=install&package=atk
IFS='&'
set -- ${QUERY_STRING}
for i in $@
do
case ${i%%=*} in
task)
TASK="${i#*=}"
;;
package)
PACKAGE="${i#*=}"
;;
updatedb)
UPDATEDB="${i#*=}"
;;
typefilter)
TYPEFILTER="${i#*=}"
;;
namefilter)
if [ "${i#*=}" ]
then
NAMEFILTER="${i#*=}"
fi
;;
submit)
SUBMIT="${i#*=}"
;;
*)
echo "<b>ERROR</b>: Unkown option '${i}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
done




if [ ! -f /opt/bin/bash ]
then
echo '<table class="wide"> '
echo '<caption>Warning!</caption>'
echo '<thead><tr><th>Important information &ndash; Please install bash!</th></tr></thead>'
echo '<tbody><tr><td>'
echo "I recomend to install bash because this cgi script will run more than two times faster with bash"
echo '</td></tr></tbody>'
echo '</table>'
fi

if [ "${UPDATEDB}" = y ]
then
echo '<table class="wide"> '
echo '<caption>Upgrading package list</caption>'
echo '<thead><tr><th>Display process</th></tr></thead>'
echo '<tbody><tr><td align="center"><textarea rows="4" name="updateinfo">'
/opt/bin/ipkg update </dev/null
echo '</textarea></td></tr></tbody>'
echo '</table>'
fi

if [ "${TASK}" = install ]
then
echo '<table class="wide"> '
echo '<caption>Install &bull;' ${PACKAGE} '</caption>'
echo '<thead><tr><th>Display process</th></tr></thead>'
echo '<tbody><tr><td align="center"><textarea rows="4" name="installinfo">'
/opt/bin/ipkg -force-defaults install "${PACKAGE}" </dev/null
echo '</textarea></td></tr></tbody>'
echo '</table>'
fi

if [ "${TASK}" = update ]
then
echo '<table class="wide"> '
echo '<caption>Update &bull;' ${PACKAGE} '</caption>'
echo '<thead><tr><th>Display process</th></tr></thead>'
echo '<tbody><tr><td align="center"><textarea rows="4" name="upgradeinfo">'
/opt/bin/ipkg -force-defaults upgrade "${PACKAGE}" </dev/null
echo '</textarea></td></tr></tbody>'
echo '</table>'
fi

if [ "${TASK}" = delete ]
then
echo '<table class="wide">'
echo '<caption>Delete &bull' ${PACKAGE} '</caption>'
echo '<thead><tr><th>Display process</th></tr></thead>'
echo '<tbody><tr><td align="center"><textarea rows="4" name="deleteinfo">'
/opt/bin/ipkg -force-defaults remove "${PACKAGE}" </dev/null
echo '</textarea></td></tr></tbody>'
echo '</table>'
fi

if [ "${SUBMIT}" != "" ]
then
/opt/bin/ipkg list_installed >${TMPFILE}
trap "[ -f ${TMPFILE} ] && rm ${TMPFILE}" 0

echo '<table class="wide"> '
echo '<caption>Package list</caption>'
echo '<thead><tr><th>Task</th><th>Package</th><th>I-Ver</th><th>P-Ver</th><th>Comment</th><th>Action</th></tr></thead>'
echo '<tfoot><tr><th>Task</th><th>Package</th><th>I-Ver</th><th>P-Ver</th><th>Comment</th><th>Action</th></tr></tfoot>'
echo '<tbody>'

/opt/bin/ipkg list | grep -- "${NAMEFILTER}" | while read line
do
INSTALLED=""
NAME=${line%% - *}
line=${line#* - }
VERSION=${line%% - *}
VERSION=${VERSION% -}
COMMENT=${line#* - }
if [ "$COMMENT" = "$line" ]
then
COMMENT='&nbsp;'
fi
instline=$(grep "^${NAME} - " ${TMPFILE})
if [ "${instline}" != "" ]
then
INSTALLED=Y
DEL="<a href='$PROG?task=delete&amp;package=${NAME}' class='del'>delete</a>"
instline=${instline#* - }
IVER=${instline%% - *}
if [ "${IVER}" = "${VERSION}" ]
then
TASK='&nbsp;'
else
TASK="<a href='$PROG?task=update&amp;package=${NAME}' class='upd'>update</a>"
fi
else
DEL='&nbsp;'
IVER='&nbsp;'
TASK="<a href='$PROG?task=install&amp;package=${NAME}' class='ins'>install</a>"
fi
SHOW=0
case "${TYPEFILTER}" in
none)
SHOW=1
;;
update)
[ "${INSTALLED}" ] && [ "${IVER}" != "${VERSION}" ] && SHOW=1
;;
installed)
[ "${INSTALLED}" ] && SHOW=1
;;
not)
[ -z "${INSTALLED}" ] && SHOW=1
;;
*)
echo "<b>ERROR</b>: Unkown typefilter '${TYPEFILTER}'"
echo '</body>'
echo '</html>'
exit 1
;;
esac
[ "${SHOW}" = 1 ] && echo "<tr><td>${TASK}</td><td>${NAME}</td><td>${IVER}</td><td>${VERSION}</td><td>${COMMENT}</td><td>${DEL}</td></tr>"
done
echo '</tbody></table>'
fi

echo '</body>'
echo '</html>'
Läuft das Script denn bei dir?

newbiefan
03-01-2011, 17:08
Ja läuft - ich habe das Script von etwas weiter oben genommen, es läuft sofort ohne jeden Fehler!
Ich habe allerdings einige Tools installiert, z.Bspl. die Bash (siehe alle howtos bash Erweiterung)
Ich lege dir die IPKG-Scriptausgabe meiner installierten Software bei......
Zur Zeit läuft bei mir die Ily FW Version d-r1222

Viel Spass

Edit: Dein Script läuft zwar, bringt aber einiges an Müll-Ausgaben mit.........
Ich habe das Script von hier genommen: http://www.wl500g.info/attachment.php?attachmentid=7421&d=1292158017
Dann habe ich ein Dir angelegt /opt/wwwp und /opt/wwwp/cgi-bin und den File kopiert, Rechte auf 755 gesetzt und
den busybox_httpd genau so wie in meinem Posting (Link) von vorher angegeben, von Hand gestartet.
Dann liegt die Seite bei mir auf http://IP.vom.Asus:8080/cgi-bin/package.cgi - funzt ohne jedes Problem!