blob: 9feca5e604d3b9f35f1e6c9bd2b3df93ea8566c2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/bin/bash -x
{
INSTALL_DRIVE=/dev/sda
PARTITION_BOOT=1
PARTITION_SWAP=2
PARTITION_ROOT=3
LABEL_BOOT=BOOT
LABEL_SWAP=SWAP
LABEL_ROOT=ROOT
MOUNT_PATH=/mnt
GIT_REPO=git://andreasbaumann.dyndns.org/cfenginetests.git
echo "Installing minimalistic base system.."
sgdisk -Z ${INSTALL_DRIVE}
sgdisk -a 2048 -o ${INSTALL_DRIVE}
sgdisk -n ${PARTITION_BOOT}:0:+100M ${INSTALL_DRIVE}
sgdisk -t ${PARTITION_BOOT}:ef02 ${INSTALL_DRIVE}
sgdisk -c ${PARTITION_BOOT}:"${LABEL_BOOT}" ${INSTALL_DRIVE}
sgdisk -n ${PARTITION_SWAP}:0:+900M ${INSTALL_DRIVE}
sgdisk -t ${PARTITION_SWAP}:8200 ${INSTALL_DRIVE}
sgdisk -c ${PARTITION_SWAP}:"${LABEL_SWAP}" ${INSTALL_DRIVE}
sgdisk -n ${PARTITION_ROOT}:0:0 ${INSTALL_DRIVE}
sgdisk -t ${PARTITION_ROOT}:8300 ${INSTALL_DRIVE}
sgdisk -c ${PARTITION_ROOT}:"${LABEL_ROOT}" ${INSTALL_DRIVE}
sgdisk -G ${INSTALL_DRIVE}
mkswap ${INSTALL_DRIVE}${PARTITION_SWAP}
swapon ${INSTALL_DRIVE}${PARTITION_SWAP}
mkfs.ext4 ${INSTALL_DRIVE}${PARTITION_ROOT}
#mkfs.ext4 ${INSTALL_DRIVE}${PARTITION_BOOT}
mkdir -p ${MOUNT_PATH}
mount ${INSTALL_DRIVE}${PARTITION_ROOT} ${MOUNT_PATH}
#mkdir ${MOUNT_PATH}/boot
#mount ${INSTALL_DRIVE}${PARTITION_BOOT} ${MOUNT_PATH}/boot
#export http_proxy=http://192.168.1.12:3128
export no_proxy=localhost,10.0.2.2
# use our local cache
sed -i '/\[core\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf
sed -i '/\[extra\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf
sed -i '/\[community\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf
# switch off signature for now
sed -i 's/^SigLevel.*/SigLevel = Never/g' /etc/pacman.conf
pacstrap ${MOUNT_PATH} filesystem grep findutils coreutils glibc bash pacman mkinitcpio linux dhcpcd systemd
# use our local cache in installed pacman
sed -i '/\[core\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf
sed -i '/\[extra\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf
sed -i '/\[community\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf
# add our local packages into a separate repository
printf "\n[myrepo]\nServer = http://10.0.2.2:8080/\044repo/os/\044arch\n" >> ${MOUNT_PATH}/etc/pacman.conf
# synchronize package databases for installed pacman
arch-chroot ${MOUNT_PATH} pacman -Sy
# switch off signature for now in installed pacman
sed -i 's/^SigLevel.*/SigLevel = Never/g' ${MOUNT_PATH}/etc/pacman.conf
arch-chroot ${MOUNT_PATH} pacman --noconfirm -S grub-bios sed
mkdir ${MOUNT_PATH}/boot/grub/locale/
cp ${MOUNT_PATH}/usr/share/locale/en@quot/LC_MESSAGES/grub.mo ${MOUNT_PATH}/boot/grub/locale/en.mo
# disable quiet mode, set text mode instead of graphical mode
# also ban cirrus KVM
# set correct path of systemd binary (symlink /sbin/init has gone)
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=cirrus init=\/usr\/lib\/systemd\/systemd console=ttyS0,9600n8"/g' ${MOUNT_PATH}/etc/default/grub
sed -i 's/GRUB_GFXMODE=auto/GRUB_GFXMODE=text/g' ${MOUNT_PATH}/etc/default/grub
sed -i 's/GRUB_TERMINAL_INPUT=console/GRUB_TERMINAL_INPUT=serial/g' ${MOUNT_PATH}/etc/default/grub
sed -i 's/#GRUB_TERMINAL_OUTPUT=console/GRUB_TERMINAL_OUTPUT=serial/g' ${MOUNT_PATH}/etc/default/grub
echo 'GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"' >> ${MOUNT_PATH}/etc/default/grub
arch-chroot ${MOUNT_PATH} grub-mkconfig -o /boot/grub/grub.cfg
arch-chroot ${MOUNT_PATH} grub-install --target=i386-pc --recheck ${INSTALL_DRIVE}
genfstab -p ${MOUNT_PATH} >> ${MOUNT_PATH}/etc/fstab
sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' ${MOUNT_PATH}/etc/locale.gen
arch-chroot ${MOUNT_PATH} locale-gen
echo LANG=en_US.UTF-8 > ${MOUNT_PATH}/etc/locale.conf
ln -s /usr/share/zoneinfo/Europe/Zurich ${MOUNT_PATH}/etc/localtime
arch-chroot ${MOUNT_PATH} hwclock --systohc --utc
echo "archiso" > ${MOUNT_PATH}/etc/hostname
arch-chroot ${MOUNT_PATH} systemctl enable dhcpcd@ens3.service
arch-chroot ${MOUNT_PATH} sh -c "echo 'root:123qwe' | chpasswd"
# synchronized time is a requirement, install and configure ntp
# we use a standard NTP server, later we can change that via cfengine
# we don't have a network here (yet, still chrooted)
arch-chroot ${MOUNT_PATH} pacman --noconfirm -S ntp
#while ! ping -c1 0.pool.ntp.org &>/dev/null; do :; done
#arch-chroot ${MOUNT_PATH} ntpdate 0.pool.ntp.org
arch-chroot ${MOUNT_PATH} systemctl enable ntpd.service
# monitord needs netstat
arch-chroot ${MOUNT_PATH} pacman --noconfirm -S net-tools
# we use 'git' to manage our promises
arch-chroot ${MOUNT_PATH} pacman --noconfirm -S git
arch-chroot ${MOUNT_PATH} pacman --noconfirm -S cfengine
# install rules for the machine from git
# no net, must be done as cfengine rule, anyway, rule distribution should
# happen only on generated cfengine masters
#arch-chroot ${MOUNT_PATH} git clone ${GIT_REPO} /srv/cfengine/masterfiles
# enable cfengine
arch-chroot ${MOUNT_PATH} systemctl enable cf-execd.service
arch-chroot ${MOUNT_PATH} systemctl enable cf-monitord.service
arch-chroot ${MOUNT_PATH} systemctl enable cf-serverd.service
# for debugging
#echo "Installation.. press any key to reboot."
#read
echo "Unmounting installation mount points.."
#umount ${MOUNT_PATH}/boot
umount ${MOUNT_PATH}
echo "Done.. Rebooting system.."
sleep 3
systemctl reboot
} 2>&1 | tee -a /dev/ttyS0
|