Splitting out a first bunch of functions out to /live/live/boot/.
[live-boot-grml.git] / scripts / boot / mount-http.sh
1 #!/bin/sh
2
3 do_httpmount ()
4 {
5         rc=1
6
7         for webfile in HTTPFS FTPFS FETCH
8         do
9                 local url="$(eval echo \"\$\{${webfile}\}\")"
10                 local extension="$(echo "${url}" | sed 's/\(.*\)\.\(.*\)/\2/')"
11
12                 if [ -n "$url" ]
13                 then
14                         case "${extension}" in
15                                 iso|squashfs|tgz|tar)
16                                         if [ "${extension}" = "iso" ]
17                                         then
18                                                 mkdir -p "${alt_mountpoint}"
19                                                 dest="${alt_mountpoint}"
20                                         else
21                                                 local dest="${mountpoint}/${LIVE_MEDIA_PATH}"
22                                                 mount -t ramfs ram "${mountpoint}"
23                                                 mkdir -p "${dest}"
24                                         fi
25                                         if [ "${webfile}" = "FETCH" ]
26                                         then
27                                                 case "$url" in
28                                                         tftp*)
29                                                                 ip="$(dirname $url | sed -e 's|tftp://||g' -e 's|/.*$||g')"
30                                                                 rfile="$(echo $url | sed -e "s|tftp://$ip||g")"
31                                                                 lfile="$(basename $url)"
32                                                                 log_begin_msg "Trying tftp -g -b 10240 -r $rfile -l ${dest}/$lfile $ip"
33                                                                 tftp -g -b 10240 -r $rfile -l ${dest}/$lfile $ip
34                                                         ;;
35
36                                                         *)
37                                                                 log_begin_msg "Trying wget ${url} -O ${dest}/$(basename ${url})"
38                                                                 wget "${url}" -O "${dest}/$(basename ${url})"
39                                                                 ;;
40                                                 esac
41                                         else
42                                                 log_begin_msg "Trying to mount ${url} on ${dest}/$(basename ${url})"
43                                                 if [ "${webfile}" = "FTPFS" ]
44                                                 then
45                                                         FUSE_MOUNT="curlftpfs"
46                                                         url="$(dirname ${url})"
47                                                 else
48                                                         FUSE_MOUNT="httpfs"
49                                                 fi
50                                                 modprobe fuse
51                                                 $FUSE_MOUNT "${url}" "${dest}"
52                                                 ROOT_PID="$(minips h -C "$FUSE_MOUNT" | { read x y ; echo "$x" ; } )"
53                                         fi
54                                         [ ${?} -eq 0 ] && rc=0
55                                         [ "${extension}" = "tgz" ] && live_dest="ram"
56                                         if [ "${extension}" = "iso" ]
57                                         then
58                                                 isoloop=$(setup_loop "${dest}/$(basename "${url}")" "loop" "/sys/block/loop*" "" '')
59                                                 mount -t iso9660 "${isoloop}" "${mountpoint}"
60                                                 rc=${?}
61                                         fi
62                                         break
63                                         ;;
64
65                                 *)
66                                         log_begin_msg "Unrecognized archive extension for ${url}"
67                                         ;;
68                         esac
69                 fi
70         done
71
72         if [ ${rc} != 0 ]
73         then
74                 if [ -d "${alt_mountpoint}" ]
75                 then
76                         umount "${alt_mountpoint}"
77                         rmdir "${alt_mountpoint}"
78                 fi
79                 umount "${mountpoint}"
80         elif [ "${webfile}"  != "FETCH" ] ; then
81                 NETBOOT="${webfile}"
82                 export NETBOOT
83         fi
84
85         return ${rc}
86 }