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.
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
13 # WARNING: HAMMER filesystems (and pseudo-filesystems) must be
14 # occassionally pruned and reblocked. 'man hammer' for more information.
16 # $DragonFly: src/share/examples/rconfig/hammer.sh,v 1.4 2008/10/21 14:02:48 swildner Exp $
20 # For safety this only runs on a CD-booted machine
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"
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 )
36 # Unmount any prior mounts on /mnt, reverse order to unwind
37 # sub-directory mounts.
39 foreach i
( `df | fgrep /mnt | awk '{ print $6; }' | tail -r` )
49 # Format and label the disk.
52 # 'd' HAMMER filesystem
54 # Use PFSs for backup domain separation
56 dd if=/dev
/zero of
=/dev
/${disk} bs
=32k count
=16
58 disklabel
-r -w ${disk}s1 auto
59 disklabel
-B ${disk}s1
60 disklabel
${disk}s1
> /tmp
/label
61 cat >> /tmp
/label
<< EOF
66 disklabel
-R ${disk}s1
/tmp
/label
69 newfs_hammer
-L ROOT
/dev
/${disk}s1d
73 mount_hammer
/dev
/${disk}s1d
/mnt
75 mount
/dev
/${disk}s1a
/mnt
/boot
77 # Create PFS mount points for nullfs.
79 # Do the mounts manually so we can install the system, setup
83 hammer pfs-master
/mnt
/pfs
/usr
84 hammer pfs-master
/mnt
/pfs
/usr.obj
85 hammer pfs-master
/mnt
/pfs
/var
86 hammer pfs-master
/mnt
/pfs
/var.crash
87 hammer pfs-master
/mnt
/pfs
/var.tmp
88 hammer pfs-master
/mnt
/pfs
/tmp
89 hammer pfs-master
/mnt
/pfs
/home
96 mount_null
/mnt
/pfs
/usr
/mnt
/usr
97 mount_null
/mnt
/pfs
/var
/mnt
/var
98 mount_null
/mnt
/pfs
/tmp
/mnt
/tmp
99 mount_null
/mnt
/pfs
/home
/mnt
/home
105 mount_null
/mnt
/pfs
/var.tmp
/mnt
/var
/tmp
106 mount_null
/mnt
/pfs
/var.crash
/mnt
/var
/crash
107 mount_null
/mnt
/pfs
/usr.obj
/mnt
/usr
/obj
110 chmod 1777 /mnt
/var
/tmp
112 chflags nohistory
/mnt
/tmp
113 chflags nohistory
/mnt
/var
/tmp
114 chflags nohistory
/mnt
/var
/crash
115 chflags nohistory
/mnt
/usr
/obj
117 # Install the system from the live CD
120 cpdup
-o /boot
/mnt
/boot
121 cpdup
-o /usr
/mnt
/usr
122 cpdup
-o /var
/mnt
/var
123 cpdup
-o /dev
/mnt
/dev
124 cpdup
-i0 /etc.hdd
/mnt
/etc
126 # Create some directories to be used for NFS mounts later on.
129 foreach i
( /proc
/usr
/doc
/usr
/src
/repository
/ftp /archive
)
130 if ( ! -d /mnt
$i ) then
135 cat > /mnt
/etc
/fstab
<< EOF
136 # Device Mountpoint FStype Options Dump Pass#
137 /dev/${disk}s1d / hammer rw 1 1
138 /dev/${disk}s1a /boot ufs rw 1 1
139 /dev/${disk}s1b none swap sw 0 0
140 /pfs/usr /usr null rw 0 0
141 /pfs/var /var null rw 0 0
142 /pfs/tmp /tmp null rw 0 0
143 /pfs/home /home null rw 0 0
144 /pfs/var.tmp /var/tmp null rw 0 0
145 /pfs/usr.obj /usr/obj null rw 0 0
146 /pfs/var.crash /var/crash null rw 0 0
147 proc /proc procfs rw 0 0
148 # misc NFS mounts to get your test box access to 'stuff'
149 #crater:/repository /repository nfs ro,intr,bg 0 0
150 #crater:/usr/doc /usr/doc nfs ro,intr,bg 0 0
151 #crater:/ftp /ftp nfs ro,intr,bg 0 0
152 #crater:/sources/HEAD /usr/src nfs ro,intr,bg 0 0
153 #pkgbox:/archive /archive nfs ro,intr,bg 0 0
156 # Because root is not on the boot partition we have to tell the loader
157 # to tell the kernel where root is.
159 cat > /mnt
/boot
/loader.conf
<< EOF
160 vfs.root.mountfrom="hammer:${disk}s1d"
163 # Setup interface, configuration, sshd
165 set ifc
= `route -n get default | fgrep interface | awk '{ print $2; }'`
166 set ip
= `ifconfig $ifc | fgrep inet | fgrep -v inet6 | awk '{ print $2; }'`
167 set lip
= `echo $ip | awk -F . '{ print $4; }'`
169 echo -n "ifconfig_$ifc=" >> /mnt
/etc
/rc.conf
170 echo '"DHCP"' >> /mnt
/etc
/rc.conf
171 cat >> /mnt
/etc
/rc.conf
<< EOF
174 hostname="test$lip.MYDOMAIN.XXX"
175 dumpdev="/dev/${disk}s1b"
180 cat >> /mnt
/etc
/sysctl.conf
<< EOF
181 #net.inet.ip.portrange.first=4000
184 # adjust work directory for pkgsrc in case we want
185 # to mount /usr/pkgsrc read-only.
187 cat >> /mnt
/usr
/pkg
/etc
/mk.conf
<< EOF
188 .ifdef BSD_PKG_MK # begin pkgsrc settings
189 WRKOBJDIR= /usr/obj/pkgsrc
190 .endif # end pkgsrc settings
193 # Allow sshd root logins via dsa key only
195 fgrep
'PermitRootLogin without-password' /mnt
/etc
/ssh
/sshd_config
>& /dev
/null
197 echo "PermitRootLogin without-password" >> /mnt
/etc
/ssh
/sshd_config
200 # additional loader.conf stuff
201 #cat >> /mnt/boot/loader.conf << EOF
205 # Get sshd working - auto install my key so I can login.
207 #mkdir -p /mnt/root/.ssh
208 #cat > /mnt/root/.ssh/authorized_keys << EOF
212 if ( ! -f /mnt
/etc
/ssh
/ssh_host_dsa_key
) then
214 ssh-keygen
-t dsa
-f ssh_host_dsa_key
-N ""
217 # take CD out and reboot