Adding casper 1.81+debian-1.
[live-boot-grml.git] / scripts / casper-helpers
index 61d8019..8402d93 100644 (file)
@@ -1,9 +1,16 @@
 ## Casper helper functions, used by casper on boot and by casper-snapshot
 
-if [ "${BUILD_SYSTEM}" == "Ubuntu" ]; then
+if [ "${BUILD_SYSTEM}" = "Ubuntu" ]; then
     MP_QUIET="-Q"
-else
+elif [ "${BUILD_SYSTEM}" = "Debian" ]; then
     MP_QUIET="-q"
+else
+    MP_QUIET=""
+fi
+
+if [ ! -x "/bin/fstype" ]; then
+    # klibc not in path -> not in initramfs
+    export PATH="${PATH}:/usr/lib/klibc/bin"
 fi
 
 sys2dev() {
@@ -22,6 +29,17 @@ subdevices() {
     echo ${r}
 }
 
+get_fstype() {
+    local FSTYPE
+    local FSSIZE
+    eval $(fstype < $1)
+    if [ "$FSTYPE" != "unknown" ]; then
+        echo $FSTYPE
+        return 0
+    fi
+    /lib/udev/vol_id -t $1 2>/dev/null
+}
+
 where_is_mounted() {
     device=$1
     if grep -q "^$device " /proc/mounts; then
@@ -56,47 +74,57 @@ base_path ()
     done
 }
 
-used_fs_size ()
+fs_size ()
 {
-    # Returns used fs kbytes + 5% more
+    # Returns used/free fs kbytes + 5% more
     # You could pass a block device as $1 or the mount point as $2
 
     dev="${1}"
     mountp="${2}"
+    used="${3}"
 
     if [ -z "${mountp}" ]; then
         mountp=$(where_is_mounted "${dev}")
         if [ "$?" -gt 0 ]; then
-            mountp=/mnt/tmp_fs_size
+            mountp="/mnt/tmp_fs_size"
             mkdir -p "${mountp}"
             mount -t $(get_fstype "${dev}") -o ro "${dev}" "${mountp}"
             doumount=1
         fi
     fi
 
-    size=$(du -ks ${mountp} | cut -f1)
-    size=$(expr ${size} + ${size}/20 ) # FIXME: 5% more to be sure
-    needed_space=$(expr ${size} * 1024)
+    if [ "${used}" = "used" ]; then
+        size=$(du -ks ${mountp} | cut -f1)
+        size=$(expr ${size} + ${size} / 20 ) # FIXME: 5% more to be sure
+    else
+        # free space
+        size="$(df -k | grep -s ${mountp} | awk '{print $4}')"
+    fi
 
-    if [ ! -z "${doumount}" ]; then
+    if [ -n "${doumount}" ]; then
         umount "${mountp}"
         rmdir "${mountp}"
     fi
-    echo "${needed_space}"
+    echo "${size}"
 }
 
 setup_loop() {
     local fspath=$1
     local module=$2
     local pattern=$3
+    local offset=$4
 
-    modprobe "${MP_QUIET}" -b "$module"
+    modprobe ${MP_QUIET} -b "$module"
     udevsettle
 
     for loopdev in $pattern; do
         if [ "$(cat $loopdev/size)" -eq 0 ]; then
             dev=$(sys2dev "${loopdev}")
-            losetup "$dev" "$fspath"
+            if [ -n "$offset" ]; then
+                losetup -o "$offset" "$dev" "$fspath"
+            else
+                losetup "$dev" "$fspath"
+            fi
             echo "$dev"
             return 0
         fi