From bdd9997bb5b7a6df285dfb74472da3b0d35b0807 Mon Sep 17 00:00:00 2001 From: Artem Smirnov Date: Mon, 20 Aug 2018 17:55:44 +0300 Subject: [PATCH] image_builder: add echo_stamp --- image_builder/image_config.sh | 123 +++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/image_builder/image_config.sh b/image_builder/image_config.sh index 32dbd08a..fd859733 100755 --- a/image_builder/image_config.sh +++ b/image_builder/image_config.sh @@ -9,6 +9,25 @@ set -e # @dvornikov-aa Andrey Dvornikov # +echo_stamp() { + + # STATIC FUNCTION + # TEMPLATE: echo_stamp + # TYPE: SUCCESS, ERROR, INFO + + # More info there https://www.shellhacks.com/ru/bash-colors/ + + TEXT="$(date) | $1" + TEXT="\e[1m$TEXT\e[0m" # BOLD + + case "$2" in + SUCCESS) TEXT="\e[31m${TEXT}\e[0m" # GREEN + ERROR) TEXT="\e[31m${TEXT}\e[0m" # RED + *) TEXT="\e[31m${TEXT}\e[0m" # BLUE +esac + echo -e ${TEXT} +} + get_image() { # STATIC FUNCTION @@ -17,16 +36,16 @@ get_image() { local RPI_ZIP_NAME=$(basename $2) if [ ! -e "$1/${RPI_ZIP_NAME}" ]; then - echo "$(date) | 1. Downloading original Linux distribution" + echo_stamp "1. Downloading original Linux distribution" wget -nv -O $1/${RPI_ZIP_NAME} $2 - echo "$(date) | Downloading complete" + echo_stamp "Downloading complete" "SUCCESS" else - echo "$(date) | 1. Linux distribution already donwloaded" + echo_stamp "1. Linux distribution already donwloaded" fi - echo "$(date) | 2. Unzipping Linux distribution image" + echo_stamp "2. Unzipping Linux distribution image" local RPI_IMAGE_NAME=$(echo ${RPI_ZIP_NAME} | sed 's/zip/img/') unzip -p $1/${RPI_ZIP_NAME} ${RPI_IMAGE_NAME} > $1/$3 - echo "$(date) | Unzipping complete" + echo_stamp "Unzipping complete" "SUCCESS" } resize_fs() { @@ -57,23 +76,23 @@ resize_fs() { # There is a risk that sfdisk will ask for a disk remount to update partition table # TODO: Check sfdisk exit code - echo -e "\033[0;31m\033[1mTruncate image\033[0m\033[0m" \ + echo_stamp "Truncate image" \ && truncate -s$2 $1 \ - && echo "Mount loop-image: $1" \ + && echo_stamp "Mount loop-image: $1" \ && local DEV_IMAGE=$(losetup -Pf $1 --show) \ && sleep 0.5 \ - && echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m" \ + && echo_stamp "Mount loop-image: $1" \ && echo ", +" | sfdisk -N ${ROOT_PARTITION} ${DEV_IMAGE} \ && sleep 0.5 \ && losetup -d ${DEV_IMAGE} \ && sleep 0.5 \ && local DEV_IMAGE=$(losetup -Pf $1 --show) \ && sleep 0.5 \ - && echo -e "\033[0;31m\033[1mCheck & repair filesystem after expand partition\033[0m\033[0m" \ + && echo_stamp "Check & repair filesystem after expand partition" \ && e2fsck -fvy "${DEV_IMAGE}p${ROOT_PARTITION}" \ - && echo -e "\033[0;31m\033[1mExpand filesystem\033[0m\033[0m" \ + && echo_stamp "Expand filesystem" \ && resize2fs "${DEV_IMAGE}p${ROOT_PARTITION}" \ - && echo -e "\033[0;31m\033[1mUmount loop-image\033[0m\033[0m" \ + && echo_stamp "Umount loop-image" \ && losetup -d ${DEV_IMAGE} set -e @@ -88,45 +107,45 @@ execute() { local BOOT_PARTITION=1 local ROOT_PARTITION=2 - echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m" + echo_stamp "Mount loop-image: $1" local DEV_IMAGE=$(losetup -Pf $1 --show) sleep 0.5 # Get temp directory to mount image local MOUNT_POINT=$(mktemp -d) - echo -e "\033[0;31m\033[1mMount dirs ${MOUNT_POINT} & ${MOUNT_POINT}/boot\033[0m\033[0m" + echo_stamp "Mount dirs ${MOUNT_POINT} & ${MOUNT_POINT}/boot" mount "${DEV_IMAGE}p${ROOT_PARTITION}" ${MOUNT_POINT} mount "${DEV_IMAGE}p${BOOT_PARTITION}" ${MOUNT_POINT}/boot - echo -e "\033[0;31m\033[1mBind system dirs\033[0m\033[0m" - echo "Mounting /proc in chroot... " + echo_stamp "Bind system dirs" + echo_stamp "Mounting /proc in chroot... " if [ ! -d ${MOUNT_POINT}/proc ] ; then - mkdir -p ${MOUNT_POINT}/proc - echo "Created ${MOUNT_POINT}/proc" + mkdir -p ${MOUNT_POINT}/proc \ + && echo_stamp "Created ${MOUNT_POINT}/proc" "SUCCESS" fi mount -t proc -o nosuid,noexec,nodev proc ${MOUNT_POINT}/proc \ - && echo "OK" + && echo_stamp "OK" "SUCCESS" - echo "Mounting /sys in chroot... " + echo_stamp "Mounting /sys in chroot... " if [ ! -d ${MOUNT_POINT}/sys ] ; then - mkdir -p ${MOUNT_POINT}/sys - echo "Created ${MOUNT_POINT}/sys" + mkdir -p ${MOUNT_POINT}/sys \ + && echo_stamp "Created ${MOUNT_POINT}/sys" "SUCCESS" fi mount -t sysfs -o nosuid,noexec,nodev sysfs ${MOUNT_POINT}/sys \ - && echo "OK" + && echo_stamp "OK" "SUCCESS" - echo "Mounting /dev/ and /dev/pts in chroot... " \ + echo_stamp "Mounting /dev/ and /dev/pts in chroot... " \ && mkdir -p -m 755 ${MOUNT_POINT}/dev/pts \ && mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${MOUNT_POINT}/dev \ && mount -t devpts -o gid=5,mode=620 devpts ${MOUNT_POINT}/dev/pts \ - && echo "OK" + && echo_stamp "OK" "SUCCESS" - echo -e "\033[0;31m\033[1mCopy DNS records\033[0m\033[0m" \ + echo_stamp "Copy DNS records" \ && cp -L /etc/resolv.conf ${MOUNT_POINT}/etc/resolv.conf if [[ $# > 1 ]]; then - echo -e "\033[0;31m\033[1m$(date) | Enter chroot\033[0m\033[0m" + echo_stamp "Entering to chroot" local script_name=$(basename $2) # TODO: maybe copy to tmp-dir local script_path_root="${MOUNT_POINT}/root/${script_name}" @@ -146,7 +165,7 @@ execute() { # https://losst.ru/vosstanovlenie-grub2 # http://unixteam.ru/content/virtualizaciya-ili-zapuskaem-prilozhenie-v-chroot-okruzhenii-razmyshleniya # http://help.ubuntu.ru/wiki/%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_grub - echo -e "\033[0;31m\033[1mEnter chroot\033[0m\033[0m" \ + echo_stamp "Entering to chroot" \ && chroot ${MOUNT_POINT} /bin/bash fi @@ -162,21 +181,21 @@ copy_to_chroot() { local BOOT_PARTITION=1 local ROOT_PARTITION=2 - echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m" + echo_stamp "Mount loop-image: $1" local DEV_IMAGE=$(losetup -Pf $1 --show) sleep 0.5 # Get temp directory to mount image local MOUNT_POINT=$(mktemp -d) - echo -e "\033[0;31m\033[1mMount dirs ${MOUNT_POINT} & ${MOUNT_POINT}/boot\033[0m\033[0m" + echo_stamp "Mount dirs ${MOUNT_POINT} & ${MOUNT_POINT}/boot" mount "${DEV_IMAGE}p${ROOT_PARTITION}" ${MOUNT_POINT} mount "${DEV_IMAGE}p${BOOT_PARTITION}" ${MOUNT_POINT}/boot dir_name=$(dirname "${MOUNT_POINT}$3 /") if [ ! -d ${dir_name} ] ; then mkdir -p ${dir_name} \ - && echo "Created ${dir_name}" + && echo_stamp "Created ${dir_name}" "SUCCESS" fi # Copy script into chroot fs @@ -190,7 +209,7 @@ umount_system() { # STATIC FUNCTION # TEMPLATE: umount_system $MOUNT_POINT $DEV_IMAGE - echo -e "\033[0;31m\033[1m$(date) | Umount recursive dirs: $1\033[0m\033[0m" + echo_stamp "Umount recursive dirs: $1" # There is a risk that umount will fail set +e # Successfull unmount flag (false at thismoment) @@ -203,22 +222,21 @@ umount_system() { # If no problems detected if [[ $? == 0 ]] then - echo -e "\033[0;31m\033[1m$(date) | Successfull unmount\033[0m\033[0m" + echo_stamp "Successfull unmount" "SUCCESS" # Set flag umount_ok=true # Exit loop break fi # Unmount has failed - echo -e "\033[0;31m\033[1m$(date) | Unmount failed\033[0m\033[0m" + echo_stamp "Unmount failed" "ERROR" # Wait for some time sleep 2 done set -e # Jenkins job will fail if this condition is not true [[ "$umount_ok" == true ]] - echo -e "\033[0;31m\033[1m$(date) | Umount loop-image\033[0m\033[0m" - #losetup -d $DEV_IMAGE + echo_stamp "Umount loop-image" losetup -d $2 } @@ -228,36 +246,35 @@ publish_image() { # TEMPLATE: publish_image_bash $BUILD_DIR $IMAGE_NAME $YA_SCRIPT $CONFIG_FILE $RELEASE_ID $RELEASE_BODY # https://developer.github.com/v3/repos/releases/ -#RELEASE_BODY="### Changelog\n* Add /boot/cmdline.txt net.ifnames=0 https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/\n* Updated cophelper\n* Installed copstat" - echo -e "\033[0;31m\033[1m$(date) | Zip image\033[0m\033[0m" + echo_stamp "Zip image" if [ ! -e "$1/$2.zip" ]; then cd $1 && zip $2.zip $2 - echo -e "\033[0;31m\033[1m$(date) | Zipping complete!\033[0m\033[0m" + echo_stamp "Zipping complete!" "SUCCESS" else - echo -e "\033[0;31m\033[1m$(date) | Zip-archive already created\033[0m\033[0m" - cd $1 && rm $2.zip && zip $2.zip $2 - echo -e "\033[0;31m\033[1m$(date) | Old archive was deleted & create new\033[0m\033[0m" + echo_stamp "Zip-archive already created" + cd $1 && rm $2.zip && zip $2.zip $2 \ + && echo_stamp "Old archive was deleted & create new" "SUCCESS" fi - echo -e "\033[0;31m\033[1m$(date) | Upload image\033[0m\033[0m" - local IMAGE_LINK=$($3 $4 $1/$2.zip) - echo -e "\033[0;31m\033[1m$(date) | Upload copmlete!\033[0m\033[0m" + echo_stamp "Upload image" + local IMAGE_LINK=$($3 $4 $1/$2.zip) \ + && echo_stamp "Upload copmlete!" "SUCCESS" - echo -e "\033[0;31m\033[1m$(date) | Meashure size of zip-image\033[0m\033[0m" - local IMAGE_SIZE=$(du -sh $1/$2.zip | awk '{ print $1 }') - echo -e "\033[0;31m\033[1m$(date) | Meashuring copmlete!\033[0m\033[0m" + echo_stamp "Meashure size of zip-image" + local IMAGE_SIZE=$(du -sh $1/$2.zip | awk '{ print $1 }') \ + && echo_stamp "Meashuring copmlete!" "SUCCESS" - echo -e "\033[0;31m\033[1m$(date) | Meashure hash-sum of zip-image\033[0m\033[0m" - local IMAGE_HASH=$(sha256sum $1/$2.zip | awk '{ print $1 }') - echo -e "\033[0;31m\033[1m$(date) | Meashuring copmlete!\033[0m\033[0m" + echo_stamp "Meashure hash-sum of zip-image" + local IMAGE_HASH=$(sha256sum $1/$2.zip | awk '{ print $1 }') \ + && echo_stamp "Meashuring copmlete!" "SUCCESS" echo "" echo "\$6: $6" echo "" - echo -e "\033[0;31m\033[1m$(date) | Post message to GH\033[0m\033[0m" + echo_stamp "Post message to GH" local NEW_RELEASE_BODY="### Download\n* [$2.zip]($IMAGE_LINK) ($IMAGE_SIZE)\nsha256: $IMAGE_HASH\n\n$6" local DATA="{ \"body\":\"$NEW_RELEASE_BODY\" }" @@ -268,8 +285,8 @@ publish_image() { local GH_LOGIN=$(cat $4 | jq '.github.login' -r) local GH_PASS=$(cat $4 | jq '.github.password' -r) local GH_URL=$(cat $4 | jq '.github.url' -r) - curl -d "$DATA" -u "$GH_LOGIN:$GH_PASS" --request PATCH $GH_URL$5 - echo -e "\033[0;31m\033[1m$(date) | Post message to GH copmlete!\033[0m\033[0m" + curl -d "$DATA" -u "$GH_LOGIN:$GH_PASS" --request PATCH $GH_URL$5 \ + && echo_stamp "Post message to GH copmlete!" "SUCCESS" } if [ $(whoami) != "root" ];