xref: /dflybsd-src/share/examples/rconfig/hammer.sh (revision 21fcee4d6e84a10a35d21e920106590570511048)
1#!/bin/csh
2#
3# This will format a new machine with a BOOT+HAMMER setup and install
4# the live CD.  You would boot the live CD, dhclient your network up,
5# then run 'rconfig :hammer', assuming you have a rconfig server on the
6# LAN.  Alternately fetch the script from a known location and just run it.
7#
8# ad6s1a will be setup as a small UFS /boot.  ad6s1d will be setup as
9# HAMMER with all remaining disk space.  Pseudo file-systems will be
10# created for /var, /usr, etc (giving them separate inode spaces and
11# backup domains).
12#
13# WARNING: HAMMER filesystems (and pseudo-filesystems) must be
14# occassionally pruned and reblocked.  'man hammer' for more information.
15#
16# $DragonFly: src/share/examples/rconfig/hammer.sh,v 1.4 2008/10/21 14:02:48 swildner Exp $
17
18set disk = "ad6"
19
20# For safety this only runs on a CD-booted machine
21#
22df / | awk '{ print $1; }' | fgrep cd
23if ( $status > 0 ) then
24    echo "This program formats your disk and you didn't run it from"
25    echo "A CD boot!"
26    exit 1
27endif
28
29echo "This program formats disk ${disk}!  Hit ^C now or its gone."
30foreach i ( 10 9 8 7 6 5 4 3 2 1 )
31    echo -n " $i"
32    sleep 1
33end
34echo ""
35
36# Unmount any prior mounts on /mnt, reverse order to unwind
37# sub-directory mounts.
38#
39foreach i ( `df | fgrep /mnt | awk '{ print $6; }' | tail -r` )
40    echo "UMOUNT $i"
41    umount $i
42end
43
44# Set our disk here
45#
46sleep 1
47set echo
48
49# Format and label the disk.
50#
51#	'a' small UFS boot
52#	'd' HAMMER filesystem
53#
54#	Use PFSs for backup domain separation
55#
56fdisk -IB ${disk}
57disklabel -r -w ${disk}s1 auto
58disklabel -B ${disk}s1
59disklabel ${disk}s1 > /tmp/label
60cat >> /tmp/label << EOF
61  a: 256m 32 4.2BSD
62  b: 2g * swap
63  d: 123456 * HAMMER
64EOF
65disklabel -R ${disk}s1 /tmp/label
66disklabel ${disk}s1 | sed -e 's/123456/*/g' > /tmp/label
67disklabel -R ${disk}s1 /tmp/label
68
69newfs /dev/${disk}s1a
70newfs_hammer -L ROOT /dev/${disk}s1d
71
72# Mount it
73#
74mount_hammer /dev/${disk}s1d /mnt
75mkdir /mnt/boot
76mount /dev/${disk}s1a /mnt/boot
77
78# Create PFS mount points for nullfs.
79#
80# Do the mounts manually so we can install the system, setup
81# the fstab later on.
82mkdir /mnt/pfs
83
84hammer pfs-master /mnt/pfs/usr
85hammer pfs-master /mnt/pfs/usr.obj
86hammer pfs-master /mnt/pfs/var
87hammer pfs-master /mnt/pfs/var.crash
88hammer pfs-master /mnt/pfs/var.tmp
89hammer pfs-master /mnt/pfs/tmp
90hammer pfs-master /mnt/pfs/home
91
92mkdir /mnt/usr
93mkdir /mnt/var
94mkdir /mnt/tmp
95mkdir /mnt/home
96
97mount_null /mnt/pfs/usr /mnt/usr
98mount_null /mnt/pfs/var /mnt/var
99mount_null /mnt/pfs/tmp /mnt/tmp
100mount_null /mnt/pfs/home /mnt/home
101
102mkdir /mnt/usr/obj
103mkdir /mnt/var/tmp
104mkdir /mnt/var/crash
105
106mount_null /mnt/pfs/var.tmp /mnt/var/tmp
107mount_null /mnt/pfs/var.crash /mnt/var/crash
108mount_null /mnt/pfs/usr.obj /mnt/usr/obj
109
110chmod 1777 /mnt/tmp
111chmod 1777 /mnt/var/tmp
112
113chflags nohistory /mnt/tmp
114chflags nohistory /mnt/var/tmp
115chflags nohistory /mnt/var/crash
116chflags nohistory /mnt/usr/obj
117
118# Install the system from the live CD
119#
120cpdup -o / /mnt
121cpdup -o /var /mnt/var
122cpdup -o /dev /mnt/dev
123cpdup -i0 /etc.hdd /mnt/etc
124
125# Create some directories to be used for NFS mounts later on.
126# Edit as desired.
127#
128foreach i ( /proc /usr/doc /usr/src /repository /ftp /archive )
129    if ( ! -d /mnt$i ) then
130	mkdir /mnt$i
131    endif
132end
133
134cat > /mnt/etc/fstab << EOF
135# Device		Mountpoint	FStype	Options		Dump	Pass#
136/dev/${disk}s1d		/		hammer	rw		1	1
137/dev/${disk}s1a		/boot		ufs	rw		1	1
138/dev/${disk}s1b		none		swap	sw		0	0
139/pfs/usr		/usr		null	rw		0	0
140/pfs/var		/var		null	rw		0	0
141/pfs/tmp		/tmp		null	rw		0	0
142/pfs/home		/home		null	rw		0	0
143/pfs/var.tmp		/var/tmp	null	rw		0	0
144/pfs/usr.obj		/usr/obj	null	rw		0	0
145/pfs/var.crash		/var/crash	null	rw		0	0
146proc			/proc		procfs	rw		0	0
147# misc NFS mounts to get your test box access to 'stuff'
148#crater:/repository	/repository	nfs	ro,intr,bg	0	0
149#crater:/usr/doc	/usr/doc	nfs	ro,intr,bg	0	0
150#crater:/ftp		/ftp		nfs	ro,intr,bg	0	0
151#crater:/sources/HEAD	/usr/src	nfs	ro,intr,bg	0	0
152#pkgbox:/archive	/archive	nfs	ro,intr,bg	0	0
153EOF
154
155# Since /boot is a separate partition we need to adjust kern.bootfile
156# to make savecore work properly upon boot.
157#
158cat >> /mnt/etc/sysctl.conf << EOF
159kern.bootfile=/boot/kernel
160EOF
161
162# Because root is not on the boot partition we have to tell the loader
163# to tell the kernel where root is.
164#
165cat > /mnt/boot/loader.conf << EOF
166vfs.root.mountfrom="hammer:${disk}s1d"
167EOF
168
169# Setup interface, configuration, sshd
170#
171set ifc = `route -n get default | fgrep interface | awk '{ print $2; }'`
172set ip = `ifconfig $ifc | fgrep inet | fgrep -v inet6 | awk '{ print $2; }'`
173set lip = `echo $ip | awk -F . '{ print $4; }'`
174
175echo -n "ifconfig_$ifc=" >> /mnt/etc/rc.conf
176echo '"DHCP"' >> /mnt/etc/rc.conf
177cat >> /mnt/etc/rc.conf << EOF
178sshd_enable="YES"
179dntpd_enable="YES"
180hostname="test$lip.MYDOMAIN.XXX"
181dumpdev="/dev/${disk}s1b"
182EOF
183
184# Misc sysctls
185#
186cat >> /mnt/etc/sysctl.conf << EOF
187#net.inet.ip.portrange.first=4000
188EOF
189
190# adjust work directory for pkgsrc in case we want
191# to mount /usr/pkgsrc read-only.
192#
193cat >> /mnt/usr/pkg/etc/mk.conf << EOF
194.ifdef BSD_PKG_MK       # begin pkgsrc settings
195WRKOBJDIR=		/usr/obj/pkgsrc
196.endif                  # end pkgsrc settings
197EOF
198
199# Allow sshd root logins via dsa key only
200#
201fgrep 'PermitRootLogin without-password' /mnt/etc/ssh/sshd_config >& /dev/null
202if ( $?status ) then
203    echo "PermitRootLogin without-password" >> /mnt/etc/ssh/sshd_config
204endif
205
206# additional loader.conf stuff
207#cat >> /mnt/boot/loader.conf << EOF
208#if_nfe_load="YES"
209#EOF
210
211# Get sshd working - auto install my key so I can login.
212#
213#mkdir -p /mnt/root/.ssh
214#cat > /mnt/root/.ssh/authorized_keys << EOF
215#ssh-dss ...
216#EOF
217
218if ( ! -f /mnt/etc/ssh/ssh_host_dsa_key ) then
219    cd /mnt/etc/ssh
220    ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
221endif
222
223# take CD out and reboot
224#
225