#!/bin/sh
# Thu Feb 26 22:16:51 MST 2004
# based on Mike Bombich's summary of now to clone:
# http://www.bombich.com/mactips/image.html
# tailored to 2/26/04 state of fs
#
# 1. preflight 	- erase or yet better format target drive
#		- repair permissions on source volume
#		- UNset "ignore priviledges" on both, esp target, volumes
#		  (finder, click drive, file->get info, uncheck lowest box)
#
# 2. backup = clone 
# 	run this script as root = after: sudo -s
#
######### NOT COPIED
# *. root level dir not copied or stubbed: 
#	.Trashes
# d-wx-wx-wt   4 root  admin      136 28 Dec 12:21 .Trashes
#
# *. root level files not copied: 
#	.DS_Store, Macintosh HD, Temporary Items, TheVolumeSettingsFolder,
# -rw-rw-rw-   1 pbg4  staff    12292 26 Feb 21:08 .DS_Store
# -rw-r--r--   1 jar   admin        0 25 Nov 00:18 Macintosh HD
# drwxrwxrwt   3 jar   admin      102  1 Nov 22:09 Temporary Items
# drwxr-xr-x   2 jar   admin       68  1 Nov 22:09 TheVolumeSettingsFolder
#
######### COPIED WITH RSYNC AND PATTERN EXCLUSION
# *. root level dir copied as stubs:
# drwxrwxrwt   7 root  admin      238 26 Feb 21:09 Volumes
# dr--r--r--   2 root  wheel       96 27 Feb 14:37 .vol
#
# *. root level symlinks copied: (Network has transient system stuff)
# drwxr-xr-x   1 root  wheel      512 26 Feb 21:29 Network
# drwxr-xr-x   4 root  admin      136 24 Nov 02:17 automount
# lrwxr-xr-x   1 root  admin       12  5 Jan 19:11 etc -> /private/etc
# lrwxr-xr-x   1 root  admin        9 26 Feb 18:14 mach -> /mach.sym
# lrwxr-xr-x   1 root  admin       22 26 Feb 18:51 mntA -> /automount/static/mntA
# lrwxr-xr-x   1 root  admin       25 26 Feb 18:51 mntroot -> /automount/static/mntroot
# lrwxr-xr-x   1 root  admin       11 24 Nov 01:06 tmp -> private/tmp
# lrwxr-xr-x   1 root  admin       11 24 Nov 01:07 var -> private/var
#
# *. user admin info associated with backup:
# drwxr-xr-x   9 jar   admin      306 26 Feb 21:14 clone-info
#
# *. hidden system files
# -r--r--r--   1 root  wheel      111 11 Jan 13:56 .hidden
# -rw-r--r--   1 root  admin      115 11 Jan 13:56 .hidden.mod1
# -rw-r--r--   1 root  admin      156  9 Jan 21:00 .hidden.orig
# -rw-------   1 root  admin   131072 26 Feb 18:14 .hotfiles.btree
#
# *. system files/dirs without resource forks (unix system stuff):
# drwxr-xr-x  36 root  wheel     1224 25 Jan 00:33 bin
# drwxrwxr-t   2 root  admin       68 12 Sep 13:41 cores
# dr-xr-xr-x   2 root  wheel      512 26 Feb 18:14 dev
# -r--r--r--   1 root  admin   567760 26 Feb 18:14 mach.sym
# -rw-r--r--   1 root  wheel  3824080 11 Dec 17:20 mach_kernel
# drwxr-xr-x   3 root  admin      102 10 Jan 22:03 opt
# drwxr-xr-x   7 root  wheel      238 26 Feb 18:14 private
# drwxr-xr-x  61 root  wheel     2074 23 Feb 16:39 sbin
# drwxr-xr-x  11 root  admin      374 26 Nov 01:31 sw
# drwxr-xr-x  12 root  wheel      408 12 Sep 18:41 usr
#
######### COPIED WITH DITTO 
# (note: ditto copies src-dir CONTENTS to target-dir, not dir to dir = usual;
# rsync behaves normally)
# *. macos system files/dirs which might have resource forks:
# drwxrwxr-x  49 root  admin     1666 23 Feb 16:35 Applications
# drwxrwxr-x  15 root  admin      510  9 Dec 14:39 Applications (Mac OS 9)
# -rw-r--r--   1 root  admin   195584 23 Feb 16:47 Desktop DB
# -rw-r--r--   1 root  admin  1529698 13 Feb 15:25 Desktop DF
# drwxrwxr-x   2 root  admin       68 25 Jul  2003 Desktop Folder
# drwxrwxr-x  13 root  admin      442 23 Dec 00:24 Developer
# drwxrwxr-x   5 root  admin      170 15 Nov 18:32 Documents
# drwxrwxrwx   6 jar   staff      204 12 Dec 20:49 Install_Resources
# drwxrwxr-x  40 root  admin     1360 29 May  2002 Library
# drwxr-xr-x   4 root  wheel      136 14 Feb 22:16 System
# drwxrwxr-x  34 root  admin     1156  6 Dec 17:59 System Folder
# drwxrwxr-t   8 root  admin      272 26 Dec 03:25 Users
#
#
# 3. bless proper folders on cloned drive:
#
#
# 4. may want to change retention/creation of root-level symlinks:
#	mntA, mntroot created by autoloader, at least at root level;
#	pbg4.* == network export probably also created on the fly;
#	mach ->mach.sym - on the fly?
#	create symlinks /etc, /tmp, /var "by hand" at finish of copy
#	perms, ownership off for all above root-level symlinks; 
#	***check target dirs?
#
#	dir/files updated/created at boot/on the fly:
#		dev mach.sym mach Volumes mntroot mntA Network
#		.DS_Store .vol
#	created if absent - re-check this:
#		.hotfiles.btree


ex_rsync1="/clone-info/ex_rsync1"
ex_rsync2="/clone-info/ex_rsync2"

backup_drive="S3"

rsync -avv -H -x --stats --progress --exclude-from=${ex_rsync1} \
  /.vol /Volumes      /Volumes/${backup_drive}/

rsync -avv -H -x --stats --progress --exclude-from=${ex_rsync2} \
  /private     /Volumes/${backup_drive}/

rsync -avv -H -x --stats --progress  \
  /Network /automount /etc /mach /mntA /mntroot /tmp /var \
  /dev /mach.sym \
  /clone-info \
  /.hotfiles.btree /.hidden /.hidden.mod1 /.hidden.orig \
  /bin /cores /mach_kernel /opt \
  /sbin /sw /usr \
/Volumes/${backup_drive}/

ditto --rsrc -V -X "/Applications" "/Volumes/${backup_drive}/Applications"
ditto --rsrc -V -X "/Applications (Mac OS 9)" "/Volumes/${backup_drive}/Applications (Mac OS 9)"
ditto --rsrc -V -X "/Desktop DB" "/Volumes/${backup_drive}/Desktop DB" 
ditto --rsrc -V -X "/Desktop DF" "/Volumes/${backup_drive}/Desktop DF"
ditto --rsrc -V -X "/Desktop Folder" "/Volumes/${backup_drive}/Desktop Folder"
ditto --rsrc -V -X "/Developer" "/Volumes/${backup_drive}/Developer"
ditto --rsrc -V -X "/Documents" "/Volumes/${backup_drive}/Documents"
ditto --rsrc -V -X "/Install_Resources" "/Volumes/${backup_drive}/Install_Resources"
ditto --rsrc -V -X "/Library" "/Volumes/${backup_drive}/Library"
ditto --rsrc -V -X "/System" "/Volumes/${backup_drive}/System"
ditto --rsrc -V -X "/System Folder" "/Volumes/${backup_drive}/System Folder"
ditto --rsrc -V -X "/Users" "/Volumes/${backup_drive}/Users"

bless -folder /Volumes/${backup_drive}/System/Library/CoreServices \
-bootinfo /usr/standalone/ppc/bootx.bootinfo
bless -folder9 /Volumes/${backup_drive}/System\ Folder -bootBlocks

# think about...
# alter script above:
#	remove 1st rsync src-dir/file = /.vol /Volumes
#	change file /clone-info/ex_rsync2 to contain only patterns:
#		automount/*
#		+ automount
#	delete line 1+2 of src-dirs from 3rd rsync = /Network ... + /dev ...
#
# add at end of script = uncomment following:
# cd /Volumes/${backup_drive}
# ln -s private/etc etc
# ln -s private/tmp tmp
# ln -s private/var var
# mkdir dev Volumes Network .vol automount
