mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-25 12:02:01 +01:00
Change the way powerpc bootable CDs are generated to work around a bug
in hybrid image generation in cdrtools. This produces a small HFS partition containing loader, mapped in by an oddly-formed APM table using a new feature in makefs. This does not appear to work yet on early-model G3 systems, which will be fixed later, but produces bootable CDs on everything else.
This commit is contained in:
parent
b815af1b74
commit
d16401694f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=221465
64
release/powerpc/generate-hfs.sh
Executable file
64
release/powerpc/generate-hfs.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script generates the dummy HFS filesystem used for the PowerPC boot
|
||||||
|
# blocks. It uses hfsutils (emulators/hfsutils) to generate a template
|
||||||
|
# filesystem with the relevant interesting files. These are then found by
|
||||||
|
# grep, and the offsets written to a Makefile snippet.
|
||||||
|
#
|
||||||
|
# Because of licensing concerns, and because it is overkill, we do not
|
||||||
|
# distribute hfsutils as a build tool. If you need to regenerate the HFS
|
||||||
|
# template (e.g. because the boot block or the CHRP script have grown),
|
||||||
|
# you must install it from ports.
|
||||||
|
|
||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
HFS_SIZE=400 #Size in 2048-byte blocks of the produced image
|
||||||
|
LOADER_SIZE=300k
|
||||||
|
|
||||||
|
# Generate 800K HFS image
|
||||||
|
OUTPUT_FILE=hfs-boot
|
||||||
|
|
||||||
|
dd if=/dev/zero of=$OUTPUT_FILE bs=2048 count=$HFS_SIZE
|
||||||
|
hformat -l "FreeBSD Install" $OUTPUT_FILE
|
||||||
|
hmount $OUTPUT_FILE
|
||||||
|
|
||||||
|
# Create and bless a directory for the boot loader
|
||||||
|
hmkdir ppc
|
||||||
|
hattrib -b ppc
|
||||||
|
hcd ppc
|
||||||
|
|
||||||
|
# Make the CHRP boot script, which gets loader from the ISO9660 partition
|
||||||
|
cat > bootinfo.txt << EOF
|
||||||
|
<CHRP-BOOT>
|
||||||
|
<DESCRIPTION>FreeBSD/powerpc bootloader</DESCRIPTION>
|
||||||
|
<OS-NAME>FreeBSD</OS-NAME>
|
||||||
|
<VERSION> $FreeBSD: head/sys/boot/powerpc/boot1.chrp/bootinfo.txt 184490 2008-10
|
||||||
|
-31 00:52:31Z nwhitehorn $ </VERSION>
|
||||||
|
|
||||||
|
<COMPATIBLE>
|
||||||
|
MacRISC MacRISC3 MacRISC4
|
||||||
|
</COMPATIBLE>
|
||||||
|
<BOOT-SCRIPT>
|
||||||
|
" screen" output
|
||||||
|
boot &device;:,\ppc\loader &device;:0
|
||||||
|
</BOOT-SCRIPT>
|
||||||
|
</CHRP-BOOT>
|
||||||
|
EOF
|
||||||
|
echo 'Loader START' | dd of=loader.tmp cbs=$LOADER_SIZE count=1 conv=block
|
||||||
|
|
||||||
|
hcopy bootinfo.txt :bootinfo.txt
|
||||||
|
hcopy loader.tmp :loader
|
||||||
|
hattrib -c chrp -t tbxi bootinfo.txt
|
||||||
|
humount
|
||||||
|
|
||||||
|
rm bootinfo.txt
|
||||||
|
rm loader.tmp
|
||||||
|
|
||||||
|
bzip2 $OUTPUT_FILE
|
||||||
|
echo 'HFS boot filesystem created by generate-hfs.sh' > $OUTPUT_FILE.bz2.uu
|
||||||
|
echo 'DO NOT EDIT' >> $OUTPUT_FILE.bz2.uu
|
||||||
|
echo '$FreeBSD$' >> $OUTPUT_FILE.bz2.uu
|
||||||
|
|
||||||
|
uuencode $OUTPUT_FILE.bz2 $OUTPUT_FILE.bz2 >> $OUTPUT_FILE.bz2.uu
|
||||||
|
rm $OUTPUT_FILE.bz2
|
||||||
|
|
23
release/powerpc/hfs-boot.bz2.uu
Normal file
23
release/powerpc/hfs-boot.bz2.uu
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
HFS boot filesystem created by generate-hfs.sh
|
||||||
|
DO NOT EDIT
|
||||||
|
$FreeBSD$
|
||||||
|
begin 644 hfs-boot.bz2
|
||||||
|
M0EIH.3%!62936=#$Y.(``"___?_O_G)7!_Y]OW??5#]U_^!`0`,@1`!!``!@
|
||||||
|
M(0!`3,`"L"4.2U"2(H9%/:*>TFDVU3RGZID'J&C3U,@T-&@`/1!H>IZC1D#(
|
||||||
|
M`D24TTRFC1D]*;$@!IZ@Q!IH-````#0&33":?J@<:&AH:`:`Q`T!D``&F@`:
|
||||||
|
M`9````PDI1J>0Q,H/1J&@```!D-`````T-``#SZHHR(+Y*Y9J*Z:4KK=T]W@
|
||||||
|
M4RV\LG/;0XDPC7^`9DO3/3&*].462T,NO#AA9C,O\0!)^Q@@S6";2`!);<W\
|
||||||
|
MM\)T,GR:I$-V("3$9$B"&8,,*RS@L++(8KPP)-C!L0(22AH:=29JC18OSD@O
|
||||||
|
M&&`F8@M#$H:5#;%`Q)(22DF(/IB46IH0H?):$7!BU_SU=DL`+E*J,;0?%AW6
|
||||||
|
M#\-_#^NL++6(CI"!)*#8N/S2"7!C_QAB8[(ZW3G$\`G81HL8.H^M8?#(Z"JL
|
||||||
|
M;J^PI=+>?8(B6BR1(-7Q*8?>>HPQSBQE>M$A9K6FFW<:#6[D931J%U.F8*`0
|
||||||
|
MD(,M80A(0;]K'X'SI]G(C)Y).AK_/0)D(2$$]JB$]]F').M4RF8O%[IHK[0O
|
||||||
|
MMQ?'>O[U8EM;>U<P%^7)&#;>",KY^*%FO9C05_435?.4*F[6AIL%&9C<9W&&
|
||||||
|
M[ZMP(TG!'*4Z>@6TM)0BS.D._O,WR9OJ728V48I;DD=8QGBE7J-&L^?=0JEF
|
||||||
|
MV2`B/)/D\)83IS@32(;!P,152U()0VGQH>2F$UC:M!D5`F#1W$\:KKDR[TQB
|
||||||
|
MN;N<J=4-1'[HLG,!L^IJG53+[IORM_L7JB/:/<+:634`XD.R'",=M$A;C4E.
|
||||||
|
M$RRHL2;B)D:_ZJVK$Z*40?H'TATSF5$$%L@<LB4`\2$P90.50PWE:'REG6\D
|
||||||
|
ML%>5B1;P!7:AG#1BP2%-Q$7I6QE,Y?NHIK_LR+HA]22HW0.8(^G4/X`Z@!Z6
|
||||||
|
8#PQ(0))/`A(0.'VUG_\7<D4X4)#0Q.3B
|
||||||
|
`
|
||||||
|
end
|
@ -1,3 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
.tbxi - 'chrp' 'tbxi' "bootstrap"
|
|
||||||
* - 'fbsd' 'TEXT' "FreeBSD file"
|
|
@ -23,9 +23,16 @@
|
|||||||
# extra-bits-dir, if provided, contains additional files to be merged
|
# extra-bits-dir, if provided, contains additional files to be merged
|
||||||
# into base-bits-dir as part of making the image.
|
# into base-bits-dir as part of making the image.
|
||||||
|
|
||||||
|
publisher="The FreeBSD Project. http://www.freebsd.org/"
|
||||||
if [ "x$1" = "x-b" ]; then
|
if [ "x$1" = "x-b" ]; then
|
||||||
cp /usr/src/release/powerpc/boot.tbxi ${4}/boot
|
uudecode -o /tmp/hfs-boot-block.bz2 `dirname $0`/hfs-boot.bz2.uu
|
||||||
bootable="-hfs -hfs-bless ${4}/boot -map /usr/src/release/powerpc/hfs.map -hide-hfs ${4}/usr/share/man"
|
bzip2 -d /tmp/hfs-boot-block.bz2
|
||||||
|
OFFSET=$(hd /tmp/hfs-boot-block | grep 'Loader START' | cut -f 1 -d ' ')
|
||||||
|
OFFSET=0x$(echo 0x$OFFSET | awk '{printf("%x\n",$1/512);}')
|
||||||
|
echo dd if=$4/boot/loader of=/tmp/hfs-boot-block seek=$OFFSET conv=notrunc
|
||||||
|
dd if=$4/boot/loader of=/tmp/hfs-boot-block seek=$OFFSET conv=notrunc
|
||||||
|
|
||||||
|
bootable="-o bootimage=macppc;/tmp/hfs-boot-block -o no-emul-boot"
|
||||||
shift
|
shift
|
||||||
else
|
else
|
||||||
bootable=""
|
bootable=""
|
||||||
@ -33,28 +40,13 @@ fi
|
|||||||
|
|
||||||
if [ $# -lt 3 ]; then
|
if [ $# -lt 3 ]; then
|
||||||
echo Usage: $0 '[-b] image-label image-name base-bits-dir [extra-bits-dir]'
|
echo Usage: $0 '[-b] image-label image-name base-bits-dir [extra-bits-dir]'
|
||||||
rm -f ${IMG}
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
type mkisofs 2>&1 | grep " is " >/dev/null
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo The cdrtools port is not installed. Trying to get it now.
|
|
||||||
if [ -f /usr/ports/sysutils/cdrtools/Makefile ]; then
|
|
||||||
cd /usr/ports/sysutils/cdrtools && make install BATCH=yes && make clean
|
|
||||||
else
|
|
||||||
if ! pkg_add -r cdrtools; then
|
|
||||||
echo "Could not get it via pkg_add - please go install this"
|
|
||||||
echo "from the ports collection and run this script again."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
LABEL=$1; shift
|
LABEL=$1; shift
|
||||||
NAME=$1; shift
|
NAME=$1; shift
|
||||||
|
|
||||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > $1/etc/fstab
|
echo "/dev/iso9660/`echo $LABEL | tr '[:lower:]' '[:upper:]'` / cd9660 ro 0 0" > $1/etc/fstab
|
||||||
mkisofs $bootable -l -r -part -no-desktop -V $LABEL -o $NAME $*
|
makefs -t cd9660 $bootable -o rockridge -o label=$LABEL $NAME $*
|
||||||
rm $1/etc/fstab
|
rm $1/etc/fstab
|
||||||
|
rm /tmp/hfs-boot-block
|
||||||
|
Loading…
Reference in New Issue
Block a user