partially working pivot_root into chrome os
This commit is contained in:
parent
5cac377c71
commit
cd493864ec
|
@ -167,6 +167,37 @@ get_selection() {
|
|||
return 1
|
||||
}
|
||||
|
||||
contains_word() {
|
||||
local substr="$1"
|
||||
local str="$2"
|
||||
for word in $str; do
|
||||
if [ "$word" = "$substr" ]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
#might be useful in case we need to disable the tpm
|
||||
#currently this causes a kernel panic when we try to boot cros
|
||||
unbind_driver() {
|
||||
local driver_path="$1"
|
||||
local sys_files="$(ls $driver_path)"
|
||||
local excluded_files="bind uevent unbind"
|
||||
for file in $sys_files; do
|
||||
if ! contains_word "$file" "$excluded_files"; then
|
||||
echo "$file" > "${driver_path}/unbind"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
unbind_tpm() {
|
||||
unbind_driver "/sys/bus/spi/drivers/tpm_tis_spi"
|
||||
unbind_driver "/sys/bus/pnp/drivers/tpm_tis"
|
||||
unbind_driver "/sys/bus/platform/drivers/tpm_tis"
|
||||
}
|
||||
|
||||
boot_target() {
|
||||
local target="$1"
|
||||
|
||||
|
@ -183,8 +214,30 @@ boot_target() {
|
|||
}
|
||||
|
||||
boot_chromeos() {
|
||||
echo "not implemented yet :("
|
||||
local target="$1"
|
||||
|
||||
echo "WARNING: this functionality is unfinished and you will only get a bash shell"
|
||||
echo "starting the init system currently does not work and will cause it to hang"
|
||||
sleep 5
|
||||
|
||||
echo "mounting target"
|
||||
mkdir /newroot
|
||||
mount -o ro $target /newroot
|
||||
|
||||
echo "mounting tmpfs"
|
||||
mount -t tmpfs -o mode=1777 none /newroot/tmp
|
||||
mount -t tmpfs -o mode=0555 run /newroot/run
|
||||
mkdir -p -m 0755 /newroot/run/lock
|
||||
|
||||
echo "moving mounts"
|
||||
move_mounts /newroot
|
||||
|
||||
echo "switching root"
|
||||
sleep 5
|
||||
mkdir -p /newroot/tmp/bootloader
|
||||
pivot_root /newroot /newroot/tmp/bootloader
|
||||
local tty="/dev/pts/0"
|
||||
exec /bin/bash < "$tty" >> "$tty" 2>&1
|
||||
}
|
||||
|
||||
main() {
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
│ Chrome OS RMA Shim Bootloader │
|
||||
└───────────────────────────────┘
|
||||
<a href="#info" style="text-decoration: none;">1) Info</a>
|
||||
<a href="#explaination" style="text-decoration: none;">2) Explanation</a>
|
||||
<a href="#explanation" style="text-decoration: none;">2) Explanation</a>
|
||||
<a href="#prebuilt" style="text-decoration: none;">3) Prebuilt Images</a>
|
||||
<a href="#build" style="text-decoration: none;">4) Build Instructions</a>
|
||||
<a href="#usage" style="text-decoration: none;">5) Usage</a>
|
||||
|
@ -58,7 +58,7 @@ For more detailed information, please see the project's <a href="https://github.
|
|||
<b id="info">Info:</b>
|
||||
Shimboot is a collection of scripts for patching a Chrome OS RMA shim to serve as a bootloader for a standard Linux distribution. It allows you to boot a full desktop Debian install on a Chromebook, without needing to unenroll it or modify the firmware.
|
||||
|
||||
<b id="info">Explanation:</b>
|
||||
<b id="explanation">Explanation:</b>
|
||||
Chrome OS RMA shims are bootable disk images which are designed to run a variety of diagnostic utilities on Chromebooks, and they'll work even if the device is enterprise enrolled. Unfortunately for Google, there exists a <a href="https://sh1mmer.me/">security flaw</a> in which the root filesystem of the RMA shim is not verified. This lets us replace the rootfs with anything we want, including a full Linux distribution.
|
||||
|
||||
Simply replacing the shim's rootfs doesn't work, however, as it boots to an environment friendly to the RMA shim, not regular Linux distros. To get around this, a separate bootloader is required to transition from the shim environment to the main rootfs. This bootloader then does a <a href="https://man7.org/linux/man-pages/man8/pivot_root.8.html">pivot_root</a> to enter the rootfs, where it runs the init system.
|
||||
|
|
Loading…
Reference in New Issue