Step1: Download and install Terminal IDE (for android 4) and Termux (for android 6) from Google Play on android 4 if your phone don't have it.
Step2: Then untar gentoo_armv6l_unrooted_unlocked_android_v5.tar.gz in /data/data/com.spartacusrex.spartacuside * if you never did it before on that phone.
Step3: Then untar gentoo_armv6l_unrooted_locked_android_v5_v18_diff.tar.bz2 in the same place.
Step4: Then look at /data/data/com.spartacusrex.spartacuside/gentoo_armv6l/00install.txt ; all files in zetc need some editing. Then edit zetc/make.conf
Step5: Then look at /data/data/com.spartacusrex.spartacuside/gentoo_armv6l/00readme.txt
Then you can add a package, see details below.
Download and install Termux (or if you want Terminal IDE) from Google Play. Neither Termux nor Terminal IDE are not from me. Click on "install system" in the Terminal IDE menu. No need to install gcc. If you want a real keyboard, use a ssh connection or type, inside Termux:
pkg install openssh ; ssh-keygen -t rsa # accept defaults; this creates .ssh with correct rights.
ssh other_server_with_sshd_and_ssh cat .ssh/*.pub > .ssh/authorized_keys
sshd ; ssh -R 8022:localhost:8022 other_server_ith_sshd_and_ssh
Then, from a comfortable terminal on the other_server_with_sshd_and_ssh, use :
ssh -P 8022 localhost
This is the end of optional part. It is mandatory to type:
export PLACE=/data/data/com.termux/usrex.spartacuside
export EPREFIX="$PLACE"/gentoo_armv6l
If you are using Terminal IDE, you might try:
export PLACE=/data/data/com.spartacusrex.spartacuside
export EPREFIX="$PLACE"/gentoo_armv6l
This registers the place where gentooandroid will be installed. You can skip reading the remaining of this paragraph if you want to avoid some bugs. If you prefer other terminal applications, like Terminal Emulator or Amazon's Terminal Emulator or Apple's bash at iTunes, or prefer to use an microSD card, then $PLACE should be updated to something of the same length in characters, and with exactly 3 slashes (/). If $PLACE has four slashes instead of three, see possible fix in step 3.1. If it has more that four slashes, just cross your fingers, you are in untested territory. $PLACE should be in a partition of type ext2, ext3, ext4, or ntfs according to cat /proc/mounts. If you have a place with filesystem fat or vfat, Android 4.1 is known not to work ; Android 4.4 will work. If you have a place with filesystem fuse or sdcardfs, you might create a file there, then try to find that file in /data/media or in something appearing in mount | grep block on ntfs/ext* filesystem: this will give you the right name). My $PLACE currently contains 4GB of files.
You can test $PLACE using:
mkdir -p $PLACE && cp -a /system/bin/sh $PLACE/sh && $PLACE/sh -c "echo $PLACE seems good." && rm $PLACE/sh
Oldest binaries were build before the loader $PLACE/gentoo_armv6l/lib/ld-linux-armhf.so.3 and so were not linked to that file. Install this APK (source here) then type
export PLACE_LD=/data/data/com.symli/n/3 ; mkdir /data/data/com.termux/com.symli
to define a placeholder for /lib/ld-linux-armhf.so.3. If you cannot install that APK, but have the chance to access to /mnt/extsd or a similar place where you can put a link to $PLACE/gentoo_armv6l/lib/ld-linux-armhf.so.3 whose complete path has same length as $PLACE_LD, then update PLACE_LD. I personnaly use PLACE_LD=/data/data/com.termux/.3 but you might better use /mnt/extsd/ux-armhf.so.3). At last resort, use export PLACE_LD=/proc/5781/cwd/rmhf.so.3 but gentooandroid.sf.net will only be usable by one user at a time. You can test your choice of $PLACE_LD using :
cp -a /system/bin/sh ${PLACE_LD%/*}/sh ; ${PLACE_LD%/*}/sh -c "echo $PLACE_LD seems good." && rm ${PLACE_LD%/*}/sh
We need some tools from Terminal IDE:
export PATH=/data/user/0/com.spartacusrex.spartacuside/files/bin:$PATH
export BUSYBOX=busybox
If you used termux, use instead:
export PATH=/data/data/com.termux/files/bin:$PATH
export BUSYBOX=
Wherever the terminal is lost during next steps (killed), you should redo the step 1 before resuming just after last completed instruction.
Install 1.7Gb of files, which is version 5 of gentooandroid:
cd $PLACE
wget http://sourceforge.net/projects/gentooandroid/files/gentoo_armv6l_unrooted_unlocked_android_v5.tar.bz2/download
mv download gentoo_armv6l_unrooted_unlocked_android_v5.tar.bz2
On terminal IDE, use links instead of wget; when links prompts for a filename, type Enter; then quit links with q. Then unpack (hours long):
umask 022 # necessary for multi-user operations
$BUSYBOX bunzip2 -c < gentoo_armv6l_unrooted_unlocked_android_v5.tar.bz2 | $BUSYBOX tar -xC "$PLACE" ; echo finished. Time to paste next line from sf.net/p/gentooandroid/wiki/InstallingInstructions '?'
rm gentoo_armv6l_unrooted_unlocked_android_v5.tar.bz2
The MD5sum is for example here : md5sum. On termux on android 6.0, I just got error "tar: gentoo_armv6l/usr/share/zoneinfo/Europe/Rome: Cannot hard link to 'gentoo_armv6l/usr/share/zoneinfo/Europe/Vatican':
Permission denied" and similar messages; it may be selinux ...
This will last at least one hour on padfone 2 (ten hours on an NTFS partition of a slow tablet), so you have better dry-run step3, step4 and step5 on any unix/linux computer to familiarize you with them if it is the first time you use sed.:
You can skip the remaining of Step 2 if you are using PLACE_LD=/data/data/com.symli/n/3 and PLACE=/data/data/com.spartacusrex.spartacuside.
Now, update PLACE and PLACE_LD enough to get $PLACE/gentoo_armv6l/bin/grep work (busybox grep and termux's grep does not have -RZ and --devices=skip) ; this is not needed if you use Termux.
cd "$PLACE/gentoo_armv6l/" ; for i in bin/bash lib/lib* usr/lib/gcc/armv6j-hardfloat-linux-gnueabi/4.6.3/lib* usr/lib/lib* lib/ld-linux-armhf.so.3 bin/grep bin/touch bin/echousr/bin/top ; do echo "$PLACE/gentoo_armv6l/$i" | $BUSYBOX tr '\012' '\000' | $BUSYBOX xargs -r0n 1 sh -c 'date="` $BUSYBOX stat -c %y "$1" | $BUSYBOX sed -e '"'"'s:\..*::'"'"' -e '"'"'s/[-:]//g'"'"' -e "s: ::" | $BUSYBOX sed -e "s:..$:.&:"`" ; test ! -p "$1" && test -r "$1" && LANG= $BUSYBOX sed -i -e s:/proc/5781/cwd/rmhf.so.3:"'"$PLACE_LD"'":g -e s:/data/.tmp/ux-armhf.so.3:"'"$PLACE_LD"'":g -e s:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l:"'"$PLACE"'"/gentoo_armv6l:g "$1" ; touch -t $date "$1" true' sh ; done
Now, update PLACE and PLACE_LD everywhere (lasts one hour on padfone S; touch will fail on NTFS, you can substitute it with echo ; if you use Terminal IDE, use "$PLACE"/gentoo_armv6l/bin/grep instead of grep and "s: :.:" instead of "s: ::" | $BUSYBOX sed -e "s:..$:.&:" ):
mkdir "$PLACE"/com.symli
ln -s "$PLACE"/gentoo_armv6l/lib/ld-linux-armhf.so.3 $PLACE_LD || cp "$PLACE"/gentoo_armv6l/lib/ld-linux-armhf.so.3 $PLACE_LD
LD_PRELOAD= LANG= $PLACE/gentoo_armv6l/bin/grep --devices=skip -R -lZ '/proc/5781/cwd/rmhf.so.3\|/data/.tmp/ux-armhf.so.3\|/data/data/com.spartacusrex.spartacuside/gentoo_armv6l' "$PLACE"/gentoo_armv6l | $BUSYBOX xargs -r0n 1 sh -c 'date="` $BUSYBOX stat -c %y "$1" | $BUSYBOX sed -e '"'"'s:\..*::'"'"' -e '"'"'s/[-:]//g'"'"' -e "s: ::" | $BUSYBOX sed -e "s:..$:.&:"`" ; test ! -p "$1" && test -r "$1" && LANG= $BUSYBOX sed -i -e s:/proc/5781/cwd/rmhf.so.3:"'"$PLACE_LD"'":g -e s:/data/.tmp/ux-armhf.so.3:"'"$PLACE_LD"'":g -e s:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l:"'"$PLACE"'"/gentoo_armv6l:g "$1" ; touch -t $date "$1" ; true' sh ; echo finished. Time to proceed to Step 3 from sf.net/p/gentooandroid/wiki/InstallingInstructions '?'
# ln -s "$PLACE"/gentoo_armv6l /data/data/com.spartacusrex.spartacuside # only useful if above command failed
The following line is a faster variant of Step 2 that was abandonned because it requires a tar that has option -i to skip checksum tests.
#Ignore this line. It needs a tar that does not check checksums errors (Schily's [star](http://linuxcommand.org/man_pages/star1.html) `-i` avoid abording but skips these entries; his option `-e` does not substitute in content of extracte dfiles): LANG= busybox tr '\000:' ':\000' | LANG= busybox sed -e s:/proc/5781/cwd/rmhf.so.3:"$PLACE_LD":g -e s:/data/.tmp/ux-armhf.so.3:"$PLACE_LD":g -e s:/data/data/com.spartacusrex.spartacuside:"$PLACE":g | LANG= busybox tr '\000:' ':\000' | busybox tar -vxC "$PLACE"
Update to latest version (currently 18) of gentooandroid:
cd $PLACE
wget http://sourceforge.net/projects/gentooandroid/files/gentoo_armv6l_unrooted_locked_android_v5_v18_diff.tar.bz2/download
mv download diff.tar.bz2
On terminal IDE, use links instead of wget; when links prompts for a filename, type diff.tar.bz2 Enter; then quit links with q.
We now apply the patch. ; if you use Terminal IDE, use "s: :.:" instead of "s: ::" | $BUSYBOX sed -e "s:..$:.&:":
$BUSYBOX bunzip2 -c < diff.tar.bz2 | $BUSYBOX tar -xC "$PLACE"
rm $PLACE/gentoo_armv6l/usr/local/bin/sleep_usr_lib_portage_bin_ebuild.sh_failed_will_redo # this is a fifo.
$BUSYBOX bunzip2 -c < diff.tar.bz2 | $BUSYBOX tar -t | grep -v 'gentoo_armv6l/etc/localtime\|template_zetc/dev/stderr' | $BUSYBOX tr '\012' '\000' | $BUSYBOX xargs -r0n 1 sh -c 'date="`$BUSYBOX stat -c %y "$1" | $BUSYBOX sed -e '"'"'s:\..*::'"'"' -e '"'"'s/[-:]//g'"'"' -e "s: ::" | $BUSYBOX sed -e "s:..$:.&:"`" ; test ! -p "$1" && test -r "$1" && LANG= $BUSYBOX sed -i -e s:/proc/5781/cwd/rmhf.so.3:"'"$PLACE_LD"'":g -e s:/data/.tmp/ux-armhf.so.3:"'"$PLACE_LD"'":g -e s:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l:"'"$PLACE"'"/gentoo_armv6l:g "$1" ; touch -t $date "$1"; true' sh
cd $PLACE/gentoo_armv6l
test ! $PLACE '=' /data/data/com.spartacusrex.spartacuside && LANG= $BUSYBOX find . -path '*'/data/data/com.spartacusrex.spartacuside/gentoo_armv6l -exec mkdir -p {}`echo "$PLACE" | $BUSYBOX sed 's:[^/][^/]*:..:g'`/.."$PLACE" \; -exec mv {} {}`echo "$PLACE" | $BUSYBOX sed 's:[^/][^/]*:..:g'`/.."$PLACE" \;
mv ./gentoo_armv6l/var/cache/edb/dep/data/data/com.spartacusrex.spartacuside/{files,var_tmp} ./gentoo_armv6l/var/cache/edb/dep${PLACE}
LANG= find "$PLACE" -type f -exec grep -aoZHn '^\(#! '"$PLACE"'/gentoo_armv6l'"$PLACE"'/gentoo_armv6l/\|#!'"$PLACE"'/gentoo_armv6l'"$PLACE"'/gentoo_armv6l/\)' {} + | tr '\000/' '/\000' | LANG= grep -a '/1:' | LANG= sed -e 's:/.*::' | LANG= tr '\000/' '/\000' | LANG= tee /proc/self/fd/2 | LANG= tr '\012\000' '\000\012' | LANG= xargs -r0 sed -i -e '1s:^#! '"$PLACE"'/gentoo_armv6l'"$PLACE"'/gentoo_armv6l/:#! '"$PLACE"'/gentoo_armv6l/:w /dev/stderr' -e '1s:^#!'"$PLACE"'/gentoo_armv6l'"$PLACE"'/gentoo_armv6l/:#!'"$PLACE"'/gentoo_armv6l/:w /dev/stderr' ;
If $PLACE has 4 slashes (i.e., one slash too many), you can try that below:
mkdir "$PLACE"/com.symli
mkdir "$PLACE"_gentoo_armv6l
ln -s "$PLACE"_gentoo_armv6l/lib/ld-linux-armhf.so.3 $PLACE_LD || cp "$PLACE"/gentoo_armv6l/lib/ld-linux-armhf.so.3 $PLACE_LD
for i in "$PLACE" ; do LANG= grep --devices=skip -R -lZ '/proc/5781/cwd/rmhf.so.3\|/data/.tmp/ux-armhf.so.3\|/data/data/com.spartacusrex.spartacuside/gentoo_armv6l\|'"$PLACE"'/gentoo_armv6l' "$i" | $BUSYBOX xargs -r0n 1 sh -c 'date="` $BUSYBOX stat -c %y "$1" | $BUSYBOX sed -e '"'"'s:\..*::'"'"' -e '"'"'s/[-:]//g'"'"' -e "s: ::" | $BUSYBOX sed -e "s:..$:.&:"`" ; test ! -p "$1" && test -r "$1" && LANG= $BUSYBOX sed -i -e s:/proc/5781/cwd/rmhf.so.3:"'"$PLACE_LD"'":g -e s:/data/.tmp/ux-armhf.so.3:"'"$PLACE_LD"'":g -e s:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l:"'"$PLACE"'"_gentoo_armv6l:g -e s:"'"$PLACE"'"/gentoo_armv6l:"'"$PLACE"'"_gentoo_armv6l:g "$1" ; touch -t $date "$1" ; true' sh ; echo $i done ; done ; echo finished.
rmdir "$PLACE"_gentoo_armv6l
export EPREFIX="$PLACE"_gentoo_armv6l
mv "$PLACE"'/gentoo_armv6l' "$EPREFIX" # this EPREFIX will have 4 slashes.
mv "$PLACE"'/template_zetc' "$EPREFIX"/..
I typed:
cd $PLACE
mv template_zetc zetc
unset LD_PRELOAD
gentoo_armv6l/00accessWithoutUserChange
chmod 755 . zetc/dev
cfg-update --optimize-backups -t vimdiff # please ignore the message cfg-update-1.8.2-r1: You need root privileges for this mode
sed -i 's:\<10098\>:'`id -u`:g zetc/passwd ${EPREFIX##*/}/00accessWithSsh zetc/make.conf zetc/group
vim zetc/passwd
My file zetc/passwd starts now by (I just censored my real name):
xdej:x:10102:10102::/data/data/com.spartacusrex.spartacuside/files:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/bin/bash
sshd:x:10102:10102::/data/data/com.spartacusrex.spartacuside/files:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/bin/bash
myrealname:x:10105:10105::/data/data/jackpal.androidterm/home:/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/bin/bash
I then typed:
vim zetc/shadow
My first and last line of etc/shadow are now:
xdej:$6$fNcUdstringCensoreddrtL/:15803:0:99999:7:::
root:$6$fNcUdstringCensoreddrtL/:15803:0:99999:7:::
I then typed:
vim zetc/automate_resolv.conf
My zetc/automate_resolv.conf now ends by:
export EPREFIX=/data/data/com.spartacusrex.spartacuside/gentoo_armv6l
echo 'nameserver 208.67.222.222 # opendns' > $EPREFIX/etc/resolv.conf
/system/bin/netcfg | ${EPREFIXbin}grep 'wlan0.*172.17' && echo 'nameserver 172.17.2.7' > $EPREFIX/etc/resolv.conf && echo eduroam
/system/bin/netcfg | ${EPREFIXbin}grep 'eth0.*10.75.101.131' && echo 'nameserver 10.75.2.7' > $EPREFIX/etc/resolv.conf && echo workRJ45
/system/bin/netcfg | ${EPREFIXbin}grep 'eth0.*192.168.0.' && echo 'nameserver 123.45.67.89' > $EPREFIX/etc/resolv.conf && echo homeRJ45
/system/bin/netcfg | ${EPREFIXbin}grep 'wlan0.*10.75.100.239' && echo 'nameserver 10.75.2.7' > $EPREFIX/etc/resolv.conf && echo workwifi
I then typed:
source ${EPREFIX##*/}/00accessWithoutUserChange
cp ${EPREFIX##*/}/00accessWithoutUserChange /sdcard/c
nano -w zetc/group
The last lines of zetc/group are now:
inet:x:3003:xdej
everybody:x:9997:xdej
net_bw_stats:x:3006:xdej
xdej:x:10140:xdej
all_a140:x:50140:xdej
So that
/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/usr/bin/id showed to me:
uid=10140(xdej) gid=10140(xdej) groups=10140(xdej),3003(inet),9997(everybody),50140(all_a140)
and /system/bin/id showed to me:
uid=10140(u0_a140) gid=10140(u0_a140) groups=10140(u0_a140),3003(inet),9997(everybody),50140(all_a140) context=u:r:untrusted_app:s0:c512,c768
Notice that xdej and u0_a102 are different, and everything else is exactly the same.
ln -is ../${EPREFIX##*/}/usr/share/zoneinfo/America/Toronto zetc/localtime
rm -rf zetc/tmp ; ln -s /mnt/usbhost1/tmp zetc
rm -rf zetc/var_tmp ; ln -s /mnt/usbhost1/var_tmp zetc
vim zetc/recreate_tmp
zetc/recreate_tmp is
# please create here the names of dirs on which zetc/tmp and zetc/var_tmp point to. Will be used by gentoo_armv6l/usr/local/bin/gentoo_armv6l_bash
mkdir /mnt/usbhost1/var_tmp
mkdir /mnt/usbhost1/tmp
chmod 1777 /mnt/usbhost1/var_tmp /mnt/usbhost1/tmp
now:
PLACE_TMP=/data/data/com.symli
to create it, apply steps on https://stackoverflow.com/a/33499591/2987828
cd $EPREFIX
vim
:set binary
:e lib/libc-2.15.so
:14931
then use command r to get:
^@^@Unknown signal^@^@/data/^@^@w+b^@/data^@^@^@TMPDIR^@^@%*s%*scom.symli/XXXXXX
:wq
To allow for ssh inbound connection, with 00sshServer and 00accessWithSsh:
ssh-keygen -t dsa
vim zetc/hosts.default
My zetc/hosts.default now contains
192.168.0.12 wifelaptop
192.168.0.10 desktop
Miscelanious:
chmod -R o+X gentoo_armv6l
chmod o+w gentoo_armv6l/var/cache/fonts
chmod -R o+X files/system # to authorize terminalide-bash to other users.
chmod o+X files # to authorize terminalide-bash to other users.
gentoo_armv6l/00accessWithoutUserChange
rm $EPREFIX/lib/libpam.so.0
rm $EPREFIX/lib/libpam_misc.so.0
rm $EPREFIX/lib/libpamc.so.0
gentoo_armv6l/00sshServer # PTY allocation request failed on channel 0 :-( but a client sshfs can still use that server :-)
mkdir $EPREFIX/tmp/packages ; ln -s $EPREFIX/tmp/packages $EPREFIX/packages
rm $EPREFIX/$EPREFIX
ln -s ../../.. $EPREFIX/$EPREFIX
To install package xyzabc without compiling anything, use:
PORTAGE_BINHOST=http://sourceforge.net/projects/gentooandroid/files/packages/packages emerge --autounmask-write -GKav xyzabc ; cfg-update -u -t vimdiff
If you care about options of packages, use:
PORTAGE_BINHOST=http://sourceforge.net/projects/gentooandroid/files/packages/packages emerge --autounmask-write -GKav --binpkg-respect-use=y xyzabc ; cfg-update -u -t vimdiff
If you ignore what to replace xyzabc with, try to google the name of the executable and "ebuild".
If it explains that something should be updated, you may try to re-run this instruction. You may replace xyzabc by firefox (YES, vanilla firefox for arm), gnucash or evince (PDF reader), this will gives a 2013 (old) compiled version.
To install package xyzabc with eventual compilation, use:
PORTAGE_BINHOST=http://sourceforge.net/projects/gentooandroid/files/packages/packages emerge --autounmask-write -gbav --binpkg-respect-use=y xyzabc; cfg-update -u -t vimdiff
If you do not know how gentoo named the package you want (the string to put instead of xyzabc), try to google the name of the executable and "ebuild". You may have to read http://www.gentoo.org/proj/en/gentoo-alt/prefix/techdocs.xml to make some reluctant packages to build in gentooandroid.
Because last emerge --sync was done in 2012, chances are if yo uemerge a package that I did not add into ,
you will get failing downloads like:
Downloading 'http://gentoo.tiscali.nl/distfiles/dhcpcd-6.2.0.tar.bz2'--2018-04-04 17:50:52-- http://gentoo.tiscali.nl/distfiles/dhcpcd-6.2.0.tar.bz2Resolving gentoo.tiscali.nl... 195.241.77.98Connecting to gentoo.tiscali.nl|195.241.77.98|:80...
If you can provide the file (google its filename), type control-Z, then:
cd ../gentoo_armv6l/usr/portage/distfiles
rm dhcpcd-6.2.0.tar.bz2
wget https://ftp.osuosl.org/pub/blfs/conglomeration/dhcpcd/dhcpcd-6.2.0.tar.bz2
fg
WARNING: if you want to use emerge --sync because Gentoo complains that the portage tree is one year outdated, or if you want to reemerge some core packages, AND if you are ready to adapt 10% of the updated .ebuilds yourself (then FEATURES=-sandbox /path/to/the/ebuild/you/patched.ebuild manifest will be necessary to take your changes in account; you will need to learn from http://www.gentoo.org/proj/en/gentoo-alt/prefix/techdocs.xml and from my most recent .ebuild modifications): please read $EPREFIX/00readmeDevelopper.txt, and good luck.
. /sdcard/start
This will give you again the bash access in GentooAndroid.
If you want help, look at http://forum.xda-developers.com/showthread.php?p=43256170#post43256170
If you want to post your questions, make an account at forum.xda-developers.com. I will also look at #gentoo-prefix and at tickets here https://sourceforge.net/p/gentooandroid/tickets/, but not very often.
[*] If you want to spare the main memory of your phone, you can untar this 1.8Go in another place (executable files should be able to execute and the partition should be mounted automatically, so this may mean that you need a microSD which is formated as ntfs), then do ln -s /Removable/Storage1/update/this/path/gentoo_armv6l /data/data/com.spartacusrex.spartacuside/gentoo_armv6l or better use the detailed version of installation instructions.
Thanks to http://gentoo.2317880.n4.nabble.com/Ideas-for-this-year-s-Google-Summer-of-Code-td260343.html for ideas.
http://kevinboone.net/kbox2.html for text-only applications, but has a larger number of bug reports so has less bugs.
https://play.google.com/store/apps/details?id=champion.gnuroot.gentoo based on https://github.com/corbinlc/gnuroot which uses fakeroot-ng, which means that file access are not native. X available through VNC or event https://play.google.com/store/apps/details?id=x.org.server
https://play.google.com/store/apps/details?id=com.cuntubuntu also based on fakeroot-ng, which means that file access are not native.
http://wiki.gentoo.org/wiki/Prefix/libc which is very similar but not tried on Android yet.
If you are ready to root your phone, you can also try wiki.gentoo.org/wiki/Project:Android which is based on Wayland graphical output, http://thinkmoult.com/installing-gentoo-android-chroot/ which needs chroot,