1$FreeBSD$ 2 3About sysbuild.sh 4================= 5 6I have been running -current on my laptop since before FreeBSD 2.0 was 7released and along the way developed this little trick to making the 8task easier. 9 10sysbuild.sh is a way to build a new FreeBSD system on a computer from 11a specification, while leaving the current installation intact. 12 13sysbuild.sh assume you have two partitions that can hold your rootfs 14and can be booted, and roughly speaking, all it does is build a new 15system into the one you don't use, from the one you do use. 16 17A partition named /freebsd is assumed to be part of your layout, and 18that is where the sources and ports will be found. 19 20If you know how nanobsd works, you will find a lot of similarity. 21 22HOWTO 23===== 24 25In all likelihood, it is easier if we imagine you start with a blank 26computer. 27 28Grab a FreeBSD install ISO and boot it. 29 30Create four disk slices: 31 32 ad0s1 = 5GB 33 ad0s2 = 5GB 34 ad0s3 = 5GB 35 ad0s4 = the rest 36 37Create a root filesystem in s1a filling the entire ad0s1 slice. 38 39Create a swap partition, if you want one, in ad0s4b. 40 41Install the boot0 bootmanager. 42 43Install the "Minimal" FreeBSD system into ad0s1a. 44 45Reboot from the newly installed system. 46 47Run these commands to set up the other partitions sysbuild.sh cares about: 48 49 # /freebsd filesystem 50 newfs -b 4096 -f 512 -O2 -U /dev/ad0s3 51 echo "/dev/ad0s3 /freebsd ufs rw 2 2" >> /etc/fstab 52 mkdir /freebsd 53 mount /freebsd 54 55 # deputy rootfilesystem 56 bsdlabel -B -w /dev/ad0s2 57 newfs -O2 -U /dev/ad0s2a 58 59Next, install ports and sources: 60 61 cd /usr 62 rm -rf ports src 63 ln -s /freebsd/src 64 ln -s /freebsd/ports 65 cd /freebsd 66 mkdir ports src packages 67 68 # Or use svn if you prefer 69 csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/ports-supfile 70 csup -h cvsup.???.freebsd.org /usr/share/examples/cvsup/stable-supfile 71 72And we should be ready to try a shot: 73 74 cd /root 75 cp /usr/src/tools/tools/sysbuild/sysbuild.sh . 76 sh sysbuild.sh |& tee _.sb 77 78If it succeeds, you should be able to: 79 80 boot0cfg -s 2 -v /dev/ad0 81 reboot 82 83And come up with your newly built system. 84 85 Next time you want a new system, you just run sysbuild.sh again 86 and boot slice 1 when it's done. 87 88TWEAKS 89====== 90 91The sysbuild.sh script takes various parameters: 92 93 -c specfile # configure stuff, see below. 94 -w # skip buildworld, assume it was done earlier. 95 -k # skip buildkernel, ---//--- 96 -b # skip both buildworld & buildkernel 97 -p # install cached packacges if found. 98 99The specfile is a shellscript where you can override or set a number of 100shell variables and functions. 101 102A partial example: 103 104 # use a kernel different from GENERIC 105 KERNCONF=SMP 106 107 # Cache built packages, so we can use -p 108 PKG_DIR=/freebsd/packages 109 110 # Mount ports distfiles from another machine 111 REMOTEDISTFILES=fs:/rdonly/distfiles 112 113 # Fetch distfiles through a proxy 114 FTP_PROXY=http://127.0.0.1:3128/ 115 HTTP_PROXY=http://127.0.0.1:3128/ 116 export FTP_PROXY HTTP_PROXY 117 118 # We want these ports 119 PORTS_WE_WANT=' 120 /usr/ports/archivers/unzip 121 /usr/ports/archivers/zip 122 /usr/ports/cad/linux-eagle 123 /usr/ports/comms/lrzsz 124 /usr/ports/databases/rrdtool 125 /usr/ports/devel/subversion-freebsd 126 ' 127 128 # Files to move over 129 CONFIGFILES=' 130 /root/.ssh 131 /etc/X11/xorg.conf 132 /etc/ssh/ssh_host* 133 /etc/rc.conf 134 /etc/rc.local 135 ' 136 137 # Shell functions to tweak things 138 # (This makes commits to /etc mostly painless) 139 final_chroot() ( 140 chpass -p "\$1\$IgMjWs2L\$Nu12OCsjfiwHHj0I7TmUN1" root 141 142 pw useradd phk -u 488 -d /home/phk -c "Poul-Henning Kamp" \ 143 -G "wheel,operator,dialer" -s /bin/csh -w none 144 145 chpass -p "\$1\$VcM.9Ow8\$IcXHs0h9jsk27b8N64lOm/" phk 146 147 sed -i "" -e 's/^DS/DSorigo.freebsd.dk/' /etc/mail/sendmail.cf 148 sed -i "" -e '/console/s/^/#/' /etc/syslog.conf 149 echo "beastie_disable=YES" >> /boot/loader.conf 150 touch /root/.hushlogin 151 ) 152 153 154