s243a

initrd/init:copy_folders() (tahrpup)

Apr 15th, 2018
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.99 KB | None | 0 0
  1. copy_folders() { #SAVE_LAYER=/pup_ro1 #Line 593 of initrd/init (tharpup)
  2.  echo -e "\n-------------------- copy_folders" #debug
  3.  echo "SAVE_MP=$SAVE_MP"
  4.  DESTDIR="/mnt/tmpfs/pup_ro1"
  5.  [ -d "$DESTDIR" ] || mkdir -p $DESTDIR
  6.  rm -r -f "$SAVE_LAYER"
  7.  SAVE_FN="$DESTDIR"
  8.  ln -s $DESTDIR $SAVE_LAYER
  9.  #BKFOLDERS now set in check for pupmode=77
  10.  BKLASTFOLDER="$(echo "${BKFOLDERS}" | head -n 1)"
  11.  #a boot option allows ignore last n sessions, also need to create a badlist...
  12.  if [ "$PIGNORELAST" ];then
  13.   BKBADLIST="$(echo "${BKFOLDERS}" | head -n ${PIGNORELAST})"
  14.   if [ -f ${SAVE_MP}/${BKLASTFOLDER}/.badfolders ];then
  15.    cp ${SAVE_MP}/${BKLASTFOLDER}/.badfolders ${DESTDIR}/
  16.    if [ $? -ne 0 ];then
  17.     #fallback, in case last folder badly corrupted...
  18.     BKPREVFOLDER="$(echo "${BKFOLDERS}" | head -n 2 | tail -n 1)"
  19.     [ -f ${SAVE_MP}/${BKPREVFOLDER}/.badfolders ] && cp ${SAVE_MP}/${BKPREVFOLDER}/.badfolders ${DESTDIR}/
  20.    fi
  21.   fi
  22.   echo "$BKBADLIST" >> ${DESTDIR}/.badfolders
  23.   #note, rc.shutdown and savesession-dvd 'touch' this file so it will get saved.
  24.   sync
  25.  else
  26.   [ -f ${SAVE_MP}/${BKLASTFOLDER}/.badfolders ] && cp ${SAVE_MP}/${BKLASTFOLDER}/.badfolders ${DESTDIR}/
  27.  fi
  28.  [ -f ${DESTDIR}/.badfolders ] && BKBADLIST="$(cat ${DESTDIR}/.badfolders | tr "\n" " ")"
  29.  echo "BKBADLIST=${BKBADLIST}" #debug
  30.  BKFOLDERS="$(echo -n "${BKFOLDERS}" | tr "\n" " ")"
  31.  for ONEFOLDER in ${BKFOLDERS}
  32.  do
  33.   if [ "$(echo -n "$BKBADLIST" | grep "${ONEFOLDER}")" != "" -o -L "${SAVE_MP}/${ONEFOLDER}" ];then
  34.    echo "$(printf "${L_FOLDER_MARKED_BAD}" "${ONEFOLDER}")" >/dev/console
  35.    continue #ignore bad folder.
  36.   fi
  37.   echo "$ONEFOLDER" #debug
  38.   echo -n "$(printf "${L_LOADING_FROM_CD}" "${ONEFOLDER}")" >/dev/console
  39.   #need to be careful not to overfill the ramdisk...
  40.   FREERAMDISK=$(df 2>/dev/null | grep /mnt/tmpfs | head -n 1 | tr -s " " | cut -f 4 -d " ")
  41.   SIZEFOLDER=$(du -k -s ${SAVE_MP}/${ONEFOLDER} | cut -f 1)
  42.   SIZEARCHIVE=0
  43.   if [ -d ${SAVE_MP}/${ONEFOLDER}/archive ];then
  44.    SIZEARCHIVE=$(du -k -s ${SAVE_MP}/${ONEFOLDER}/archive | cut -f 1)
  45.   fi
  46.   SIZESOURCE=$(expr $SIZEFOLDER - $SIZEARCHIVE)
  47.   if [ $FREERAMDISK -gt $SIZESOURCE ];then
  48.    #well, -u will only copy if files newer, so less stuff may get copied than calc'd above.
  49.    #need to copy everything except archive folder...
  50.    [ -d ${SAVE_MP}/${ONEFOLDER}/bin ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/bin ${DESTDIR}/
  51.    [ -d ${SAVE_MP}/${ONEFOLDER}/sbin ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/sbin ${DESTDIR}/
  52.    [ -d ${SAVE_MP}/${ONEFOLDER}/etc ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/etc ${DESTDIR}/
  53.    [ -d ${SAVE_MP}/${ONEFOLDER}/lib ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/lib ${DESTDIR}/
  54.    [ -d ${SAVE_MP}/${ONEFOLDER}/opt ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/opt ${DESTDIR}/
  55.    if [ -d ${SAVE_MP}/${ONEFOLDER}/root/.var_saved ];then #100820 see /etc/rc.d/functions4puppy
  56.     mkdir -p ${DESTDIR}/var
  57.     cp -a -u ${SAVE_MP}/${ONEFOLDER}/root/.var_saved/* ${DESTDIR}/var/
  58.    fi
  59.    [ -d ${SAVE_MP}/${ONEFOLDER}/root ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/root ${DESTDIR}/
  60.    [ -d ${SAVE_MP}/${ONEFOLDER}/root/.var_saved ] && rm -rf ${DESTDIR}/root/.var_saved
  61.    [ -d ${SAVE_MP}/${ONEFOLDER}/usr ] && cp -a -u ${SAVE_MP}/${ONEFOLDER}/usr ${DESTDIR}/
  62.    [ -f ${DESTDIR}/root/.XLOADED ] && rm -fv ${DESTDIR}/root/.XLOADED #toxic
  63.    cp -a -u ${SAVE_MP}/${ONEFOLDER}/*.sfs ${DESTDIR}/ 2>/dev/null
  64.    #delete deleted files (.wh.filename)... 110212 screen out .wh..wh..opq
  65.    WHITEOUTS="$(find ${DESTDIR} -xdev -type f -name .wh.* | grep -v '__dir_opaque' | grep -v '.wh..wh.')" #110212
  66.    echo "$WHITEOUTS" | while read DELWHITE ; do
  67.     DELFILE="$(echo -n "$DELWHITE" | sed -e 's/\.wh\.//g')"
  68.     if [ -e "$DELFILE" ];then
  69.      [ "$PDEBUG" ] && echo "Deleting $DELFILE" #debug
  70.      rm -rf "$DELFILE"
  71.      rm -rf "$DELWHITE"
  72.     fi
  73.    done
  74.    check_status 0 #display 'done' for each folder loaded.
  75.   else
  76.    printf "${L_RAM_DISK_FULL}\n" "${ONEFOLDER}"
  77.    check_status 1
  78.    break
  79.   fi
  80.  done
  81.  sync
  82.  echo -e "--------------------\n" # debug
  83. }
Advertisement
Add Comment
Please, Sign In to add comment