Rewriting live-media checksum verification to work with any SHA and MD5 digests.
[live-boot-grml.git] / scripts / boot / arguments.sh
1 #!/bin/sh
2
3 #set -e
4
5 Arguments ()
6 {
7         for ARGUMENT in $(cat /proc/cmdline)
8         do
9                 case "${ARGUMENT}" in
10                         live-boot.verify-checksums|verify-checksums)
11                                 LIVE_VERIFY_CHECKSUMS="true"
12                                 export LIVE_VERIFY_CHECKSUMS
13                                 ;;
14
15                         # parameters below need review
16                         read-only)
17                                 READ_ONLY="true"
18                                 ;;
19
20                         skipconfig)
21                                 NOFASTBOOT="true"
22                                 NOFSTAB="true"
23                                 NONETWORKING="true"
24
25                                 export NOFASTBOOT NOFSTAB NONETWORKING
26                                 ;;
27
28                         BOOTIF=*)
29                                 BOOTIF="${x#BOOTIF=}"
30                                 ;;
31
32                         debug)
33                                 DEBUG="true"
34                                 export DEBUG
35
36                                 set -x
37                                 ;;
38
39                         dhcp)
40                                 # Force dhcp even while netbooting
41                                 # Use for debugging in case somebody works on fixing dhclient
42                                 DHCP="true";
43                                 export DHCP
44                                 ;;
45
46                         nodhcp)
47                                 DHCP=""
48                                 export DHCP
49                                 ;;
50
51                         ethdevice=*)
52                                 DEVICE="${ARGUMENT#ethdevice=}"
53                                 ETHDEVICE="${DEVICE}"
54                                 export DEVICE ETHDEVICE
55                                 ;;
56
57                         ethdevice-timeout=*)
58                                 ETHDEV_TIMEOUT="${ARGUMENT#ethdevice-timeout=}"
59                                 export ETHDEV_TIMEOUT
60                                 ;;
61
62                         fetch=*)
63                                 FETCH="${ARGUMENT#fetch=}"
64                                 export FETCH
65                                 ;;
66
67                         findiso=*)
68                                 FINDISO="${ARGUMENT#findiso=}"
69                                 export FINDISO
70                                 ;;
71
72                         ftpfs=*)
73                                 FTPFS="${ARGUMENT#ftpfs=}"
74                                 export FTPFS
75                                 ;;
76
77                         httpfs=*)
78                                 HTTPFS="${ARGUMENT#httpfs=}"
79                                 export HTTPFS
80                                 ;;
81
82                         iscsi=*)
83                                 ISCSI="${ARGUMENT#iscsi=}"
84                                 #ip:port - separated by ;
85                                 ISCSI_PORTAL="${ISCSI%;*}"
86                                 if echo "${ISCSI_PORTAL}" | grep -q , ; then
87                                         ISCSI_SERVER="${ISCSI_PORTAL%,*}"
88                                         ISCSI_PORT="${ISCSI_PORTAL#*,}"
89                                 fi
90                                 #target name
91                                 ISCSI_TARGET="${ISCSI#*;}"
92                                 export ISCSI ISCSI_PORTAL ISCSI_TARGET ISCSI_SERVER ISCSI_PORT
93                                 ;;
94
95                         isofrom=*|fromiso=*)
96                                 FROMISO="${ARGUMENT#*=}"
97                                 export FROMISO
98                                 ;;
99
100                         ignore_uuid)
101                                 IGNORE_UUID="true"
102                                 export IGNORE_UUID
103                                 ;;
104
105                         ip=*)
106                                 STATICIP="${ARGUMENT#ip=}"
107
108                                 if [ -z "${STATICIP}" ]
109                                 then
110                                         STATICIP="frommedia"
111                                 fi
112
113                                 export STATICIP
114                                 ;;
115
116                         live-media=*|bootfrom=*)
117                                 LIVE_MEDIA="${ARGUMENT#*=}"
118                                 export LIVE_MEDIA
119                                 ;;
120
121                         live-media-encryption=*|encryption=*)
122                                 LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
123                                 export LIVE_MEDIA_ENCRYPTION
124                                 ;;
125
126                         live-media-offset=*)
127                                 LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
128                                 export LIVE_MEDIA_OFFSET
129                                 ;;
130
131                         live-media-path=*)
132                                 LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
133                                 export LIVE_MEDIA_PATH
134                                 ;;
135
136                         live-media-timeout=*)
137                                 LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
138                                 export LIVE_MEDIA_TIMEOUT
139                                 ;;
140
141                         module=*)
142                                 MODULE="${ARGUMENT#module=}"
143                                 export MODULE
144                                 ;;
145
146                         netboot=*)
147                                 NETBOOT="${ARGUMENT#netboot=}"
148                                 export NETBOOT
149                                 ;;
150
151                         nfsopts=*)
152                                 NFSOPTS="${ARGUMENT#nfsopts=}"
153                                 export NFSOPTS
154                                 ;;
155
156                         nfsoverlay=*)
157                                 NFS_COW="${ARGUMENT#nfsoverlay=}"
158                                 export NFS_COW
159                                 ;;
160
161                         nofastboot)
162                                 NOFASTBOOT="true"
163                                 export NOFASTBOOT
164                                 ;;
165
166                         nofstab)
167                                 NOFSTAB="true"
168                                 export NOFSTAB
169                                 ;;
170
171                         nonetworking)
172                                 NONETWORKING="true"
173                                 export NONETWORKING
174                                 ;;
175
176                         ramdisk-size=*)
177                                 ramdisk_size="${ARGUMENT#ramdisk-size=}"
178                                 ;;
179
180                         swapon)
181                                 SWAPON="true"
182                                 export SWAPON
183                                 ;;
184
185                         persistence)
186                                 PERSISTENCE="true"
187                                 export PERSISTENCE
188                                 ;;
189
190                         persistence-encryption=*)
191                                 PERSISTENCE_ENCRYPTION="${ARGUMENT#*=}"
192                                 export PERSISTENCE_ENCRYPTION
193                                 ;;
194
195                         persistence-media=*)
196                                 PERSISTENCE_MEDIA="${ARGUMENT#*=}"
197                                 export PERSISTENCE_MEDIA
198                                 ;;
199                         persistence-method=*)
200                                 PERSISTENCE_METHOD="${ARGUMENT#*=}"
201                                 export PERSISTENCE_METHOD
202                                 ;;
203
204                         persistence-path=*)
205                                 PERSISTENCE_PATH="${ARGUMENT#persistence-path=}"
206                                 export PERSISTENCE_PATH
207                                 ;;
208                         persistence-read-only)
209                                 PERSISTENCE_READONLY="true"
210                                 export PERSISTENCE_READONLY
211                                 ;;
212
213                         persistence-storage=*)
214                                 PERSISTENCE_STORAGE="${ARGUMENT#persistence-storage=}"
215                                 export PERSISTENCE_STORAGE
216                                 ;;
217
218                         persistence-subtext=*)
219                                 old_root_overlay_label="${old_root_overlay_label}-${ARGUMENT#persistence-subtext=}"
220                                 old_home_overlay_label="${old_home_overlay_label}-${ARGUMENT#persistence-subtext=}"
221                                 custom_overlay_label="${custom_overlay_label}-${ARGUMENT#persistence-subtext=}"
222                                 root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistence-subtext=}"
223                                 old_root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistence-subtext=}"
224                                 home_snapshot_label="${home_snapshot_label}-${ARGUMENT#persistence-subtext=}"
225                                 ;;
226
227                         nopersistence)
228                                 NOPERSISTENCE="true"
229                                 export NOPERSISTENCE
230                                 ;;
231
232                         noprompt)
233                                 NOPROMPT="true"
234                                 export NOPROMPT
235                                 ;;
236
237                         noprompt=*)
238                                 NOPROMPT="${ARGUMENT#noprompt=}"
239                                 export NOPROMPT
240                                 ;;
241
242                         quickusbmodules)
243                                 QUICKUSBMODULES="true"
244                                 export QUICKUSBMODULES
245                                 ;;
246
247                         showmounts)
248                                 SHOWMOUNTS="true"
249                                 export SHOWMOUNTS
250                                 ;;
251
252                         silent)
253                                 SILENT="true"
254                                 export SILENT
255                                 ;;
256
257                         todisk=*)
258                                 TODISK="${ARGUMENT#todisk=}"
259                                 export TODISK
260                                 ;;
261
262                         toram)
263                                 TORAM="true"
264                                 export TORAM
265                                 ;;
266
267                         toram=*)
268                                 TORAM="true"
269                                 MODULETORAM="${ARGUMENT#toram=}"
270                                 export TORAM MODULETORAM
271                                 ;;
272
273                         exposedroot)
274                                 EXPOSED_ROOT="true"
275                                 export EXPOSED_ROOT
276                                 ;;
277
278                         plainroot)
279                                 PLAIN_ROOT="true"
280                                 export PLAIN_ROOT
281                                 ;;
282
283                         skipunion)
284                                 SKIP_UNION_MOUNTS="true"
285                                 export SKIP_UNION_MOUNTS
286                                 ;;
287
288                         root=*)
289                                 ROOT="${ARGUMENT#root=}"
290                                 export ROOT
291                                 ;;
292
293                         union=*)
294                                 UNIONTYPE="${ARGUMENT#union=}"
295                                 export UNIONTYPE
296                                 ;;
297                 esac
298         done
299
300         # sort of compatibility with netboot.h from linux docs
301         if [ -z "${NETBOOT}" ]
302         then
303                 if [ "${ROOT}" = "/dev/nfs" ]
304                 then
305                         NETBOOT="nfs"
306                         export NETBOOT
307                 elif [ "${ROOT}" = "/dev/cifs" ]
308                 then
309                         NETBOOT="cifs"
310                         export NETBOOT
311                 fi
312         fi
313
314         if [ -z "${MODULE}" ]
315         then
316                 MODULE="filesystem"
317                 export MODULE
318         fi
319
320         if [ -z "${UNIONTYPE}" ]
321         then
322                 UNIONTYPE="aufs"
323                 export UNIONTYPE
324         fi
325
326         if [ -z "${PERSISTENCE_ENCRYPTION}" ]
327         then
328                 PERSISTENCE_ENCRYPTION="none"
329                 export PERSISTENCE_ENCRYPTION
330         elif is_in_comma_sep_list luks ${PERSISTENCE_ENCRYPTION}
331         then
332                 if ! modprobe dm-crypt
333                 then
334                         log_warning_msg "Unable to load module dm-crypt"
335                         PERSISTENCE_ENCRYPTION=$(echo ${PERSISTENCE_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
336                         export PERSISTENCE_ENCRYPTION
337                 fi
338
339                 if [ ! -x /lib/cryptsetup/askpass ] || [ ! -x /sbin/cryptsetup ]
340                 then
341                         log_warning_msg "cryptsetup in unavailable"
342                         PERSISTENCE_ENCRYPTION=$(echo ${PERSISTENCE_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
343                         export PERSISTENCE_ENCRYPTION
344                 fi
345         fi
346
347         if [ -z "${PERSISTENCE_METHOD}" ]
348         then
349                 PERSISTENCE_METHOD="snapshot,overlay"
350                 export PERSISTENCE_METHOD
351         fi
352
353         if [ -z "${PERSISTENCE_STORAGE}" ]
354         then
355                 PERSISTENCE_STORAGE="filesystem,file"
356                 export PERSISTENCE_STORAGE
357         fi
358 }