Browse Source

Horrible hacks to make the image actually create at a size that fits everything.

Feel free to rehack it if you can do it better.
Issue 954


git-svn-id: http://svn.dmdirc.com/trunk@3855 00569f92-eb28-0410-84fd-f71c24880f
tags/0.6
Shane Mc Cormack 16 years ago
parent
commit
5cbbac2920
1 changed files with 72 additions and 49 deletions
  1. 72
    49
      installer/osx/makeInstallerOSX.sh

+ 72
- 49
installer/osx/makeInstallerOSX.sh View File

@@ -349,60 +349,83 @@ if [ "" = "${HDIUTIL}" ]; then
349 349
 		LINUXIMAGE=${PWD}/DMDirc.dmg
350 350
 	fi;
351 351
 
352
-	SIZE=$((`du -sb ${DMG} | awk '{print $1}'`  + 10))
353 352
 	# Non-OSX
354 353
 	# This doesn't work quite aswell as on OSX, but it works.
355
-	if [ "" = "${MKHFS}" -a "" != "${MKHFSPLUS}" ]; then
356
-		MKHFS=${MKHFSPLUS}
357
-	fi;
358
-	# mkfs.hfs will only create 512kb+ sized images
359
-	if [ ${SIZE} -lt 524288 ]; then
360
-		echo "Size is less than 512kb"
361
-		SIZE=524288;
362
-	fi;
363
-	dd if=/dev/zero of=${LINUXIMAGE} bs=${SIZE} count=1
364
-	${MKHFS} -v 'DMDirc' ${LINUXIMAGE}
365
-	# however older versions of mkfs.hfs will only create 4mb+ sized images :/
366
-	if [ $? -eq 1 ]; then
367
-		if [ ${SIZE} -lt 4194304 ]; then
368
-			echo "Size is less than 4MB"
369
-			SIZE=4194304;
354
+	IMGBLOCKSIZE=4096 # OSX Default = 4096
355
+	MVRES=0
356
+	createImage() {
357
+		MVRES=0
358
+		SIZE=${1}
359
+		if [ "" = "${MKHFS}" -a "" != "${MKHFSPLUS}" ]; then
360
+			MKHFS=${MKHFSPLUS}
361
+		fi;
362
+		# mkfs.hfs will only create 512kb+ sized images
363
+		if [ ${SIZE} -lt 524288 ]; then
364
+			echo "Size is less than 512kb"
365
+			SIZE=524288;
370 366
 		fi;
371 367
 		dd if=/dev/zero of=${LINUXIMAGE} bs=${SIZE} count=1
372
-		${MKHFS} -v 'DMDirc' ${LINUXIMAGE}
373
-	fi;
374
-	# Now try and mount
375
-	# This could be a problem, as linux requires either root to mount, or an fstab
376
-	# entry.
377
-	# Try to mount, if this fails, let the user know what to add to fstab.
378
-	if [ -e ${LINUXIMAGEDIR} ]; then
379
-		rm -Rf ${LINUXIMAGEDIR}
380
-	fi;
381
-	mkdir ${LINUXIMAGEDIR}
382
-	mount ${LINUXIMAGEDIR}
383
-	MOUNTRES=${?}
384
-	if [ ${MOUNTRES} -ne 0 ]; then
385
-		# Try using full parameters - could be running as root.
386
-		mount -t hfsplus -o loop ${RUNNAME} ${LINUXIMAGEDIR}
368
+		${MKHFS} -b ${IMGBLOCKSIZE} -v 'DMDirc' ${LINUXIMAGE}
369
+		if [ ${?} -ne 0 ]; then
370
+			echo "mkfs.hfs failed to create the image, aborting."
371
+			exit 1;
372
+		fi;
373
+		# Now try and mount
374
+		# This could be a problem, as linux requires either root to mount, or an fstab
375
+		# entry.
376
+		# Try to mount, if this fails, let the user know what to add to fstab.
377
+		if [ -e ${LINUXIMAGEDIR} ]; then
378
+			rm -Rf ${LINUXIMAGEDIR}
379
+		fi;
380
+		mkdir ${LINUXIMAGEDIR}
381
+		mount ${LINUXIMAGEDIR}
387 382
 		MOUNTRES=${?}
388
-	fi;
389
-	if [ ${MOUNTRES} -ne 0 ]; then
390
-		echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
391
-		echo "@                               ERROR                               @"
392
-		echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
393
-		echo "You do not have permission to mount the image."
394
-		echo "Please add the following lines to /etc/fstab and rcd oun this script again"
395
-		echo "# DMDirc OSX dmg image"
396
-		echo "${LINUXIMAGE} ${LINUXIMAGEDIR} auto users,noauto,loop 0 0"
397
-		echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
398
-		echo "@                               ERROR                               @"
399
-		echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
400
-		exit 1;
401
-	fi;
402
-	mv -fv ${DMG}/* ${LINUXIMAGEDIR}
403
-	mv -fv ${DMG}/.[A-Za-z]* ${LINUXIMAGEDIR}
404
-	umount ${LINUXIMAGEDIR}
405
-	# If anyone finds out how to compress these nicely, add it here.
383
+		if [ ${MOUNTRES} -ne 0 ]; then
384
+			# Try using full parameters - could be running as root.
385
+			mount -t hfsplus -o loop ${RUNNAME} ${LINUXIMAGEDIR}
386
+			MOUNTRES=${?}
387
+		fi;
388
+		if [ ${MOUNTRES} -ne 0 ]; then
389
+			echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
390
+			echo "@                               ERROR                               @"
391
+			echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
392
+			echo "You do not have permission to mount the image."
393
+			echo "Please add the following lines to /etc/fstab and re run this script again"
394
+			echo "# DMDirc OSX dmg image"
395
+			echo "${LINUXIMAGE} ${LINUXIMAGEDIR} auto users,noauto,loop 0 0"
396
+			echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
397
+			echo "@                               ERROR                               @"
398
+			echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
399
+			exit 1;
400
+		fi;
401
+		mv -fv ${DMG}/* ${LINUXIMAGEDIR}
402
+		MVRES=${?}
403
+		if [ ${MVRES} -ne 0 ]; then
404
+			echo "Image incorrect size."
405
+		else
406
+			mv -fv ${DMG}/.[A-Za-z]* ${LINUXIMAGEDIR}
407
+			MVRES=${?}
408
+			if [ ${MVRES} -ne 0 ]; then
409
+				echo "Image incorrect size."
410
+			fi;
411
+		fi;
412
+		umount ${LINUXIMAGEDIR}
413
+		# If anyone finds out how to compress these nicely, add it here.
414
+	}
415
+	
416
+	INCREASE=10
417
+	IMAGESIZE=$(((`du -s --block-size ${IMGBLOCKSIZE} ${DMG} | awk '{print $1}'` + ${INCREASE}) * ${IMGBLOCKSIZE} ))
418
+	createImage ${IMAGESIZE}
419
+	
420
+	# This sucks, but it makes sure the image gets created at a size that contains
421
+	# everything.
422
+	# I can't manage to get du to return the size that the files actually end up
423
+	# using on the image.
424
+	while [ ${MVRES} -ne 0 ]; do
425
+		INCREASE=$((${INCREASE} + 5))
426
+		IMAGESIZE=$(((`du -s --block-size ${IMGBLOCKSIZE} ${DMG} | awk '{print $1}'` + ${INCREASE}) * ${IMGBLOCKSIZE} ))
427
+		createImage ${IMAGESIZE}
428
+	done;
406 429
 	
407 430
 	if [ "${LINUXIMAGE}" != "${RUNNAME}" ]; then
408 431
 		# Rename the image

Loading…
Cancel
Save