mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-27 13:39:33 +00:00
image_builder: add echo_stamp
This commit is contained in:
@@ -9,6 +9,25 @@ set -e
|
||||
# @dvornikov-aa Andrey Dvornikov
|
||||
#
|
||||
|
||||
echo_stamp() {
|
||||
|
||||
# STATIC FUNCTION
|
||||
# TEMPLATE: echo_stamp <TEXT> <TYPE>
|
||||
# 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" ];
|
||||
|
||||
Reference in New Issue
Block a user