
The new MIB service implements the sysctl(2) system call which, as we adopt more NetBSD code, is an increasingly important part of the operating system API. The system call is implemented in the new service rather than as part of an existing service, because it will eventually call into many other services in order to gather data, similar to ProcFS. Since the sysctl(2) functionality is used even by init(8), the MIB service is added to the boot image. MIB stands for Management Information Base, and the MIB service should be seen as a knowledge base of management information. The MIB service implementation of the sysctl(2) interface is fairly complete; it incorporates support for both static and dynamic nodes and imitates many NetBSD-specific quirks expected by userland. The patch also adds trace(1) support for the new system call, and adds a new test, test87, which tests the fundamental operation of the MIB service rather thoroughly. Change-Id: I4766b410b25e94e9cd4affb72244112c2910ff67
200 lines
5.6 KiB
Plaintext
200 lines
5.6 KiB
Plaintext
|
|
make_hdimage()
|
|
{
|
|
dd if=$TMPDISKUSR of=usrimage bs=$BS count=$USRBLOCKS
|
|
|
|
rootsize=`stat -f %z rootimage`
|
|
usrsize=`stat -f %z usrimage`
|
|
|
|
rootsects=`expr $rootsize / 512`
|
|
usrsects=`expr $usrsize / 512`
|
|
|
|
# installboot -m needs at least 1KB
|
|
dd < /dev/zero >tmpimage count=2
|
|
partition -fm tmpimage 2 81:$rootsects* 0:0 81:$usrsects
|
|
installboot_nbsd -m tmpimage /usr/mdec/mbr
|
|
dd < tmpimage > subpart count=1
|
|
|
|
primsects=`expr 1 + $rootsects + $usrsects`
|
|
cyl=`expr '(' $primsects ')' / $secs + 1`
|
|
padsects=`expr $cyl \* $secs - 1 - $primsects`
|
|
|
|
{ dd < /dev/zero count=1
|
|
cat subpart
|
|
cat rootimage
|
|
cat usrimage
|
|
dd < /dev/zero count=$padsects
|
|
} > hdimage
|
|
partition -m hdimage 81:`expr $primsects + $padsects`*
|
|
installboot_nbsd -m hdimage /usr/mdec/mbr
|
|
}
|
|
|
|
retrieve()
|
|
{
|
|
dir=$1
|
|
list=`pwd`/$2
|
|
URLS=""
|
|
echo "Retrieving packages form $PACKAGEURL"
|
|
(
|
|
cd $dir || exit 1
|
|
SUMMARY=pkg_summary
|
|
rm -f pkg_summary* || true
|
|
fetch $PACKAGEURL/$SUMMARY.bz2
|
|
bzip2 -d $SUMMARY.bz2
|
|
cat $list | while read name
|
|
do pkgname="`fgrep PKGNAME=${name} $SUMMARY | sed 's/PKGNAME=//g'`"
|
|
if [ `echo $pkgname | wc -w` -ne 1 ]
|
|
then echo " *** Could not resolve $name (not found or too many matches: $pkgname) ***"
|
|
echo Matches:
|
|
echo $pkgname
|
|
exit 1
|
|
else echo Getting $pkgname
|
|
fetch -r ${PACKAGEURL}/${pkgname}.tgz
|
|
fi
|
|
echo -n "."
|
|
done
|
|
)
|
|
echo done
|
|
}
|
|
|
|
cd_root_changes()
|
|
{
|
|
cat >$CDFILES/boot.cfg <<END_BOOT_CFG
|
|
banner=Welcome to the MINIX 3 installation CD
|
|
banner================================================================================
|
|
banner=
|
|
menu=Regular MINIX 3:multiboot /kernel bootcd=1 cdproberoot=1 rootdevname=ram disable=inet
|
|
menu=Regular MINIX 3 (with AHCI):multiboot /kernel bootcd=1 cdproberoot=1 rootdevname=ram disable=inet ahci=yes
|
|
menu=Edit menu option:edit
|
|
menu=Drop to boot prompt:prompt
|
|
clear=1
|
|
timeout=10
|
|
default=1
|
|
load=/mod01_ds
|
|
load=/mod02_rs
|
|
load=/mod03_pm
|
|
load=/mod04_sched
|
|
load=/mod05_vfs
|
|
load=/mod06_memory
|
|
load=/mod07_tty
|
|
load=/mod08_mib
|
|
load=/mod09_vm
|
|
load=/mod10_pfs
|
|
load=/mod11_mfs
|
|
load=/mod12_init
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
# This space intentionally left blank - leave to appease bootloader!
|
|
END_BOOT_CFG
|
|
}
|
|
|
|
copy_local_packages()
|
|
{
|
|
if [ -d $PACKAGEDIR -a -f $PACKAGELIST -a $PACKAGES -ne 0 ]
|
|
then
|
|
index=pkg_summary
|
|
indexpath=$PACKAGEDIR/.index
|
|
|
|
if [ ! -d $indexpath ]
|
|
then mkdir $indexpath
|
|
fi
|
|
if [ ! -d $indexpath ]
|
|
then echo "Couldn't create $indexpath."
|
|
exit 1
|
|
fi
|
|
|
|
echo "" >$PACKAGEDIR/All/$index
|
|
|
|
echo " * Transfering $PACKAGEDIR to $RELEASEPACKAGE"
|
|
for pkgprefix in `cat $PACKAGELIST`
|
|
do realfn="`echo $PACKAGEDIR/All/${pkgprefix}*.tgz`"
|
|
if [ -f "$realfn" ]
|
|
then
|
|
# Copy package and create package's index
|
|
(
|
|
p="`basename $realfn`"
|
|
cd $PACKAGEDIR/All
|
|
cp $p $RELEASEPACKAGE/
|
|
|
|
indexname=$indexpath/$p.$index
|
|
pkg_info -X $p >$indexname
|
|
|
|
if [ ! -f $indexname ]
|
|
then echo Missing $indexname.
|
|
exit 1
|
|
fi
|
|
|
|
if [ "`wc -l <$indexname`" -lt 3 ]
|
|
then $indexname is too short.
|
|
rm $indexname
|
|
exit 1
|
|
fi
|
|
|
|
cat $indexname >>$PACKAGEDIR/All/$index
|
|
)
|
|
else
|
|
echo "Can't find $pkgprefix Missing."
|
|
fi
|
|
done
|
|
|
|
bzip2 -f $PACKAGEDIR/All/$index
|
|
cp $PACKAGEDIR/All/$index.bz2 $RELEASEPACKAGE/
|
|
fi
|
|
}
|
|
|
|
fitfs()
|
|
{
|
|
path="$1"
|
|
ramdisk="$2"
|
|
extra_inodes="$3"
|
|
extra_zones="$4"
|
|
mbsdefault="$5"
|
|
|
|
# Determine number of inodes
|
|
inodes=`find $path | egrep -v ^$path/usr | wc -l`
|
|
inodes="`expr $inodes + $extra_inodes`"
|
|
|
|
# Determine number of data zones
|
|
zonekbs=`du -ks $path | cut -d' ' -f1`
|
|
zonekbsignore=0
|
|
[ ! -d $path/usr ] || zonekbsignore=`du -ks $path/usr | cut -d" " -f1`
|
|
zones="`expr \( $zonekbs - $zonekbsignore \) / \( $BS / 1024 \) + $extra_zones`"
|
|
|
|
# Determine file system size
|
|
BSBITS="`expr $BS \* 8`"
|
|
imap_blocks="`expr \( $inodes + $BSBITS - 1 \) / $BSBITS`"
|
|
inode_blocks="`expr \( $inodes \* 64 + $BS - 1 \) / $BS`"
|
|
zmap_blocks="`expr \( $zones + $BSBITS - 1 \) / $BSBITS`"
|
|
blocks="`expr 1 + 1 + $imap_blocks + $zmap_blocks + $inode_blocks + $zones`"
|
|
kbs="`expr $blocks \* \( $BS / 1024 \)`"
|
|
|
|
# Apply default if higher
|
|
if [ -n "$mbsdefault" ]
|
|
then
|
|
kbsdefault="`expr $mbsdefault \* 1024`"
|
|
if [ "$kbs" -lt "$kbsdefault" ]
|
|
then kbs=$kbsdefault
|
|
else echo "warning: ${mbsdefault}mb is too small, using ${kbs}kb"
|
|
fi
|
|
fi
|
|
|
|
# Create a filesystem on the target ramdisk
|
|
ramdisk $kbs $ramdisk
|
|
mkfs.mfs -B $BS -i $inodes $ramdisk
|
|
}
|