diff options
Diffstat (limited to 'bin/install_script.sh')
-rwxr-xr-x | bin/install_script.sh | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/bin/install_script.sh b/bin/install_script.sh new file mode 100755 index 0000000..f250285 --- /dev/null +++ b/bin/install_script.sh | |||
@@ -0,0 +1,124 @@ | |||
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 | |||
24 | trap "rm -rf $ARCH_DIR" EXIT | ||
25 | |||
26 | cat > $ARCH_HOST_SCRIPT <<EOF | ||
27 | #!/bin/bash | ||
28 | |||
29 | apt-get update | ||
30 | apt-get install -y haveged | ||
31 | haveged & | ||
32 | |||
33 | cd /tmp | ||
34 | |||
35 | LATEST=\$(curl https://mirrors.kernel.org/archlinux/iso/latest/sha1sums.txt | grep "bootstrap" | head -n1) | ||
36 | SHA1=\$(echo "\$LATEST" | cut -d' ' -f1) | ||
37 | NAME=\$(echo "\$LATEST" | cut -d' ' -f3) | ||
38 | |||
39 | curl -O "https://mirrors.kernel.org/archlinux/iso/latest/\$NAME" | ||
40 | |||
41 | tar -xzf "\$NAME" | ||
42 | |||
43 | echo 'Server = http://archlinux.mirrors.ovh.net/archlinux/\$repo/os/\$arch' > /tmp/root.x86_64/etc/pacman.d/mirrorlist | ||
44 | |||
45 | DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/") | ||
46 | DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1) | ||
47 | MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2) | ||
48 | |||
49 | umount "\$DEVICE" | ||
50 | UUID=\$(lsblk -rno UUID "\$DEVICE") | ||
51 | |||
52 | echo "\$UUID" > /tmp/root.x86_64/device_uuid | ||
53 | |||
54 | cp /tmp/arch_chroot_script.sh /tmp/root.x86_64/ | ||
55 | |||
56 | /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ /arch_chroot_script.sh | ||
57 | |||
58 | mount "\$DEVICE" | ||
59 | |||
60 | cp /tmp/arch_install_script.sh "\$MOUNTPOINT/root/" | ||
61 | |||
62 | /tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_install_script.sh | ||
63 | EOF | ||
64 | |||
65 | |||
66 | cat > $ARCH_CHROOT_SCRIPT <<EOF | ||
67 | #!/bin/bash | ||
68 | |||
69 | pacman-key --init | ||
70 | pacman-key --populate archlinux | ||
71 | |||
72 | UUID=\$(cat /device_uuid) | ||
73 | PART="/dev/disk/by-uuid/\$UUID" | ||
74 | DEVICE=\$(realpath "\$PART") | ||
75 | |||
76 | # mkfs.ext4 -F -U "\$UUID" "\$DEVICE" | ||
77 | mount "\$DEVICE" /mnt | ||
78 | |||
79 | ##### FIXME: mkfs.ext4 would be better #### | ||
80 | for i in /mnt/*; do | ||
81 | if [ "\$i" = "/mnt/boot" ]; then | ||
82 | # keep /boot/grub | ||
83 | rm -f \$i/* | ||
84 | else | ||
85 | rm -rf \$i | ||
86 | fi | ||
87 | done | ||
88 | ##### /FIXME #### | ||
89 | |||
90 | pacstrap /mnt base git puppet | ||
91 | |||
92 | echo "\$PART / auto defaults 0 1" > /mnt/etc/fstab | ||
93 | |||
94 | umount /mnt | ||
95 | EOF | ||
96 | |||
97 | cat > $ARCH_INSTALL_SCRIPT <<EOF | ||
98 | CODE_PATH="/etc/puppetlabs/code" | ||
99 | rm -rf \$CODE_PATH | ||
100 | git clone -b master --recursive https://git.immae.eu/perso/Immae/Projets/Puppet.git \$CODE_PATH | ||
101 | puppet apply --test \$CODE_PATH/manifests/site.pp | ||
102 | # The password seed requires puppet to be run twice | ||
103 | puppet apply --test \$CODE_PATH/manifests/site.pp | ||
104 | EOF | ||
105 | |||
106 | chmod a+x $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT | ||
107 | |||
108 | expect -f - <<EOF | ||
109 | set timeout -1 | ||
110 | 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 | ||
111 | expect "assword:" | ||
112 | send "$password\n" | ||
113 | expect eof | ||
114 | spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_script.sh | ||
115 | expect "assword:" | ||
116 | send "$password\r" | ||
117 | expect eof | ||
118 | EOF | ||
119 | |||
120 | read -p "Reboot to normal? [Y/n]" reboot | ||
121 | if [ "x$reboot" != "xn" ]; then | ||
122 | echo "Rebooting" | ||
123 | python $PYTHON_DIRECTORY/reboot_vps_server.py --local "$vps_name" | ||
124 | fi | ||