head	1.4;
access;
symbols
	RELENG_8_4:1.4.0.2
	RELENG_9_1_0_RELEASE:1.2.4.1.4.2
	RELENG_9_1:1.2.4.1.0.4
	RELENG_9_1_BP:1.2.4.1
	RELENG_8_3_0_RELEASE:1.2.2.1.8.1
	RELENG_8_3:1.2.2.1.0.8
	RELENG_8_3_BP:1.2.2.1
	RELENG_9_0_0_RELEASE:1.2.4.1.2.1
	RELENG_9_0:1.2.4.1.0.2
	RELENG_9_0_BP:1.2.4.1
	RELENG_9:1.2.0.4
	RELENG_9_BP:1.2
	RELENG_8_2_0_RELEASE:1.2.2.1.6.1
	RELENG_8_2:1.2.2.1.0.6
	RELENG_8_2_BP:1.2.2.1
	RELENG_8_1_0_RELEASE:1.2.2.1.4.1
	RELENG_8_1:1.2.2.1.0.4
	RELENG_8_1_BP:1.2.2.1
	RELENG_8_0_0_RELEASE:1.2.2.1.2.1
	RELENG_8_0:1.2.2.1.0.2
	RELENG_8_0_BP:1.2.2.1
	RELENG_8:1.2.0.2
	RELENG_8_BP:1.2;
locks; strict;
comment	@# @;


1.4
date	2012.11.17.01.54.12;	author svnexp;	state Exp;
branches
	1.4.2.1;
next	1.3;

1.3
date	2011.12.30.00.04.11;	author uqs;	state Exp;
branches;
next	1.2;

1.2
date	2009.01.17.21.31.47;	author phk;	state Exp;
branches
	1.2.2.1
	1.2.4.1;
next	1.1;

1.1
date	2009.01.17.20.30.06;	author phk;	state Exp;
branches;
next	;

1.4.2.1
date	2012.11.17.01.54.12;	author svnexp;	state dead;
branches;
next	1.4.2.2;

1.4.2.2
date	2013.03.28.13.05.59;	author svnexp;	state Exp;
branches;
next	;

1.2.2.1
date	2009.08.03.08.13.06;	author kensmith;	state Exp;
branches
	1.2.2.1.2.1
	1.2.2.1.4.1
	1.2.2.1.6.1
	1.2.2.1.8.1;
next	1.2.2.2;

1.2.2.2
date	2012.11.17.10.37.15;	author svnexp;	state Exp;
branches;
next	;

1.2.2.1.2.1
date	2009.10.25.01.10.29;	author kensmith;	state Exp;
branches;
next	;

1.2.2.1.4.1
date	2010.06.14.02.09.06;	author kensmith;	state Exp;
branches;
next	;

1.2.2.1.6.1
date	2010.12.21.17.09.25;	author kensmith;	state Exp;
branches;
next	;

1.2.2.1.8.1
date	2012.03.03.06.15.13;	author kensmith;	state Exp;
branches;
next	1.2.2.1.8.2;

1.2.2.1.8.2
date	2012.11.17.08.25.48;	author svnexp;	state Exp;
branches;
next	;

1.2.4.1
date	2011.09.23.00.51.37;	author kensmith;	state Exp;
branches
	1.2.4.1.2.1
	1.2.4.1.4.1;
next	1.2.4.2;

1.2.4.2
date	2012.11.17.11.37.36;	author svnexp;	state Exp;
branches;
next	;

1.2.4.1.2.1
date	2011.11.11.04.20.22;	author kensmith;	state Exp;
branches;
next	1.2.4.1.2.2;

1.2.4.1.2.2
date	2012.11.17.08.37.33;	author svnexp;	state Exp;
branches;
next	;

1.2.4.1.4.1
date	2012.08.05.23.54.33;	author kensmith;	state Exp;
branches;
next	1.2.4.1.4.2;

1.2.4.1.4.2
date	2012.11.17.08.48.24;	author svnexp;	state Exp;
branches;
next	;


desc
@@


1.4
log
@Switching exporter and resync
@
text
@$FreeBSD: head/tools/tools/sysbuild/README 228975 2011-12-30 00:04:11Z uqs $

About sysbuild.sh
=================

I have been running -current on my laptop since before FreeBSD 2.0 was
released and along the way developed this little trick to making the
task easier.

sysbuild.sh is a way to build a new FreeBSD system on a computer from
a specification, while leaving the current installation intact.

sysbuild.sh assume you have two partitions that can hold your rootfs
and can be booted, and roughly speaking, all it does is build a new
system into the one you don't use, from the one you do use.

A partition named /freebsd is assumed to be part of your layout, and
that is where the sources and ports will be found.

If you know how nanobsd works, you will find a lot of similarity.

