shimboot/bootloader/bin/bootstrap.sh

84 lines
2.3 KiB
Bash
Raw Normal View History

2023-10-02 02:08:31 -04:00
#!/bin/busybox sh
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# To bootstrap the factory installer on rootfs. This file must be executed as
# PID=1 (exec).
# Note that this script uses the busybox shell (not bash, not dash).
#original: https://chromium.googlesource.com/chromiumos/platform/initramfs/+/refs/heads/main/factory_shim/bootstrap.sh
2023-10-05 02:43:23 -04:00
set +x
2023-10-02 02:08:31 -04:00
invoke_terminal() {
local tty="$1"
local title="$2"
shift
shift
# Copied from factory_installer/factory_shim_service.sh.
echo "${title}" >>${tty}
setsid sh -c "exec script -afqc '$*' /dev/null <${tty} >>${tty} 2>&1 &"
}
enable_debug_console() {
local tty="$1"
2023-10-03 13:39:24 -04:00
echo -e '\033[1;33m[cros_debug] enabled on '${tty}'.\033[m'
2023-10-02 02:08:31 -04:00
invoke_terminal "${tty}" "[Bootstrap Debug Console]" "/bin/busybox sh"
}
2023-10-03 20:29:55 -04:00
find_rootfs_partitions() {
local disks=$(fdisk -l | sed -n "s/Disk \(\/dev\/.*\):.*/\1/p")
if [ ! "${disks}" ]; then
return 1
fi
2023-10-03 20:29:55 -04:00
for disk in $disks; do
local partitions=$(fdisk -l $disk | sed -n "s/^[ ]\+\([0-9]\+\).*shimboot_rootfs:\(.*\)$/\1:\2/p")
if [ ! "${partitions}" ]; then
continue
fi
2023-10-04 02:56:57 -04:00
echo "${disk}${partitions}"
2023-10-03 20:29:55 -04:00
done
}
2023-10-02 02:08:31 -04:00
2023-10-04 02:56:57 -04:00
#from original bootstrap.sh
move_mounts() {
2023-10-05 02:43:23 -04:00
local base_mounts="/sys /proc /dev"
local newroot_mnt="$1"
for mnt in $base_mounts; do
2023-10-04 02:56:57 -04:00
# $mnt is a full path (leading '/'), so no '/' joiner
2023-10-05 02:43:23 -04:00
mkdir -p "$newroot_mnt$mnt"
mount -n -o move "$mnt" "$newroot_mnt$mnt"
2023-10-04 02:56:57 -04:00
done
}
2023-10-02 02:08:31 -04:00
main() {
2023-10-03 13:39:24 -04:00
echo "...:::||| Bootstrapping ChromeOS Factory Shim |||:::..."
2023-10-02 02:08:31 -04:00
echo "idk please work"
2023-10-04 02:56:57 -04:00
2023-10-05 02:43:23 -04:00
enable_debug_console "/dev/pts/1"
2023-10-04 02:56:57 -04:00
2023-10-05 02:43:23 -04:00
find_rootfs_partitions
2023-10-04 02:56:57 -04:00
local rootfs_partitions=$(find_rootfs_partitions)
for rootfs_partition in $rootfs_partitions; do
2023-10-05 02:43:23 -04:00
local part_path=$(echo $rootfs_partition | cut -d ":" -f 1)
local part_name=$(echo $rootfs_partition | cut -d ":" -f 2)
echo "found bootable partition ${part_name} on ${part_path}"
2023-10-04 02:56:57 -04:00
done
2023-10-03 20:29:55 -04:00
2023-10-05 02:43:23 -04:00
echo "moving mounts to newroot"
2023-10-04 02:56:57 -04:00
mkdir /newroot
mount /dev/sda4 /newroot
2023-10-05 02:43:23 -04:00
move_mounts /newroot
2023-10-04 02:56:57 -04:00
2023-10-05 02:43:23 -04:00
echo "switching root"
sleep 2
mkdir -p /newroot/bootloader
pivot_root /newroot /newroot/bootloader
local tty="/dev/pts/0"
exec /sbin/init < "$tty" >> "$tty" 2>&1
2023-10-02 02:08:31 -04:00
}
main "$@"
sleep 1d