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