1

Temat: Aktualizacja AA

Witajcie ponownie,

Po przesiadce z Gargoyle na AA zrobiłem system prawie-pod-siebie, ale było to kilka tygodni temu.
Widzę nowe wersje AA, jednak z ostatniej aktualizacji pamiętam jedynie problemy z extrootem.

Powiedzcie, czy aktualizacja istniejącej instalacji przez np. luci albo jakkolwiek inaczej używając paczki 'sysupgrade' ma szansę być dokonaną bez rewolucji w plikach/konfigach?
Czy to ja nie umiem czy po praktycznie każdym upgrade konieczne jest stawianie prawie wszystkiego od zera?

2

Odp: Aktualizacja AA

Jak zrobisz upgrade to co najwyżej są zachowywane niektóre pliki konfiguracyjne. Nie są natomiast inne programy czy zmany które samodzielnie wykonałeś w systemie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Aktualizacja AA

Czy jest zatem sposób (na portalu nie znalazłem) na wykonanie tego procesu w miarę bezboleśnie?
Ewentualnie czy ktoś się podzieli swoim mini-howto tego jak być na bieżąco z softem w ruterze bez tracenia x czasu na rekonfigurację za każdym razem?

Backup? Odtwarzanie różnic? Coś innego?

4

Odp: Aktualizacja AA

Backup: http://openrouter.info/index.php?option … ;Itemid=61

Z tym że wszystkie zmiany jakie zaszły z wersji na wersję w plikach konfiguracyjnych to sam musisz wprowadzić. Ew jak masz extroota to możesz zaktualizować same pakiety które sie zmieniły, np. sterowniki wifi.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez Rafciq 2014-03-08 22:34:21)

Odp: Aktualizacja AA

Witam,
nie wiem czy Tobie pomogę, ale miałem podobny problem z częstymi aktualizacjami. Tyle że oprócz aktualizacji firmware i pakietów chciałem to wszystko robić zdalnie na routerach które są daleko ode mnie.
Zależało mi na przeprowadzeniu tego procesu automatycznie i bezboleśnie, bez potrzeby „podejścia” do routera.

Zrobiłem skrypt który wykonuje jedną z trzech operacji:

  • download – pobranie pakietów i firmware-u od katalogu

  • install – instalacja pakietów z ich wyłączeniem i włączeniem + kopia zapasowa przed i przywrócenie konfiguracji po

  • sysupgrade – w skrócie aktualizacjia firmwar-u i instalacja pakietów + kopia zapasowa przed i przywrócenie konfiguracji po

  • backup – kopia konfiguracji

Mały help: install.sh –h

Usage:
    /sbin/install.sh [install|download|sysupgrade] [-h|--help] [-o|--online] [-b|--backup-off] [-i|--exclude-installed]

Commands:
    download    download all packages and system image do install directory.
    install        backup configuration,
                stop and disable packages,
                install packages,
                restore configuration,
                enable and start packages.
    sysupgrade    backup configuration,
                download all packages and system image do install directory (in off-line mode),
                prepare post upgrade package installer,
                system upgrade,
                ... reboot system ...,
                if extroot exist, clean check sum and reboot system,
                install packages,
                restore configuration,
                cleanup installation,
                ... reboot system ...
    backup    backup configuration,

Options:
    -h            This help,
    -b            Disable configuration backup and restore during installation or system upgrade process.
                By default, backup and restore configuration are enabled.
                Path to backup have to on external device otherwise during system upgrade can be lost.
    -o            Online packages installation by post-installer.
                Internet connection is needed after system restart and before packages installation.
    -i            Exclude installed packages. Only packages from configuration can be processed.

Current configuration:
    Local install directory : '/install'
    Configuration backup direcory : '/backup'
    Image source URL : 'http://ecco.selfip.net/<CODENAME> … pgrade.bin'
    Packages: 'nfs-utils kmod-fs-nfs libusb kmod-usb-serial-option kmod-usb-net-cdc-ether '

Przykładowa konfiguracja systemu w /etc/config/system

config sysupgrade
    option localinstall '/install'
    option backupconfig '/backup'
    option imagesource 'http://ecco.selfip.net/<CODENAME>/<TARGET>/openwrt-<TARGET>-<SUBTARGET>-<HARDWARE>-squashfs-sysupgrade.bin'
    list opkg libusb
    list opkg kmod-usb-serial-option
    list opkg kmod-usb-net-cdc-ether

Definiujesz sobie w pliku /etc/config/system jak wyżej parametry oraz pakiety, które mają się zainstalować, a skrypt robi resztę.

Zmienne użyte w imagesource to:

  • <CODENAME> nazwa gałęzi kodu (ex. "attitude_adjustment")

  • <TARGET> platforma (ex. "ar71xx")

  • <SUBTARGET> sub-wersja platformy (ex. "generic")

  • <HARDWARE> sprzętu z wersją (ex. "tl-wdr4300-v1")

Ten skrypt + zapisy w pliku /etc/sysupgrade.conf to lekarstwo na przeniesienie konfiguracji podczas aktualizacji systemu.

Założyłem w moim przypadku, że mam dwa katalogi automatycznie podmontowane z pendrive-a /backup i /install. Umożliwiają one przechowanie kopii zapasowych konfiguracji a drugi plików instalacyjnych bez ich utraty podczas procesu aktualizacji.
Oczywiście skrypt może obejść się bez nich, podczas aktualizacji systemu, ale wtedy rezygnuje się z kopii konfiguracji i dodatkowo musi być gwarancja, że po restarcie routera a przed instalacją pakietów będzie dostępny Internet, z którego proces instalacyjny pobierze potrzebne pakiety (jeżeli Internet to połączenie 3G a do niego potrzebna jest instalacja jakiegoś pakiet, to odpada).

