3 DIRECTORY
=$(cd `dirname $0` && pwd)
4 PYTHON_DIRECTORY
="$DIRECTORY/../python"
9 read -p "Nom du vps : " vps_name
12 echo "Patienter le temps du reboot"
13 python
$PYTHON_DIRECTORY/reboot_vps_server.py
--rescue "$vps_name"
16 read -p "Mot de passe reçu par e-mail : " password
; echo
20 ARCH_HOST_SCRIPT
="$ARCH_DIR/arch_host_script.sh"
21 ARCH_CHROOT_SCRIPT
="$ARCH_DIR/arch_chroot_script.sh"
22 ARCH_INSTALL_SCRIPT
="$ARCH_DIR/arch_install_script.sh"
23 ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT
="$ARCH_DIR/arch_host_puppet_configuration_script.sh"
24 ARCH_PUPPET_CONFIGURATION_SCRIPT
="$ARCH_DIR/arch_puppet_configuration_script.sh"
26 trap "rm -rf $ARCH_DIR" EXIT
28 #### Base installation stage
29 cat > $ARCH_HOST_SCRIPT <<EOF
33 apt-get install -y haveged
38 LATEST=\$(curl https://mirrors.kernel.org/archlinux/iso/latest/sha1sums.txt | grep "bootstrap" | head -n1)
39 SHA1=\$(echo "\$LATEST" | cut -d' ' -f1)
40 NAME=\$(echo "\$LATEST" | cut -d' ' -f3)
42 curl -O "https://mirrors.kernel.org/archlinux/iso/latest/\$NAME"
46 echo 'Server = http://archlinux.mirrors.ovh.net/archlinux/\$repo/os/\$arch' > /tmp/root.x86_64/etc/pacman.d/mirrorlist
48 DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/")
49 DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1)
50 MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2)
53 UUID=\$(lsblk -rno UUID "\$DEVICE")
55 echo "\$UUID" > /tmp/root.x86_64/device_uuid
57 cp /tmp/arch_chroot_script.sh /tmp/root.x86_64/
59 /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ /arch_chroot_script.sh
63 cp /tmp/arch_install_script.sh "\$MOUNTPOINT/root/"
65 /tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_install_script.sh
69 cat > $ARCH_CHROOT_SCRIPT <<EOF
73 pacman-key --populate archlinux
75 UUID=\$(cat /device_uuid)
76 PART="/dev/disk/by-uuid/\$UUID"
77 DEVICE=\$(realpath "\$PART")
79 # mkfs.ext4 -F -U "\$UUID" "\$DEVICE"
82 ##### FIXME: mkfs.ext4 would be better ####
84 if [ "\$i" = "/mnt/boot" ]; then
93 pacstrap /mnt base git puppet
95 echo "\$PART / auto defaults 0 1" > /mnt/etc/fstab
100 cat > $ARCH_INSTALL_SCRIPT <<EOF
101 CODE_PATH="/etc/puppetlabs/code"
103 git clone -b master --recursive https://git.immae.eu/perso/Immae/Projets/Puppet.git \$CODE_PATH
104 puppet apply --test \$CODE_PATH/manifests/site.pp
105 # The password seed requires puppet to be run twice
106 puppet apply --test \$CODE_PATH/manifests/site.pp
109 chmod a
+x
$ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT
113 spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT root@$vps_name:/tmp
117 spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_script.sh
123 ### Role specific stage
124 read -p "Press key when LDAP is configured" i
126 cat > $ARCH_PUPPET_CONFIGURATION_SCRIPT <<EOF
127 CODE_PATH="/etc/puppetlabs/code"
128 puppet apply --test \$CODE_PATH/manifests/site.pp
131 cat > $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT <<EOF
132 DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/")
133 DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1)
134 MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2)
136 cp /tmp/arch_puppet_configuration_script.sh "\$MOUNTPOINT/root/"
138 /tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_puppet_configuration_script.sh
141 chmod a
+x
$ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT
145 spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT root@$vps_name:/tmp
149 spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_puppet_configuration_script.sh
155 ### Installation finished
156 read -p "Reboot to normal? [Y/n]" reboot
157 if [ "x$reboot" != "xn" ]; then
159 python
$PYTHON_DIRECTORY/reboot_vps_server.py
--local "$vps_name"