Live FreeBSD CD

From: Andrew Turner (andrew_at_fubar.geek.nz)
Date: 11/30/04

  • Next message: Michal Mertl: "enhacement to mdmfs"
    Date: Tue, 30 Nov 2004 21:37:49 +1300
    To: FreeBSD Current <freebsd-current@freebsd.org>
    
    
    

    Using nanobsd as a starting point I have created a live CD system I've
    named liveFreeBSD. It requires syutils/cdrtools to create
    liveFreeBSD.iso. Unlike FreeBSIE it only uses files from the tree with 3
    exceptions.

    To use run the shell archive and set WORLDDIR to an appropriate value
    ie. /usr/src.

    It works in a similar way to nanobsd with the exception of the way it is
    customised. To customise liveFreeBSD create a new directory then have
    CUSTOMIZE point to it. If there is a make.conf file in it liveFreeBSD
    will pick it up and use it in the came way as an /etc/make.conf. Any
    directories will have their contents copied.
    eg.
    $ find /home/andrew/FreeBSD -type f
    /home/andrew/FreeBSD/etc/test1.txt
    /home/andrew/FreeBSD/make.conf

    $ make obj
    $ make CUSTOMIZE=/home/andrew/FreeBSD
    Will build the bootable CD with the file /etc/test1.txt. It will bring
    in any Makefile options from /home/andrew/FreeBSD/make.conf

    I have tested this on HEAD and RELENG_5.

    KNOWN BUGS:
    * Customize will only copy files 1 level deep, ie.
    ${CUSTOMIZE}/etc/<file> but not
    ${CUSTOMIZE}/usr/share/<file>

    Andrew

    -- 
    437742420
    
    

    # This is a shell archive. Save it in a file, remove anything before
    # this line, and then unpack it by entering "sh file". Note, it may
    # create directories; files and directories will be owned by you and
    # have default permissions.
    #
    # This archive contains:
    #
    # Makefile
    # etc
    # make.conf
    #
    echo x - Makefile
    sed 's/^X//' >Makefile << 'END-of-Makefile'
    X# Copyright (c) 2003-2004 Poul-Henning Kamp.
    X# Copyright (c) 2004 Thomas Quinot.
    X# Copyright (c) 2004 Andrew Turner.
    X#
    X# See /usr/share/examples/etc/bsd-style-copyright for license terms.
    X#
    X# $FreeBSD: src/tools/tools/nanobsd/Makefile,v 1.8 2004/08/16 22:41:58 thomas Exp $
    X
    X#.include "${.CURDIR}/make.conf"
    X
    X# parallism flag for make.
    XMAKEJ?=
    X
    X# You probably do not need to change these.
    XWORLDDIR?= ${.CURDIR}/../../..
    XWD?= ${.OBJDIR}/_.w
    X
    X# Keep overides for custom builds in the ${.CURDIR}/${CUSTOMIZE} directory
    X#CUSTOMIZE?=test
    X
    X.if defined(CUSTOMIZE) && !empty(CUSTOMIZE)
    X.if ${CUSTOMIZE:C/^\/.*$/\//} == "/"
    XCUSTOMIZE_PATH=${CUSTOMIZE}
    X.elif exists(${.CURDIR}/${CUSTOMIZE})
    XCUSTOMIZE_PATH=${.CURDIR}/${CUSTOMIZE}
    X.endif
    X.endif
    X
    X.if exists(${CUSTOMIZE_PATH}/make.conf)
    XMAKE_CONF_INCLUDE=${CUSTOMIZE_PATH}/make.conf
    X.include "${MAKE_CONF_INCLUDE}"
    X.endif
    X
    X#
    X# The final resulting image is in ${.OBJDIR}/_.i and the single slice
    X# image in ${.OBJDIR}/_.i.s1
    X#
    X
    X# Main target
    Xall: buildworld installworld buildimage
    X
    X#
    X# This is where you customizations to the image can be performed
    X# Please make sure to do everything relative to ${WD} here.
    X#
    X.if defined(CUSTOMIZE_PATH)
    XPATHS!= find ${CUSTOMIZE_PATH} -type d -depth 1
    X.endif
    X
    XCustomize: _.cs
    X_.cs: _.iw _.di _.ik _.di
    X.if defined(CUSTOMIZE_PATH)
    X.for __DIR in ${PATHS}
    X @echo ${WD}${__DIR:S/${CUSTOMIZE_PATH}//}
    X mkdir -p ${WD}${__DIR:S/${CUSTOMIZE_PATH}//}
    X -cp ${__DIR}/* ${WD}/${__DIR:S/${CUSTOMIZE_PATH}//}
    X.endfor
    X.endif
    X touch _.cs
    X
    X###########################################################################
    X#
    X# The rest is pretty (or ugly if you prefer) magic, and should generally
    X# not need to be fiddled with. Good luck if you need to venture past this
    X# point.
    X#
    X
    X# Run a buildworld with our private make.conf
    Xbuildworld: _.bw
    X_.bw:
    X (cd ${WORLDDIR} && \
    X make ${MAKEJ} -s buildworld __MAKE_CONF=${.CURDIR}/make.conf \
    X MAKE_CONF_INCLUDE=${MAKE_CONF_INCLUDE} ) > _.bw.tmp 2>&1
    X mv _.bw.tmp _.bw
    X
    X# Run installworld and install into our object directory
    Xinstallworld: _.iw
    X_.iw: _.bw
    X -rm -rf ${WD} > /dev/null 2>&1
    X -chflags -R noschg ${WD} > /dev/null 2>&1
    X rm -rf ${WD}
    X mkdir -p ${WD}
    X (cd ${WORLDDIR} && \
    X make ${MAKEJ} -s installworld \
    X DESTDIR=${WD} \
    X __MAKE_CONF=${.CURDIR}/make.conf \
    X MAKE_CONF_INCLUDE=${MAKE_CONF_INCLUDE} \
    X ) > _.iw.tmp 2>&1
    X mv _.iw.tmp _.iw
    X
    X# Run distribution target in /etc.
    X_.di: _.iw
    X mkdir -p ${WD}
    X (cd ${WORLDDIR}/etc && \
    X make ${MAKEJ} -s distribution \
    X DESTDIR=${WD} \
    X __MAKE_CONF=${.CURDIR}/make.conf \
    X MAKE_CONF_INCLUDE=${MAKE_CONF_INCLUDE} \
    X ) > _.di.tmp 2>&1
    X mv _.di.tmp _.di
    X
    X# Build kernel
    X_.bk:
    X (cd ${WORLDDIR} && \
    X make ${MAKEJ} -s buildkernel \
    X __MAKE_CONF=${.CURDIR}/make.conf \
    X MAKE_CONF_INCLUDE=${MAKE_CONF_INCLUDE} \
    X ) > _.bk.tmp 2>&1
    X mv _.bk.tmp _.bk
    X
    X# Install kernel and hints file
    X_.ik: _.bk _.di
    X cp ${WORLDDIR}/sys/i386/conf/GENERIC.hints ${WD}/boot/device.hints
    X (cd ${WORLDDIR} && \
    X make ${MAKEJ} installkernel \
    X DESTDIR=${WD} \
    X __MAKE_CONF=${.CURDIR}/make.conf \
    X MAKE_CONF_INCLUDE=${MAKE_CONF_INCLUDE} \
    X ) > _.ik.tmp 2>&1
    X mv _.ik.tmp _.ik
    X
    X
    X# Create a disk image from the installed image
    Xbuildimage: _.md
    X_.md: _.cs
    X -umount ${WD}/dev > /dev/null 2>&1
    X chflags -R noschg ${WD} > /dev/null 2>&1
    X rm -rf ${WD}/var/* ${WD}/dev/* ${WD}/tmp
    X ln -s var/tmp ${WD}/tmp
    X cp ${.CURDIR}/etc/* ${WD}/etc
    X mkisofs -R -U -b boot/cdboot -no-emul-boot \
    X -o liveFreeBSD.iso ${WD}
    X touch _.md
    X
    Xclean:
    X -rm -rf _.* > /dev/null 2>&1
    X -chflags -R noschg _.* > /dev/null 2>&1
    X rm -rf _.* liveFreeBSD.iso
    X
    X.include <bsd.obj.mk>
    END-of-Makefile
    echo c - etc
    mkdir -p etc > /dev/null 2>&1
    echo x - make.conf
    sed 's/^X//' >make.conf << 'END-of-make.conf'
    X#
    X# Copyright (c) 2003-2004 Poul-Henning Kamp.
    X# Copyright (c) 2004 Thomas Quinot.
    X# Copyright (c) 2004 Andrew Turner.
    X#
    X# See /usr/share/examples/etc/bsd-style-copyright for license terms.
    X#
    X# $FreeBSD: src/tools/tools/nanobsd/make.conf,v 1.3 2004/08/16 22:52:40 thomas Exp $
    X#
    XKERNCONF?=GENERIC
    X
    X.if defined (MAKE_CONF_INCLUDE) && !empty(MAKE_CONF_INCLUDE) && exists(${MAKE_CONF_INCLUDE})
    X.include "${MAKE_CONF_INCLUDE}"
    X.endif
    X
    END-of-make.conf

    # This is a shell archive. Save it in a file, remove anything before
    # this line, and then unpack it by entering "sh file". Note, it may
    # create directories; files and directories will be owned by you and
    # have default permissions.
    #
    # This archive contains:
    #
    # etc/fstab
    # etc/host.conf
    # etc/nsswitch.conf
    #
    echo x - etc/fstab
    sed 's/^X//' >etc/fstab << 'END-of-etc/fstab'
    X/dev/acd0 / cd9660 ro 0 0
    X
    END-of-etc/fstab
    echo x - etc/host.conf
    sed 's/^X//' >etc/host.conf << 'END-of-etc/host.conf'
    X# Auto-generated from nsswitch.conf, do not edit
    Xhosts
    Xbind
    END-of-etc/host.conf
    echo x - etc/nsswitch.conf
    sed 's/^X//' >etc/nsswitch.conf << 'END-of-etc/nsswitch.conf'
    Xgroup: compat
    Xgroup_compat: nis
    Xhosts: files dns
    Xnetworks: files
    Xpasswd: compat
    Xpasswd_compat: nis
    Xshells: files
    END-of-etc/nsswitch.conf
    exit

    
    

    _______________________________________________
    freebsd-current@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-current
    To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"


  • Next message: Michal Mertl: "enhacement to mdmfs"

    Relevant Pages

    • Re: [PHP] Database abstraction?
      ... echo <<<ROW ... Etc. I'm trying to avoid hardcoding things like field names so that I can use this software for multiple customers without having to completely customize it for everyone since so many parts will be the same. ... 3251 132nd ave ... Holland, MI, 49424-9337 ...
      (php.general)
    • Re: Office 07 Where is the Print Button
      ... Right-click, choose Customize, and then add Print from the list of commands. ... Echo [MS PPT MVP] http://www.echosvoice.com ...
      (microsoft.public.office.misc)
    • Re: [PHP] Database abstraction?
      ... echo <<<HTML ... <?PHP ... Etc. I'm trying to avoid hardcoding things like field names so that I can use this software for multiple customers without having to completely customize it for everyone since so many parts will be the same. ... Thanks Jim! ...
      (php.general)
    • Re: [PHP] Database abstraction?
      ... Jim Lucas wrote: ... echo <<<HTML ... Etc. I'm trying to avoid hardcoding things like field names so that I can use this software for multiple customers without having to completely customize it for everyone since so many parts will be the same. ... "Some men are born to greatness, some achieve greatness, ...
      (php.general)
    • Re: [PHP] Database abstraction?
      ... Jason Pruim wrote: ... echo <<<HTML ... Etc. I'm trying to avoid hardcoding things like field names so that I can use this software for multiple customers without having to completely customize it for everyone since so many parts will be the same. ... "Some men are born to greatness, some achieve greatness, ...
      (php.general)