To skrypt, który powinien trafić do pliku /sbin/install.sh

#!/bin/sh
# Install or download packages and/or sysupgrade.
# Script version 1.34 Rafal Drzymala 2013-2014
#
# Changelog
#
#    1.00    RD    First stable code
#    1.04    RD    Change code sequence
#    1.05    RD    Code tune up
#    1.06    RD    Code tune up
#    1.07    RD    ExtRoot code improvements
#    1.08    RD    Add image check sum control
#    1.09    RD    Add command line switch on/off-line package post-install
#                Add command line switch to disable configuration backup 
#    1.10    RD    Preparation scripts code improvements
#    1.11    RD    Preparation scripts code improvements (2)
#    1.12    RD    Preparation scripts code improvements (3)
#    1.13    RD    Preparation scripts code improvements (4)
#    1.14    RD    Extroot scripts code improvements
#    1.15    RD    Help improvements
#    1.16    RD    Help improvements (2), Preparation scripts code improvements (5)
#    1.17    RD    Extroot scripts code improvements (2)
#    1.18    RD    Include installed packages options
#    1.19    RD    Extroot scripts code improvements (3)
#    1.20    RD    Add status led toggle
#    1.21    RD    Correct rc.local manipulation code
#    1.22    RD    Add packages disabling to sysupgrade process
#                Preparation scripts code improvements (5)
#    1.23    RD    Extroot scripts code improvements
#    1.24    RD    Added recurrence of checking of package dependences
#                Changed packages initialization script name convention
#    1.25    RD    Preparation scripts code improvements (6)
#    1.26    RD    Preparation scripts code improvements (7)
#    1.27    RD    Code tune up
#    1.28    RD    Code tune up
#    1.29    RD    Dependency check code improvements
#    1.30    RD    Added post install file removing
#                Added external script
#    1.31    RD    Added backup command
#    1.32    RD    Removed I/O control after post install file removing
#    1.33    RD    Added variables to image source path
#    1.34    RD    Added image file and packages files sums calculation
#
# Destination /sbin/install.sh
#
. /etc/openwrt_release

local CMD=""
local OFFLINE_POST_INSTALL="1"
local INCLUDE_INSTALLED="1"
local HOST_NAME=""
local BACKUP_ENABLE="1"
local BACKUP_PATH=""
local BACKUP_FILE=""
local INSTALL_PATH="/tmp"
local PACKAGES=""
local IMAGE_SOURCE=""
local IMAGE_FILENAME="sysupgrade.bin"
local POST_INSTALL_SCRIPT="post-installer"
local POST_INSTALLER="/bin/$POST_INSTALL_SCRIPT.sh"
local POST_INSTALLER_LOG="/usr/$POST_INSTALL_SCRIPT.log"
local INSTALLER_KEEP_FILE="/lib/upgrade/keep.d/$POST_INSTALL_SCRIPT"
local RC_LOCAL="/etc/rc.local"
local POST_INSTALL_REMOVE="/etc/config/*-opkg"
local RUN_SCRIPT=""

check_exit_code() {
    local CODE=$?
    if [ $CODE != 0 ]; then 
        echo "Abort, error ($CODE) detected!"
        exit $CODE
    fi
}

get_mount_device() { # <Path to check>
    local CHECK_PATH=$1
    [ -L $CHECK_PATH ] && CHECK_PATH=$($BIN_LS -l $CHECK_PATH | $BIN_AWK -F " -> " '{print $2}')
    $BIN_AWK -v path="$CHECK_PATH" 'BEGIN{FS=" ";device=""}path~"^"$2{if($2>point){device=$1;point=$2}}END{print device}' /proc/mounts
    check_exit_code
}

which_binary() { # <Name of Binary> [<Name of Binary> [...]]
    while [ -n "$1" ]; do
        local WHICH=$(which $1)
        if [ "$WHICH" == "" ]; then
            echo "Binary $1 not found in system!"
            exit 1
        else
            eval "export -- \"BIN_$(echo $1 | tr '[a-z]' '[A-Z]')=$WHICH\""
        fi
        shift
    done
}

add_to_keep_file() { # <Content to save> <Root path>
    local CONTENT="$1"
    local ROOT_PATH="$2"
    $BIN_ECHO "$1">>$ROOT_PATH$INSTALLER_KEEP_FILE
    check_exit_code
}

run_script() { # <Event>
    if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
        $BIN_ECHO "Run script $RUN_SCRIPT $1 ..."
        $RUN_SCRIPT $1
        check_exit_code
        $BIN_ECHO "Script $RUN_SCRIPT exited."
    fi
}

add_to_post_installer_log() { # <Content to save>
    $BIN_ECHO "$($BIN_DATE) $1">>$POST_INSTALLER_LOG
}

package_script_execute() { # <Package> <Script name> <Command>
    local PACKAGE="$1"
    local SCRIPT="$2"
    local CMD="$3"
    if [ -x $SCRIPT ]; then
        $BIN_ECHO "Executing $SCRIPT $CMD for package $PACKAGE"
        if [ "$CMD" == "enable" ] || [ "$CMD" == "stop" ]; then
            $SCRIPT $CMD
        else
            $SCRIPT $CMD
            check_exit_code
        fi
    fi
}

