summaryrefslogtreecommitdiffstats
path: root/release
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>2001-01-29 22:47:46 +0000
committerluigi <luigi@FreeBSD.org>2001-01-29 22:47:46 +0000
commit35aa9c12fd78c8f229020ed46bdac09cd2d8972c (patch)
tree11ea84fa24155d5b67ffc829d86fa9a2d3c61007 /release
parente70d2f3aa935a938ff262ba081796ab8d17cac5e (diff)
downloadFreeBSD-src-35aa9c12fd78c8f229020ed46bdac09cd2d8972c.zip
FreeBSD-src-35aa9c12fd78c8f229020ed46bdac09cd2d8972c.tar.gz
Put picobsd build scripts in sync with the ones in -STABLE.
With these scripts i was able to build a _working_ image of a bridge-like floppy image with a reasonable set of utilities in it, despite the code size increase we have in 5.0 The scripts are slightly different from the previous ones especially on the place where the kernel and binaries are built. Hopefully this will not cause too much trouble to people (is there any???) using the old scripts.
Diffstat (limited to 'release')
-rw-r--r--release/picobsd/build/Makefile.conf8
-rwxr-xr-xrelease/picobsd/build/build8
-rwxr-xr-xrelease/picobsd/build/stage1139
3 files changed, 80 insertions, 75 deletions
diff --git a/release/picobsd/build/Makefile.conf b/release/picobsd/build/Makefile.conf
index ac5915b..92bf2ec 100644
--- a/release/picobsd/build/Makefile.conf
+++ b/release/picobsd/build/Makefile.conf
@@ -6,7 +6,7 @@ SRC?=/usr/src
CONF?=$(SRC)/sys/i386/conf
CONFFILE=PICOBSD${suffix}
-COMPILE=$(OBJ)/usr/src/sys/$(CONFFILE)
+COMPILE=$(SRC)/sys/compile/$(CONFFILE)
KERNFILE=$(COMPILE)/kernel
all: $(KERNFILE)
@@ -17,8 +17,10 @@ ${CONF}/${CONFFILE}: PICOBSD
cp PICOBSD.hints ${CONF}/${CONFFILE}.hints
${COMPILE}: ${CONF}/${CONFFILE}
+ (cd ${CONF}; config ${CONFFILE}; cd ${COMPILE}; \
+ make KERNEL=kernel -DNO_MODULES depend )
$(KERNFILE): ${COMPILE}
- (cd ${SRC}; \
- make buildkernel KERNEL=${CONFFILE} -DNO_MODULES)
+ (cd ${COMPILE}; \
+ make KERNEL=kernel -DNO_MODULES)
diff --git a/release/picobsd/build/build b/release/picobsd/build/build
index 5dbc335..1e8a6a5 100755
--- a/release/picobsd/build/build
+++ b/release/picobsd/build/build
@@ -6,7 +6,7 @@
# You can set the SRC variable which points to your source tree. It's
# /usr/src by default (most people shouldn't change it).
SRC=/usr/src
-OBJ=/usr/obj
+OBJ=/usr/obj-pico
# --------- YOU SHOULD NOT NEED TO CHANGE ANYTHING BELOW -----------
# The "build" script will ask you for parameters. Just run it... :-)
@@ -20,7 +20,7 @@ LANGUAGE=en
SITE=
# FLOPPY_SIZE floppy size in KB (default to 1440)
-FLOPPY_SIZE=1440
+FLOPPY_SIZE=1440 # 1440 1480 1720 (the latter will not boot!)
# DEVFS is currently broken. Always set this.
#
@@ -338,7 +338,7 @@ this as small as possible. " 10 70 2> ${RISU} || rm ${RISU}
do_install() {
dialog --title "Build ${TYPE} completed" --inputbox \
"\nThe build process was completed successfuly.\n\
-`cat .build.reply` \
+`cat .build.reply` \n\n\
Now we are going to install the image on the floppy.\n\
Please insert a blank floppy in /dev/fd0.\\n
WARNING: the contents of the floppy will be permanently erased!\n\
@@ -354,7 +354,7 @@ Your options:\n\
FILENAME=picobsd.bin
fi
echo "Writing ${FILENAME}..."
- dd if=${FILENAME} of=/dev/rfd0
+ dd if=${FILENAME} of=/dev/rfd0.${FLOPPY_SIZE}
else
echo "Ok, the image is in picobsd.bin"
fi
diff --git a/release/picobsd/build/stage1 b/release/picobsd/build/stage1
index 2ddca9f..4840417 100755
--- a/release/picobsd/build/stage1
+++ b/release/picobsd/build/stage1
@@ -2,7 +2,7 @@
# $FreeBSD$
#
-# stage1 -- this script fills the mfs for the picobsd kernel
+# stage1 -- this script prepares the actual picobsd image
. ../Version
@@ -17,6 +17,26 @@ export MFS_MOUNTPOINT
PICO_OBJ=${OBJ}/picobsd/${TYPE}
export PICO_OBJ
+# Location of the boot blocks (in case you want them custom-built)
+boot1=/boot/boot1
+boot2=/boot/boot2
+
+rm -f kernel.gz ${MFS_NAME} # cleanup...
+
+# find a suitable vnode
+VNUM=`mount | awk "/vn/ { num++ } END { printf \"%d\", num }"`
+export VNUM
+echo "-> Using vn${VNUM}..."
+
+trap fail 2 # catch user interrupt
+
+# free as much as possible from the vnode
+free_vnode() {
+ umount ${MFS_MOUNTPOINT} 2> /dev/null || true
+ umount /dev/vn${VNUM} 2> /dev/null || true
+ vnconfig -u /dev/rvn${VNUM} 2> /dev/null || true
+}
+
# fail errno errcode
# This function is used to trap errors and print msgs
#
@@ -59,30 +79,25 @@ fail() {
missing_kernel)
echo "-> ERROR: you must build PICOBSD${suffix} kernel first"
;;
+ *)
+ echo "unknown error, maybe user break: $errno $errcode"
+ ;;
esac
echo "-> Aborting $0"
- umount ${MFS_MOUNTPOINT} 2> /dev/null || true
+ # try to cleanup the vnode.
+ free_vnode
rm -rf ${MFS_MOUNTPOINT} 2> /dev/null || true
exit 10
}
-rm -f kernel.gz ${MFS_NAME} # cleanup...
-
create_mfs() {
echo "-> Preparing MFS filesystem..."
- VNUM=`mount | awk "/vn/ { num++ } END { printf \"%d\", num }"`
- export VNUM
- echo "-> Using vn${VNUM}..."
- umount /dev/vn${VNUM} 2> /dev/null || true
- umount ${MFS_MOUNTPOINT} 2> /dev/null || true
- vnconfig -u /dev/rvn${VNUM} 2> /dev/null || true
+ free_vnode
+ # zero-fill the MFS image
dd of=${MFS_NAME} if=/dev/zero count=${MFS_SIZE} bs=1k 2> /dev/null
- awk 'BEGIN {printf "%c%c", 85, 170}' | \
- dd of=${MFS_NAME} obs=1 seek=510 conv=notrunc 2> /dev/null
-
vnconfig -s labels -c /dev/rvn${VNUM} ${MFS_NAME} 2>/dev/null || \
fail $? no_vnconfig
@@ -112,7 +127,7 @@ populate_mfs() {
> /dev/null || fail $? makedevs
fi
- MFS_RC=floppy.tree/etc/mfs.rc
+ MFS_RC=mfs_tree/etc/rc
if [ ! -f ${MFS_RC} ] ; then # no private version. use generic mfs.rc
MFS_RC=${BUILDDIR}/../${MFS_RC}
fi
@@ -120,12 +135,11 @@ populate_mfs() {
cat ${MFS_RC} | sed -e "s/@VER@/${VER}/g" > ${MFS_MOUNTPOINT}/etc/oinit.rc
else
cat ${MFS_RC} | sed -e "s/@VER@/${VER}/g" > ${MFS_MOUNTPOINT}/etc/rc
- if [ -f floppy.tree/etc/mfs.login.conf ] ; then
- cp floppy.tree/etc/mfs.login.conf ${MFS_MOUNTPOINT}/etc/login.conf
- else
- cp ${BUILDDIR}/../floppy.tree/etc/mfs.login.conf \
- ${MFS_MOUNTPOINT}/etc/login.conf
+ fname=mfs_tree/etc/login.conf
+ if [ ! -f ${fname} ] ; then
+ fname=${BUILDDIR}/../${fname}
fi
+ cp ${fname} ${MFS_MOUNTPOINT}/etc/login.conf
fi
if [ "${TYPE}" = "dial" ] ; then
@@ -153,8 +167,9 @@ populate_mfs() {
cd ${pwd}
if [ -f ${MFS_MOUNTPOINT}/stand/sshd ] ; then
echo "creating host key for sshd"
- ssh-keygen1 -f ${MFS_MOUNTPOINT}/etc/ssh_host_key -N "" -C "root@picobsd"
+ ssh-keygen -f ${MFS_MOUNTPOINT}/etc/ssh_host_key -N "" -C "root@picobsd"
fi
+ cp -Rp ../mfs_tree/stand/update ${MFS_MOUNTPOINT}/stand/update
(echo "-> Fixing permissions"; cd ${MFS_MOUNTPOINT}; chown -R root *)
df -ik ${MFS_MOUNTPOINT}
@@ -163,16 +178,13 @@ populate_mfs() {
vnconfig -u /dev/rvn${VNUM}
}
-# stage2
-
do_kernel() {
echo "-> Preparing kernel..."
(cd ../${TYPE}; make -v -f ${BUILDDIR}/Makefile.conf )
- cp -p ${OBJ}/${SRC}/sys/PICOBSD${suffix}/kernel kernel || \
+ cp -p ${SRC}/sys/compile/PICOBSD${suffix}/kernel kernel || \
fail $? missing_kernel
strip kernel
strip --remove-section=.note --remove-section=.comment kernel
- gzip -9 -v -n kernel
}
do_floppy() {
@@ -180,23 +192,37 @@ do_floppy() {
echo "==> Preparing ${FLOPPY_SIZE}kB floppy filesystem..."
- dd of=picobsd.bin if=/dev/zero count=${FLOPPY_SIZE} bs=1k
-
- awk 'BEGIN {printf "%c%c", 85, 170}' | \
- dd of=picobsd.bin obs=1 seek=510 conv=notrunc 2> /dev/null
-
+ # correct block and number of sectors according to size.
+ blocks=${FLOPPY_SIZE}
+ sectors=18
+ if [ "${blocks}" = "1720" ]; then
+ blocks=1722
+ sectors=21
+ elif [ "${blocks}" = "1480" ]; then
+ blocks=1476
+ fi
+ echo "${sectors} sectors per track"
+ # create image
+ dd of=picobsd.bin if=/dev/zero count=${blocks} bs=1k
+ # put in boot sector so vnconfig and disklabel will not complain
+ dd if=${boot1} of=picobsd.bin conv=notrunc 2> /dev/null
vnconfig -c /dev/rvn${VNUM} picobsd.bin || fail $? vnconfig2
- dd if=/boot/boot1 of=picobsd.bin conv=notrunc 2> /dev/null
-
- # XXX todo: use a type matching floppy size.
- disklabel -Brw -b /boot/boot1 -s /boot/boot2 /dev/vn${VNUM}c fd1440 || \
+ disklabel -Brw -b ${boot1} -s ${boot2} /dev/vn${VNUM}c \
+ fd${FLOPPY_SIZE} || \
fail $? disklabel
newfs -i ${FLOPPY_INODES} -m 0 -p 0 -o space /dev/rvn${VNUM}c
mount /dev/vn${VNUM}c ${MFS_MOUNTPOINT}
+ # preload kernel, compress with kgzip and copy to floppy image
+ cc -o ./wmk /usr/src/release/write_mfs_in_kernel.c
+ ./wmk kernel ${MFS_NAME}
+ rm wmk
+ kgzip -o kernel.gz kernel
+ cp -p kernel.gz ${MFS_MOUNTPOINT}/kernel
+
echo "==> Populating floppy filesystem..."
# Configuration files are first copied to a local tree, then
@@ -213,25 +239,27 @@ do_floppy() {
else
excl=""
fi
- (cd ${BUILDDIR}/../floppy.tree ; tar -cf - ${excl} . ) | \
+ (cd ${BUILDDIR}/../floppy.tree ; tar -cf - --exclude CVS ${excl} . ) | \
(cd floppy.tree ; tar xvf - )
- if [ -d ${BUILDDIR}/../${TYPE}/floppy.tree ] ; then
+ srcdir=${BUILDDIR}/../${TYPE}/floppy.tree
+ if [ -d ${srcdir} ] ; then
echo "-> update with private files:"
- (cd ${BUILDDIR}/../${TYPE}/floppy.tree ; tar cf - . ) | \
+ (cd ${srcdir} ; tar cf - --exclude CVS . ) | \
(cd floppy.tree ; tar xvf - )
fi
- if [ -d ${BUILDDIR}/../${TYPE}/floppy.tree.${SITE} ] ; then
+ if [ -d ${srcdir}.${SITE} ] ; then
echo "-> update with site-specific (${SITE}) files:"
- (cd ${BUILDDIR}/../${TYPE}/floppy.tree.${SITE} ; tar cf - . ) | \
+ (cd ${srcdir}.${SITE} ; tar cf - --exclude CVS . ) | \
(cd floppy.tree ; tar xvf - )
fi
- rm -f floppy.tree/etc/mfs\.* # mfs.rc, mfs.login.conf
files="motd"
echo "-> Copying language dependent files: ${files} -> ${MFS_MOUNTPOINT}/etc ..."
for i in ${files} ; do
- cat ${BUILDDIR}/../${TYPE}/lang/${i}.${LANGUAGE} | \
+ if [ -f ${BUILDDIR}/../${TYPE}/lang/${i}.${LANGUAGE} ] ; then
+ cat ${BUILDDIR}/../${TYPE}/lang/${i}.${LANGUAGE} | \
sed -e "s/@VER@/${VER}/g" > floppy.tree/etc/${i}
+ fi
done
# XXX check this! i am unsure how it is necessary.
@@ -244,41 +272,16 @@ do_floppy() {
# gzip returns an error if it fails to compress some file
gzip -9 floppy.tree/etc/* || true
- # Now, first copy large files, then small ones.
- cp -p kernel.gz ${MFS_MOUNTPOINT}/kernel.gz || fail $? kernel_compress
-
- gzip -9cv ${MFS_NAME} > ${MFS_MOUNTPOINT}/${MFS_NAME}.gz || \
- fail $? mfs_compress
-
- if [ ! -d ${MFS_MOUNTPOINT}/boot ] ; then
- mkdir -p ${MFS_MOUNTPOINT}/boot
- fi
- #
- # make small loader
- #(cd /usr/src/sys/boot/i386/loader ; make clean ;
- # cd /usr/src/sys/boot/i386 ; make -DNOFORTH )
- if [ -f /usr/src/sys/boot/i386/loader/loader ]; then
- theloader=/usr/src/sys/boot/i386/loader/loader
- else
- theloader=/boot/loader
- fi
- kgzip -o loader $theloader
- cp -p loader ${MFS_MOUNTPOINT}/boot/loader
-
- #
# now transfer the floppy tree
cp -Rp floppy.tree/* ${MFS_MOUNTPOINT}
- cat <<__EOF > ${MFS_MOUNTPOINT}/boot/loader.rc
-load /kernel
-load -t mfs_root /${MFS_NAME}
-__EOF
+ rm -rf floppy.tree || true # cleanup
(echo "-> Fixing permissions"; cd ${MFS_MOUNTPOINT} ; chown -R root *)
- df -ik ${MFS_MOUNTPOINT} > .build.reply
+ df -ik ${MFS_MOUNTPOINT} | colrm 70 > .build.reply
umount ${MFS_MOUNTPOINT}
rm -rf ${MFS_MOUNTPOINT}
vnconfig -u /dev/rvn${VNUM}
- # rm kernel.gz ${MFS_NAME}
+ rm kernel.gz ${MFS_NAME}
}
do_kernel
OpenPOWER on IntegriCloud