HOWTO
=====

In all likelihood, it is easier if we imagine you start with a blank
computer.

Grab a FreeBSD install ISO and boot it.

Create four disk slices:

	ad0s1 = 5GB
	ad0s2 = 5GB
	ad0s3 = 5GB
	ad0s4 = the rest

Create a root filesystem in s1a filling the entire ad0s1 slice.

Create a swap partition, if you want one, in ad0s4b.

Install the boot0 bootmanager.

Install the "Minimal" FreeBSD system into ad0s1a.

Reboot from the newly installed system.

Run these commands to set up the other partitions sysbuild.sh cares about:

	# /freebsd filesystem
	newfs -b 4096 -f 512 -O2 -U /dev/ad0s3
	echo "/dev/ad0s3 /freebsd ufs rw 2 2" >> /etc/fstab
	mkdir /freebsd
	mount /freebsd

	# deputy rootfilesystem
	bsdlabel -B -w /dev/ad0s2
	newfs -O2 -U /dev/ad0s2a

Next, install ports and sources:

	cd /usr
	rm -rf ports src
	ln -s /freebsd/src
	ln -s /freebsd/ports
	cd /freebsd
	mkdir ports src packages

	# Or use svn if you prefer
	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/ports-supfile
	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/stable-supfile

And we should be ready to try a shot:

	cd /root
	cp /usr/src/tools/tools/sysbuild/sysbuild.sh .
	sh sysbuild.sh |& tee _.sb

If it succeeds, you should be able to:

	boot0cfg -s 2 -v /dev/ad0
	reboot

And come up with your newly built system.

	Next time you want a new system, you just run sysbuild.sh again
	and boot slice 1 when it's done.

TWEAKS
======

The sysbuild.sh script takes various parameters:

	-c specfile	# configure stuff, see below.
	-w		# skip buildworld, assume it was done earlier.
	-k		# skip buildkernel, ---//---
	-b		# skip both buildworld & buildkernel
	-p		# install cached packacges if found.

The specfile is a shellscript where you can override or set a number of
shell variables and functions.

A partial example:

	# use a kernel different from GENERIC
	KERNCONF=SMP

	# Cache built packages, so we can use -p
	PKG_DIR=/freebsd/packages

	# Mount ports distfiles from another machine
	REMOTEDISTFILES=fs:/rdonly/distfiles

	# Fetch distfiles through a proxy
	FTP_PROXY=http://127.0.0.1:3128/
	HTTP_PROXY=http://127.0.0.1:3128/
	export FTP_PROXY HTTP_PROXY

	# We want these ports
	PORTS_WE_WANT='
		/usr/ports/archivers/unzip
		/usr/ports/archivers/zip
		/usr/ports/cad/linux-eagle
		/usr/ports/comms/lrzsz
		/usr/ports/databases/rrdtool 
		/usr/ports/devel/subversion-freebsd
	'

	# Files to move over
	CONFIGFILES='
		/root/.ssh
		/etc/X11/xorg.conf
		/etc/ssh/ssh_host*
		/etc/rc.conf
		/etc/rc.local
	'

	# Shell functions to tweak things
	# (This makes commits to /etc mostly painless)
	final_chroot() (
		chpass -p "\$1\$IgMjWs2L\$Nu12OCsjfiwHHj0I7TmUN1" root

		pw useradd phk -u 488 -d /home/phk -c "Poul-Henning Kamp" \
		    -G "wheel,operator,dialer" -s /bin/csh -w none

		chpass -p "\$1\$VcM.9Ow8\$IcXHs0h9jsk27b8N64lOm/" phk

		sed -i "" -e 's/^DS/DSorigo.freebsd.dk/' /etc/mail/sendmail.cf
		sed -i "" -e '/console/s/^/#/' /etc/syslog.conf
		echo "beastie_disable=YES" >> /boot/loader.conf
		touch /root/.hushlogin
	)


@


1.4.2.1
log
@file README was added on branch RELENG_8_4 on 2013-03-28 13:05:59 +0000
@
text
@d1 153
@


1.4.2.2
log
@## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/248810
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
@
text
@a0 153
$FreeBSD: releng/8.4/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $

About sysbuild.sh
=================

I have been running -current on my laptop since before FreeBSD 2.0 was
released and along the way developed this little trick to making the
task easier.

sysbuild.sh is a way to build a new FreeBSD system on a computer from
a specification, while leaving the current installation intact.

sysbuild.sh assume you have two partitions that can hold your rootfs
and can be booted, and roughly speaking, all it does is build a new
system into the one you don't use, from the one you do use.

A partition named /freebsd is assumed to be part of your layout, and
that is where the sources and ports will be found.

If you know how nanobsd works, you will find a lot of similarity.

HOWTO
=====

