raspberrymatic-addon-rmupdate/adjust_image.sh

146 lines
4.2 KiB
Bash
Raw Normal View History

2017-03-26 20:25:01 +02:00
#!/bin/bash -e
LOOP_DEV=7
2018-01-23 23:47:01 +01:00
BOOT_SIZE=$((250*1024*1024))
ROOT_SIZE=$((1000*1024*1024))
2018-01-25 19:43:35 +01:00
USR_LOCAL_SIZE=$((4*1024*1024))
2017-03-26 20:25:01 +02:00
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root." 1>&2
exit 1
fi
image_file="$(realpath $1)"
2017-06-20 07:42:59 +02:00
new_image_file="${image_file/\.img/\.rmupdate\.img}"
2018-01-27 09:10:10 +01:00
if [[ ! -e ${image_file} ]]; then
echo "File not found: ${image_file}." 1>&2
exit 1
fi
if [[ ! $image_file =~ .*\.img ]]; then
echo "Not an image file: ${image_file}." 1>&2
exit 1
fi
2018-01-25 16:59:45 +01:00
tinker=0
[[ $(basename $image_file) =~ .*tinkerboard.* ]] && tinker=1
part_start=512
[ $tinker == 1 ] && part_start=$((906*512))
echo "image: ${image_file}"
echo "adjusted image: ${new_image_file}"
2017-03-26 20:25:01 +02:00
echo "*** Creating new image file and partitions ***"
2018-01-25 19:43:35 +01:00
dd if=/dev/zero of=$new_image_file bs=512 count=$(( ((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}+${ROOT_SIZE}+${USR_LOCAL_SIZE})/512) ))
2017-03-26 20:25:01 +02:00
parted --script $new_image_file \
mklabel msdos \
2018-01-25 19:43:35 +01:00
mkpart primary fat32 ${part_start}B $((${part_start}+${BOOT_SIZE}-512))B \
2017-03-26 20:25:01 +02:00
set 1 boot on \
2018-01-25 19:43:35 +01:00
mkpart primary ext4 $((${part_start}+${BOOT_SIZE}))B $((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}-512))B \
mkpart primary ext4 $((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}))B $((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}+${ROOT_SIZE}-512))B \
2018-01-25 16:59:45 +01:00
mkpart primary ext4 $((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}+${ROOT_SIZE}))B 100%
2017-03-26 20:25:01 +02:00
echo "*** Copying original partitons ***"
oIFS="$IFS"
IFS=$'\n'
for line in $(parted $image_file unit B print | grep primary); do
IFS=$oIFS
x=($line)
num=${x[0]}
start=$((${x[1]:0: -1}/512))
size=$((${x[3]:0: -1}/512))
echo $num - $start - $size
seek=0
[ "$num" = "1" ] && seek=$start
2018-01-25 16:59:45 +01:00
[ "$num" = "2" ] && seek=$(((${part_start}+${BOOT_SIZE})/512))
[ "$num" = "3" ] && seek=$(((${part_start}+${BOOT_SIZE}+${ROOT_SIZE}+${ROOT_SIZE})/512))
2017-03-26 20:25:01 +02:00
dd if=$image_file of=$new_image_file bs=512 skip=$start count=$size seek=$seek conv=notrunc
done
2018-01-27 09:10:10 +01:00
if [ $tinker == 1 ]; then
echo "*** Copying boot loader ***"
dd if=$image_file of=$new_image_file bs=512 skip=1 count=$((($part_start/512)-2)) seek=1 conv=notrunc
fi
echo "*** Creating / resizing filesystems ***"
2018-01-24 08:30:34 +01:00
umount /tmp/rmupdate.mnt 2>/dev/null || true
rmdir /tmp/rmupdate.mnt 2>/dev/null || true
rm /tmp/rmupdate.boot.tar 2>/dev/null || true
2017-03-26 20:25:01 +02:00
rm /dev/mapper/loop${LOOP_DEV}p 2>/dev/null || true
kpartx -d /dev/loop${LOOP_DEV} 2>/dev/null || true
losetup -d /dev/loop${LOOP_DEV} 2>/dev/null || true
2018-01-24 08:30:34 +01:00
losetup /dev/loop${LOOP_DEV} $image_file
2017-03-26 20:25:01 +02:00
kpartx -a /dev/loop${LOOP_DEV}
ln -s /dev/loop${LOOP_DEV} /dev/mapper/loop${LOOP_DEV}p
2018-01-24 00:57:48 +01:00
sleep 3
mkdir /tmp/rmupdate.mnt
mount /dev/mapper/loop${LOOP_DEV}p1 /tmp/rmupdate.mnt
2018-01-24 00:57:48 +01:00
(cd /tmp/rmupdate.mnt; tar cf /tmp/rmupdate.boot.tar .)
umount /tmp/rmupdate.mnt
2018-01-24 08:30:34 +01:00
rm /dev/mapper/loop${LOOP_DEV}p 2>/dev/null || true
kpartx -d /dev/loop${LOOP_DEV} 2>/dev/null || true
losetup -d /dev/loop${LOOP_DEV} 2>/dev/null || true
sleep 3
losetup /dev/loop${LOOP_DEV} $new_image_file
kpartx -a /dev/loop${LOOP_DEV}
ln -s /dev/loop${LOOP_DEV} /dev/mapper/loop${LOOP_DEV}p
sleep 3
partuuid=$(blkid -s PARTUUID -o value /dev/mapper/loop${LOOP_DEV}p2)
echo "PARTUUID=${partuuid}"
2018-01-24 00:57:48 +01:00
mkfs.vfat -F32 -n bootfs /dev/mapper/loop${LOOP_DEV}p1
2018-01-24 08:30:34 +01:00
sleep 3
2018-01-24 00:57:48 +01:00
mount /dev/mapper/loop${LOOP_DEV}p1 /tmp/rmupdate.mnt
(cd /tmp/rmupdate.mnt; tar xf /tmp/rmupdate.boot.tar .)
2018-01-25 16:59:45 +01:00
bootconf=cmdline.txt
2018-01-27 09:10:10 +01:00
#[ $tinker == 1 ] && bootconf=extlinux/extlinux.conf
# /etc/init.d/S00eQ3SystemStart needs adaption before PARTUUID can be used
if [ $tinker == 0 ]; then
sed -i -r s"/root=\S+/root=PARTUUID=${partuuid}/" /tmp/rmupdate.mnt/${bootconf}
fi
umount /tmp/rmupdate.mnt
2018-01-24 00:57:48 +01:00
rm /tmp/rmupdate.boot.tar
rmdir /tmp/rmupdate.mnt
2017-03-26 20:25:01 +02:00
2018-01-24 00:57:48 +01:00
#fsck.vfat -a /dev/mapper/loop${LOOP_DEV}p1
#fatresize --size $BOOT_SIZE /dev/mapper/loop${LOOP_DEV}p1
sleep 3
2018-01-25 19:43:35 +01:00
echo "resize /dev/mapper/loop${LOOP_DEV}p2"
2018-01-24 00:57:48 +01:00
fsck.ext4 -f -y /dev/mapper/loop${LOOP_DEV}p2 || true
resize2fs /dev/mapper/loop${LOOP_DEV}p2
tune2fs -L rootfs1 /dev/mapper/loop${LOOP_DEV}p2
sleep 3
2018-01-25 19:43:35 +01:00
echo "mkfs /dev/mapper/loop${LOOP_DEV}p3"
2018-01-24 00:57:48 +01:00
mkfs.ext4 -L rootfs2 /dev/mapper/loop${LOOP_DEV}p3 || true
sleep 3
2018-01-25 19:43:35 +01:00
echo "resize /dev/mapper/loop${LOOP_DEV}p4"
2018-01-24 00:57:48 +01:00
fsck.ext4 -f -y /dev/mapper/loop${LOOP_DEV}p4 || true
resize2fs /dev/mapper/loop${LOOP_DEV}p4
2017-03-26 20:25:01 +02:00
rm /dev/mapper/loop${LOOP_DEV}p
kpartx -d /dev/loop${LOOP_DEV}
losetup -d /dev/loop${LOOP_DEV}
echo "*** Adjusted image successfully created ***"
2017-03-26 20:25:01 +02:00