Remove the workaround for the wrong autosizing calculation in disklabel(8).
[dragonfly.git] / share / examples / rconfig / hammer.sh
CommitLineData
62421adc
MD
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#
31927be5 16# $DragonFly: src/share/examples/rconfig/hammer.sh,v 1.4 2008/10/21 14:02:48 swildner Exp $
62421adc
MD
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"
2eca69e6 32 sleep 1
62421adc
MD
33end
34echo ""
62421adc
MD
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
746e387a 61 a: 256m 32 4.2BSD
62421adc 62 b: 2g * swap
b034d49e 63 d: * * HAMMER
62421adc
MD
64EOF
65disklabel -R ${disk}s1 /tmp/label
62421adc
MD
66
67newfs /dev/${disk}s1a
68newfs_hammer -L ROOT /dev/${disk}s1d
69
70# Mount it
71#
72mount_hammer /dev/${disk}s1d /mnt
73mkdir /mnt/boot
74mount /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.
80mkdir /mnt/pfs
81
82hammer pfs-master /mnt/pfs/usr
83hammer pfs-master /mnt/pfs/usr.obj
84hammer pfs-master /mnt/pfs/var
85hammer pfs-master /mnt/pfs/var.crash
86hammer pfs-master /mnt/pfs/var.tmp
87hammer pfs-master /mnt/pfs/tmp
88hammer pfs-master /mnt/pfs/home
89
90mkdir /mnt/usr
91mkdir /mnt/var
92mkdir /mnt/tmp
93mkdir /mnt/home
94
95mount_null /mnt/pfs/usr /mnt/usr
96mount_null /mnt/pfs/var /mnt/var
97mount_null /mnt/pfs/tmp /mnt/tmp
98mount_null /mnt/pfs/home /mnt/home
99
100mkdir /mnt/usr/obj
101mkdir /mnt/var/tmp
102mkdir /mnt/var/crash
103
104mount_null /mnt/pfs/var.tmp /mnt/var/tmp
105mount_null /mnt/pfs/var.crash /mnt/var/crash
106mount_null /mnt/pfs/usr.obj /mnt/usr/obj
107
108chmod 1777 /mnt/tmp
109chmod 1777 /mnt/var/tmp
110
111chflags nohistory /mnt/tmp
112chflags nohistory /mnt/var/tmp
113chflags nohistory /mnt/var/crash
114chflags nohistory /mnt/usr/obj
115
116# Install the system from the live CD
117#
118cpdup -o / /mnt
119cpdup -o /var /mnt/var
120cpdup -o /dev /mnt/dev
121cpdup -i0 /etc.hdd /mnt/etc
122
123# Create some directories to be used for NFS mounts later on.
124# Edit as desired.
125#
126foreach i ( /proc /usr/doc /usr/src /repository /ftp /archive )
127 if ( ! -d /mnt$i ) then
128 mkdir /mnt$i
129 endif
130end
131
132cat > /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
31927be5 136/dev/${disk}s1b none swap sw 0 0
62421adc
MD
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
144proc /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
151EOF
152
1e57ae79
SW
153# Since /boot is a separate partition we need to adjust kern.bootfile
154# to make savecore work properly upon boot.
155#
156cat >> /mnt/etc/sysctl.conf << EOF
157kern.bootfile=/boot/kernel
158EOF
159
62421adc
MD
160# Because root is not on the boot partition we have to tell the loader
161# to tell the kernel where root is.
162#
163cat > /mnt/boot/loader.conf << EOF
164vfs.root.mountfrom="hammer:${disk}s1d"
165EOF
166
167# Setup interface, configuration, sshd
168#
169set ifc = `route -n get default | fgrep interface | awk '{ print $2; }'`
170set ip = `ifconfig $ifc | fgrep inet | fgrep -v inet6 | awk '{ print $2; }'`
171set lip = `echo $ip | awk -F . '{ print $4; }'`
172
173echo -n "ifconfig_$ifc=" >> /mnt/etc/rc.conf
174echo '"DHCP"' >> /mnt/etc/rc.conf
175cat >> /mnt/etc/rc.conf << EOF
176sshd_enable="YES"
177dntpd_enable="YES"
178hostname="test$lip.MYDOMAIN.XXX"
179dumpdev="/dev/${disk}s1b"
180EOF
181
182# Misc sysctls
183#
184cat >> /mnt/etc/sysctl.conf << EOF
185#net.inet.ip.portrange.first=4000
186EOF
187
188# adjust work directory for pkgsrc in case we want
189# to mount /usr/pkgsrc read-only.
190#
191cat >> /mnt/usr/pkg/etc/mk.conf << EOF
192.ifdef BSD_PKG_MK # begin pkgsrc settings
193WRKOBJDIR= /usr/obj/pkgsrc
194.endif # end pkgsrc settings
195EOF
196
62421adc
MD
197# Allow sshd root logins via dsa key only
198#
199fgrep 'PermitRootLogin without-password' /mnt/etc/ssh/sshd_config >& /dev/null
200if ( $?status ) then
201 echo "PermitRootLogin without-password" >> /mnt/etc/ssh/sshd_config
202endif
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
216if ( ! -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 ""
219endif
220
221# take CD out and reboot
222#