Serve 9P from Unix U9fs is a program that serves Unix files to machines using the 9P protocol, allowing access from instances of Plan 9, Inferno, 9vx, p9p, and other programs and systems. This repository contains a copy of u9fs from the Plan 9 tree, to make it easier to install and update it independently of Plan 9.

Language: C

U9fs serves the Plan 9 protocol 9P from user-space on other operating systems.

It runs on many POSIX-compatible systems, including Linux and MacOS X. Currently, it must first be compiled. See the comments at the top of the makefile for a few special instructions. Ordinarily, you should be able to type:


to create an executable called u9fs.

See the manual page for details of options and arguments.

Unfortunately, installing the program to run automatically under inetd, xinetd or equivalent is rather system-dependent. (MacOS X is an extreme case.) The rest of this file will list recipes known so far.

  • Ubuntu 11.04 (and earlier, and later), with xinetd and authrhosts I keep u9fs in a new directory /bin/9, but it could easily be in /usr/local/bin. It is not setuid. I use the following in /etc/xinetd.d/u9fs: service u9fs { socket_type = stream user = root instances = UNLIMITED wait = no server = /bin/9/u9fs port = 564 } It keeps the default log file in /tmp/u9fs.log. It's an internal machine, and I use rhosts authentication (which is the default): I list acceptable machines in /etc/hosts.equiv, and the server trusts what they send. --, May 2011

  • Debian 7 (and earlier), with inetd, and authp9any I use this configuration on several virtual servers. I keep u9fs in a new directory /bin/9. It is not setuid. I use the following in /etc/inetd.conf: u9fs stream tcp nowait root /bin/9/u9fs u9fs -a p9any I had to add the following to /etc/services: # Local services u9fs 564/tcp The machine is not an internal machine, and I use p9any authentication (usual Plan 9 variant). It takes the secrets from /etc/u9fs.key, which had better be well-protected. There are three lines: the secret; the authentication user ("bootes"); the authentication domain. --, May 2015

  • OpenBSD 4.3, with inetd, and authrhosts; same on FreeBSD 4.8(!) I use this configuration on an internal gateway. I keep u9fs in directory /bin/9. /etc/inetd.conf has the following line: p9fs stream tcp nowait root /bin/9/u9fs u9fs The protocol name "p9fs" is already in /etc/services. --, May 2011

  • MacOS X (last tested on OS X Yosemete (10.10.5) U9fs can be started via ssh using srvssh(4) on Plan 9, or more conventionally by MacOS X's launchd(8). Launchd needs a configuration file. A sample is included here in the file p9fs.list. To make the service available globally, it should be installed as /Library/LaunchDaemons/9pfs.plist. If instead it is installed in /Library/LaunchAgents, it will run only when a user is logged in; if installed in $HOME/Library/LaunchAgents it will run only when that particular user is logged in.

    In order to start the listener it must first be loaded into launchd:

    $ sudo launchctl load /path/to/9pfs.plist

    If you are running the Mac OS X firewall you will need to add an entry to pass the 9pfs protocol in: SystemPreferences->Sharing->Firewall

    The example 9pfs.plist uses 9p authentication, described in detail in, and serves the root of the MacOS X file system. It also assumes the executable lives in /bin/9/u9fs. Edit the configuration file to change those settings. --, September 2015, based on an entry in the Plan 9 wiki

Project Statistics

Sourcerank 3
Repository Size 81.1 KB
Forks 1
Watchers 10
Dependencies 0
Tags 1
Last updated

Recent Tags See all

tip March 29, 2016

Something wrong with this page? Make a suggestion

Last synced: 2018-01-06 06:35:26 UTC

Login to resync this repository