Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

tangent's scratchpad

by tangent (Curate)
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 pondering the Monastery: (12)
As of 2014-12-18 12:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (51 votes), past polls