#!/bin/sh # 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 autoconfiguration script for OpenSLX linux stateless # clients, detecting swap and special partitions ############################################################################# # Todo: # * This script should be run just once per boot! # * The activation of swap could/should be handled in separate script!? # * The mounting of /tmp could/should be done separately? # * Same for other partitions, use information of /etc/fstab for that? # * Should we just install xfs in the source system and boil down everything # onto that? # General formatter for the /tmp partition on a local harddisk diskfm () { local target=$1 local mntpnt=$2 local fs local path for fs in xfs reiserfs ext2 ; do if strinfile "$fs" /proc/filesystems || modprobe ${MODPRV} $fs ; then unset $found for path in /sbin /bin /usr/sbin /usr/bin ; do if test -x /mnt/$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 if [ -z $mntpnt ] ; then umount /tmp 2>/dev/null if mount -t $fs -n $mopt $target /tmp 2>/dev/null; then return 0 else mount -n -t tmpfs none /tmp fi else mkdir -p $mntpnt mount -t $fs -n -o loop $target $mntpnt 2>/dev/null return 0 fi fi done [ -z $found ] && continue else break fi done } # Check for local harddisks and appropriate partitions fdisk -l /dev/$hd|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\tauto\t\tdefaults\t 0 0" >>/etc/fstab else echo "formatting failed for some reason ($(sysup))" >/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