Gentoo Archives: gentoo-commits

From: Richard Farina <zerochaos@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/genkernel:aufs commit in: defaults/
Date: Wed, 29 Apr 2015 19:04:42
Message-Id: 1430328705.935febab43502bfd27a0b18d2d4e0cc99a8a4b11.zerochaos@gentoo
1 commit: 935febab43502bfd27a0b18d2d4e0cc99a8a4b11
2 Author: Fernando Reyes (likewhoa) <design <AT> missionaccomplish <DOT> com>
3 AuthorDate: Mon Jun 23 17:58:33 2014 +0000
4 Commit: Richard Farina <zerochaos <AT> gentoo <DOT> org>
5 CommitDate: Wed Apr 29 17:31:45 2015 +0000
6 URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=935febab
7
8 Coding style changes throughout all the AUFS related code.
9
10 defaults/initrd.defaults | 4 +-
11 defaults/initrd.scripts | 179 ++++++++++++++++++-------------------
12 defaults/linuxrc | 227 +++++++++++++++++++++--------------------------
13 3 files changed, 188 insertions(+), 222 deletions(-)
14
15 diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults
16 index 2d79fc3..17847fe 100755
17 --- a/defaults/initrd.defaults
18 +++ b/defaults/initrd.defaults
19 @@ -58,7 +58,7 @@ KSUFF='.ko'
20 REAL_ROOT=''
21 CONSOLE='/dev/console'
22 NEW_ROOT='/newroot'
23 -RC_NO_UMOUNTS="/newroot|/newroot/mnt/changesdev|/mnt/overlay|/mnt/livecd|/mnt/cdrom|/.unions/memory|/.unions/memory/xino"
24 +RC_NO_UMOUNTS="/newroot|/newroot/mnt/changesdev|/mnt/rw_branch|/mnt/livecd|/mnt/cdrom|/.unions/memory|/.unions/memory/xino"
25 CDROOT='0'
26 CDROOT_DEV=''
27 CDROOT_TYPE='auto'
28 @@ -71,7 +71,7 @@ CDROOT_MARKER='/livecd'
29 USE_AUFS_NORMAL=0
30 AUFS_MODULES=false
31 AUFS_CHANGES=false
32 -AUFS_CHANGESFILE=livecd.aufs
33 +AUFS_CHANGESFILE=/livecd.aufs
34
35 LOOPS='/livecd.loop /zisofs /livecd.squashfs /image.squashfs /livecd.gcloop'
36
37
38 diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
39 index 91056b1..c258c00 100644
40 --- a/defaults/initrd.scripts
41 +++ b/defaults/initrd.scripts
42 @@ -314,8 +314,7 @@ union_insert_modules() {
43 # This should really go into /etc/init.d/localmounts but until then we manually set this here
44 conf_rc_no_umounts() {
45 local conf nomount fnd
46 - conf="${CHROOT}/etc/rc.conf"
47 - fnd=0
48 + conf=$CHROOT/etc/rc.conf fnd=0
49
50 if nomount=$(grep -n '^[[:blank:]]*RC_NO_UMOUNTS=' $conf); then
51 local i n data cmd IFS
52 @@ -350,33 +349,28 @@ conf_rc_no_umounts() {
53 create_changefs() {
54 local size
55
56 - while [ 1 ]
57 - do
58 + while :; do
59 read -p '<< Size of file (Press Enter for default 256 Mb): ' size
60 - if [ -z "${size}" ]; then
61 - size=256
62 - fi
63 - size="${size}"
64
65 - if [ ${size} -lt 16 ]
66 - then
67 - bad_msg "Please give a size of at least 16 Mb"
68 + [ -n "$size" ] || size=256
69 +
70 + size=$size
71 +
72 + if [ 15 -ge "$size" ]; then
73 + bad_msg "Please give a size of at least 16 Megabytes"
74 else
75 - dd if=/dev/zero of=${CHANGESMNT}/${AUFS_CHANGESFILE} bs=1M count=${size} &>/dev/null
76 - if [ $? = '0' ]
77 - then
78 - good_msg "Creation of ${AUFS_CHANGESFILE}, ${size} Mb on ${CHANGESDEV} successful, formatting it ext2"
79 - mke2fs -F ${CHANGESMNT}/${AUFS_CHANGESFILE} &>/dev/null
80 + if dd if=/dev/zero "of=$CHANGESMNT$AUFS_CHANGESFILE" bs=1M count="$size" &>/dev/null; then
81 + good_msg "Creation of $AUFS_CHANGESFILE, ${size}Mb on $CHANGESDEV successful, formatting it ext2"
82 + mke2fs -F "$CHANGESMNT$AUFS_CHANGESFILE" >/dev/null
83 AUFS_CHANGES=true
84 break
85 else
86 - rm -f ${CHANGESMNT}/${AUFS_CHANGESFILE}
87 - bad_msg "Unable to create ${AUFS_CHANGESFILE} on ${CHANGESDEV} of ${size} Mb"
88 + rm -f "$CHANGESMNT$AUFS_CHANGESFILE"
89 + bad_msg "Unable to create ${AUFS_CHANGESFILE#*/} on $CHANGESDEV of ${size}Mb"
90 bad_msg "Ensure your disk is not full or read-only"
91 +
92 read -p '<< Type "a" to abort, anything else to continue : ' doabort
93 - if [ "${doabort}" = "a" ]; then
94 - return 1
95 - fi
96 + if [ a = "$doabort" ]; then return 1; fi
97 fi
98 fi
99 done
100 @@ -386,87 +380,80 @@ create_changefs() {
101 setup_aufs() {
102 bootstrapCD
103
104 - if [ -n "${AUFS}" ]
105 - then
106 - if [ "${AUFS}" = "detect" ]
107 - then
108 - CHANGESMNT="${NEW_ROOT}${CDROOT_PATH}"
109 - CHANGESDEV=${REAL_ROOT}
110 + if [ -n "$AUFS" ]; then
111 + if [ detect = "$AUFS" ]; then
112 + CHANGESMNT=$NEW_ROOT$CDROOT_PATH
113 + CHANGESDEV=$REAL_ROOT
114 else
115 - CHANGESDEV=${AUFS}
116 - good_msg "Mounting ${CHANGESDEV} to ${MEMORY} for aufs support"
117 - mount -t auto ${CHANGESDEV} ${CHANGESMNT} &>/dev/null
118 - ret=$?
119 - if [ "${ret}" -ne 0 ]
120 - then
121 - bad_msg "Mount of ${CHANGESDEV} failed, falling back to ramdisk based aufs"
122 + CHANGESDEV=$AUFS
123 + good_msg "Mounting $CHANGESDEV to $MEMORY for aufs support"
124 +
125 + if ! mount -t auto "$CHANGESDEV" "$CHANGESMNT" &>/dev/null; then
126 + bad_msg "Mount of $CHANGESDEV failed, falling back to ramdisk based aufs"
127 unset AUFS
128 fi
129 fi
130 +
131 # Check and attempt to create the changesfile
132 - if [ ! -e ${CHANGESMNT}/${AUFS_CHANGESFILE} ] && [ -n "${AUFS}" ]
133 - then
134 + if [ ! -e $CHANGESMNT$AUFS_CHANGESFILE ] && [ -n "$AUFS" ]; then
135 create_changefs
136 - mount -t auto ${CHANGESMNT}/${AUFS_CHANGESFILE} ${MEMORY}
137 - elif [ -n "${AUFS}" ]
138 - then
139 - local nbpass=0
140 - while [ 1 ]
141 - do
142 - mount -t auto ${CHANGESMNT}/${AUFS_CHANGESFILE} ${MEMORY}
143 - ret=$?
144 - if [ "${ret}" -ne 0 ]
145 - then
146 - if [ ${nbpass} -eq 0 ]
147 - then
148 - bad_msg "Mounting of changes file failed, Running e2fsck"
149 - e2fsck ${CHANGESMNT}/${AUFS_CHANGESFILE}
150 - nbpass=$((${nbpass} + 1))
151 - else
152 - bad_msg "Mount of ${CHANGESDEV} failed, falling back to ramdisk based aufs"
153 - bad_msg "your ${AUFS_CHANGESFILE} might be messed up, and I couldn't fix it"
154 - bad_msg "moving ${AUFS_CHANGESFILE} to ${AUFS_CHANGESFILE}.bad"
155 - mv ${CHANGESMNT}/${AUFS_CHANGESFILE} ${CHANGESMNT}/${AUFS_CHANGESFILE}.bad
156 - bad_msg "Try to fix it yourself with e2fsck"
157 + mount -t auto "$CHANGESMNT$AUFS_CHANGESFILE" "$MEMORY"
158 + elif [ -n "$AUFS" ]; then
159 + while :; do
160 + if mount -t auto "$CHANGESMNT$AUFS_CHANGESFILE" "$MEMORY" &>/dev/null; then
161 + break
162 + else
163 + bad_msg "Mounting of changes file failed, Running e2fsck"
164 +
165 + if ! hash e2fsck &>/dev/null; then
166 + bad_msg "/sbin/e2fsck not found! aborting filesystem check"
167 + bad_msg "Moving ${AUFS_CHANGESFILE#*/} to ${AUFS_CHANGESFILE#*/}.bad"
168 +
169 + mv "$CHANGESMNT$AUFS_CHANGESFILE" "$CHANGESMNT$AUFS_CHANGESFILE.bad"
170 + break
171 +
172 + fi
173 +
174 + if e2fsck "$CHANGESMNT$AUFS_CHANGESFILE" &>/dev/null; then
175 + good_msg "e2fsck ran successfully. Please verify data after bootup"
176 + else
177 + bad_msg "Your ${AUFS_CHANGESFILE#*/} image might be corrupted"
178 + bad_msg "moving ${AUFS_CHANGESFILE#*/} to ${AUFS_CHANGESFILE#*/}.bad"
179 +
180 + mv "$CHANGESMNT$AUFS_CHANGESFILE" "$CHANGESMNT$AUFS_CHANGESFILE.bad"
181 break
182 fi
183 - else
184 - if [ ${nbpass} -eq 1 ]
185 - then
186 - good_msg "e2fsck ran successfully. Please check your files after bootup"
187 - fi
188 - break
189 fi
190 done
191 fi
192 # mount tmpfs only in the case when changes= boot parameter was
193 # empty or we were not able to mount the storage device
194 - if [ "${CDROOT}" -eq '1' -a ! -f ${CHANGESMNT}/${AUFS_CHANGESFILE} ]
195 - then
196 - XINO=${MEMORY}
197 - umount ${MEMORY} &>/dev/null
198 - bad_msg "Failed to find ${AUFS_CHANGESFILE} file on ${CHANGESDEV}"
199 - bad_msg "Create an ext2 ${AUFS_CHANGESFILE} file on this device if you wish to use it for aufs"
200 - bad_msg "Falling back to ramdisk based aufs for safety"
201 + if [ 1 = "$CDROOT" ] && [ ! -f "$CHANGESMNT$AUFS_CHANGESFILE" ]; then
202 + XINO=$MEMORY
203 + umount "$MEMORY" &>/dev/null
204 +
205 + bad_msg "Create an extfs ${AUFS_CHANGESFILE#*/} file on this device"
206 + bad_msg "if you wish to have aufs data persistency on reboots"
207 + bad_msg "Falling back to ramdisk based aufs"
208 good_msg "Mounting ramdisk to $MEMORY for aufs support"
209 - mount -t tmpfs tmpfs ${MEMORY}
210 +
211 + mount -t tmpfs tmpfs "$MEMORY"
212 else
213 - XINO=${MEMORY}/xino
214 - mkdir -p ${XINO}
215 - mount -t tmpfs tmpfs ${XINO}
216 + XINO=$MEMORY/xino
217 +
218 + mkdir -p "$XINO"
219 + mount -t tmpfs aufs-xino "$XINO"
220 fi
221 else
222 - good_msg "Mounting ramdisk to $MEMORY for aufs support"
223 - mount -t tmpfs tmpfs ${MEMORY}
224 - XINO=${MEMORY}
225 + XINO=$MEMORY
226 +
227 + good_msg "Mounting ramdisk to $MEMORY for aufs support"
228 + mount -t tmpfs tmpfs "$MEMORY"
229 fi
230
231 - mkdir -p ${CHANGES}
232 - mount -t aufs -n -o nowarn_perm,udba=none,xino=${XINO}/.aufs.xino,br:${CHANGES}=rw aufs ${UNION}
233 - ret=$?
234 - if [ "${ret}" -ne 0 ]
235 - then
236 - bad_msg "Can't setup union ${UNION} in directory!"
237 + mkdir -p "$CHANGES"
238 + if ! mount -t aufs -n -o "nowarn_perm,udba=none,xino=$XINO/.aufs.xino,br:$CHANGES=rw" aufs "$UNION"; then
239 + bad_msg "Can't setup union $UNION in directory!"
240 USE_AUFS_NORMAL=0
241 fi
242 }
243 @@ -1420,22 +1407,24 @@ getdvhoff() {
244
245 setup_squashfs_aufs() {
246 # Setup aufs directories and vars
247 - overlay=/mnt/overlay
248 - static=/mnt/livecd
249 + rw_branch=/mnt/rw_branch ro_branch=/mnt/livecd
250
251 - for i in "${overlay}" "${static}"; do
252 - [ ! -d "${i}" ] && mkdir -p "${i}"
253 + for dir in $rw_branch $ro_branch; do
254 + [ ! -d $dir ] && mkdir -p "$dir"
255 done
256 - good_msg "Loading aufs"
257 - modprobe aufs > /dev/null 2>&1
258
259 - mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}"
260 - mount -t tmpfs none "${overlay}"
261 - mount -t aufs -o br:${overlay}:${static} aufs "${NEW_ROOT}"
262 + good_msg "Loading aufs module ..."
263 + modprobe aufs &>/dev/null
264
265 - [ ! -d "${NEW_ROOT}${overlay}" ] && mkdir -p "${NEW_ROOT}${overlay}"
266 - [ ! -d "${NEW_ROOT}${static}" ] && mkdir -p "${NEW_ROOT}${static}"
267 - for i in "${overlay}" "${static}"; do mount --move "${i}" "${NEW_ROOT}${i}"; done
268 + mount -t squashfs -o loop,ro "$CDROOT_PATH/$LOOPEXT$LOOP" "$ro_branch"
269 + mount -t tmpfs none "$rw_branch"
270 + mount -t aufs -o "br:$rw_branch:$ro_branch" aufs "$NEW_ROOT"
271 +
272 + [ ! -d $NEW_ROOT$rw_branch ] && mkdir -p "$NEW_ROOT$rw_branch"
273 + [ ! -d $NEW_ROOT$ro_branch ] && mkdir -p "$NEW_ROOT$ro_branch"
274 + for mount in $rw_branch $ro_branch; do
275 + mount --move "$mount" "$NEW_ROOT$mount"
276 + done
277 }
278
279 setup_unionfs() {
280
281 diff --git a/defaults/linuxrc b/defaults/linuxrc
282 index 8b3ff87..5a341af 100644
283 --- a/defaults/linuxrc
284 +++ b/defaults/linuxrc
285 @@ -255,31 +255,17 @@ do
286 ;;
287 aufs\=*)
288 USE_AUFS_NORMAL=1
289 - echo ${x#*=} | grep , &>/dev/null
290
291 - if [ "$?" -eq '0' ]
292 - then
293 + if echo "${x#*=}" | grep , &>/dev/null; then
294 UID=${x#*,}
295 AUFS=${x%,*}
296 else
297 AUFS=${x#*=}
298 fi
299 ;;
300 - aufs.changes\=*)
301 - USE_AUFS_NORMAL=1
302 - echo ${x#*=} | grep , &>/dev/null
303 -
304 - if [ "$?" -eq '0' ]
305 - then
306 - UID=${x#*,}
307 - AUFS=${x%,*}
308 - else
309 - AUFS=${x#*=}
310 - fi
311 - ;;
312 aufs.persistent)
313 USE_AUFS_NORMAL=1
314 - AUFS="detect"
315 + AUFS=detect
316 ;;
317 # Allow user to specify the modules location
318 aufs.modules\=*)
319 @@ -461,16 +447,14 @@ then
320 # Setup the root filesystem
321 bootstrapFS
322
323 - if [ "${USE_AUFS_NORMAL}" -eq '1' ]
324 - then
325 + if [ 1 = "$USE_AUFS_NORMAL" ]; then
326 setup_aufs
327 - CHROOT=${UNION}
328 + CHROOT=$UNION
329 else
330 CHROOT=${NEW_ROOT}
331 fi
332
333 - if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] && [ "${USE_AUFS_NORMAL}" != '1' ]
334 - then
335 + if [ /dev/nfs != "$REAL_ROOT" ] && [ sgimips != "$LOOPTYPE" ] && [ 1 != "$USE_AUFS_NORMAL" ]; then
336 bootstrapCD
337 fi
338
339 @@ -502,7 +486,7 @@ then
340 fi
341
342 # Determine root device
343 -good_msg 'Determining root device...'
344 +good_msg 'Determining root device ...'
345 while true
346 do
347 while [ "${got_good_root}" != '1' ]
348 @@ -720,7 +704,7 @@ then
349 FS_LOCATION='mnt/livecd'
350 elif [ "${LOOPTYPE}" = 'squashfs' ]
351 then
352 - if [ "${USE_AUFS_NORMAL}" != '1' ]; then
353 + if [ 1 != "$USE_AUFS_NORMAL" ]; then
354 good_msg 'Mounting squashfs filesystem'
355 _CACHED_SQUASHFS_PATH="${NEW_ROOT}/mnt/${LOOP}"
356 _squashfs_path="${CDROOT_PATH}/${LOOPEXT}${LOOP}" # Default to uncached
357 @@ -782,25 +766,23 @@ then
358 fi
359 fi # if [ -n "${CRYPT_ROOT}" ]
360
361 - if [ "${USE_AUFS_NORMAL}" -eq '1' ]
362 - then
363 - union_insert_dir ${CHROOT} ${NEW_ROOT}/${FS_LOCATION}
364 -
365 - # Make sure fstab notes livecd is mounted ro. Makes system skip remount which fails on aufs dirs.
366 - # TODO: remounting all tmpfs as RO seems weird, can we be more specific?
367 - #sed -e 's|\(.*\s/\s*tmpfs\s*\)defaults\(.*\)|\1defaults,ro\2|' /${UNION}/etc/fstab > /${UNION}/etc/fstab.new
368 - #mv /${UNION}/etc/fstab.new /${UNION}/etc/fstab
369 + if [ 1 = "$USE_AUFS_NORMAL" ]; then
370 + union_insert_dir "$CHROOT" "$NEW_ROOT/$FS_LOCATION"
371
372 # Function to handle the RC_NO_UMOUNTS variable in ${CHROOT}/etc/rc.conf
373 conf_rc_no_umounts
374
375 # Fstab changes for aufs
376 - if ! grep -q '^aufs' "${CHROOT}"/etc/fstab 2>/dev/null; then
377 - for i in /var/tmp /tmp /usr/portage/distfiles; do
378 - [ ! -d "${CHROOT}${i}" ] && mkdir -p "${CHROOT}${i}"
379 + if ! grep -q '^aufs' "$CHROOT/etc/fstab" 2>/dev/null; then
380 + for dir in /var/tmp /tmp /usr/portage/distfiles; do
381 + [ ! -d $CHROOT$dir ] && mkdir -p "$CHROOT$dir"
382 done
383
384 - cat > "${CHROOT}"/etc/fstab << FSTAB
385 + cat > "$CHROOT/etc/fstab" << FSTAB
386 +####################################################
387 +## ATTENTION: THIS IS THE FSTAB ON THE LIVECD ##
388 +## PLEASE EDIT THE FSTAB at /mnt/gentoo/etc/fstab ##
389 +####################################################
390 aufs / aufs defaults 0 0
391 vartmp /var/tmp tmpfs defaults 0 0
392 tmp /tmp tmpfs defaults 0 0
393 @@ -808,30 +790,29 @@ distfiles /usr/portage/distfiles tmpfs defaults 0 0
394 FSTAB
395 fi
396
397 - if ${AUFS_MODULES}; then
398 + if $AUFS_MODULES; then
399 warn_msg "Adding all modules in $MODULESD/modules/"
400
401 - if [ -z "${MODULESD}" ]
402 - then
403 - union_insert_modules ${CDROOT_PATH}
404 + if [ -z "$MODULESD" ]; then
405 + union_insert_modules "$CDROOT_PATH"
406 else
407 - mkdir ${NEW_ROOT}/mnt/modulesd
408 - mount "${MODULESD}" ${NEW_ROOT}/mnt/modulesd
409 - union_insert_modules ${NEW_ROOT}/mnt/modulesd
410 + mkdir "$NEW_ROOT/mnt/modulesd"
411 + mount "$MODULESD" "$NEW_ROOT/mnt/modulesd"
412 + union_insert_modules "$NEW_ROOT/mnt/modulesd"
413 fi
414 fi
415
416 # Copy user keymap file
417 if [ -e /etc/sysconfig/keyboard ]; then
418 - [ ! -d ${CHROOT}/etc/sysconfig ] && mkdir -p ${CHROOT}/etc/sysconfig
419 - cp /etc/sysconfig/keyboard ${CHROOT}/etc/sysconfig/
420 + [ ! -d $CHROOT/etc/sysconfig ] && mkdir -p "$CHROOT/etc/sysconfig"
421 + cp /etc/sysconfig/keyboard "$CHROOT/etc/sysconfig/"
422 fi
423
424 # Create the directories for our new union mounts
425 - test ! -d "${CHROOT}${NEW_ROOT}" && mkdir -p "${CHROOT}${NEW_ROOT}"
426 + [ ! -d $CHROOT$NEW_ROOT ] && mkdir -p "$CHROOT$NEW_ROOT"
427
428 - if ${AUFS_CHANGES} && [ ! -d "${CHROOT}${NEW_ROOT}/mnt/changesdev" ]; then
429 - mkdir -p "${CHROOT}${NEW_ROOT}/mnt/changesdev"
430 + if $AUFS_CHANGES && [ ! -d $CHROOT$NEW_ROOT/mnt/changesdev ]; then
431 + mkdir -p "$CHROOT$NEW_ROOT/mnt/changesdev"
432 fi
433 fi
434
435 @@ -856,67 +837,67 @@ FSTAB
436 then
437 setup_unionfs ${NEW_ROOT} /${FS_LOCATION}
438 CHROOT=/union
439 - else
440 - #XXX Note to potential reviewers. diff formats this section very very oddly. Be sure to review this hunk after applied, do NOT simply read the diff
441 - if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
442 - then
443 - good_msg "Copying read-write image contents to tmpfs"
444 - # Copy over stuff that should be writable
445 - (cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}") || {
446 - bad_msg "Copying failed, dropping into a shell."
447 - do_rundebugshell
448 - }
449 -
450 - # Now we do the links.
451 - for x in ${ROOT_LINKS}
452 - do
453 - if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ]
454 - then
455 - ln -s "$(readlink ${NEW_ROOT}/${FS_LOCATION}/${x})" "${x}" 2>/dev/null
456 - else
457 - # List all subdirectories of x
458 - find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory
459 - do
460 - # Strip the prefix of the FS_LOCATION
461 - directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}"
462 -
463 - # Skip this directory if we already linked a parent directory
464 - if [ "${current_parent}" != '' ]; then
465 - var=$(echo "${directory}" | grep "^${current_parent}")
466 - if [ "${var}" != '' ]; then
467 - continue
468 - fi
469 - fi
470 - # Test if the directory exists already
471 - if [ -e "/${NEW_ROOT}/${directory}" ]
472 - then
473 - # It does exist, link all the individual files
474 - for file in $(ls /${NEW_ROOT}/${FS_LOCATION}/${directory})
475 - do
476 - if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then
477 - ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null
478 - fi
479 - done
480 - else
481 - # It does not exist, make a link to the livecd
482 - ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null
483 - current_parent="${directory}"
484 - fi # if [ -e "/${NEW_ROOT}/${directory}" ] ... else
485 - done # while read directory
486 - fi # if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ] ... else
487 - done # for x in ${ROOT_LINKS}
488 - mkdir -p initramfs proc tmp run sys 2>/dev/null
489 - chmod 1777 tmp
490 -
491 - fi # if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
492 - #XXX: end extremely confusing hunk
493 -
494 - # have handy /mnt/cdrom (CDROOT_PATH) as well
495 - _new_cdroot="${NEW_ROOT}${CDROOT_PATH}"
496 - [ ! -d "${_new_cdroot}" ] && mkdir -p "${_new_cdroot}"
497 - mount --bind "${CDROOT_PATH}" "${_new_cdroot}"
498 -
499 - fi # if [ "${USE_UNIONFS_NORMAL}" = '1' ] ... else
500 + else
501 + #XXX Note to potential reviewers. diff formats this section very very oddly. Be sure to review this hunk after applied, do NOT simply read the diff
502 + if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
503 + then
504 + good_msg "Copying read-write image contents to tmpfs"
505 + # Copy over stuff that should be writable
506 + (cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}") || {
507 + bad_msg "Copying failed, dropping into a shell."
508 + do_rundebugshell
509 + }
510 +
511 + # Now we do the links.
512 + for x in ${ROOT_LINKS}
513 + do
514 + if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ]
515 + then
516 + ln -s "$(readlink ${NEW_ROOT}/${FS_LOCATION}/${x})" "${x}" 2>/dev/null
517 + else
518 + # List all subdirectories of x
519 + find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory
520 + do
521 + # Strip the prefix of the FS_LOCATION
522 + directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}"
523 +
524 + # Skip this directory if we already linked a parent directory
525 + if [ "${current_parent}" != '' ]; then
526 + var=$(echo "${directory}" | grep "^${current_parent}")
527 + if [ "${var}" != '' ]; then
528 + continue
529 + fi
530 + fi
531 + # Test if the directory exists already
532 + if [ -e "/${NEW_ROOT}/${directory}" ]
533 + then
534 + # It does exist, link all the individual files
535 + for file in $(ls /${NEW_ROOT}/${FS_LOCATION}/${directory})
536 + do
537 + if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then
538 + ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null
539 + fi
540 + done
541 + else
542 + # It does not exist, make a link to the livecd
543 + ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null
544 + current_parent="${directory}"
545 + fi # if [ -e "/${NEW_ROOT}/${directory}" ] ... else
546 + done # while read directory
547 + fi # if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ] ... else
548 + done # for x in ${ROOT_LINKS}
549 + mkdir -p initramfs proc tmp run sys 2>/dev/null
550 + chmod 1777 tmp
551 +
552 + fi # if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
553 + #XXX: end extremely confusing hunk
554 +
555 + # have handy /mnt/cdrom (CDROOT_PATH) as well
556 + _new_cdroot="${NEW_ROOT}${CDROOT_PATH}"
557 + [ ! -d "${_new_cdroot}" ] && mkdir -p "${_new_cdroot}"
558 + mount --bind "${CDROOT_PATH}" "${_new_cdroot}"
559 +
560 + fi # if [ "${USE_UNIONFS_NORMAL}" = '1' ] ... else
561
562 #UML=$(cat /proc/cpuinfo|grep UML|sed -e 's|model name.*: ||')
563 #if [ "${UML}" = 'UML' ]
564 @@ -928,18 +909,16 @@ FSTAB
565 # Let Init scripts know that we booted from CD
566 export CDBOOT
567 CDBOOT=1
568 -else # if [ "${CDROOT}" = '1' ]
569 +else
570 if [ "${USE_UNIONFS_NORMAL}" = '1' ]
571 then
572 mkdir /union_changes
573 mount -t tmpfs tmpfs /union_changes
574 setup_unionfs /union_changes ${NEW_ROOT}
575 mkdir -p ${UNION}/tmp/.initrd
576 - fi
577 - if [ "${USE_AUFS_NORMAL}" -eq '1' ]
578 - then
579 - union_insert_dir ${UNION} ${NEW_ROOT}
580 - mkdir -p ${UNION}/tmp/.initrd
581 + elif [ 1 = "$USE_AUFS_NORMAL" ]; then
582 + union_insert_dir "$UNION" "$NEW_ROOT"
583 + mkdir -p "$UNION/tmp/.initrd"
584 fi
585
586 fi # if [ "${CDROOT}" = '1' ]
587 @@ -986,22 +965,20 @@ fi
588
589 verbose_kmsg
590
591 -if [ "${USE_AUFS_NORMAL}" -eq '1' ]
592 -then
593 - UNION_MEMORY=${CHROOT}/.unions/memory
594 +if [ 1 = "$USE_AUFS_NORMAL" ]; then
595 + UNION_MEMORY=$CHROOT/.unions/memory
596
597 - mkdir -p "${UNION_MEMORY}"
598 - mount --move "${MEMORY}" "${UNION_MEMORY}"
599 + mkdir -p "$UNION_MEMORY"
600 + mount --move "$MEMORY" "$UNION_MEMORY"
601 test_success "Failed to move aufs /memory into the system root"
602
603 - for i in /mnt/gentoo /mnt/livecd /mnt/overlay ${CDROOT_PATH}
604 - do
605 - mkdir -p "${CHROOT}${i}"
606 - chmod 755 "${CHROOT}${i}"
607 + for dir in /mnt/gentoo $rw_branch $ro_branch $CDROOT_PATH; do
608 + mkdir -p "$CHROOT$dir"
609 + chmod 755 "$CHROOT$dir"
610 done
611
612 - for i in ${CDROOT_PATH} ${overlay} ${static}; do
613 - mount --move ${NEW_ROOT}${i} ${CHROOT}${i}
614 + for dir in $CDROOT_PATH $rw_branch $ro_branch; do
615 + mount --move "$NEW_ROOT$dir" "$CHROOT$dir"
616 done
617 fi