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