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 16set disk = "ad6" 17 18# For safety this only runs on a CD- or PXE-booted machine 19# 20df / | egrep -q '^(.*cd|.+:)' 21if ( $status > 0 ) then 22 echo "This program formats your disk and you didn't run it from" 23 echo "a CD or NFS boot!" 24 exit 1 25endif 26 27echo "This program formats disk ${disk}! Hit ^C now or its gone." 28foreach i ( 10 9 8 7 6 5 4 3 2 1 ) 29 echo -n " $i" 30 sleep 1 31end 32echo "" 33 34# Unmount any prior mounts on /mnt, reverse order to unwind 35# sub-directory mounts. 36# 37foreach i ( `df | fgrep /mnt | awk '{ print $6; }' | tail -r` ) 38 echo "UMOUNT $i" 39 umount $i 40end 41 42# Set our disk here 43# 44sleep 1 45set echo 46 47# Format and label the disk. 48# 49# 'a' small UFS boot 50# 'd' HAMMER filesystem 51# 52# Use PFSs for backup domain separation 53# 54dd if=/dev/zero of=/dev/${disk} bs=32k count=16 55gpt destroy ${disk} 56gpt create -f ${disk} 57gpt add -i 0 -s 262144 -t efi ${disk} 58gpt add -i 1 -t dragonfly ${disk} 59newfs_msdos -F 32 -c 2 -L EFI -m 0xf8 ${disk}s0 60mount_msdos /dev/${disk}s0 /mnt 61mkdir -p /mnt/EFI/BOOT 62cp /boot/boot1.efi /mnt/EFI/BOOT/BOOTX64.EFI 63umount /mnt 64disklabel64 -r -w ${disk}s1 65disklabel64 -B ${disk}s1 66disklabel64 ${disk}s1 > /tmp/label 67 68cat >> /tmp/label << EOF 69 a: 1g 0 4.2BSD 70 b: 2g * swap 71 d: * * HAMMER 72EOF 73disklabel64 -R ${disk}s1 /tmp/label 74 75# Create file systems 76newfs /dev/${disk}s1a 77newfs_hammer -f -L ROOT /dev/${disk}s1d 78 79# Mount it 80# 81mount_hammer /dev/${disk}s1d /mnt 82mkdir /mnt/boot 83mount /dev/${disk}s1a /mnt/boot 84 85# Create PFS mount points for nullfs. 86# 87# Do the mounts manually so we can install the system, setup 88# the fstab later on. 89mkdir /mnt/pfs 90 91hammer pfs-master /mnt/pfs/usr 92hammer pfs-master /mnt/pfs/usr.obj 93hammer pfs-master /mnt/pfs/var 94hammer pfs-master /mnt/pfs/var.crash 95hammer pfs-master /mnt/pfs/var.tmp 96hammer pfs-master /mnt/pfs/tmp 97hammer pfs-master /mnt/pfs/home 98 99mkdir /mnt/usr 100mkdir /mnt/var 101mkdir /mnt/tmp 102mkdir /mnt/home 103 104mount_null /mnt/pfs/usr /mnt/usr 105mount_null /mnt/pfs/var /mnt/var 106mount_null /mnt/pfs/tmp /mnt/tmp 107mount_null /mnt/pfs/home /mnt/home 108 109mkdir /mnt/usr/obj 110mkdir /mnt/var/tmp 111mkdir /mnt/var/crash 112 113mount_null /mnt/pfs/var.tmp /mnt/var/tmp 114mount_null /mnt/pfs/var.crash /mnt/var/crash 115mount_null /mnt/pfs/usr.obj /mnt/usr/obj 116 117chmod 1777 /mnt/tmp 118chmod 1777 /mnt/var/tmp 119 120# Install the system from the live CD 121# 122cpdup -o / /mnt 123cpdup -o /boot /mnt/boot 124cpdup -o /usr /mnt/usr 125cpdup -o /var /mnt/var 126cpdup -i0 /etc.hdd /mnt/etc 127 128chflags -R nohistory /mnt/tmp 129chflags -R nohistory /mnt/var/tmp 130chflags -R nohistory /mnt/var/crash 131chflags -R nohistory /mnt/usr/obj 132 133# Create some directories to be used for NFS mounts later on. 134# Edit as desired. 135# 136foreach i ( /proc /usr/doc /usr/src /repository /ftp /archive ) 137 if ( ! -d /mnt$i ) then 138 mkdir /mnt$i 139 endif 140end 141 142cat > /mnt/etc/fstab << EOF 143# Device Mountpoint FStype Options Dump Pass# 144/dev/${disk}s1d / hammer rw 1 1 145/dev/${disk}s1a /boot ufs rw 1 1 146/dev/${disk}s1b none swap sw 0 0 147/pfs/usr /usr null rw 0 0 148/pfs/var /var null rw 0 0 149/pfs/tmp /tmp null rw 0 0 150/pfs/home /home null rw 0 0 151/pfs/var.tmp /var/tmp null rw 0 0 152/pfs/usr.obj /usr/obj null rw 0 0 153/pfs/var.crash /var/crash null rw 0 0 154proc /proc procfs rw 0 0 155EOF 156 157# Because root is not on the boot partition we have to tell the loader 158# to tell the kernel where root is. 159# 160cat > /mnt/boot/loader.conf << EOF 161vfs.root.mountfrom="hammer:${disk}s1d" 162EOF 163 164# Setup interface, configuration, sshd 165# 166set ifc = `route -n get default | fgrep interface | awk '{ print $2; }'` 167set ip = `ifconfig $ifc | fgrep inet | fgrep -v inet6 | awk '{ print $2; }'` 168set lip = `echo $ip | awk -F . '{ print $4; }'` 169 170echo -n "ifconfig_$ifc=" >> /mnt/etc/rc.conf 171echo '"DHCP"' >> /mnt/etc/rc.conf 172cat >> /mnt/etc/rc.conf << EOF 173sshd_enable="YES" 174dntpd_enable="YES" 175hostname="test$lip.MYDOMAIN.XXX" 176dumpdev="/dev/${disk}s1b" 177EOF 178 179# Misc sysctls 180# 181cat >> /mnt/etc/sysctl.conf << EOF 182#net.inet.ip.portrange.first=4000 183EOF 184 185# Allow sshd root logins via dsa key only 186# 187fgrep 'PermitRootLogin without-password' /mnt/etc/ssh/sshd_config >& /dev/null 188if ( $?status ) then 189 echo "PermitRootLogin without-password" >> /mnt/etc/ssh/sshd_config 190endif 191 192# additional loader.conf stuff 193#cat >> /mnt/boot/loader.conf << EOF 194#if_nfe_load="YES" 195#EOF 196 197# Get sshd working - auto install my key so I can login. 198# 199#mkdir -p /mnt/root/.ssh 200#cat > /mnt/root/.ssh/authorized_keys << EOF 201#ssh-dss ... 202#EOF 203 204if ( ! -f /mnt/etc/ssh/ssh_host_dsa_key ) then 205 cd /mnt/etc/ssh 206 ssh-keygen -t dsa -f ssh_host_dsa_key -N "" 207endif 208 209# Misc cleanups 210# 211rm -R /mnt/README* /mnt/autorun* /mnt/index.html /mnt/dflybsd.ico 212rm /mnt/boot.catalog 213 214# take CD out and reboot 215# 216