Recent devices (e.g. Pixel 2XL aka taimen) do not define any "system" partition in their fstab, so a plain "mount /system" fails. Furthermore, trying to get the entry from /etc/recovery.fstab also fails because the partitions have slot suffixes (e.g. system_a). So for these devices, we need to figure out the active slot, mount the system partition (which really contains the whole root) and lastly mount the actual system partition from the rootfs. Change-Id: Ibb73a82896c1f6ce6af9c334b8d0908a183913b9gugelfrei
parent
524fe03bfb
commit
1f94c931e0
@ -0,0 +1,15 @@
|
||||
#!/sbin/sh
|
||||
|
||||
# Modern devices use /system as root ("/")
|
||||
system_as_root=`getprop ro.build.system_root_image`
|
||||
if [ "$system_as_root" == "true" ]; then
|
||||
if umount /system && umount /system_root; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if umount /system; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit 1
|
@ -1,23 +1,17 @@
|
||||
ui_print("Installing su addon...");
|
||||
ifelse(is_mounted("/system"), unmount("/system"));
|
||||
package_extract_file("mount-system.sh", "/tmp/mount-system.sh");
|
||||
package_extract_file("unmount-system.sh", "/tmp/unmount-system.sh");
|
||||
set_metadata("/tmp/mount-system.sh", "uid", 0, "gid", 0, "mode", 0755);
|
||||
set_metadata("/tmp/unmount-system.sh", "uid", 0, "gid", 0, "mode", 0755);
|
||||
run_program("/tmp/mount-system.sh") == 0 || abort("Could not mount /system");
|
||||
|
||||
if getprop("ro.build.system_root_image") != "true" then
|
||||
package_extract_dir("system", "/system");
|
||||
set_metadata("/system/addon.d/51-addonsu.sh", "uid", 0, "gid", 0, "mode", 0755, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/etc/init/superuser.rc", "uid", 0, "gid", 0, "mode", 0644, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/xbin/su", "uid", 0, "gid", 2000, "mode", 0755, "selabel", "u:object_r:su_exec:s0");
|
||||
symlink("/system/xbin/su", "/system/bin/su");
|
||||
else
|
||||
package_extract_dir("system", "/system/system");
|
||||
set_metadata("/system/system/addon.d/51-addonsu.sh", "uid", 0, "gid", 0, "mode", 0755, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/system/etc/init/superuser.rc", "uid", 0, "gid", 0, "mode", 0644, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/system/xbin/su", "uid", 0, "gid", 2000, "mode", 0755, "selabel", "u:object_r:su_exec:s0");
|
||||
symlink("/system/xbin/su", "/system/system/bin/su");
|
||||
endif;
|
||||
package_extract_dir("system", "/system");
|
||||
set_metadata("/system/addon.d/51-addonsu.sh", "uid", 0, "gid", 0, "mode", 0755, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/etc/init/superuser.rc", "uid", 0, "gid", 0, "mode", 0644, "selabel", "u:object_r:system_file:s0");
|
||||
set_metadata("/system/xbin/su", "uid", 0, "gid", 2000, "mode", 0755, "selabel", "u:object_r:su_exec:s0");
|
||||
symlink("/system/xbin/su", "/system/bin/su");
|
||||
|
||||
unmount("/system");
|
||||
run_program("/tmp/unmount-system.sh") == 0 || ui_print("Could not unmount /system");
|
||||
ui_print("Done");
|
||||
set_progress(1.000000);
|
||||
|
@ -1,21 +1,16 @@
|
||||
ui_print("Removing su addon...");
|
||||
ifelse(is_mounted("/system"), unmount("/system"));
|
||||
package_extract_file("mount-system.sh", "/tmp/mount-system.sh");
|
||||
package_extract_file("unmount-system.sh", "/tmp/unmount-system.sh");
|
||||
set_metadata("/tmp/mount-system.sh", "uid", 0, "gid", 0, "mode", 0755);
|
||||
set_metadata("/tmp/unmount-system.sh", "uid", 0, "gid", 0, "mode", 0755);
|
||||
run_program("/tmp/mount-system.sh") == 0 || abort("Could not mount /system");
|
||||
|
||||
if getprop("ro.build.system_root_image") != "true" then
|
||||
delete("/system/addon.d/51-addonsu.sh");
|
||||
delete("/system/bin/su");
|
||||
delete("/system/etc/init/superuser.rc");
|
||||
delete("/system/xbin/su");
|
||||
else
|
||||
delete("/system/system/addon.d/51-addonsu.sh");
|
||||
delete("/system/system/bin/su");
|
||||
delete("/system/system/etc/init/superuser.rc");
|
||||
delete("/system/system/xbin/su");
|
||||
endif;
|
||||
delete("/system/addon.d/51-addonsu.sh");
|
||||
delete("/system/bin/su");
|
||||
delete("/system/etc/init/superuser.rc");
|
||||
delete("/system/xbin/su");
|
||||
|
||||
unmount("/system");
|
||||
run_program("/tmp/unmount-system.sh") == 0 || ui_print("Could not unmount /system");
|
||||
ui_print("Done");
|
||||
set_progress(1.000000);
|
||||
|
Loading…
Reference in new issue