summaryrefslogblamecommitdiffstats
path: root/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions
blob: f162ec3abdc2fd3430e3bdd25d533e091343c7ae (plain) (tree)














































































































                                                                                                      
#!/bin/bash
# Copyright (c) 2013 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found under http://openslx.org
#
# Local hard disk autodetection script for OpenSLX linux stateless clients,
# detecting swap and special partitions

#############################################################################


# General formatter for the /tmp partition on a local harddisk
diskfm () {
local target="$1"
local fs
local path
for fs in xfs ext3 ext2 ; 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" ; then
      found=yes
      case "mkfs.$fs" in
        mkfs.xfs)
          fopt="-f"
          mopt="-o noexec"
        ;;
        mkfs.ext2)
          fopt="-Fq"
          mopt="-o nocheck,noexec"
        ;;
        mkfs.reiserfs)
          fopt="-f"
          mopt="-o noexec"
        ;;
      esac
      mkfs.$fs ${fopt} "${target}"
    fi
    [ -n "$found" ] && break
  fi
done
}

# Check for local harddisks and appropriate partitions
for waiting in 1 1 2 3 4; do
	fdisk -l | sed -n "/^\/dev\//p" > "/etc/disk.partition"
	[ -s "/etc/disk.partition" ] && break
	sleep "$waiting"
done
echo "Partitions:"
cat "/etc/disk.partition"

# Check for standard swap partitions and make them available to the system
for hdpartnr in $(sed -n -e "/ 82 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
	echo -e "$hdpartnr\tswap\t\tswap\t\tdefaults\t 0 0" >> "/etc/fstab"
	swapon "$hdpartnr"
done

# We use special non assigned partition type (id44) for harddisk scratch 
# space, thus no normal filesystem will be incidentally deleted or
# corrupted
for hdpartnr in $(sed -n -e "/ 44 /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
  # check for supported filesystem and formatter
  if diskfm "$hdpartnr"; then
      # echo "$hdpartnr is mounted to /mnt/tmp at $(sysup)" >/tmp/tmpready
      echo -e "$hdpartnr\t/tmp\t\tnoauto\t\tdefaults\t 0 0" >> "/etc/fstab"
      mkdir -p /tmptmp
      mv /tmp/* /tmp/.* /tmptmp/
      mount "$hdpartnr" /tmp
      chmod a+rwxt /tmp
      mv /tmptmp/* /tmptmp/.* /tmp/
      rmdir /tmptmp
      break
    else
      echo "formatting failed for some reason"
    fi # Made this non-forking, systemd should handle it - 2013-05-28
done

# Put detected linux partitions (83) into /etc/fstab with "noauto", special
# partition 45 (persistent scratch) to /var/scratch and 46 to /var/openslx
for partid in 83 45 46 ; do
  for hdpartnr in $(sed -n -e "/ ${partid} /p" "/etc/disk.partition" | sed -e "s/[[:space:]].*//"); do
    mkdir -p "/media/${hdpartnr#/dev/*}"
    if [ "${partid}" -eq 83 ]; then
      echo -e "$hdpartnr\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,noexec\t 0 0" >> "/etc/fstab"
    elif [ "${partid}" -eq 45 ]; then
      #mount -t auto ${hdpartnr} /media/${hdpartnr#/dev/*}
      #ln -sf /media/${hdpartnr#/dev/*} /var/scratch
      echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
    elif [ "${partid}" -eq 46 ]; then
      # Mount a home directory to (/mnt)/var/home
      #mount -t auto ${hdpartnr} /mnt/media/${hdpartnr#/dev/*} \n\
      #test -d /mnt/media/${hdpartnr#/dev/*}/home && \
      #  ln -sf /media/${hdpartnr#/dev/*} /var/home
      echo -e "${hdpartnr}\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto\t\t 0 0" >> "/etc/fstab"
    fi
  done
done

mount -a