#!/bin/bash # Set PROGram name PROG=$(basename $0) ######################################################################## #+ #+ NAME #+ $PROG - ChromeOS image pusher (.zip and .bin) #+ #+ SYNOPSIS #+ $PROG [--nolatest] [--beta] [--branch=] #+ --board= #+ $PROG [--help | -man] #+ $PROG [--usage | -?] #+ #+ DESCRIPTION #+ Push images up to archive server, chromeos-images and chrome-master.mtv. #+ Always pushes up to -rc (release candidate) namespace. #+ #+ OPTIONS #+ [--beta] - Beta Channel #+ [--nolatest] - Do not set LATEST file #+ [--branch] - branch value determines if support #+ scripts also get updated #+ [--help | -man] - display man page for this script #+ [--usage | -?] - display usage information #+ #+ EXAMPLES #+ #+ FILES #+ Applicable files #+ Related files #+ #+ SEE ALSO #+ stdlib.sh - function definitions for TimeStamp, etc. #+ Other related scripts #+ #+ BUGS/TODO #+ Known problems with script #+ #- AUTHOR & DT : djmm Wed Jul 21 15:02:45 PDT 2010 #- ######################################################################## # If NO ARGUMENTS should return *usage*, uncomment the following line: usage=${1-yes} # This construct allows $PROG to be a symlink or simply PATH'd to symlink=$(readlink $0) # Set up basic env and standard functions . $(dirname ${symlink:-$0})/stdlib.sh # Set some default options DRYRUN=false VERBOSE=false CHANNEL=dev-channel NOLATEST=false RC=-rc for arg in $LOOSEARGS do case "$arg" in --beta) CHANNEL=beta-channel ;; --nolatest) NOLATEST=true ;; -v) VERBOSE=true ;; *) looseargs="$looseargs $arg" ;; esac done # strip leading spaces from final looseargs to pass to program basedir=$(echo $looseargs) basedir=$(cd $basedir && pwd) if [ -z "$board" ] then $PROG -? exit fi BOARD=$board ############################################################################### # MAIN ############################################################################### tooldir=$(dirname $0) cversion=$(basename $basedir) cversion2=${cversion%%-*} binfile=/tmp/ChromeOS-$cversion-$BOARD.bin.gz image_host='chromeos-images.corp.google.com' # This should change based on architecture/board and dev/beta channel imagetarget_base=/var/www/chromeos-official imagetarget=$imagetarget_base/$CHANNEL/$BOARD$RC usbtarget=/usr/local/google/cltbld/chromeos/$CHANNEL baseimagename=chromiumos_base_image.bin baseimage=$(dirname $basedir)/src/build/images/$BOARD/$cversion2-a1/$baseimagename # BEGIN script TimeStamp begin ReleaseNotify() { local lmailto=${1:-"$USER"} local lmailfile=/tmp/$PROG-mail.$$ logecho -r logecho "Notifying $lmailto of release push..." cat <<+_MailFile > $lmailfile $cversion2 $BOARD is ready for testing at http://go/chromeos-images.

The ChromeOS-RE Team +_MailFile mail -s "ChromeOS $cversion2 $BOARD ready for testing" \ -a "From: ChromeOS Releng" \ -a "Content-type: text/html" $lmailto < $lmailfile # cleanup rm -f $lmailfile } # SEND TO MAIN IMAGE TARGET if ssh $image_host test -d $imagetarget/$cversion2 then echo "$imagetarget already exists. Skipping..." else echo "Sending images up to $imagetarget/$cversion2..." ssh $image_host mkdir -p $imagetarget/$cversion2 scp $basedir/image.zip $image_host:$imagetarget/$cversion2/ChromeOS-$cversion-$BOARD.zip scp $basedir/factory_image.zip $image_host:$imagetarget/$cversion2/ChromeOS-factory-$cversion-$BOARD.zip scp $basedir/*.tar.bz2 $image_host:$imagetarget/$cversion2 if [ -f $basedir/au-generator.zip ]; then scp $basedir/au-generator.zip $image_host:$imagetarget/$cversion2/ fi scp $basedir/debug.tgz $image_host:$imagetarget/$cversion2/debug-$BOARD.tgz # Copy the build log, ChangeLog and manifest.xml files scp $basedir/*.log $basedir/*.*ml $image_host:$imagetarget/$cversion2 # Only update support scripts if master if [ "$branch" = master ] then scp $(dirname $0)/promoterc $image_host:$imagetarget_base fi case "$BOARD" in x86-mario|x86-agz|x86-alex|x86-zgb) # Create PVT signed/mod'd images by default ssh $image_host touch $imagetarget/$cversion2/.tobesigned # Copy over the new format signing insturctions. scp $(dirname $0)/signer_instructions/$BOARD.instructions \ $image_host:$imagetarget/$cversion2/ChromeOS-$cversion-$BOARD.instructions ;; esac $NOLATEST || ssh $image_host "cd $imagetarget && echo $cversion > LATEST" ReleaseNotify chromeos-releases@google.com fi if [ "$USER" = "chrome-bot" ] then Exit 0 "Can't send images to chrome-master.mtv from bot jail. Do it by hand. Exiting..." fi # SEND TO USB TARGET echo "Compressing image..." # Make compressed image if [ -f $baseimage ] then cat $baseimage |gzip > $binfile else echo "$baseimage not found! Extracting from image.zip..." mkdir /tmp/foobar.$$ cd /tmp/foobar.$$ unzip $basedir/image.zip $baseimagename cat $baseimagename | gzip > $binfile cd /tmp rm -rf /tmp/foobar.$$ fi # To store usb key insructions images echo "Copying to chrome-master.mtv..." scp $binfile chrome-master.mtv:$usbtarget if ! $NOLATEST then echo "Updating LATEST-$BOARD$RC file..." ssh chrome-master.mtv "echo $(basename $binfile) > $usbtarget/LATEST-$BOARD$RC" fi # Recursive 775 of upload dir ssh chrome-master.mtv "chmod -R 775 $usbtarget 2>&-" # Copy script and README scp $tooldir/mkcrosusb.sh chrome-master.mtv:$usbtarget/.. scp $tooldir/mkcrosusb.README chrome-master.mtv:$usbtarget/../README.txt rm -f $binfile # END script TimeStamp end