update_path_vars() { # <String to update>
    local PATH_VARS="$1"
    local TARGET=$(echo "$DISTRIB_TARGET" | cut -d "/" -f 1)
    local SUBTARGET=$(echo "$DISTRIB_TARGET" | cut -d "/" -f 2)
    local BOARD_NAME=$($BIN_CAT /tmp/sysinfo/model | $BIN_TR '[A-Z]' '[a-z]')
    local BOARD_VER=$($BIN_ECHO "$BOARD_NAME" | $BIN_CUT -d " " -f 3)
    BOARD_NAME=$($BIN_ECHO "$BOARD_NAME" | $BIN_CUT -d " " -f 2)
    [ -n "$BOARD_VER" ] && BOARD_NAME="$BOARD_NAME-$BOARD_VER"
    [ -n "$DISTRIB_CODENAME" ] && PATH_VARS=${PATH_VARS//\<CODENAME\>/$DISTRIB_CODENAME}
    [ -n "$TARGET" ] && PATH_VARS=${PATH_VARS//\<TARGET\>/$TARGET}
    [ -n "$SUBTARGET" ] && PATH_VARS=${PATH_VARS//\<SUBTARGET\>/$SUBTARGET}
    [ -n "$BOARD_NAME" ] && PATH_VARS=${PATH_VARS//\<HARDWARE\>/$BOARD_NAME}
    $BIN_ECHO "$PATH_VARS"
}

caution_alert() {
    local KEY
    $BIN_ECHO "Caution!"
    $BIN_ECHO "You can damage the system or hardware. You perform this operation at your own risk."
    read -t 60 -n 1 -p "Press Y to continue " KEY
    $BIN_ECHO ""
    [ "$KEY" != "Y" ] && exit 0
}

print_help() {
    $BIN_ECHO -e "Usage:"\
            "\n\t$0 [install|download|sysupgrade] [-h|--help] [-o|--online] [-b|--backup-off] [-i|--exclude-installed]"\
            "\n\nCommands:"\
            "\n\t\tdownload\tdownload all packages and system image do install directory,"\
            "\n\t\tinstall\t\tbackup configuration,"\
            "\n\t\t\t\tstop and disable packages,"\
            "\n\t\t\t\tinstall packages,"\
            "\n\t\t\t\trestore configuration,"\
            "\n\t\t\t\tenable and start packages."\
            "\n\t\tsysupgrade\tbackup configuration,"\
            "\n\t\t\t\tdownload all packages and system image do install directory (in off-line mode),"\
            "\n\t\t\t\tprepare post upgrade package installer,"\
            "\n\t\t\t\tsystem upgrade,"\
            "\n\t\t\t\t... reboot system ...,"\
            "\n\t\t\t\tif extroot exist, clean check sum and reboot system,"\
            "\n\t\t\t\tinstall packages,"\
            "\n\t\t\t\trestore configuration,"\
            "\n\t\t\t\tcleanup installation,"\
            "\n\t\t\t\t... reboot system ..."\
            "\n\t\tbackup\t\tbackup configuration"\
            "\n\nOptions:"\
            "\n\t\t-h\t\tThis help,"\
            "\n\t\t-b\t\tDisable configuration backup and restore during installation or system upgrade process."\
            "\n\t\t\t\tBy default, backup and restore configuration are enabled."\
            "\n\t\t\t\tPath to backup have to on external device otherwise during system upgrade can be lost."\
            "\n\t\t-o\t\tOnline packages installation by post-installer."\
            "\n\t\t\t\tInternet connection is needed after system restart and before packages installation."\
            "\n\t\t-i\t\tExclude installed packages. Only packages from configuration can be processed."\
            "\n\nCurrent configuration:"\
            "\n\tLocal install directory : '$($BIN_UCI -q get system.@sysupgrade[0].localinstall)'"\
            "\n\tConfiguration backup direcory : '$($BIN_UCI -q get system.@sysupgrade[0].backupconfig)'"\
            "\n\tImage source URL : '$($BIN_UCI -q get system.@sysupgrade[0].imagesource)'"\
            "\n\tRun external script : '$($BIN_UCI -q get system.@sysupgrade[0].runscript)'"\
            "\n\tPackages: '$($BIN_UCI -q get system.@sysupgrade[0].opkg)'"\
            "\n\nExamples configuration in /etc/config/system"\
            "\n\tconfig sysupgrade"\
            "\n\t\toption localinstall '/install'"\
            "\n\t\toption backupconfig '/backup'"\
            "\n\t\toption imagesource 'http://ecco.selfip.net/<CODENAME>/<TARGET>/openwrt-<TARGET>-<SUBTARGET>-<HARDWARE>-squashfs-sysupgrade.bin'"\
            "\n\t\tlist opkg libusb"\
            "\n\t\tlist opkg kmod-usb-serial-option"\
            "\n\t\tlist opkg kmod-usb-net-cdc-ether"\
            "\n"
    exit 0
}

initialize() { # <Script parametrs>
    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
    while [ -n "$1" ]; do
        case "$1" in
            install|download|sysupgrade|backup) CMD="$1";; 
            -h|--help) print_help;;
            -b|--backup-off) BACKUP_ENABLE="";;
            -o|--online) OFFLINE_POST_INSTALL="";;
            -i|--exclude-installed) INCLUDE_INSTALLED="";;
            -*) $BIN_ECHO "Invalid option: $1";print_help;;
            *) $BIN_ECHO "Invalid command: $1";print_help;;
        esac
        shift
    done
    [ "$CMD" == "" ] && CMD=install
    [ "$CMD" == "backup" ] && BACKUP_ENABLE="1"
    HOST_NAME=$($BIN_UCI -q get system.@system[0].hostname)
    if [ "$HOST_NAME" == "" ]; then 
        $BIN_ECHO "Error while getting host name!"
        exit 1
    fi
    if [ "$CMD" == "download" ] || ([ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ]); then
        INSTALL_PATH=$($BIN_UCI -q get system.@sysupgrade[0].localinstall)
        if [ "$INSTALL_PATH" == "" ]; then
            $BIN_ECHO "Install path is empty!"
            exit 1
        fi    
        if [ ! -d "$INSTALL_PATH" ]; then
            $BIN_ECHO "Install path not exist!"
            exit 1
        fi    
    fi
    if [ "$BACKUP_ENABLE" != "" ]; then
        BACKUP_PATH=$($BIN_UCI -q get system.@sysupgrade[0].backupconfig)
        BACKUP_FILE="$BACKUP_PATH/backup-$HOST_NAME-$($BIN_DATE +%Y-%m-%d-%H-%M-%S).tar.gz"        
        if [ ! -d "$BACKUP_PATH" ]; then
            $BIN_ECHO "Backup path not exist!"
            exit 1
        fi
        local MOUNT_DEVICE=$(get_mount_device $BACKUP_PATH)
        if [ "$MOUNT_DEVICE" == "rootfs" ] || [ "$MOUNT_DEVICE" == "sysfs" ] || [ "$MOUNT_DEVICE" == "tmpfs" ]; then
            $BIN_ECHO "Backup path ($BACKUP_PATH) must be on external device. Now is mounted on $MOUNT_DEVICE."
            exit 1
        fi
    fi
    if [ "$CMD" == "download" ] || [ "$CMD" == "sysupgrade" ]; then
        IMAGE_SOURCE=$($BIN_UCI -q get system.@sysupgrade[0].imagesource)
        local IMAGE_PREFIX=$($BIN_UCI -q get system.@sysupgrade[0].imageprefix)
        local IMAGE_SUFFIX=$($BIN_UCI -q get system.@sysupgrade[0].imagesuffix)
        if [ -n "$IMAGE_PREFIX" ] || [ -n "$IMAGE_SUFFIX" ]; then
            IMAGE_SOURCE="$IMAGE_SOURCE/$IMAGE_PREFIX<HARDWARE>$IMAGE_SUFFIX"
        fi
    fi
    RUN_SCRIPT=$($BIN_UCI -q get system.@sysupgrade[0].runscript)
    PACKAGES=$($BIN_UCI -q get system.@sysupgrade[0].opkg)
    if [ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ]; then
        local MOUNT_DEVICE=$(get_mount_device $INSTALL_PATH)
        if [ "$MOUNT_DEVICE" == "rootfs" ] || [ "$MOUNT_DEVICE" == "sysfs" ] || [ "$MOUNT_DEVICE" == "tmpfs" ]; then
            $BIN_ECHO "Install path ($INSTALL_PATH) must be on external device. Now is mounted on $MOUNT_DEVICE."
            exit 1
        fi
    fi
    $BIN_ECHO "Operation $CMD on $HOST_NAME - $DISTRIB_ID $DISTRIB_RELEASE ($DISTRIB_REVISION)"
}

