-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbootstrap.sh
More file actions
executable file
·233 lines (203 loc) · 8.67 KB
/
bootstrap.sh
File metadata and controls
executable file
·233 lines (203 loc) · 8.67 KB
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#!/bin/bash
#CRBL_INITIALIZE
#CRBL_HEADLESS
set -ex
if [ -z "$1" ]; then
echo "$0 TARGET"
exit 1
fi
CRBL_TARGET="$1"
if [ -z "$CRBL_HEADLESS" ]; then
CRBL_IMAGE_SIZE_GB=5
else
CRBL_IMAGE_SIZE_GB=2
fi
if [ -z "$CRBL_INITIALIZE" ]; then
if [ ! -e "$CRBL_TARGET" ]; then
echo "TARGET $1 does not exist."
exit 1
fi
elif [ ! -e "$CRBL_TARGET" ]; then
truncate -s ${CRBL_IMAGE_SIZE_GB}G $CRBL_TARGET
fi
. traps.sh
traps_start
if [ -f "$CRBL_TARGET" ]; then
CRBL_TARGET=$(sudo losetup --show -f "$CRBL_TARGET")
traps_push sudo losetup -d "$CRBL_TARGET"
CRBL_LOOP_DEV=1
fi
CRBL_DISTRO=debian
CRBL_DEB_SUITE=bookworm
CRBL_ARCH=arm64
CRBL_PART_KERN_A=1
CRBL_PART_KERN_B=2
CRBL_PART_BOOT=3
CRBL_PART_ROOT=4
CRBL_PART_SIZE_OFFSET=4
CRBL_PART_SIZE_KERN_A=62
CRBL_PART_SIZE_KERN_B=62
CRBL_PART_SIZE_BOOT=$((512-CRBL_PART_SIZE_OFFSET-CRBL_PART_SIZE_KERN_A-CRBL_PART_SIZE_KERN_B))
CRBL_PART_SIZE_ROOT=$(((CRBL_IMAGE_SIZE_GB-1)*1024+512))
CRBL_PART_LABEL_KERN_A="KERN-A"
CRBL_PART_LABEL_KERN_B="KERN-B"
CRBL_PART_LABEL_BOOT="BOOT"
CRBL_PART_LABEL_ROOT="ROOT"
CRBL_TMP_DIR=$(mktemp -d)
CRBL_PART_MP_ROOT=$CRBL_TMP_DIR/root
CRBL_PART_MP_BOOT=$CRBL_PART_MP_BOOT/boot/EFI
CRBL_DIR_LINUX=$PWD/linux
CRBL_DIR_LINUX_FW=$PWD/linux-firmware
if [ -z "$CRBL_DEPTHCHARGE_COMP" ]; then
CRBL_DEPTHCHARGE_COMP=lzma
fi
CRBL_PART_PREFIX=
CRBL_PART_ALT_SCAN=
if [ "${CRBL_TARGET:5:6}" = "mmcblk" ]; then
CRBL_PART_PREFIX=p
CRBL_PART_ALT_SCAN=1
elif [ "${CRBL_TARGET:5:4}" = "nvme" ]; then
CRBL_PART_PREFIX=p
elif [ "${CRBL_TARGET:5:4}" = "loop" ]; then
CRBL_PART_PREFIX=p
CRBL_PART_ALT_SCAN=1
fi
if [ -z "$CRBL_PART_ALT_SCAN" ]; then
DISK_SEC_SIZE=$(blockdev --getss "$CRBL_TARGET")
else
DISK_SEC_SIZE=512
fi
DISK_SEC_PER_MB=$((1024*1024/DISK_SEC_SIZE))
DISK_GPT_SIZE=$((32*1024/DISK_SEC_SIZE))
if [ -z "$CRBL_INITIALIZE" ]; then
if [ -z "$CRBL_PART_ALT_SCAN" ]; then
sudo blockdev --rereadpt "$CRBL_TARGET"
else
sudo partprobe "$CRBL_TARGET"
fi
else
sudo cgpt create "$CRBL_TARGET"
sudo cgpt add -i $CRBL_PART_KERN_A -b $((CRBL_PART_SIZE_OFFSET*DISK_SEC_PER_MB)) -s $((CRBL_PART_SIZE_KERN_A*DISK_SEC_PER_MB)) -t kernel -l "$CRBL_PART_LABEL_KERN_A" "$CRBL_TARGET"
CRBL_PART_SIZE_OFFSET=$((CRBL_PART_SIZE_OFFSET+CRBL_PART_SIZE_KERN_A))
sudo cgpt add -i $CRBL_PART_KERN_B -b $((CRBL_PART_SIZE_OFFSET*DISK_SEC_PER_MB)) -s $((CRBL_PART_SIZE_KERN_B*DISK_SEC_PER_MB)) -t kernel -l "$CRBL_PART_LABEL_KERN_B" "$CRBL_TARGET"
CRBL_PART_SIZE_OFFSET=$((CRBL_PART_SIZE_OFFSET+CRBL_PART_SIZE_KERN_B))
sudo cgpt add -i $CRBL_PART_BOOT -b $((CRBL_PART_SIZE_OFFSET*DISK_SEC_PER_MB)) -s $((CRBL_PART_SIZE_BOOT*DISK_SEC_PER_MB)) -t efi -l "$CRBL_PART_LABEL_BOOT" "$CRBL_TARGET"
CRBL_PART_SIZE_OFFSET=$((CRBL_PART_SIZE_OFFSET+CRBL_PART_SIZE_BOOT))
sudo cgpt add -i $CRBL_PART_ROOT -b $((CRBL_PART_SIZE_OFFSET*DISK_SEC_PER_MB)) -s $((CRBL_PART_SIZE_ROOT*DISK_SEC_PER_MB-DISK_GPT_SIZE)) -t data -l "$CRBL_PART_LABEL_ROOT" "$CRBL_TARGET"
sudo cgpt boot -i $CRBL_PART_BOOT -p "$CRBL_TARGET"
if [ -z "$CRBL_PART_ALT_SCAN" ]; then
sudo blockdev --rereadpt "$CRBL_TARGET"
else
sudo partprobe "$CRBL_TARGET"
fi
sudo mkfs.vfat -F 32 -n "$CRBL_PART_LABEL_BOOT" "$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_BOOT"
sudo mkfs.btrfs -L "$CRBL_PART_LABEL_ROOT" -f "$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_ROOT"
fi
#BTRFS ROOT AND BOOT
mkdir -p "$CRBL_PART_MP_ROOT"
sudo mount -o noatime,compress=zstd "$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_ROOT" "$CRBL_PART_MP_ROOT"
traps_push sudo umount "$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_ROOT"
if sudo btrfs subvolume get-default "$CRBL_PART_MP_ROOT" | grep FS_TREE > /dev/null; then
sudo btrfs subvolume create "$CRBL_PART_MP_ROOT/@"
sudo btrfs subvolume set-default "$CRBL_PART_MP_ROOT/@"
sudo umount "$CRBL_PART_MP_ROOT"
sudo mount -o noatime,compress=zstd "$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_ROOT" "$CRBL_PART_MP_ROOT"
fi
#DEBOOTSTRAP
if [ ! -d "$CRBL_PART_MP_ROOT/home" ]; then
CRBL_DEB_PACKAGES=eatmydata,btrfs-progs,kbd,keyboard-configuration,locales,initramfs-tools,zstd
if [ -z "$CRBL_HEADLESS" ]; then
CRBL_PACKAGES+=,task-gnome-desktop,gnome-initial-setup
fi
sudo eatmydata mmdebstrap --arch=arm64 --components main,contrib,non-free,non-free-firmware --include "$CRBL_DEB_PACKAGES" "$CRBL_DEB_SUITE" "$CRBL_PART_MP_ROOT"
fi
if [ -z "$CRBL_UPDATE_EXISTING" ]; then
echo "chromebook-linux" | sudo tee "$CRBL_PART_MP_ROOT/etc/hostname"
echo "LABEL=$CRBL_PART_LABEL_ROOT / btrfs defaults,ssd,compress=zstd,noatime 0 0" | sudo tee "$CRBL_PART_MP_ROOT/etc/fstab"
echo "LABEL=$CRBL_PART_LABEL_BOOT /boot/efi vfat defaults,noatime 0 1" | sudo tee -a "$CRBL_PART_MP_ROOT/etc/fstab"
#cat "$CRBL_DISTRO/apt/$CRBL_DEB_SUITE/sources.list" | sudo tee "$CRBL_PART_MP_ROOT/etc/apt/sources.list"
sudo sed -i "s/^XKBMODEL=\".*\"/XKBMODEL=\"chromebook\"/" "$CRBL_PART_MP_ROOT/etc/default/keyboard"
sudo sed -i "s/\(# \)\\?en_US.UTF-8/en_US.UTF-8/" "$CRBL_PART_MP_ROOT/etc/locale.gen"
sudo chroot "$CRBL_PART_MP_ROOT" locale-gen
if [ ! -z "$CRBL_HEADLESS" ]; then
echo "root:root" | sudo chroot "$CRBL_PART_MP_ROOT" chpasswd
sudo chroot "$CRBL_PART_MP_ROOT" passwd -e root
fi
fi
#LINUX
if [ `uname -m` = "x86_64" ]; then
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
fi
if [ -z "$LINUX_MENUCONFIG" ]; then
make -C "$CRBL_DIR_LINUX" defconfig
else
make -C "$CRBL_DIR_LINUX" oldconfig
make -C "$CRBL_DIR_LINUX" defconfig
make -C "$CRBL_DIR_LINUX" menuconfig
make -C "$CRBL_DIR_LINUX" savedefconfig
mv "$CRBL_DIR_LINUX/defconfig" "$CRBL_DIR_LINUX/arch/$CRBL_ARCH/configs/defconfig"
fi
CRBL_LINUX_REL=$(make -sC "$CRBL_DIR_LINUX" kernelrelease)
if [ -z "$CRBL_LINUX_REL" ]; then
echo "LINUX VERSION ERROR!"
exit 1
fi
if [ -z "$LINUX_MAKE_SKIP" ]; then
eatmydata make -C "$CRBL_DIR_LINUX" -j`nproc --all`
fi
if [ -z "$LINUX_INSTALL_SKIP" ]; then
sudo -E eatmydata make -C "$CRBL_DIR_LINUX" install INSTALL_PATH="$CRBL_PART_MP_ROOT/boot"
sudo -E eatmydata make -C "$CRBL_DIR_LINUX" modules_install INSTALL_MOD_PATH="$CRBL_PART_MP_ROOT"
sudo -E eatmydata make -C "$CRBL_DIR_LINUX" headers_install INSTALL_HDR_PATH="$CRBL_PART_MP_ROOT/usr"
fi
#LINUX FIRMWARE
if [ -z "$LINUX_FIRMWARE_SKIP" ]; then
sudo eatmydata make -C "$CRBL_DIR_LINUX_FW" install DESTDIR="$CRBL_PART_MP_ROOT"
fi
#INITRAMFS
sudo mount -o bind /dev "$CRBL_PART_MP_ROOT/dev"
traps_push sudo umount "$CRBL_PART_MP_ROOT/dev"
sudo mount -o bind /dev/pts "$CRBL_PART_MP_ROOT/dev/pts"
traps_push sudo umount "$CRBL_PART_MP_ROOT/dev/pts"
sudo chroot "$CRBL_PART_MP_ROOT" mount -t proc proc /proc
traps_push sudo chroot "$CRBL_PART_MP_ROOT" umount /proc
sudo chroot "$CRBL_PART_MP_ROOT" mount -t sysfs sys /sys
traps_push sudo chroot "$CRBL_PART_MP_ROOT" umount /sys
sudo chroot "$CRBL_PART_MP_ROOT" update-initramfs -c -k "$CRBL_LINUX_REL"
traps_pop
traps_pop
traps_pop
traps_pop
#DEPTHCHARGE
dd if=/dev/zero of="$CRBL_TMP_DIR/bootloader.bin" bs=512 count=1
mkdepthcharge -o "$CRBL_TMP_DIR/kernel.img" --bootloader "$CRBL_TMP_DIR/bootloader.bin" \
--format fit -C "$CRBL_DEPTHCHARGE_COMP" -A "$CRBL_ARCH" \
-c "console=tty1 root=PARTUUID=%U/PARTNROFF=3 rootwait ro noresume" -- \
"$CRBL_PART_MP_ROOT/boot/vmlinuz-$CRBL_LINUX_REL" \
"$CRBL_PART_MP_ROOT/boot/initrd.img-$CRBL_LINUX_REL" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8183-evb.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel14.dtb" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8183-kukui-jacuzzi-fennel14-sku2.dtb" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8186-evb.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8186-corsola-magneton-sku393216.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8186-corsola-magneton-sku393217.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8186-corsola-magneton-sku393218.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8188-evb.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8192-evb.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8192-asurada-spherion-r0.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8192-asurada-spherion-r4.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8195-evb.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8195-cherry-tomato-r1.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8195-cherry-tomato-r2.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8195-cherry-tomato-r3.dts" \
"$CRBL_DIR_LINUX/arch/$CRBL_ARCH/boot/dts/mediatek/mt8395-genio-1200-evk.dts"
sudo dd if="$CRBL_TMP_DIR/kernel.img" of="$CRBL_TARGET$CRBL_PART_PREFIX$CRBL_PART_KERN_A" bs=1M
sudo cgpt add -i $CRBL_PART_KERN_A -S 1 -T 0 -P 3 "$CRBL_TARGET"
#FINISH
traps_pop #sudo umount "$CRBL_PART_MP_ROOT"
rm -rf "$CRBL_TMP_DIR"
if [ ! -z "$CRBL_LOOP_DEV" ]; then
traps_pop #sudo losetup -d "$CRBL_TARGET"
fi
traps_stop