@ -6,24 +6,54 @@ PROC_FIVEWAY="/proc/fiveway"
[ -e $PROC_KEYPAD ] && echo unlock > $PROC_KEYPAD
[ -e $PROC_KEYPAD ] && echo unlock > $PROC_KEYPAD
[ -e $PROC_FIVEWAY ] && echo unlock > $PROC_FIVEWAY
[ -e $PROC_FIVEWAY ] && echo unlock > $PROC_FIVEWAY
# Check which type of init system we're running on
if [ -d /etc/upstart ] ; then
INIT_TYPE = "upstart"
# We'll need that for logging
[ -f /etc/upstart/functions ] && source /etc/upstart/functions
else
INIT_TYPE = "sysv"
# We'll need that for logging
[ -f /etc/rc.d/functions ] && source /etc/rc.d/functions
fi
# Handle logging...
logmsg( )
{
# Use the right tools for the platform
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
msg " koreader: ${ 1 } " "I"
elif [ " ${ INIT_TYPE } " = = "upstart" ] ; then
f_log I koreader wrapper "" " ${ 1 } "
fi
# And throw that on stdout too, for the DIY crowd ;)
echo " ${ 1 } "
}
# Keep track of what we do with pillow...
PILLOW_DISABLED = "no"
# Detect if we were started by KUAL by checking our nice value...
if [ " $( nice) " = = "5" ] ; then
# Yield a bit to let stuff stop properly...
logmsg "Hush now . . ."
# NOTE: This may or may not be terribly useful...
sleep 1
# Kindlet threads spawn with a nice value of 5, we aim for the same -2 as the KF8 reader
logmsg "Be nice!"
renice -n -7 $$
fi
# By default, don't stop the framework.
# By default, don't stop the framework.
if [ " $1 " = = "--framework_stop" ] ; then
if [ " $1 " = = "--framework_stop" ] ; then
shift 1
shift 1
STOP_FRAMEWORK = "yes"
STOP_FRAMEWORK = "yes"
# Yield a bit to let stuff stop properly...
echo "Stopping framework . . ."
sleep 2
else
else
STOP_FRAMEWORK = "no"
STOP_FRAMEWORK = "no"
fi
fi
# Check which type of init system we're using
if [ -d /etc/upstart ] ; then
INIT_TYPE = "upstart"
else
INIT_TYPE = "sysv"
fi
# we're always starting from our working directory
# we're always starting from our working directory
cd /mnt/us/koreader
cd /mnt/us/koreader
@ -34,18 +64,21 @@ export TESSDATA_PREFIX="data"
export STARDICT_DATA_DIR = "data/dict"
export STARDICT_DATA_DIR = "data/dict"
# accept input ports for zsync plugin
# accept input ports for zsync plugin
logmsg "Setting up IPTables rules . . ."
iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
# bind-mount system fonts
# bind-mount system fonts
if ! grep /mnt/us/koreader/fonts/host /proc/mounts ; then
if ! grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Mounting system fonts . . ."
mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host
mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host
fi
fi
# bind-mount altfonts
# bind-mount altfonts
if [ -d /mnt/us/fonts ] ; then
if [ -d /mnt/us/fonts ] ; then
mkdir -p /mnt/us/koreader/fonts/altfonts
mkdir -p /mnt/us/koreader/fonts/altfonts
if ! grep /mnt/us/koreader/fonts/altfonts /proc/mounts ; then
if ! grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Mounting altfonts . . ."
mount -o bind /mnt/us/fonts /mnt/us/koreader/fonts/altfonts
mount -o bind /mnt/us/fonts /mnt/us/koreader/fonts/altfonts
fi
fi
fi
fi
@ -53,13 +86,15 @@ fi
# bind-mount linkfonts
# bind-mount linkfonts
if [ -d /mnt/us/linkfonts/fonts ] ; then
if [ -d /mnt/us/linkfonts/fonts ] ; then
mkdir -p /mnt/us/koreader/fonts/linkfonts
mkdir -p /mnt/us/koreader/fonts/linkfonts
if ! grep /mnt/us/koreader/fonts/linkfonts /proc/mounts ; then
if ! grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Mounting linkfonts . . ."
mount -o bind /mnt/us/linkfonts/fonts /mnt/us/koreader/fonts/linkfonts
mount -o bind /mnt/us/linkfonts/fonts /mnt/us/koreader/fonts/linkfonts
fi
fi
fi
fi
# check if we are supposed to shut down the Amazon framework
# check if we are supposed to shut down the Amazon framework
if [ " ${ STOP_FRAMEWORK } " = = "yes" ] ; then
if [ " ${ STOP_FRAMEWORK } " = = "yes" ] ; then
logmsg "Stopping the framework . . ."
# Upstart or SysV?
# Upstart or SysV?
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
/etc/init.d/framework stop
/etc/init.d/framework stop
@ -67,51 +102,69 @@ if [ "${STOP_FRAMEWORK}" == "yes" ]; then
# The framework job sends a SIGTERM on stop, trap it so we don't get killed if we were launched by KUAL
# The framework job sends a SIGTERM on stop, trap it so we don't get killed if we were launched by KUAL
trap "" SIGTERM
trap "" SIGTERM
stop lab126_gui
stop lab126_gui
# Let things lie a bit so that we don't hit the black screen of no X ;).
sleep 2
# And remove the trap like a ninja now!
trap - SIGTERM
fi
fi
fi
fi
# check if kpvbooklet was launched for more than once, if not we will disable pillow
# check if kpvbooklet was launched for more than once, if not we will disable pillow
# there's no pillow if we stopped the framework, and it's only there on systems with upstart anyway
# there's no pillow if we stopped the framework, and it's only there on systems with upstart anyway
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "upstart" ] ; then
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "upstart" ] ; then
count = ` lipc-get-prop -eiq com.github.koreader.kpvbooklet.timer count`
count = $( lipc-get-prop -eiq com.github.koreader.kpvbooklet.timer count)
if [ " $count " = = "" -o " $count " = = "0" ] ; then
if [ " $count " = = "" -o " $count " = = "0" ] ; then
logmsg "Disabling pillow . . ."
lipc-set-prop com.lab126.pillow disableEnablePillow disable
lipc-set-prop com.lab126.pillow disableEnablePillow disable
PILLOW_DISABLED = "yes"
# NOTE: This may or may not be terribly useful...
sleep 1
fi
fi
fi
fi
# stop cvm (sysv & framework up only)
# stop cvm (sysv & framework up only)
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "sysv" ] ; then
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "sysv" ] ; then
logmsg "Stopping cvm . . ."
killall -stop cvm
killall -stop cvm
fi
fi
# finally call reader
# finally call reader
logmsg "Starting KOReader . . ."
./reader.lua " $@ " 2> crash.log
./reader.lua " $@ " 2> crash.log
# clean up forked process in case the reader crashed
# clean up our own process tree in case the reader crashed (if needed, to avoid flooding KUAL's log)
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
if pidof reader.lua > /dev/null 2>& 1 ; then
logmsg "Sending a SIGTERM to stray KOreader processes . . ."
killall -TERM reader.lua
killall -TERM reader.lua
else
# We trapped SIGTERM, remember? ;)
killall -KILL reader.lua
fi
fi
# unmount system fonts
# unmount system fonts
if grep /mnt/us/koreader/fonts/host /proc/mounts ; then
if grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Unmounting system fonts . . ."
umount /mnt/us/koreader/fonts/host
umount /mnt/us/koreader/fonts/host
fi
fi
# unmount altfonts
# unmount altfonts
if grep /mnt/us/koreader/fonts/altfonts /proc/mounts ; then
if grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Unmounting altfonts . . ."
umount /mnt/us/koreader/fonts/altfonts
umount /mnt/us/koreader/fonts/altfonts
fi
fi
# unmount linkfonts
# unmount linkfonts
if grep /mnt/us/koreader/fonts/linkfonts /proc/mounts ; then
if grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>& 1 ; then
logmsg "Unmounting linkfonts . . ."
umount /mnt/us/koreader/fonts/linkfonts
umount /mnt/us/koreader/fonts/linkfonts
fi
fi
# always try to continue cvm
# Resume cvm (only if we stopped it)
if ! killall -cont cvm ; then
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "sysv" ] ; then
logmsg "Resuming cvm . . ."
killall -cont cvm
fi
# Restart framework (if need be)
if [ " ${ STOP_FRAMEWORK } " = = "yes" ] ; then
logmsg "Restarting framework . . ."
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
if [ " ${ INIT_TYPE } " = = "sysv" ] ; then
/etc/init.d/framework start
/etc/init.d/framework start
else
else
@ -121,10 +174,15 @@ fi
# display chrome bar (upstart & framework up only)
# display chrome bar (upstart & framework up only)
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "upstart" ] ; then
if [ " ${ STOP_FRAMEWORK } " = = "no" -a " ${ INIT_TYPE } " = = "upstart" ] ; then
# Only if we actually killed it...
if [ " ${ PILLOW_DISABLED } " = = "yes" ] ; then
logmsg "Enabling pillow . . ."
lipc-set-prop com.lab126.pillow disableEnablePillow enable
lipc-set-prop com.lab126.pillow disableEnablePillow enable
fi
fi
fi
# restore firewall rules
# restore firewall rules
logmsg "Restoring IPTables rules . . ."
iptables -D INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -D INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -D INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
iptables -D INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT