summaryrefslogtreecommitdiff
path: root/distrib
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2014-01-06 21:03:14 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2014-01-06 21:03:14 +0000
commit2b78c264372d4136095e2085c6dd0d2c126b39f8 (patch)
tree43cae5500125c1323d6c84aaf15c2c076b8837da /distrib
parent90c22cc6f96a4a539e26364c9ea20e6177d8e098 (diff)
Rework the setup of the bootable installation cd-rom (installXX.iso) to
contain both a 2048-byte sector ffs filesystem, and a 512-byte volume header, so that the IP27 boot magic^Wuglyness recently added to the boot-only cd-rom (cdXX.iso) can be applied as well. The full-blown installation iso can now boot on IP27/28/30/32/35.
Diffstat (limited to 'distrib')
-rw-r--r--distrib/sgi/iso/Makefile67
1 files changed, 51 insertions, 16 deletions
diff --git a/distrib/sgi/iso/Makefile b/distrib/sgi/iso/Makefile
index 28772a8ed89..18d965b6f11 100644
--- a/distrib/sgi/iso/Makefile
+++ b/distrib/sgi/iso/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.18 2012/05/25 17:32:38 miod Exp $
+# $OpenBSD: Makefile,v 1.19 2014/01/06 21:03:13 miod Exp $
TOP= ${.CURDIR}/..
@@ -24,25 +24,55 @@ XBASE= ${RELXDIR}/xbase${OSrev}.tgz ${RELXDIR}/xetc${OSrev}.tgz \
all: ${CDROM}
-# Note regarding sgivol -h value:
-# boot32 currently (2012/05/25) needs 22 2048 byte sectors, boot64 needs 50,
-# bootecoff needs 20, and we need to keep some room for growth.
-# IF THIS VALUE IS EVER CHANGED, make sure it is consistent with the `cdroot'
-# layout in /etc/disktab!
+# Note regarding volume header size:
+# boot32 currently (2013/12/29) needs 81 512 byte sectors, boot64 needs 190,
+# bootecoff needs 73, the XFS partition needs 32768, and we need to keep some
+# room for growth.
+
+# The following values need to be consistent with the `cdroot' layout in
+# /etc/disktab
+SGIVOLSZ=8320 # oa, pp (size of volume header in 2048 byte sectors)
+FFSSZ=153472 # pa (size of the ffs partition in 2048 byte sectors)
+CDROMSZ=316 # nt (size of the iso image in megabytes)
+
+# Creating an IP27 bootable CD-ROM image with a usable FFS filesystem on it
+# is extremely tricky. We are facing the following challenges:
+# - the IP27 XFS filesystem will only get recognized correctly if the volume
+# header uses 512 byte sectors.
+# - the OpenBSD disklabel will reuse the sector size from the volume header,
+# yet we need to build a label with 2048 byte sectors.
+# This can be overcome by building a 512 byte sector volume header, then
+# filling the 2048 byte sector filesystem.
+
${CDROM}:
-rm -rf ${.OBJDIR}/cd-dir
mkdir -p ${.OBJDIR}/cd-dir/
- dd if=/dev/zero of=${.OBJDIR}/${CDROM} bs=2048b count=300
- vnconfig -v -c -t cdroot vnd0 ${.OBJDIR}/${CDROM}
+ dd if=/dev/zero of=${.OBJDIR}/${CDROM} bs=2048b count=${CDROMSZ}
+
+ # Create the 512 byte sector volume header
- /usr/mdec/sgivol -i -h 128 vnd0
- /usr/mdec/sgivol -w bootecoff ${DESTDIR}/usr/mdec/bootecoff vnd0
- /usr/mdec/sgivol -l bootecoff sash vnd0
- /usr/mdec/sgivol -w boot32 ${DESTDIR}/usr/mdec/boot32 vnd0
- /usr/mdec/sgivol -l boot32 sashARCS vnd0
- /usr/mdec/sgivol -w boot64 ${DESTDIR}/usr/mdec/boot64 vnd0
- /usr/mdec/sgivol -l boot64 sash64 vnd0
+ vnconfig -v -c vnd0 ${.OBJDIR}/${CDROM}
+
+ /usr/mdec/sgivol -qi -h `expr ${SGIVOLSZ} \* 4` vnd0
+ uudecode -o ${.OBJDIR}/xfs512.bin.gz \
+ ${.CURDIR}/../cdfs/xfs512.bin.gz.uue
+ gzip -d ${.OBJDIR}/xfs512.bin.gz
+ cat ${DESTDIR}/usr/mdec/boot64 >> ${.OBJDIR}/xfs512.bin
+ dd if=${.OBJDIR}/xfs512.bin of=${.OBJDIR}/xfs obs=16m conv=osync
+ /usr/mdec/sgivol -qw xfsboot ${.OBJDIR}/xfs vnd0
+ /usr/mdec/sgivol -qw bootecof ${DESTDIR}/usr/mdec/bootecoff vnd0
+ /usr/mdec/sgivol -ql bootecof sash vnd0
+ /usr/mdec/sgivol -qw boot32 ${DESTDIR}/usr/mdec/boot32 vnd0
+ /usr/mdec/sgivol -ql boot32 sashARCS vnd0
+ /usr/mdec/sgivol -qw boot64 ${DESTDIR}/usr/mdec/boot64 vnd0
+ /usr/mdec/sgivol -ql boot64 sash64 vnd0
+
+ vnconfig -u vnd0
+
+ # Create the 2048 byte sector media with the FFS partition
+
+ vnconfig -v -c -t cdroot vnd0 ${.OBJDIR}/${CDROM}
disklabel -w vnd0 cdroot "OpenBSD/sgi "
newfs /dev/rvnd0a
@@ -68,6 +98,11 @@ ${CDROM}:
cp -p ${XBASE} ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
umount ${.OBJDIR}/cd-dir
+
+ # Summary
+ disklabel vnd0
+ /usr/mdec/sgivol vnd0
+
vnconfig -u vnd0
install:
@@ -84,7 +119,7 @@ unconfig:
-vnconfig -u vnd0
clean cleandir:
- /bin/rm -f ${CDROM}
+ /bin/rm -f ${CDROM} xfs512.bin xfs
rm -rf cd-dir
.include <bsd.obj.mk>