]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/blame - bin/install_script.sh
Make use of LDAP variables to configure node
[perso/Immae/Projets/Puppet.git] / bin / install_script.sh
CommitLineData
ec1096d8
IB
1#!/bin/bash
2
3DIRECTORY=$(cd `dirname $0` && pwd)
4PYTHON_DIRECTORY="$DIRECTORY/../python"
5
6if [ -n "$1" ]; then
7 vps_name="$1"
8else
9 read -p "Nom du vps : " vps_name
10fi
11
12echo "Patienter le temps du reboot"
13python $PYTHON_DIRECTORY/reboot_vps_server.py --rescue "$vps_name"
14
15stty -echo
16read -p "Mot de passe reçu par e-mail : " password; echo
17stty echo
18
19ARCH_DIR=`mktemp -d`
20ARCH_HOST_SCRIPT="$ARCH_DIR/arch_host_script.sh"
21ARCH_CHROOT_SCRIPT="$ARCH_DIR/arch_chroot_script.sh"
22ARCH_INSTALL_SCRIPT="$ARCH_DIR/arch_install_script.sh"
503e4cf5
IB
23ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT="$ARCH_DIR/arch_host_puppet_configuration_script.sh"
24ARCH_PUPPET_CONFIGURATION_SCRIPT="$ARCH_DIR/arch_puppet_configuration_script.sh"
ec1096d8
IB
25
26trap "rm -rf $ARCH_DIR" EXIT
27
503e4cf5 28#### Base installation stage
ec1096d8
IB
29cat > $ARCH_HOST_SCRIPT <<EOF
30#!/bin/bash
31
32apt-get update
33apt-get install -y haveged
34haveged &
35
36cd /tmp
37
38LATEST=\$(curl https://mirrors.kernel.org/archlinux/iso/latest/sha1sums.txt | grep "bootstrap" | head -n1)
39SHA1=\$(echo "\$LATEST" | cut -d' ' -f1)
40NAME=\$(echo "\$LATEST" | cut -d' ' -f3)
41
42curl -O "https://mirrors.kernel.org/archlinux/iso/latest/\$NAME"
43
44tar -xzf "\$NAME"
45
46echo 'Server = http://archlinux.mirrors.ovh.net/archlinux/\$repo/os/\$arch' > /tmp/root.x86_64/etc/pacman.d/mirrorlist
47
48DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/")
49DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1)
50MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2)
51
52umount "\$DEVICE"
53UUID=\$(lsblk -rno UUID "\$DEVICE")
54
55echo "\$UUID" > /tmp/root.x86_64/device_uuid
56
57cp /tmp/arch_chroot_script.sh /tmp/root.x86_64/
58
59/tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ /arch_chroot_script.sh
60
61mount "\$DEVICE"
62
63cp /tmp/arch_install_script.sh "\$MOUNTPOINT/root/"
64
65/tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_install_script.sh
66EOF
67
68
69cat > $ARCH_CHROOT_SCRIPT <<EOF
70#!/bin/bash
71
72pacman-key --init
73pacman-key --populate archlinux
74
75UUID=\$(cat /device_uuid)
76PART="/dev/disk/by-uuid/\$UUID"
77DEVICE=\$(realpath "\$PART")
78
79# mkfs.ext4 -F -U "\$UUID" "\$DEVICE"
80mount "\$DEVICE" /mnt
81
82##### FIXME: mkfs.ext4 would be better ####
83for i in /mnt/*; do
84 if [ "\$i" = "/mnt/boot" ]; then
85 # keep /boot/grub
86 rm -f \$i/*
87 else
88 rm -rf \$i
89 fi
90done
91##### /FIXME ####
92
93pacstrap /mnt base git puppet
94
95echo "\$PART / auto defaults 0 1" > /mnt/etc/fstab
96
97umount /mnt
98EOF
99
100cat > $ARCH_INSTALL_SCRIPT <<EOF
101CODE_PATH="/etc/puppetlabs/code"
102rm -rf \$CODE_PATH
103git clone -b master --recursive https://git.immae.eu/perso/Immae/Projets/Puppet.git \$CODE_PATH
104puppet apply --test \$CODE_PATH/manifests/site.pp
105# The password seed requires puppet to be run twice
106puppet apply --test \$CODE_PATH/manifests/site.pp
107EOF
108
109chmod a+x $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT
110
111expect -f - <<EOF
112set timeout -1
113spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT root@$vps_name:/tmp
114expect "assword:"
115send "$password\n"
116expect eof
117spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_script.sh
118expect "assword:"
119send "$password\r"
120expect eof
121EOF
122
503e4cf5
IB
123### Role specific stage
124read -p "Press key when LDAP is configured" i
125
126cat > $ARCH_PUPPET_CONFIGURATION_SCRIPT <<EOF
127CODE_PATH="/etc/puppetlabs/code"
128puppet apply --test \$CODE_PATH/manifests/site.pp
129EOF
130
131cat > $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT <<EOF
132DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/")
133DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1)
134MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2)
135
136cp /tmp/arch_puppet_configuration_script.sh "\$MOUNTPOINT/root/"
137
138/tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_puppet_configuration_script.sh
139EOF
140
141chmod a+x $ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT
142
143expect -f - <<EOF
144set timeout -1
145spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT root@$vps_name:/tmp
146expect "assword:"
147send "$password\n"
148expect eof
149spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_puppet_configuration_script.sh
150expect "assword:"
151send "$password\r"
152expect eof
153EOF
154
155### Installation finished
ec1096d8
IB
156read -p "Reboot to normal? [Y/n]" reboot
157if [ "x$reboot" != "xn" ]; then
158 echo "Rebooting"
159 python $PYTHON_DIRECTORY/reboot_vps_server.py --local "$vps_name"
160fi