diod.conf(5)
π diod.conf β the distributed I/O daemon config file, bestie edition β¨
okay so picture this: diod.conf is the config file for the distributed I/O daemon, and it's literally a whole LUA script. yeah. not a boring key-value situation, an actual grown-up scripting language. we love that for us π
πΈ NAME πΈ
diod.conf β the distributed I/O daemon configuration file, aka the glow-up your daemon deserves π
β¨ DESCRIPTION β¨
so the tea is: diod.conf is actually a LUA script. not kidding. the internal config defaults get overridden by whatever you set in this file, and some of those values can then get overridden again on the command line. layers, bestie. it's giving onion π§
config settings take the form of LUA global variables which get read out after the config file is executed. so basically the values of those variables can either be statically assigned or computed. math? logic? all valid. iconic behavior honestly. the variables are described below π
π¦ CONFIG VARIABLES π¦
listen = { "IP:PORT" [,"IP:PORT",...] }β list the interfaces and ports thatdiodshould listen on. the default is"0.0.0.0:564". set it, forget it, or go wild with multiple entries π«exports = { "/path" [, "/path", ...] }β list the file systems that clients will be allowed to mount. all paths should be fully qualified (yes, the whole thing, no shortcodes). the exports table can include two types of element: a string element (like above), or an alternate table element form{ path="/path", opts="ro" }. in that alternate form, the (optional)optsattribute is a comma-separated list of export options, as described below in EXPORT OPTIONS. and yes, you can absolutely mix the two table element forms in the exports table. note that althoughdiodwill not traverse file system boundaries for a given mount due to inode uniqueness constraints, subdirectories of a file system can be separately exported. so like, yes and no, iykyk π€·ββοΈexportall = 1β export all file systems listed in/proc/mounts. if new file systems are mounted afterdiodhas started, they will become immediately mountable. no restart needed, we love a live update. if there's a duplicate entry for a file system in the exports list, any options listed in the exports entry will apply π₯exportopts = "opt,opt,..."β establish a default set of export options. heads up: these are overridden, not appended to, byoptsattributes in an"exports"entry. so don't expect them to stack, bestie, it's a takeover not a collab πnwthreads = INTEGERβ sets the (fixed) number of worker threads created to handle 9P requests for a unique aname. the default is16per aname. fixed. not flex. periodt πauth_required = 0β allow clients to connect without authentication, i.e. without a valid MUNGE credential. convenient? yes. secure? girl, that's a choice πuserdb = 0β this option disables password/group lookups. it allows any uid to attach and assumesgid=uid, and supplementary groups contain only the primary gid. minimalist. no cap π§allsquash = 1β remap all users to"nobody". the attaching user need not be present in the password file. everyone's nobody, nobody's somebody, it's a vibe πsquashuser = "nobody"β change the squash user from the default ofnobody. the squash user must be present in the password file. mandatory presence, no exceptions πlogdest = "DEST"β set the destination for logging.DESTis in the form ofsyslog:facility:levelorfilename. the default issyslog:daemon:err. choose your adventure πstatfs_passthru = 1β this option configuresstatfsto return the host file system's type rather thanV9FS_MAGIC. the default is0(returnV9FS_MAGIC). mystery vs. clarity, you decide β
π EXPORT OPTIONS π
the following export options are defined, bestie, take notes:
roβ export the file system read-only. look, don't touch. very demure πsuppressβ exclude this file system from exports. useful followingexportall = 1. the "not you" of export options πsharefdβ allow limited server-side file descriptor sharing for files openedO_RDONLYby the same user. sharing is caring, but only sometimes πprivportβ reject attach request unless client is bound to a port in the privileged port range (512-1023). thediodcatutility has a--privportoption which, when run as root, binds to a privileged socket before connecting. this provides limited additional security, especially in open networks, as it is vulnerable to IP spoofing attacks. so like, it helps but don't get cocky π«Άnoauthβ allow attach to succeed without authentication. the "no thoughts, just vibes" option. use responsibly π
π EXAMPLE π
here's a whole example, copy-paste ready, you're welcome:
--
-- example diod.conf
--
listen = { "0.0.0.0:10002" }
exports = {
"/home",
"/usr/global",
{ path="ctl", opts="ro,noauth" },
{ path="/usr/local", opts="ro" },
}
nwthreads = 8
see? mixing string elements and table elements, it's a whole aesthetic β¨
π FILES π
/etc/diod.confβ the main character, the file itself π
π« SEE ALSO π«
lua (1)diod (8)openlog (3)
and for the lua girlies: http://www.lua.org/ π
real talk for a sec:auth_required = 0andnoauthare literal security choices you're making, not just config lines. know what you're doing before you go slashing those guards, bestie. be safe out here π
β¨ that's the whole page, you're literally a diod.conf expert now β¨
this was diod.conf(5) from the diod package, version 1.0-pre27-516-g0d87511, dated... well, the man page says diod in the footer, so go off king π π¦πΈπ«Ά
π¦ where this page comes from
- opensuse-leap 16.0: diod 1.0.24+53.g0d87511-bp160.1.13 Β· GPL-2.0-or-later
- opensuse-leap 16.0: diod 1.0.24+53.g0d87511-bp160.1.13 Β· GPL-2.0-or-later
- opensuse-leap 16.0: diod 1.0.24+53.g0d87511-bp160.1.13 Β· GPL-2.0-or-later
- opensuse-leap 16.0: diod 1.0.24+53.g0d87511-bp160.1.13 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms