#!/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 -q ${fs} 2>/dev/null && available=yes;; esac if [ -n ${available} ]; then unset found for path in /sbin /bin /usr/sbin /usr/bin /openslx/sbin /openslx/bin; do if test -x /$path/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} >/dev/null 2>&1 #|| error mkdir -p /run/mount/tmp mount -t ${fs} ${target} /run/mount/tmp fi done [ -n "$found" ] && break fi done } # Check for local harddisks and appropriate partitions fdisk -l |sed -n "/^\/dev\//p" >/etc/disk.partition # Check for standard swap partitions and make them available to the system for hdpartnr in $(cat /etc/disk.partition | \ sed -n -e "/ 82 /p"|sed -e "s/[[:space:]].*//") ; do echo -e "$hdpartnr\tswap\t\tswap\t\tdefaults\t 0 0" >>/etc/fstab 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 $(cat /etc/disk.partition | \ sed -n -e "/ 44 /p"|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 else echo "formatting failed for some reason " >/tmp/tmpready fi ) & break 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 $(cat /etc/disk.partition | \ sed -n -e "/ ${partid} /p"|sed -e "s/[[:space:]].*//") ; do mkdir -p /media/${hdpartnr#/dev/*} 2>/dev/null if [ ${partid} -eq 83 ] ; then echo -e "$hdpartnr\t/media/${hdpartnr#/dev/*}\tauto\t\tnoauto,\ noexec\t 0 0" >>/tmp/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" >>/tmp/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" >>/tmp/fstab fi done done