| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | #!/bin/bash## SuperGlue project | http://superglue.it | 2014-2015 | GPLv3## http://git.superglue.it/superglue/serverfiles#### make_fw.sh - Superglue firmware image building script#### Needs:## - OpenWRT ImageBuilder blob:##    http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic##    or http://downloads.openwrt.org/snapshots/trunk/ar71xx## - Fetch (needed) packages:##    https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages## - Superglue serverfiles local repo (which this script is a part of):##    http://git.superglue.it/superglue/serverfiles/tree/master## errors are futileset -e## make sure we are running from the upper level directory[[ $(pwd) == $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) ]] && (echo "ERROR: must be run as ./tools/$(basename $0), exiting"; exit 1;)_PWD=$(pwd)_IMAGEBUILDER="$_PWD/../../../openwrt/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64"_BUILDS="$_PWD/../../../sg-builds"[[ -e $_IMAGEBUILDER ]] || (echo 'ImageBuilder is missing'; exit 1;)[[ -e $_BUILDS ]] || (echo 'Builds directory is missing'; exit 1;)set +e## dirs with platform specific files_TARGETS='DIR505A1 TLWR710' #WRT160NL## dir with common files_COMMON='common'_SG_REVISION="$_PWD/superglue.revision"if [[ -e $_SG_REVISION ]]; then  source $_SG_REVISIONelse  ## versioning defaults  ## change these in $_SG_REVISION   _MAJOR='0.1'  _MINOR='0'  _SUFFIX='testing'  echo -e "_MAJOR=$_MAJOR\n_MINOR=$_MINOR\n_SUFFIX=$_SUFFIX" > $_SG_REVISIONfilet _MINOR++_OPENWRT_REVISION="$_PWD/openwrt.revision"## browser extension (if any)_EXT_SRC="$_PWD/../../editor/build/superglue-firefox.xpi"## include devTools?_DEV_TOOLS=false## get OpenWRT revision_OPENWRT=$(fgrep -m1 'REVISION:=' $_IMAGEBUILDER/include/version.mk || echo 'r00000')_OPENWRT=${_OPENWRT/REVISION:=/}echo $_OPENWRT > $_OPENWRT_REVISION_VERSION="$_MAJOR"."$_MINOR"-"$_SUFFIX"## define how firmware files are named_FN_PREFIX='superglue-firmware'echo -e "Build ver: $_VERSIONTargets: $_TARGETS\n"trap abort INTabort() {  echo -e "Bye..\n"  exit 1}echo 'Ready? [Y/n] '; read _USER_ANSWif [[ $_USER_ANSW == 'n' ]]; then  abortelif [[ $_USER_ANSW == 'y' || $_USER_ANSW == '' ]]; then  truefiecho 'Removing temporary dirs (if any)'find -maxdepth 1 -name *.tmp -exec rm -Rf {} \;for _TARGET in $_TARGETS; do  _BIN_DIR=$_BUILDS/$_VERSION/$_TARGET  echo 'cleaning target and binary directories..'  [[ -e $_TARGET.tmp ]] && rm -Rf $_TARGET.tmp   [[ -e $_BIN_DIR ]] && rm -Rf $_BIN_DIR  sleep 1  echo 'copying common and target specific files..'  cp -Ra $_COMMON $_TARGET.tmp  cp -Ra $_TARGET/* $_TARGET.tmp/   sleep 1  if [ $_DEVTOOLS = false ]; then    echo 'removing devTools..'    rm -Rf $_TARGET.tmp/opt/lib/devTools  fi    if [[ -e $_EXT_SRC ]]; then    echo 'copying browser extension..'    _EXT_DST="$_TARGET.tmp/opt/lib/extension/superglue.xpi"    [[ -e $(dirname $_EXT_DST) ]] || mkdir $(dirname $_EXT_DST)    cp -Ra $_EXT_SRC $_EXT_DST    sleep 1  fi  echo 'cleaning temporary files..'  find . -name '*.swp' -o -iname "[._]*.s[a-w][a-z]" -o -iname '*.tmp' -o -iname '*.bup' -o -iname '*.bak' -exec rm -Rf {} \;  sed -e "s/%REVISION%/$_OPENWRT/g" -e "s/%VERSION%/$_VERSION/g" $_COMMON/etc/banner > $_TARGET.tmp/etc/banner  echo $_VERSION > $_TARGET.tmp/etc/superglue_version  cd $_IMAGEBUILDER && make clean  echo -e "\nbuilding $_TARGET image!\n"  sleep 2  ## currently unused packages  # kmod-fs-vfat kmod-fs-btrfs btrfs-progs kmod-fs-ext4 sudo   make image PROFILE=$_TARGET PACKAGES="bash gawk openssh-sftp-server haserl lighttpd lighttpd-mod-access lighttpd-mod-cgi lighttpd-mod-compress lighttpd-mod-accesslog lighttpd-mod-rewrite lighttpd-mod-auth lighttpd-mod-alias lighttpd-mod-proxy lighttpd-mod-setenv blkid block-mount mini-sendmail kmod-usb-storage kmod-scsi-generic mount-utils kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-utf8 kmod-nls-base coreutils-stat mini-httpd-htpasswd wireless-tools avahi-daemon kmod-fs-btrfs btrfs-progs swap-utils sfdisk coreutils-base64 coreutils-sha1sum rpcd-mod-iwinfo procps-ps uhttpd uhttpd-mod-ubus openvpn-openssl dtach curl" FILES=$_PWD/$_TARGET.tmp BIN_DIR=$_BIN_DIR/openwrt  _ERR=$?  if [[ $_ERR -gt 0 ]]; then    echo -e "\nFAILED to build $_TARGET image :/ (are we missing packages?) \n"    exit 1  fi  _FILENAME="$_FN_PREFIX"_"$_VERSION"_"$(echo $_TARGET | tr [:upper:] [:lower:])"  cd $_BIN_DIR  ln -s ./openwrt/openwrt-*-factory.bin ./$_FILENAME'_initial.bin'   ln -s ./openwrt/openwrt-*-sysupgrade.bin ./$_FILENAME'_upgrade.bin'  [[ -e ./$_FILENAME'_initial.bin' ]] && [[ -e ./$_FILENAME'_upgrade.bin' ]] &&  md5sum *.bin > md5sums  _ERR=$?  cd -  if [[ $_ERR -eq 0 ]]; then     echo -e "\n$_TARGET build completed\n"  else    echo -e "\nError making symlinks! Images not built. Were they too large?\n"    rm -Rf $_BIN_DIR  fi  echo 'Cleaning up..'  make clean  cd $_PWD   rm -Rf $_TARGET.tmp  doneif [[ $_ERR -eq 0 ]]; then  ## if build succeeded bump revision  echo -e "_MAJOR=$_MAJOR\n_MINOR=$_MINOR\n_SUFFIX=$_SUFFIX" > $_SG_REVISION  echo -e "\n$_TARGET build SUCCEEDED! :)\n"  ## create symlinks to the latest  [[ -h $_BUILDS/latest ]] || rm -rf $_BUILDS/latest  ln -sf $_BUILDS/$_VERSION -T $_BUILDS/latestelse  echo -e "\n$_TARGET build FAILED.. :/\n"  sleep 5fiexit $_ERR
 |