blob: 363c508369dae3a23d4148bef1b75834d403cf06 (
plain) (
tree)
|
|
#!/bin/ash
# -----------------------------------------------------------------------------
#
# Copyright (c) 2014..2018 bwLehrpool-Projektteam
#
# This program/file is free software distributed under the GPL version 2.
# See https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
#
# If you have any feedback please consult https://bwlehrpool.de and
# send your feedback to support@bwlehrpool.de.
#
# General information about bwLehrpool can be found at https://bwlehrpool.de
#
# Local hard disk autodetection script for OpenSLX linux stateless clients,
# detecting special GPT partitions
#############################################################################
# Patition IDs
# Prefix for all paritions is 0FC63DAF-8483-4772-8E79-9999999999
# Suffix:
# 44: non-persistent scratch partition
# 45: persistent partiton
# 46: non-persistent openslx partition for config, overlayfs and qcow images
# We use special non assigned partition type for harddisk scratch
# space, thus no normal filesystem will be incidentally deleted or
# corrupted
# Set disks to none
ID44=
ID45=
ID46=
# General formatter for the /tmp partition on a local harddisk
diskfm () {
mopt="" # Global var!
local target="$1"
local fslist="xfs jfs ext4"
local fs
local path
[ $# -ge 2 ] && fslist="$2"
for fs in $fslist ; do
unset available
case $(cat /proc/filesystems) in
*${fs}*) available=yes;;
*) modprobe "${fs}" && available=yes;;
esac
if [ -n "${available}" ]; then
unset found
if which "mkfs.$fs" >/dev/null; then
found=yes
case "mkfs.$fs" in
mkfs.xfs)
fopt="-fq"
;;
mkfs.jfs)
fopt="-q"
;;
mkfs.ext4)
fopt="-Fq"
;;
esac
mkfs.$fs ${fopt} "${target}"
fi
[ -n "$found" ] && break
fi
done
}
# function format_pid ()
# Formats partition with id 44, 45, 46
# expects id as parameter
# usage: format_pid [44|45|46]
format_pid () {
local fmtpid=$1
local target
case $fmtpid in
44)
target=$ID44
;;
45)
target=$ID45
;;
46)
target=$ID46
;;
esac
if echo $target | grep -q '/dev/disk/'
then
# check for supported filesystem and formatter
diskfm $target
else
echo "Could not format partition ID $fmtpid"
fi
}
# function mount_pid ()
# Mounts partition with id 44, 45, 46
# expects id and mountpoint as parameter
# usage: mount_pid [44|45|46] $MNT
mount_pid () {
local mntpid=$1
local target=$2
local source
if [ "x$2" = "x" ]
then
echo "No mountpoint specified dummy!"
else
case $mntpid in
44)
source=$ID44
;;
45)
source=$ID45
;;
46)
source=$ID46
;;
esac
mkdir -p $target
if busybox mount -t auto "$source" "$target"
then
[ "x$mntpid}" = "x44" ] && chmod a+rwxt $target
if echo "$target" | grep -Eq "^mnt/|^/mnt/"
then
fstabtarget=$(echo $target | sed -re "s/[/]{0,1}mnt//")
echo -e "$source\t$fstabtarget\tauto\tnoexec\t0 0" \
>>/mnt/etc/fstab
fi
else
echo "Could not mount partition ID $mntpid"
fi
fi
}
# Get partition types
hdisks=$(ls /dev/disk/by-path/*-part[0-9]* \
| sed -re "s,(.*)-part[0-9]*,\1," \
| sort -u)
if echo $hdisks | grep -q '/dev/disk/'
then
for hd in $(echo $hdisks)
do
upartid=$(sgdisk -p $hd 2>/dev/null | awk '$6~/FFFF/ {print $1}')
for upt in $(echo $upartid)
do
echo "${hd}-part${upt} $(sgdisk -i $upt $hd)" \
| awk '$5 ~ /0FC63DAF-8483-4772-8E79-[0]{10}4[4-6]/ \
{print $5 "=" $1}' \
| sed -re "s,0FC63DAF-8483-4772-8E79-[0]{10},ID," \
>> /etc/hdisks.conf
done
done
if [ -r /etc/hdisks.conf ]
then
. /etc/hdisks.conf
echo -e "Partitions found:\n$(cat /etc/hdisks.conf | cut -d'=' -f1)"
else
echo "No pratition IDs 44, 45 or 46 found"
fi
fi
|