[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: r38572 - in trunk/src/debian-edu-config: debian sbin



On Fri, Oct 26, 2007 at 12:47:36AM +0200, Daniel Hess wrote:
> Maybe be could bindmount subdirds to the directory we bindmount later on
> top of /etc, than we don't need to copy the whole thing.

Was easier written than done.

It got a bit longer and uglier than I thought, but it works.

May I have comments before I do something like commit it to the svn
please? :)

Greetings

Daniel
#!/bin/sh
### BEGIN INIT INFO
# Provides:          ltsp_local_mount
# Required-Start:    
# Required-Stop:     
# Should-Start:      
# Default-Start:     3
# Default-Stop:      
# Short-Description: Make local devices (u)mountable by user
# Description:       Takes care, that /etc/mtab is writeable, so that
#                    users can mount and umount local and static devices
#                    like cdroms.
### END INIT INFO

test -f /etc/default/ltsp-client-setup && . /etc/default/ltsp-client-setup

case "$1" in
  start)
    # make /etc writeable
    cd $tmpfs_dir
    # mount /etc subtree from nfs
    mkdir etc-nfs
    eval $(sed -ns 's#^\([^ ]*\) / nfs \([^ ]*\) .*#mount \1/etc etc-nfs -o\2#p' /proc/mounts)
    # make etc-rw a mointpoint to move it later
    mkdir etc-rw
    mount -t tmpfs -o mode=0755 tmpfs etc-rw
    # bindmount dirs and files
    for i in $(find etc-nfs/ -maxdepth 1 -mindepth 1 -type d | sed 's#^etc-nfs\/##'); do
      mkdir "etc-rw/$i"
      mount --bind "etc-nfs/$i" "etc-rw/$i"
    done
    for i in $(find etc-nfs/ -maxdepth 1 -type f | sed 's#^etc-nfs\/##'); do
      touch "etc-rw/$i"
      mount --bind "etc-nfs/$i" "etc-rw/$i"
    done
    # copy the rest
    for i in $(find etc-nfs/ -maxdepth 1 ! -type f ! -type d ! -name mtab | sed 's#^etc-nfs\/##'); do
      cp -a "etc-nfs/$i" "etc-rw/$i"
    done
    # move old bindmounts
    for i in $(grep '^[^ ]* \/etc' /proc/mounts | cut -d' ' -f2); do
      mount --move "$i" "etc-rw$(echo $i | sed 's#/etc##')"
    done
    # move new /etc over /etc
    mount --move $tmpfs_dir/etc-rw /etc
    # create writeable mtab
    cp /proc/mounts /etc/mtab
    # create cdrom entry in fstab and mountpoint under /media
    if [ -b /dev/cdrom ]; then
      echo "/dev/cdrom /media/cdrom0 udf,iso9660 user,auto 0 0" >>/etc/fstab
      mkdir /media/cdrom0 && ln -s /media/cdrom0 /media/cdrom
    fi
    if [ -b /dev/cdrom?* ]; then
      for CDDEV in $(ls /dev/cdrom?*); do
        echo "/dev/${CDDEV} /media/${CDDEV} udf,iso9660 user,auto 0 0" >>/etc/fstab
	mkdir /media/${CDDEV}
      done
    fi
  ;;
  *) exit 0 ;;
esac

exit 0

Attachment: signature.asc
Description: Digital signature


Reply to: