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
5a71998b
Commit
5a71998b
authored
Jan 18, 2021
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Stop embedding magisk in magiskinit
parent
42278f12
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
131 additions
and
127 deletions
+131
-127
MagiskInstaller.kt
...n/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt
+49
-28
manager.sh
app/src/main/res/raw/manager.sh
+1
-1
build.py
build.py
+21
-23
Android.mk
native/jni/Android.mk
+2
-13
init.cpp
native/jni/init/init.cpp
+12
-31
init.hpp
native/jni/init/init.hpp
+1
-1
mount.cpp
native/jni/init/mount.cpp
+2
-9
rootdir.cpp
native/jni/init/rootdir.cpp
+26
-1
boot_patch.sh
scripts/boot_patch.sh
+13
-4
emulator.sh
scripts/emulator.sh
+4
-10
util_functions.sh
scripts/util_functions.sh
+0
-6
No files found.
app/src/main/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt
View file @
5a71998b
...
@@ -65,6 +65,16 @@ abstract class MagiskInstallImpl : KoinComponent {
...
@@ -65,6 +65,16 @@ abstract class MagiskInstallImpl : KoinComponent {
logs
=
NOPList
.
getInstance
()
logs
=
NOPList
.
getInstance
()
}
}
companion
object
{
private
val
ABI_MAP
=
TreeMap
<
String
,
String
>()
init
{
ABI_MAP
[
"armeabi-v7a"
]
=
"arm"
ABI_MAP
[
"arm64-v8a"
]
=
"arm64"
ABI_MAP
[
"x86"
]
=
"x86"
ABI_MAP
[
"x86_64"
]
=
"x64"
}
}
protected
constructor
(
zip
:
Uri
,
out
:
MutableList
<
String
>,
err
:
MutableList
<
String
>)
{
protected
constructor
(
zip
:
Uri
,
out
:
MutableList
<
String
>,
err
:
MutableList
<
String
>)
{
console
=
out
console
=
out
logs
=
err
logs
=
err
...
@@ -103,44 +113,52 @@ abstract class MagiskInstallImpl : KoinComponent {
...
@@ -103,44 +113,52 @@ abstract class MagiskInstallImpl : KoinComponent {
@Suppress
(
"DEPRECATION"
)
@Suppress
(
"DEPRECATION"
)
private
fun
extractZip
():
Boolean
{
private
fun
extractZip
():
Boolean
{
val
arch
=
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
val
arch
:
String
val
abis
=
listOf
(*
Build
.
SUPPORTED_ABIS
)
val
arch32
:
String
if
(
abis
.
contains
(
"x86"
))
"x86"
else
"arm"
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
arch
=
ABI_MAP
[
Build
.
SUPPORTED_ABIS
[
0
]]
!!
arch32
=
ABI_MAP
[
Build
.
SUPPORTED_32_BIT_ABIS
[
0
]]
!!
}
else
{
}
else
{
if
(
Build
.
CPU_ABI
==
"x86"
)
"x86"
else
"arm"
arch
=
ABI_MAP
[
Build
.
CPU_ABI
]
!!
arch32
=
arch
}
}
console
.
add
(
"- Device platform:
"
+
Build
.
CPU_ABI
)
console
.
add
(
"- Device platform:
$arch"
)
console
.
add
(
"- Magisk Manager: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
)
console
.
add
(
"- Magisk Manager: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
)
console
.
add
(
"- Install target: ${Info.remote.magisk.version} (${Info.remote.magisk.versionCode})"
)
console
.
add
(
"- Install target: ${Info.remote.magisk.version} (${Info.remote.magisk.versionCode})"
)
fun
newFile
(
name
:
String
):
File
{
return
if
(
installDir
is
SuFile
)
SuFile
(
installDir
,
name
)
else
File
(
installDir
,
name
)
}
try
{
try
{
ZipInputStream
(
zipUri
.
inputStream
().
buffered
()).
use
{
zi
->
ZipInputStream
(
zipUri
.
inputStream
().
buffered
()).
use
{
zi
->
lateinit
var
ze
:
ZipEntry
lateinit
var
ze
:
ZipEntry
while
(
zi
.
nextEntry
?.
let
{
ze
=
it
}
!=
null
)
{
while
(
zi
.
nextEntry
?.
let
{
ze
=
it
}
!=
null
)
{
if
(
ze
.
isDirectory
)
if
(
ze
.
isDirectory
)
continue
continue
var
name
:
String
?
=
null
var
name
:
String
?
=
null
val
names
=
arrayOf
(
"$arch/"
,
"common/"
,
"META-INF/com/google/android/update-binary"
)
for
(
n
in
names
)
{
if
(
ze
.
name
.
startsWith
(
"chromeos/"
))
{
ze
.
name
.
run
{
name
=
ze
.
name
if
(
startsWith
(
n
))
{
}
else
{
name
=
substring
(
lastIndexOf
(
'/'
)
+
1
)
for
(
n
in
listOf
(
"$arch32/"
,
"common/"
,
"META-INF/com/google/android/update-binary"
))
{
if
(
ze
.
name
.
startsWith
(
n
))
{
name
=
ze
.
name
.
substring
(
ze
.
name
.
lastIndexOf
(
'/'
)
+
1
)
break
}
}
}
}
name
?:
continue
break
}
}
if
(
name
==
null
&&
ze
.
name
.
startsWith
(
"chromeos/"
))
name
=
ze
.
name
name
?:
continue
name
?.
also
{
val
dest
=
if
(
installDir
is
SuFile
)
val
dest
=
newFile
(
name
)
SuFile
(
installDir
,
it
)
dest
.
parentFile
!!
.
mkdirs
()
else
SuFileOutputStream
(
dest
).
use
{
s
->
zi
.
copyTo
(
s
)
}
File
(
installDir
,
it
)
dest
.
parentFile
!!
.
mkdirs
()
SuFileOutputStream
(
dest
).
use
{
s
->
zi
.
copyTo
(
s
)
}
}
?:
continue
}
}
}
}
}
catch
(
e
:
IOException
)
{
}
catch
(
e
:
IOException
)
{
...
@@ -149,9 +167,9 @@ abstract class MagiskInstallImpl : KoinComponent {
...
@@ -149,9 +167,9 @@ abstract class MagiskInstallImpl : KoinComponent {
return
false
return
false
}
}
val
init64
=
SuFile
.
open
(
installDir
,
"magiskinit64"
)
val
init64
=
newFile
(
"magiskinit64"
)
if
(
Build
.
VERSION
.
SDK_INT
>=
21
&&
Build
.
SUPPORTED_64_BIT_ABIS
.
isNotEmpty
()
)
{
if
(
init64
.
exists
()
&&
arch
!=
arch32
)
{
init64
.
renameTo
(
SuFile
.
open
(
installDir
,
"magiskinit"
))
init64
.
renameTo
(
newFile
(
"magiskinit"
))
}
else
{
}
else
{
init64
.
delete
()
init64
.
delete
()
}
}
...
@@ -324,9 +342,12 @@ abstract class MagiskInstallImpl : KoinComponent {
...
@@ -324,9 +342,12 @@ abstract class MagiskInstallImpl : KoinComponent {
return
false
return
false
}
}
if
(!(
"KEEPFORCEENCRYPT=${Config.keepEnc} KEEPVERITY=${Config.keepVerity} "
+
val
FLAGS
=
"RECOVERYMODE=${Config.recovery} sh update-binary "
+
"KEEPFORCEENCRYPT=${Config.keepEnc} "
+
"sh boot_patch.sh $srcBoot"
).
sh
().
isSuccess
)
{
"KEEPVERITY=${Config.keepVerity} "
+
"RECOVERYMODE=${Config.recovery}"
if
(!(
"$FLAGS sh update-binary sh boot_patch.sh $srcBoot"
).
sh
().
isSuccess
)
{
return
false
return
false
}
}
...
...
app/src/main/res/raw/manager.sh
View file @
5a71998b
...
@@ -7,7 +7,7 @@ run_delay() {
...
@@ -7,7 +7,7 @@ run_delay() {
}
}
env_check
()
{
env_check
()
{
for
file
in
busybox magisk
magisk
boot magiskinit util_functions.sh boot_patch.sh
;
do
for
file
in
busybox magiskboot magiskinit util_functions.sh boot_patch.sh
;
do
[
-f
$MAGISKBIN
/
$file
]
||
return
1
[
-f
$MAGISKBIN
/
$file
]
||
return
1
done
done
return
0
return
0
...
...
build.py
View file @
5a71998b
...
@@ -287,18 +287,6 @@ def run_ndk_build(flags):
...
@@ -287,18 +287,6 @@ def run_ndk_build(flags):
def
dump_bin_headers
():
def
dump_bin_headers
():
for
arch
in
archs
:
bin_file
=
op
.
join
(
'native'
,
'out'
,
arch
,
'magisk'
)
if
not
op
.
exists
(
bin_file
):
error
(
'Build "magisk" before building "magiskinit"'
)
with
open
(
op
.
join
(
'native'
,
'out'
,
arch
,
'binaries_arch.h'
),
'w'
)
as
out
:
with
open
(
bin_file
,
'rb'
)
as
src
:
binary_dump
(
src
,
out
,
'magisk_xz'
)
for
arch
,
arch32
in
list
(
zip
(
arch64
,
archs
)):
bin_file
=
op
.
join
(
'native'
,
'out'
,
arch
,
'magisk'
)
with
open
(
op
.
join
(
'native'
,
'out'
,
arch32
,
'binaries_arch64.h'
),
'w'
)
as
out
:
with
open
(
bin_file
,
'rb'
)
as
src
:
binary_dump
(
src
,
out
,
'magisk_xz'
)
stub
=
op
.
join
(
config
[
'outdir'
],
'stub-release.apk'
)
stub
=
op
.
join
(
config
[
'outdir'
],
'stub-release.apk'
)
if
not
op
.
exists
(
stub
):
if
not
op
.
exists
(
stub
):
error
(
'Build stub APK before building "magiskinit"'
)
error
(
'Build stub APK before building "magiskinit"'
)
...
@@ -347,25 +335,30 @@ def build_binary(args):
...
@@ -347,25 +335,30 @@ def build_binary(args):
run_ndk_build
(
'B_MAGISK=1 B_64BIT=1'
)
run_ndk_build
(
'B_MAGISK=1 B_64BIT=1'
)
clean_elf
()
clean_elf
()
if
'test'
in
args
.
target
:
run_ndk_build
(
'B_TEST=1 B_64BIT=1'
)
# 32-bit only targets can be built in one command
flag
=
''
if
'magiskinit'
in
args
.
target
:
if
'magiskinit'
in
args
.
target
:
dump_bin_headers
()
dump_bin_headers
()
run_ndk_build
(
'B_INIT=1'
)
flag
+=
' B_INIT=1'
run_ndk_build
(
'B_INIT64=1'
)
if
'magiskpolicy'
in
args
.
target
:
if
'magiskpolicy'
in
args
.
target
:
run_ndk_build
(
'B_POLICY=1'
)
flag
+=
' B_POLICY=1'
if
'resetprop'
in
args
.
target
:
if
'resetprop'
in
args
.
target
:
run_ndk_build
(
'B_PROP=1'
)
flag
+=
' B_PROP=1'
if
'magiskboot'
in
args
.
target
:
if
'magiskboot'
in
args
.
target
:
run_ndk_build
(
'B_BOOT=1'
)
flag
+=
' B_BOOT=1'
if
'busybox'
in
args
.
target
:
if
'busybox'
in
args
.
target
:
run_ndk_build
(
'B_BB=1'
)
flag
+=
' B_BB=1'
if
'test'
in
args
.
target
:
if
flag
:
run_ndk_build
(
'B_TEST=1 B_64BIT=1'
)
run_ndk_build
(
flag
)
def
build_apk
(
args
,
module
):
def
build_apk
(
args
,
module
):
...
@@ -440,12 +433,17 @@ def zip_main(args):
...
@@ -440,12 +433,17 @@ def zip_main(args):
zip_with_msg
(
zipf
,
source
,
target
)
zip_with_msg
(
zipf
,
source
,
target
)
# Binaries
# Binaries
for
lib_dir
,
zip_dir
in
[(
'armeabi-v7a'
,
'arm'
),
(
'x86'
,
'x86'
)]
:
for
lib_dir
,
zip_dir
in
zip
(
archs
,
(
'arm'
,
'x86'
))
:
for
binary
in
[
'magiskinit'
,
'magisk
init64'
,
'magiskboot
'
]:
for
binary
in
[
'magiskinit'
,
'magisk
boot'
,
'magisk
'
]:
source
=
op
.
join
(
'native'
,
'out'
,
lib_dir
,
binary
)
source
=
op
.
join
(
'native'
,
'out'
,
lib_dir
,
binary
)
target
=
op
.
join
(
zip_dir
,
binary
)
target
=
op
.
join
(
zip_dir
,
'magisk32'
if
binary
==
'magisk'
else
binary
)
zip_with_msg
(
zipf
,
source
,
target
)
zip_with_msg
(
zipf
,
source
,
target
)
for
lib_dir
,
zip_dir
in
zip
(
arch64
,
(
'arm'
,
'x86'
)):
source
=
op
.
join
(
'native'
,
'out'
,
lib_dir
,
'magisk'
)
target
=
op
.
join
(
zip_dir
,
'magisk64'
)
zip_with_msg
(
zipf
,
source
,
target
)
# APK
# APK
source
=
op
.
join
(
source
=
op
.
join
(
config
[
'outdir'
],
'app-release.apk'
if
args
.
release
else
'app-debug.apk'
)
config
[
'outdir'
],
'app-release.apk'
if
args
.
release
else
'app-debug.apk'
)
...
...
native/jni/Android.mk
View file @
5a71998b
...
@@ -54,21 +54,10 @@ endif
...
@@ -54,21 +54,10 @@ endif
include $(CLEAR_VARS)
include $(CLEAR_VARS)
ifdef B_INIT
ifdef B_INIT
LOCAL_MODULE := magiskinit
BB_INIT := 1
else ifdef B_INIT64
LOCAL_MODULE := magiskinit64
LOCAL_CPPFLAGS += -DUSE_64BIT
BB_INIT := 1
endif
ifdef BB_INIT
LOCAL_MODULE := magiskinit
LOCAL_STATIC_LIBRARIES := libsepol libxz libutils
LOCAL_STATIC_LIBRARIES := libsepol libxz libutils
LOCAL_C_INCLUDES := \
LOCAL_C_INCLUDES := jni/include out
jni/include \
out \
out/$(TARGET_ARCH_ABI)
LOCAL_SRC_FILES := \
LOCAL_SRC_FILES := \
init/init.cpp \
init/init.cpp \
...
...
native/jni/init/init.cpp
View file @
5a71998b
...
@@ -10,12 +10,6 @@
...
@@ -10,12 +10,6 @@
#include <utils.hpp>
#include <utils.hpp>
#include "binaries.h"
#include "binaries.h"
#ifdef USE_64BIT
#include "binaries_arch64.h"
#else
#include "binaries_arch.h"
#endif
#include "init.hpp"
#include "init.hpp"
using
namespace
std
;
using
namespace
std
;
...
@@ -26,7 +20,7 @@ using namespace std;
...
@@ -26,7 +20,7 @@ using namespace std;
constexpr
int
(
*
init_applet_main
[])(
int
,
char
*
[])
=
constexpr
int
(
*
init_applet_main
[])(
int
,
char
*
[])
=
{
magiskpolicy_main
,
magiskpolicy_main
,
nullptr
};
{
magiskpolicy_main
,
magiskpolicy_main
,
nullptr
};
static
bool
unxz
(
int
fd
,
const
uint8_t
*
buf
,
size_t
size
)
{
bool
unxz
(
int
fd
,
const
uint8_t
*
buf
,
size_t
size
)
{
uint8_t
out
[
8192
];
uint8_t
out
[
8192
];
xz_crc32_init
();
xz_crc32_init
();
struct
xz_dec
*
dec
=
xz_dec_init
(
XZ_DYNALLOC
,
1
<<
26
);
struct
xz_dec
*
dec
=
xz_dec_init
(
XZ_DYNALLOC
,
1
<<
26
);
...
@@ -49,16 +43,6 @@ static bool unxz(int fd, const uint8_t *buf, size_t size) {
...
@@ -49,16 +43,6 @@ static bool unxz(int fd, const uint8_t *buf, size_t size) {
return
true
;
return
true
;
}
}
int
dump_magisk
(
const
char
*
path
,
mode_t
mode
)
{
int
fd
=
xopen
(
path
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_CLOEXEC
,
mode
);
if
(
fd
<
0
)
return
1
;
if
(
!
unxz
(
fd
,
magisk_xz
,
sizeof
(
magisk_xz
)))
return
1
;
close
(
fd
);
return
0
;
}
static
int
dump_manager
(
const
char
*
path
,
mode_t
mode
)
{
static
int
dump_manager
(
const
char
*
path
,
mode_t
mode
)
{
int
fd
=
xopen
(
path
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_CLOEXEC
,
mode
);
int
fd
=
xopen
(
path
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_CLOEXEC
,
mode
);
if
(
fd
<
0
)
if
(
fd
<
0
)
...
@@ -147,10 +131,9 @@ int main(int argc, char *argv[]) {
...
@@ -147,10 +131,9 @@ int main(int argc, char *argv[]) {
#endif
#endif
if
(
argc
>
1
&&
argv
[
1
]
==
"-x"
sv
)
{
if
(
argc
>
1
&&
argv
[
1
]
==
"-x"
sv
)
{
if
(
argv
[
2
]
==
"magisk"
sv
)
if
(
argc
>
2
&&
argv
[
2
]
==
"manager"
sv
)
return
dump_magisk
(
argv
[
3
],
0755
);
else
if
(
argv
[
2
]
==
"manager"
sv
)
return
dump_manager
(
argv
[
3
],
0644
);
return
dump_manager
(
argv
[
3
],
0644
);
return
1
;
}
}
if
(
getpid
()
!=
1
)
if
(
getpid
()
!=
1
)
...
@@ -166,18 +149,16 @@ int main(int argc, char *argv[]) {
...
@@ -166,18 +149,16 @@ int main(int argc, char *argv[]) {
// This will also mount /sys and /proc
// This will also mount /sys and /proc
load_kernel_info
(
&
cmd
);
load_kernel_info
(
&
cmd
);
if
(
cmd
.
skip_initramfs
)
{
if
(
cmd
.
skip_initramfs
)
init
=
new
SARInit
(
argv
,
&
cmd
);
init
=
new
SARInit
(
argv
,
&
cmd
);
}
else
{
else
if
(
cmd
.
force_normal_boot
)
if
(
cmd
.
force_normal_boot
)
init
=
new
FirstStageInit
(
argv
,
&
cmd
);
init
=
new
FirstStageInit
(
argv
,
&
cmd
);
else
if
(
access
(
"/sbin/recovery"
,
F_OK
)
==
0
||
access
(
"/system/bin/recovery"
,
F_OK
)
==
0
)
else
if
(
access
(
"/sbin/recovery"
,
F_OK
)
==
0
||
access
(
"/system/bin/recovery"
,
F_OK
)
==
0
)
init
=
new
RecoveryInit
(
argv
,
&
cmd
);
init
=
new
RecoveryInit
(
argv
,
&
cmd
);
else
if
(
check_two_stage
())
else
if
(
check_two_stage
())
init
=
new
FirstStageInit
(
argv
,
&
cmd
);
init
=
new
FirstStageInit
(
argv
,
&
cmd
);
else
else
init
=
new
RootFSInit
(
argv
,
&
cmd
);
init
=
new
RootFSInit
(
argv
,
&
cmd
);
}
}
}
// Run the main routine
// Run the main routine
...
...
native/jni/init/init.hpp
View file @
5a71998b
...
@@ -31,9 +31,9 @@ struct fstab_entry {
...
@@ -31,9 +31,9 @@ struct fstab_entry {
extern
std
::
vector
<
std
::
string
>
mount_list
;
extern
std
::
vector
<
std
::
string
>
mount_list
;
bool
unxz
(
int
fd
,
const
uint8_t
*
buf
,
size_t
size
);
void
load_kernel_info
(
cmdline
*
cmd
);
void
load_kernel_info
(
cmdline
*
cmd
);
bool
check_two_stage
();
bool
check_two_stage
();
int
dump_magisk
(
const
char
*
path
,
mode_t
mode
);
void
setup_klog
();
void
setup_klog
();
/***************
/***************
...
...
native/jni/init/mount.cpp
View file @
5a71998b
...
@@ -378,13 +378,6 @@ void BaseInit::exec_init() {
...
@@ -378,13 +378,6 @@ void BaseInit::exec_init() {
exit
(
1
);
exit
(
1
);
}
}
static
void
patch_socket_name
(
const
char
*
path
)
{
char
rstr
[
16
];
gen_rand_str
(
rstr
,
sizeof
(
rstr
));
auto
bin
=
mmap_data
::
rw
(
path
);
bin
.
patch
({
make_pair
(
MAIN_SOCKET
,
rstr
)
});
}
void
MagiskInit
::
setup_tmp
(
const
char
*
path
)
{
void
MagiskInit
::
setup_tmp
(
const
char
*
path
)
{
LOGD
(
"Setup Magisk tmp at %s
\n
"
,
path
);
LOGD
(
"Setup Magisk tmp at %s
\n
"
,
path
);
xmount
(
"tmpfs"
,
path
,
"tmpfs"
,
0
,
"mode=755"
);
xmount
(
"tmpfs"
,
path
,
"tmpfs"
,
0
,
"mode=755"
);
...
@@ -401,8 +394,8 @@ void MagiskInit::setup_tmp(const char *path) {
...
@@ -401,8 +394,8 @@ void MagiskInit::setup_tmp(const char *path) {
fd
=
xopen
(
"magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
fd
=
xopen
(
"magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
xwrite
(
fd
,
self
.
buf
,
self
.
sz
);
xwrite
(
fd
,
self
.
buf
,
self
.
sz
);
close
(
fd
);
close
(
fd
);
dump_magisk
(
"magisk"
,
0755
);
patch_socket_name
(
"magisk"
);
// The magisk binary will be handled later
// Create applet symlinks
// Create applet symlinks
for
(
int
i
=
0
;
applet_names
[
i
];
++
i
)
for
(
int
i
=
0
;
applet_names
[
i
];
++
i
)
...
...
native/jni/init/rootdir.cpp
View file @
5a71998b
...
@@ -174,6 +174,13 @@ static void magic_mount(const string &sdir, const string &ddir = "") {
...
@@ -174,6 +174,13 @@ static void magic_mount(const string &sdir, const string &ddir = "") {
}
}
}
}
static
void
patch_socket_name
(
const
char
*
path
)
{
char
rstr
[
16
];
gen_rand_str
(
rstr
,
sizeof
(
rstr
));
auto
bin
=
mmap_data
::
rw
(
path
);
bin
.
patch
({
make_pair
(
MAIN_SOCKET
,
rstr
)
});
}
#define ROOTMIR MIRRDIR "/system_root"
#define ROOTMIR MIRRDIR "/system_root"
#define MONOPOLICY "/sepolicy"
#define MONOPOLICY "/sepolicy"
#define NEW_INITRC "/system/etc/init/hw/init.rc"
#define NEW_INITRC "/system/etc/init/hw/init.rc"
...
@@ -280,9 +287,19 @@ void SARBase::patch_rootdir() {
...
@@ -280,9 +287,19 @@ void SARBase::patch_rootdir() {
patch_init_rc
(
NEW_INITRC
,
ROOTOVL
NEW_INITRC
,
tmp_dir
.
data
());
patch_init_rc
(
NEW_INITRC
,
ROOTOVL
NEW_INITRC
,
tmp_dir
.
data
());
}
}
// Extract magisk
{
auto
magisk
=
mmap_data
::
ro
(
"magisk.xz"
);
unlink
(
"magisk.xz"
);
int
fd
=
xopen
(
"magisk"
,
O_WRONLY
|
O_CREAT
,
0755
);
unxz
(
fd
,
magisk
.
buf
,
magisk
.
sz
);
close
(
fd
);
patch_socket_name
(
"magisk"
);
}
// Mount rootdir
// Mount rootdir
magic_mount
(
ROOTOVL
);
magic_mount
(
ROOTOVL
);
int
dest
=
xopen
(
ROOTMNT
,
O_WRONLY
|
O_CREAT
|
O_CLOEXEC
,
0
);
int
dest
=
xopen
(
ROOTMNT
,
O_WRONLY
|
O_CREAT
,
0
);
write
(
dest
,
magic_mount_list
.
data
(),
magic_mount_list
.
length
());
write
(
dest
,
magic_mount_list
.
data
(),
magic_mount_list
.
length
());
close
(
dest
);
close
(
dest
);
...
@@ -335,15 +352,23 @@ void MagiskProxy::start() {
...
@@ -335,15 +352,23 @@ void MagiskProxy::start() {
// Backup stuffs before removing them
// Backup stuffs before removing them
self
=
mmap_data
::
ro
(
"/sbin/magisk"
);
self
=
mmap_data
::
ro
(
"/sbin/magisk"
);
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
auto
magisk
=
mmap_data
::
ro
(
"/sbin/magisk.xz"
);
char
custom_rules_dir
[
64
];
char
custom_rules_dir
[
64
];
custom_rules_dir
[
0
]
=
'\0'
;
custom_rules_dir
[
0
]
=
'\0'
;
xreadlink
(
TMP_RULESDIR
,
custom_rules_dir
,
sizeof
(
custom_rules_dir
));
xreadlink
(
TMP_RULESDIR
,
custom_rules_dir
,
sizeof
(
custom_rules_dir
));
unlink
(
"/sbin/magisk"
);
unlink
(
"/sbin/magisk"
);
unlink
(
"/sbin/magisk.xz"
);
rm_rf
(
"/.backup"
);
rm_rf
(
"/.backup"
);
setup_tmp
(
"/sbin"
);
setup_tmp
(
"/sbin"
);
// Extract magisk
int
fd
=
xopen
(
"/sbin/magisk"
,
O_WRONLY
|
O_CREAT
,
0755
);
unxz
(
fd
,
magisk
.
buf
,
magisk
.
sz
);
close
(
fd
);
patch_socket_name
(
"/sbin/magisk"
);
// Create symlinks pointing back to /root
// Create symlinks pointing back to /root
recreate_sbin
(
"/root"
,
false
);
recreate_sbin
(
"/root"
,
false
);
...
...
scripts/boot_patch.sh
View file @
5a71998b
...
@@ -53,6 +53,8 @@ if [ -z $SOURCEDMODE ]; then
...
@@ -53,6 +53,8 @@ if [ -z $SOURCEDMODE ]; then
cd
"
`
getdir
"
${
BASH_SOURCE
:-
$0
}
"
`
"
cd
"
`
getdir
"
${
BASH_SOURCE
:-
$0
}
"
`
"
# Load utility functions
# Load utility functions
.
./util_functions.sh
.
./util_functions.sh
# Detect version and architecture
api_level_arch_detect
fi
fi
BOOTIMAGE
=
"
$1
"
BOOTIMAGE
=
"
$1
"
...
@@ -67,9 +69,6 @@ export KEEPFORCEENCRYPT
...
@@ -67,9 +69,6 @@ export KEEPFORCEENCRYPT
chmod
-R
755
.
chmod
-R
755
.
# Extract magisk if doesn't exist
[
-e
magisk
]
||
./magiskinit
-x
magisk magisk
#########
#########
# Unpack
# Unpack
#########
#########
...
@@ -135,14 +134,24 @@ echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
...
@@ -135,14 +134,24 @@ echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
echo
"RECOVERYMODE=
$RECOVERYMODE
"
>>
config
echo
"RECOVERYMODE=
$RECOVERYMODE
"
>>
config
[
!
-z
$SHA1
]
&&
echo
"SHA1=
$SHA1
"
>>
config
[
!
-z
$SHA1
]
&&
echo
"SHA1=
$SHA1
"
>>
config
# Compress to save precious ramdisk space
if
$IS64BIT
;
then
./magiskboot
compress
=
xz magisk64 magisk.xz
else
./magiskboot
compress
=
xz magisk32 magisk.xz
fi
./magiskboot cpio ramdisk.cpio
\
./magiskboot cpio ramdisk.cpio
\
"add 750 init magiskinit"
\
"add 750 init magiskinit"
\
"mkdir 0750 overlay.d"
\
"mkdir 0750 overlay.d/sbin"
\
"add 750 overlay.d/sbin/magisk.xz magisk.xz"
\
"patch"
\
"patch"
\
"backup ramdisk.cpio.orig"
\
"backup ramdisk.cpio.orig"
\
"mkdir 000 .backup"
\
"mkdir 000 .backup"
\
"add 000 .backup/.magisk config"
"add 000 .backup/.magisk config"
rm
-f
ramdisk.cpio.orig config
rm
-f
ramdisk.cpio.orig config
magisk.xz
#################
#################
# Binary Patches
# Binary Patches
...
...
scripts/emulator.sh
View file @
5a71998b
...
@@ -28,14 +28,8 @@ mount_sbin() {
...
@@ -28,14 +28,8 @@ mount_sbin() {
if
[
!
-f
/system/build.prop
]
;
then
if
[
!
-f
/system/build.prop
]
;
then
# Running on PC
# Running on PC
cd
"
`
dirname
"
$0
"
`
/.."
cd
"
$(
dirname
"
$0
"
)
/.."
adb push native/out/x86/busybox scripts/emulator.sh /data/local/tmp
adb push native/out/x86/busybox scripts/emulator.sh native/out/x86/magiskinit native/out/x86_64/magisk /data/local/tmp
emu_arch
=
`
adb shell
uname
-m
`
if
[
"
$emu_arch
"
=
"x86_64"
]
;
then
adb push native/out/x86/magiskinit64 /data/local/tmp/magiskinit
else
adb push native/out/x86/magiskinit /data/local/tmp
fi
adb shell sh /data/local/tmp/emulator.sh
adb shell sh /data/local/tmp/emulator.sh
exit
0
exit
0
fi
fi
...
@@ -43,7 +37,7 @@ fi
...
@@ -43,7 +37,7 @@ fi
cd
/data/local/tmp
cd
/data/local/tmp
chmod
777 busybox
chmod
777 busybox
chmod
777 magiskinit
chmod
777 magiskinit
./magiskinit
-x
magisk
magisk
chmod
777
magisk
if
[
-z
"
$FIRST_STAGE
"
]
;
then
if
[
-z
"
$FIRST_STAGE
"
]
;
then
export
FIRST_STAGE
=
1
export
FIRST_STAGE
=
1
...
@@ -113,7 +107,7 @@ else
...
@@ -113,7 +107,7 @@ else
fi
fi
# Magisk stuffs
# Magisk stuffs
./magiskinit
-x
magisk
$BINDIR
/magisk
cp
-af
./
magisk
$BINDIR
/magisk
chmod
755
$BINDIR
/magisk
chmod
755
$BINDIR
/magisk
ln
-s
./magisk
$BINDIR
/su
ln
-s
./magisk
$BINDIR
/su
ln
-s
./magisk
$BINDIR
/resetprop
ln
-s
./magisk
$BINDIR
/resetprop
...
...
scripts/util_functions.sh
View file @
5a71998b
...
@@ -445,12 +445,6 @@ install_magisk() {
...
@@ -445,12 +445,6 @@ install_magisk() {
$BOOTSIGNED
&&
ui_print
"- Boot image is signed with AVB 1.0"
$BOOTSIGNED
&&
ui_print
"- Boot image is signed with AVB 1.0"
fi
fi
if
$IS64BIT
;
then
mv
-f
magiskinit64 magiskinit 2>/dev/null
else
rm
-f
magiskinit64
fi
# Source the boot patcher
# Source the boot patcher
SOURCEDMODE
=
true
SOURCEDMODE
=
true
.
./boot_patch.sh
"
$BOOTIMAGE
"
.
./boot_patch.sh
"
$BOOTIMAGE
"
...
...
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