Splitting out a first bunch of functions out to /live/live/boot/.
[live-boot-grml.git] / scripts / boot / toram-todisk.sh
1 #!/bin/sh
2
3 copy_live_to ()
4 {
5         copyfrom="${1}"
6         copytodev="${2}"
7         copyto="${copyfrom}_swap"
8
9         if [ -z "${MODULETORAM}" ]
10         then
11                 size=$(fs_size "" ${copyfrom}/${LIVE_MEDIA_PATH} "used")
12         else
13                 MODULETORAMFILE="${copyfrom}/${LIVE_MEDIA_PATH}/${MODULETORAM}"
14
15                 if [ -f "${MODULETORAMFILE}" ]
16                 then
17                         size=$( expr $(ls -la ${MODULETORAMFILE} | awk '{print $5}') / 1024 + 5000 )
18                 else
19                         log_warning_msg "Error: toram-module ${MODULETORAM} (${MODULETORAMFILE}) could not be read."
20                         return 1
21                 fi
22         fi
23
24         if [ "${copytodev}" = "ram" ]
25         then
26                 # copying to ram:
27                 freespace=$(awk '/^MemFree:/{f=$2} /^Cached:/{c=$2} END{print f+c}' /proc/meminfo)
28                 mount_options="-o size=${size}k"
29                 free_string="memory"
30                 fstype="tmpfs"
31                 dev="/dev/shm"
32         else
33                 # it should be a writable block device
34                 if [ -b "${copytodev}" ]
35                 then
36                         dev="${copytodev}"
37                         free_string="space"
38                         fstype=$(get_fstype "${dev}")
39                         freespace=$(fs_size "${dev}")
40                 else
41                         log_warning_msg "${copytodev} is not a block device."
42                         return 1
43                 fi
44         fi
45
46         if [ "${freespace}" -lt "${size}" ]
47         then
48                 log_warning_msg "Not enough free ${free_string} (${freespace}k free, ${size}k needed) to copy live media in ${copytodev}."
49                 return 1
50         fi
51
52         # Custom ramdisk size
53         if [ -z "${mount_options}" ] && [ -n "${ramdisk_size}" ]
54         then
55                 # FIXME: should check for wrong values
56                 mount_options="-o size=${ramdisk_size}"
57         fi
58
59         # begin copying (or uncompressing)
60         mkdir "${copyto}"
61         log_begin_msg "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
62         mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
63
64         if [ "${extension}" = "tgz" ]
65         then
66                 cd "${copyto}"
67                 tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
68                 rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
69                 mount -r -o move "${copyto}" "${rootmnt}"
70                 cd "${OLDPWD}"
71         else
72                 if [ -n "${MODULETORAMFILE}" ]
73                 then
74                         if [ -x /bin/rsync ]
75                         then
76                                 echo " * Copying $MODULETORAMFILE to RAM" 1>/dev/console
77                                 rsync -a --progress ${MODULETORAMFILE} ${copyto} 1>/dev/console # copy only the filesystem module
78                         else
79                                 cp ${MODULETORAMFILE} ${copyto} # copy only the filesystem module
80                         fi
81                 else
82                         if [ -x /bin/rsync ]
83                         then
84                                 echo " * Copying whole medium to RAM" 1>/dev/console
85                                 rsync -a --progress ${copyfrom}/* ${copyto} 1>/dev/console  # "cp -a" from busybox also copies hidden files
86                         else
87                                 mkdir -p ${copyto}/${LIVE_MEDIA_PATH}
88                                 cp -a ${copyfrom}/${LIVE_MEDIA_PATH}/* ${copyto}/${LIVE_MEDIA_PATH}
89                                 if [ -e ${copyfrom}/${LIVE_MEDIA_PATH}/.disk ]
90                                 then
91                                         cp -a ${copyfrom}/${LIVE_MEDIA_PATH}/.disk ${copyto}
92                                 fi
93                         fi
94                 fi
95
96                 umount ${copyfrom}
97                 mount -r -o move ${copyto} ${copyfrom}
98         fi
99
100         rmdir ${copyto}
101         return 0
102 }