update_repository() {
    run_script before_opkg_update
    $BIN_ECHO "Updating packages repository ..."
    $BIN_OPKG update
    check_exit_code
    $BIN_ECHO "Packages repository updated."
}

check_installed() {
    if [ "$INCLUDE_INSTALLED" != "" ]; then
        $BIN_ECHO "Checking installed packages ..."
        local INSTALLED=$($BIN_AWK -v PKG="$PACKAGES " 'BEGIN{FS=": ";ORS=" "}/^Package\: /{Package=$2}/^Status\: / && /user installed/{if(index(PKG,Package" ")==0)print Package}' /usr/lib/opkg/status)
        check_exit_code
        INSTALLED=${INSTALLED%% }
        if [ "$INSTALLED" != "" ]; then
            $BIN_ECHO "Installed packages not in configuration: $INSTALLED."
            PACKAGES="$PACKAGES $INSTALLED"
        else
            $BIN_ECHO "All packages from configuration."
        fi
    fi
}

check_dependency() {
    if [ "$PACKAGES" != "" ]; then 
        $BIN_ECHO "Checking packages dependency ..."
        $BIN_ECHO "Main packages: $PACKAGES."
        local PACKAGES_COUNT=-1
        while [ "$($BIN_ECHO $PACKAGES | $BIN_WC -w)" != "$PACKAGES_COUNT" ]; do
            PACKAGES_COUNT=$($BIN_ECHO $PACKAGES | $BIN_WC -w)
            local DEPENDS
            local DEPENDS_COUNT=-1
            while [ "$($BIN_ECHO $DEPENDS | $BIN_WC -w)" != "$DEPENDS_COUNT" ]; do
                DEPENDS_COUNT=$($BIN_ECHO $DEPENDS | $BIN_WC -w)
                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}')
                check_exit_code
            done
            DEPENDS=${DEPENDS%% }
            [ "$DEPENDS" != "" ] && PACKAGES="$DEPENDS $PACKAGES"
            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()}')
            PACKAGES=${PACKAGES%% }
        done
        $BIN_ECHO "All packages: $PACKAGES."
    fi
}

config_backup() {
    if [ "$BACKUP_ENABLE" != "" ]; then
        if [ ! -d "$BACKUP_PATH" ]; then
            $BIN_ECHO "Backup path not exist."
            exit 1
        fi
        if [ "$BACKUP_FILE" == "" ]; then
            $BIN_ECHO "Backup file name is empty."
            exit 1
        fi
        $BIN_ECHO "Making configuration backup to $BACKUP_FILE ..."
        $BIN_SYSUPGRADE --create-backup $BACKUP_FILE
        check_exit_code
        $BIN_CHMOD 640 $BACKUP_FILE
        check_exit_code
        $BIN_ECHO "Configuration backuped."
    fi
}

config_restore() {
    if [ "$BACKUP_ENABLE" != "" ]; then
        if [ "$BACKUP_FILE" == "" ]; then
            $BIN_ECHO "Backup file name is empty."
            exit 1
        else
            $BIN_ECHO "Restoring configuration from backup $BACKUP_FILE ..."
            $BIN_SYSUPGRADE --restore-backup $BACKUP_FILE
            check_exit_code
            $BIN_ECHO "Configuration restored."
        fi
    fi
}

