wrappingMD_sh="${me%/*}/wrapping-mount-dosfsck.sh"
imgsz=''
-eval $(fbset | awk '
- $1=="geometry"{printf "w=%d; h=%d; bpp=%d;", $2, $3, $6;}')
+eval $(fbset | awk '$1=="geometry"{ printf "w=%d;h=%d;bpp=%d;", $2, $3, $6;}')
if [ "$bpp" = 16 ] ; then
imgsz="${w}x${h}"
bs=$((w*h*bpp/8)); cnt=1
dda="bs=$bs count=$cnt"
fi
+imgBase=''
dispImg () {
local i
[ -z "$imgBase" ] && return
wdir=$(mktemp -d /tmp/dev_XXXXXX)
cd "$wdir"
+onbImgDir="${FKSH_ONB:=/mnt/onboard/.fakesh}/images"
case "$me" in
*-oneShot.sh)
myName=easyKoboBackup
- rm -f "$me"
imgBase="${me%/*}/$imgsz"
if [ -f "$imgBase".raw.gz -a -n "$imgsz" ] ; then
killall update-animator.sh
- else
- imgBase=''
+ onbImgDirKBK="$onbImgDir/koboBackup"
+ if [ -d "$onbImgDir" -a ! -d "$onbImgDirKBK" ] ; then
+ mkdir "$onbImgDirKBK"
+ cp -p "${imgBase%/*}"/*.raw.gz "$onbImgDirKBK"
+ fi
fi
;;
*)
myName=koboBackup.sh
- imgBase="${FKSH_ONB:=/mnt/onboard/.fakesh}/images/koboBackup/$imgsz"
+ imgBase="$onbImgDir/koboBackup/$imgsz"
if [ -f "$imgBase".raw.gz -a -n "$imgsz" ] ; then
dd if=/dev/fb0 of=lastImg $dda
gzip -9 lastImg &
- else
- imgBase=''
fi
;;
esac >/dev/null 2>&1
+printf 'This is %s, Version %s\n\n' $myName $vers
dispImg black
dispImg white
dispImg ''
-printf 'This is %s, Version %s\n\n' "$myName" $vers
date '+---- %T ----'
printf \\n
pz=$(( (pzz/2)*2 - 1 ))
pzz=$((pzz+1))
+paramfile=/mnt/onboard/koboBackup.param
+paramfileLOG=${mkBackupLOG%.log*}.param
# exitWithMsg msg exitStatus
exitWithMsg () {
if [ -f ${paramfile}CUR ] ; then
- rm -rf ${paramfile}DONE
- mv ${paramfile}CUR ${paramfile}DONE # no new i-node
+ rm -rf $paramfileLOG
+ mv ${paramfile}CUR $paramfileLOG # no new i-node
fi
printf '%s\n\n%s\n\n' "$1" "$(date '+---- %T ----')"
yel=99
p9=$pz
spclfld=spcl:32
elif [ $pz -lt 24000 ] ; then
- # 8GB : 590M 400M - 400M 200M
+ # 8GB : 490M 300M - 400M 400M
p1=$p1ceil2
- p2=1201
- p3=2001
- p5=$((pz-1200))
- p6=$((pz-400))
+ p2=1001
+ p3=1601
+ p5=$((pz-1600))
+ p6=$((pz-800))
p9=$pz
spclfld=spcl:64
else
- # > 8GB : 990M 600M - 500M 1200M
+ # > 8GB : 990M 400M - 500M 1200M
p1=$p1ceil2
p2=2001
- p3=3201
+ p3=2801
p5=$((pz-3400))
p6=$((pz-2400))
p9=$pz
pt="$p1 $p2 $p3 $p5 $p6 $p9 $spclfld"
## manual partitioning
-paramfile=/mnt/onboard/koboBackup.param
rm -rf ${paramfile}CUR
if [ -f $paramfile ] ; then
+ dos2unix $paramfile
read paramIn < $paramfile
case "$paramIn" in
[1-9]*)
pt_reform="$pt_reform spcl:$spcl"
;;
0 | ext4)
- echo 'KOBOeReader: ext4, Best choice !!'
+ echo 'KOBOeReader: ext4 # Best choice !!'
spcl=0
p3type=83
mtoptp3='-t ext4 -o norelatime,noatime,nodiratime'
contents: $pt
EOPTNMSGdr
else
- rm -rf ${paramfile}DONE
- mv ${paramfile}CUR ${paramfile}DONE # no new i-node
- echo "$pt" > ${paramfile}DONE
+ rm -rf $paramfileLOG
+ mv ${paramfile}CUR $paramfileLOG # no new i-node
+ echo "$pt" > $paramfileLOG
cat <<- EOPTNMSGre
- You can recustomize the current partitioning by editing
- the file "${paramfile##*/}DONE" and rename it to "${paramfile##*/}".
+ You can recustomize the partitioning by editing
+ the file "${paramfileLOG##*/}" and rename it to "${paramfile##*/}".
contents: $pt
EOPTNMSGre
fi
else
cat <<- EOPTNMSG
- You can customize the current partitioning by
+ You can customize the partitioning by
PROMPT# echo "$pt" >$paramfile
and edit the file "${paramfile##*/}"
EOPTNMSG
fi
-:||:<< 'EOCOMMENT'
- vfat(fat32) cluster size partition size
- 4 KiB/cluster = 8 sectors/cluster <--> 256MiB -- 1TiB
- 8 KiB/cluster = 16 sectors/cluster <--> 512MiB -- 2TiB
-16 KiB/cluster = 32 sectors/cluster <--> 1GiB -- 4TiB
-32 KiB/cluster = 64 sectors/cluster <--> 2GiB -- 8TiB
-64 KiB/cluster = 128 sectors/cluster <--> 4GiB -- 16TiB
-EOCOMMENT
+printf \\n
+cat << 'EoNOTEspcl'
+ cluster size (partition size)
+spcl:auto auto by /sbin/mkfs.vfat
+spcl:8 4KiB (256MiB--1TiB)
+spcl:16 8KiB (512MiB--2TiB)
+spcl:32 16KiB (1GiB--4TiB)
+spcl:64 32KiB (2GiB--8TiB)
+spcl:128 64KiB (4GiB--16TiB)
+spcl:ext4 ext4
+EoNOTEspcl
mkDevices () {
rm -f $vol "$vol"p[1-9]*
cp -a "$d" dst/
done
## change: /sbin/mkfs.vfat
-## /bin/mount /bin/dosfsck /bin/umount
-## /bin/wrapping-mount-dosfsck.sh
-# restore
-while read tgt bbx ; do
- if [ ! -L dst$tgt ] ; then
- printf '\nRestore %s' $tgt
- rm -rf dst/$tgt
- ln -s $bbx dst/$tgt
- fi
-done << 'EORESTORE'
-/sbin/mkfs.vfat ../bin/busybox
-/bin/mount busybox
-/bin/umount busybox
-EORESTORE
-for w in dst/bin/.wrapped/* ; do
- [ -x $w ] || continue
- orig1=bin/${w##*/}
- orig=dst/$orig1
- printf '\nRestore %s' /$orig1
- rm -rf $orig
- if [ -L "$w" ] ; then
- ln -s busybox $orig # it must be "busybox"
- else
- mv $w $orig
- if [ -f dst/fs.md5sum ] ; then
- md5x="$(md5sum $orig | sed "s@ .*@ $orig1@")"
- sed -i "s@^[^ ]* $orig1\$@$md5x@" dst/fs.md5sum
- fi
- fi
-done
-rm -rf dst/bin/.wrapped dst/bin/wrapping-mount-dosfsck.sh
+## /bin/wrapping-mount-dosfsck.sh /bin/mount /bin/umount /bin/dosfsck
+if [ ! -L dst//sbin/mkfs.vfat ] &&
+ grep -q '# a part of fakesh-kobo' dst/sbin/mkfs.vfat ; then
+ printf '\nRestore /sbin/mkfs.vfat'
+ rm -rf dst/sbin/mkfs.vfat
+ ln -s ../bin/busybox dst/sbin/mkfs.vfat
+fi
+if [ -f dst/bin/wrapping-mount-dosfsck.sh ] ; then
+ printf '\nRestore /bin/mount , /bin/umount and /bin/dosfsck,'
+ $wrappingMD_sh dst restore
+ printf '\nand delete wrapping-mount-dosfsck.sh'
+ rm -f dst/bin/wrapping-mount-dosfsck.sh
+fi
# wrap
if [ -n "$spcl" ] ; then
if [ $spcl -gt 0 -a -x dst/bin/mkdosfs ] ; then
printf '\nReplacing "mkfs.vfat" to "/bin/mkdosfs -F 32 -s %d"' $spcl
## dst/sbin/mkdosfs is busybox
- rm -rf dst/sbin/mkfs.vfat # dst/sbin/mkdosfs #
+ rm -rf dst/sbin/mkfs.vfat
cat > dst/sbin/mkfs.vfat <<- EOWRAP1
#!/bin/busybox sh
# a part of fakesh-kobo
exec /bin/mkdosfs -F 32 -s $spcl "\$@"
EOWRAP1
chmod 755 dst/sbin/mkfs.vfat
- # ln '../bin/mkdosfs' dst/sbin/mkdosfs # HARD link
elif [ $spcl -eq 0 -a -x dst/sbin/mkfs.ext4 ] ; then
printf '\nReplacing "mkfs.vfat -n" to "mkfs.ext4 -m 0 -L"'
rm -rf dst/sbin/mkfs.vfat
chmod 755 dst/sbin/mkfs.vfat
printf '\nInstall the wrapping script /bin/wrapping-mount-dosfsck.sh'
cp -p $wrappingMD_sh dst/bin/wrapping-mount-dosfsck.sh
- printf '\nWrap /bin/mount , /bin/dosfsck and /bin/umount'
+ printf '\nWrap /bin/mount , /bin/umount and /bin/dosfsck'
$wrappingMD_sh dst
- rm -rf dst/bin/umount
- cat > dst/bin/umount <<- 'EOWRAP3'
- #!/bin/busybox sh
- # a part of fakesh-kobo
- for i do
- [ /mnt/root = "$i" ] || continue
- [ -d "$i" ] || continue
- wrapping-mount-dosfsck.sh "$i" # $i == /mnt/root
- break
- done
- exec busybox umount "$@"
- EOWRAP3
- chmod 755 dst/bin/umount
fi
fi
sync; sync; sync
if [ -d "$1" ] ; then
# $1 is root dir
- # gen wrpper of mount
path2mount=${1%/}/bin/mount
- if [ -L $path2mount ] ; then
- rm -f $path2mount
- cat > $path2mount <<- 'EoMOUNTWRAP'
+ path2umount=${1%/}/bin/umount
+ path2dosfsck=${1%/}/bin/dosfsck
+ wrapd=${path2dosfsck%/*}/.wrapped
+ if [ -z "$2" ] ; then # WRAP
+ # wrap mount
+ if [ -L $path2mount -a $(readlink $path2mount) = busybox ] ; then
+ rm -f $path2mount
+ cat > $path2mount <<- 'EoMOUNTWRAP'
#!/bin/busybox sh
# a part of fakesh-kobo
# change only if '-t vfat' and dev is not vfat
lastarg="$i"
done
[ "$fstype" = vfat ] || exec busybox mount "$@"
- blkid | grep -q "${dev}.* UUID=\"....-....\"" >/dev/null 1>&2 &&
- exec busybox mount "$@"
+ rgex="^${dev}:.* (UUID=\"....-....\"|LABEL=\"rootfs\")"
+ blkid | grep -Eq "$rgex" >/dev/null 2>&1 && exec busybox mount "$@"
case "$opt" in *,remount,*) ext4opt="$ext4opt,remount" ;; esac
case "$opt" in *,ro,*) ext4opt="$ext4opt,ro" ;; esac
case "$opt" in *,rw,*) ext4opt="$ext4opt,rw" ;; esac
exec busybox mount -t ext4 $ext4opt "$dev" "$mtpt"
EoMOUNTWRAP
- chmod 755 $path2mount
- fi
- # gen wrpper of dosfsck
- path2dosfsck=${1%/}/bin/dosfsck
- if [ -x $path2dosfsck -a ! -L $path2dosfsck ] ; then
- wrapd=${path2dosfsck%/*}/.wrapped
- [ -d $wrapd ] || mkdir -p -m 755 $wrapd
- if [ ! -x $wrapd/dosfsck ] ; then
- mv $path2dosfsck $wrapd/dosfsck
- cat > $path2dosfsck <<- 'EoDOSFSCK'
+ chmod 755 $path2mount
+ fi
+ # wrap umount
+ if [ -L $path2umount -a $(readlink $path2umount) = busybox ] ; then
+ rm -f $path2umount
+ cat > $path2umount <<- 'EoUMOUNTWRAP'
+ #!/bin/busybox sh
+ # a part of fakesh-kobo
+ for i do
+ case "${i%/}" in
+ /mnt/root) wrapping-mount-dosfsck.sh $i ; sync ;;
+ /mnt/user) chmod 1777 $i ; sync ;;
+ /mnt/onboard)
+ # busybox "xargs" does not have option -0 ,
+ # though "find" have -print0 ?!
+ find $i -xdev -type d -not -perm 777 \
+ -not -path $i -not -path ${i%/}/lost+found \
+ -exec chmod 777 '{}' \;
+ sync; sync
+ ;;
+ esac
+ done >/dev/null 2>&1
+ exec busybox umount "$@"
+ EoUMOUNTWRAP
+ chmod 755 $path2umount
+ fi
+ # wrap dosfsck
+ if [ -x $path2dosfsck -a ! -L $path2dosfsck ] ; then
+ [ -d $wrapd ] || mkdir -p -m 755 $wrapd
+ if [ ! -x $wrapd/dosfsck ] ; then
+ mv $path2dosfsck $wrapd/dosfsck
+ cat > $path2dosfsck <<- 'EoDOSFSCK'
#!/bin/busybox sh
# a part of fakesh-kobo
dev=''
esac
lastarg="$i"
done
- blkid | grep -q "$dev.* UUID=\"....-....\"" >/dev/null 2>&1 ||
- exit 0
- exec ${0/*}/.wrapped/dosfsck "$@"
+ rgex="^${dev}:.* (UUID=\"....-....\"|LABEL=\"rootfs\")"
+ blkid | grep -Eq "$rgex" >/dev/null 2>&1 || exit 0
+ exec ${0%/*}/.wrapped/dosfsck "$@"
EoDOSFSCK
- chmod 755 $path2dosfsck
+ chmod 755 $path2dosfsck
+ if [ -f ${1%/}/fs.md5sum ] ; then
+ md5x="$(md5sum $path2dosfsck | sed 's@ .*@ bin/dosfsck@')"
+ sed -i "s@^[^ ]* bin/dosfsck\$@$md5x@" ${1%/}/fs.md5sum
+ fi
+ fi
+ fi
+ exit 0
+ else # RESTORE if [ -n "$2" ]
+ # restore mount
+ if [ ! -L $path2mount -a -f $path2mount ] &&
+ grep -q '# a part of fakesh-kobo' $path2mount ; then
+ rm -f $path2mount
+ ln -s busybox $path2mount
+ fi
+ # restore umount
+ if [ ! -L $path2umount -a -f $path2umount ] &&
+ grep -q '# a part of fakesh-kobo' $path2umount ; then
+ rm -f $path2umount
+ ln -s busybox $path2umount
+ fi
+ # restore dosfsck
+ if [ -f $wrapd/dosfsck -a -f $path2dosfsck -a ! -L $path2dosfsck ] &&
+ grep -q '# a part of fakesh-kobo' $path2dosfsck ; then
+ rm -f $path2dosfsck
+ mv $wrapd/dosfsck $path2dosfsck
+ rmdir --ignore-fail-on-non-empty $wrapd
if [ -f ${1%/}/fs.md5sum ] ; then
md5x="$(md5sum $path2dosfsck | sed 's@ .*@ bin/dosfsck@')"
sed -i "s@^[^ ]* bin/dosfsck\$@$md5x@" ${1%/}/fs.md5sum
fi
fi
- fi
- exit 0
+ exit 0
+ fi >/dev/null 2>&1
fi
#### test code (if ! [ -d "$1" ])
cd $tstdir
mkdir bin
ln -s busybox bin/mount
+ln -s busybox bin/umount
cp "$me" bin/dosfsck
echo 'hoge-hoge bin/dosfsck' > fs.md5sum
# test
printf '\n==== before invocations ====\n'
+md5sum bin/dosfsck
ls -l $(find * ! -type d )
"$me" $tstdir
"$me" $tstdir
printf '\n==== after 2nd invocation ====\n'
ls -l $(find * ! -type d )
+cat fs.md5sum
printf \\n
-for x in bin/mount bin/dosfsck ; do
+for x in bin/mount bin/umount bin/dosfsck ; do
if busybox sh -n $x ; then
echo "### NO_SYNTAX_ERROR: $x"
else
fi
done
-exit 0
+"$me" $tstdir restore
+printf '\n==== after restore ====\n'
+ls -l $(find * ! -type d )
+cat fs.md5sum
+
+"$me" $tstdir
+printf '\n==== after 3rd invocation ====\n'
+ls -l $(find * ! -type d )
+cat fs.md5sum
+
+printf \\n
+for x in bin/mount bin/umount bin/dosfsck ; do
+ if busybox sh -n $x ; then
+ echo "### NO_SYNTAX_ERROR: $x"
+ else
+ busybox sh -nv $x
+ echo "*** SYNTAX_ERROR: $x"
+ exit 1
+ fi
+done
+echo "TestDir: $tstdir"
+exit 0