Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
9430ed66
Commit
9430ed66
authored
Jun 18, 2017
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add addon.d survival script
parent
96f8efc2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
252 additions
and
123 deletions
+252
-123
build.py
build.py
+19
-2
addon.d.sh
scripts/addon.d.sh
+100
-0
flash_script.sh
scripts/flash_script.sh
+12
-121
util_functions.sh
scripts/util_functions.sh
+121
-0
No files found.
build.py
View file @
9430ed66
...
@@ -160,23 +160,40 @@ def zip_main(args):
...
@@ -160,23 +160,40 @@ def zip_main(args):
zip_with_msg
(
zipf
,
source
,
target
)
zip_with_msg
(
zipf
,
source
,
target
)
# Scripts
# Scripts
# flash_script.sh
source
=
os
.
path
.
join
(
'scripts'
,
'flash_script.sh'
)
source
=
os
.
path
.
join
(
'scripts'
,
'flash_script.sh'
)
with
open
(
source
,
'r'
)
as
flash_
script
:
with
open
(
source
,
'r'
)
as
script
:
# Add version info into flash script
# Add version info into flash script
update_binary
=
flash_
script
.
read
()
.
replace
(
update_binary
=
script
.
read
()
.
replace
(
'MAGISK_VERSION_STUB'
,
'Magisk v{} Installer'
.
format
(
args
.
versionString
))
'MAGISK_VERSION_STUB'
,
'Magisk v{} Installer'
.
format
(
args
.
versionString
))
target
=
os
.
path
.
join
(
'META-INF'
,
'com'
,
'google'
,
'android'
,
'update-binary'
)
target
=
os
.
path
.
join
(
'META-INF'
,
'com'
,
'google'
,
'android'
,
'update-binary'
)
print
(
'zip: '
+
source
+
' -> '
+
target
)
print
(
'zip: '
+
source
+
' -> '
+
target
)
zipf
.
writestr
(
target
,
update_binary
)
zipf
.
writestr
(
target
,
update_binary
)
# addon.d.sh
source
=
os
.
path
.
join
(
'scripts'
,
'addon.d.sh'
)
with
open
(
source
,
'r'
)
as
script
:
# Add version info addon.d.sh
addond
=
script
.
read
()
.
replace
(
'MAGISK_VERSION_STUB'
,
'Magisk v{} addon.d'
.
format
(
args
.
versionString
))
target
=
os
.
path
.
join
(
'addon.d'
,
'99-magisk.sh'
)
print
(
'zip: '
+
source
+
' -> '
+
target
)
zipf
.
writestr
(
target
,
addond
)
# updater-script
target
=
os
.
path
.
join
(
'META-INF'
,
'com'
,
'google'
,
'android'
,
'updater-script'
)
target
=
os
.
path
.
join
(
'META-INF'
,
'com'
,
'google'
,
'android'
,
'updater-script'
)
print
(
'zip: '
+
target
)
print
(
'zip: '
+
target
)
zipf
.
writestr
(
target
,
'#MAGISK
\n
'
)
zipf
.
writestr
(
target
,
'#MAGISK
\n
'
)
# init.magisk.rc
source
=
os
.
path
.
join
(
'scripts'
,
'init.magisk.rc'
)
source
=
os
.
path
.
join
(
'scripts'
,
'init.magisk.rc'
)
target
=
os
.
path
.
join
(
'common'
,
'init.magisk.rc'
)
target
=
os
.
path
.
join
(
'common'
,
'init.magisk.rc'
)
zip_with_msg
(
zipf
,
source
,
target
)
zip_with_msg
(
zipf
,
source
,
target
)
# boot_patch.sh
source
=
os
.
path
.
join
(
'scripts'
,
'boot_patch.sh'
)
source
=
os
.
path
.
join
(
'scripts'
,
'boot_patch.sh'
)
target
=
os
.
path
.
join
(
'common'
,
'boot_patch.sh'
)
target
=
os
.
path
.
join
(
'common'
,
'boot_patch.sh'
)
zip_with_msg
(
zipf
,
source
,
target
)
zip_with_msg
(
zipf
,
source
,
target
)
# util_functions.sh
source
=
os
.
path
.
join
(
'scripts'
,
'util_functions.sh'
)
target
=
os
.
path
.
join
(
'common'
,
'util_functions.sh'
)
zip_with_msg
(
zipf
,
source
,
target
)
# Prebuilts
# Prebuilts
for
chromeos
in
[
'futility'
,
'kernel_data_key.vbprivk'
,
'kernel.keyblock'
]:
for
chromeos
in
[
'futility'
,
'kernel_data_key.vbprivk'
,
'kernel.keyblock'
]:
...
...
scripts/addon.d.sh
0 → 100644
View file @
9430ed66
#!/sbin/sh
##########################################################################################
#
# Magisk Survival Script for ROMs with addon.d support
# by topjohnwu
#
# Inspired by 99-flashafterupdate.sh of osm0sis @ xda-developers
#
##########################################################################################
.
/tmp/backuptool.functions
main
()
{
# Magisk binaries
MAGISKBIN
=
/data/magisk
# This script always run in recovery
BOOTMODE
=
false
# Wait for post addon.d processes to finish
sleep
5
mount
-o
ro /system 2>/dev/null
mount /data 2>/dev/null
if
[
!
-d
$MAGISKBIN
]
;
then
echo
"! Cannot find Magisk binaries!"
exit
1
fi
# Load all functions
.
$MAGISKBIN
/util_functions.sh
[
-f
/system/build.prop
]
||
abort
"! /system could not be mounted!"
ui_print
"************************"
ui_print
"* MAGISK_VERSION_STUB"
ui_print
"************************"
# Check if system root is installed and remove
remove_system_su
# Prefer bin in /system
export
PATH
=
/system/bin:/system/xbin
# Clear out possible lib paths, let the binary find them itself
export
LD_LIBRARY_PATH
=
# Temporarily block out all custom recovery binaries/libs
mv
/sbin /sbin_tmp
find_boot_image
[
-z
$BOOTIMAGE
]
&&
abort
"! Unable to detect boot image"
ui_print
"- Found Boot Image:
$BOOTIMAGE
"
SOURCEDMODE
=
true
cd
$MAGISKBIN
# Source the boot patcher
.
$MAGISKBIN
/boot_patch.sh
$BOOTIMAGE
[
-f
stock_boot
*
]
&&
rm
-f
/data/stock_boot
*
2>/dev/null
ui_print
"- Flashing new boot image"
if
[
-L
"
$BOOTIMAGE
"
]
;
then
dd
if
=
new-boot.img
of
=
"
$BOOTIMAGE
"
bs
=
4096
else
cat
new-boot.img /dev/zero |
dd
of
=
"
$BOOTIMAGE
"
bs
=
4096
fi
rm
-f
new-boot.img
cd
/
mv
/sbin_tmp /sbin
ui_print
"- Unmounting partitions"
umount
-l
/system
ui_print
"- Done"
exit
0
}
case
"
$1
"
in
backup
)
# Stub
;;
restore
)
# Stub
;;
pre-backup
)
# Stub
;;
post-backup
)
# Stub
;;
pre-restore
)
# Stub
;;
post-restore
)
# Get the FD for ui_print
OUTFD
=
`
ps |
grep
-v
grep
|
grep
-oE
"update(.*)"
|
cut
-d
" "
-f3
`
# Run the main function in a parallel subshell
(
main
)
&
;;
esac
scripts/flash_script.sh
View file @
9430ed66
...
@@ -52,127 +52,13 @@ rm -rf $TMPDIR 2>/dev/null
...
@@ -52,127 +52,13 @@ rm -rf $TMPDIR 2>/dev/null
mkdir
-p
$INSTALLER
$BUSYBOX
mkdir
-p
$INSTALLER
$BUSYBOX
unzip
-o
"
$ZIP
"
-d
$INSTALLER
unzip
-o
"
$ZIP
"
-d
$INSTALLER
##########################################################################################
# Functions
##########################################################################################
ui_print
()
{
if
$BOOTMODE
;
then
echo
"
$1
"
else
echo
-n
-e
"ui_print
$1
\n
"
>>
/proc/self/fd/
$OUTFD
echo
-n
-e
"ui_print
\n
"
>>
/proc/self/fd/
$OUTFD
fi
}
getvar
()
{
local
VARNAME
=
$1
local
VALUE
=
$(
eval echo
\$
"
$VARNAME
"
)
;
for
FILE
in
/dev/.magisk /data/.magisk /cache/.magisk /system/.magisk
;
do
if
[
-z
"
$VALUE
"
]
;
then
LINE
=
$(
cat
$FILE
2>/dev/null |
grep
"
$VARNAME
="
)
if
[
!
-z
"
$LINE
"
]
;
then
VALUE
=
${
LINE
#*=
}
fi
fi
done
eval
$VARNAME
=
\$
VALUE
}
find_boot_image
()
{
if
[
-z
"
$BOOTIMAGE
"
]
;
then
for
PARTITION
in
kern-a android_boot kernel boot lnx
;
do
BOOTIMAGE
=
`
find /dev/block
-iname
"
$PARTITION
"
|
head
-n
1
`
[
!
-z
$BOOTIMAGE
]
&&
break
done
fi
# Recovery fallback
if
[
-z
"
$BOOTIMAGE
"
]
;
then
for
FSTAB
in
/etc/
*
fstab
*
;
do
BOOTIMAGE
=
`
grep
-E
'\b/boot\b'
$FSTAB
|
grep
-oE
'/dev/[a-zA-Z0-9_./-]*'
`
[
!
-z
$BOOTIMAGE
]
&&
break
done
fi
[
-L
"
$BOOTIMAGE
"
]
&&
BOOTIMAGE
=
`
readlink
$BOOTIMAGE
`
}
is_mounted
()
{
if
[
!
-z
"
$2
"
]
;
then
cat
/proc/mounts |
grep
$1
|
grep
$2
,
>
/dev/null
else
cat
/proc/mounts |
grep
$1
>
/dev/null
fi
return
$?
}
mount_image
()
{
if
[
!
-d
"
$2
"
]
;
then
mount
-o
rw,remount rootfs /
mkdir
-p
"
$2
"
2>/dev/null
$BOOTMODE
&&
mount
-o
ro,remount rootfs /
[
!
-d
"
$2
"
]
&&
return
1
fi
if
!
is_mounted
"
$2
"
;
then
LOOPDEVICE
=
for
LOOP
in
0 1 2 3 4 5 6 7
;
do
if
!
is_mounted
"
$2
"
;
then
LOOPDEVICE
=
/dev/block/loop
$LOOP
[
-e
$LOOPDEVICE
]
||
mknod
$LOOPDEVICE
b 7
$LOOP
2>/dev/null
losetup
$LOOPDEVICE
"
$1
"
&&
mount
-t
ext4
-o
loop
$LOOPDEVICE
"
$2
"
if
is_mounted
"
$2
"
;
then
ui_print
"- Mounting
$1
to
$2
"
break
;
fi
fi
done
fi
}
grep_prop
()
{
REGEX
=
"s/^
$1
=//p"
shift
FILES
=
$@
if
[
-z
"
$FILES
"
]
;
then
FILES
=
'/system/build.prop'
fi
cat
$FILES
2>/dev/null |
sed
-n
"
$REGEX
"
|
head
-n
1
}
remove_system_su
()
{
if
[
-f
/system/bin/su
-o
-f
/system/xbin/su
]
&&
[
!
-f
/su/bin/su
]
;
then
ui_print
"! System installed root detected, mount rw :("
mount
-o
rw,remount /system
# SuperSU
if
[
-e
/system/bin/.ext/.su
]
;
then
mv
-f
/system/bin/app_process32_original /system/bin/app_process32 2>/dev/null
mv
-f
/system/bin/app_process64_original /system/bin/app_process64 2>/dev/null
mv
-f
/system/bin/install-recovery_original.sh /system/bin/install-recovery.sh 2>/dev/null
cd
/system/bin
if
[
-e
app_process64
]
;
then
ln
-sf
app_process64 app_process
else
ln
-sf
app_process32 app_process
fi
fi
rm
-rf
/system/.pin /system/bin/.ext /system/etc/.installed_su_daemon /system/etc/.has_su_daemon
\
/system/xbin/daemonsu /system/xbin/su /system/xbin/sugote /system/xbin/sugote-mksh /system/xbin/supolicy
\
/system/bin/app_process_init /system/bin/su /cache/su /system/lib/libsupol.so /system/lib64/libsupol.so
\
/system/su.d /system/etc/install-recovery.sh /system/etc/init.d/99SuperSUDaemon /cache/install-recovery.sh
\
/system/.supersu /cache/.supersu /data/.supersu
\
/system/app/Superuser.apk /system/app/SuperSU /cache/Superuser.apk 2>/dev/null
fi
}
abort
()
{
ui_print
"
$1
"
mv
/sbin_tmp /sbin 2>/dev/null
exit
1
}
##########################################################################################
##########################################################################################
# Detection
# Detection
##########################################################################################
##########################################################################################
# Load all fuctions
.
$COMMONDIR
/util_functions.sh
ui_print
"************************"
ui_print
"************************"
ui_print
"* MAGISK_VERSION_STUB"
ui_print
"* MAGISK_VERSION_STUB"
ui_print
"************************"
ui_print
"************************"
...
@@ -248,6 +134,14 @@ cp -af $BINDIR/. $COMMONDIR/. $MAGISKBIN
...
@@ -248,6 +134,14 @@ cp -af $BINDIR/. $COMMONDIR/. $MAGISKBIN
chmod
-R
755
$MAGISKBIN
chmod
-R
755
$MAGISKBIN
chcon
-hR
u:object_r:system_file:s0
$MAGISKBIN
chcon
-hR
u:object_r:system_file:s0
$MAGISKBIN
# addon.d
if
[
-d
/system/addon.d
]
;
then
ui_print
"- Adding addon.d survival script"
mount
-o
rw,remount /system
cp
$INSTALLER
/addon.d/99-magisk.sh /system/addon.d/99-magisk.sh
chmod
755 /system/addon.d/99-magisk.sh
fi
##########################################################################################
##########################################################################################
# Magisk Image
# Magisk Image
##########################################################################################
##########################################################################################
...
@@ -315,10 +209,7 @@ if [ -f chromeos ]; then
...
@@ -315,10 +209,7 @@ if [ -f chromeos ]; then
mv
new-boot.img.signed new-boot.img
mv
new-boot.img.signed new-boot.img
fi
fi
if
is_mounted /data
;
then
[
-f
stock_boot
*
]
&&
rm
-f
/data/stock_boot
*
2>/dev/null
rm
-f
/data/stock_boot
*
2>/dev/null
mv
stock_boot
*
/data 2>/dev/null
fi
ui_print
"- Flashing new boot image"
ui_print
"- Flashing new boot image"
if
[
-L
"
$BOOTIMAGE
"
]
;
then
if
[
-L
"
$BOOTIMAGE
"
]
;
then
...
...
scripts/util_functions.sh
0 → 100644
View file @
9430ed66
##########################################################################################
#
# Magisk General Utility Functions
# by topjohnwu
#
# Used in flash_script.sh and addon.d.sh
#
##########################################################################################
ui_print
()
{
if
$BOOTMODE
;
then
echo
"
$1
"
else
echo
-n
-e
"ui_print
$1
\n
"
>>
/proc/self/fd/
$OUTFD
echo
-n
-e
"ui_print
\n
"
>>
/proc/self/fd/
$OUTFD
fi
}
getvar
()
{
local
VARNAME
=
$1
local
VALUE
=
$(
eval echo
\$
"
$VARNAME
"
)
;
for
FILE
in
/dev/.magisk /data/.magisk /cache/.magisk /system/.magisk
;
do
if
[
-z
"
$VALUE
"
]
;
then
LINE
=
$(
cat
$FILE
2>/dev/null |
grep
"
$VARNAME
="
)
if
[
!
-z
"
$LINE
"
]
;
then
VALUE
=
${
LINE
#*=
}
fi
fi
done
eval
$VARNAME
=
\$
VALUE
}
find_boot_image
()
{
if
[
-z
"
$BOOTIMAGE
"
]
;
then
for
PARTITION
in
kern-a android_boot kernel boot lnx
;
do
BOOTIMAGE
=
`
find /dev/block
-iname
"
$PARTITION
"
|
head
-n
1
`
[
!
-z
$BOOTIMAGE
]
&&
break
done
fi
# Recovery fallback
if
[
-z
"
$BOOTIMAGE
"
]
;
then
for
FSTAB
in
/etc/
*
fstab
*
;
do
BOOTIMAGE
=
`
grep
-E
'\b/boot\b'
$FSTAB
|
grep
-oE
'/dev/[a-zA-Z0-9_./-]*'
`
[
!
-z
$BOOTIMAGE
]
&&
break
done
fi
[
-L
"
$BOOTIMAGE
"
]
&&
BOOTIMAGE
=
`
readlink
$BOOTIMAGE
`
}
is_mounted
()
{
if
[
!
-z
"
$2
"
]
;
then
cat
/proc/mounts |
grep
$1
|
grep
$2
,
>
/dev/null
else
cat
/proc/mounts |
grep
$1
>
/dev/null
fi
return
$?
}
mount_image
()
{
if
[
!
-d
"
$2
"
]
;
then
mount
-o
rw,remount rootfs /
mkdir
-p
"
$2
"
2>/dev/null
$BOOTMODE
&&
mount
-o
ro,remount rootfs /
[
!
-d
"
$2
"
]
&&
return
1
fi
if
!
is_mounted
"
$2
"
;
then
LOOPDEVICE
=
for
LOOP
in
0 1 2 3 4 5 6 7
;
do
if
!
is_mounted
"
$2
"
;
then
LOOPDEVICE
=
/dev/block/loop
$LOOP
[
-e
$LOOPDEVICE
]
||
mknod
$LOOPDEVICE
b 7
$LOOP
2>/dev/null
losetup
$LOOPDEVICE
"
$1
"
&&
mount
-t
ext4
-o
loop
$LOOPDEVICE
"
$2
"
if
is_mounted
"
$2
"
;
then
ui_print
"- Mounting
$1
to
$2
"
break
;
fi
fi
done
fi
}
grep_prop
()
{
REGEX
=
"s/^
$1
=//p"
shift
FILES
=
$@
if
[
-z
"
$FILES
"
]
;
then
FILES
=
'/system/build.prop'
fi
cat
$FILES
2>/dev/null |
sed
-n
"
$REGEX
"
|
head
-n
1
}
remove_system_su
()
{
if
[
-f
/system/bin/su
-o
-f
/system/xbin/su
]
&&
[
!
-f
/su/bin/su
]
;
then
ui_print
"! System installed root detected, mount rw :("
mount
-o
rw,remount /system
# SuperSU
if
[
-e
/system/bin/.ext/.su
]
;
then
mv
-f
/system/bin/app_process32_original /system/bin/app_process32 2>/dev/null
mv
-f
/system/bin/app_process64_original /system/bin/app_process64 2>/dev/null
mv
-f
/system/bin/install-recovery_original.sh /system/bin/install-recovery.sh 2>/dev/null
cd
/system/bin
if
[
-e
app_process64
]
;
then
ln
-sf
app_process64 app_process
else
ln
-sf
app_process32 app_process
fi
fi
rm
-rf
/system/.pin /system/bin/.ext /system/etc/.installed_su_daemon /system/etc/.has_su_daemon
\
/system/xbin/daemonsu /system/xbin/su /system/xbin/sugote /system/xbin/sugote-mksh /system/xbin/supolicy
\
/system/bin/app_process_init /system/bin/su /cache/su /system/lib/libsupol.so /system/lib64/libsupol.so
\
/system/su.d /system/etc/install-recovery.sh /system/etc/init.d/99SuperSUDaemon /cache/install-recovery.sh
\
/system/.supersu /cache/.supersu /data/.supersu
\
/system/app/Superuser.apk /system/app/SuperSU /cache/Superuser.apk 2>/dev/null
fi
}
abort
()
{
ui_print
"
$1
"
mv
/sbin_tmp /sbin 2>/dev/null
exit
1
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment