First I go to slicehost and create a machine, they send me a email when it's done (about 5 mins or so).
I have one install script and a syncing script, The install scripts one calls the sync script. After the machine is live I just use the sync one to update it. $hostname is the name or IP address of the new machine.
First I copy SSH authorization over, so I can login without a password (assumes you have created SSH keys already - which is one time event):
ssh root@$hostname "mkdir /root/.ssh; echo \"`cat /root/.ssh/id_dsa.pub`\" > /root/.ssh/authorized_keys2"
Then run various commands on the new machine. I put these in a file "commands.fragment". which contains things like
mkdir /var/www
groupadd -g600 web
chgrp web /var/www
yum -y install iptables ntp
and so on, then run it: cat commands.fragment | ssh root@$hostname
The I run the syncing script (which I'll rerun over the life of the machine)
Then I sync my code across: rsync -avz -e ssh /var/www/ root@$hostname:/var/www/
and programs I've complied: rsync -avz -e ssh /usr/local/ root@$hostname:/usr/local/
and so on.Now we have everything in place we can start the services for whatever the box does, for example to start a web server:
ssh root@$hostname "/sbin/chkconfig --add lighttpd; /etc/init.d/lighttpd start"
And that's it.My script took me a few hours to write and I did so that I can scale up (and down) in a hurry by adding a machine rather than taking the existing machines (there are 2) down whilst slicehost resize it - which is not something I wanted do while there is a lot of traffic coming in. We don't really need multiple machines, but buying one big slice is expensive to have running the whole time.
Hope that helps.