Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

tangent's scratchpad

by tangent (Deacon)
on May 18, 2011 at 02:41 UTC ( #905404=scratchpad: print w/ replies, xml ) Need Help??

My friend wants to change the partition of software. It's an embedded system and he has a problem with memory, and needs to divide the files to specific sectors.
The old table - in config_g3_part.sh - only defines the start point with 1 sector = 1024 bytes, but now I want to implement the new table with 'startsector', and 'endsector', with 1 sector = 512 bytes, as defined in the second table.

I think the shell command that needs to be changed is 'fdisk' in all the functions like g3_part_create_primary_partition(). There is some documentation on fdisk here if it is any help:

www.busybox.net/downloads/BusyBox.html

config_g3_part.sh

#!/bin/ash ################################################################## # This section should be adapted for other partitionsizes ################################################################## #@TODO: remove this line when Full Operation Download is available! Th +en this variable is set in lua script before starting g3part.sh BLOCK_DEV="/dev/mmcblk1" PARTITION_SCHEMA1="part3 part1 part2 part4 part5 part6" # part7" #The Old Partition, should be removed # PARTITION_SCHEMA1="part4" # part7" # description ;name ;size in sectors + ;type (pri/ext/log) # 1 sector = 1024 byte part1="RFS bootchain 1 ;1 ;3072000 + ;primary" part2="RFS bootchain 2 ;2 ;3072000 + ;primary" part3="persistent ;3 ;102400 + ;primary" part4="extended for following parts ;4 ;rest + ;extended" part5="static ;5 ;614400 + ;logical" part6="dynamic ;6 ;rest + ;logical" part7="navigation ;7 ;rest + ;logical" # End The Old Partition # Here is what I want to implement, this partition is the target # description ;name ;startsector ;endse +ctor ;type (pri/ext/log) # 1 sector = 512 byte part1="RFS for bootchain 1 ;1 ;299074 ;27566 +74 ;primary" part2="RFS for bootchain 2 ;2 ;2756676 ;52142 +76 ;primary" part3="persistent ;3 ;196672 ;29907 +2 ;primary" part4="extended ;4 ;5214278 ;end + ;extended" part5="static ;5 ;5214294 ;12791 +894 ;logical" part6="dynamic ;6 ;12791912 ;17911 +912 ;logical" part7="navigation ;7 ;17911930 ;end + ;logical" # End new Table RESERVEDBLOCK=196672 PARTITION_TABLE_SPACE=16 SECTOR_INC=1

g3_part.sh

#!/bin/ash #ERROR COUNTER export ERRNO=0 TFTP_DOWNLOAD=0 if [[ ${TFTP_DOWNLOAD} == 1 ]];then #@TODO: check the filename tftp -g -r target/sh/ai_sw_update_functions.sh 172.17.0.5 tftp -g -r target/sh/config_g3_part.sh 172.17.0.5 PARTITION_SCHEMA_CONF="PARTITION_SCHEMA1" CONFIGURATION_FILE="config_g3_part.sh" source ai_sw_update_functions.sh else mediumSHPath=$1 CONFIGURATION_FILE=$2 PARTITION_SCHEMA_CONF=$3 # includes functions source ${mediumSHPath}/ai_sw_update_functions.sh if [ -z $CONFIGURATION_FILE ];then ai_sw_update_message_to_user "ERROR" "one or more parameters are + missing" exit 1 fi fi ###################################################################### +############# # FUNCTIONS g3_part_remove_partition () { local _DEVICE=$1 local _PARTITION=$2 local _ERRNO=0 echo -e "d\n"${_PARTITION}"\nw\n" | fdisk -u ${_DEVICE} #>/dev/null + 2>&1 if [[ $? == 0 ]];then ai_sw_update_message_to_user "INFO" "partition ${_DEVICE} $_PART +ITION removed successful" return 0 else ai_sw_update_message_to_user "WARNING" "removing ${_DEVICE} $_PA +RTITION partition failed" return 1 fi } g3_part_delete_all_partitions_after () { local _DEVICE=$1 local _STARTSECTOR=$2 local _ERRNO=0 local _found_extended=0 local _last_removed_logical_partition=0 partition_table=$(fdisk -lu ${_DEVICE} | grep "${_DEVICE}*") partition_table=${partition_table##Disk ${_DEVICE}\:*MB,*bytes} i=0 for DEV in $partition_table;do case $DEV in ${_DEVICE}p?) i=1 FDISK_DEVICE=$DEV partition=${FDISK_DEVICE##${_DEVICE}p} ;; \*) #skip this entry it is the bootflag ;; *) for DEV_ITEM in $DEV;do case $i in 1) FDISK_SECTORSTART=$DEV ;; 2) FDISK_ENDSECTOR=$DEV ;; 3) FDISK_SIZE=$DEV ;; 4) FDISK_TYPE=$DEV ;; 5) FDISK_TYPE_STRING=$DEV ;; esac i=$(( $i + 1 )) if [ $i -gt 6 ];then break; fi done ;; esac if [ $i == 6 ];then ai_sw_update_message_to_user "INFO" "check if $partition is b +ehind $_STARTSECTOR" g3_part_umount_partition ${FDISK_DEVICE} if [ ${FDISK_TYPE} == "5" ];then ai_sw_update_message_to_user "INFO" "found extended partit +ion" _found_extended=1 fi if [ ${FDISK_SECTORSTART} -gt ${_STARTSECTOR} ] || [ ${FDISK_ +SECTORSTART} == ${_STARTSECTOR} ];then if [ $_found_extended == 1 ] && [ $_last_removed_logical_p +artition -gt 0 ];then g3_part_remove_partition $_DEVICE ${_last_removed_logic +al_partition} ai_sw_update_error_check $? else g3_part_remove_partition $_DEVICE ${partition} ai_sw_update_error_check $? fi if [ ${FDISK_TYPE} == "5" ];then #the extended partition is always the last within the p +artitioning schema #because of that the script can stop here to search for + further partitions break fi if [ $_found_extended == 1 ] && [ $_last_removed_logical_p +artition == 0 ];then ai_sw_update_message_to_user "INFO" "logical partition +last removed: $partition" _last_removed_logical_partition=$partition fi else if [ $_last_removed_logical_partition -gt 0 ]; then g3_part_remove_partition $_DEVICE ${_last_removed_logic +al_partition} ai_sw_update_error_check $? fi fi fi done return $_ERRNO } g3_part_create_primary_partition () { local _DEVICE=$1 local _PART_NAME=$2 local _PARTSECTORS_START=$3 local _PARTSIZE=$4 echo -e "n\np\n"${_PART_NAME}"\n"${_PARTSECTORS_START}"\n+"${_PARTS +IZE}"\n\nw\n" | fdisk -u ${_DEVICE} >/dev/null 2>&1 return $? } g3_part_create_extended_partition () { local _DEVICE=$1 local _PARTSECTORS_START=$2 local _TOTALSIZE=$3 echo -e "n\ne\n"${_PARTSECTORS_START}"\n"${_TOTALSIZE}"\n\nw\n" | f +disk -u ${_DEVICE} >/dev/null 2>&1 return $? } g3_part_create_extended_partition_not4 () { local _DEVICE=$1 local _PART_NAME=$2 local _PARTSECTORS_START=$3 local _TOTALSIZE=$4 echo -e "n\ne\n"${_PART_NAME}"\n"${_PARTSECTORS_START}"\n"${_TOTALS +IZE}"\n\nw\n" | fdisk -u ${_DEVICE} >/dev/null 2>&1 return $? } g3_part_create_logical_partition () { local _DEVICE=$1 local _PARTSECTORS_START=$2 local _PARTSIZE=$3 echo -e "n\nl\n"${_PARTSECTORS_START}"\n+"${_PARTSIZE}"\n\n\nw\n" | + fdisk -u ${_DEVICE} >/dev/null 2>&1 return $? } g3_part_create_logical_partition_at_end () { local _DEVICE=$1 local _PARTSECTORS_START=$2 echo -e "n\n+"$_PARTSECTORS_START"\n\n\nw\n" | fdisk -u ${_DEVICE} +>/dev/null 2>&1 return $? } g3_part_check_partition_size () { local _AVAIL_VAR=$1 local _START_VAR=$2 local DEV=$3 local PART=$4 local DEVICE="" local AVAIL_VAR="" local START_VAR="" local END_VAR="" AVAIL_VAR=$(fdisk -lu ${DEV} | grep p${PART}) if [[ ! -z "$AVAIL_VAR" ]];then i=0 for avail_var_item in $AVAIL_VAR do case $i in 0) DEVICE=$avail_var_item ;; 1) START_VAR=$avail_var_item ;; 2) END_VAR=$avail_var_item ;; esac i=$(( $i + 1 )) if [ $i -gt 3 ];then break; fi done if [ $DEV == ${DEVICE%%p?} ];then case $START_VAR in *[0-9]) ;; *) eval "$_AVAIL_VAR=0" eval "$_START_VAR=0" return 1 ;; esac if [ ! -z "$START_VAR" ] || [ ! -z "$END_VAR" ];then eval "$_AVAIL_VAR=$(( $END_VAR - $START_VAR ))" eval "$_START_VAR=$(($START_VAR))" return 0 else eval "$_AVAIL_VAR=0" eval "$_START_VAR=0" return 1 fi else return 1 fi else eval "$_AVAIL_VAR=0" eval "$_START_VAR=0" return 1 fi } g3_part_umount_partition () { local _DEVICE=$1 umount ${_DEVICE} >/dev/null 2>&1 return $? } ###################################################################### +############# if [ -z "$PARTITION_SCHEMA_CONF" ];then ai_sw_update_message_to_user "ERROR" "Missing parameter for configu +ration" exit 1 else if [ -e "$CONFIGURATION_FILE" ];then source $CONFIGURATION_FILE eval "PARTITION_SCHEMA=\$$PARTITION_SCHEMA_CONF" ai_sw_update_message_to_user "INFO" "Updating the partitionschem +a with config: $CONFIGURATION_FILE\n\t $PARTITION_SCHEMA_CONF" else ai_sw_update_message_to_user "ERROR" "No CONFIGURATION_FILE avai +lable" exit 1 fi fi #global variables #todo check if there sector position is bigger that total sectors...el +se ERROR SECTOR_POSITION=$(( $RESERVEDBLOCK + $SECTOR_INC )) TOTAL_SECTORS=$(fdisk -lu ${BLOCK_DEV} | grep total |awk -F, {'print $ +4'}|awk {'print $2'}) PARTITIONS_REMOVED="false" partition_counter=1 for partition_info_line in $PARTITION_SCHEMA do eval "partition_info=\$$partition_info_line" i=0 DESCRIPTION="" NAME="" SIZESECTORS="" TYPE="" #change the internal field separator OIFS=$IFS IFS=";" for partition_info_item in $partition_info do case $i in 0) DESCRIPTION=$partition_info_item ;; 1) NAME=$partition_info_item ;; 2) SIZESECTORS=$partition_info_item ;; 3) TYPE=$partition_info_item ;; esac i=$(( $i + 1 )) if [ $i -gt 4 ];then break; fi done IFS=$OIFS { #checks if there is missing stuff for this partition if [ -z $NAME ];then ai_sw_update_message_to_user "ERROR" "Not existing NAME for $DES +CRIPTION" exit 1 fi if [ -z $SIZESECTORS ];then ai_sw_update_message_to_user "ERROR" "Not existing SIZE for $DES +CRIPTION: " exit 1 fi if [ -z $TYPE ];then ai_sw_update_message_to_user "ERROR" "Not existing TYPE for $DES +CRIPTION" exit 1 fi if [ $SIZESECTORS == "rest" ];then #calculate the sector size as a difference between total sectors + and the actual sectorposition SIZESECTORS=$(( $TOTAL_SECTORS - $SECTOR_POSITION - $SECTOR_INC) +) else #check if this size is available else exit if [ $SIZESECTORS -gt $(( $TOTAL_SECTORS - $SECTOR_POSITION )) +];then ai_sw_update_message_to_user "ERROR" "Partition $NAME $DESCRI +PTION does not fit to the disk" exit 1 fi fi #executes the partitioning ai_sw_update_message_to_user "INFO" "check partition ${BLOCK_DEV}p$ +NAME description: $DESCRIPTION" g3_part_check_partition_size PARTAVAIL PARTSTART ${BLOCK_DEV} $NAME if [ $PARTSTART != $SECTOR_POSITION ] || [ $PARTAVAIL != $SIZESECTO +RS ];then # this partition and the following should be formated and repart +itioned. ai_sw_update_message_to_user "WARN" "repartitioning for this par +tition $DESCRIPTION needed" ai_sw_update_message_to_user "NONE" "START: $PARTSTART != $SECTO +R_POSITION" ai_sw_update_message_to_user "NONE" "SIZE: $PARTAVAIL != $SIZESE +CTORS" if [ $PARTITIONS_REMOVED == "false" ]; then ai_sw_update_message_to_user "INFO" "delete partition" g3_part_delete_all_partitions_after ${BLOCK_DEV} $SECTOR_POSI +TION PARTITIONS_REMOVED="true" fi case $TYPE in primary) if [ $partition_counter == 4 ];then # todo: #g3_part_create_primary_partition4 ${BLOCK_DEV} $SECTOR_PO +SITION $SIZESECTORS ai_sw_update_message_to_user "WARN" "not implemented" else g3_part_create_primary_partition ${BLOCK_DEV} $NAME $SECTO +R_POSITION $SIZESECTORS fi ;; extended) if [ $partition_counter == 4 ];then g3_part_create_extended_partition ${BLOCK_DEV} $SECTOR_POS +ITION $SIZESECTORS else g3_part_create_extended_partition_not4 ${BLOCK_DEV} $NAME +$SECTOR_POSITION $SIZESECTORS fi ;; logical) g3_part_create_logical_partition ${BLOCK_DEV} $SECTOR_POSITIO +N $SIZESECTORS ;; esac else ai_sw_update_message_to_user "NONE" "no repartitioning for this +partition $DESCRIPTION needed" fi #increment the SECTOR_POSITION case $TYPE in primary) SECTOR_POSITION=$(( $SECTOR_POSITION + $SIZESECTORS + $SECTOR_IN +C )) ;; extended) SECTOR_POSITION=$(( $SECTOR_POSITION + $PARTITION_TABLE_SPACE )) ;; logical) SECTOR_POSITION=$(( $SECTOR_POSITION + $SIZESECTORS + $PARTITION +_TABLE_SPACE + $SECTOR_INC )) ;; esac } partition_counter=$(( $partition_counter + 1 )) done ai_sw_update_message_to_user "INFO" "finished" sync ai_sw_update_end_status

This is ai_sw_update_functions.sh which I don't think needs to be changed.

#!/bin/ash ai_sw_update_message_to_user () { local MSG_TYPE=$1 local MESSAGE=$2 #local SCRIPT_NAME="$(basename $0): " case $MSG_TYPE in "INFO") echo -e "\033[32mINFO\033[0m\t $SCRIPT_NAME"$MESSAGE ;; "WARN") let "WARNNO++" echo -e "\033[31mWARNING\033[0m\t $SCRIPT_NAME"$MESSAGE ;; "ERROR") let "ERRNO++" echo -e "\033[31mERROR occured right here!!!\033[0m" echo -e "\033[31mERROR\033[0m\t $SCRIPT_NAME"$MESSAGE ;; *) echo -e "\t" $MESSAGE ;; esac } ai_sw_update_message_to_errmem () { local MSG_TYPE=$1 local MESSAGE=$2 case $MSG_TYPE in "INFO") echo -e "INFO\t $0:" $MESSAGE"\n" > /dev/errmem ;; "WARN") echo -e "WARNING\t $0:" $MESSAGE"\n" > /dev/errmem ;; "ERROR") echo -e "ERROR\t $0:" $MESSAGE"\n" > /dev/errmem ;; *) echo -e "\t $0:" $MESSAGE > /dev/errmem ;; esac } ai_sw_update_error_check () { local _RET_VAL=$1 local SCRIPT_NAME=$(basename $0) if [ $_RET_VAL = 0 ];then ai_sw_update_message_to_user "NONE" "\033[32msuccess\033[0m" return 0; fi if [ $_RET_VAL > 0 ]; then let "ERRNO++" ai_sw_update_message_to_user "NONE" "\033[31mfailed\033[0m" return 1; fi } ai_sw_update_mkfs () { local _DEVICE=$1 local _FSTYPE=$2 local _MKFS_OPTION=$3 local _MKFS_FORCE=$4 if [ -z "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "mkfs: missing parameter _D +EVICE" return 1 else if [ ! -e ${_DEVICE} ];then ai_sw_update_message_to_user "ERROR" "mkfs: Device not existi +ng ${_DEVICE}" return 1 fi fi if [ -z "${_FSTYPE}" ];then ai_sw_update_message_to_user "ERROR" "mkfs: missing parameter _F +STYPE" return 1 else case ${_FSTYPE} in "bfs"|"btrfs"|"cramfs"|"ext2"|"ext3"|"ext4"|"ext4dev"| \ "hfs"|"hfsplus"|"jffs2"|"minix"|"msdos"|"ntfs"|"ubifs"|"vfat") ai_sw_update_message_to_user "INFO" "mkfs: using supported fi +lesystemtype ${_FSTYPE}" ;; *) ai_sw_update_message_to_user "ERROR" "mkfs: not supported fil +esystemtype ${_FSTYPE}" ;; esac fi if [ -z "${_MKFS_OPTION}" ];then ai_sw_update_message_to_user "WARN" "mkfs: maybe missing paramet +er _MKFS_OPTION" fi if [[ "${_MKFS_FORCE}" == "force" ]];then ai_sw_update_message_to_user "INFO" "mkfs: forcing the mkfs for +${_DEVICE}" else ai_sw_update_message_to_user "INFO" "mkfs: checking fs for ${_DE +VICE}" fsck.${_FSTYPE} -n ${_DEVICE} case $? in 0) ai_sw_update_message_to_user "INFO" "fsck: No errors"; ret +urn 0 ;; 1) ai_sw_update_message_to_user "INFO" "fsck: File system err +ors corrected"; return 0 ;; 2) ai_sw_update_message_to_user "INFO" "fsck: System should b +e rebooted";return 0 ;; 4) ai_sw_update_message_to_user "INFO" "fsck: File system err +ors left uncorrected"; return 0 ;; 8) ai_sw_update_message_to_user "INFO" "fsck: Operational err +or" ;; 16) ai_sw_update_message_to_user "INFO" "fsck: Usage or synta +x error" ;; 32) ai_sw_update_message_to_user "INFO" "fsck: Fsck canceled +by user request" ;; 128) ai_sw_update_message_to_user "INFO" "fsck: Shared librar +y error" ;; *) ai_sw_update_message_to_user "INFO" "fsck: Returnvalue UNK +NOWN" ;; esac fi ai_sw_update_message_to_user "INFO" "mkfs: formating ${_DEVICE}" mkfs.${_FSTYPE} ${_MKFS_OPTION} \ ${_DEVICE} \ >/dev/null ai_sw_update_error_check $? return $? } ai_sw_update_mount_checker () { local _DEVICE=$1 local _FSTYPE=$2 local _DEST_FOLDER=$3 if [ -z "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "mount_checker: missing par +ameter _DEVICE" return 1 fi if [[ ! -e ${_DEVICE} ]];then ai_sw_update_message_to_user "ERROR" "mount_checker: Device not +existing ${_DEVICE}" return 1 fi if [ -z "${_DEST_FOLDER}" ];then ai_sw_update_message_to_user "ERROR" "mount_checker: missing par +ameter _DEST_FOLDER" return 1 fi return_array=$(mount | grep $_DEVICE) if [ -z "${return_array}" ];then ai_sw_update_message_to_user "INFO" "mount_checker: not mounted +$_DEVICE" ai_sw_update_mount ${_DEVICE} ${_FSTYPE} ${_DEST_FOLDER} return $? else i=1 #change the internal field separator OIFS=$IFS IFS=" " for forloopvalue in $return_array do case $i in 3) supposed_dest=$forloopvalue ;; 6) supposed_option=$forloopvalue ;; esac i=$(( $i + 1 )) if [ $i -gt 6 ];then break; fi done IFS=$OIFS if [ ! "${supposed_dest}" = "$(echo $_DEST_FOLDER | sed 's/\/$// +')" ];then ai_sw_update_message_to_user "WARN" "mount_checker: Mount fol +der wrong ${supposed_dest} != ${_DEST_FOLDER}" ai_sw_update_umount ${_DEVICE} ai_sw_update_mount ${_DEVICE} ${_FSTYPE} ${_DEST_FOLDER} return $? fi if test "${supposed_option#*"rw"}" = "$supposed_option";then ai_sw_update_message_to_user "WARN" "mount_checker: Partition + is not mounted RW" ai_sw_update_umount ${_DEVICE} ai_sw_update_mount ${_DEVICE} ${_FSTYPE} ${_DEST_FOLDER} return $? fi ai_sw_update_message_to_user "INFO" "mount_checker: ${_DEVICE} m +ounted correct at ${_DEST_FOLDER}" return 0 fi return 1 } ai_sw_update_umount () { local _DEVICE=$1 if [ -z "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "umount: missing parameter +_DEVICE" return 1 else if [ ! -e "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "umount: Device not exis +ting ${_DEVICE}" return 1 fi fi return_array=$(mount | grep $_DEVICE) if [[ -z "$return_array" ]];then ai_sw_update_message_to_user "INFO" "umount: not mounted $_DEVIC +E" return 0 else ai_sw_update_message_to_user "INFO" "umount: umount $_DEVICE" umount ${_DEVICE} ai_sw_update_error_check $? return $? fi } ai_sw_update_mount () { local _DEVICE=$1 local _FSTYPE=$2 local _DEST_FOLDER=$3 if [ -z "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "mount: missing parameter _ +DEVICE" return 1 fi if [[ ! -e ${_DEVICE} ]];then ai_sw_update_message_to_user "ERROR" "mount: Device not existing + ${_DEVICE}" return 1 fi if [ -z "${_FSTYPE}" ];then ai_sw_update_message_to_user "ERROR" "mount: missing parameter _ +FSTYPE" return 1 fi if [ -z "${_DEST_FOLDER}" ];then ai_sw_update_message_to_user "ERROR" "mount: missing parameter _ +DEST_FOLDER" return 1 fi if [[ ! -d ${_DEST_FOLDER} ]]; then ai_sw_update_message_to_user "INFO" "mount: mkdir & chattr +i fo +r ${_DEST_FOLDER}" mkdir -p ${_DEST_FOLDER} && \ chattr +i ${_DEST_FOLDER} ai_sw_update_error_check $? if [ $? = 0 ];then ai_sw_update_message_to_user "INFO" "mount: mount ${_DEVICE} +to ${_DEST_FOLDER}" mount -t ${_FSTYPE} ${_DEVICE} ${_DEST_FOLDER} ai_sw_update_error_check $? return $? fi else ai_sw_update_message_to_user "INFO" "mount: mount ${_DEVICE} to +${_DEST_FOLDER}" mount -t ${_FSTYPE} ${_DEVICE} ${_DEST_FOLDER} ai_sw_update_error_check $? return $? fi return 1 } ai_sw_update_tune_partition () { local _DEVICE=$1 if [ -z "${_DEVICE}" ];then ai_sw_update_message_to_user "ERROR" "tune_partition: missing pa +rameter _DEVICE" return 1 else if [ ! -e ${_DEVICE} ];then ai_sw_update_message_to_user "ERROR" "tune_partition: Device +not existing ${_DEVICE}" return 1 fi fi ai_sw_update_message_to_user "INFO" "tune_partition: tuning -c 0 ${ +_DEVICE}" tune2fs -c 0 ${_DEVICE} ai_sw_update_error_check $? return $? } ai_sw_update_install_tar () { local _DEST_FOLDER=$1 local _TARBAL=$2 local _MODE=$3 if [ -z "${_DEST_FOLDER}" ];then ai_sw_update_message_to_user "ERROR" "install_tar: missing param +eter _DEST_FOLDER" return 1 fi if [ -z "${_TARBAL}" ];then ai_sw_update_message_to_user "ERROR" "install_tar: missing param +eter _TARBAL" return 1 fi if [ ! -f ${_TARBAL} ];then ai_sw_update_message_to_user "ERROR" "install_tar: missing file +${_TARBAL}" return 1 fi if [ ! "${_MODE}" = "v" ] && [ ! -z "${_MODE}" ];then ai_sw_update_message_to_user "ERROR" "install_tar: Mode not corr +ect ${_MODE} = ('' or 'v')" return 1 fi ai_sw_update_message_to_user "INFO" "install_tar: Copy linux file s +ystem ${_TARBAL}..." tar x${_MODE}f ${_TARBAL} \ -C${_DEST_FOLDER} ai_sw_update_error_check $? return $? } ai_sw_update_end_status () { local _exitvalue=0 if [ $ERRNO != 0 ]; then echo -e "\033[32mexiting "$(basename $0)" "$*"\033[0m with "$ERR +NO"\033[31m Errors\033[0m" _exitvalue=1 else echo -e "\033[32mexiting "$(basename $0)" "$*"\033[0m" fi exit $_exitvalue }
Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2014-10-22 10:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (115 votes), past polls