blob: 5299f7b36dc8f61807dfff1875e6bee35d3a2a45 (
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
#!/bin/sh
set -Ceu
disk="$1"
mode="$2"
rootpass="$3"
lukspass="$4"
if [ -z "$disk" ]
then
echo 'Please specify a disk.'
exit 1
fi
if [ ! -b "$disk" ]
then
echo 'Specified disk cannot possibly be a disk.'
exit 1
fi
if [ -z "$mode" ]
then
mode='bios'
fi
if [ "$mode" = 'efi']
then
if [ ! -d "$fstab-mode" ]
then
echo 'Please provide your own fstab script.'
exit 1
fi
fi
if ! command -v mkfs.btrfs
then
echo 'BtrFS progs not installed.'
exit 1
fi
if ! command -v zypper
then
echo 'Zypper not installed.'
exit 1
fi
if ! command -v cryptsetup
then
echo 'Cryptsetup not installed.'
exit 1
fi
bios='1'
boot='2'
swap='3'
root='4'
echo 'Wiping your data ...'
fdisk -w always "$disk" < "fdisk-$mode"
echo 'Formatting encrypted partitions ...'
./makeluks.sh "$disk" "$lukspass"
echo 'Creating filesystems ...'
mkfs.btrfs -f "${disk}${boot}"
mkfs.btrfs /dev/mapper/cr_root
echo 'Mount root ...'
mount /dev/mapper/cr_root /mnt
echo 'Creating subvolumes ...'
./makesubvols.sh
btrfs subvolume set-default $(btrfs subvolume list /mnt | grep "@/.snapshots/1/snapshot" | grep -oP '(?<=ID )[0-9]+') /mnt
echo 'Remounting root ...'
umount /mnt
mount /dev/mapper/cr_root /mnt
echo 'Creating directory structure ...'
set -x
mkdir /mnt/.snapshots
mkdir /mnt/home
mkdir /mnt/opt
mkdir /mnt/root
mkdir /mnt/srv
mkdir /mnt/tmp
mkdir /mnt/usr
mkdir /mnt/usr/local
mkdir /mnt/var
set +x
echo 'Mounting subvolumes ...'
./mountsubvols.sh
echo 'Mounting boot ...'
mkdir /mnt/boot
mount "${disk}${boot}" /mnt/boot
mkdir /mnt/boot/grub2
mkdir /mnt/boot/grub2/i386-pc
echo 'Mounting slaves ...'
for dir in proc sys dev run
do
mkdir "/mnt/$dir"
done
mount --types proc /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev
mount --bind /run /mnt/run
mount --make-slave /mnt/run
echo 'Enabling swap partition ...'
mkswap /dev/mapper/cr_swap
swapon /dev/mapper/cr_swap
echo 'Bootstrapping packages ...'
zypper --root /mnt ar --refresh https://download.opensuse.org/distribution/leap/15.4/repo/oss/ OSS
zypper --root /mnt ref
zypper -n --root /mnt in --no-recommends \
kernel-default grub2 zypper vim-small shadow util-linux wicked iputils btrfsprogs openssh-server dmraid openSUSE-release openSUSE-build-key ca-certificates
echo 'Generating fstab ...'
rootuuid="$(blkid -o value -s UUID /dev/mapper/cr_root)"
swapuuid="$(blkid -o value -s UUID /dev/mapper/cr_swap)"
bootuuid="$(blkid -o value -s UUID ${disk}${boot})"
tee /mnt/etc/fstab <<EOF
UUID=$rootuuid / btrfs defaults 0 0
UUID=$bootuuid /boot btrfs defaults 0 0
#UUID=$swapuuid swap swap defaults 0 0
UUID=$rootuuid /.snapshots btrfs subvol=/@/.snapshots 0 0
UUID=$rootuuid /var btrfs subvol=/@/var 0 0
UUID=$rootuuid /usr/local btrfs subvol=/@/usr/local 0 0
UUID=$rootuuid /tmp btrfs subvol=/@/tmp 0 0
UUID=$rootuuid /srv btrfs subvol=/@/srv 0 0
UUID=$rootuuid /root btrfs subvol=/@/root 0 0
UUID=$rootuuid /opt btrfs subvol=/@/opt 0 0
UUID=$rootuuid /home btrfs subvol=/@/home 0 0
EOF
echo 'Generating crypttab ...'
rawswapuuid="$(blkid -o value -s UUID ${disk}${swap})"
tee /mnt/etc/crypttab <<EOF
cr_swap UUID=$rawswapuuid /dev/urandom swap
EOF
echo 'Writing network configuration ...'
tee /mnt/etc/sysconfig/network/ifcfg-eth0 <<EOF
BOOTPROTO=dhcp
STARTMODE=auto
EOF
echo 'Installing bootloader ...'
kernel="$(ls /mnt/lib/modules)"
sed -i -e 's/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="splash=verbose loglevel=3"/' /mnt/etc/default/grub
chroot /mnt <<EOS
dracut '' $kernel
grub2-install $disk
grub2-mkconfig -o /boot/grub2/grub.cfg
echo 'Setting root passphrase ...'
echo 'root:$rootpass' | chpasswd
echo 'Enabling sshd ...'
systemctl enable sshd
EOS
if [ "$mode" = 'efi' ]; then
echo 'Installing shim ...'
chroot /mnt <<EOS
shim-install --config-file=/boot/grub2/grub.cfg
EOS
fi
echo 'Entering chroot for manual tasks ...'
chroot /mnt
echo 'Unmounting ...'
umount -R /mnt
cryptsetup luksClose cr_root
cryptsetup luksClose cr_swap
|