#$Id$ #Copyright (c) 2009 Pierre Pronchery #variables #XXX insert i386-specific variables here (grub...) [ -z "$GENEXT2FS" ] && GENEXT2FS="genext2fs" #includes . "`dirname $0`/Apps/Devel/src/scripts/targets/Linux" #functions #private _image_image() { USAGE="Options for $IMAGE_TYPE on $TARGET:\n\ IMAGE_FILE Where to write the filesystem image\n\ IMAGE_KERNEL Path to the kernel\n\ IMAGE_SIZE Size of the filesystem image in kilobytes\n\ MKFS Command used to create the filesystem" #sanity check check "$USAGE" DD DESTDIR DEVZERO IMAGE_FILE IMAGE_KERNEL IMAGE_SIZE \ MKDIR MKFS MOUNT UMOUNT $MKDIR "$DESTDIR" || exit 2 $UMOUNT "$DESTDIR" $DD if="$DEVZERO" of="$IMAGE_FILE" count="$IMAGE_SIZE" && $MKFS "$IMAGE_FILE" || exit 2 $MOUNT "$IMAGE_FILE" "$DESTDIR" || exit 2 target "install" RET=$? $UMOUNT "$DESTDIR" exit $RET } _image_iso() { USAGE="Options for $IMAGE_TYPE on $TARGET:\n\ IMAGE_FILE Where to write the filesystem image\n\ IMAGE_KERNEL Path to the kernel\n\ IMAGE_MODULES Path to a tar.gz archive of kernel modules (optional)\n\ IMAGE_RAMDISK Path to the ramdisk (optional)\n\ KERNEL_ARGS Additional arguments to give to the kernel (optional)\n\ MKISOFS Command used to create the ISO image" #sanity check check "$USAGE" CAT DESTDIR KERNEL IMAGE_FILE IMAGE_KERNEL INSTALL \ MKDIR MKISOFS RAMDISK TAR #install kernel with ramdisk and modules $MKDIR "$DESTDIR/boot" || exit 2 $INSTALL -m 755 "$IMAGE_KERNEL" "$DESTDIR/$KERNEL" || exit 2 if [ ! -z "$IMAGE_RAMDISK" ]; then $INSTALL -m 644 "$IMAGE_RAMDISK" "$DESTDIR/$RAMDISK" GRUB_INITRD="initrd $RAMDISK" fi [ ! -z "$IMAGE_MODULES" ] && $CAT "$IMAGE_MODULES" | \ (cd "$DESTDIR" && $TAR -xzf -) #setup bootloader $MKDIR "$DESTDIR/boot/grub" || exit 2 $INSTALL -m 644 "/usr/lib/grub/i386-pc/stage2_eltorito" \ "$DESTDIR/boot/grub" || exit 2 $CAT > "$DESTDIR/boot/grub/menu.lst" << EOF default 0 timeout 10 title $VENDOR kernel $KERNEL $KERNEL_ARGS $GRUB_INITRD EOF $MKISOFS -J -r -b "boot/grub/stage2_eltorito" -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -o "$IMAGE_FILE" "$DESTDIR" } _image_ramdisk() { USAGE="Options for $IMAGE_TYPE on $TARGET:\n\ IMAGE_FILE Where to write the filesystem image\n\ IMAGE_MODULES Path to a tar.gz archive of kernel modules (optional)\n\ IMAGE_SIZE Size of the filesystem image in kilobytes\n\ GENEXT2FS Command used to generate the ramdisk image" #sanity check check "$USAGE" DD DESTDIR DEVZERO DU GENEXT2FS GZIP IMAGE_FILE \ IMAGE_SIZE INSTALL LN MKDIR MKFS MV $MKDIR "$DESTDIR" || exit 2 target "install" || exit 2 #install kernel modules [ ! -z "$IMAGE_MODULES" ] && $CAT "$IMAGE_MODULES" | \ (cd "$DESTDIR" && $TAR -xzf -) #compile and install linuxrc TOOLS="Apps/Unix/src/others/tools" SUBDIRS="$TOOLS" target linuxrc || exit 2 $INSTALL -m 755 "$TOOLS/linuxrc" "$DESTDIR/linuxrc" || exit 2 #setup init _create_directories "dev" "lib" "proc" "mnt/cdrom" "sbin" \ || exit 2 $LN -s "../mnt/cdrom/usr/bin/sh" "$DESTDIR/sbin/init" || exit 2 #install loader $INSTALL -m 755 "/lib/ld-linux.so.2" "$DESTDIR/lib" || exit 2 echo echo -n "Creating ramdisk:" $GENEXT2FS -r 0 -b "$IMAGE_SIZE" -d "$DESTDIR" "$IMAGE_FILE" echo $DU "$IMAGE_FILE" echo echo -n "Compressing ramdisk:" $GZIP "$IMAGE_FILE" || exit 2 $MV "$IMAGE_FILE.gz" "$IMAGE_FILE" || exit 2 echo $DU "$IMAGE_FILE" } #public target_image() { case "$IMAGE_TYPE" in "iso") _image_iso ;; "ramdisk") _image_ramdisk ;; *) _image_image ;; esac }