Advertisement
Guest User

Untitled

a guest
May 16th, 2017
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 19.71 KB | None | 0 0
  1. #!/bin/sh
  2. # Install or download packages and/or sysupgrade.
  3. # Script version 1.34 Rafal Drzymala 2013-2014
  4. #
  5. # Changelog
  6. #
  7. #   1.32    RD  Removed I/O control after post install file removing
  8. #   1.33    RD  Added variables to image source path
  9. #   1.34    RD  Added image file and packages files sums calculation
  10. #   custom
  11. #
  12. # Destination /sbin/install.sh
  13. #
  14. . /etc/openwrt_release
  15.  
  16. CMD=""
  17. OFFLINE_POST_INSTALL="1"
  18. INCLUDE_INSTALLED="1"
  19. HOST_NAME=""
  20. BACKUP_ENABLE="1"
  21. BACKUP_PATH=""
  22. BACKUP_FILE=""
  23. INSTALL_PATH="/tmp"
  24. PACKAGES=""
  25. IMAGE_SOURCE=""
  26. IMAGE_FILENAME="sysupgrade.bin"
  27. POST_INSTALL_SCRIPT="post-installer"
  28. POST_INSTALLER="/bin/$POST_INSTALL_SCRIPT.sh"
  29. POST_INSTALLER_LOG="/usr/$POST_INSTALL_SCRIPT.log"
  30. INSTALLER_KEEP_FILE="/lib/upgrade/keep.d/$POST_INSTALL_SCRIPT"
  31. RC_LOCAL="/etc/rc.local"
  32. POST_INSTALL_REMOVE="/etc/config/*-opkg"
  33. RUN_SCRIPT=""
  34.  
  35. check_exit_code() {
  36.     local CODE=$?
  37.     if [ $CODE != 0 ]; then
  38.         echo "Abort, error ($CODE) detected!"
  39.         exit $CODE
  40.     fi
  41. }
  42.  
  43. get_mount_device() { # <Path to check>
  44.     local CHECK_PATH=$1
  45.     [ -L $CHECK_PATH ] && CHECK_PATH=$($BIN_LS -l $CHECK_PATH | $BIN_AWK -F " -> " '{print $2}')
  46.     $BIN_AWK -v path="$CHECK_PATH" 'BEGIN{FS=" ";device=""}path~"^"$2{if($2>point){device=$1;point=$2}}END{print device}' /proc/mounts
  47.     check_exit_code
  48. }
  49.  
  50. which_binary() { # <Name of Binary> [<Name of Binary> [...]]
  51.     while [ -n "$1" ]; do
  52.         local WHICH=$(which $1)
  53.         if [ "$WHICH" == "" ]; then
  54.             echo "Binary $1 not found in system!"
  55.             exit 1
  56.         else
  57.             eval "export -- \"BIN_$(echo $1 | tr '[a-z]' '[A-Z]')=$WHICH\""
  58.         fi
  59.         shift
  60.     done
  61. }
  62.  
  63. add_to_keep_file() { # <Content to save> <Root path>
  64.     local CONTENT="$1"
  65.     local ROOT_PATH="$2"
  66.     $BIN_ECHO "$1">>$ROOT_PATH$INSTALLER_KEEP_FILE
  67.     check_exit_code
  68. }
  69.  
  70. run_script() { # <Event>
  71.     if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
  72.         $BIN_ECHO "Run script $RUN_SCRIPT $1 ..."
  73.         $RUN_SCRIPT $1
  74.         check_exit_code
  75.         $BIN_ECHO "Script $RUN_SCRIPT exited."
  76.     fi
  77. }
  78.  
  79. add_to_post_installer_log() { # <Content to save>
  80.     $BIN_ECHO "$($BIN_DATE) $1">>$POST_INSTALLER_LOG
  81. }
  82.  
  83. package_script_execute() { # <Package> <Script name> <Command>
  84.     local PACKAGE="$1"
  85.     local SCRIPT="$2"
  86.     local CMD="$3"
  87.     if [ -x $SCRIPT ]; then
  88.         $BIN_ECHO "Executing $SCRIPT $CMD for package $PACKAGE"
  89.         if [ "$CMD" == "enable" ] || [ "$CMD" == "stop" ]; then
  90.             $SCRIPT $CMD
  91.         else
  92.             $SCRIPT $CMD
  93.             check_exit_code
  94.         fi
  95.     fi
  96. }
  97.  
  98. update_path_vars() { # <String to update>
  99.     local PATH_VARS="$1"
  100.     local TARGET=$(echo "$DISTRIB_TARGET" | cut -d "/" -f 1)
  101.     local SUBTARGET=$(echo "$DISTRIB_TARGET" | cut -d "/" -f 2)
  102.     local BOARD_NAME=$($BIN_CAT /tmp/sysinfo/model | $BIN_TR '[A-Z]' '[a-z]')
  103.     local BOARD_VER=$($BIN_ECHO "$BOARD_NAME" | $BIN_CUT -d " " -f 3)
  104.     BOARD_NAME=$($BIN_ECHO "$BOARD_NAME" | $BIN_CUT -d " " -f 2)
  105.     [ -n "$BOARD_VER" ] && BOARD_NAME="$BOARD_NAME-$BOARD_VER"
  106.     [ -n "$DISTRIB_CODENAME" ] && PATH_VARS=${PATH_VARS//\<CODENAME\>/$DISTRIB_CODENAME}
  107.     [ -n "$TARGET" ] && PATH_VARS=${PATH_VARS//\<TARGET\>/$TARGET}
  108.     [ -n "$SUBTARGET" ] && PATH_VARS=${PATH_VARS//\<SUBTARGET\>/$SUBTARGET}
  109.     [ -n "$BOARD_NAME" ] && PATH_VARS=${PATH_VARS//\<HARDWARE\>/$BOARD_NAME}
  110.     $BIN_ECHO "$PATH_VARS"
  111. }
  112.  
  113. caution_alert() {
  114.     local KEY
  115.     $BIN_ECHO "Caution!"
  116.     $BIN_ECHO "You can damage the system or hardware. You perform this operation at your own risk."
  117.     read -t 60 -n 1 -p "Press Y to continue " KEY
  118.     $BIN_ECHO ""
  119.     [ "$KEY" != "Y" ] && exit 0
  120. }
  121.  
  122. print_help() {
  123.     $BIN_ECHO -e "Usage:"\
  124.             "\n\t$0 [install|download|sysupgrade] [-h|--help] [-o|--online] [-b|--backup-off] [-i|--exclude-installed]"\
  125.             "\n\nCommands:"\
  126.             "\n\t\tdownload\tdownload all packages and system image do install directory,"\
  127.             "\n\t\tinstall\t\tbackup configuration,"\
  128.             "\n\t\t\t\tstop and disable packages,"\
  129.             "\n\t\t\t\tinstall packages,"\
  130.             "\n\t\t\t\trestore configuration,"\
  131.             "\n\t\t\t\tenable and start packages."\
  132.             "\n\t\tsysupgrade\tbackup configuration,"\
  133.             "\n\t\t\t\tdownload all packages and system image do install directory (in off-line mode),"\
  134.             "\n\t\t\t\tprepare post upgrade package installer,"\
  135.             "\n\t\t\t\tsystem upgrade,"\
  136.             "\n\t\t\t\t... reboot system ...,"\
  137.             "\n\t\t\t\tif extroot exist, clean check sum and reboot system,"\
  138.             "\n\t\t\t\tinstall packages,"\
  139.             "\n\t\t\t\trestore configuration,"\
  140.             "\n\t\t\t\tcleanup installation,"\
  141.             "\n\t\t\t\t... reboot system ..."\
  142.             "\n\t\tbackup\t\tbackup configuration"\
  143.             "\n\nOptions:"\
  144.             "\n\t\t-h\t\tThis help,"\
  145.             "\n\t\t-b\t\tDisable configuration backup and restore during installation or system upgrade process."\
  146.             "\n\t\t\t\tBy default, backup and restore configuration are enabled."\
  147.             "\n\t\t\t\tPath to backup have to on external device otherwise during system upgrade can be lost."\
  148.             "\n\t\t-o\t\tOnline packages installation by post-installer."\
  149.             "\n\t\t\t\tInternet connection is needed after system restart and before packages installation."\
  150.             "\n\t\t-i\t\tExclude installed packages. Only packages from configuration can be processed."\
  151.             "\n\nCurrent configuration:"\
  152.             "\n\tLocal install directory : '$($BIN_UCI -q get system.@sysupgrade[0].localinstall)'"\
  153.             "\n\tConfiguration backup direcory : '$($BIN_UCI -q get system.@sysupgrade[0].backupconfig)'"\
  154.             "\n\tImage source URL : '$($BIN_UCI -q get system.@sysupgrade[0].imagesource)'"\
  155.             "\n\tRun external script : '$($BIN_UCI -q get system.@sysupgrade[0].runscript)'"\
  156.             "\n\tPackages: '$($BIN_UCI -q get system.@sysupgrade[0].opkg)'"\
  157.             "\n\nExamples configuration in /etc/config/system"\
  158.             "\n\tconfig sysupgrade"\
  159.             "\n\t\toption localinstall '/install'"\
  160.             "\n\t\toption backupconfig '/backup'"\
  161.             "\n\t\toption imagesource 'http://dl.eko.one.pl/<CODENAME>/<TARGET>/openwrt-<TARGET>-<SUBTARGET>-<HARDWARE>-squashfs-sysupgrade.bin'"\
  162.             "\n\t\tlist opkg libusb"\
  163.             "\n\t\tlist opkg kmod-usb-serial-option"\
  164.             "\n\t\tlist opkg kmod-usb-net-cdc-ether"\
  165.             "\n"
  166.     exit 0
  167. }
  168.  
  169. initialize() { # <Script parametrs>
  170.     which_binary echo basename dirname logger chmod uci date ls cat cut tr wc rm mv sync reboot awk grep wget opkg sysupgrade md5sum ping logread gzip
  171.     while [ -n "$1" ]; do
  172.         case "$1" in
  173.             install|download|sysupgrade|backup) CMD="$1";;
  174.             -h|--help) print_help;;
  175.             -b|--backup-off) BACKUP_ENABLE="";;
  176.             -o|--online) OFFLINE_POST_INSTALL="";;
  177.             -i|--exclude-installed) INCLUDE_INSTALLED="";;
  178.             -*) $BIN_ECHO "Invalid option: $1";print_help;;
  179.             *) $BIN_ECHO "Invalid command: $1";print_help;;
  180.         esac
  181.         shift
  182.     done
  183.     [ "$CMD" == "" ] && CMD=install
  184.     [ "$CMD" == "backup" ] && BACKUP_ENABLE="1"
  185.     HOST_NAME=$($BIN_UCI -q get system.@system[0].hostname)
  186.     if [ "$HOST_NAME" == "" ]; then
  187.         $BIN_ECHO "Error while getting host name!"
  188.         exit 1
  189.     fi
  190.     if [ "$CMD" == "download" ] || ([ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ]); then
  191.         INSTALL_PATH=$($BIN_UCI -q get system.@sysupgrade[0].localinstall)
  192.         if [ "$INSTALL_PATH" == "" ]; then
  193.             $BIN_ECHO "Install path is empty!"
  194.             exit 1
  195.         fi 
  196.         if [ ! -d "$INSTALL_PATH" ]; then
  197.             $BIN_ECHO "Install path not exist!"
  198.             exit 1
  199.         fi 
  200.     fi
  201.     if [ "$BACKUP_ENABLE" != "" ]; then
  202.         BACKUP_PATH=$($BIN_UCI -q get system.@sysupgrade[0].backupconfig)
  203.         BACKUP_FILE="$BACKUP_PATH/backup-$HOST_NAME-$($BIN_DATE +%Y-%m-%d-%H-%M-%S).tar.gz"    
  204.         if [ ! -d "$BACKUP_PATH" ]; then
  205.             $BIN_ECHO "Backup path not exist!"
  206.             exit 1
  207.         fi
  208.         local MOUNT_DEVICE=$(get_mount_device $BACKUP_PATH)
  209.         if [ "$MOUNT_DEVICE" == "rootfs" ] || [ "$MOUNT_DEVICE" == "sysfs" ] || [ "$MOUNT_DEVICE" == "tmpfs" ]; then
  210.             $BIN_ECHO "Backup path ($BACKUP_PATH) must be on external device. Now is mounted on $MOUNT_DEVICE."
  211.             exit 1
  212.         fi
  213.     fi
  214.     if [ "$CMD" == "download" ] || [ "$CMD" == "sysupgrade" ]; then
  215.         IMAGE_SOURCE=$($BIN_UCI -q get system.@sysupgrade[0].imagesource)
  216.         local IMAGE_PREFIX=$($BIN_UCI -q get system.@sysupgrade[0].imageprefix)
  217.         local IMAGE_SUFFIX=$($BIN_UCI -q get system.@sysupgrade[0].imagesuffix)
  218.         if [ -n "$IMAGE_PREFIX" ] || [ -n "$IMAGE_SUFFIX" ]; then
  219.             IMAGE_SOURCE="$IMAGE_SOURCE/$IMAGE_PREFIX<HARDWARE>$IMAGE_SUFFIX"
  220.         fi
  221.     fi
  222.     RUN_SCRIPT=$($BIN_UCI -q get system.@sysupgrade[0].runscript)
  223.     PACKAGES=$($BIN_UCI -q get system.@sysupgrade[0].opkg)
  224.     if [ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ]; then
  225.         local MOUNT_DEVICE=$(get_mount_device $INSTALL_PATH)
  226.         if [ "$MOUNT_DEVICE" == "rootfs" ] || [ "$MOUNT_DEVICE" == "sysfs" ] || [ "$MOUNT_DEVICE" == "tmpfs" ]; then
  227.             $BIN_ECHO "Install path ($INSTALL_PATH) must be on external device. Now is mounted on $MOUNT_DEVICE."
  228.             exit 1
  229.         fi
  230.     fi
  231.     $BIN_ECHO "Operation $CMD on $HOST_NAME - $DISTRIB_ID $DISTRIB_RELEASE ($DISTRIB_REVISION)"
  232. }
  233.  
  234. update_repository() {
  235.     run_script before_opkg_update
  236.     $BIN_ECHO "Updating packages repository ..."
  237.     $BIN_OPKG update
  238.     check_exit_code
  239.     $BIN_ECHO "Packages repository updated."
  240. }
  241.  
  242. check_installed() {
  243.     if [ "$INCLUDE_INSTALLED" != "" ]; then
  244.         $BIN_ECHO "Checking installed packages ..."
  245.         local INSTALLED=$(/bin/list-user-installed-packages.sh)
  246.         check_exit_code
  247.         INSTALLED=${INSTALLED%% }
  248.         if [ "$INSTALLED" != "" ]; then
  249.             $BIN_ECHO "Installed packages not in configuration: $INSTALLED."
  250.             PACKAGES="$PACKAGES $INSTALLED"
  251.         else
  252.             $BIN_ECHO "All packages from configuration."
  253.         fi
  254.     fi
  255. }
  256.  
  257. check_dependency() {
  258.     if [ "$PACKAGES" != "" ]; then
  259.         $BIN_ECHO "Checking packages dependency ..."
  260.         $BIN_ECHO "Main packages: $PACKAGES."
  261.         local PACKAGES_COUNT=-1
  262.         while [ "$($BIN_ECHO $PACKAGES | $BIN_WC -w)" != "$PACKAGES_COUNT" ]; do
  263.             PACKAGES_COUNT=$($BIN_ECHO $PACKAGES | $BIN_WC -w)
  264.             local DEPENDS
  265.             local DEPENDS_COUNT=-1
  266.             while [ "$($BIN_ECHO $DEPENDS | $BIN_WC -w)" != "$DEPENDS_COUNT" ]; do
  267.                 DEPENDS_COUNT=$($BIN_ECHO $DEPENDS | $BIN_WC -w)
  268.                 DEPENDS=$DEPENDS$($BIN_OPKG depends -A $DEPENDS $PACKAGES | $BIN_AWK -v PKG="$DEPENDS $PACKAGES " 'BEGIN{ORS=" "}{if($2=="" && !seen[$1]++ && index(PKG,$1" ")==0)print $1}')
  269.                 check_exit_code
  270.             done
  271.             DEPENDS=${DEPENDS%% }
  272.             [ "$DEPENDS" != "" ] && PACKAGES="$DEPENDS $PACKAGES"
  273.             PACKAGES=$($BIN_OPKG whatprovides -A $PACKAGES | $BIN_AWK -v PKG="$PACKAGES " 'function Select(){if(CNT<1)return;SEL=0;for(ITEM in LIST)if(index(PKG,LIST[ITEM]" ")!=0)SEL=ITEM;if(!seen[LIST[SEL]]++)print LIST[SEL];delete LIST;CNT=0}BEGIN{ORS=" "}{if($3!="")Select();else LIST[CNT++]=$1}END{Select()}')
  274.             PACKAGES=${PACKAGES%% }
  275.             PACKAGES=${PACKAGES/libc/}
  276.         done
  277.         $BIN_ECHO "All packages: $PACKAGES."
  278.     fi
  279. }
  280.  
  281. config_backup() {
  282.     if [ "$BACKUP_ENABLE" != "" ]; then
  283.         if [ ! -d "$BACKUP_PATH" ]; then
  284.             $BIN_ECHO "Backup path not exist."
  285.             exit 1
  286.         fi
  287.         if [ "$BACKUP_FILE" == "" ]; then
  288.             $BIN_ECHO "Backup file name is empty."
  289.             exit 1
  290.         fi
  291.         $BIN_ECHO "Making configuration backup to $BACKUP_FILE ..."
  292.         $BIN_SYSUPGRADE --create-backup $BACKUP_FILE
  293.         check_exit_code
  294.         $BIN_CHMOD 640 $BACKUP_FILE
  295.         check_exit_code
  296.         $BIN_ECHO "Configuration backuped."
  297.     fi
  298. }
  299.  
  300. config_restore() {
  301.     if [ "$BACKUP_ENABLE" != "" ]; then
  302.         if [ "$BACKUP_FILE" == "" ]; then
  303.             $BIN_ECHO "Backup file name is empty."
  304.             exit 1
  305.         else
  306.             $BIN_ECHO "Restoring configuration from backup $BACKUP_FILE ..."
  307.             $BIN_SYSUPGRADE --restore-backup $BACKUP_FILE
  308.             check_exit_code
  309.             $BIN_ECHO "Configuration restored."
  310.         fi
  311.     fi
  312. }
  313.  
  314. packages_disable() {
  315.     if [ "$PACKAGES" != "" ]; then
  316.         $BIN_ECHO "Disabling packages ..."
  317.         local SCRIPT
  318.         for PACKAGE in $PACKAGES; do
  319.             for SCRIPT in $($BIN_OPKG files $PACKAGE | $BIN_GREP /etc/init.d/); do
  320.                 package_script_execute $PACKAGE $SCRIPT disable
  321.                 package_script_execute $PACKAGE $SCRIPT stop
  322.             done
  323.         done
  324.         $BIN_ECHO "Packages are disabled."
  325.     fi
  326. }
  327.  
  328. packages_enable() {
  329.     if [ "$PACKAGES" != "" ]; then
  330.         $BIN_ECHO "Enabling packages ..."
  331.         local SCRIPT
  332.         for PACKAGE in $PACKAGES; do
  333.             for SCRIPT in $($BIN_OPKG files $PACKAGE | $BIN_GREP /etc/init.d/); do
  334.                 package_script_execute $PACKAGE $SCRIPT enable
  335.                 package_script_execute $PACKAGE $SCRIPT start
  336.             done
  337.         done
  338.         $BIN_ECHO "Packages are enabled."
  339.     fi
  340. }
  341.  
  342. packages_install() {
  343.     if [ "$PACKAGES" != "" ]; then
  344.         run_script before_opkg_install
  345.         $BIN_ECHO "Installing packages ..."
  346.         $BIN_OPKG $CMD $PACKAGES
  347.         check_exit_code
  348.         $BIN_RM $POST_INSTALL_REMOVE
  349.         $BIN_ECHO "Packages are installed."
  350.         run_script after_opkg_install
  351.     fi
  352. }
  353.  
  354. packages_download() {
  355.     if [ "$PACKAGES" != "" ]; then
  356.         local PACKAGES_FILE="Packages"
  357.         local PACKAGES_LIST="$PACKAGES_FILE.gz"
  358.         $BIN_ECHO "Downloading packages to $INSTALL_PATH ..."
  359.         $BIN_ECHO exec command: $BIN_OPKG download $PACKAGES
  360.         cd $INSTALL_PATH
  361.         $BIN_RM -f *.ipk
  362.         $BIN_OPKG download $PACKAGES
  363.         check_exit_code
  364.         $BIN_ECHO "Building packages information ..."
  365.         [ -f $INSTALL_PATH/$PACKAGES_FILE ] && $BIN_RM -f $INSTALL_PATH/$PACKAGES_FILE
  366.         [ -f $INSTALL_PATH/$PACKAGES_LIST ] && $BIN_RM -f $INSTALL_PATH/$PACKAGES_LIST
  367.         for PACKAGE in $PACKAGES; do
  368.             $BIN_ECHO "Getting information for package $PACKAGE."
  369.             $BIN_OPKG info $PACKAGE >>$INSTALL_PATH/$PACKAGES_FILE
  370.             check_exit_code
  371.         done
  372.         $BIN_ECHO "Compressing packages information as $INSTALL_PATH/$PACKAGES_LIST ..."
  373.         $BIN_AWK '{if($0!~/^Status\:|^Installed-Time\:/)print $0}' $INSTALL_PATH/$PACKAGES_FILE | $BIN_GZIP -c9 >$INSTALL_PATH/$PACKAGES_LIST
  374.         check_exit_code
  375.         $BIN_RM -f $INSTALL_PATH/$PACKAGES_FILE
  376.         check_exit_code
  377.         $BIN_ECHO "Packages are downloaded."
  378.     fi
  379. }
  380.  
  381. image_download() {
  382.     if [ "$IMAGE_SOURCE" == "" ]; then
  383.         $BIN_ECHO "Image source information is empty."
  384.         exit 1
  385.     fi
  386.     local IMAGE_REMOTE_NAME="$(update_path_vars $IMAGE_SOURCE)"
  387.     local IMAGE_LOCAL_NAME="$INSTALL_PATH/$IMAGE_FILENAME"
  388.     local SUMS_REMOTE_NAME="$($BIN_DIRNAME $IMAGE_REMOTE_NAME)/md5sums"
  389.     local SUMS_LOCAL_NAME="$INSTALL_PATH/md5sums"
  390.     [ -f $IMAGE_LOCAL_NAME ] && $BIN_RM -f $IMAGE_LOCAL_NAME
  391.     $BIN_ECHO "Downloading system image as $IMAGE_LOCAL_NAME from $IMAGE_REMOTE_NAME ..."  
  392.     $BIN_WGET -O $IMAGE_LOCAL_NAME $IMAGE_REMOTE_NAME
  393.     check_exit_code
  394.     [ -f $SUMS_LOCAL_NAME ] && $BIN_RM -f $SUMS_LOCAL_NAME
  395.     #$BIN_ECHO "Downloading images sums as $SUMS_LOCAL_NAME from $SUMS_REMOTE_NAME ..."
  396.     #$BIN_WGET -O $SUMS_LOCAL_NAME $SUMS_REMOTE_NAME
  397.     #check_exit_code
  398.     #$BIN_ECHO "Checking system image control sum ..." 
  399.     #local SUM_ORG=$($BIN_GREP $($BIN_BASENAME $IMAGE_REMOTE_NAME) $SUMS_LOCAL_NAME | $BIN_CUT -d " " -f 1)
  400.     #check_exit_code
  401.     #local SUM_FILE=$($BIN_MD5SUM $IMAGE_LOCAL_NAME | $BIN_CUT -d " " -f 1)
  402.     #check_exit_code
  403.     #if [ "$SUM_ORG" == "" ]; then
  404.     #   $BIN_ECHO "Can't get original control sum!"
  405.     #   exit 1
  406.     #elif [ "$SUM_FILE" == "" ]; then
  407.     #   $BIN_ECHO "Can't calculate system image control sum!"
  408.     #   exit 1
  409.     #elif [ "$SUM_ORG" != "$SUM_FILE" ]; then
  410.     #   $BIN_ECHO "Downloaded system image is damaged!"
  411.     #   exit 1
  412.     #else
  413.     #   $BIN_ECHO "System image is downloaded and checksum is correct."
  414.     #fi
  415.     #$BIN_ECHO "Calculate new checksum to file $SUMS_LOCAL_NAME ..."
  416.     #$BIN_MD5SUM $IMAGE_LOCAL_NAME $($BIN_DIRNAME $IMAGE_LOCAL_NAME)/*.ipk >$SUMS_LOCAL_NAME
  417.     #check_exit_code
  418.     run_script after_image_downloaded
  419. }
  420.  
  421. installer_prepare() {
  422.     $BIN_ECHO "Preparing packages installer in $POST_INSTALLER ..."
  423.     $BIN_ECHO -e "#!/bin/sh"\
  424.             "\n# Script auto-generated by $0"\
  425.             "\n. /etc/diag.sh"\
  426.             "\nget_status_led"\
  427.             "\nset_state preinit"\
  428.             "\nif [ -d /tmp/overlay-disabled ]; then"\
  429.             "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Removing overlay-rootfs checksum and force reboot\""\
  430.             "\n\t$BIN_RM -f /tmp/overlay-disabled/.extroot.md5sum"\
  431.             "\n\t$BIN_RM -f /tmp/overlay-disabled/etc/extroot.md5sum"\
  432.             "\nelif [ -d /tmp/whole_root-disabled ]; then"\
  433.             "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Removing whole-rootfs checksum and force reboot\""\
  434.             "\n\t$BIN_RM -f /tmp/whole_root-disabled/.extroot.md5sum"\
  435.             "\n\t$BIN_RM -f /tmp/whole_root-disabled/etc/extroot.md5sum"\
  436.             "\nelse"\
  437.             "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Start instalation of packages\"">$POST_INSTALLER
  438.     check_exit_code
  439.     if [ "$OFFLINE_POST_INSTALL" != "" ]; then
  440.         $BIN_ECHO -e "\t$BIN_CAT /etc/opkg.conf | $BIN_AWK 'BEGIN{print \"src/gz local file:/$INSTALL_PATH\"}!/^src/{print \$0}' >/etc/opkg.conf">>$POST_INSTALLER
  441.         check_exit_code
  442.     else
  443.         $BIN_ECHO -e "\tuntil $BIN_PING -q -W 30 -c 1 8.8.8.8 &>/dev/null; do"\
  444.                 "\t\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Wait for internet connection\""\
  445.                 "\n\tdone">>$POST_INSTALLER
  446.         check_exit_code
  447.     fi
  448.     if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
  449.         $BIN_ECHO -e "\t$RUN_SCRIPT before_opkg_update | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
  450.         check_exit_code
  451.     fi
  452.     $BIN_ECHO -e "\t$BIN_OPKG update | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
  453.     if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
  454.         $BIN_ECHO -e "\t$RUN_SCRIPT before_opkg_install | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
  455.         check_exit_code
  456.     fi
  457.     $BIN_ECHO -e "\tPACKAGES=\"$PACKAGES\""\
  458.             "\n\tfor PACKAGE in \$PACKAGES; do"\
  459.             "\n\t\t$BIN_OPKG install \$PACKAGE | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT"\
  460.             "\n\t\tfor SCRIPT in \$($BIN_OPKG files \$PACKAGE | $BIN_GREP /etc/init.d/); do"\
  461.             "\n\t\t\tif [ -x \$SCRIPT ]; then"\
  462.             "\n\t\t\t\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Executing \$SCRIPT enable for package \$PACKAGE\""\
  463.             "\n\t\t\t\t\$SCRIPT enable | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT"\
  464.             "\n\t\t\tfi"\
  465.             "\n\t\tdone"\
  466.             "\n\tdone">>$POST_INSTALLER
  467.     check_exit_code
  468.     if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
  469.         $BIN_ECHO -e "\t$RUN_SCRIPT after_opkg_install | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
  470.         check_exit_code
  471.     fi
  472.     if [ "$BACKUP_ENABLE" != "" ]; then
  473.         $BIN_ECHO -e "\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Restoring configuration backup from $BACKUP_FILE\""\
  474.                 "\n\t$BIN_SYSUPGRADE --restore-backup $BACKUP_FILE">>$POST_INSTALLER
  475.         check_exit_code
  476.     fi
  477.     $BIN_ECHO -e "\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Stop installation of packages, cleaning and force reboot\""\
  478.             "\n\t$BIN_RM $POST_INSTALL_REMOVE"\
  479.             "\n\t$BIN_RM -f $INSTALLER_KEEP_FILE"\
  480.             "\n\t$BIN_AWK -v installer=\"$POST_INSTALLER\" '\$0!~installer' $RC_LOCAL>$RC_LOCAL.tmp"\
  481.             "\n\t$BIN_MV -f $RC_LOCAL.tmp $RC_LOCAL"\
  482.             "\n\t#$BIN_RM -f $POST_INSTALLER"\
  483.             "\nfi"\
  484.             "\n$BIN_LOGREAD >>$POST_INSTALLER_LOG"\
  485.             "\n$BIN_SYNC"\
  486.             "\n$BIN_REBOOT -f"\
  487.             "\n# Done.">>$POST_INSTALLER
  488.     check_exit_code
  489.     $BIN_CHMOD 777 $POST_INSTALLER
  490.     check_exit_code
  491.     add_to_keep_file $POST_INSTALLER
  492.     [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ] && add_to_keep_file $RUN_SCRIPT
  493.     $BIN_ECHO "Setting autorun packages installer on next boot in $RC_LOCAL ..."
  494.     add_to_keep_file $RC_LOCAL
  495.     $BIN_ECHO -e "[ -x $POST_INSTALLER ] && $POST_INSTALLER\n$($BIN_CAT $RC_LOCAL)">$RC_LOCAL
  496.     check_exit_code
  497.     add_to_post_installer_log "Packages installer prepared"
  498.     $BIN_ECHO "Packages installer prepared."
  499. }
  500.  
  501. sysupgrade_execute() {
  502.     $BIN_ECHO "Upgrading system from image $INSTALL_PATH/$IMAGE_FILENAME ..."
  503.     add_to_keep_file $0
  504.     add_to_post_installer_log "Running system upgrade"
  505.     cd $INSTALL_PATH
  506.     $BIN_SYSUPGRADE $IMAGE_FILENAME
  507. }
  508.  
  509. # Main routine
  510. initialize $@
  511. [ "$CMD" == "backup" ] && config_backup && exit
  512. [ "$CMD" == "sysupgrade" ] && caution_alert
  513. update_repository
  514. check_installed
  515. check_dependency
  516. ([ "$CMD" == "install" ] || [ "$CMD" == "sysupgrade" ]) && config_backup
  517. [ "$CMD" == "install" ] && packages_disable && packages_install
  518. ([ "$CMD" == "download" ] || ([ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ])) && packages_download
  519. [ "$CMD" == "install" ] && config_restore && packages_enable
  520. ([ "$CMD" == "download" ] || [ "$CMD" == "sysupgrade" ]) && image_download
  521. [ "$CMD" == "sysupgrade" ] && installer_prepare && packages_disable && sysupgrade_execute
  522. $BIN_ECHO "Done."
  523. # Done.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement