mirror of
https://github.com/paolosabatino/multitool.git
synced 2024-11-25 04:06:13 +00:00
129 lines
3.7 KiB
Bash
129 lines
3.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Mount the sys, proc, tmpfs filesystems
|
|
mount -t sysfs /sys /sys
|
|
mount -t tmpfs /tmp /tmp
|
|
mount -t proc /proc /proc
|
|
mkdir -p /dev/pts
|
|
mount -t devpts devpts /dev/pts
|
|
|
|
# Touch /tmp/resolv.conf, to let dhclient-script work correctly
|
|
touch /tmp/resolv.conf
|
|
|
|
# Set the hostname
|
|
/bin/hostname -F /etc/hostname
|
|
|
|
# Raise network interface
|
|
/sbin/ifconfig eth0 up
|
|
|
|
# Provide a fixed link-local address to eth0:1 virtual interface (give 5 seconds timeout
|
|
/sbin/ifconfig eth0:1 169.254.120.120/16
|
|
|
|
# Run dhclient in daemon mode
|
|
/sbin/dhclient -lf /tmp/dhclient.leases -pf /tmp/dhclient.pid -nw eth0
|
|
|
|
# Start ntp client daemon
|
|
ntpd -g -G
|
|
|
|
# Launch dropbear in daemon mode
|
|
/usr/sbin/dropbear -B -b /etc/dropbear/banner
|
|
|
|
# Spawn a shell on ttyS2 serial port, always available
|
|
#setsid getty --autologin root ttyS2 &
|
|
getty --autologin root ttyS2 &
|
|
|
|
# Check if the multitool "MT" partition requires a resize
|
|
DEVICE_MT_PARTITION=$(blkid --label "MULTITOOL" -l) # eg: /dev/mmcblk0p2
|
|
BOOT_DEVICE="/dev/$(lsblk -n -o PKNAME $DEVICE_MT_PARTITION)"
|
|
|
|
CLASS_MT_PARTITION="/sys/class/block/$(lsblk -n -o KNAME $DEVICE_MT_PARTITION)" # eg: /sys/class/block/mmcblk0p2
|
|
CLASS_BOOT_DEVICE="/sys/class/block/$(lsblk -n -o PKNAME $DEVICE_MT_PARTITION)" # eg: /sys/class/block/mmcblk0
|
|
|
|
if [ -b "${DEVICE_MT_PARTITION}" ]; then
|
|
|
|
MAX_DIFF_SPACE=$((1024 * 1024)) # a difference in spare space greater than this amount
|
|
# triggers a resize (1 GB)
|
|
|
|
THRES_DIFF_SPACE=$((128 * 1024)) # fill the MULTITOOL partition up to this space (max - 128 MB)
|
|
|
|
MT_PARTITION_NUMBER=$(cat "$CLASS_MT_PARTITION/partition") # partition number
|
|
MT_PARTITION_START=$(cat "$CLASS_MT_PARTITION/start") # sectors
|
|
MT_PARTITION_SIZE=$(cat "$CLASS_MT_PARTITION/size") # sectors
|
|
|
|
DEVICE_SIZE=$(cat "$CLASS_BOOT_DEVICE/size")
|
|
SPARE_SPACE=$(($DEVICE_SIZE - $MT_PARTITION_START))
|
|
|
|
SPARE_SPACE=$(($DEVICE_SIZE / 2)) # sectors / 2 = kbytes
|
|
MT_PARTITION_SIZE=$(($MT_PARTITION_SIZE / 2)) # sectors / 2 = kbytes
|
|
|
|
DIFF_SPACE=$(($SPARE_SPACE - $MT_PARTITION_SIZE))
|
|
|
|
if [ $DIFF_SPACE -gt $MAX_DIFF_SPACE ]; then
|
|
|
|
# While true; used for convenient break syntax
|
|
while true; do
|
|
|
|
dialog --infobox "Please wait some seconds, resizing MULTITOOL partition..." 5 60 <> /dev/tty1 >&0 2>&1
|
|
|
|
# Resize the partition up to the end of the device size
|
|
parted "$BOOT_DEVICE" resizepart $MT_PARTITION_NUMBER 100%
|
|
|
|
ERR=$?
|
|
|
|
if [ $ERR -ne 0 ]; then
|
|
dialog --msgbox "Could not resize MULTITOOL partition, parted error $ERR" 7 60 <> /dev/tty1 >&0 2>&1
|
|
break
|
|
fi
|
|
|
|
# Resize the NTFS filesystem inside the partition
|
|
echo "y" | ntfsresize -f -P -s $(($SPARE_SPACE - $THRES_DIFF_SPACE))k -P "${DEVICE_MT_PARTITION}" >/dev/null
|
|
|
|
ERR=$?
|
|
|
|
if [ $ERR -ne 0 ]; then
|
|
dialog --msgbox "Could not resize MULTITOOL partition, ntfsresize error $ERR" 7 60 <> /dev/tty1 >&0 2>&1
|
|
break
|
|
fi
|
|
|
|
# Fix the dirty NTFS bits after resize operation
|
|
ntfsfix -d "${DEVICE_MT_PARTITION}" >/dev/null
|
|
|
|
ERR=$?
|
|
|
|
if [ $ERR -ne 0 ]; then
|
|
dialog --msgbox "Could not fix ntfs partition after ntfsfix, error $ERR" 7 60 <> /dev/tty1 >&0 2>&1
|
|
break
|
|
fi
|
|
|
|
break
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Mount the MULTITOOL partition to write dmesg log on it,
|
|
# then immediately unmounts it
|
|
mount "$DEVICE_MT_PARTITION" "/mnt"
|
|
if [[ $? -eq 0 ]]; then
|
|
dmesg > /mnt/dmesg.multitool.log
|
|
umount "/mnt"
|
|
fi
|
|
|
|
if [[ -f /usr/local/bin/multitool.sh ]]; then
|
|
while true; do
|
|
setsid /bin/bash /usr/local/bin/multitool.sh <> /dev/tty1 >&0 2>&1
|
|
done
|
|
fi
|
|
|
|
# Use tty1 as default console
|
|
TTY_SERIAL="tty1"
|
|
|
|
# If kernel uses ttyFIQ0 as console, tell getty to use the same device
|
|
grep -q 'console=ttyFIQ0' /proc/cmdline && TTY_SERIAL="ttyFIQ0"
|
|
|
|
while true; do
|
|
setsid getty --autologin root $TTY_SERIAL
|
|
done
|