webif/webif/cgi-bin/opkg.jim

84 lines
1.7 KiB
Tcl
Executable File

#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require pkg.class system.class settings.class
cgi_input
#cgi_dump
set cmd [cgi_get cmd update]
proc putsf {str} {
puts $str
flush stdout
}
proc opkg {cmd {silent 0}} {
if {!$silent} { putsf ">>> opkg $cmd" }
set bcmd "|/mod/webif/lib/bin/opkg $cmd"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
putsf "$line"
}
close $fd
putsf ""
}
# Google Chrome won't render chunks with text/plain!
# https://bugs.chromium.org/p/chromium/issues/detail?id=156023
#httpheader "text/plain"
httpheader "application/octet-stream"
set cmdargs [lassign $cmd cmd]
set netcmds {install update upgrade}
if {$cmd in $netcmds && ![system connectivity]} {
putsf "!! ERROR - No network connectivity to package repository !!"
putsf "Check your Internet connection and DNS service and then try again."
exit
}
if {$cmd eq "dependinfo"} {
putsf ">>> What $cmdargs depends on\n"
opkg "depends $cmdargs" 1
putsf ">>> What depends on $cmdargs\n"
set bcmd "|/mod/webif/lib/bin/opkg whatdepends $cmdargs"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
if {[string match "What depends on root set" $line]} break
}
while {[gets $fd line] >= 0} {
if {[string match "*depends on $cmdargs*" $line]} {
puts "$line"
}
}
close $fd
putsf ""
exit
}
if {$cmd eq "upgrade"} { opkg update }
if {$cmd eq "remove" && [[settings] noautoremove] ne "1"} {
append cmd " --autoremove"
}
opkg "$cmd $cmdargs"
if {$cmd eq "update" || $cmd eq "upgrade"} {
putsf "Updating package meta information"
pkg fetchmeta
putsf "Done."
putsf ""
putsf "Updating diagnostic meta information"
pkg fetchdiagmeta
putsf "Updating MUX database"
pkg fetchmuxdb
}
putsf "Done."