275 lines
8.5 KiB
Plaintext
275 lines
8.5 KiB
Plaintext
#$Id$
|
|
#Copyright (c) 2008-2016 Pierre Pronchery <khorben@defora.org>
|
|
|
|
|
|
|
|
#variables
|
|
[ -z "$BOOTOPTIONS" ] && BOOTOPTIONS="console=pc"
|
|
[ -z "$FDISK" ] && FDISK="fdisk"
|
|
[ -z "$GZIP" ] && GZIP="gzip"
|
|
[ -z "$IMAGE_BOOT" ] && IMAGE_BOOT="/usr/mdec/boot"
|
|
[ -z "$IMAGE_KERNEL" ] && IMAGE_KERNEL="/netbsd.gz"
|
|
[ -z "$IMAGE_SIZE" ] && IMAGE_SIZE="65536"
|
|
[ -z "$INSTALLBOOT" ] && INSTALLBOOT="installboot"
|
|
[ -z "$LDSO" ] && LDSO="/libexec/ld.elf_so"
|
|
[ -z "$LIBGCC" ] && LIBGCC=$(gcc -print-libgcc-file-name)
|
|
[ -z "$MBRLABEL" ] && MBRLABEL="mbrlabel"
|
|
[ -z "$MDSETIMAGE" ] && MDSETIMAGE="mdsetimage"
|
|
[ -z "$MKFS" ] && MKFS="newfs"
|
|
[ -z "$MKISOFS" ] && MKISOFS="makefs -t cd9660"
|
|
[ -z "$MOUNT" ] && MOUNT="mount"
|
|
[ -z "$UMOUNT" ] && UMOUNT="umount"
|
|
[ -z "$VNCONFIG" ] && VNCONFIG="vnconfig"
|
|
[ -z "$VND" ] && VND="vnd0"
|
|
|
|
|
|
#functions
|
|
#private
|
|
#image_image
|
|
_image_image_pre()
|
|
{
|
|
USAGE="Options for $IMAGE_TYPE on $TARGET:
|
|
IMAGE_BOOT Path to the bootloader
|
|
IMAGE_FILE Where to write the filesystem image
|
|
IMAGE_KERNEL Path to the kernel (optional)
|
|
IMAGE_SIZE Size of the filesystem image in kilobytes
|
|
IMAGE_TYPE The type of image to generate
|
|
LDSO Path to the dynamic loader (optional)
|
|
LIBGCC Path to libgcc (optional)
|
|
MKFS Command used to format the filesystem"
|
|
|
|
#sanity check
|
|
check "$USAGE" CHOWN DD DESTDIR DEVZERO FDISK IMAGE_BOOT IMAGE_FILE \
|
|
IMAGE_SIZE INSTALL INSTALLBOOT LN MBRLABEL MKDIR MKFS MKNOD \
|
|
MOUNT MV UMOUNT VNCONFIG VND
|
|
|
|
$MKDIR -- "$DESTDIR" || return 2
|
|
$DEBUG $SUDO $UMOUNT "$DESTDIR"
|
|
$DEBUG $SUDO $VNCONFIG -u "$VND"
|
|
$DEBUG $DD if="$DEVZERO" of="$IMAGE_FILE" count="$IMAGE_SIZE" &&
|
|
$DEBUG $FDISK -Ffi "$IMAGE_FILE" || return 2
|
|
SIZE=$((IMAGE_SIZE * 2 - 63))
|
|
$DEBUG $FDISK -Ffu0s "169/63/$SIZE" "$IMAGE_FILE" || return 2
|
|
$DEBUG $FDISK -Ffa0 "$IMAGE_FILE" || return 2
|
|
$DEBUG $SUDO $VNCONFIG -c "$VND" "$IMAGE_FILE" || return 2
|
|
$DEBUG $SUDO $MBRLABEL -frw "$VND" &&
|
|
$DEBUG $SUDO $MKFS "${VND}e" &&
|
|
$DEBUG $SUDO $MOUNT "/dev/${VND}e" "$DESTDIR" &&
|
|
$DEBUG $SUDO $CHOWN "$UID:$GID" "$DESTDIR" &&
|
|
$DEBUG $MKDIR -- "$DESTDIR$PREFIX"
|
|
[ $? -eq 0 ] || return 2
|
|
if [ -n "$LIBGCC" ]; then
|
|
$DEBUG $MKDIR -- "$DESTDIR/${LIBGCC%/*}" || return 2
|
|
$DEBUG $INSTALL -m 0644 "$LIBGCC" "$DESTDIR/$LIBGCC" \
|
|
|| return 2
|
|
fi
|
|
}
|
|
|
|
_image_image_boot()
|
|
{
|
|
ext=
|
|
resolution="800x600"
|
|
depth="16"
|
|
timeout="10"
|
|
bootxx="bootxx_ffsv1"
|
|
[ "${IMAGE_KERNEL%%.gz}" = "$IMAGE_KERNEL" ] || ext=".gz"
|
|
|
|
#/boot
|
|
$DEBUG $INSTALL -m 0444 "$IMAGE_BOOT" "$DESTDIR/boot" || return 2
|
|
#/boot.cfg
|
|
BOOT_SPLASH="vesa ${resolution}x$depth;boot /netbsd$ext"
|
|
if [ -n "$IMAGE_SPLASH" ]; then
|
|
filename="${IMAGE_SPLASH##*/}"
|
|
$DEBUG $INSTALL -m 0644 "$IMAGE_SPLASH" "$DESTDIR/$filename" \
|
|
|| return 2
|
|
BOOT_SPLASH="vesa ${resolution}x$depth;splash /$filename;boot /netbsd$ext -z"
|
|
fi
|
|
cat > "$DESTDIR/boot.cfg" << EOF
|
|
clear=1
|
|
banner=Welcome to DeforaOS
|
|
banner====================
|
|
banner=
|
|
banner=Please choose an option from the following menu:
|
|
menu=Boot DeforaOS:$BOOT_SPLASH
|
|
menu=Boot DeforaOS (text mode):boot /netbsd$ext
|
|
menu=Reboot:quit
|
|
menu=Drop to boot prompt:prompt
|
|
default=1
|
|
timeout=$timeout
|
|
EOF
|
|
[ $? -eq 0 ] || return 2
|
|
if [ -n "$IMAGE_KERNEL" ]; then
|
|
$DEBUG $INSTALL -m 0755 "$IMAGE_KERNEL" "$DESTDIR/netbsd$ext" \
|
|
|| return 2
|
|
$DEBUG $SUDO $INSTALLBOOT -m "$MACHINE" -o "timeout=10" \
|
|
"/dev/r${VND}e" "/usr/mdec/$bootxx" || return 2
|
|
fi
|
|
}
|
|
|
|
_image_image_configure()
|
|
{
|
|
#/bin/sh
|
|
$DEBUG $MKDIR -- "$DESTDIR/bin" || return 2
|
|
$DEBUG $MV "$DESTDIR$PREFIX/bin/sh" "$DESTDIR/bin/sh" || return 2
|
|
#create essential device nodes
|
|
$DEBUG $MKDIR -- "$DESTDIR/dev" || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/console" c 0 0|| return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0a" b 0 0 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0b" b 0 1 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0c" b 0 2 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0d" b 0 3 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0e" b 0 4 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0f" b 0 5 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0g" b 0 6 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/hd0h" b 0 7 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0a" c 3 0 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0b" c 3 1 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0c" c 3 2 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0d" c 3 3 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0e" c 3 4 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0f" c 3 5 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0g" c 3 6 || return 2
|
|
$DEBUG $SUDO $MKNOD -m 0600 "$DESTDIR/dev/rhd0h" c 3 7 || return 2
|
|
#/etc
|
|
$DEBUG $MKDIR -- "$DESTDIR/etc" || return 2
|
|
#/etc/fstab
|
|
cat > "$DESTDIR/etc/fstab" << EOF
|
|
/dev/hd0e / ffs rw 1 1
|
|
procfs /proc procfs rw
|
|
EOF
|
|
[ $? -eq 0 ] || return 2
|
|
$DEBUG $CHMOD -- "0644" "$DESTDIR/etc/fstab" || return 2
|
|
#/etc/group
|
|
cat > "$DESTDIR/etc/group" << EOF
|
|
wheel:*:0:root
|
|
EOF
|
|
[ $? -eq 0 ] || return 2
|
|
$DEBUG $CHMOD -- "0644" "$DESTDIR/etc/group" || return 2
|
|
#/etc/passwd
|
|
cat > "$DESTDIR/etc/passwd" << EOF
|
|
root::0:0:Superuser:/root:/bin/sh
|
|
EOF
|
|
[ $? -eq 0 ] || return 2
|
|
$DEBUG $CHMOD -- "0644" "$DESTDIR/etc/passwd" || return 2
|
|
#/etc/rc
|
|
cat > "$DESTDIR/etc/rc" << EOF
|
|
#!/bin/sh
|
|
|
|
echo "Welcome to DeforaOS!"
|
|
echo
|
|
while /usr/bin/true; do $PREFIX/bin/login; done
|
|
EOF
|
|
[ $? -eq 0 ] || return 2
|
|
$DEBUG $CHMOD -- "0755" "$DESTDIR/etc/rc" || return 2
|
|
if [ -n "$LDSO" ]; then
|
|
#/libexec/ld.elf_so
|
|
$DEBUG $MKDIR -- "$DESTDIR/libexec" || return 2
|
|
$DEBUG $INSTALL -m 0555 "$LDSO" "$DESTDIR/libexec/ld.elf_so" \
|
|
|| return 2
|
|
#/usr/libexec/ld.elf_so
|
|
$DEBUG $MKDIR -- "$DESTDIR$PREFIX/libexec" || return 2
|
|
$DEBUG $LN -s "/libexec/ld.elf_so" "$DESTDIR$PREFIX/libexec" \
|
|
|| return 2
|
|
fi
|
|
#/proc
|
|
$DEBUG $MKDIR -- "$DESTDIR/proc" || return 2
|
|
#/sbin/init
|
|
$DEBUG $MKDIR -- "$DESTDIR/sbin" || return 2
|
|
SUBDIRS="Apps/Unix/src/others/others-git/tools" _target \
|
|
oinit || return 2
|
|
$DEBUG $INSTALL -m 0755 \
|
|
"Apps/Unix/src/others/others-git/tools/oinit$EXEEXT" \
|
|
"$DESTDIR/sbin/init" || return 2
|
|
}
|
|
|
|
_image_image_permissions()
|
|
{
|
|
#fix the permissions
|
|
$DEBUG $SUDO $CHOWN -R "0:0" "$DESTDIR" || return 2
|
|
}
|
|
|
|
_image_image_post()
|
|
{
|
|
_image_image_configure
|
|
ret=$?
|
|
if [ $ret -eq 0 ]; then
|
|
_image_image_boot
|
|
ret=$?
|
|
fi
|
|
if [ $ret -eq 0 ]; then
|
|
_image_image_permissions
|
|
ret=$?
|
|
fi
|
|
$DEBUG $SUDO $UMOUNT "$DESTDIR"
|
|
$DEBUG $SUDO $VNCONFIG -u "$VND"
|
|
return $ret
|
|
}
|
|
|
|
|
|
#image_iso
|
|
_image_iso_pre()
|
|
{
|
|
USAGE="Options for $IMAGE_TYPE on $TARGET:
|
|
IMAGE_BOOT Path to the bootloader
|
|
IMAGE_FILE Where to write the filesystem image
|
|
IMAGE_KERNEL Path to the kernel
|
|
IMAGE_RAMDISK Path to a ramdisk image (optional)
|
|
IMAGE_TYPE The type of image to generate
|
|
LDSO Path to the dynamic loader (optional)
|
|
MKISOFS Command used to format the filesystem"
|
|
MKISOFS_ARGS="-o bootimage=i386;bootxx,no-emul-boot,rockridge"
|
|
|
|
#sanity check
|
|
check "$USAGE" IMAGE_BOOT IMAGE_FILE IMAGE_KERNEL MDSETIMAGE MKISOFS
|
|
}
|
|
|
|
_image_iso_post()
|
|
{
|
|
ext=
|
|
resolution="800x600"
|
|
depth="16"
|
|
timeout="10"
|
|
bootxx="bootxx_cd9660"
|
|
[ "${IMAGE_KERNEL%%.gz}" = "$IMAGE_KERNEL" ] || ext=".gz"
|
|
|
|
_image_image_configure || return 2
|
|
$DEBUG $INSTALL -m 0755 "$IMAGE_KERNEL" "$DESTDIR/netbsd$ext" \
|
|
|| return 2
|
|
if [ -n "$IMAGE_RAMDISK" ]; then
|
|
#uncompress the kernel if necessary
|
|
if [ -n "$ext" ]; then
|
|
$DEBUG $GZIP -u "$DESTDIR/netbsd$ext" || return 2
|
|
fi
|
|
$DEBUG $MDSETIMAGE "$DESTDIR/netbsd" "$IMAGE_RAMDISK" \
|
|
|| return 2
|
|
$DEBUG $GZIP -9 "$DESTDIR/netbsd" || return 2
|
|
ext=".gz"
|
|
fi
|
|
$DEBUG $INSTALL -m 0644 "$IMAGE_BOOT" "$DESTDIR/boot" || return 2
|
|
BOOT_SPLASH="vesa ${resolution}x$depth;boot /netbsd$ext"
|
|
if [ -n "$IMAGE_SPLASH" ]; then
|
|
filename="${IMAGE_SPLASH##*/}"
|
|
$DEBUG $INSTALL -m 0644 "$IMAGE_SPLASH" "$DESTDIR/$filename" \
|
|
|| return 2
|
|
BOOT_SPLASH="vesa ${resolution}x$depth;splash /$filename;boot /netbsd$ext -z"
|
|
fi
|
|
cat > "$DESTDIR/boot.cfg" << EOF
|
|
clear=1
|
|
banner=Welcome to DeforaOS
|
|
banner====================
|
|
banner=
|
|
banner=Please choose an option from the following menu:
|
|
menu=Boot DeforaOS:$BOOT_SPLASH
|
|
menu=Boot DeforaOS (text mode):boot /netbsd$ext
|
|
menu=Reboot:quit
|
|
menu=Drop to boot prompt:prompt
|
|
default=1
|
|
timeout=$timeout
|
|
EOF
|
|
$DEBUG $INSTALL -m 0644 "/usr/mdec/$bootxx" "bootxx" || return 2
|
|
$DEBUG $INSTALLBOOT -m "$MACHINE" -o "$BOOTOPTIONS" -e bootxx \
|
|
|| return 2
|
|
_image_image_permissions || return 2
|
|
$DEBUG $MKISOFS $MKISOFS_ARGS "$IMAGE_FILE" "$DESTDIR" || return 2
|
|
}
|