J'ai déjà installé Magisk par Parcheando. boot_b
- la partition de démarrage actuelle. Par conséquent, j'ai le privilège Root et je peux y accéder par le biais de la fonction su
dans Termux. Le problème est que lorsque je mets à jour LineageOS par OTA, il met également à jour l'image de démarrage, donc je perds Magisk à chaque mise à jour. Et donc, j'ai besoin d'un ordinateur pour le réinstaller à chaque mise à jour (c'est-à-dire toutes les semaines environ).
J'essaie de m'en sortir en installant Magisk depuis le téléphone juste après la mise à jour alors que je suis toujours sur la partition enracinée.
J'ai réussi à extraire la mise à jour boot_a
partition en utilisant cp /dev/block/by-name/boot_a /data/data/com.termux/files/home/storage/documents/boot_a.img
je l'ai patché avec Magisk, et maintenant j'essaye de flasher l'image patchée à nouveau avec dd if=/data/data/com.termux/files/home/storage/downloads/magisk_patched-25200_FyF2V.img of=/dev/block/by-name/boot_a
Mais il dit que l'opération n'est pas autorisée et refuse de faire la chose :
dd: /dev/block/by-name/boot_a: write error: Operation not permitted
1+0 records in
0+0 records out
0 bytes (0 B) copied, 0.002583 s, 0 B/s
Je trouve cela étrange car il y a des posts ( 1 , 2 ) où les gens ont réussi à faire de même.
Encore une fois, j'exécute la commande dans un shell Root donné par su
. Et, comme vous pouvez le voir, les permissions des fichiers sont fixées à rw
pour le root
propriétaire :
# ls -l /dev/block/by-name/boot_a /dev/block/mmcblk0p38
lrwxrwxrwx 1 root root 21 1970-07-16 15:34 /dev/block/by-name/boot_a -> /dev/block/mmcblk0p38
brw------- 1 root root 259, 6 2022-08-31 22:02 /dev/block/mmcblk0p38
# whoami
root
J'ai aussi réglé SELinux sur permissive
juste au cas où, mais ça n'a pas aidé non plus :
# getenforce
Permissive
J'ai également trouvé une belle histoire dans deux questions ( 1 , 2 ) de quelqu'un ayant un problème similaire, et ils ont déterminé que c'était le manque de certaines capacités de Linux qui les empêchait de chrooter. Donc, j'ai également essayé de trouver si je manque de certaines "capacités" pour dd
et il semble que je n'aie pas de capacités sur le site. toybox
binaire, qui fournit dd
. Cependant, je dispose des 38 capacités du processus actuel (le shell) :
# ls -l `which dd`
lrwxrwxrwx 1 root root 6 1970-07-16 15:34 /system/bin/dd -> toybox
# getcap /system/bin/dd
# getcap /system/bin/toybox
# getcap /dev/block/by-name/boot_a
# getcap /dev/block/mmcblk0p38
# cat /proc/self/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
[ThisOneRan@PC]$ capsh --decode=0000003fffffffff
0x0000003fffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
# cat /proc/sys/kernel/cap_last_cap
37
Donc, j'ai essayé de mettre cap_dac_override
pour le /system/bin/toybox
binaire, mais ne pouvait pas - il est en lecture seule :
# setcap cap_dac_override+ep /system/bin/toybox
Failed to set capabilities on file `/system/bin/toybox' (Read-only file system)
Forme de course mount | grep system
il s'avère que ce n'est pas le system
lui-même est monté, mais... de Magisk system_root
bloack device to eash individual binary and stuff. Donc, j'ai remonté toybox en tant que rw
:
# mount | grep toybox
/dev/DBScy/.magisk/block/system_root on /system/bin/toybox type ext4 (ro,seclabel,relatime)
# mount -o remount,rw /dev/DBScy/.magisk/block/system_root /system/bin/toybox
# mount | grep toybox
/dev/DBScy/.magisk/block/system_root on /system/bin/toybox type ext4 (rw,seclabel,relatime)
Cela m'a permis de setcap
toutes les capacités :
# setcap all+ep /system/bin/toybox
# getcap /system/bin/toybox
/system/bin/toybox =ep
Mais même avec cela, je ne suis toujours pas autorisé à flasher l'image de démarrage :
# dd if=/data/data/com.termux/files/home/storage/downloads/magisk_patched-25200_FyF2V.img of=/dev/block/by-name/boot_a
dd: /dev/block/by-name/boot_a: write error: Operation not permitted
1+0 records in
0+0 records out
0 bytes (0 B) copied, 0.001446 s, 0 B/s
# dd if=/data/data/com.termux/files/home/storage/downloads/magisk_patched-25200_FyF2V.img of=/dev/block/mmcblk0p38
dd: /dev/block/mmcblk0p38: write error: Operation not permitted
1+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000779 s, 0 B/s
À ce stade, je n'ai aucune idée de ce qu'il faut essayer d'autre, ou de l'endroit où se trouve mon erreur évidente, alors aidez-moi à la résoudre. Merci d'avance !