In all likelyhood, it is easier if we imagine you start with a blank
computer.

Grab a FreeBSD install ISO and boot it.

Create four disk slices:

	ad0s1 = 5GB
	ad0s2 = 5GB
	ad0s3 = 5GB
	ad0s4 = the rest

Create a root filesystem in s1a filling the entire ad0s1 slice.

Create a swap partition, if you want one, in ad0s4b.

Install the boot0 bootmanager.

Install the "Minimal" FreeBSD system into ad0s1a.

Reboot from the newly installed system.

Run these commands to set up the other partitions sysbuild.sh cares about:

	# /freebsd filesystem
	newfs -b 4096 -f 512 -O2 -U /dev/ad0s3
	echo "/dev/ad0s3 /freebsd ufs rw 2 2" >> /etc/fstab
	mkdir /freebsd
	mount /freebsd

	# deputy rootfilesystem
	bsdlabel -B -w /dev/ad0s2
	newfs -O2 -U /dev/ad0s2a

Next, install ports and sources:

	cd /usr
	rm -rf ports src
	ln -s /freebsd/src
	ln -s /freebsd/ports
	cd /freebsd
	mkdir ports src packages

	# Or use svn if you prefer
	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/ports-supfile
	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/stable-supfile

And we should be ready to try a shot:

	cd /root
	cp /usr/src/tools/tools/sysbuild/sysbuild.sh .
	sh sysbuild.sh |& tee _.sb

If it succeeds, you should be able to:

	boot0cfg -s 2 -v /dev/ad0
	reboot

And come up with your newly built system.

	Next time you want a new system, you just run sysbuild.sh again
	and boot slice 1 when it's done.

TWEAKS
======

The sysbuild.sh script takes various parameters:

	-c specfile	# configure stuff, see below.
	-w		# skip buildworld, assume it was done earlier.
	-k		# skip buildkernel, ---//---
	-b		# skip both buildworld & buildkernel
	-p		# install cached packacges if found.

The specfile is a shellscript where you can override or set a number of
shell variables and functions.

A partial example:

	# use a kernel different from GENERIC
	KERNCONF=SMP

	# Cache built packages, so we can use -p
	PKG_DIR=/freebsd/packages

	# Mount ports distfiles from another machine
	REMOTEDISTFILES=fs:/rdonly/distfiles

	# Fetch distfiles through a proxy
	FTP_PROXY=http://127.0.0.1:3128/
	HTTP_PROXY=http://127.0.0.1:3128/
	export FTP_PROXY HTTP_PROXY

	# We want these ports
	PORTS_WE_WANT='
		/usr/ports/archivers/unzip
		/usr/ports/archivers/zip
		/usr/ports/cad/linux-eagle
		/usr/ports/comms/lrzsz
		/usr/ports/databases/rrdtool 
		/usr/ports/devel/subversion-freebsd
	'

	# Files to move over
	CONFIGFILES='
		/root/.ssh
		/etc/X11/xorg.conf
		/etc/ssh/ssh_host*
		/etc/rc.conf
		/etc/rc.local
	'

	# Shell functions to tweak things
	# (This makes commits to /etc mostly painless)
	final_chroot() (
		chpass -p "\$1\$IgMjWs2L\$Nu12OCsjfiwHHj0I7TmUN1" root

		pw useradd phk -u 488 -d /home/phk -c "Poul-Henning Kamp" \
		    -G "wheel,operator,dialer" -s /bin/csh -w none

		chpass -p "\$1\$VcM.9Ow8\$IcXHs0h9jsk27b8N64lOm/" phk

		sed -i "" -e 's/^DS/DSorigo.freebsd.dk/' /etc/mail/sendmail.cf
		sed -i "" -e '/console/s/^/#/' /etc/syslog.conf
		echo "beastie_disable=YES" >> /boot/loader.conf
		touch /root/.hushlogin
	)


@


1.3
log
@SVN rev 228975 on 2011-12-30 00:04:11Z by uqs

Spelling fixes for tools/

Add some $FreeBSD$ tags so svn will allow the commit.
@
text
@d1 1
a1 1
$FreeBSD$
@


1.2
log
@SVN rev 187372 on 2009-01-17 21:31:47Z by phk

Fix typo

Spotted by:	juli
@
text
@d25 1
a25 1
In all likelyhood, it is easier if we imagine you start with a blank
@


1.2.4.1
log
@SVN rev 225736 on 2011-09-23 00:51:37Z by kensmith

Copy head to stable/9 as part of 9.0-RELEASE release cycle.

Approved by:	re (implicit)
@
text
@@


1.2.4.2
log
@## SVN ##
## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/ 242902
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ## r242902 | dteske | 2012-11-11 23:29:45 +0000 (Sun, 11 Nov 2012) | 10 lines
## SVN ##
## SVN ## Fix a regression introduced by SVN r211417 that saw the breakage of a feature
## SVN ## documented in usr.sbin/sysinstall/help/shortcuts.hlp (reproduced below):
## SVN ##
## SVN ## If /usr/sbin/sysinstall is linked to another filename, say
## SVN ## `/usr/local/bin/configPackages', then the basename will be used
## SVN ## as an implicit command name.
## SVN ##
## SVN ## Reviewed by:	adrian (co-mentor)
## SVN ## Approved by:	adrian (co-mentor)
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ##
@
text
@d1 1
a1 1
$FreeBSD: stable/9/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $
@


1.2.4.1.4.1
log
@SVN rev 239080 on 2012-08-05 23:54:33Z by kensmith

Copy stable/9 to releng/9.1 as part of the 9.1-RELEASE release process.

Approved by:	re (implicit)
@
text
@@


1.2.4.1.4.2
log
@Switch importer
@
text
@d1 1
a1 1
$FreeBSD: releng/9.1/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $
@


1.2.4.1.2.1
log
@SVN rev 227445 on 2011-11-11 04:20:22Z by kensmith

Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
cycle.

Approved by:	re (implicit)
@
text
@@


1.2.4.1.2.2
log
@Switch importer
@
text
@d1 1
a1 1
$FreeBSD: releng/9.0/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $
@


1.2.2.1
log
@SVN rev 196045 on 2009-08-03 08:13:06Z by kensmith

Copy head to stable/8 as part of 8.0 Release cycle.

Approved by:	re (Implicit)
@
text
@@


1.2.2.2
log
@## SVN ##
## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/ 242909
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ## r242909 | dim | 2012-11-12 07:47:19 +0000 (Mon, 12 Nov 2012) | 20 lines
## SVN ##
## SVN ## MFC r242625:
## SVN ##
## SVN ## Remove duplicate const specifiers in many drivers (I hope I got all of
## SVN ## them, please let me know if not).  Most of these are of the form:
## SVN ##
## SVN ## static const struct bzzt_type {
## SVN ##       [...list of members...]
## SVN ## } const bzzt_devs[] = {
## SVN ##       [...list of initializers...]
## SVN ## };
## SVN ##
## SVN ## The second const is unnecessary, as arrays cannot be modified anyway,
## SVN ## and if the elements are const, the whole thing is const automatically
## SVN ## (e.g. it is placed in .rodata).
## SVN ##
## SVN ## I have verified this does not change the binary output of a full kernel
## SVN ## build (except for build timestamps embedded in the object files).
## SVN ##
## SVN ## Reviewed by:	yongari, marius
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ##
@
text
@d1 1
a1 1
$FreeBSD: stable/8/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $
@


1.2.2.1.8.1
log
@SVN rev 232438 on 2012-03-03 06:15:13Z by kensmith

Copy stable/8 to releng/8.3 as part of 8.3-RELEASE release cycle.

Approved by:	re (implicit)
@
text
@@


1.2.2.1.8.2
log
@Switch importer
@
text
@d1 1
a1 1
$FreeBSD: releng/8.3/tools/tools/sysbuild/README 187372 2009-01-17 21:31:47Z phk $
@


1.2.2.1.6.1
log
@SVN rev 216617 on 2010-12-21 17:09:25Z by kensmith

Copy stable/8 to releng/8.2 in preparation for FreeBSD-8.2 release.

Approved by:	re (implicit)
@
text
@@


1.2.2.1.4.1
log
@SVN rev 209145 on 2010-06-14 02:09:06Z by kensmith

Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.

Approved by:	re (implicit)
@
text
@@


1.2.2.1.2.1
log
@SVN rev 198460 on 2009-10-25 01:10:29Z by kensmith

Copy stable/8 to releng/8.0 as part of 8.0-RELEASE release procedure.

Approved by:	re (implicit)
@
text
@@


1.1
log
@SVN rev 187371 on 2009-01-17 20:30:06Z by phk

Release the evil twin of nanobsd.sh: sysbuild.sh

quoth the README:

I have been running -current on my laptop since before FreeBSD 2.0 was
released and along the way developed this little trick to making the
task easier.

sysbuild.sh is a way to build a new FreeBSD system on a computer from
a specification, while leaving the current installation intact.

sysbuild.sh assume you have two partitions that can hold your rootfs
and can be booted, and roughly speaking, all it does is build a new
system into the one you don't use, from the one you do use.

A partition named /freebsd is assumed to be part of your layout, and
that is where the sources and ports will be found.

If you know how nanobsd works, you will find a lot of similarity.
@
text
@d75 1
a75 1
	cp /usr/src/tools/tools/sysbuild/sysbuild.sh
@

