Skip to content

Instantly share code, notes, and snippets.

@assiless
Last active December 4, 2025 01:26
Show Gist options
  • Select an option

  • Save assiless/a23fb52e8c6156db0474ee8973c4be66 to your computer and use it in GitHub Desktop.

Select an option

Save assiless/a23fb52e8c6156db0474ee8973c4be66 to your computer and use it in GitHub Desktop.
MagiskOnRedroid
setup variables for commands
echo -e "\n
export image=redroid/redroid:11.0.0-amd64
export image_tar=${HOME}/redroid:11.0.0-amd64" >> ${HOME}/.bashrc
source ${HOME}/.bashrc

1 is recommended

1. using docker method

preserve original redroid image
sudo docker pull $image
sudo docker save --output redroidBak.tar $image
backup or install original redroid image
# remove the changed image if exist
sudo docker image rmi -f $image
# install the original image
sudo docker load -i redroidBak.tar

2.using moby method

preserve original redroid image
wget -q "https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh" -P ~ ; chmod u+x ~/download-frozen-image-v2.sh

~/download-frozen-image-v2.sh "$image_tar" redroid/redroid:11.0.0-amd64
backup or install original redroid image
# remove the changed image if exist
sudo docker image rmi -f $image
# install the original image
tar -cC "$image_tar" . | sudo docker load

setting up

mkdir ~/MagiskOnRedroid
cd ~/MagiskOnRedroid
download+extract magisk
find -maxdepth 1 -iname "magisk*" -not -name "*.apk" -exec rm -r {} \;
magisk_file="app-debug.apk"
# download Magisk 9b61bdfc(25201) debug as you did i guess
if [ ! -f $magisk_file ]; then
  wget "https://cdn.jsdelivr.net/gh/topjohnwu/magisk-files@1cea72840fbf690f9a95512d03721f6a710fe02e/app-debug.apk"
fi
# because my machine x64 i will choose x86_64
unzip -j $magisk_file "lib/x86_64/libmagisk64.so" -d magisk
unzip -j $magisk_file "lib/x86_64/libbusybox.so" -d magisk
mv -v magisk/libmagisk64.so magisk/magisk
mv -v magisk/libbusybox.so magisk/busybox
# $ tree ~/MagiskOnRedroid
# .
# ├── app-debug.apk
# └── magisk
#     ├── busybox
#     └── magisk
compress magisk
tar --transform 's/.*\///g' -cf ~/magisk.tar --absolute-names $( find ~/MagiskOnRedroid | grep -E "magisk/|app-debug.apk$" )
remove.rc
cat <<\EOF > ~/remove.rc
on early-init
	export PATH /sbin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
	chmod 0700 /magisk.tar
	chown root root /magisk.tar
	chmod 0700 /setup.sh
	chown root root /setup.sh
	exec root root -- /setup.sh
service magisk-d /sbin/magisk --daemon
	user root
	oneshot
on boot
	start magisk-d
on post-fs-data
	start logd
	rm /dev/.magisk-unblock
	start s1
	wait /dev/.magisk-unblock 5
	rm /dev/.magisk-unblock
service s1 /sbin/magisk --post-fs-data
	user root
	oneshot
service s2 /sbin/magisk --service
	class late_start
	user root
	oneshot
on property:sys.boot_completed=1
	exec /sbin/magisk --boot-complete
on property:init.svc.zygote=restarting
	exec /sbin/magisk --zygote-restart
on property:init.svc.zygote=stopped
	exec /sbin/magisk --zygote-restart
EOF
sudo chmod 644 ~/remove.rc
sudo chown root:root ~/remove.rc
setup.sh
cat <<\EOF > ~/setup.sh
#!/system/bin/sh

# rm /system/fonts/NotoColorEmoji.ttf
tmpPushed=/magisk
rm -rf $tmpPushed
mkdir $tmpPushed
tar -xvf /magisk.tar --no-same-owner -C $tmpPushed
umount /magisk.tar ; rm -v /magisk.tar
mkdir /sbin
chown root:root /sbin
# chmod 0700 /sbin
chmod 0751 /sbin
cp $tmpPushed/magisk /sbin/
cp $tmpPushed/app-debug.apk /sbin/stub.apk
find /sbin -type f -exec chmod 0755 {} \;
find /sbin -type f -exec chown root:root {} \;
# add /sbin
# /sbin/
# ├── magisk
# └── stub.apk


ln -f -s /sbin/magisk /system/xbin/su
mkdir /product/bin
chmod 751 /product/bin
ln -f -s /sbin/magisk /product/bin/su
# add su (override `/system/xbin/su`)
# /product/bin/
# └── su -> /sbin/magisk

mkdir -p /data/adb/magisk
chmod 700 /data/adb
mv $tmpPushed/busybox /data/adb/magisk/
chmod -R 755 /data/adb/magisk
chmod -R root:root /data/adb/magisk
# /data/adb/
# ├── magisk
# │   └── busybox

# rm -rf $tmpPushed
EOF
sudo chmod 700 ~/setup.sh
sudo chown root:root ~/setup.sh

to get magisk working do this:

  1. phase
    • boot with magisk support
    (
    sudo docker stop a11
    clear
    sudo docker run -itd --rm --privileged \
      --name a11 \
      -v ~/data:/data \
      -v ~/remove.rc:/vendor/etc/init/remove.rc \
      -v ~/setup.sh:/setup.sh \
      -v ~/magisk.tar:/magisk.tar \
      -p 5555:5555 \
      redroid/redroid:11.0.0-amd64 \
      ro.secure=0
    )
    
@ayasa520
Copy link

ayasa520 commented Aug 9, 2025

How to make it works with latest Magisk?

You can't, unless you revert the commit and compile magisk yourself.

topjohnwu/Magisk@5d07d0b

@fsleo
Copy link

fsleo commented Aug 14, 2025

Dear author of the teaching article, when I tried to integrate Magisk according to your method, there were some problems. What scripts and files are there in the system after the container is run, but there is no Magisk application. image

This is my build script.

rm -rf ~/MagiskOnRedroid setup.sh remove.rc magisk.tar data
mkdir ~/MagiskOnRedroid
cd ~/MagiskOnRedroid

download+extract magisk

echo'download+extract magisk' ############
find -maxdepth 1 -iname "magisk*" -not -name "*.apk" -exec rm -r {} ;
magisk_file="app-debug.apk"

download Magisk 9b61bdfc(25201) debug as you did i guess

if [ ! -f $magisk_file ]; then
wget "https://cdn.jsdelivr.net/gh/topjohnwu/magisk-files@1cea72840fbf690f9a95512d03721f6a710fe02e/app-debug.apk"
fi

because my machine x64 i will choose x86_64

unzip -j $magisk_file"lib/x86_64/libmagisk64.so" -d magisk
unzip -j $magisk_file"lib/x86_64/libbusybox.so" -d magisk
mv -v magisk/libmagisk64.so magisk/magisk
mv -v magisk/libbusybox.so magisk/busybox

$ tree ~/MagiskOnRedroid

.

├── app-debug.apk

└── magisk

├── busybox

└── magisk

compress magisk

tar --transform 's/.*///g' -cf ~/magisk.tar --absolute-names
(
f
i
n
d

/

M
a
g
i
s
k
O
n
R
e
d
r
o
i
d
|
g
r
e
p

E

"

m
a
g
i
s
k

/

|
a
p
p

d
e
b
u
g
.
a
p
k
" )

remove.rc

cat <<\EOF > ~/remove.rc
on early-init
export PATH /sbin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
chmod 0700 /magisk.tar
chown root root /magisk.tar
chmod 0700 /setup.sh
chown root root /setup.sh
exec root root -- /setup.sh
service magisk-d /sbin/magisk --daemon
user root
oneshot
on boot
start magisk-d
on post-fs-data
start logd
rm /dev/.magisk-unblock
start s1
wait /dev/.magisk-unblock 5
rm /dev/.magisk-unblock
service s1 /sbin/magisk --post-fs-data
user root
oneshot
service s2 /sbin/magisk --service
class late_start
user root
oneshot
on property:sys.boot_completed=1
exec /sbin/magisk --boot-complete
on property:init.svc.zygote=restarting
exec /sbin/magisk --zygote-restart
on property:init.svc.zygote=stopped
exec /sbin/magisk --zygote-restart
EOF
sudo chmod 644 ~/remove.rc
sudo chown root:root ~/remove.rc

setup.sh

cat <<\EOF > ~/setup.sh
#!/system/bin/sh

rm /system/fonts/NotoColorEmoji.ttf

tmpPushed=/magisk
rm -rf $tmpPushed
mkdir $tmpPushed
tar -xvf /magisk.tar --no-same-owner -C $tmpPushed
umount /magisk.tar ; rm -v /magisk.tar
mkdir /sbin
chown root:root /sbin

chmod 0700 /sbin

chmod 0751 /sbin
cp $tmpPushed/magisk /sbin/
cp $tmpPushed/app-debug.apk /sbin/stub.apk
find /sbin -type f -exec chmod 0755 {} ;
find /sbin -type f -exec chown root:root {} ;

add /sbin

/sbin/

├── magisk

└── stub.apk

ln -f -s /sbin/magisk /system/xbin/su
mkdir /product/bin
chmod 751 /product/bin
ln -f -s /sbin/magisk /product/bin/su

add su (override /system/xbin/su)

/product/bin/

└── su -> /sbin/magisk

mkdir -p /data/adb/magisk
chmod 700 /data/adb
mv $tmpPushed/busybox /data/adb/magisk/
chmod -R 755 /data/adb/magisk
chmod -R root:root /data/adb/magisk

/data/adb/

├── magisk

│ └── busybox

rm -rf $tmpPushed

EOF
sudo chmod 700 ~/setup.sh
sudo chown root:root ~/setup.sh
sudo docker stop a12
docker system prune -af
clear
sudo docker run -itd --privileged
--name a12
-v ~/data:/data
-v ~/remove.rc:/vendor/etc/init/remove.rc
-v ~/setup.sh:/setup.sh
-v ~/magisk.tar:/magisk.tar
-p 1109:5555
re_18_2321
redroid.gpu.mode=guest
ro.secure=0

The directory where I am running the script is the/root directory Hope to get your advice and help.

arm64:
unzip -j app-debug.apk "lib/arm64-v8a/libmagisk64.so" -d magisk
unzip -j app-debug.apk "lib/arm64-v8a/libbusybox.so" -d magisk
mv -v magisk/libmagisk64.so magisk/magisk
mv -v magisk/libbusybox.so magisk/busybox

amd64:
unzip -j $magisk_file "lib/x86_64/libmagisk64.so" -d magisk
unzip -j $magisk_file "lib/x86_64/libbusybox.so" -d magisk
mv -v magisk/libmagisk64.so magisk/magisk
mv -v magisk/libbusybox.so magisk/busybox

@asano1313
Copy link

I would like to use Magisk on Redroid 15, but when I try to launch it, I get the following error:

abnormal state
A "su" binary not from Magisk has been detected.
Please remove any competing root solution and/or reinstall magisk.

It seems to detect another root solution, but I’m not sure what to remove or how to fix this.

What is the correct way to configure or modify Redroid 15 so that Magisk can work properly?

@kairusds
Copy link

kairusds commented Dec 2, 2025

Change /vendor/etc/init to /system/etc/init on the -v mount and everything will work as intended. The "magisk app" gets installed but Zygisk and Magisk won't be as marked installed by the app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment