godatadriven / ansible_cluster

Instant Hadoop cluster with Ansible and Cobbler - Just Add Water.
http://www.slideshare.net/godatadriven/bare-metal-hadoop-provisioning
13 stars 6 forks source link

Smart partitioning in kickstart #3

Open jorisbontje opened 11 years ago

jorisbontje commented 11 years ago

@friso says: heb kickstart script gemaakt dat hdd's detecteert en de kleinste als OS disk gebruikt en de rest als data partitie en meteen SSH public key neerzet voor root user.

(doet wel de aanname dat de layout /dev/sda, /dev/sdb, /dev/sdc, etc. is, maar is makkelijk aan te passen; in cobbler zou je dat via een var kunnen doen)

install
url --url http://mirror.widexs.nl/ftp/pub/os/Linux/distr/centos/6/os/x86_64/

# in case of proxy
# url --url http://mirror.widexs.nl/ftp/pub/os/Linux/distr/centos/6/os/x86_64/ --proxy http://proxy-ip:8080/

lang en_US.UTF-8
keyboard us

network --bootproto=dhcp

rootpw cszN4iz]7W?EdMzpp2fh

firewall --disabled
authconfig --enableshadow --passalgo=sha512

selinux --disabled

timezone UTC

bootloader --location=mbr

text
skipx

zerombr
clearpart --all --initlabel
%include /tmp/part-include

auth  --useshadow  --enablemd5
firstboot --disabled
reboot

%packages --ignoremissing --excludedocs
@core
@base
bzip2
ssh
%end

%post
cd /root
mkdir --mode=700 .ssh
cat >> .ssh/authorized_keys << "PUBLIC_KEY"
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzJ/SfkY0xE7Vp0XA7sJMEPV4wYcEoEkxOpSfLCwcOCnMnVsho30jUVM4w6D7smdFglcssaYPxusxj/I6ksKhOouEzZIHlvgOWuTE0g7+ree3pXOCvPnbgpj4OshiIKLzYoJv1Cp69F+z94OPI2IwqcEd+XV33viNgYJStjh6K2PdDSvfzGMyPxwj5iqvHH8QrTix2x5zUabrz1LFrK9qaY2JS+i16Umqi59IugtU52gzE6UaXHRPv4kfC+HVhcsayhByaZtYy9byFUJg0eRTSCReHaNKvfnmY73ERiDArARYHt++WbwFtzgacg3NITiXdK99FPSBrbqIyxngg+N/Gw== friso@fvv
PUBLIC_KEY
chmod 600 .ssh/authorized_keys
%end

%pre
DRIVES=""
SMALLEST=""
MINSIZE=20000000000
for file in /sys/block/sd*; do
  REMOVABLE=$(cat $file/removable)
  if (( $REMOVABLE == 0 )); then
    DRIVES="$DRIVES /dev/$(basename $file)"
    SIZE=$(cat $file/size)
    if [ $SIZE -lt $MINSIZE ]; then
        MINSIZE=$SIZE
        SMALLEST=/dev/$(basename $file)
    fi
  fi
done

n=1
for drive in $DRIVES; do
  if [ $drive == $SMALLEST ]; then
cat << EOF >> /tmp/part-include
part / --fstype="ext4" --grow --ondisk=$drive --size=1
part swap --fstype="swap" --ondisk=$drive --size=512
EOF
  else
cat << EOF >> /tmp/part-include
part /data$n --fstype="ext4" --grow --ondisk=$drive --size=1
EOF
n=$((n+1))
  fi
done
%end
friso commented 11 years ago

The public key should probably also be dynamic (it's probably not a good idea to give my pub key root access to all machines you provision). You could set it through a var if the ks is part of cobbler. You could also fetch it through http(s) using curl.

friso commented 11 years ago

+ bonus points for getting the root password from /dev/urandom and never use it again (cat /dev/urandom | head -c20 | base64).