xref: /freebsd/tools/tools/sysbuild/README (revision b152235544f6d8515906c119c210fbd77827b511)
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
258ce070c1SUlrich SpörleinIn all likelihood, 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
68*b1522355SGavin Atkinson	svn co https://svn0.us-east.FreeBSD.org/base/stable/10 src
69*b1522355SGavin Atkinson	svn co https://svn0.us-east.FreeBSD.org/ports/head ports
7068d566e6SPoul-Henning Kamp
7168d566e6SPoul-Henning KampAnd we should be ready to try a shot:
7268d566e6SPoul-Henning Kamp
7368d566e6SPoul-Henning Kamp	cd /root
74bfe3989eSPoul-Henning Kamp	cp /usr/src/tools/tools/sysbuild/sysbuild.sh .
7568d566e6SPoul-Henning Kamp	sh sysbuild.sh |& tee _.sb
7668d566e6SPoul-Henning Kamp
7768d566e6SPoul-Henning KampIf it succeeds, you should be able to:
7868d566e6SPoul-Henning Kamp
7968d566e6SPoul-Henning Kamp	boot0cfg -s 2 -v /dev/ad0
8068d566e6SPoul-Henning Kamp	reboot
8168d566e6SPoul-Henning Kamp
8268d566e6SPoul-Henning KampAnd come up with your newly built system.
8368d566e6SPoul-Henning Kamp
8468d566e6SPoul-Henning Kamp	Next time you want a new system, you just run sysbuild.sh again
8568d566e6SPoul-Henning Kamp	and boot slice 1 when it's done.
8668d566e6SPoul-Henning Kamp
8768d566e6SPoul-Henning KampTWEAKS
8868d566e6SPoul-Henning Kamp======
8968d566e6SPoul-Henning Kamp
9068d566e6SPoul-Henning KampThe sysbuild.sh script takes various parameters:
9168d566e6SPoul-Henning Kamp
9268d566e6SPoul-Henning Kamp	-c specfile	# configure stuff, see below.
9368d566e6SPoul-Henning Kamp	-w		# skip buildworld, assume it was done earlier.
9468d566e6SPoul-Henning Kamp	-k		# skip buildkernel, ---//---
9568d566e6SPoul-Henning Kamp	-b		# skip both buildworld & buildkernel
9668d566e6SPoul-Henning Kamp	-p		# install cached packacges if found.
9768d566e6SPoul-Henning Kamp
9868d566e6SPoul-Henning KampThe specfile is a shellscript where you can override or set a number of
9968d566e6SPoul-Henning Kampshell variables and functions.
10068d566e6SPoul-Henning Kamp
10168d566e6SPoul-Henning KampA partial example:
10268d566e6SPoul-Henning Kamp
10368d566e6SPoul-Henning Kamp	# use a kernel different from GENERIC
10468d566e6SPoul-Henning Kamp	KERNCONF=SMP
10568d566e6SPoul-Henning Kamp
10668d566e6SPoul-Henning Kamp	# Cache built packages, so we can use -p
10768d566e6SPoul-Henning Kamp	PKG_DIR=/freebsd/packages
10868d566e6SPoul-Henning Kamp
10968d566e6SPoul-Henning Kamp	# Mount ports distfiles from another machine
11068d566e6SPoul-Henning Kamp	REMOTEDISTFILES=fs:/rdonly/distfiles
11168d566e6SPoul-Henning Kamp
11268d566e6SPoul-Henning Kamp	# Fetch distfiles through a proxy
11368d566e6SPoul-Henning Kamp	FTP_PROXY=http://127.0.0.1:3128/
11468d566e6SPoul-Henning Kamp	HTTP_PROXY=http://127.0.0.1:3128/
11568d566e6SPoul-Henning Kamp	export FTP_PROXY HTTP_PROXY
11668d566e6SPoul-Henning Kamp
11768d566e6SPoul-Henning Kamp	# We want these ports
11868d566e6SPoul-Henning Kamp	PORTS_WE_WANT='
11968d566e6SPoul-Henning Kamp		/usr/ports/archivers/unzip
12068d566e6SPoul-Henning Kamp		/usr/ports/archivers/zip
12168d566e6SPoul-Henning Kamp		/usr/ports/cad/linux-eagle
12268d566e6SPoul-Henning Kamp		/usr/ports/comms/lrzsz
12368d566e6SPoul-Henning Kamp		/usr/ports/databases/rrdtool
12468d566e6SPoul-Henning Kamp		/usr/ports/devel/subversion-freebsd
12568d566e6SPoul-Henning Kamp	'
12668d566e6SPoul-Henning Kamp
12768d566e6SPoul-Henning Kamp	# Files to move over
12868d566e6SPoul-Henning Kamp	CONFIGFILES='
12968d566e6SPoul-Henning Kamp		/root/.ssh
13068d566e6SPoul-Henning Kamp		/etc/X11/xorg.conf
13168d566e6SPoul-Henning Kamp		/etc/ssh/ssh_host*
13268d566e6SPoul-Henning Kamp		/etc/rc.conf
13368d566e6SPoul-Henning Kamp		/etc/rc.local
13468d566e6SPoul-Henning Kamp	'
13568d566e6SPoul-Henning Kamp
13668d566e6SPoul-Henning Kamp	# Shell functions to tweak things
13768d566e6SPoul-Henning Kamp	# (This makes commits to /etc mostly painless)
13868d566e6SPoul-Henning Kamp	final_chroot() (
13968d566e6SPoul-Henning Kamp		chpass -p "\$1\$IgMjWs2L\$Nu12OCsjfiwHHj0I7TmUN1" root
14068d566e6SPoul-Henning Kamp
14168d566e6SPoul-Henning Kamp		pw useradd phk -u 488 -d /home/phk -c "Poul-Henning Kamp" \
14268d566e6SPoul-Henning Kamp		    -G "wheel,operator,dialer" -s /bin/csh -w none
14368d566e6SPoul-Henning Kamp
14468d566e6SPoul-Henning Kamp		chpass -p "\$1\$VcM.9Ow8\$IcXHs0h9jsk27b8N64lOm/" phk
14568d566e6SPoul-Henning Kamp
14668d566e6SPoul-Henning Kamp		sed -i "" -e 's/^DS/DSorigo.freebsd.dk/' /etc/mail/sendmail.cf
14768d566e6SPoul-Henning Kamp		sed -i "" -e '/console/s/^/#/' /etc/syslog.conf
14868d566e6SPoul-Henning Kamp		echo "beastie_disable=YES" >> /boot/loader.conf
14968d566e6SPoul-Henning Kamp		touch /root/.hushlogin
15068d566e6SPoul-Henning Kamp	)
15168d566e6SPoul-Henning Kamp
15268d566e6SPoul-Henning Kamp
153