OSDN Git Service

easyKoboBackup version2, release
authorfakesh <fakesh@users.sourceforge.jp>
Wed, 20 Feb 2013 11:38:42 +0000 (20:38 +0900)
committerfakesh <fakesh@users.sourceforge.jp>
Wed, 20 Feb 2013 11:38:42 +0000 (20:38 +0900)
etc/fakesh/authenticate.sh [new file with mode: 0755]
etc/fakesh/fakesh.switches
etc/fakesh/setup-fakesh.sh
etc/fakesh/tools/koboBackup.sh
etc/fakesh/tools/wrapping-mount-dosfsck.sh

diff --git a/etc/fakesh/authenticate.sh b/etc/fakesh/authenticate.sh
new file mode 100755 (executable)
index 0000000..cd5b0e6
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/busybox sh
+export PATH="/root/bin:$PATH"
+export KOBO_passwd=''
+
+customauth=$FKSH_ONB/auth
+[ -x "$customauth" ] || exit 0
+
+KOBO_passwd="$($customauth)" # 1st call, get the password
+[ -z "$KOBO_passwd" ] && exit 0
+
+StopNickel.sh
+
+[ -f $FKSH_DNP ] || $FKSH_HOM/tools/genSimpPics.sh # on boot
+authlog="${FKSH_LOG%.*}_auth.log"
+[ -f "$authlog" ] || authlog=/dev/null
+$customauth >> "$authlog" 2>&1 # 2nd call, authenticate
+
+ContNickel.sh
+
+exit 0
index e50edf2..76c585f 100644 (file)
@@ -7,14 +7,14 @@ case "$pchain" in
     /root/bin/dispPics.sh -i sleep.seq
     echo mem > /sys/power/state
     toLOG '#WAKED_UP'
-#    $FKSH_HOM/authenticate.sh
+    $FKSH_HOM/authenticate.sh
   elif [ -s $FKSH_DNP ] ; then
     toLOG "#$stx DONTNAP $pchain"
   else
     toLOG "$pchain"
     echo mem > /sys/power/state
   fi
-  exit
+  @EXIT@0
 ;;
 *'- nickel - -c ACTION=remove /usr/local/Kobo/udev/usb')
   toLOG "# $pchain"
@@ -29,12 +29,12 @@ case "$pchain" in
     toLOG "# $pchain"
     rstat=$?
     killall on-animator.sh
-      touch $FKSH_DNP
 #     $FKSH_HOM/init.sh
-    exit $rstat
+      touch $FKSH_DNP
+    @EXIT@$rstat
   else
     toLOG "$pchain"
   fi
 ;;
 *) toLOG "$pchain" ;;
-esac
+esac >/dev/null 2>&1
index f82e87b..a05180f 100755 (executable)
@@ -35,6 +35,7 @@ setup_SA () {
     -v FKSH_HOM=$FKSH_HOM \
     -v FKSH_LOG=$FKSH_LOG \
     -v TZMIN=$TZMIN \
+    -v EXIT='exit ' \
     -v real_sh=$real_sh '{
       sub("@FKSH_ONB@", FKSH_ONB);
       sub("@FKSH_HOM@", FKSH_HOM);
@@ -44,6 +45,7 @@ setup_SA () {
     }
     /## hook switches/{
       while (getline <sw) {
+        sub("@EXIT@", EXIT);
         if ( $0 != "" ) { printf "  %s\n", $0;}
       }
       next;
index 9615334..4f5a32e 100755 (executable)
@@ -22,8 +22,7 @@ me="$(readlink -f "$0")"
 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
@@ -34,6 +33,7 @@ if [ "$bpp" = 16 ] ; then
   dda="bs=$bs count=$cnt"
 fi
 
+imgBase=''
 dispImg () {
   local i
   [ -z "$imgBase" ] && return
@@ -49,33 +49,34 @@ dispImg () {
 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
 
@@ -228,11 +229,13 @@ pzz="$(awk -v "d=$vol" '
 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
@@ -314,19 +317,19 @@ elif [ $pz -lt 12000 ] ; then
   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
@@ -335,9 +338,9 @@ fi
 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]*)
@@ -408,7 +411,7 @@ case "$spcl" in
   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'
@@ -441,30 +444,33 @@ if [ -f ${paramfile}CUR ] ; then
        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]*
@@ -699,50 +705,31 @@ for d in src/.* src/* ; do
   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
@@ -763,21 +750,8 @@ if [ -n "$spcl" ] ; then
     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
index 661c030..6d453f5 100755 (executable)
@@ -6,11 +6,15 @@
 
 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
@@ -35,23 +39,45 @@ if [ -d "$1" ] ; then
          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=''
@@ -67,18 +93,44 @@ if [ -d "$1" ] ; then
          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" ])
@@ -90,12 +142,14 @@ me=$(readlink -f "$0")
 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
@@ -105,9 +159,10 @@ ls -l $(find * ! -type d )
 "$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
@@ -117,5 +172,26 @@ for x in bin/mount bin/dosfsck ; do
   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