89 lines
2.0 KiB
Plaintext
89 lines
2.0 KiB
Plaintext
#/bin/bash
|
|
# usage:
|
|
## create image name format YYYY-MM-DD-HHMM-S.<TAG>.img/.xz/.info
|
|
### pi_create_image <image name tag no spaces>
|
|
## generate sha256 of uncompressed image
|
|
### pi_create_image <image name tag no spaces> true
|
|
timestamp=`date +"%Y-%m-%d-%H%M-%S"`
|
|
|
|
# handle filename
|
|
if [ -z "$1" ]; then
|
|
tag=$timestamp-pi
|
|
else
|
|
tag=$timestamp-$1
|
|
fi
|
|
|
|
# fiel paths
|
|
imgname=$tag.img
|
|
xzname=$imgname.xz # already has da pwd from imgname
|
|
info=$xzname.info
|
|
checksums=sha256sum-$tag.sha256
|
|
|
|
# create info file
|
|
touch $info
|
|
|
|
# get real username (not root) if run with sudo
|
|
if [ ! -z $SUDO_USER ]; then
|
|
username=$SUDO_USER
|
|
else
|
|
username=$USER
|
|
fi
|
|
|
|
# get disk
|
|
lsblk
|
|
echo "Enter disk name (including /dev/) ex /dev/sdb"
|
|
read dadisk
|
|
|
|
# start
|
|
webhook "starting copy $dadisk to $imgname to $xzname at $(date)($(date +%s))\ninfo: $info" true
|
|
|
|
# copy disk
|
|
sudo dd if=$dadisk of=$imgname bs=4M status=progress
|
|
imgsize=$(du -h $imgname)
|
|
|
|
|
|
if [ ! -z "$2" ]; then
|
|
# img sha256
|
|
echo "creating sha256 checksum of $imgname"
|
|
sha256sum $imgname | tee -a $info
|
|
fi
|
|
|
|
# shrink and compress the image
|
|
webhook "Copied the disk to $imgname size $imgsize, compressing to $xzname"
|
|
sudo pishrink -Z -v -a $imgname
|
|
xzsize=$(du -h $xzname)
|
|
|
|
# xz sha256
|
|
webhook "$imgname size $imgsize shrunk to $xzname size $xzsize, calculating sha256 checksums..."
|
|
sha256sum $xzname | tee -a $info
|
|
|
|
# log filesizes
|
|
webhook "saving sizes"
|
|
echo -e "imgsize: $imgsize\nxzsize: $xzsize" | tee -a $info
|
|
|
|
# change archive to be friendly perms
|
|
webhook "changing perms"
|
|
sudo chown $username:$username $xzname
|
|
|
|
# test archive
|
|
webhook "testing archive $xzname"
|
|
xz -t $xzname
|
|
ret=$?
|
|
|
|
# if test fails
|
|
if [ $ret -gt 0 ]; then
|
|
webhook "FAIL! ARCHIVE DES NOT CHECK return code: $ret EXITING"
|
|
exit 1
|
|
# if test succeeds
|
|
else
|
|
webhook "Archive Test SUCCESS"
|
|
fi
|
|
|
|
# always generate last checksum
|
|
sha256sum $xzname | tee -a $info
|
|
|
|
# finish and notify
|
|
webhook "DONE\n\tdisk: $dadisk\n\timgname: $imgname ($imgsize)\n\txzname: $xzname ($xzsize)" true
|
|
|
|
# schedule reboot in 1 minute
|
|
sudo shutdown -r +1 |