Improve disable remote & add wrapper
This commit is contained in:
parent
aa1de29f7d
commit
42d19d92c9
8 changed files with 145 additions and 50 deletions
|
@ -106,3 +106,8 @@ For more detailed configuration of rclone please refer to [official documentatio
|
||||||
* Specify custom params for individual remotes via /sdcard/.rclone/.REMOTENAME.params
|
* Specify custom params for individual remotes via /sdcard/.rclone/.REMOTENAME.params
|
||||||
|
|
||||||
|
|
||||||
|
### v1.4
|
||||||
|
* Add ability to disable a remote
|
||||||
|
* Add a wrapper script for rclone
|
||||||
|
* Make remount possible with adb via `su --mount-master -c`
|
||||||
|
|
||||||
|
|
63
binary/rclone-wrapper.sh
Executable file
63
binary/rclone-wrapper.sh
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/system/xbin/bash
|
||||||
|
|
||||||
|
MODDIR=${0%/*}
|
||||||
|
|
||||||
|
#. $MODDIR/module.prop >> /dev/null 2>&1
|
||||||
|
|
||||||
|
IMGDIR=/sbin/.core/img
|
||||||
|
id=com.piyushgarg.rclone
|
||||||
|
|
||||||
|
USER_CONFDIR=/sdcard/.rclone
|
||||||
|
CLOUDROOTMOUNTPOINT=/mnt/cloud
|
||||||
|
|
||||||
|
if [ -d ${IMGDIR}/${id} ]; then
|
||||||
|
|
||||||
|
HOME=${IMGDIR}/${id}
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
HOME=$={MODDIR}
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
disable () {
|
||||||
|
|
||||||
|
touch ${USER_CONFDIR}/.$*.disable
|
||||||
|
}
|
||||||
|
|
||||||
|
unmount () {
|
||||||
|
|
||||||
|
umount -f ${CLOUDROOTMOUNTPOINT}/* >> /dev/null 2>&1
|
||||||
|
kill -9 $(pgrep -x rclone) >> /dev/null 2>&1
|
||||||
|
|
||||||
|
rm -r ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
remount () {
|
||||||
|
|
||||||
|
umount -f ${CLOUDROOTMOUNTPOINT}/* >> /dev/null 2>&1
|
||||||
|
sleep 1
|
||||||
|
${HOME}/service.sh
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ${1} = disable ]]; then
|
||||||
|
|
||||||
|
echo "disabling remote ${2}"
|
||||||
|
touch $USER_CONFDIR/.${2}.disable
|
||||||
|
|
||||||
|
elif [[ ${1} = remount ]]; then
|
||||||
|
|
||||||
|
remount
|
||||||
|
|
||||||
|
elif [[ ${1} = unmount ]]; then
|
||||||
|
|
||||||
|
unmount
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
$HOME/rclone $*
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
|
@ -13,3 +13,8 @@
|
||||||
* Move user rclone.conf & related to /sdcard/.rclone/
|
* Move user rclone.conf & related to /sdcard/.rclone/
|
||||||
* Control global --vfs-cache-mode via simple files placed in /sdcard/.rclone/
|
* Control global --vfs-cache-mode via simple files placed in /sdcard/.rclone/
|
||||||
* Specify custom params for individual remotes via /sdcard/.rclone/.REMOTENAME.params
|
* Specify custom params for individual remotes via /sdcard/.rclone/.REMOTENAME.params
|
||||||
|
|
||||||
|
## v1.4
|
||||||
|
* Add ability to disable a remote
|
||||||
|
* Add a wrapper script for rclone
|
||||||
|
* Make remount possible via `su --mount-master`
|
||||||
|
|
0
common/disable.sh
Normal file → Executable file
0
common/disable.sh
Normal file → Executable file
0
common/manual.sh
Normal file → Executable file
0
common/manual.sh
Normal file → Executable file
|
@ -1,4 +1,4 @@
|
||||||
#!/system/bin/sh
|
#!/system/xbin/bash
|
||||||
# Do NOT assume where your module will be located.
|
# Do NOT assume where your module will be located.
|
||||||
# ALWAYS use $MODDIR if you need to know where this script
|
# ALWAYS use $MODDIR if you need to know where this script
|
||||||
# and module is placed.
|
# and module is placed.
|
||||||
|
@ -7,21 +7,22 @@
|
||||||
|
|
||||||
MODDIR=${0%/*}
|
MODDIR=${0%/*}
|
||||||
|
|
||||||
#. $MODDIR/module.prop >> /dev/null 2>&1
|
|
||||||
|
|
||||||
IMGDIR=/sbin/.core/img
|
IMGDIR=/sbin/.core/img
|
||||||
id=com.piyushgarg.rclone
|
id=com.piyushgarg.rclone
|
||||||
|
|
||||||
if [ -d $IMGDIR/$id ]; then
|
if [ -d ${IMGDIR}/${id} ]; then
|
||||||
|
|
||||||
|
ln -sf ${IMGDIR}/${id}/rclone-wrapper.sh /sbin/rclone
|
||||||
|
ln -sf ${IMGDIR}/${id}/fusermount /sbin/fusermount
|
||||||
|
ln -sf ${IMGDIR}/${id}/rclone-mount /sbin/rclone-mount
|
||||||
|
HOME=${IMGDIR}/${id}
|
||||||
|
|
||||||
ln -sf $IMGDIR/$id/rclone /sbin/rclone
|
|
||||||
ln -sf $IMGDIR/$id/fusermount /sbin/fusermount
|
|
||||||
ln -sf $IMGDIR/$id/rclone-mount /sbin/rclone-mount
|
|
||||||
else
|
else
|
||||||
|
|
||||||
ln -sf $MODDIR/rclone /sbin/rclone
|
ln -sf ${MODDIR}/rclone-wrapper.sh /sbin/rclone
|
||||||
ln -sf $MODDIR/fusermount /sbin/fusermount
|
ln -sf ${MODDIR}/fusermount /sbin/fusermount
|
||||||
ln -sf $MODDIR/rclone-mount /sbin/rclone-mount
|
ln -sf ${MODDIR}/rclone-mount /sbin/rclone-mount
|
||||||
|
HOME=${MODDIR}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -30,14 +31,15 @@ USER_CONFDIR=/sdcard/.rclone
|
||||||
|
|
||||||
#/sdcard/rclone.conf is really a sensitive file containing all the important tokens and is exposed to all the apps.
|
#/sdcard/rclone.conf is really a sensitive file containing all the important tokens and is exposed to all the apps.
|
||||||
#Do we really want to keep it there after use? Lets decide and close the loop.
|
#Do we really want to keep it there after use? Lets decide and close the loop.
|
||||||
USER_CONF=$USER_CONFDIR/rclone.conf
|
USER_CONF=${USER_CONFDIR}/rclone.conf
|
||||||
|
|
||||||
CONFIGFILE=$MODDIR/rclone.conf
|
CONFIGFILE=${HOME}/.config/rclone/rclone.conf
|
||||||
LOGFILE=/sdcard/rclone.log
|
LOGFILE=/sdcard/rclone.log
|
||||||
HOME=/mnt
|
HOME=${MODDIR}
|
||||||
CLOUDROOTMOUNTPOINT=$HOME/cloud
|
CLOUDROOTMOUNTPOINT=/mnt/cloud
|
||||||
|
|
||||||
#RCLONE PARAMETERS
|
#RCLONE PARAMETERS
|
||||||
|
DISABLE=0
|
||||||
BUFFERSIZE=8M
|
BUFFERSIZE=8M
|
||||||
CACHEMAXSIZE=256M
|
CACHEMAXSIZE=256M
|
||||||
DIRCACHETIME=24h
|
DIRCACHETIME=24h
|
||||||
|
@ -46,90 +48,97 @@ CACHEMODE=writes
|
||||||
CACHE=/data/rclone/cache
|
CACHE=/data/rclone/cache
|
||||||
CACHE_BACKEND=/data/rclone/cache-backend
|
CACHE_BACKEND=/data/rclone/cache-backend
|
||||||
|
|
||||||
|
if [[ -e ${USER_CONFDIR}/.disable ]]; then
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
custom_params () {
|
custom_params () {
|
||||||
|
|
||||||
PARAMS="BUFFERSIZE CACHEMAXSIZE DIRCACHETIME READAHEAD CACHEMODE"
|
PARAMS="BUFFERSIZE CACHEMAXSIZE DIRCACHETIME READAHEAD CACHEMODE DISABLE"
|
||||||
|
|
||||||
BAD_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
|
BAD_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
|
||||||
|
|
||||||
if [[ -e $USER_CONFDIR/.$remote.param ]]; then
|
if [[ -e ${USER_CONFDIR}/.${remote}.param ]] && [[ ! $(egrep -q -iv "${BAD_SYNTAX}" ${USER_CONFDIR}/.${remote}.param) ]]; then
|
||||||
|
|
||||||
if ! egrep -q -iv "$BAD_SYNTAX" $USER_CONFDIR/.$remote.param; then
|
echo "loading .${remote}.param"
|
||||||
|
|
||||||
for PARAM in ${PARAMS[@]}; do
|
for PARAM in ${PARAMS[@]}; do
|
||||||
|
|
||||||
while read -r VAR; do
|
while read -r VAR; do
|
||||||
|
|
||||||
if [[ "$(echo "${VAR}" |grep -w "$PARAM")" ]]; then
|
if [[ "$(echo "${VAR}" |grep -w "${PARAM}")" ]]; then
|
||||||
|
|
||||||
|
echo "Importing ${VAR}"
|
||||||
eval $(echo "${VAR}" |cut -d ' ' -f 1)
|
eval $(echo "${VAR}" |cut -d ' ' -f 1)
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
done < $USER_CONFDIR/.$remote.param
|
done < ${USER_CONFDIR}/.${remote}.param
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
echo ".$remote.param contains bad syntax"
|
echo ".${remote}.param contains bad syntax"
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ ! -d $CLOUDROOTMOUNTPOINT ]]; then
|
if [[ ! -d ${CLOUDROOTMOUNTPOINT} ]]; then
|
||||||
|
|
||||||
mkdir -p $CLOUDROOTMOUNTPOINT
|
mkdir -p ${CLOUDROOTMOUNTPOINT}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d $CACHE ]]; then
|
if [[ ! -d ${CACHE} ]]; then
|
||||||
|
|
||||||
mkdir -p $CACHE
|
mkdir -p ${CACHE}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d $CACHE_BACKEND ]]; then
|
if [[ ! -d ${CACHE_BACKEND} ]]; then
|
||||||
|
|
||||||
mkdir -p $CACHE_BACKEND
|
mkdir -p ${CACHE_BACKEND}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -L /mnt/runtime/read/cloud ]]; then
|
if [[ ! -L /mnt/runtime/read/cloud ]]; then
|
||||||
|
|
||||||
ln -sf $CLOUDROOTMOUNTPOINT /mnt/runtime/read/cloud
|
ln -sf ${CLOUDROOTMOUNTPOINT} /mnt/runtime/read/cloud
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -L /mnt/runtime/write/cloud ]]; then
|
if [[ ! -L /mnt/runtime/write/cloud ]]; then
|
||||||
|
|
||||||
ln -sf $CLOUDROOTMOUNTPOINT /mnt/runtime/write/cloud
|
ln -sf ${CLOUDROOTMOUNTPOINT} /mnt/runtime/write/cloud
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
until [[ $(getprop sys.boot_completed) = 1 ]] && [[ $(getprop dev.bootcomplete) = 1 ]] && [[ $(getprop service.bootanim.exit) = 1 ]] && [[ $(getprop init.svc.bootanim) = stopped ]] && [[ -e $USER_CONF ]] || [[ $COUNT -eq 240 ]]; do
|
until [[ $(getprop sys.boot_completed) = 1 ]] && [[ $(getprop dev.bootcomplete) = 1 ]] && [[ $(getprop service.bootanim.exit) = 1 ]] && [[ $(getprop init.svc.bootanim) = stopped ]] && [[ -e ${USER_CONF} ]] || [[ ${COUNT} -eq 240 ]]; do
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
((++COUNT))
|
((++COUNT))
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ -e $USER_CONF ]]; then
|
if [[ -e ${USER_CONF} ]]; then
|
||||||
|
|
||||||
cp $USER_CONF $CONFIGFILE
|
cp ${USER_CONF} ${CONFIGFILE}
|
||||||
chmod 0600 $CONFIGFILE
|
chmod 0600 ${CONFIGFILE}
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -e $USER_CONFDIR/.nocache ]]; then
|
if [[ -e ${USER_CONFDIR}/.nocache ]]; then
|
||||||
|
|
||||||
CACHEMODE=off
|
CACHEMODE=off
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -e $USER_CONFDIR/.mincache ]]; then
|
if [[ -e ${USER_CONFDIR}/.mincache ]]; then
|
||||||
|
|
||||||
CACHEMODE=minimal
|
CACHEMODE=minimal
|
||||||
|
|
||||||
|
@ -147,28 +156,38 @@ if [[ -e $USER_CONFDIR/.fullcache ]]; then
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo CACHEMODE will be ${CACHEMODE}.
|
|
||||||
|
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
/sbin/rclone listremotes --config ${CONFIGFILE}|cut -f1 -d: |
|
echo "Default CACHEMODE ${CACHEMODE}"
|
||||||
|
|
||||||
|
$HOME/rclone listremotes --config ${CONFIGFILE}|cut -f1 -d: |
|
||||||
while read remote; do
|
while read remote; do
|
||||||
|
|
||||||
#ignore the remote which is not required by the user.
|
echo
|
||||||
if [[ -e "${USER_CONFDIR}/${remote}.skip" ]]; then
|
|
||||||
echo "ignored ${remote} as requested."
|
DISABLE=0
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
custom_params
|
custom_params
|
||||||
echo "[$remote] will be available at -> [${CLOUDROOTMOUNTPOINT}/${remote}]"
|
|
||||||
|
#ignore the remote which is not required by the user
|
||||||
|
|
||||||
|
if [[ ${DISABLE} = 1 ]] || [[ -e ${USER_CONFDIR}/.${remote}.disable ]]; then
|
||||||
|
|
||||||
|
echo "${remote} disabled by user"
|
||||||
|
continue
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[${remote}] available at: -> [${CLOUDROOTMOUNTPOINT}/${remote}]"
|
||||||
mkdir -p ${CLOUDROOTMOUNTPOINT}/${remote}
|
mkdir -p ${CLOUDROOTMOUNTPOINT}/${remote}
|
||||||
/sbin/rclone mount ${remote}: ${CLOUDROOTMOUNTPOINT}/${remote} --config ${CONFIGFILE} --max-read-ahead ${READAHEAD} --buffer-size ${BUFFERSIZE} --dir-cache-time ${DIRCACHETIME} --poll-interval 5m --attr-timeout ${DIRCACHETIME} --vfs-cache-mode ${CACHEMODE} --vfs-read-chunk-size 2M --vfs-read-chunk-size-limit 10M --vfs-cache-max-age 10h0m0s --vfs-cache-max-size ${CACHEMAXSIZE} --cache-dir=${CACHE} --cache-chunk-path ${CACHE_BACKEND} --cache-chunk-clean-interval 10m0s --log-file ${LOGFILE} --allow-other --gid 1015 --daemon
|
su --mount-master -c $HOME/rclone mount ${remote}: ${CLOUDROOTMOUNTPOINT}/${remote} --config ${CONFIGFILE} --max-read-ahead ${READAHEAD} --buffer-size ${BUFFERSIZE} --dir-cache-time ${DIRCACHETIME} --poll-interval 5m --attr-timeout ${DIRCACHETIME} --vfs-cache-mode ${CACHEMODE} --vfs-read-chunk-size 2M --vfs-read-chunk-size-limit 10M --vfs-cache-max-age 10h0m0s --vfs-cache-max-size ${CACHEMAXSIZE} --cache-dir=${CACHE} --cache-chunk-path ${CACHE_BACKEND} --cache-chunk-clean-interval 10m0s --log-file ${LOGFILE} --allow-other --gid 1015 --daemon
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
|
|
||||||
#as of now serving over http that can be browsed through.
|
#as of now serving over http that can be browsed through.
|
||||||
/sbin/rclone serve http ${CLOUDROOTMOUNTPOINT} --addr 127.0.0.1:38762 --no-checksum --no-modtime --read-only &
|
/sbin/rclone serve http ${CLOUDROOTMOUNTPOINT} --addr 127.0.0.1:38762 --no-checksum --no-modtime --read-only &
|
||||||
|
|
||||||
|
/sbin/rclone serve ftp ${CLOUDROOTMOUNTPOINT} --addr 0.0.0.0:38763 --no-checksum --no-modtime --read-only &
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "...done"
|
echo "...done"
|
||||||
|
|
|
@ -159,6 +159,8 @@ on_install() {
|
||||||
unzip -p "$ZIPFILE" binary/fusermount-${ARCH} > $MODPATH/fusermount
|
unzip -p "$ZIPFILE" binary/fusermount-${ARCH} > $MODPATH/fusermount
|
||||||
ui_print "+ Extracting rclone-mount script to $MODPATH/rclone-mount"
|
ui_print "+ Extracting rclone-mount script to $MODPATH/rclone-mount"
|
||||||
unzip -p "$ZIPFILE" binary/rclone-mount > $MODPATH/rclone-mount
|
unzip -p "$ZIPFILE" binary/rclone-mount > $MODPATH/rclone-mount
|
||||||
|
ui_print "+ Extracting rclone-wrapper.sh script to $MODPATH/rclone-mount"
|
||||||
|
unzip -p "$ZIPFILE" binary/rclone-wrapper.sh > $MODPATH/rclone-wrapper.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
# Only some special files require specific permissions
|
# Only some special files require specific permissions
|
||||||
|
@ -173,6 +175,7 @@ set_permissions() {
|
||||||
set_perm $MODPATH/fusermount 0 0 0755
|
set_perm $MODPATH/fusermount 0 0 0755
|
||||||
set_perm $MODPATH/rclone-mount 0 0 0755
|
set_perm $MODPATH/rclone-mount 0 0 0755
|
||||||
set_perm $MODPATH/service.sh 0 0 0500
|
set_perm $MODPATH/service.sh 0 0 0500
|
||||||
|
set_perm $MODPATH/rclone-wrapper.sh 0 0 0500
|
||||||
# Here are some examples:
|
# Here are some examples:
|
||||||
# set_perm_recursive $MODPATH/system/lib 0 0 0755 0644
|
# set_perm_recursive $MODPATH/system/lib 0 0 0755 0644
|
||||||
# set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
|
# set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
id=com.piyushgarg.rclone
|
id=com.piyushgarg.rclone
|
||||||
name=rclone-mount
|
name=rclone-mount
|
||||||
modVer=1.3
|
modVer=1.4
|
||||||
BinVer=1.47
|
BinVer=1.47
|
||||||
version=rclone: (v1.47.0) mod: (v1.3)
|
version=rclone: (v1.47.0) mod: (v1.4)
|
||||||
versionCode=103
|
versionCode=104
|
||||||
author=piyushgarg @ github.com
|
author=piyushgarg @ github.com
|
||||||
description=Mount cloud storage locally using rclone & fusermount. Virtually limitless storage expansion with support for dozens of cloud providers. Extremely useful for streaming large media files without need for full caching. Binaries obtained directly from rclone.org. Please refer to README.md for more info.
|
description=Mount cloud storage locally using rclone & fusermount. Virtually limitless storage expansion with support for dozens of cloud providers. Extremely useful for streaming large media files without need for full caching. Binaries obtained directly from rclone.org. Please refer to README.md for more info.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue