xref: /freebsd/tools/tools/sysbuild/README (revision 68d566e62ef82d359ffae7876329787eb4269611)
168d566e6SPoul-Henning Kamp$FreeBSD$
268d566e6SPoul-Henning Kamp
368d566e6SPoul-Henning KampAbout sysbuild.sh
468d566e6SPoul-Henning Kamp=================
568d566e6SPoul-Henning Kamp
668d566e6SPoul-Henning KampI have been running -current on my laptop since before FreeBSD 2.0 was
768d566e6SPoul-Henning Kampreleased and along the way developed this little trick to making the
868d566e6SPoul-Henning Kamptask easier.
968d566e6SPoul-Henning Kamp
1068d566e6SPoul-Henning Kampsysbuild.sh is a way to build a new FreeBSD system on a computer from
1168d566e6SPoul-Henning Kampa specification, while leaving the current installation intact.
1268d566e6SPoul-Henning Kamp
1368d566e6SPoul-Henning Kampsysbuild.sh assume you have two partitions that can hold your rootfs
1468d566e6SPoul-Henning Kampand can be booted, and roughly speaking, all it does is build a new
1568d566e6SPoul-Henning Kampsystem into the one you don't use, from the one you do use.
1668d566e6SPoul-Henning Kamp
1768d566e6SPoul-Henning KampA partition named /freebsd is assumed to be part of your layout, and
1868d566e6SPoul-Henning Kampthat is where the sources and ports will be found.
1968d566e6SPoul-Henning Kamp
2068d566e6SPoul-Henning KampIf you know how nanobsd works, you will find a lot of similarity.
2168d566e6SPoul-Henning Kamp
2268d566e6SPoul-Henning KampHOWTO
2368d566e6SPoul-Henning Kamp=====
2468d566e6SPoul-Henning Kamp
2568d566e6SPoul-Henning KampIn all likelyhood, it is easier if we imagine you start with a blank
2668d566e6SPoul-Henning Kampcomputer.
2768d566e6SPoul-Henning Kamp
2868d566e6SPoul-Henning KampGrab a FreeBSD install ISO and boot it.
2968d566e6SPoul-Henning Kamp
3068d566e6SPoul-Henning KampCreate four disk slices:
3168d566e6SPoul-Henning Kamp
3268d566e6SPoul-Henning Kamp	ad0s1 = 5GB
3368d566e6SPoul-Henning Kamp	ad0s2 = 5GB
3468d566e6SPoul-Henning Kamp	ad0s3 = 5GB
3568d566e6SPoul-Henning Kamp	ad0s4 = the rest
3668d566e6SPoul-Henning Kamp
3768d566e6SPoul-Henning KampCreate a root filesystem in s1a filling the entire ad0s1 slice.
3868d566e6SPoul-Henning Kamp
3968d566e6SPoul-Henning KampCreate a swap partition, if you want one, in ad0s4b.
4068d566e6SPoul-Henning Kamp
4168d566e6SPoul-Henning KampInstall the boot0 bootmanager.
4268d566e6SPoul-Henning Kamp
4368d566e6SPoul-Henning KampInstall the "Minimal" FreeBSD system into ad0s1a.
4468d566e6SPoul-Henning Kamp
4568d566e6SPoul-Henning KampReboot from the newly installed system.
4668d566e6SPoul-Henning Kamp
4768d566e6SPoul-Henning KampRun these commands to set up the other partitions sysbuild.sh cares about:
4868d566e6SPoul-Henning Kamp
4968d566e6SPoul-Henning Kamp	# /freebsd filesystem
5068d566e6SPoul-Henning Kamp	newfs -b 4096 -f 512 -O2 -U /dev/ad0s3
5168d566e6SPoul-Henning Kamp	echo "/dev/ad0s3 /freebsd ufs rw 2 2" >> /etc/fstab
5268d566e6SPoul-Henning Kamp	mkdir /freebsd
5368d566e6SPoul-Henning Kamp	mount /freebsd
5468d566e6SPoul-Henning Kamp
5568d566e6SPoul-Henning Kamp	# deputy rootfilesystem
5668d566e6SPoul-Henning Kamp	bsdlabel -B -w /dev/ad0s2
5768d566e6SPoul-Henning Kamp	newfs -O2 -U /dev/ad0s2a
5868d566e6SPoul-Henning Kamp
5968d566e6SPoul-Henning KampNext, install ports and sources:
6068d566e6SPoul-Henning Kamp
6168d566e6SPoul-Henning Kamp	cd /usr
6268d566e6SPoul-Henning Kamp	rm -rf ports src
6368d566e6SPoul-Henning Kamp	ln -s /freebsd/src
6468d566e6SPoul-Henning Kamp	ln -s /freebsd/ports
6568d566e6SPoul-Henning Kamp	cd /freebsd
6668d566e6SPoul-Henning Kamp	mkdir ports src packages
6768d566e6SPoul-Henning Kamp
6868d566e6SPoul-Henning Kamp	# Or use svn if you prefer
6968d566e6SPoul-Henning Kamp	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/ports-supfile
7068d566e6SPoul-Henning Kamp	csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/stable-supfile
7168d566e6SPoul-Henning Kamp
7268d566e6SPoul-Henning KampAnd we should be ready to try a shot:
7368d566e6SPoul-Henning Kamp
7468d566e6SPoul-Henning Kamp	cd /root
7568d566e6SPoul-Henning Kamp	cp /usr/src/tools/tools/sysbuild/sysbuild.sh
7668d566e6SPoul-Henning Kamp	sh sysbuild.sh |& tee _.sb
7768d566e6SPoul-Henning Kamp
7868d566e6SPoul-Henning KampIf it succeeds, you should be able to:
7968d566e6SPoul-Henning Kamp
8068d566e6SPoul-Henning Kamp	boot0cfg -s 2 -v /dev/ad0
8168d566e6SPoul-Henning Kamp	reboot
8268d566e6SPoul-Henning Kamp
8368d566e6SPoul-Henning KampAnd come up with your newly built system.
8468d566e6SPoul-Henning Kamp
8568d566e6SPoul-Henning Kamp	Next time you want a new system, you just run sysbuild.sh again
8668d566e6SPoul-Henning Kamp	and boot slice 1 when it's done.
8768d566e6SPoul-Henning Kamp
8868d566e6SPoul-Henning KampTWEAKS
8968d566e6SPoul-Henning Kamp======
9068d566e6SPoul-Henning Kamp
9168d566e6SPoul-Henning KampThe sysbuild.sh script takes various parameters:
9268d566e6SPoul-Henning Kamp
9368d566e6SPoul-Henning Kamp	-c specfile	# configure stuff, see below.
9468d566e6SPoul-Henning Kamp	-w		# skip buildworld, assume it was done earlier.
9568d566e6SPoul-Henning Kamp	-k		# skip buildkernel, ---//---
9668d566e6SPoul-Henning Kamp	-b		# skip both buildworld & buildkernel
9768d566e6SPoul-Henning Kamp	-p		# install cached packacges if found.
9868d566e6SPoul-Henning Kamp
9968d566e6SPoul-Henning KampThe specfile is a shellscript where you can override or set a number of
10068d566e6SPoul-Henning Kampshell variables and functions.
10168d566e6SPoul-Henning Kamp
10268d566e6SPoul-Henning KampA partial example:
10368d566e6SPoul-Henning Kamp
10468d566e6SPoul-Henning Kamp	# use a kernel different from GENERIC
10568d566e6SPoul-Henning Kamp	KERNCONF=SMP
10668d566e6SPoul-Henning Kamp
10768d566e6SPoul-Henning Kamp	# Cache built packages, so we can use -p
10868d566e6SPoul-Henning Kamp	PKG_DIR=/freebsd/packages
10968d566e6SPoul-Henning Kamp
11068d566e6SPoul-Henning Kamp	# Mount ports distfiles from another machine
11168d566e6SPoul-Henning Kamp	REMOTEDISTFILES=fs:/rdonly/distfiles
11268d566e6SPoul-Henning Kamp
11368d566e6SPoul-Henning Kamp	# Fetch distfiles through a proxy
11468d566e6SPoul-Henning Kamp	FTP_PROXY=http://127.0.0.1:3128/
11568d566e6SPoul-Henning Kamp	HTTP_PROXY=http://127.0.0.1:3128/
11668d566e6SPoul-Henning Kamp	export FTP_PROXY HTTP_PROXY
11768d566e6SPoul-Henning Kamp
11868d566e6SPoul-Henning Kamp	# We want these ports
11968d566e6SPoul-Henning Kamp	PORTS_WE_WANT='
12068d566e6SPoul-Henning Kamp		/usr/ports/archivers/unzip
12168d566e6SPoul-Henning Kamp		/usr/ports/archivers/zip
12268d566e6SPoul-Henning Kamp		/usr/ports/cad/linux-eagle
12368d566e6SPoul-Henning Kamp		/usr/ports/comms/lrzsz
12468d566e6SPoul-Henning Kamp		/usr/ports/databases/rrdtool
12568d566e6SPoul-Henning Kamp		/usr/ports/devel/subversion-freebsd
12668d566e6SPoul-Henning Kamp	'
12768d566e6SPoul-Henning Kamp
12868d566e6SPoul-Henning Kamp	# Files to move over
12968d566e6SPoul-Henning Kamp	CONFIGFILES='
13068d566e6SPoul-Henning Kamp		/root/.ssh
13168d566e6SPoul-Henning Kamp		/etc/X11/xorg.conf
13268d566e6SPoul-Henning Kamp		/etc/ssh/ssh_host*
13368d566e6SPoul-Henning Kamp		/etc/rc.conf
13468d566e6SPoul-Henning Kamp		/etc/rc.local
13568d566e6SPoul-Henning Kamp	'
13668d566e6SPoul-Henning Kamp
13768d566e6SPoul-Henning Kamp	# Shell functions to tweak things
13868d566e6SPoul-Henning Kamp	# (This makes commits to /etc mostly painless)
13968d566e6SPoul-Henning Kamp	final_chroot() (
14068d566e6SPoul-Henning Kamp		chpass -p "\$1\$IgMjWs2L\$Nu12OCsjfiwHHj0I7TmUN1" root
14168d566e6SPoul-Henning Kamp
14268d566e6SPoul-Henning Kamp		pw useradd phk -u 488 -d /home/phk -c "Poul-Henning Kamp" \
14368d566e6SPoul-Henning Kamp		    -G "wheel,operator,dialer" -s /bin/csh -w none
14468d566e6SPoul-Henning Kamp
14568d566e6SPoul-Henning Kamp		chpass -p "\$1\$VcM.9Ow8\$IcXHs0h9jsk27b8N64lOm/" phk
14668d566e6SPoul-Henning Kamp
14768d566e6SPoul-Henning Kamp		sed -i "" -e 's/^DS/DSorigo.freebsd.dk/' /etc/mail/sendmail.cf
14868d566e6SPoul-Henning Kamp		sed -i "" -e '/console/s/^/#/' /etc/syslog.conf
14968d566e6SPoul-Henning Kamp		echo "beastie_disable=YES" >> /boot/loader.conf
15068d566e6SPoul-Henning Kamp		touch /root/.hushlogin
15168d566e6SPoul-Henning Kamp	)
15268d566e6SPoul-Henning Kamp
15368d566e6SPoul-Henning Kamp
154