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