123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/bin/bash
- ## SuperGlue project | http://superglue.it | 2014 | GPLv3
- ## http://git.superglue.it/superglue/serverfiles
- ##
- ## usb-part.sh - partition USB storage device
- # - detect the last USB attached disk drive
- # - check for sg-data partition
- # - if sg-data not mounted but device is present, then
- # offer to format device
- findUsbstor() {
- local _P='/sys/block/'
- local _D _DEV
- for _D in ${_P}sd*; do
- _DEV=$(readlink -f ${_D}/device)
- if [[ ${_DEV/usb} != $_DEV ]]; then
- _USBDEV="/dev/${_D/$_P}"
- fi
- done
- [[ $_USBDEV ]] || return 1
- }
- findMount() {
- local _M
- IFS=$'\n'
- for _M in $(mount); do
- if [[ "$_M" != "${_M/"$_USBDEV"}" ]]; then
- IFS=' ' _M=( $_M )
- _USBMNT="${_M[0]}"
- fi
- done
- [[ $_USBMNT ]] || return 1
- }
- usbPart() {
- ## partitions layout for sfdisk
- ## /dev/sdx1 64K, fat32
- ## TODO: define swap size according to ram
- ## /dev/sdx2 32M, swap v1
- ## /dev/sdx3 rest of the disk, linux partition
- _PARTITIONS="unit: sectors
- ${_DEV}1 : start= 2048, size= 128, Id= b
- ${_DEV}2 : start= 4096, size= 65536, Id=82
- ${_DEV}3 : start= 69632, size= , Id=83
- ${_DEV}4 : start= 0, size= 0, Id= 0
- "
- ## base64 encoded gzip'ed image of /dev/sdx1 FAT32 partition
- _FAT_README='H4sICC5ykVQAA3NkYjEuZGQA7d3PaxNpGMDxp1VQI1FxYcWD+FRB8DJp68KCiFBxXAS1tUn8gSC8
- 7bxtZ5vMhJm3pgVxvSzsSezJi3+BePQmiAevPfof2FNFPHra7DtNo1VUSgWL7veTvDzv+z7zPplM
- YCAE8q6cut+cncqDKeOkf3uf9Ev/XXnXJ6f9Q3bKqrty/N7DQ2+q9bFw/I8L9VD13EhtaFhV9xx+
- duP24yPP3e4rT/Y83SFL+26uvB1+tfTr0sGVf2szca7+maROjU6kqTMTDatRnM8GqmMNa3KrcZLb
- 7KP8VCNttRbUJFG51Mpsnvvugs7aBXWpusxnpk2caBAEWi4JvkX90btO58PwbefLh+KnxOf//7bu
- pu7v9i9uLYaLYTd288ttafnQ8fbKsc463cnlQDKxYiQSn2/6biBO5n0T38tlORw5ezG8M1S9OqYi
- U+1u/SJuExkUGemtbvr1+frV3frjq+tVa9dqKpFdW/9yfjHcJf8U5/e+/jVff2gtX8StuZ4AAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzExOCV8xf19+C3YrDvw/zlAyKRSf40G6jRbrc39FqVpo1i
- U1ktW3n/x0OVzJqoaQM37zbzBgBsUFlODA8NFr2jRwb0l/31rT4hAAAAAN+Ra/XJXz72r423r8W+
- TyIAAAAAAPhxmUjk+l6Rv30rfv/vff9/7cdLvj3o5QAAAAAAwLdpz8STM8VW6XP5nGk0FlTquc10
- Mk2cTVyRaKSTxtlI00SN5rZlMj/UMy47V1U/cLGL00R6O65X51o2m27MWY2M88e7NDPTVs6O6qXR
- mtaroY6O68iFWjj+ubmBAf16oXKpVC5t6gyLheXSjHOtk5VK3isexI6N3AEAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJb5D53OGNgAAAEA'
- if ! findUsbstor; then
- echo 'USB device not found'
- exit 1
- fi
- if findMount; then
- echo 'unmounting'
- umount -f $_USBMNT 2>&1
- if [[ $? -gt 0 ]]; then
- echo 'error unmounting'
- exit 1
- fi
- fi
- swapoff -a &>/dev/null
- sfdisk -D -f -q $_USBDEV <<< "$_PARTITIONS"
- if [[ $? -gt 0 ]]; then
- echo 'error making partitions'
- exit 1
- fi
- (echo -n "$_FAT_README" | base64 -d | gunzip -c > ${_USBDEV}1)
- if [[ $? -gt 0 ]]; then
- echo 'error cloning FAT readme partition'
- exit 1
- fi
- mkswap ${_USBDEV}2
- if [[ $? -gt 0 ]]; then
- echo 'error making swap'
- exit 1
- fi
- mkfs.btrfs -L sg-data ${_USBDEV}3
- if [[ $? -gt 0 ]]; then
- echo 'error making Btrfs'
- exit 1
- fi
- }
|