#!/bin/sh
# Уменьшение корневого раздела до 4G, создание второго 3G,
# клонирование системы, переключение загрузки, удаление .flag0, создание .flag1.

[ -e /sbin/init ] && exit 0

DEV1="/dev/mmcblk0p1"
DEV2="/dev/mmcblk0p2"
START=40960
ROOT_SIZE_SECTORS=8388608   # 4 ГБ
SECOND_SIZE_SECTORS=6291456 # 3 ГБ

# Проверка флага .flag1 на втором разделе
if [ -b "$DEV2" ]; then
    mkdir -p /mnt/check
    if mount -t ext4 "$DEV2" /mnt/check 2>/dev/null; then
        if [ -f /mnt/check/home/pi/.flag1 ]; then
            umount /mnt/check 2>/dev/null
            exit 0
        else
            umount /mnt/check 2>/dev/null
        fi
    fi
fi

# Шаг 1: Проверка и уменьшение корневого раздела
e2fsck -f -y "$DEV1" || { echo "e2fsck failed" >&2; exit 1; }
resize2fs -f "$DEV1" "4G" || echo "resize2fs to 4G failed, continuing" >&2
echo "start=$START, size=$ROOT_SIZE_SECTORS" | sfdisk --force /dev/mmcblk0 -N 1 || { echo "sfdisk root failed" >&2; exit 1; }
partprobe /dev/mmcblk0 2>/dev/null || true
resize2fs "$DEV1" || { echo "resize2fs to full failed" >&2; exit 1; }
e2fsck -f -y "$DEV1" || { echo "Final e2fsck root failed" >&2; exit 1; }

# Шаг 2: Создание второго раздела
FIRST_END=$((START + ROOT_SIZE_SECTORS))
SECOND_START=$FIRST_END
echo "start=$SECOND_START, size=$SECOND_SIZE_SECTORS" | sfdisk --force /dev/mmcblk0 -N 2 || { echo "sfdisk second failed" >&2; exit 1; }
partprobe /dev/mmcblk0 2>/dev/null || true
sleep 2
[ -b "$DEV2" ] || { partprobe /dev/mmcblk0; sleep 2; }
[ -b "$DEV2" ] || { echo "ERROR: $DEV2 still not available" >&2; exit 1; }
mkfs.ext4 -F "$DEV2" || { echo "mkfs.ext4 second failed" >&2; exit 1; }

# Шаг 3: Монтирование разделов
mkdir -p /mnt/root /mnt/newroot
mount -t ext4 "$DEV1" /mnt/root || { echo "mount root failed" >&2; exit 1; }
mount -t ext4 "$DEV2" /mnt/newroot || { echo "mount newroot failed" >&2; exit 1; }

# Шаг 4: Клонирование системы
cp -a /mnt/root/. /mnt/newroot/ || { umount /mnt/newroot /mnt/root 2>/dev/null; echo "cp -a failed" >&2; exit 1; }

# Шаг 5: Перезапись orangepiEnv.txt на обоих разделах
cat > /mnt/root/boot/orangepiEnv.txt << 'ENV'
verbosity=1
console=both
disp_mode=1080p60
fb0_width=1280
fb0_height=720
rootdev=/dev/mmcblk0p2
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
ENV

cat > /mnt/newroot/boot/orangepiEnv.txt << 'ENV'
verbosity=1
console=both
disp_mode=1080p60
fb0_width=1280
fb0_height=720
rootdev=/dev/mmcblk0p2
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
ENV

# Шаг 6: Удаление .flag0 и создание .flag1
rm -f /mnt/root/home/pi/.flag0
rm -f /mnt/newroot/home/pi/.flag0
touch /mnt/newroot/home/pi/.flag1

# Шаг 7: Размонтирование и перезагрузка
umount /mnt/newroot /mnt/root 2>/dev/null
sync
sleep 1
reboot -f