packages_disable() {
    if [ "$PACKAGES" != "" ]; then 
        $BIN_ECHO "Disabling packages ..."
        local SCRIPT
        for PACKAGE in $PACKAGES; do
            for SCRIPT in $($BIN_OPKG files $PACKAGE | $BIN_GREP /etc/init.d/); do
                package_script_execute $PACKAGE $SCRIPT disable
                package_script_execute $PACKAGE $SCRIPT stop
            done
        done
        $BIN_ECHO "Packages are disabled."
    fi
}

packages_enable() {
    if [ "$PACKAGES" != "" ]; then 
        $BIN_ECHO "Enabling packages ..."
        local SCRIPT
        for PACKAGE in $PACKAGES; do
            for SCRIPT in $($BIN_OPKG files $PACKAGE | $BIN_GREP /etc/init.d/); do
                package_script_execute $PACKAGE $SCRIPT enable
                package_script_execute $PACKAGE $SCRIPT start
            done
        done
        $BIN_ECHO "Packages are enabled."
    fi
}

packages_install() {
    if [ "$PACKAGES" != "" ]; then 
        run_script before_opkg_install
        $BIN_ECHO "Installing packages ..."
        $BIN_OPKG $CMD $PACKAGES
        check_exit_code
        $BIN_RM $POST_INSTALL_REMOVE
        $BIN_ECHO "Packages are installed."
        run_script after_opkg_install
    fi
}

packages_download() {
    if [ "$PACKAGES" != "" ]; then 
        local PACKAGES_FILE="Packages"
        local PACKAGES_LIST="$PACKAGES_FILE.gz"
        $BIN_ECHO "Downloading packages to $INSTALL_PATH ..."
        cd $INSTALL_PATH
        $BIN_RM -f *.ipk
        $BIN_OPKG download $PACKAGES
        check_exit_code
        $BIN_ECHO "Building packages information ..."
        [ -f $INSTALL_PATH/$PACKAGES_FILE ] && $BIN_RM -f $INSTALL_PATH/$PACKAGES_FILE
        [ -f $INSTALL_PATH/$PACKAGES_LIST ] && $BIN_RM -f $INSTALL_PATH/$PACKAGES_LIST
        for PACKAGE in $PACKAGES; do
            $BIN_ECHO "Getting information for package $PACKAGE."
            $BIN_OPKG info $PACKAGE >>$INSTALL_PATH/$PACKAGES_FILE
            check_exit_code
        done 
        $BIN_ECHO "Compressing packages information as $INSTALL_PATH/$PACKAGES_LIST ..."
        $BIN_AWK '{if($0!~/^Status\:|^Installed-Time\:/)print $0}' $INSTALL_PATH/$PACKAGES_FILE | $BIN_GZIP -c9 >$INSTALL_PATH/$PACKAGES_LIST
        check_exit_code
        $BIN_RM -f $INSTALL_PATH/$PACKAGES_FILE
        check_exit_code
        $BIN_ECHO "Packages are downloaded."
    fi
}

