Skip to content
This repository
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

executable file 195 lines (164 sloc) 5.38 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
#!/bin/sh

# Update for each new release
SHORTREL="50"
LONGREL="5.0"

# Update ARC for the architecture to use
ARC=i386
#ARC=amd64

# Change if ftp.eu.openbsd.org is not the best place to get your files from
URLBASE="http://ftp.eu.openbsd.org/pub/OpenBSD/${LONGREL}"

# Another mirror
#URLBASE="http://ftp.netbsd.se/OpenBSD/${LONGREL}"


# No need to change anything below this line for new OS releases!
CWD=`pwd`
SUDO=sudo
DEVICE=vnd0
DEVICECD=vnd1
SOURCECD=install${SHORTREL}.iso
MOUNTPOINT=/mnt/image
MOUNTPOINTCD=/mnt/cd
TEMPFILE=/tmp/build-diskimage.tmp.$$
KERNELFILE=${KERNELFILE:-${MOUNTPOINTCD}/${LONGREL}/${ARC}/bsd.rd}
DISTSTUFF=diststuff

# drive geometry information

# 489 MB cards
totalsize=1001952 # "total sectors:"
bytessec=512 # "bytes/sector:"
sectorstrack=63 # "sectors/track:"
sectorscylinder=1008 # "sectors/cylinder:"
trackscylinder=16 # "tracks/cylinder:"
cylinders=994 # "cylinders:"

# Don't start without a imagefile as a parameter
if [ "$1" = "" ]; then
  echo "usage: $0 imagefile"
  exit 1
fi

IMAGEFILE=$1

# Make directory for dist stuff
mkdir -p ${DISTSTUFF}/${ARC}


echo ""
echo "Downloading SHA256..."
if [ ! -f ${DISTSTUFF}/${ARC}/SHA256 ] ; then
        echo "Needed SHA256, didn't find it in current dir so downloading..."
        ftp -o ${DISTSTUFF}/${ARC}/SHA256 ${URLBASE}/${ARC}/SHA256
else
        echo "SHA256 already exist, don't need to download it again"
fi

echo ""
echo "Downloading ${SOURCECD}..."
if [ ! -f ${DISTSTUFF}/${ARC}/${SOURCECD} ] ; then
echo "Needed ${SOURCECD}, didn't find it in current dir so downloading..."
ftp -o ${DISTSTUFF}/${ARC}/${SOURCECD} ${URLBASE}/${ARC}/${SOURCECD}
else
echo "${SOURCECD} already exist, don't need to download it again"
fi

echo ""
echo "Calculating sha256 checksum of ${SOURCECD} to verify against SHA256 file..."
cd ${DISTSTUFF}/${ARC}
if [ "$(cat "SHA256" | grep "${SOURCECD}")" = "$(sha256 "${SOURCECD}")" ]; then
        echo "checksum match!"
else
        echo "sha256 sum of ${SOURCECD} does not match, please verifiy!"
        exit 1
fi
cd ${CWD}
echo ""
echo "Cleanup if something failed the last time... (ignore any not currently mounted and Device not configured warnings)"
${SUDO} umount $MOUNTPOINT
${SUDO} vnconfig -u $DEVICE
${SUDO} umount $MOUNTPOINTCD
${SUDO} vnconfig -u $DEVICECD

echo ""
echo "Creating an image file, if one doesn't exist..."
if [ ! -f $IMAGEFILE ] ; then
  dd if=/dev/zero of=$IMAGEFILE bs=$bytessec count=$totalsize
fi

echo ""
echo "Mounting the imagefile as a device..."
${SUDO} vnconfig -c $DEVICE $IMAGEFILE

echo ""
echo "Running fdisk... (Ignore any sysctl(machdep.bios.diskinfo): Device not configured warnings)"
${SUDO} fdisk -c $cylinders -h $trackscylinder -s $sectorstrack -f /usr/mdec/mbr -e $DEVICE << __EOC >/dev/null
reinit
update
write
quit
__EOC

let asize=$totalsize-$sectorstrack

