diff options
-rw-r--r-- | sysutils/mklivecd/DESCR | 2 | ||||
-rw-r--r-- | sysutils/mklivecd/Makefile | 12 | ||||
-rw-r--r-- | sysutils/mklivecd/files/mfs_rcd | 18 | ||||
-rw-r--r-- | sysutils/mklivecd/files/mklivecd.8 | 265 | ||||
-rwxr-xr-x | sysutils/mklivecd/files/mklivecd.sh | 1302 |
5 files changed, 939 insertions, 660 deletions
diff --git a/sysutils/mklivecd/DESCR b/sysutils/mklivecd/DESCR index 3d37ade7d7f..a3be5c73f10 100644 --- a/sysutils/mklivecd/DESCR +++ b/sysutils/mklivecd/DESCR @@ -1,2 +1,2 @@ mklivecd is a simple shell script that allows you to build a custom -NetBSD LiveCD on i386-based machines. +NetBSD/i386 Live CD-ROM/DVD-ROM with a command line interface. diff --git a/sysutils/mklivecd/Makefile b/sysutils/mklivecd/Makefile index fb55a102e6a..62805623493 100644 --- a/sysutils/mklivecd/Makefile +++ b/sysutils/mklivecd/Makefile @@ -1,15 +1,15 @@ -# $NetBSD: Makefile,v 1.19 2005/05/16 01:32:23 jlam Exp $ +# $NetBSD: Makefile,v 1.20 2005/07/29 12:13:01 xtraeme Exp $ -DISTNAME= mklivecd-0.11 +DISTNAME= mklivecd-0.12.0 CATEGORIES= sysutils MASTER_SITES= # empty DISTFILES= # empty MAINTAINER= xtraeme@NetBSD.org -COMMENT= Build a NetBSD i386 Live CD via command line +COMMENT= Make your own NetBSD/i386 Live CD-ROM/DVD-ROM DEPENDS+= {cdrecord,cdrtools-ossdvd}-[0-9]*:../../sysutils/cdrecord -DEPENDS+= grub>=0.96:../../sysutils/grub +#DEPENDS+= grub>=0.96:../../sysutils/grub PKG_INSTALLATION_TYPES= overwrite pkgviews @@ -27,7 +27,7 @@ INSTALLATION_DIRS= man/man8 sbin share/mklivecd FILES= KERN-LIVECD personal_config do-install: -.for f in mfs_rcd mklivecd.sh +.for f in mfs_rcd mklivecd.sh mklivecd.8 @${SED} -e "s,@PREFIX@,${PREFIX},g" \ -e "s,@LOCALBASE@,${LOCALBASE},g" \ -e "s,@TAR@,${TAR},g" \ @@ -36,7 +36,7 @@ do-install: .endfor ${INSTALL_DATA_DIR} ${PREFIX}/share/mklivecd ${INSTALL_SCRIPT} ${WRKDIR}/mklivecd.sh ${PREFIX}/sbin/mklivecd - ${INSTALL_MAN} ${FILESDIR}/mklivecd.8 ${PREFIX}/man/man8 + ${INSTALL_MAN} ${WRKDIR}/mklivecd.8 ${PREFIX}/man/man8 ${INSTALL_DATA} ${WRKDIR}/mfs_rcd ${PREFIX}/share/mklivecd .for F in ${FILES} ${INSTALL_DATA} ${FILESDIR}/${F} ${PREFIX}/share/mklivecd diff --git a/sysutils/mklivecd/files/mfs_rcd b/sysutils/mklivecd/files/mfs_rcd index 810d746e48a..a4e469168f6 100644 --- a/sysutils/mklivecd/files/mfs_rcd +++ b/sysutils/mklivecd/files/mfs_rcd @@ -1,6 +1,6 @@ -# $NetBSD: mfs_rcd,v 1.4 2004/10/29 17:47:30 xtraeme Exp $ +# $NetBSD: mfs_rcd,v 1.5 2005/07/29 12:13:01 xtraeme Exp $ # -# Mount mfs directories and unpack the required file +# Mount mfs directories and unpack the required files # before anything. # PROVIDE: LiveCD @@ -16,11 +16,15 @@ stop_cmd="mfsrc_stop" mfsrc_start() { - echo "=> Mounting Memory based filesystems..." + echo -n "=> Mounting Memory based filesystems: " mount_mfs @MNT_DEV_ARGS@ swap /dev + echo -n "/dev, " mount_mfs @MNT_ETC_ARGS@ swap /etc + echo -n "/etc, " mount_mfs @MNT_VAR_ARGS@ swap /var + echo -n "/root, " mount_mfs @MNT_ROOT_ARGS@ swap /root + echo "/tmp." mount_mfs @MNT_TMP_ARGS@ swap /tmp @HOME@ @HOMETAR@ @@ -29,9 +33,13 @@ mfsrc_start() for f in mfs_dev mfs_etc mfs_var mfs_root do - @TAR@ xfzp /stand/$f.tgz -C / + @TAR@ xfzp /stand/$f.tgz -C / > /dev/null 2>&1 + if [ "$?" -eq 0 ]; then + echo "=> $f unpacked successfully." + else + echo "=> $f not unpacked correctly!" + fi done - echo "=> Finished successfully." } mfsrc_stop() diff --git a/sysutils/mklivecd/files/mklivecd.8 b/sysutils/mklivecd/files/mklivecd.8 index b871d56663a..165ad7e0b1c 100644 --- a/sysutils/mklivecd/files/mklivecd.8 +++ b/sysutils/mklivecd/files/mklivecd.8 @@ -1,7 +1,8 @@ -.\" $NetBSD: mklivecd.8,v 1.10 2005/01/11 02:25:21 xtraeme Exp $ +.\" $NetBSD: mklivecd.8,v 1.11 2005/07/29 12:13:01 xtraeme Exp $ .\" -.\" mklivecd - Build a NetBSD Live CD for i386 machines -.\" Copyright (c) 2004 Juan RP <xtraeme@NetBSD.org> +.\" mklivecd - Make your own NetBSD/i386 Live CD-ROM/DVD-ROM +.\" +.\" Copyright (c) 2004, 2005 Juan Romero Pardines <xtraeme@NetBSD.org> .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions @@ -27,26 +28,42 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 11, 2005 +.Dd July 25, 2005 .Dt MKLIVECD 8 .Os .Sh NAME .Nm mklivecd -.Nd build a +.Nd Make your own .Nx -Live CD for i386 machines +/ i386 Live CD-ROM/DVD-ROM .Sh SYNOPSIS .Nm .Fl v .Fl c Ar conf_file +.Fl k Ar kernel .Ar target .Sh DESCRIPTION .Nm allows you to build your own .Nx -Live CD, so you don't need to install +Live CD/DVD, so you don't need to install +.Nx +to any disk, because it will run directly from the CD-ROM/DVD-ROM. +.Pp +To choose different kernels when booting from the CD-ROM/DVD-ROM, +two options for the bootloader are provided since version +.Pa 0.12.0 : +.Pa the GNU Grub bootloader +or the .Nx -to any disk, because it will run directly from the CD-ROM. +cdboot bootloader (since +.Nx +4.0). By default it will use the first option: +.Pa the GNU Grub bootloader . +You may want to change this by changing the option +.Pa USE_GNU_GRUB +to +.Sy no . .Pp The following options are recognized: .Bl -tag -width XcXconf_file @@ -57,6 +74,14 @@ as configuration file (full name expected). Example: .Fl c Ar foo.conf . .El +.Bl -tag -width XkXkernel +.It Fl k Ar kernel +Overrides the +.Ar BOOTKERN +value specified in the configuration file, +.Ar KERNEL_NAME +will be modified automatically too. +.El .Bl -tag -width XvX .It Fl v Show more useful messages. @@ -76,15 +101,32 @@ issuing the .Ar config target. .Bl -tag -width 15n -offset indent -.It SOURCEDIR -The -.Nx -source directory. +.It BASEDIR +Primary directory used to store the main directories and the final ISO image. Defaults to -.Pa /usr/src . +.Pa $HOME/livecd . +.It BASE_SETS_DIR +The base sets directory. +Defaults to +.Pa $HOME/release/binary/sets . +.It BASE_SETS +Base sets which will be unpacked into +.Pa $ISODIR . +Sets used by default are: +.Pa etc.tgz base.tgz comp.tgz text.tgz . +.It CHROOT_SHELL +Default shell to use with the chroot target. +Defaults to +.Sy /bin/ksh . +.It ISODIR +Directory used to store the main +.Nx +base distribution. +Defaults to +.Pa $BASEDIR/iso . .It PKGSRCDIR -The -.Nx +The +.Nx packages collection directory. When the .Ar chroot @@ -107,66 +149,50 @@ Defaults to The main directory used to store the Makefiles, kernel, example configuration files, etc. Defaults to -.Pa $PREFIX/share/mklivecd/ . -.It BASEDIR -Primary directory used to store the main directories and the final ISO image. +.Pa @PREFIX@/share/mklivecd/ . +.It SOURCEDIR +The +.Nx +source directory. Defaults to -.Pa $HOME/livecd . +.Pa /usr/src . .It WORKDIR Directory used to store the object files and kernel built by the target .Ql kernel . Defaults to .Pa $BASEDIR/work . -.It ISODIR -Directory used to store the main -.Nx -base distribution. -Defaults to -.Pa $BASEDIR/iso . -.It BASE_SETS_DIR -The base sets directory. -Defaults to -.Pa $HOME/release/binary/sets . -.It X11_SETS_DIR -The X11 sets directory. -Defaults to -.Pa $BASE_SETS_DIR . -.It BASE_SETS -Base sets which will be unpacked into -.Pa $ISODIR . -Sets used by default are: -.Pa etc.tgz base.tgz comp.tgz text.tgz . .It X11_SETS X11 sets which will be unpacked into .Pa $ISODIR . Sets used by default are: .Pa xbase.tgz xcomp.tgz xfont.tgz xserver.tgz . -.It CHROOT_SHELL -Default shell to use with the chroot target. -Defaults to -.Sy /bin/ksh -.It ENABLE_X11 -If set to -.Sy yes -then X11 sets and configuration files will be unpacked automatically. +.It X11_SETS_DIR +The X11 sets directory. Defaults to -.Sy no . -.It MKISOFS_ARGS -Arguments passed to -.Xr mkisofs 1 -when creating the +.Pa $BASE_SETS_DIR . +.It BOOTKERN +Name of the .Nx -ISO image. +kernel used for the boot image. Defaults to -.Sy -nobak -J -R -v . -.It CDRECORD_ARGS -Arguments passed to -.Xr cdrecord 1 -when burning the +.Sy KERN-LIVECD . +.It KERNEL_NAME +Name of the built .Nx -Live CD ISO image. +kernel. +Useful if you want to change the default behaviour of the build process. Defaults to -.Sy -v . +.Sy MKLIVECD . +.It MULTIPLE_KERNELS +If set to +.Sy other thing than ``no'' , +it will compile and install the kernels specified into +.Pa $ISODIR/boot/grub , +and it will update automatically the +.Pa menu.lst +file for +.Pa the GNU Grub bootloader . +See below for details. .It BLANK_BEFORE_BURN Used in the .Ar burn @@ -176,39 +202,57 @@ Live CD ISO image. Useful if you use CD-RW. Defaults to .Sy no . +.It CDRECORD_ARGS +Arguments passed to +.Xr cdrecord 1 +when burning the +.Nx +Live CD ISO image. +Defaults to +.Sy -v . .It CDROM_DEVICE Used in the target .Ar burn to specify the CD-ROM device. Defaults to .Sy 15,1,0 . -.It PERSONAL_CONFIG +.It ENABLE_X11 If set to -.Sy yes , -then -.Pa personal_config -file will be used. -See below for details. +.Sy yes +then X11 sets and configuration files will be unpacked automatically. Defaults to .Sy no . -.It BOOTKERN -Name of the -.Nx -kernel used for the boot image. -Defaults to -.Sy KERN-LIVECD . -.It KERNEL_NAME -Name of the built -.Nx -kernel. -Useful if you want to change the default behaviour of the build process. +.It GRUB_FILES_DIR +Directory where the grub files are stored. Defaults to -.Sy MKLIVECD . +.Sy @LOCALBASE@/lib/grub/@MACHINE_ARCH@-/ . +.It HOSTNAME +Hostname of the live CD-ROM/DVD-ROM, it's assigned when running the +.Sy base +target. Defaults to +.Sy MKLIVECD_0x00 . .It IMAGE_NAME Name of the final ISO image, e.g.: .Pa My_NetBSD_Live_CD_ISO_Image.iso . Defaults to .Sy NetBSD-LiveCD . +.It MKISOFS_ARGS +Arguments passed to +.Xr mkisofs 1 +when creating the +.Nx +ISO image. +Defaults to +.Sy -nobak -J -R -v . +.It PERSONAL_CONFIG +If set to +.Sy yes , +then +.Pa personal_config +file will be used. +See below for details. +Defaults to +.Sy no . .It PKG_SYSCONFDIR Directory where the pkgsrc settings are stored, by default .Nm @@ -223,6 +267,13 @@ It could be useful if you don't want to include some directories on the CD, or your free space is small. Defaults to .Pa altroot rescue usr/share/info . +.It USE_GNU_GRUB +Used to select the bootloader for the Live CD. +When it's disabled the +.Nx +CDBootloader will be used. +Defaults to +.Sy yes . .It MNT_{MOUNT_POINT}_ARGS This specifies the arguments passed to the .Xr mount 8 @@ -293,12 +344,11 @@ directory and the base .Nx tree in .Pa $ISODIR , -except the CD-ROM boot image -.Pa /stand/cdlive-boot.fs +except the mfs directories located in +.Pa /stand and the .Nx -kernel -.Pa /netbsd . +kernels. .El .Ss What should I do in the chroot jail? While working in the chroot environment, you can @@ -323,7 +373,37 @@ to the .Ar $ISODIR/$HOME directory. Please take a look at the example file located in -.Ar ${PREFIX}/share/mklivecd . +.Ar @PREFIX@/share/mklivecd . +.Ss How to use the MULTIPLE_KERNELS option? +An example is provided below, we have two kernels: +.Ar ACPIKERN +and +.Ar APMKERN , +both are kernel configuration files, you'll need +to define the variables named +.Ar BOOTKERN_${foo} +and +.Ar KERNEL_NAME_${foo} +for every kernel specified on the +.Pa MULTIPLE_KERNELS +option. The following example shows that: +.Bd -literal -offset indent +MULTIPLE_KERNELS="ACPIKERN APMKERN" +BOOTKERN_ACPIKERN="LIVECD_ACPI" +BOOTKERN_APMKERN="LIVECD_APM" +KERNEL_NAME_ACPIKERN="KERN_ACPI_LIVECD" +KERNEL_NAME_APMKERN="KERN_APM_LIVECD" +.Ed +.Pp +Note that when using this option, the +.Pa BOOTKERN +and +.Pa KERNEL_NAME +variables, will don't have any effect. After building the specified +kernels, it will update the +.Pa menu.lst +file automatically for the +.Ar GNU Grub bootloader . .Sh NOTES .Pa PKG_SYSCONFDIR defaults to @@ -338,15 +418,25 @@ directory will be copied instead of the one located in An example kernel config file, .Pa KERN-LIVECD , has been installed into -.Ar ${PREFIX}/share/mklivecd , +.Ar @PREFIX@/share/mklivecd , based on the 2.0 branch. You should copy your own kernel config file into .Ar $HOME/.mklivecd . The .Sy BOOTKERN -variable should point at it. +variable should point at it, if you're not using +.Sy MULTIPLE_KERNELS . +The important thing about the kernel is the line: +.Bd -literal -offset indent +config netbsd root on cd0a type cd9660 dumps on none +.Ed +.Pp +This line is required in the kernel config file for +the Live CD-ROM/DVD-ROM to boot correctly and without +human interactivity, otherwise you'll have to enter +the parameters manually when booting. .Sh EXAMPLES -Below are the minimal steps to create your own Live CD: +Below are the minimal steps to create your own Live CD-ROM/DVD-ROM: .Bd -literal -offset indent $ mklivecd config [edit the config file] @@ -357,11 +447,14 @@ $ mklivecd chroot $ mklivecd iso $ mklivecd burn .Ed +.Sh BUGS +It is not perfect but at least it does its task correctly. .Sh SEE ALSO .Xr packages 7 , +.Xr mount_mfs 8 , .Xr mount_null 8 .Sh AUTHORS The .Nm utility was written by -.An Juan RP Aq xtraeme@NetBSD.org . +.An Juan Romero Pardines Aq xtraeme@NetBSD.org . diff --git a/sysutils/mklivecd/files/mklivecd.sh b/sysutils/mklivecd/files/mklivecd.sh index 7c87a27d877..3bc311180e7 100755 --- a/sysutils/mklivecd/files/mklivecd.sh +++ b/sysutils/mklivecd/files/mklivecd.sh @@ -1,12 +1,12 @@ #!/bin/sh # -# $NetBSD: mklivecd.sh,v 1.20 2005/03/30 14:23:04 xtraeme Exp $ +# $NetBSD: mklivecd.sh,v 1.21 2005/07/29 12:13:01 xtraeme Exp $ # # Copyright (c) 2004, 2005 The NetBSD Foundation, Inc. # All rights reserved. # # This code is derived from software contributed to The NetBSD Foundation -# by Juan RP. +# by Juan Romero Pardines. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -36,9 +36,9 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# ====================================================================== # -# mklivecd - Build a NetBSD LiveCD! for i386 machines. # -# ====================================================================== # +# ======================================================================== # +# mklivecd - Make your own NetBSD/i386 Live CD-ROM/DVD-ROM # +# ======================================================================== # : ${progname:=$(basename $0)} : ${config_dir:=$HOME/.mklivecd} @@ -49,14 +49,25 @@ : ${MKISOFS:=@LOCALBASE@/bin/mkisofs} : ${CDRECORD:=@LOCALBASE@/bin/cdrecord} # +# NetBSD >= 4.0 has cdboot, no need to use grub here. +# +: ${CDBOOT_IMG:=cdboot} +: ${BOOT_IMG:=boot} +: ${CDBOOT_DIR:=/usr/mdec} +# # Don't modify the next ones! they are needed for booting grub. # -: ${MKISOFS_FIXED_ARGS:=-no-emul-boot -boot-load-size 30 -boot-info-table} -: ${BOOTDIR:=boot/grub} -: ${BOOTIMAGE:=stage2_eltorito} -: ${GRUB_FILES:=stage1 stage2 stage2_eltorito iso9660_stage1_5 xfs_stage1_5 ufs2_stage1_5 reiserfs_stage1_5 jfs_stage1_5 ffs_stage1_5 fat_stage1_5 e2fs_stage1_5} +: ${GRUB_BOOTDIR:=boot/grub} +: ${GRUB_BOOTIMAGE:=stage2_eltorito} +: ${GRUB_FILES:=stage1 stage2 stage2_eltorito iso9660_stage1_5 \ + xfs_stage1_5 ufs2_stage1_5 reiserfs_stage1_5 \ + jfs_stage1_5 ffs_stage1_5 fat_stage1_5 e2fs_stage1_5} +# +# Common vars for cdboot/grub. +# +: ${MKISOFS_FIXED_ARGS:=-no-emul-boot} -trap "echo; showmsg \"Process cancelled!\"; bye 127" INT QUIT +trap "echo; showmsg \"PROCESS CANCELLED!\"; bye 127" INT QUIT # ====================================================================== # # My functions :-) # @@ -64,96 +75,118 @@ trap "echo; showmsg \"Process cancelled!\"; bye 127" INT QUIT usage() { - cat <<_usage_ + cat <<_usage_ - ${progname}: [-v] [-c config_file] [target] + ${progname}: [-v] [-c config_file] [-k kernel] [target] Target operations: - kernel Build and install the Boot kernel image - iso Build the ISO 9660 image - burn Burn the ISO image via cdrecord - base Install the base/x11 sets into ISODIR - chroot chroot into the livecd - clean Clean the work directory - config Create the default configuration file + base Install the base/x11 sets into ISODIR + burn Burn the ISO9660 image with cdrecord(1) + chroot Chroot into the livecd + clean Clean the WORKDIR and ISODIR directories + config Create default configuration file + iso Build the ISO9660 image with mkisofs(1) + kernel Build and install the kernel(s) and boot files _usage_ - exit 1 + exit 1 } showmsg() { - echo "===> $@" + echo "===> $@" } -bye() +showmsg_n() { - _exitarg="$1" - rm -f $tmp_file; exit $_exitarg + echo -n "===> $@" } -do_conf() +showmsgstring() { - BASE_VARS="SOURCEDIR PKGSRCDIR PKGSRCDISTDIR SHAREDIR BASEDIR WORKDIR \ - ISODIR BASE_SETS_DIR X11_SETS_DIR BASE_SETS X11_SETS \ - CHROOT_SHELL" - - MISC_VARS="ENABLE_X11 MKISOFS_ARGS CDRECORD_ARGS BLANK_BEFORE_BURN \ - CDROM_DEVICE PERSONAL_CONFIG BOOTKERN KERNEL_NAME \ - IMAGE_NAME PKG_SYSCONFDIR REMOVE_DIRS" - - MNT_VARS="MNT_DEV_ARGS MNT_ETC_ARGS MNT_VAR_ARGS \ - MNT_ROOT_ARGS MNT_TMP_ARGS MNT_HOME_ARGS \ - MNT_PKG_SYSCONFDIR_ARGS" - - # Base directories/sets - : ${SOURCEDIR:=/usr/src} - : ${PKGSRCDIR:=/usr/pkgsrc} - : ${PKGSRCDISTDIR:=/usr/pkgsrc/distfiles} - : ${SHAREDIR:=@PREFIX@/share/mklivecd} - : ${BASEDIR:=$HOME/livecd} - : ${WORKDIR:=${BASEDIR}/work} - : ${ISODIR:=${BASEDIR}/iso} - : ${BASE_SETS_DIR:=$HOME/release/binary/sets} - : ${X11_SETS_DIR:=${BASE_SETS_DIR}} - : ${BASE_SETS:=etc.tgz base.tgz comp.tgz text.tgz} - : ${X11_SETS:=xbase.tgz xcomp.tgz xfont.tgz xserver.tgz} - : ${CHROOT_SHELL:=/bin/ksh} - - # Miscellaneous options - : ${ENABLE_X11:=no} - : ${MKISOFS_ARGS:=-J -R -nobak -v} - : ${CDRECORD_ARGS:=-v} - : ${BLANK_BEFORE_BURN:=no} - : ${CDROM_DEVICE:=15,1,0} - : ${PERSONAL_CONFIG:=no} - : ${BOOTKERN:=KERN-LIVECD} - : ${KERNEL_NAME:=MKLIVECD} - : ${IMAGE_NAME:=NetBSD-LiveCD} - : ${PKG_SYSCONFDIR:=usr/pkg/etc} - : ${REMOVE_DIRS:=altroot usr/share/info} - - # Mount arguments - : ${MNT_DEV_ARGS:=-o noatime -s 5m} - : ${MNT_ETC_ARGS:=-o noatime -s 2m} - : ${MNT_VAR_ARGS:=-o noatime -s 10m} - : ${MNT_ROOT_ARGS:=-o noatime -s 5m} - : ${MNT_TMP_ARGS:=-o noatime -s 10m} - : ${MNT_HOME_ARGS:=-o noatime -s 50m} - : ${MNT_PKG_SYSCONFDIR_ARGS:=-o noatime -s 1m} - - if [ ! -d $config_dir ]; then - mkdir $config_dir - fi + if [ "$?" -eq 0 ]; then + echo " done." + else + echo " failed." + fi +} - if [ ! -f $config_dir/$pers_conffile ]; then - cp $SHAREDIR/$pers_conffile $config_dir - fi +bye() +{ + _exitarg="$1" + rm -f $tmp_file; exit $_exitarg +} - if [ ! -f $config_file ]; then - cat >> $config_file <<EOF +do_conf() +{ + BASE_VARS="SOURCEDIR PKGSRCDIR PKGSRCDISTDIR SHAREDIR BASEDIR WORKDIR \ + ISODIR BASE_SETS_DIR X11_SETS_DIR BASE_SETS X11_SETS \ + CHROOT_SHELL" + + KERNEL_VARS="MULTIPLE_KERNELS BOOTKERN KERNEL_NAME" + + MISC_VARS="ENABLE_X11 MKISOFS_ARGS CDRECORD_ARGS BLANK_BEFORE_BURN \ + CDROM_DEVICE PERSONAL_CONFIG IMAGE_NAME PKG_SYSCONFDIR\ + REMOVE_DIRS USE_GNU_GRUB GRUB_FILES_DIR HOSTNAME" + + MNT_VARS="MNT_ETC_ARGS MNT_VAR_ARGS MNT_ROOT_ARGS \ + MNT_TMP_ARGS MNT_HOME_ARGS MNT_PKG_SYSCONFDIR_ARGS \ + MNT_DEV_ARGS" + + # Base directories/sets + : ${SOURCEDIR:=/usr/src} + : ${PKGSRCDIR:=/usr/pkgsrc} + : ${PKGSRCDISTDIR:=/usr/pkgsrc/distfiles} + : ${SHAREDIR:=@PREFIX@/share/mklivecd} + : ${BASEDIR:=$HOME/livecd} + : ${WORKDIR:=${BASEDIR}/work} + : ${ISODIR:=${BASEDIR}/iso} + : ${BASE_SETS_DIR:=$HOME/release/binary/sets} + : ${X11_SETS_DIR:=${BASE_SETS_DIR}} + : ${BASE_SETS:=etc.tgz base.tgz comp.tgz text.tgz} + : ${X11_SETS:=xbase.tgz xcomp.tgz xfont.tgz xserver.tgz} + : ${CHROOT_SHELL:=/bin/ksh} + : ${HOSTNAME:=MKLIVECD_0x00} + + # kernel options + : ${MULTIPLE_KERNELS:=no} + : ${BOOTKERN:=KERN-LIVECD} + : ${KERNEL_NAME:=MKLIVECD} + + # Miscellaneous options + : ${ENABLE_X11:=no} + : ${MKISOFS_ARGS:=-J -R -nobak -v} + : ${CDRECORD_ARGS:=-v} + : ${BLANK_BEFORE_BURN:=no} + : ${CDROM_DEVICE:=15,1,0} + : ${PERSONAL_CONFIG:=no} + : ${IMAGE_NAME:=NetBSD-LiveCD} + : ${PKG_SYSCONFDIR:=usr/pkg/etc} + : ${REMOVE_DIRS:=altroot usr/share/info} + : ${USE_GNU_GRUB:=yes} + : ${GRUB_FILES_DIR:=@LOCALBASE@/lib/grub/@MACHINE_ARCH@-} + # + # Mount arguments + # + # Best value for /dev, there are >512 inodes free and some Kbytes free too. + # I don't recommend changing this! + : ${MNT_DEV_ARGS:=-o noatime -s 512k -i 64} + : ${MNT_ETC_ARGS:=-o noatime -s 2m} + : ${MNT_VAR_ARGS:=-o noatime -s 10m} + : ${MNT_ROOT_ARGS:=-o noatime -s 5m} + : ${MNT_TMP_ARGS:=-o noatime -s 10m} + : ${MNT_HOME_ARGS:=-o noatime -s 50m} + : ${MNT_PKG_SYSCONFDIR_ARGS:=-o noatime -s 1m} + + [ ! -d $config_dir ] && mkdir $config_dir + + [ ! -f $config_dir/$pers_conffile ] && \ + cp $SHAREDIR/$pers_conffile $config_dir + + if [ ! -f $config_file ]; then + cat >> $config_file <<EOF # --*-sh-*-- # # mklivecd - configuration file @@ -162,81 +195,228 @@ do_conf() # Generated automatically on $(date). EOF - echo "# Base directories/options" >> $config_file - for var in $(echo $BASE_VARS | tr ' ' '\n') - do - eval val=\""\$$var"\" - echo "$var=\"$val\"" >> $config_file - done - echo >> $config_file - - echo "# Miscellaneous options" >> $config_file - for var in $(echo $MISC_VARS | tr ' ' '\n') - do - eval val=\""\$$var"\" - echo "$var=\"$val\"" >> $config_file - done - echo >> $config_file + echo "# Base directories/options" >> $config_file + for var in $(echo $BASE_VARS | tr ' ' '\n' | sort -u) + do + eval val=\""\$$var"\" + echo "$var=\"$val\"" >> $config_file + done + echo >> $config_file - echo "# Mount arguments" >> $config_file - for var in $(echo $MNT_VARS | tr ' ' '\n') - do - eval val=\""\$$var"\" - echo "$var=\"$val\"" >> $config_file - done - echo >> $config_file + echo "# kernel options" >> $config_file + for var in $(echo $KERNEL_VARS | tr ' ' '\n' | sort -u) + do + eval val=\""\$$var"\" + echo "$var=\"$val\"" >> $config_file + done + echo >> $config_file + ( \ + echo "# MULTIPLE_KERNELS example:"; \ + echo "#"; \ + echo "# MULTIPLE_KERNELS=\"ACPI APM\""; \ + echo "# BOOTKERN_ACPI=\"KERN_ACPI\""; \ + echo "# KERNEL_NAME_ACPI=\"LIVECD_ACPI\""; \ + echo "# BOOTKERN_APM=\"KERN_APM\""; \ + echo "# KERNEL_NAME_APM=\"LIVECD_APM\""; \ + ) >> $config_file + echo >> $config_file + + echo "# Miscellaneous options" >> $config_file + for var in $(echo $MISC_VARS | tr ' ' '\n' | sort -u) + do + eval val=\""\$$var"\" + echo "$var=\"$val\"" >> $config_file + done + echo >> $config_file - echo "=> Configuration file created, now please edit it." - echo "=> Path: $config_file" - elif [ -f $config_file -a $target != "config" ]; then - if [ "$verbose_mode" = "on" ]; then - showmsg "Using $config_file" - fi - else - showmsg "$config_file already exists!" - bye 1 - fi + echo "# Mount arguments" >> $config_file + for var in $(echo $MNT_VARS | tr ' ' '\n' | sort -u) + do + eval val=\""\$$var"\" + echo "$var=\"$val\"" >> $config_file + done + echo >> $config_file + + echo "=> Configuration file created, now please edit it." + echo "=> Path: $config_file" + elif [ -f $config_file -a $target != "config" ]; then + [ -n "$verbose_mode" ] && showmsg "Using $config_file" + else + showmsg "$config_file already exists!" + bye 1 + fi } do_conf_reset() { - for F in ${BASE_VARS} ${MISC_VARS} ${MNT_VARS} - do - eval $F=\"\" - done + for F in ${BASE_VARS} ${MISC_VARS} ${MNT_VARS} + do + eval $F=\"\" + done } -do_cdlive() +copy_bootfiles() { - . $config_file + if [ "$USE_GNU_GRUB" = "yes" ]; then + # GNU Grub selected. + [ ! -d $ISODIR/$GRUB_BOOTDIR ] && mkdir -p $ISODIR/$GRUB_BOOTDIR + for f in $GRUB_FILES + do + if [ ! -f $ISODIR/$GRUB_BOOTDIR/$f ]; then + if [ -f $GRUB_FILES_DIR/$f ]; then + cp $GRUB_FILES_DIR/$f $ISODIR/$GRUB_BOOTDIR + [ -n "$verbose_mode" ] && \ + showmsg "Copying $f into $ISODIR/$GRUB_BOOTDIR" + else + echo "=> File $f not found!" + fi + else + echo "=> Not copying $f, already exists." + fi + done + else + # We are using cdboot. + if [ -f ${CDBOOT_DIR}/${CDBOOT_IMG} ]; then + cp -f ${CDBOOT_DIR}/${CDBOOT_IMG} $ISODIR + else + echo "=> Missing cdboot... exiting." + bye 1 + fi + + if [ -f ${CDBOOT_DIR}/${BOOT_IMG} ]; then + cp -f ${CDBOOT_DIR}/${BOOT_IMG} $ISODIR + else + echo "=> Missing boot... exiting." + fi + fi +} - vars="$BASEDIR $ISODIR $WORKDIR" +do_menu_lst() +{ + [ -n "$verbose_mode" ] && \ + showmsg_n "Creating $ISODIR/$GRUB_BOOTDIR/menu.lst..." + if [ ! -f $ISODIR/$GRUB_BOOTDIR/menu.lst ]; then + cat > $ISODIR/$GRUB_BOOTDIR/menu.lst << _EOF_ +# Default GRUB menu file created by ${progname}. +# Date: $(date). - for value in $vars - do - if [ ! -d $value ]; then - mkdir -p $value - fi - done +default 0 +timeout 10 - case "$1" in - kernel) - if [ ! -d $SOURCEDIR/sys ]; then - showmsg "Can't find NetBSD sources, exiting!" - bye 1 +title NetBSD/$KERNEL_NAME kernel +kernel --type=netbsd /$GRUB_BOOTDIR/$BOOTKERN.gz + +_EOF_ + showmsgstring + fi +} + +do_build_kernels() +{ + . $config_file + + for K in ${MULTIPLE_KERNELS} + do + eval bootkern=\$BOOTKERN_${K} + eval kernname=\$KERNEL_NAME_${K} + + cd $WORKDIR + showmsg "Building kernel: $bootkern.." + + [ -s $config_dir/$bootkern ] && \ + cp $config_dir/$bootkern $WORKDIR + + if [ ! -d $WORKDIR/$kernname ]; then + mkdir $WORKDIR/$kernname + fi + + if [ ! -d $WORKDIR/$kernname -a ! -f $bootkern ]; then + showmsg "Missing files... exiting." + bye 1 + fi + + config -s $SOURCEDIR/sys -b $WORKDIR/$kernname $bootkern + cd $kernname + make depend + make COPTS="-Os" # Don't use additional flags + if [ "$?" -eq 0 ]; then + if [ "$USE_GNU_GRUB" = "yes" ]; then + cp $WORKDIR/$kernname/netbsd $ISODIR/$GRUB_BOOTDIR/$bootkern + else + # We are using cdboot. + cp $WORKDIR/$kernname/netbsd $ISODIR/$bootkern + fi + [ -n "$verbose_mode" ] && \ + showmsg_n "Compressing kernel $bootkern..." + if [ "$USE_GNU_GRUB" = "yes" ]; then + gzip $ISODIR/$GRUB_BOOTDIR/$bootkern + showmsgstring + if [ -f $ISODIR/$GRUB_BOOTDIR/menu.lst ]; then + showmsg_n "Updating menu.lst..." + ( \ + echo "title NetBSD/$kernname kernel"; \ + echo "kernel --type=netbsd /$GRUB_BOOTDIR/$bootkern.gz"; \ + echo; \ + ) >> $ISODIR/$GRUB_BOOTDIR/menu.lst + else + showmsg_n "Creating grub menu.lst..." + cat >> $ISODIR/$GRUB_BOOTDIR/menu.lst << _EOF_ +# Default GRUB menu file created by ${progname}. +# Date: $(date). + +default 0 +timeout 10 + +title NetBSD/$kernname kernel +kernel --type=netbsd /$GRUB_BOOTDIR/$bootkern.gz + +_EOF_ fi + showmsgstring + else + gzip $ISODIR/$bootkern + showmsgstring + fi + else + echo "=> kernel compilation failed! ($kernname)" + bye 1 + fi + done +} - showmsg "Building boot image on $(date)" - echo - showmsg "Using the following values:" - showmsg " SHAREDIR=$SHAREDIR" - showmsg " WORKDIR=$WORKDIR" - showmsg " ISODIR=$ISODIR" - showmsg " BASEDIR=$BASEDIR" +do_cdlive() +{ + . $config_file + + vars="$BASEDIR $ISODIR $WORKDIR" + + for value in $vars + do + [ ! -d $value ] && mkdir -p $value + done + + case "$1" in + kernel) + if [ ! -d $SOURCEDIR/sys ]; then + echo "=> CANNOT FIND NETBSD SOURCES, EXITING!" + bye 1 + fi + + # if -k was specified, override values on config file. + if [ -n "$K_ARG_SET" ]; then + BOOTKERN=$kernel_arg + KERNEL_NAME=MKLIVECD_$kernel_arg + fi + + if [ "$MULTIPLE_KERNELS" = "no" ]; then + showmsg "Building kernel on $(date):" + if [ -n "$verbose_mode" ]; then + echo showmsg "Using kernel: $BOOTKERN" showmsg "Kernel name: $KERNEL_NAME" - echo sleep 2 + fi + echo # if there's a kernel in ~/.mklivecd, use it, otherwise # use the default one located in SHAREDIR. if [ -s $config_dir/$BOOTKERN ]; then @@ -246,135 +426,132 @@ do_cdlive() fi cd $WORKDIR - [ ! -d $WORKDIR/$KERNEL_NAME ] && mkdir $WORKDIR/$KERNEL_NAME - config -s $SOURCEDIR/sys -b $WORKDIR/$KERNEL_NAME \ - $BOOTKERN + [ ! -d $WORKDIR/$KERNEL_NAME ] && \ + mkdir $WORKDIR/$KERNEL_NAME + config -s $SOURCEDIR/sys -b $WORKDIR/$KERNEL_NAME \ + $BOOTKERN cd $KERNEL_NAME make depend - make COPTS="-Os" # Don't use additional flags - if [ $? -eq 0 ]; then - [ ! -d $ISODIR/$BOOTDIR ] && mkdir -p $ISODIR/$BOOTDIR - for f in $GRUB_FILES - do - if [ ! -f $ISODIR/$BOOTDIR/$f ]; then - cp @PREFIX@/lib/grub/@MACHINE_ARCH@-/$f \ - $ISODIR/$BOOTDIR - [ "$verbose_mode" = "on" ] && \ - showmsg "Copying $f into $ISODIR/$BOOTDIR." - else - showmsg "Not copying $f, already exists." - fi - done - cp $WORKDIR/$KERNEL_NAME/netbsd $ISODIR/$BOOTDIR/$BOOTKERN - [ "$verbose_mode" = "on" ] && \ - showmsg "Compressing kernel $BOOTKERN..." - - gzip $ISODIR/$BOOTDIR/$BOOTKERN - - [ "$verbose_mode" = "on" ] && \ - showmsg "Creating $ISODIR/$BOOTDIR/menu.lst..." - - if [ ! -f $ISODIR/$BOOTDIR/menu.lst ]; then - cat > $ISODIR/$BOOTDIR/menu.lst << _EOF_ -# Default GRUB menu file created by ${progname}. -# Date: $(date). - -default 0 -timeout 10 - -title NetBSD/$BOOTKERN kernel -kernel --type=netbsd /$BOOTDIR/$BOOTKERN.gz - -_EOF_ - fi - - if [ $? -eq 0 ]; then - showmsg "Boot/kernel files installed!" - showmsg "Next step: ${progname} base" - make clean >/dev/null 2>&1 - rm -rf $KERNEL_NAME + make COPTS="-Os" # Don't use additional flags + if [ "$?" -eq 0 ]; then + copy_bootfiles + showmsg_n "Compressing kernel $BOOTKERN..." + if [ "$USE_GNU_GRUB" = "yes" ]; then + cp $WORKDIR/$KERNEL_NAME/netbsd \ + $ISODIR/$GRUB_BOOTDIR/$BOOTKERN + gzip -9 $ISODIR/$GRUB_BOOTDIR/$BOOTKERN + showmsgstring + else + if [ -f $ISODIR/netbsd ]; then + # + # ISO9660 specifies that ISO Level 1 cannot handle + # filenames with > 8 characters... actually the + # cd9660.c standalone file-system for the bootloader + # does not support ISO Level 2/3. + # + # Note too that '-' is not an allowed character, so + # is better to use a dot '.' . + # + # I'll change this when cd9660.c is fixed. + # + cp $WORKDIR/$KERNEL_NAME/netbsd \ + $ISODIR/k.$BOOTKERN + gzip -9 $ISODIR/k.$BOOTKERN + mv $ISODIR/k.$BOOTKERN.gz \ + $ISODIR/k.$BOOTKERN + else + cp $WORKDIR/$KERNEL_NAME/netbsd $ISODIR + gzip -9 $ISODIR/netbsd + mv $ISODIR/netbsd.gz $ISODIR/netbsd + fi + showmsgstring + fi + if [ "$?" -eq 0 ]; then + [ "$USE_GNU_GRUB" = "yes" ] && do_menu_lst + [ -n "$verbose_mode" ] && \ + echo "=> NEXT STEP: ${progname} base" else - showmsg "Couldn't install the kernel." + echo "=> COULDN'T INSTALL THE KERNEL(S)" fi else echo - showmsg "kernel build failed." - showmsg "Boot/kernel files were not installed!" + showmsg "Target kernel failed." + bye 1 fi + else + copy_bootfiles + do_build_kernels + fi ;; - base) - for F in ${BASE_SETS} - do - if [ ! -f $BASE_SETS_DIR/$F ]; then - showmsg "Target base failed!" - showmsg "Can't find $F, exiting." - bye 1 - fi - done + base) + for F in ${BASE_SETS} + do + if [ ! -f $BASE_SETS_DIR/$F ]; then + showmsg "Cannot find $F, exiting." + bye 1 + fi + done - showmsg "Installing base sets" - for S in ${BASE_SETS} + showmsg "Installing base sets:" + for S in ${BASE_SETS} + do + if [ -f $BASE_SETS_DIR/$S ]; then + echo -n "=> Unpacking $S..." + @TAR@ xfzp $BASE_SETS_DIR/$S -C $ISODIR + showmsgstring + fi + done + + if [ "${ENABLE_X11}" = "yes" ]; then + for FX in ${X11_SETS} + do + if [ ! -f $X11_SETS_DIR/$FX ]; then + showmsg "Can't find $FX, disabling X11." + DISABLE_X11=yes + break + fi + done + if [ "$DISABLE_X11" = "" ]; then + showmsg "Installing X11 sets:" + for X in ${X11_SETS} do - if [ -f $BASE_SETS_DIR/$S ]; then - if [ "$verbose_mode" = "on" ]; then - echo "=> Unpacking $S" - fi - @TAR@ xfzp $BASE_SETS_DIR/$S -C $ISODIR - fi + if [ -f $X11_SETS_DIR/$X ]; then + echo -n "=> Unpacking $X..." + @TAR@ xfzp $X11_SETS_DIR/$X -C $ISODIR + showmsgstring + fi done - - if [ "${ENABLE_X11}" = "yes" ]; then - for FX in ${X11_SETS} - do - if [ ! -f $X11_SETS_DIR/$FX ]; then - showmsg "Can't find $FX, disabling X11." - DISABLE_X11=yes - break - fi - done - - if [ "$DISABLE_X11" = "" ]; then - showmsg "Installing X11 sets" - for X in ${X11_SETS} - do - if [ -f $X11_SETS_DIR/$X ]; then - if [ "$verbose_mode" = "on" ]; then - echo "=> Unpacking $X" - fi - @TAR@ xfzp $X11_SETS_DIR/$X -C $ISODIR - fi - done - fi - fi # ENABLE_X11 + fi + fi # ENABLE_X11 - cp $SHAREDIR/mfs_rcd $ISODIR/etc/rc.d - - # /etc/rc.conf - showmsg "Installing configuration files" - sed -e "s,rc_configured=NO,rc_configured=YES,g" \ - $ISODIR/etc/rc.conf > $ISODIR/etc/rc.conf.fixed - mv $ISODIR/etc/rc.conf.fixed $ISODIR/etc/rc.conf - touch $ISODIR/etc/fstab - - ( \ - echo "mfsrc=yes"; \ - echo "dhclient=yes dhclient_flags=-q"; \ - echo "wscons=yes"; \ - echo "hostname=$KERNEL_NAME"; \ - echo "nfs_client=yes"; \ - echo "inetd=no"; \ - echo "ntpdate=yes"; \ - echo "savecore=no"; \ - ) >> $ISODIR/etc/rc.conf - - # /etc/rc.d/root could umount the mfs directories, - # so it's best not to touch them. - - rm $ISODIR/etc/rc.d/root - cat > $ISODIR/etc/rc.d/root <<_EOF_ + cp $SHAREDIR/mfs_rcd $ISODIR/etc/rc.d + + # /etc/rc.conf + showmsg_n "Installing configuration files..." + sed -e "s,rc_configured=NO,rc_configured=YES,g" \ + $ISODIR/etc/rc.conf > $ISODIR/etc/rc.conf.fixed + mv $ISODIR/etc/rc.conf.fixed $ISODIR/etc/rc.conf + touch $ISODIR/etc/fstab + + ( \ + echo "mfsrc=yes"; \ + echo "dhclient=yes dhclient_flags=-q"; \ + echo "wscons=yes"; \ + echo "hostname=$HOSTNAME"; \ + echo "nfs_client=yes"; \ + echo "inetd=no"; \ + echo "ntpdate=yes"; \ + echo "savecore=no"; \ + ) >> $ISODIR/etc/rc.conf + + # /etc/rc.d/root could umount the mfs directories, + # so it's best not to touch them. + + rm $ISODIR/etc/rc.d/root + cat > $ISODIR/etc/rc.d/root <<_EOF_ #!/bin/sh # -# \$NetBSD: mklivecd.sh,v 1.20 2005/03/30 14:23:04 xtraeme Exp $ +# \$NetBSD: mklivecd.sh,v 1.21 2005/07/29 12:13:01 xtraeme Exp $ # # PROVIDE: root @@ -394,367 +571,368 @@ root_start() load_rc_config \$name run_rc_command "\$1" _EOF_ - # Make sure the devices are created before creating - # the .tgz files. - - showmsg "Creating devices" - cd $ISODIR/dev && ./MAKEDEV all - echo - showmsg "Target base successful" - if [ "$verbose_mode" = "on" ]; then - showmsg "Base system installed" - showmsg "Next step: ${progname} chroot" - fi - ;; - chroot) - if [ ! -f $ISODIR/etc/profile ]; then - ( \ - echo "export PS1=\"$KERNEL_NAME> \""; \ - echo "set -o emacs"; \ - ) > $ISODIR/etc/profile - else - if [ "$verbose_mode" = "on" ]; then - showmsg "Not overwriting /etc/profile." - fi - fi - - if [ ! -d $ISODIR/usr/pkgsrc/distfiles ]; then - mkdir -p $ISODIR/usr/pkgsrc/distfiles - fi - - if [ ! -f $ISODIR/usr/share/misc/termcap ]; then - cp /usr/share/misc/termcap* \ - $ISODIR/usr/share/misc - fi - - showmsg "Entering into the chroot!" + showmsgstring + # Make sure the devices are created before creating + # the .tgz files. + + showmsg_n "Creating devices..." + cd $ISODIR/dev && ./MAKEDEV all + showmsgstring + showmsg "Target base finished." + [ -n "$verbose_mode" ] && \ + echo "=> NEXT STEP: ${progname} chroot" + ;; + chroot) + if [ ! -f $ISODIR/etc/profile ]; then + ( \ + echo "export PS1=\"$KERNEL_NAME> \""; \ + echo "set -o emacs"; \ + ) > $ISODIR/etc/profile + else + [ -n "$verbose_mode" ] && \ + showmsg "Not overwriting /etc/profile." + fi - if [ -d $PKGSRCDIR ]; then - if [ -f $pkgsrc_mntstat ]; then - count=$(cat $pkgsrc_mntstat) - count=$(($count + 1)) - echo $count > $pkgsrc_mntstat - showmsg "pkgsrc directory already mounted." - else - showmsg "pkgsrc directory ready." - echo "1" > $pkgsrc_mntstat - mount_null $PKGSRCDIR $ISODIR/usr/pkgsrc - fi - else - showmsg "Can't find $PKGSRCDIR, disabling it." - fi + [ ! -d $ISODIR/usr/pkgsrc/distfiles ] && \ + mkdir -p $ISODIR/usr/pkgsrc/distfiles + + [ ! -f $ISODIR/usr/share/misc/termcap ] && \ + cp /usr/share/misc/termcap* $ISODIR/usr/share/misc + + showmsg "Entering into the chroot!" + + if [ -d $PKGSRCDIR ]; then + if [ -f $pkgsrc_mntstat ]; then + count=$(cat $pkgsrc_mntstat) + count=$(($count + 1)) + echo $count > $pkgsrc_mntstat + echo "=> pkgsrc directory already mounted." + else + echo "=> pkgsrc directory ready." + echo "1" > $pkgsrc_mntstat + mount_null $PKGSRCDIR $ISODIR/usr/pkgsrc + fi + else + showmsg "==> CANNOT FIND $PKGSRCDIR" + fi - if [ -d $PKGSRCDISTDIR ]; then - if [ -f $pkgsrcdist_mntstat ]; then - count=$(cat $pkgsrcdist_mntstat) - count=$(($count +1)) - echo $count > $pkgsrcdist_mntstat - showmsg "distfiles directory already mounted." - else - showmsg "distfiles directory ready." - echo "1" > $pkgsrcdist_mntstat - mount_null $PKGSRCDISTDIR $ISODIR/usr/pkgsrc/distfiles - fi - else - showmsg "Can't find $PKGSRCDISTDIR, disabling it." - fi + if [ -d $PKGSRCDISTDIR ]; then + if [ -f $pkgsrcdist_mntstat ]; then + count=$(cat $pkgsrcdist_mntstat) + count=$(($count +1)) + echo $count > $pkgsrcdist_mntstat + echo "=> distfiles directory already mounted." + else + echo "=> distfiles directory ready." + echo "1" > $pkgsrcdist_mntstat + mount_null $PKGSRCDISTDIR $ISODIR/usr/pkgsrc/distfiles + fi + else + echo "==> CANNOT FIND $PKGSRCDISTDIR" + fi - echo - chroot $ISODIR $CHROOT_SHELL - echo + echo + chroot $ISODIR $CHROOT_SHELL + echo - if [ ! -d $ISODIR/root ]; then - showmsg "Target chroot failed!" - showmsg "Can't find root directory, exiting." - bye 1 - fi + if [ ! -d $ISODIR/root ]; then + showmsg "Cannot find root directory, exiting." + bye 1 + fi - cd $ISODIR - cp -f $SHAREDIR/mfs_rcd $ISODIR/etc/rc.d - - SUBST_H="mount_mfs $MNT_HOME_ARGS swap /home" - SUBST_HT="@TAR@ xfzp /stand/mfs_home.tgz -C /" - SUBST_S="mount_mfs $MNT_PKG_SYSCONFDIR_ARGS swap /$PKG_SYSCONFDIR" - SUBST_ST="@TAR@ xfzp /stand/mfs_pkg_sysconfdir.tgz -C /" - - sed -e "s,@MNT_DEV_ARGS@,$MNT_DEV_ARGS,g" \ - -e "s,@MNT_ETC_ARGS@,$MNT_ETC_ARGS,g" \ - -e "s,@MNT_VAR_ARGS@,$MNT_VAR_ARGS,g" \ - -e "s,@MNT_ROOT_ARGS@,$MNT_ROOT_ARGS,g" \ - -e "s,@MNT_TMP_ARGS@,$MNT_TMP_ARGS,g" \ - $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.in - mv $ISODIR/etc/rc.d/mfs_rcd.in $ISODIR/etc/rc.d/mfs_rcd + cd $ISODIR + cp -f $SHAREDIR/mfs_rcd $ISODIR/etc/rc.d + + SUBST_H="mount_mfs $MNT_HOME_ARGS swap /home" + SUBST_HT="@TAR@ xfzp /stand/mfs_home.tgz -C /" + SUBST_S="mount_mfs $MNT_PKG_SYSCONFDIR_ARGS swap /$PKG_SYSCONFDIR" + SUBST_ST="@TAR@ xfzp /stand/mfs_pkg_sysconfdir.tgz -C /" + + sed -e "s|@MNT_ETC_ARGS@|$MNT_ETC_ARGS|g" \ + -e "s|@MNT_DEV_ARGS@|$MNT_DEV_ARGS|g" \ + -e "s|@MNT_VAR_ARGS@|$MNT_VAR_ARGS|g" \ + -e "s|@MNT_ROOT_ARGS@|$MNT_ROOT_ARGS|g" \ + -e "s|@MNT_TMP_ARGS@|$MNT_TMP_ARGS|g" \ + $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.in + mv $ISODIR/etc/rc.d/mfs_rcd.in $ISODIR/etc/rc.d/mfs_rcd - for U in root var dev etc home - do - if [ -d $ISODIR/$U ]; then - @TAR@ cfzp $ISODIR/stand/mfs_$U.tgz $U >/dev/null 2>&1 - showmsg "Creating /stand/mfs_$U.tgz" - fi - done + for U in root var dev etc home + do + if [ -d $ISODIR/$U ]; then + showmsg_n "Creating /stand/mfs_$U.tgz..." + @TAR@ cfzp $ISODIR/stand/mfs_$U.tgz $U >/dev/null 2>&1 + showmsgstring + fi + done - if [ -d $ISODIR/home ]; then - sed -e "s,@HOME@,$SUBST_H," \ - -e "s,@HOMETAR@,$SUBST_HT," \ - $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f - mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd - else - sed -e "s,@HOME@,," -e "s,@HOMETAR@,," \ - $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f - mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd - fi + if [ -d $ISODIR/home ]; then + sed -e "s|@HOME@|$SUBST_H|" -e "s|@HOMETAR@|$SUBST_HT|" \ + $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f + mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd + else + sed -e "s|@HOME@||" -e "s|@HOMETAR@||" \ + $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f + mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd + fi - if [ -d $ISODIR/$PKG_SYSCONFDIR ]; then - @TAR@ cfzp $ISODIR/stand/mfs_pkg_sysconfdir.tgz \ - $PKG_SYSCONFDIR >/dev/null 2>&1 - showmsg "Creating /stand/mfs_pkg_sysconfdir.tgz" - sed -e "s,@USRPKGETC@,$SUBST_S," \ - -e "s,@USRPKGETCTAR@,$SUBST_ST," \ - $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f - mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd - else - sed -e "s,@USRPKGETC@,," -e "s,@USRPKGETCTAR@,," \ - $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f - mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd - fi + if [ -d $ISODIR/$PKG_SYSCONFDIR ]; then + showmsg_n "Creating /stand/mfs_pkg_sysconfdir.tgz..." + @TAR@ cfzp $ISODIR/stand/mfs_pkg_sysconfdir.tgz \ + $PKG_SYSCONFDIR >/dev/null 2>&1 + showmsgstring + sed -e "s|@USRPKGETC@|$SUBST_S|" -e "s|@USRPKGETCTAR@|$SUBST_ST|" \ + $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f + mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd + else + sed -e "s|@USRPKGETC@||" -e "s|@USRPKGETCTAR@||" \ + $ISODIR/etc/rc.d/mfs_rcd > $ISODIR/etc/rc.d/mfs_rcd.f + mv $ISODIR/etc/rc.d/mfs_rcd.f $ISODIR/etc/rc.d/mfs_rcd + fi - if [ "${ENABLE_X11}" = "yes" ]; then - if [ -f /etc/X11/XF86Config ]; then - cp /etc/X11/XF86Config $ISODIR/etc/X11 - fi - fi + if [ "${ENABLE_X11}" = "yes" ]; then + [ -f /etc/X11/XF86Config ] && \ + cp /etc/X11/XF86Config $ISODIR/etc/X11 + fi - if [ "${PERSONAL_CONFIG}" = "yes" -a \ - -f $config_dir/$pers_conffile ]; then - echo - showmsg "Running personal config file..." - . $config_dir/$pers_conffile - showmsg "Done!" - echo - elif [ "${PERSONAL_CONFIG}" = "yes" -a \ - ! -f $config_dir/$pers_conffile ]; then - echo - showmsg "Can't find the personal configuration file." - showmsg "Skipping it..." - echo + if [ "${PERSONAL_CONFIG}" = "yes" ]; then + if [ -f $config_dir/$pers_conffile ]; then + echo + showmsg_n "Running personal config file..." + . $config_dir/$pers_conffile + showmsgstring + echo + elif [ "${PERSONAL_CONFIG}" = "yes" ]; then + if [ ! -f $config_dir/$pers_conffile ]; then + echo + echo "==> CANNOT FIND PERSONAL CONFIGURATION FILE" + echo + bye 1 else - continue + continue fi + fi + fi - # Make sure mfs_rcd has the right permissions, because - # it could be critical!. + # Make sure mfs_rcd has the right permissions, because + # it could be critical!. - chmod -R a+rx $ISODIR/etc/rc.d + chmod -R a+rx $ISODIR/etc/rc.d - if [ ! -f $pkgsrcdist_mntstat ]; then - showmsg "distfiles directory was not mounted." + if [ ! -f $pkgsrcdist_mntstat ]; then + showmsg "distfiles directory was not mounted." + else + cnt=$(cat $pkgsrcdist_mntstat) + if [ "$cnt" -gt 1 ]; then + cnt=$(($cnt - 1)) + echo $cnt > $pkgsrcdist_mntstat + [ -n "$verbose_mode" ] && \ + echo "=> distfiles directory still in use by mklivecd." + else + [ -n "$verbose_mode" ] && \ + echo "=> Unmounting distfiles directory." + umount -R $ISODIR/usr/pkgsrc/distfiles + if [ $? -eq 0 ]; then + rm $pkgsrcdist_mntstat else - cnt=$(cat $pkgsrcdist_mntstat) - if [ "$cnt" -gt 1 ]; then - cnt=$(($cnt - 1)) - echo $cnt > $pkgsrcdist_mntstat - showmsg "distfiles directory still in use by mklivecd." - else - showmsg "Unmounting distfiles directory." - umount -R $ISODIR/usr/pkgsrc/distfiles - if [ $? -eq 0 ]; then - rm $pkgsrcdist_mntstat - else - echo "Can't umount $PKGSRCDISTDIR." - fi - fi + echo "Can't umount $PKGSRCDISTDIR." fi + fi + fi - if [ ! -f $pkgsrc_mntstat ]; then - showmsg "pkgsrc directory was not mounted." + if [ ! -f $pkgsrc_mntstat ]; then + showmsg "pkgsrc directory was not mounted." + else + cnt=$(cat $pkgsrc_mntstat) + if [ "$cnt" -gt 1 ]; then + cnt=$(($cnt - 1)) + echo $cnt > $pkgsrc_mntstat + echo "=> pkgsrc directory still in use by mklivecd." + else + [ -n "$verbose_mode" ] && \ + echo "=> Unmounting pkgsrc directory." + umount -R $ISODIR/usr/pkgsrc + if [ $? -eq 0 ]; then + rm $pkgsrc_mntstat else - cnt=$(cat $pkgsrc_mntstat) - if [ "$cnt" -gt 1 ]; then - cnt=$(($cnt - 1)) - echo $cnt > $pkgsrc_mntstat - showmsg "pkgsrc directory still in use by mklivecd." - else - showmsg "Unmounting pkgsrc directory." - umount -R $ISODIR/usr/pkgsrc - if [ $? -eq 0 ]; then - rm $pkgsrc_mntstat - else - echo "Can't umount $PKGSRCDIR." - fi - fi + echo "Can't umount $PKGSRCDIR." fi + fi + fi - if [ "$verbose_mode" = "on" ]; then - showmsg "Size: $(du -sh $ISODIR)" - fi - ;; - clean) - if [ -f $pkgsrc_mntstat -o -f $pkgsrcdist_mntstat ]; then - showmsg "The pkgsrc directories still in use! Exiting." - bye 1 - fi - showmsg "Cleaning WORKDIR: $WORKDIR" - rm -rf $WORKDIR - for F in bin dev etc lib libexec mnt rescue \ - root tmp usr var sbin home - do - if [ -d $ISODIR/$F ]; then - if [ "$verbose_mode" = "on" ]; then - showmsg "Removing $ISODIR/$F." - fi - rm -rf $ISODIR/$F - fi - done - showmsg "Done." - ;; - iso) - _do_real_iso_image() - { - if [ "$verbose_mode" = "on" ]; then - echo "=> Removing $IMAGE_NAME.iso..." - fi - - [ -f "$BASEDIR/$IMAGE_NAME.iso" ] && rm $BASEDIR/$IMAGE_NAME.iso - [ -d $ISODIR/$BOOTDIR ] && chown -R root:wheel $ISODIR/$BOOTDIR - - if [ ! -f $ISODIR/stand/mfs_etc.tgz ]; then - showmsg "Target iso failed!" - showmsg "Can't find mfs_etc.tgz file." - bye 1 - fi - showmsg "Removing not needed directories." - for RM in ${REMOVE_DIRS} - do - if [ -d $ISODIR/$RM ]; then - if [ "$verbose_mode" = "on" ]; then - echo "=> Removing $RM..." - fi - rm -rf $ISODIR/$RM - else - echo "=> Nonexistent directory: $RM." - fi - done - - sleep 2 # Because I want to see the messages :-) - - showmsg "Creating ISO CD9660 image" - $MKISOFS $MKISOFS_FIXED_ARGS $MKISOFS_ARGS \ - -b $BOOTDIR/$BOOTIMAGE \ - -o $BASEDIR/$IMAGE_NAME.iso $ISODIR - } - if [ -f $BASEDIR/$IMAGE_NAME.iso ]; then - showmsg "Found a previous ISO image, do you want to override it?" - echo - echo "[Press the Enter key to keep your ISO image, otherwise" - echo " press any other key to proceed removing this file and" - echo " creating a new one called: $IMAGE_NAME.iso]" - read output_u - if [ -n "$output_u" ]; then - _do_real_iso_image - elif [ -z "$output_u" ]; then - showmsg "Not overwritting ISO image, skipped." - fi - else - _do_real_iso_image - fi - ;; - burn) - if [ ! -f $BASEDIR/$IMAGE_NAME.iso ]; then - showmsg "Can't find iso image!, exiting." - bye 1 + [ -n "$verbose_mode" ] && showmsg "Size: $(du -sh $ISODIR)" + ;; + clean) + if [ -f $pkgsrc_mntstat -o -f $pkgsrcdist_mntstat ]; then + showmsg "The pkgsrc directories are still in use! Exiting." + bye 1 + fi + showmsg "Cleaning WORKDIR: $WORKDIR" + rm -rf $WORKDIR + for F in bin dev etc lib libexec mnt rescue root tmp usr var sbin home + do + if [ -d $ISODIR/$F ]; then + showmsg_n "Removing $ISODIR/$F..." + rm -rf $ISODIR/$F + showmsgstring + fi + done + ;; + iso) + _do_real_iso_image() + { + if [ -f "$BASEDIR/$IMAGE_NAME.iso" ]; then + [ -n "$verbose_mode" ] && \ + echo "=> Removing $IMAGE_NAME.iso..." + rm $BASEDIR/$IMAGE_NAME.iso + fi + [ -d $ISODIR/$BOOTDIR ] && chown -R root:wheel $ISODIR/$BOOTDIR + + if [ ! -f $ISODIR/stand/mfs_etc.tgz ]; then + showmsg "Cannot find mfs_etc.tgz file." + bye 1 + fi + for RM in ${REMOVE_DIRS} + do + if [ -d $ISODIR/$RM ]; then + echo -n "=> Removing $RM..." + rm -rf $ISODIR/$RM + showmsgstring fi + done + + sleep 2 # Because I want to see the messages :-) + + showmsg_n "Creating ISO CD9660 image..." + if [ "$USE_GNU_GRUB" = "yes" ]; then + $MKISOFS $MKISOFS_FIXED_ARGS $MKISOFS_ARGS \ + -b $GRUB_BOOTDIR/$GRUB_BOOTIMAGE \ + -o $BASEDIR/$IMAGE_NAME.iso $ISODIR > /dev/null 2>&1 + showmsgstring + else + $MKISOFS $MKISOFS_FIXED_ARGS $MKISOFS_ARGS \ + -b ${CDBOOT_IMG} -o $BASEDIR/$IMAGE_NAME.iso $ISODIR \ + > /dev/null 2>&1 + showmsgstring + fi + } + if [ -f $BASEDIR/$IMAGE_NAME.iso ]; then + echo "* Found $IMAGE_NAME.iso." + echo -n "=> Do you want to overwrite this image? (y/n) " + read output_u + if [ "$output_u" = "y" ]; then + _do_real_iso_image + elif [ "$output_u" = "n" -o "$output_u" != "y" ]; then + showmsg "Exiting." + fi + else + _do_real_iso_image + fi + ;; + burn) + if [ ! -f $BASEDIR/$IMAGE_NAME.iso ]; then + showmsg "Can't find iso image!, exiting." + bye 1 + fi - if [ $BLANK_BEFORE_BURN = "yes" ]; then - $CDRECORD dev=$CDROM_DEVICE $CDRECORD_ARGS blank=fast - fi + [ "$BLANK_BEFORE_BURN" = "yes" ] && \ + $CDRECORD dev=$CDROM_DEVICE $CDRECORD_ARGS blank=fast - $CDRECORD dev=$CDROM_DEVICE $CDRECORD_ARGS \ - $BASEDIR/$IMAGE_NAME.iso - ;; - esac + $CDRECORD dev=$CDROM_DEVICE $CDRECORD_ARGS $BASEDIR/$IMAGE_NAME.iso + ;; + esac } checkconf() { - if [ -f $config_file ]; then - [ $(id -u) -ne 0 ] && showmsg "must be run as root" && bye 1 - do_conf_reset; do_conf - else - showmsg "$config_file does not exist, exiting." - bye 1 - fi + if [ -f $config_file ]; then + if [ $(id -u) -ne 0 ]; then + showmsg "MUST BE RUN AS ROOT!" + bye 1 + fi + do_conf_reset; do_conf + else + showmsg "$config_file DOESN'T EXIST, EXITING!" + bye 1 + fi } # =========================================================================== # # Main program # # =========================================================================== # -args=$(getopt c:v $*) +args=$(getopt c:k:v $*) if [ $? -ne 0 ]; then - usage + usage fi set -- $args while [ $# -gt 0 ]; do - case "$1" in - -c) - config_file="$config_dir/$2" - shift - ;; - -v) - verbose_mode=on - ;; - --) - shift; break - ;; - esac + case "$1" in + -c) + config_file="$config_dir/$2" shift + ;; + -k) + kernel_arg="$2" + K_ARG_SET=1 + shift + ;; + -v) + verbose_mode=on + ;; + --) + shift; break + ;; + esac + shift done if [ $# -lt 1 ]; then - usage + usage fi if [ -z "$config_file" ]; then - config_file=$config_dir/mklivecd.conf + config_file=$config_dir/mklivecd.conf fi if [ -z "$verbose_mode" ]; then - verbose_mode=off + verbose_mode= fi target=$1 case "$target" in - iso) - checkconf - do_cdlive iso - ;; - kernel) - do_cdlive kernel - ;; - base) - checkconf - do_cdlive base - ;; - chroot) - checkconf - do_cdlive chroot - ;; - clean) - checkconf - do_cdlive clean - ;; - config) - do_conf - ;; - burn) - checkconf - do_cdlive burn - ;; - *) - usage - ;; + iso) + checkconf + do_cdlive iso + ;; + kernel) + do_cdlive kernel + ;; + base) + checkconf + do_cdlive base + ;; + chroot) + checkconf + do_cdlive chroot + ;; + clean) + checkconf + do_cdlive clean + ;; + config) + do_conf + ;; + burn) + checkconf + do_cdlive burn + ;; + *) + usage + ;; esac -exit 0 # agur! +exit 0 # agur! (that's all folks) + +# vim: expandtab:softtabstop=4:shiftwidth=4 |