Improve SD binding

This commit is contained in:
geofferey 2019-07-09 15:37:30 +00:00
parent a7676f2b80
commit 593cb28304
4 changed files with 132 additions and 61 deletions

View file

@ -7,6 +7,11 @@ id=com.piyushgarg.rclone
USER_CONFDIR=/sdcard/.rclone USER_CONFDIR=/sdcard/.rclone
CLOUDROOTMOUNTPOINT=/mnt/cloud CLOUDROOTMOUNTPOINT=/mnt/cloud
RUNTIME_MNT_R=/mnt/runtime/read/emulated/0/cloud
RUNTIME_MNT_W=/mnt/runtime/write/emulated/0/cloud
RUNTIME_MNT_DEF=/mnt/runtime/default/emulated/0/cloud
DATA_MNT=/data/media/0/cloud
SCRIPTPID=$$ SCRIPTPID=$$
if [ -e ${UPDDIR}/${id}/rclone ]; then if [ -e ${UPDDIR}/${id}/rclone ]; then
@ -43,11 +48,29 @@ disable () {
unmount () { unmount () {
kill $(pgrep -f rclone| grep -v $SCRIPTPID) >> /dev/null 2>&1 echo "Killing & Unmounting Remotes...."
kill $(pgrep -f rclone| grep -v ${SCRIPTPID}) >> /dev/null 2>&1
sleep 1 sleep 1
umount -f ${CLOUDROOTMOUNTPOINT}/* >> /dev/null 2>&1
sleep 3 umount -lf ${CLOUDROOTMOUNTPOINT}/* >> /dev/null 2>&1
rm -r ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
umount -lf ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
if [[ -e ${USER_CONFDIR}/.bindsd ]]; then
umount -lf ${RUNTIME_MNT_DEF}/ >> /dev/null 2>&1
umount -lf ${RUNTIME_MNT_DEF} >> /dev/null 2>&1
su -M -c $HOME/rclone purge ${RUNTIME_MNT_DEF} >> /dev/null 2>&1
su -M -c $HOME/rclone purge ${DATA_MNT} >> /dev/null 2>&1
fi
$HOME/rclone purge ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
} }

View file

@ -38,20 +38,22 @@ fi
USER_CONFDIR=/sdcard/.rclone USER_CONFDIR=/sdcard/.rclone
USER_CONF=${USER_CONFDIR}/rclone.conf USER_CONF=${USER_CONFDIR}/rclone.conf
CONFIGFILE=${HOME}/.config/rclone/rclone.conf CONFIGFILE=${HOME}/.config/rclone/rclone.conf
LOGFILE=/sdcard/rclone.log LOGFILE=${USER_CONFDIR}/rclone.log
HOME=${MODDIR}
CLOUDROOTMOUNTPOINT=/mnt/cloud CLOUDROOTMOUNTPOINT=/mnt/cloud
RUNTIME_MNT=/mnt/runtime/default/emulated/0/cloud RUNTIME_R=/mnt/runtime/read
RUNTIME_W=/mnt/runtime/write
RUNTIME_DEF=/mnt/runtime/default
SD_BINDPOINT=$RUNTIME_DEF/emulated/0/cloud
#RCLONE PARAMETERS #RCLONE PARAMETERS
DISABLE=0 DISABLE=0
BUFFERSIZE=8M BUFFERSIZE=8M
CACHEMAXSIZE=256M CACHEMAXSIZE=128M
DIRCACHETIME=24h DIRCACHETIME=24h
READAHEAD=128k READAHEAD=128k
CACHEMODE=writes CACHEMODE=off
CACHE=/data/rclone/cache CACHE=/data/media/0/.cache
CACHE_BACKEND=/data/rclone/cache-backend CACHE_BACKEND=/data/media/0/.cache-backend
HTTP_ADDR=127.0.0.1:38762 HTTP_ADDR=127.0.0.1:38762
FTP_ADDR=127.0.0.1:38763 FTP_ADDR=127.0.0.1:38763
@ -61,15 +63,9 @@ if [[ ! -d ${HOME}/.config/rclone ]]; then
fi fi
if [[ -e ${USER_CONFDIR}/.disable ]]; then
exit 0
fi
custom_params () { custom_params () {
PARAMS="BUFFERSIZE CACHEMAXSIZE DIRCACHETIME READAHEAD CACHEMODE DISABLE" PARAMS="BUFFERSIZE CACHEMAXSIZE DIRCACHETIME READAHEAD CACHEMODE DISABLE READONLY"
BAD_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)" BAD_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
@ -102,39 +98,18 @@ custom_params () {
fi fi
} }
sleep 5
if [[ ! -d ${CLOUDROOTMOUNTPOINT} ]]; then
mkdir -p ${CLOUDROOTMOUNTPOINT} NET_CHK() {
fi ping -c 5 google.com
if [[ ! -d ${CACHE} ]]; then }
mkdir -p ${CACHE} COUNT=0
fi
if [[ ! -d ${CACHE_BACKEND} ]]; then
mkdir -p ${CACHE_BACKEND}
fi
if [[ ! -L /mnt/runtime/read/cloud ]]; then
ln -sf ${CLOUDROOTMOUNTPOINT} /mnt/runtime/read/cloud
fi
if [[ ! -L /mnt/runtime/write/cloud ]]; then
ln -sf ${CLOUDROOTMOUNTPOINT} /mnt/runtime/write/cloud
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
@ -143,11 +118,69 @@ until [[ $(getprop sys.boot_completed) = 1 ]] && [[ $(getprop dev.bootcomplete)
done done
if [[ -d /data/media/0/cloud ]] || [[ -d /sdcard/cloud ]] && [[ -d /mnt/runtime ]]; then if [[ -e ${USER_CONFDIR}/.disable ]]; then
sleep 1 exit 0
su -M -c /system/bin/mount -o rw,noatime -o rbind ${CLOUDROOTMOUNTPOINT} ${RUNTIME_MNT} fi
if [[ ! -d ${CLOUDROOTMOUNTPOINT} ]]; then
mkdir -p ${CLOUDROOTMOUNTPOINT}
chown media_rw:media_rw ${CLOUDROOTMOUNTPOINT}
touch ${CLOUDROOTMOUNTPOINT}/.nomedia
chmod 0644 ${CLOUDROOTMOUNTPOINT}/.nomedia
fi
if [[ ! -e ${CLOUDROOTMOUNTPOINT}/.nomedia ]]; then
touch ${CLOUDROOTMOUNTPOINT}/.nomedia
chmod 0644 ${CLOUDROOTMOUNTPOINT}/.nomedia
fi
if [[ ! -d ${CACHE} ]]; then
mkdir -p ${CACHE}
chown media_rw:media_rw ${CACHE}
chmod 0775 ${CACHE}
fi
chown media_rw:media_rw ${CACHE_BACKEND}
chmod 0775 ${CACHE_BACKEND}
if [[ ! -d ${CACHE_BACKEND} ]]; then
mkdir -p ${CACHE_BACKEND}
fi
chown media_rw:media_rw ${CACHE_BACKEND}
chmod 0775 ${CACHE_BACKEND}
if [[ ! -L ${RUNTIME_R}/cloud ]]; then
ln -sf ${CLOUDROOTMOUNTPOINT} ${RUNTIME_R}/cloud
fi
if [[ ! -L ${RUNTIME_W}/cloud ]]; then
ln -sf ${CLOUDROOTMOUNTPOINT} ${RUNTIME_W}/cloud
fi
if [[ ! -d ${SD_BINDPOINT} ]] && [[ -e $USER_CONFDIR/.bindsd ]]; then
su -M -c mkdir ${SD_BINDPOINT} >> /dev/null 2>&1
fi
if [[ -d ${RUNTIME_DEF} ]] && [[ ! -e ${SD_BINDPOINT}/.bound ]] && [[ -e $USER_CONFDIR/.bindsd ]]; then
su -M -c mount -o bind ${CLOUDROOTMOUNTPOINT} ${SD_BINDPOINT} && touch ${CLOUDROOTMOUNTPOINT}/.bound
fi fi
@ -182,7 +215,12 @@ if [[ -e $USER_CONFDIR/.fullcache ]]; then
fi fi
sleep 10 until NET_CHK || [[ ${COUNT} = 60 ]]; do
sleep 5
((++COUNT))
done >> /dev/null 2>&1
echo "Default CACHEMODE ${CACHEMODE}" echo "Default CACHEMODE ${CACHEMODE}"
@ -193,6 +231,7 @@ ${HOME}/rclone listremotes --config ${CONFIGFILE}|cut -f1 -d: |
echo echo
DISABLE=0 DISABLE=0
READONLY=0
custom_params custom_params
@ -203,9 +242,19 @@ ${HOME}/rclone listremotes --config ${CONFIGFILE}|cut -f1 -d: |
fi fi
if [[ ${READONLY} = 1 ]]; then
READONLY=" --read-only "
else
READONLY=" "
fi
echo "[${remote}] available at: -> [${CLOUDROOTMOUNTPOINT}/${remote}]" echo "[${remote}] available at: -> [${CLOUDROOTMOUNTPOINT}/${remote}]"
mkdir -p ${CLOUDROOTMOUNTPOINT}/${remote} mkdir -p ${CLOUDROOTMOUNTPOINT}/${remote}
su -M -p -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 >> /dev/null 2>&1 su -M -p -c $HOME/rclone mount ${remote}: ${CLOUDROOTMOUNTPOINT}/${remote} --config ${CONFIGFILE} --max-read-ahead ${READAHEAD} --buffer-size ${BUFFERSIZE} --cache-db-path ${CACHE_BACKEND} --dir-cache-time ${DIRCACHETIME} --poll-interval 5m --attr-timeout ${DIRCACHETIME} --vfs-cache-mode ${CACHEMODE} --vfs-read-chunk-size 8M --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 --cache-workers 1 --log-file ${LOGFILE} --allow-other --uid 1023 --gid 1023 --cache-chunk-no-memory ${READONLY} --daemon >> /dev/null 2>&1
sleep 5 sleep 5
done done

View file

@ -128,7 +128,7 @@ print_modname() {
ui_print "* Magisk Module *" ui_print "* Magisk Module *"
ui_print "* by: piyushgarg *" ui_print "* by: piyushgarg *"
ui_print "*******************************" ui_print "*******************************"
ui_print "*rclone: (v1.47.0) mod: (v1.4)*" ui_print "*rclone: (v1.47.0) mod: (v1.5)*"
ui_print "*******************************" ui_print "*******************************"
} }

View file

@ -1,9 +1,8 @@
id=com.piyushgarg.rclone id=com.piyushgarg.rclone
name=rclone-mount name=rclone-mount
modVer=1.4 modVer=1.5
BinVer=1.47 BinVer=1.47
version=rclone: (v1.47.0) mod: (v1.4) version=rclone: (v1.47.0) mod: (v1.5)
versionCode=104 versionCode=105
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.