echo "type: SCSI" >> $TEMPFILE
echo "disk: vnd device" >> $TEMPFILE
echo "label: fictitious" >> $TEMPFILE
echo "flags:" >> $TEMPFILE
echo "bytes/sector: ${bytessec}" >> $TEMPFILE
echo "sectors/track: ${sectorstrack}" >> $TEMPFILE
echo "tracks/cylinder: ${trackscylinder}" >> $TEMPFILE
echo "sectors/cylinder: ${sectorscylinder}" >> $TEMPFILE
echo "cylinders: ${cylinders}" >> $TEMPFILE
echo "total sectors: ${totalsize}" >> $TEMPFILE
echo "rpm: 3600" >> $TEMPFILE
echo "interleave: 1" >> $TEMPFILE
echo "trackskew: 0" >> $TEMPFILE
echo "cylinderskew: 0" >> $TEMPFILE
echo "headswitch: 0 " >> $TEMPFILE
echo "track-to-track seek: 0 " >> $TEMPFILE
echo "drivedata: 0 " >> $TEMPFILE
echo "" >> $TEMPFILE
echo "16 partitions:" >> $TEMPFILE
echo "a: $asize $sectorstrack 4.2BSD 2048 16384 16" >> $TEMPFILE
echo "c: $totalsize 0 unused 0 0" >> $TEMPFILE

echo ""
echo "Installing disklabel..."
${SUDO} disklabel -R $DEVICE $TEMPFILE
rm $TEMPFILE

echo ""
echo "Creating new filesystem..."
${SUDO} newfs -q /dev/r${DEVICE}a

echo ""
echo "Mounting destination to ${MOUNTPOINT}..."
if [ -d ${MOUNTPOINT} ]; then
${SUDO} rm -r ${MOUNTPOINT}
fi
${SUDO} mkdir -p ${MOUNTPOINT}
if ! ${SUDO} mount -o async /dev/${DEVICE}a ${MOUNTPOINT}; then
echo Mount failed..
exit
fi

echo ""
echo "Mounting the install iso as a device..."
${SUDO} vnconfig $DEVICECD ${DISTSTUFF}/${ARC}/${SOURCECD}

echo ""
echo "Mouting install cd to ${MOUNTPOINTCD}..."
if [ -d ${MOUNTPOINTCD} ]; then
${SUDO} rm -r ${MOUNTPOINTCD}
fi
${SUDO} mkdir -p ${MOUNTPOINTCD}
if ! ${SUDO} mount -t cd9660 /dev/${DEVICECD}c ${MOUNTPOINTCD}; then
echo Mount failed..
exit
fi

echo ""
echo "Copying bsd kernel and boot blocks..."
${SUDO} cp /usr/mdec/boot ${MOUNTPOINT}/boot
${SUDO} cp ${KERNELFILE} ${MOUNTPOINT}/bsd

echo ""
echo "Installing boot blocks..."
${SUDO} /usr/mdec/installboot ${MOUNTPOINT}/boot /usr/mdec/biosboot ${DEVICE}

echo ""
echo "Copying files"
${SUDO} cp -R ${MOUNTPOINTCD}/* ${MOUNTPOINT}

echo ""
echo "Unmounting and cleaning up..."
${SUDO} umount $MOUNTPOINT
${SUDO} vnconfig -u $DEVICE
${SUDO} umount $MOUNTPOINTCD
${SUDO} vnconfig -u $DEVICECD
${SUDO} rm -r ${MOUNTPOINT}
${SUDO} rm -r ${MOUNTPOINTCD}

echo ""
echo "gzipping ${IMAGEFILE} to ${IMAGEFILE}.gz..."
gzip ${IMAGEFILE}

echo ""
echo "And we are done..."
echo "Use \"gunzip -c ${IMAGEFILE}.gz | dd of=/dev/sd0c\" on unix to write to flash"
echo "On Windows you can use http://m0n0.ch/wall/physdiskwrite.php"
echo "Both these utilities allow the gzipped image to be used directly."
Something went wrong with that request. Please try again.