Difference between revisions of "User Mode Qemu chroot Guide"

From Funtoo
Jump to: navigation, search
(Created page with "=''Funtoo binfmt_misc Qemu chroot Guide: aka (Frankenroot)''= ==''Setting Up Your Filesystem''== ===''Exporting Your Remote Mounts with NFS''=== {{file|name=/etc/exports|desc...")
 
(Blanked the page)
(Tag: Blanking)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
=''Funtoo binfmt_misc Qemu chroot Guide: aka (Frankenroot)''=
 
  
==''Setting Up Your Filesystem''==
 
===''Exporting Your Remote Mounts with NFS''===
 
{{file|name=/etc/exports|desc=NFS file systems being exported|body=
 
# /etc/exports: NFS file systems being exported.  See exports(5).
 
/
 
192.168.0.0/24(insecure,no_root_squash,nohide,rw,sync,no_subtree_check)
 
/boot/
 
192.168.0.0/24(insecure,no_root_squash,nohide,rw,sync,no_subtree_check)
 
/dev/
 
192.168.0.0/24(insecure,no_root_squash,nohide,rw,sync,no_subtree_check,fsid=77)
 
}}
 
 
===''Mounting Your NFS Exports Locally and Binding Pseudo Filesystems''===
 
{{console|body=
 
###i## mount foo.local:/ /mnt/piroot
 
###i## mount -t proc /proc /mnt/piroot/proc
 
###i## mount --rbind /sys /mnt/piroot/{sys,dev}
 
###i## mount --make-rslave /mnt/piroot/{sys,dev}
 
###i## mount -t devpts none /mnt/piroot/dev/pts
 
}}
 
 
{{tip|
 
(For Better Performance!) mount a tmpfs on top of /mnt/piroot/var/tmp/portage
 
}}
 
 
==''Local Configuration''==
 
 
===''Editing Make.conf''===
 
{{file|name=/etc/portage/make.conf|desc=Portage make.conf file|body=
 
# /etc/portage/make.conf:
 
 
QEMU_USER_TARGETS="aarch64 arm"
 
FEATURES="-sandbox -ipc-sandbox -usersandbox candy"
 
}}
 
 
{{warning|
 
You ''WILL'' need to have updated to Funtoo-1.3-release and emerged the latest {{Package|dev-libs/glib}}ebuild as it has fixed the static library creation needed to compile and run Qemu.
 
}}
 
 
{{console|body=
 
###i## emerge -a qemu
 
}}
 
 
===''Building the Wrapper Binary''===
 
 
{{file|name=qemu-arm-wrapper.c|lang=C|desc=qemu arm wrapper|body=
 
    /*
 
    * Call QEMU binary with additional "-cpu cortex-a7" argument.
 
    *
 
    * Copyright (c) 2018 sakaki <sakaki@deciban.com>
 
    * License: GPL v3.0+
 
    *
 
    * Based on code from the Gentoo Embedded Handbook
 
    * ("General/Compiling_with_qemu_user_chroot")
 
    */
 
 
    #include <string.h>
 
    #include <unistd.h>
 
 
    int main(int argc, char **argv, char **envp) {
 
        char *newargv[argc + 3];
 
 
        newargv[0] = argv[0];
 
        newargv[1] = "-cpu";
 
        newargv[2] = "cortex-a7";
 
 
        memcpy(&newargv[3], &argv[1], sizeof(*argv) * (argc -1));
 
        newargv[argc + 2] = NULL;
 
        return execve("/usr/local/bin/qemu-arm", newargv, envp);
 
    }
 
}}
 
 
===''Setting up binfmt_misc''===
 
 
{{console|body=
 
 
###i## echo ":arm:M::\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-arm-wrapper:" > /proc/sys/fs/binfmt_misc/register
 
 
}}
 
 
{{file|name=masky.py|lang=python|desc=masky|body=
 
 
#!/usr/bin/python3
 
import sys
 
import struct
 
import string
 
import codecs
 
 
printable_chars = set(string.printable)
 
printable_chars = set()
 
def print_out_hexstring(hexstring):
 
    to_process = hexstring
 
    while len(to_process):
 
        ascii_value = chr(int(to_process[:2], 16))
 
        to_process = to_process[2:]
 
        if ascii_value in printable_chars:
 
            sys.stdout.write(ascii_value)
 
        else:
 
            sys.stdout.write("\\x" + "{0:02x}".format(ord(ascii_value)))
 
 
chunk_as_hexstring = ""
 
with open(sys.argv[1], 'rb') as f:
 
    for x in range(0,19):
 
      chunk_as_hexstring += f.read(1).hex()
 
mask_as_hexstring = "fffffffffffffffcfffffffffffffffffeffff"
 
mask = int(mask_as_hexstring, 16)
 
chunk = int(chunk_as_hexstring, 16)
 
out_as_hexstring = hex(chunk & mask)[2:]
 
sys.stdout.write(":arm:M::")
 
print_out_hexstring(out_as_hexstring)
 
sys.stdout.write(":")
 
print_out_hexstring(mask_as_hexstring)
 
sys.stdout.write(":/usr/local/bin/qemu-arm-wrapper:\n")
 
}}
 

Latest revision as of 04:14, February 19, 2019