#$Id$ #Copyright (c) 2008-2014 Pierre Pronchery #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 "$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 MKFS Command used to format the filesystem" #sanity check check "$USAGE" CHOWN DD DESTDIR DEVZERO FDISK IMAGE_BOOT IMAGE_FILE \ IMAGE_SIZE INSTALL INSTALLBOOT LDSO 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" } _image_image_boot() { #/boot $DEBUG $SUDO $INSTALL -m 0444 "$IMAGE_BOOT" "$DESTDIR/boot" \ || return 2 #/boot.cfg BOOT_SPLASH="vesa 640x480x8;boot netbsd" if [ -n "$IMAGE_SPLASH" ]; then $DEBUG $SUDO $INSTALL -m 0644 "$IMAGE_SPLASH" \ "$DESTDIR/netbsd.jpeg" || return 2 BOOT_SPLASH="vesa 640x480x8;splash /netbsd.jpeg;boot netbsd -z" fi $SUDO sh -c "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 menu=Reboot:quit menu=Drop to boot prompt:prompt default=1 timeout=10 EOF [ $? -eq 0 ] || return 2 if [ -n "$IMAGE_KERNEL" ]; then #/netbsd $DEBUG $SUDO $INSTALL -m 0755 "$IMAGE_KERNEL" \ "$DESTDIR/netbsd" || return 2 $DEBUG $SUDO $INSTALLBOOT -m "$MACHINE" -o "timeout=10" \ "/dev/r${VND}e" "/usr/mdec/bootxx_ffsv1"|| return 2 fi } _image_image_configure() { #fix the permissions $DEBUG $SUDO $CHOWN -R "0:0" "$DESTDIR" || return 2 #/bin/sh $DEBUG $SUDO $MKDIR -- "$DESTDIR/bin" || return 2 $DEBUG $SUDO $MV "$DESTDIR$PREFIX/bin/sh" "$DESTDIR/bin/sh" \ || return 2 #create essential device nodes $DEBUG $SUDO $MKDIR -- "$DESTDIR/dev" $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 $SUDO $MKDIR -- "$DESTDIR/etc" || return 2 #/etc/fstab $SUDO sh -c "cat > $DESTDIR/etc/fstab" << EOF /dev/hd0e / ffs rw 1 1 procfs /proc procfs rw EOF [ $? -eq 0 ] || return 2 $DEBUG $SUDO $CHMOD -- "0644" "$DESTDIR/etc/fstab" || return 2 #/etc/group $SUDO sh -c "cat > $DESTDIR/etc/group" << EOF wheel:*:0:root EOF [ $? -eq 0 ] || return 2 $DEBUG $SUDO $CHMOD -- "0644" "$DESTDIR/etc/group" || return 2 #/etc/passwd $SUDO sh -c "cat > $DESTDIR/etc/passwd" << EOF root::0:0:Superuser:/root:/bin/sh EOF [ $? -eq 0 ] || return 2 $DEBUG $SUDO $CHMOD -- "0644" "$DESTDIR/etc/passwd" || return 2 #/etc/rc $SUDO sh -c "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 $SUDO $CHMOD -- "0755" "$DESTDIR/etc/rc" || return 2 #/libexec/ld.elf_so $DEBUG $SUDO $MKDIR -- "$DESTDIR/libexec" || return 2 $DEBUG $SUDO $INSTALL -m 0555 "$LDSO" "$DESTDIR/libexec/ld.elf_so" \ || return 2 #/usr/libexec/ld.elf_so $DEBUG $SUDO $MKDIR -- "$DESTDIR$PREFIX/libexec" || return 2 $DEBUG $SUDO $LN -s "/libexec/ld.elf_so" \ "$DESTDIR$PREFIX/libexec" || return 2 #/proc $DEBUG $SUDO $MKDIR -- "$DESTDIR/proc" || return 2 #/sbin/init $DEBUG $SUDO $MKDIR -- "$DESTDIR/sbin" || return 2 SUBDIRS="Apps/Unix/src/others/others-git/tools" _target \ oinit || return 2 $DEBUG $SUDO $INSTALL -m 0755 \ "Apps/Unix/src/others/others-git/tools/oinit" \ "$DESTDIR/sbin/init" || return 2 } _image_image_post() { _image_image_configure ret=$? if [ $ret -eq 0 ]; then _image_image_boot 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 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 LDSO MDSETIMAGE \ MKISOFS } _image_iso_post() { _image_image_configure || return 2 #FIXME assumes the kernel is uncompressed $DEBUG $SUDO $INSTALL -m 0755 "$IMAGE_KERNEL" "$DESTDIR/netbsd" \ || return 2 if [ -n "$IMAGE_RAMDISK" ]; then $DEBUG $SUDO $MDSETIMAGE "$DESTDIR/netbsd" "$IMAGE_RAMDISK" \ || return 2 fi $DEBUG $SUDO $GZIP -9 "$DESTDIR/netbsd" || return 2 $DEBUG $SUDO $INSTALL -m 0644 "$IMAGE_BOOT" "$DESTDIR/boot" \ || return 2 BOOT_SPLASH="vesa 640x480x8;boot netbsd.gz" if [ -n "$IMAGE_SPLASH" ]; then $DEBUG $SUDO $INSTALL -m 0644 "$IMAGE_SPLASH" \ "$DESTDIR/netbsd.jpeg" || return 2 BOOT_SPLASH="vesa 640x480x8;splash /netbsd.jpeg;boot netbsd.gz -z" fi $SUDO sh -c "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.gz menu=Reboot:quit menu=Drop to boot prompt:prompt default=1 timeout=10 EOF $DEBUG $INSTALL -m 0644 "/usr/mdec/bootxx_cd9660" "bootxx" \ || return 2 $DEBUG $INSTALLBOOT -m "$MACHINE" -o "$BOOTOPTIONS" -e bootxx \ || return 2 $DEBUG $MKISOFS $MKISOFS_ARGS "$IMAGE_FILE" "$DESTDIR" || return 2 }