Remote Install

Matthew Dillon dillon at apollo.backplane.com
Fri Jun 15 11:28:42 PDT 2007


:Hi guys, me again!
:
:Is there currently a way to install over ssh, or a way of hacking the
:installer to do so? I have sshd etc starting boot which is all fine,
:however obviously the installer wants a real console.  Alternatively,
:can someone point me towards a good guide for scripting it?
:
:Thanks,
:-- 
:Joe Holden
:T: (UK) 02071009593 (AU) 282442321
:E: joe at joeholden.co.uk

    The installer has numerous installation mechanisms but ssh isn't one
    of them.  I've never used anything but the console installer so I
    just don't know how the other methods operate.

    There is also rconfig, which basically allows you to script the
    install.  The idea is that you maintain the rconfig script(s) on
    a server and run rconfig in server mode on that machine.

    On the client you boot with the ISO, login as root, configure your
    network (e.g. by doing 'dhclient em0' or whatever), then run rconfig -a.
    The client finds the rconfig server, downloads the script, and runs it.

    I haven't done this in a while so this script may be out of date.
    You'd have to experiment with it.  I suggest setting up rconfig and
    playing around.  What I like about rconfig is that it is really easy
    to test scripts... since you are booting from the CD, and the script
    is stored on the server, you just rconfig -a, check the results, mess
    around with the script on the server, and rconfig -a again until you
    have it right.

					-Matt
					Matthew Dillon 
					<dillon at backplane.com>

#!/bin/csh
#
# A file like this is typically copied to /usr/local/etc/rconfig/auto.sh on
# the rconfig server and the rconfig demon is run via 'rconfig -s -a'.  When
# you boot the DragonFly CD you have to bring up the network, typically
# via 'dhclient interfacename', then run 'rconfig -a' or 
# 'rconfig -a ip_of_server' if the server is not on the same LAN.
#
# WARNING!  THIS SCRIPT WILL COMPLETELY WIPE THE DISK!

set disk = ad0
set slice = s1
set xdisk = $disk$slice

# Refuse to do anything if the machine wasn't booted from CD
#
set cdboot = 0
foreach i ( `df / | awk '{ print $1; }'` )
    if ( $i =~ acd* ) then
	set cdboot = 1
    endif
end

if ( $cdboot == 0 ) then
    echo "Aborting auto init script, machine was not booted from CD"
    exit 1
endif

# Wipe the disk entirely
#

echo "FDISK - ALL DATA ON THE DRIVE WILL BE LOST"
foreach i ( 5 4 3 2 1 )
    echo -n " $i"
    sleep 1
end

dd if=/dev/zero of=/dev/$disk bs=32k count=16
fdisk -IB $disk
boot0cfg -B $disk
boot0cfg -v $disk
dd if=/dev/zero of=/dev/$xdisk bs=32k count=16

echo "DISKLABEL"
sleep 1

disklabel -B -r -w $xdisk auto
disklabel $xdisk > /tmp/disklabel.$xdisk
cat >> /tmp/disklabel.$xdisk << EOF
a: 256m * 4.2BSD
b: 1024m * swap
d: 256m * 4.2BSD
e: 256m * 4.2BSD
f: 6144m * 4.2BSD
g: * * 4.2BSD
EOF
disklabel -R $xdisk /tmp/disklabel.$xdisk
disklabel $xdisk

echo "NEWFS"
sleep 1

newfs /dev/${xdisk}a
newfs -U /dev/${xdisk}d
newfs -U /dev/${xdisk}e
newfs -U /dev/${xdisk}f
newfs -U /dev/${xdisk}g

echo "MOUNT"
sleep 1

mount /dev/${xdisk}a /mnt
mkdir /mnt/var
mkdir /mnt/tmp
mkdir /mnt/usr
mkdir /mnt/home

mount /dev/${xdisk}d /mnt/var
mount /dev/${xdisk}e /mnt/tmp
mount /dev/${xdisk}f /mnt/usr
mount /dev/${xdisk}g /mnt/home

echo "CPDUP ROOT"
cpdup / /mnt
echo "CPDUP VAR"
cpdup /var /mnt/var
echo "CPDUP ETC"
cpdup /etc /mnt/etc
echo "CPDUP DEV"
cpdup /dev /mnt/dev
echo "CPDUP USR"
cpdup /usr /mnt/usr

echo "CLEANUP"
chmod 1777 /mnt/tmp
rm -rf /mnt/var/tmp
ln -s /tmp /mnt/var/tmp

cpdup /mnt/var/crash /mnt/usr/var.crash
rm -rf /mnt/var/crash
ln -s /usr/var.crash /mnt/var/crash

cat >/mnt/etc/fstab << EOF
# Example fstab based on /README.
#
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/${xdisk}a		/		ufs	rw		1	1
/dev/${xdisk}b		none		swap	sw		0	0
/dev/${xdisk}d		/var		ufs	rw		2	2
/dev/${xdisk}e		/tmp		ufs	rw		2	2
/dev/${xdisk}f		/usr		ufs	rw		2	2
/dev/${xdisk}g		/home		ufs	rw		2	2
proc			/proc		procfs	rw		0	0
# example MFS remount (for a pristine MFS filesystem do not use -C)
#swap			/mnt		mfs	rw,-C,-s=4000	0	0
EOF

cat >/mnt/etc/rc.conf << EOF
ifconfig_em0="DHCP"
sshd_enable="YES"
usbd_enable="YES"
sendmail_enable="NONE"
dumpdev="/dev/${xdisk}b"
EOF

if ( ! -d /mnt/root/.ssh ) then
    mkdir /mnt/root/.ssh
endif
cat > /mnt/root/.ssh/authorized_keys << EOF
ssh-dss ... put your SSH public keys here ...
EOF

# Allow public-key-only access to the root account
#
sed -e 's/#PermitRootLogin no/PermitRootLogin without-password/' < /mnt/etc/ssh/sshd_config > /mnt/etc/ssh/sshd_config.new
mv -f /mnt/etc/ssh/sshd_config.new /mnt/etc/ssh/sshd_config






More information about the Users mailing list