image_download() {
    if [ "$IMAGE_SOURCE" == "" ]; then 
        $BIN_ECHO "Image source information is empty."
        exit 1
    fi
    local IMAGE_REMOTE_NAME="$(update_path_vars $IMAGE_SOURCE)"
    local IMAGE_LOCAL_NAME="$INSTALL_PATH/$IMAGE_FILENAME"
    local SUMS_REMOTE_NAME="$($BIN_DIRNAME $IMAGE_REMOTE_NAME)/md5sums"
    local SUMS_LOCAL_NAME="$INSTALL_PATH/md5sums"
    [ -f $IMAGE_LOCAL_NAME ] && $BIN_RM -f $IMAGE_LOCAL_NAME
    $BIN_ECHO "Downloading system image as $IMAGE_LOCAL_NAME from $IMAGE_REMOTE_NAME ..."    
    $BIN_WGET -O $IMAGE_LOCAL_NAME $IMAGE_REMOTE_NAME
    check_exit_code
    [ -f $SUMS_LOCAL_NAME ] && $BIN_RM -f $SUMS_LOCAL_NAME
    $BIN_ECHO "Downloading images sums as $SUMS_LOCAL_NAME from $SUMS_REMOTE_NAME ..."    
    $BIN_WGET -O $SUMS_LOCAL_NAME $SUMS_REMOTE_NAME
    check_exit_code
    $BIN_ECHO "Checking system image control sum ..."    
    local SUM_ORG=$($BIN_GREP $($BIN_BASENAME $IMAGE_REMOTE_NAME) $SUMS_LOCAL_NAME | $BIN_CUT -d " " -f 1)
    check_exit_code
    local SUM_FILE=$($BIN_MD5SUM $IMAGE_LOCAL_NAME | $BIN_CUT -d " " -f 1)
    check_exit_code
    if [ "$SUM_ORG" == "" ]; then
        $BIN_ECHO "Can't get original control sum!"
        exit 1
    elif [ "$SUM_FILE" == "" ]; then
        $BIN_ECHO "Can't calculate system image control sum!"
        exit 1
    elif [ "$SUM_ORG" != "$SUM_FILE" ]; then
        $BIN_ECHO "Downloaded system image is damaged!"
        exit 1
    else
        $BIN_ECHO "System image is downloaded and checksum is correct."
    fi
    $BIN_ECHO "Calculate new checksum to file $SUMS_LOCAL_NAME ..."
    $BIN_MD5SUM $IMAGE_LOCAL_NAME $($BIN_DIRNAME $IMAGE_LOCAL_NAME)/*.ipk >$SUMS_LOCAL_NAME
    check_exit_code
    run_script after_image_downloaded
}

installer_prepare() {
    $BIN_ECHO "Preparing packages installer in $POST_INSTALLER ..."
    $BIN_ECHO -e "#!/bin/sh"\
            "\n# Script auto-generated by $0"\
            "\n. /etc/diag.sh"\
            "\nget_status_led"\
            "\nset_state preinit"\
            "\nif [ -d /tmp/overlay-disabled ]; then"\
            "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Removing overlay-rootfs checksum and force reboot\""\
            "\n\t$BIN_RM -f /tmp/overlay-disabled/.extroot.md5sum"\
            "\n\t$BIN_RM -f /tmp/overlay-disabled/etc/extroot.md5sum"\
            "\nelif [ -d /tmp/whole_root-disabled ]; then"\
            "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Removing whole-rootfs checksum and force reboot\""\
            "\n\t$BIN_RM -f /tmp/whole_root-disabled/.extroot.md5sum"\
            "\n\t$BIN_RM -f /tmp/whole_root-disabled/etc/extroot.md5sum"\
            "\nelse"\
            "\n\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Start instalation of packages\"">$POST_INSTALLER
    check_exit_code
    if [ "$OFFLINE_POST_INSTALL" != "" ]; then
        $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
        check_exit_code
    else
        $BIN_ECHO -e "\tuntil $BIN_PING -q -W 30 -c 1 8.8.8.8 &>/dev/null; do"\
                "\t\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Wait for internet connection\""\
                "\n\tdone">>$POST_INSTALLER
        check_exit_code
    fi
    if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
        $BIN_ECHO -e "\t$RUN_SCRIPT before_opkg_update | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
        check_exit_code
    fi
    $BIN_ECHO -e "\t$BIN_OPKG update | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
    if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
        $BIN_ECHO -e "\t$RUN_SCRIPT before_opkg_install | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
        check_exit_code
    fi
    $BIN_ECHO -e "\tlocal PACKAGES=\"$PACKAGES\""\
            "\n\tlocal PACKAGE"\
            "\n\tlocal SCRIPT"\
            "\n\tfor PACKAGE in \$PACKAGES; do"\
            "\n\t\t$BIN_OPKG install \$PACKAGE | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT"\
            "\n\t\tfor SCRIPT in \$($BIN_OPKG files \$PACKAGE | $BIN_GREP /etc/init.d/); do"\
            "\n\t\t\tif [ -x \$SCRIPT ]; then"\
            "\n\t\t\t\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Executing \$SCRIPT enable for package \$PACKAGE\""\
            "\n\t\t\t\t\$SCRIPT enable | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT"\
            "\n\t\t\tfi"\
            "\n\t\tdone"\
            "\n\tdone">>$POST_INSTALLER
    check_exit_code
    if [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ]; then
        $BIN_ECHO -e "\t$RUN_SCRIPT after_opkg_install | $BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT">>$POST_INSTALLER
        check_exit_code
    fi
    if [ "$BACKUP_ENABLE" != "" ]; then
        $BIN_ECHO -e "\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Restoring configuration backup from $BACKUP_FILE\""\
                "\n\t$BIN_SYSUPGRADE --restore-backup $BACKUP_FILE">>$POST_INSTALLER
        check_exit_code
    fi
    $BIN_ECHO -e "\t$BIN_LOGGER -p user.notice -t $POST_INSTALL_SCRIPT \"Stop installation of packages, cleaning and force reboot\""\
            "\n\t$BIN_RM $POST_INSTALL_REMOVE"\
            "\n\t$BIN_RM -f $INSTALLER_KEEP_FILE"\
            "\n\t$BIN_AWK -v installer=\"$POST_INSTALLER\" '\$0!~installer' $RC_LOCAL>$RC_LOCAL.tmp"\
            "\n\t$BIN_MV -f $RC_LOCAL.tmp $RC_LOCAL"\
            "\n\t$BIN_RM -f $POST_INSTALLER"\
            "\nfi"\
            "\n$BIN_LOGREAD >>$POST_INSTALLER_LOG"\
            "\n$BIN_SYNC"\
            "\n$BIN_REBOOT -f"\
            "\n# Done.">>$POST_INSTALLER
    check_exit_code
    $BIN_CHMOD 777 $POST_INSTALLER
    check_exit_code
    add_to_keep_file $POST_INSTALLER
    [ "$RUN_SCRIPT" != "" ] && [ -x $RUN_SCRIPT ] && add_to_keep_file $RUN_SCRIPT
    $BIN_ECHO "Setting autorun packages installer on next boot in $RC_LOCAL ..."
    add_to_keep_file $RC_LOCAL
    $BIN_ECHO -e "[ -x $POST_INSTALLER ] && $POST_INSTALLER\n$($BIN_CAT $RC_LOCAL)">$RC_LOCAL
    check_exit_code
    add_to_post_installer_log "Packages installer prepared"
    $BIN_ECHO "Packages installer prepared."
}

sysupgrade_execute() {
    $BIN_ECHO "Upgrading system from image $INSTALL_PATH/$IMAGE_FILENAME ..."
    add_to_keep_file $0
    add_to_post_installer_log "Running system upgrade"
    cd $INSTALL_PATH
    $BIN_SYSUPGRADE $IMAGE_FILENAME
}

# Main routine
initialize $@
[ "$CMD" == "backup" ] && config_backup && exit
[ "$CMD" == "sysupgrade" ] && caution_alert
update_repository
check_installed
check_dependency
([ "$CMD" == "install" ] || [ "$CMD" == "sysupgrade" ]) && config_backup
[ "$CMD" == "install" ] && packages_disable && packages_install
([ "$CMD" == "download" ] || ([ "$CMD" == "sysupgrade" ] && [ "$OFFLINE_POST_INSTALL" != "" ])) && packages_download
[ "$CMD" == "install" ] && config_restore && packages_enable
([ "$CMD" == "download" ] || [ "$CMD" == "sysupgrade" ]) && image_download
[ "$CMD" == "sysupgrade" ] && installer_prepare && packages_disable && sysupgrade_execute
$BIN_ECHO "Done."
# Done.

Uwaga ! Nie testowałem tego z Gargoyle, tylko czyste AA lub AA i LuCI.
Uwaga ! Aktualizacja Extroot jest w fazie testów, nie odpowiadam za ewentualne szkody!

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

6

Odp: Aktualizacja AA

Kawał porządnej roboty! Aż żal, że nie rozpropagowanej dalej.
Przetestuję w najbliższym czasie (po najbliższym releasie 'AA' na eko.one) i zobaczymy czy pomoże na aktualizacyjne bolączki.

7

Odp: Aktualizacja AA

Witam,
zrobiłem kilka poprawek, skrypt teraz poprawnie modyfikuje /etc/rc.local.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

8 (edytowany przez Nimloth 2013-06-17 20:12:26)

Odp: Aktualizacja AA

Moj config:

config sysupgrade
    option localinstall '/mnt/hdd1/Backup/openwrt-install'
    option backupconfig '/mnt/hdd1/Backup/openwrt-backup'
    option imagesource 'http://ecco.selfip.net/attitude_adjustment/ar71xx'
    option imageprefix 'openwrt-ar71xx-generic-'
    option imagesuffix '-squashfs-sysupgrade.bin'
    list opkg openvpn
    list opkg minidlna
    list opkg kmod-ipv6
    list opkg kmod-ip6tables
    list opkg ip6tables
    list opkg 6in4
    list opkg iputils-ping6
    list opkg radvd

Przy opcji download sciagnal mi wiecej paczek niz te co wyzej, tzn. np tranmission (mam to zainstalowany w obecnym image)
Jak to rozumiec ?
Jest opcja aby pare paczek zainstalowal z hdd ?

9

Odp: Aktualizacja AA

Witam,
przełącznik -e wyłącza ściąganie zainstalowanych paczek, pobierane są tylko z konfiguracji i zależne.
Pomoc to install.sh -h

Jest opcja aby pare paczek zainstalowal z hdd ?

Co masz na myśli?

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

10 (edytowany przez Nimloth 2013-06-17 21:56:22)

Odp: Aktualizacja AA

Torrent wymaga paczki transmission 2.42 ... a w repo np. 2.77
Paczke 2.42 mam na dysku do zainstalowania recznie

A i maly blad w -h:
/sbin/install.sh [install|download|sysupgrade] [-h|--help] [-o|--online] [-b|--backup-off] [-i|--exclude-installed]
-e              Exclude installed packages. Only packages from configuration can be processed.

To w koncu -i czy -e ?

Dziala -i

11

Odp: Aktualizacja AA

Racja,  mialo byc-e. Zmienię w kolejnej wersji.
Wyjątek o którym piszesz jest wbrew procesowi aktualizacji opartej na numerze wersji. Do przemyślenia...

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

12

Odp: Aktualizacja AA

Ok przetestowalem ... ogolnie dziala, ale niestety nie zainstlaowalo mi wszyskich paczek, ktore mu wskazalem (a nawet jak zainstalowal to ich nie wystartowal).

Jest tworzony jakis log, gdzie mozna sprawdzic co poszlo nie tak?

13

Odp: Aktualizacja AA

To co robi install idzie na konsole a to co robią post-install i extroot-bypaser idzie go loga. Jak sobie przekierujesz loga do pliku to pozostaną w nim informacje.  W przeciwnym razie reboot lub wyłączenie czyści loga.
Jakich paczek nie zainstalował a jakich nie uruchomił?

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

14 (edytowany przez Nimloth 2013-06-18 13:43:48)

Odp: Aktualizacja AA

Moj config:

config sysupgrade
    option localinstall '/mnt/hdd1/Backup/openwrt-install'
    option backupconfig '/mnt/hdd1/Backup/openwrt-backup'
    option imagesource 'http://ecco.selfip.net/attitude_adjustment/ar71xx'
    option imageprefix 'openwrt-ar71xx-generic-'
    option imagesuffix '-squashfs-sysupgrade.bin'
    list opkg openvpn
    list opkg minidlna
    list opkg kmod-ipv6
    list opkg kmod-ip6tables
    list opkg ip6tables
    list opkg 6in4
    list opkg iputils-ping6
    list opkg radvd
    list opkg openssh-sftp-server
       list opkg samba36-server
       list opkg unrar
       list opkg unzip
       list opkg hd-idle

Nie zainstalowal:
minidlna, 6in4

Nie wystartowal:
samba36-server

Of course wszystkie pakiety sciagnal offline do podanego katalogu

15 (edytowany przez gonzales 2013-06-18 13:42:28)

Odp: Aktualizacja AA

Mam tak jak w pierwszym poście AA i samodzielnie dograne  Luci i kilka pakietów na exroot.
Zakładam, że mogę teraz zaktualizować do tego gotowca zrobionego przez Cezarego poprzez plik sysupgrade?

16 (edytowany przez Rafciq 2013-06-18 14:26:59)

Odp: Aktualizacja AA

Nimloth napisał/a:

Nie zainstalowal:
minidlna, 6in4

Nie wystartowal:
samba36-server

1. Czy pobrał libexif libjpeg libsqlite3 libffmpeg libid3tag libflac libvorbis libuuid to pakiety do minidlna?
2. Czy pobrał kmod-ipv6 kmod-iptunnel4 kmod-sit do 6in4?
3. Pakiet samba36-server obsługuje się poprzez /etc/init.d/samba [komenda], a ja zakładam że od nazwy pakietu pakietu pochodzi nazwa skryptu, czyli /etc/init.d/samba36-server. Coś trzeba będzie z tym zrobić.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

17

Odp: Aktualizacja AA

Np. po instalacji

opkg files samba36-server | grep init.d

I wiesz co trzeba uruchomić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18

Odp: Aktualizacja AA

Rafciq napisał/a:
Nimloth napisał/a:

Nie zainstalowal:
minidlna, 6in4

Nie wystartowal:
samba36-server

1. Czy pobrał libexif libjpeg libsqlite3 libffmpeg libid3tag libflac libvorbis libuuid to pakiety do minidlna?
2. Czy pobrał kmod-ipv6 kmod-iptunnel4 kmod-sit do 6in4?
3. Pakiet samba36-server obsługuje się poprzez /etc/init.d/samba [komenda], a ja zakładam że od nazwy pakietu pakietu pochodzi nazwa skryptu, czyli /etc/init.d/samba36-server. Coś trzeba będzie z tym zrobić.

1 - tak
2 - tak

19 (edytowany przez Rafciq 2013-06-23 14:56:19)

Odp: Aktualizacja AA

Nimloth czy sprawdzisz nową wersję, zrobiłem zmiany?
Cezary dziękuję za pomysł z "odgadywaniem" nazwy skryptu dla pakietu.

Nowa wersja skryptu

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

20

Odp: Aktualizacja AA

OK przy kolejnym updacie AA

21 (edytowany przez Rafciq 2013-06-23 21:09:03)

Odp: Aktualizacja AA

Witam,
zrobiłem kolejne modyfikacje,  tym razem pod kątem extroota.

Nowa wersja skryptu

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

22

Odp: Aktualizacja AA

Nimloth napisał/a:

OK przy kolejnym updacie AA

Witam,
jest kolejną wersją AA. Będę wdzięczny za test ostatniej wersji skryptu i opinie.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

23 (edytowany przez Nimloth 2013-06-22 20:22:45)

Odp: Aktualizacja AA

Spoko pamietam ... wroce z urlopu (przyszly pon) i na 100% przetestuje
Co do usprawienia to instalacja innej paczki niz w repo (np. z dysku)

24

Odp: Aktualizacja AA

Miłego urlopu

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

25 (edytowany przez Nimloth 2013-07-01 22:17:59)

Odp: Aktualizacja AA

Ok przetestowalem ... upgrade przeszedl prawidlowo ... jednak tym razem nie zainstalowal minidlna

Musialem instalowac recznie:

opkg install minidlna
Installing minidlna (1.0.24-1) to root...
Downloading [url]http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/minidlna_1.0.24-1_ar71xx.ipk[/url].
Installing libffmpeg-mini (0.8.7-2) to root...
Downloading [url]http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libffmpeg-mini_0.8.7-2_ar71xx.ipk[/url].
Installing libbz2 (1.0.6-1) to root...
Downloading [url]http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libbz2_1.0.6-1_ar71xx.ipk[/url].
Configuring libbz2.
Configuring libffmpeg-mini.
Configuring minidlna.

Moj config:

config sysupgrade
    option localinstall '/mnt/hdd1/Backup/openwrt-install'
    option backupconfig '/mnt/hdd1/Backup/openwrt-backup'
    option imagesource '[url]http://ecco.selfip.net/attitude_adjustment/ar71xx[/url]'
    option imageprefix 'openwrt-ar71xx-generic-'
    option imagesuffix '-squashfs-sysupgrade.bin'
    list opkg openvpn
    list opkg minidlna
    list opkg ipv6-support
    list opkg iputils-ping6
    list opkg 6relayd
    list opkg openssh-sftp-server
    list opkg samba36-server
    list opkg unrar
    list opkg unzip
    list opkg hd-idle
    list opkg kmod-input-core
    list opkg kmod-ir-core

Z tego co widze to nie sciagnelo sie dependency libbz2.

Checking packages dependency ...
Main packages: openvpn minidlna ipv6-support iputils-ping6 6relayd openssh-sftp-server samba36-server unrar unzip hd-idle kmod-input-core kmod-ir-core.
Additional packages: libc kmod-tun libopenssl liblzo libpthread libexif libjpeg libsqlite3 libffmpeg libid3tag libflac libvorbis libuuid kmod-ipv6 ip6tables odhcp6c 6in4 6rd 6to4 ds-lite zlib uclibcxx libgcc libogg kmod-ip6tables libip6tc libxtables kmod-sit kmod-ip6-tunnel kmod-iptunnel4 kmod-iptunnel6.

Twoj skrypt nie sprawdza zaleznosci zaleznosci, w tym wypadku libffmpeg-mini

opkg info libffmpeg-mini
Package: libffmpeg-mini
Version: 0.8.7-2
Depends: libc, libpthread, zlib, libbz2
Provides: libffmpeg
Status: install ok installed
Section: libs
Architecture: ar71xx
Maintainer: OpenWrt Developers Team <openwrt-devel@openwrt.org>
MD5Sum: 2239b99cf3b14c704514228deba9b407
Size: 718033
Filename: libffmpeg-mini_0.8.7-2_ar71xx.ipk
Source: feeds/packages/multimedia/ffmpeg
Description: FFmpeg is a a software package that can record, convert and stream digital
 audio and video in numerous formats.
 .
 This package contains minimal-featured FFmpeg shared libraries.

Sugestja:
dodaj kasowanie z /etc/config plikow *-opkg

I co z instalowaniem z dysku innej wersji paczki niz w repo?
Przyklad configa:
list opkg transmission-daemon /mnt/hdd1/transmission-daemon_2.42-1_ar71xx.ipk

Pozdrawiam