1
0
Fork 0
mirror of https://github.com/iiab/iiab.git synced 2025-02-12 19:22:24 +00:00
iiab/scripts/prep-storage.sh.wip
2017-05-27 11:09:50 -07:00

283 lines
6.2 KiB
Bash

#!/bin/bash
EXTMEDIA=`ls -la /mnt/*`
MMC0=`ls /dev | grep mmcblk0 | wc | awk '{print $1}'`
MMC1=`ls /dev | grep mmcblk1 | wc | awk '{print $1}'`
USB=`ls /dev | grep sd | wc | awk '{print $1}'`
function warn()
{
echo "######################################################"
echo ""
echo ""
echo "WARNING external SD-card or hard-disk NOT detected"
echo "Please insert SD-card or connect your external hard"
echo "disk before running bootsrap-xo"
echo ""
echo ""
echo "#####################################################"
echo ""
read -p "Press [Enter] key to shutdown"
echo ""
echo ""
echo "shutting down in 5 seconds"
sleep 5
shutdown now
exit 1
}
function unsupported()
{
echo "#####################################################"
echo ""
echo ""
echo "WARNING detected external media partition layout is"
echo "unsuppoted. Please try a different SD-card or usbkey"
echo ""
echo ""
echo "#####################################################"
echo ""
read -p "Press [Enter] key to shutdown"
echo ""
echo ""
echo "shutting down in 5 seconds"
sleep 5
shutdown now
exit 1
}
function library_1st()
{
echo "#####################################################"
echo ""
echo ""
echo "WARNING detected 2 USB storage units. In order to"
echo "protect the data on the one that will not become a"
echo "permanent part of the XS server, please ensure the"
echo "premanent drive is inserted in a slot when turning."
echo "on your XO. Please insert the usb drive containing"
echo "the XSCE installaton media before typing 'bootstrap-xo'"
echo ""
echo ""
echo "#####################################################"
echo ""
echo ""
read -p "Press [Enter] key to shutdown"
echo ""
echo ""
echo "shutting down in 5 seconds"
sleep 5
shutdown now
exit 1
}
function get_devices()
{
FOUNDDEVS=
BLKID=`blkid | awk '{split($0,a,":"); print a[1]}'`
for blk in $BLKID; do
FOUNDDEVS="$FOUNDDEVS $blk"
done
}
function get_root_device()
{
ROOTDEV=
BLKID=`blkid | awk '{split($0,a,":"); print a[1]}'`
for blk in $BLKID; do
ROOTDEV=`echo $blk | grep root`
done
}
function find_repo()
{
MNT=`mount | grep dev/sdb | awk '{print $3}'`
if ! [ -d $MNT/xs-repo ]; then
library_1st
fi
}
function togglepart()
{
cat <<EOF | fdisk /dev/mmcblk0
t
83
w
EOF
partprobe $MEDIADEV
mkfs.ext4 -L library $MEDIADEV
MEDIADEV2=$MEDIADEV
MEDIAMNT=/library
}
function togglepart-usb()
{
cat <<EOF | fdisk /dev/sda
t
83
w
EOF
partprobe $MEDIADEV2
mkfs.ext4 -L library $MEDIADEV2
MEDIAMNT=/mnt/usb0
}
function partition_usb_hd()
{
cat <<EOF | fdisk /dev/sda
n
t
83
w
EOF
partprobe $MEDIADEV2
mkfs.ext4 -L library $MEDIADEV2
MEDIAMNT=/mnt/usb0
}
function find_repo2()
{
echo "findrepo2"
maybe=""
for parts in `ls -la /dev/sd*1`; do
maybe=`findmnt -n -o TARGET -S $parts`
echo "maybe is $maybe"
if ! [ -d $maybe/xs-repo ]; then
MEDIADEV2="/dev/$parts"
break
fi
done
}
##### routine starts here #####
get_devices
DEVS=`echo $FOUNDDEVS | wc | awk '{print $1}'`
echo "found block devices $FOUNDDEVS"
echo "found $MMC0 character devices for mmcblk0"
echo "found $MMC1 character devices for mmcblk1"
if [ $MMC0 = 5 ]; then
if [ $MMC1 = 1 ]; then
unsupported
elif ! [ -b /dev/mmcblk1p1 ]; then
unsupported
fi
if ! [ -n $MMC0 ]; then
MEDIADEV=/dev/mmcblk1p1
fi
fi
if [ $MMC1 = 5 ]; then
if [ $MMC0 = 1 ]; then
unsupported
elif ! [ -b /dev/mmcblk0p1 ]; then
unsupported
fi
if ! [ -n $MMC1 ]; then
MEDIADEV=/dev/mmcblk0p1
fi
fi
MEDIASTRING=`blkid | grep $MEDIADEV`
echo "found $MEDIASTRING"
for i in $MEDIASTRING; do
test=`echo $i | awk '{split($0,a,"="); print a[1]}'`
test2=`echo $i | awk '{split($0,a,"="); print a[2]}' | sed -e 's/"//' | sed -e 's/"//'`
echo "test $test"
echo "test2 $test2"
case $test in
"UUID")
echo "$MEDIADEV is $i"
;;
"TYPE")
if [ $test2 = "vfat" ]; then
MNT=`mount | grep $MEDIADEV | awk '{print $3}'`
echo "unmounting $MNT"
if [ x$MNT != x ]; then
umount $MNT
fi
echo "calling togglepart"
togglepart
break
else
ext_ver=`echo $test2 | grep ext`
echo "test ext_mmc $test2 $ext_ver"
if ! [ -z $ext_ver ];then
echo "found ext2|3|4 filesystem on external SD-card"
MEDIAMNT=/library
MEDIADEV2=$MEDIADEV
break
else
echo "ext2|3|4 not found"
fi
fi
;;
esac
done
echo "usb is $USB "
if [ $USB = 0 ];then
echo "no external usb media found"
elif [ $USB -g 2 ]; then
find_repo2
else
MEDIAMNT=/mnt/usb0
MEDIADEV2=/dev/sda1
fi
if [ -z $MEDIADEV2 ];then
echo "DONE - nothing to do"
warn
else
echo "media dev is: $MEDIADEV2"
fi
if ! [ -c $MEDIADEV2 ];then
# TODO check parts on parent
# then call partition_usb_hd
warn
fi
echo "cleaning fstab"
sed -i '/swap/d' /etc/fstab
sed -i '/usb0/d' /etc/fstab
sed -i '/library/d' /etc/fstab
if [ -d /library ]; then
echo "saving old /library as /library.save"
mv /library /library.save
fi
label=`e2label $MEDIADEV2`
if [ -z $label ];then
e2label $MEDIADEV2 library
fi
if [ $MEDIADEV2 = /dev/sda1 ];then
ln -s /mnt/usb0 /library
else
mkdir /library
fi
uuid=`blkid -s UUID $MEDIADEV2 | gawk '{print $2}'`
echo UUID is $uuid
echo "populating fstab for $MEDIADEV2 using $uuid"
echo "$uuid $MEDIAMNT auto defaults,noatime 0 0" >> /etc/fstab
echo "mounting $uuid at $MEDIAMNT"
mount -a
if ! [ -d $MEDIAMNT/swap ]; then
mkdir $MEDIAMNT/swap
fi
echo "creating swap.img"
dd if=/dev/zero of=$MEDIAMNT/swap/swap.img bs=1024 count=10480
mkswap $MEDIAMNT/swap/swap.img
chown root:root $MEDIAMNT/swap/swap.img
echo "$MEDIAMNT/swap/swap.img swap swap defaults 0 0" >> /etc/fstab
swapon $MEDIAMNT/swap/swap.img
exit 0