This material is work-in-progress ...
Do not follow instructions here until this notice is removed.
There are two boot configurations I went through:
- Boot stock Android init, chrooting into Alpine. Hooks into /data/local/userinit.d/*
- Boot a custom init, where the Android root filesystem is a chroot under Alpine, but keeping Android's init as PID 1.
Unlock the bootloader and root your phone
Unlocking the bootloader is necessary, however rooting your phone ("ROM") is not if you hack on the boot image initrd.
fastboot oem unlock
Flash TWRP to the recovery partition. Install SuperSU.
Install Alpine in a chroot
Hack on Android's boot.img to boot Alpine
- Download stock boot.img, unpack, hack, repack, flash.
- Change kernel command line so SELinux is set to permissive (TODO: figure out how to return it to enforcing)
fastboot boot boot.img fastboot flash boot boot.img
- Employ PID namespaces, so s6-svscan can be the real PID 1, and not a fork(). This requires you to change your kernel configuration and recompile the kernel.
- Mount namespaces (?). Mount namespaces are already enabled in the OnePlus kernel.
- Employ s6-sudod so Android proceses can enter the Alpine environment (without SSH)
- Figure out how to open a new PTY and/or set terminal line disciplines so we can have process control in our shell.