Avahi

From Gentoo Wiki
Jump to:navigation Jump to:search

avahi is a zeroconf service discovery and publishing program. A common use for it is to be able to connect to machines via yourhostname.local within your LAN.

Installation

Kernel

KERNEL Required options
Networking support  --->
   Networking options  --->
     [*]   IP: multicasting

USE flags

Some packages are aware of the zeroconf USE flag pulling in avahi.

USE flags for net-dns/avahi System which facilitates service discovery on a local network

autoipd Build and install the IPv4LL (RFC3927) network address configuration daemon
bookmarks Install the avahi-bookmarks application (requires dev-python/twisted)
dbus Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc)
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
gdbm Add support for sys-libs/gdbm (GNU database libraries)
gtk Use gtk3 for the avahi utilities to build the avahi-ui-gtk3 library
howl-compat Enable compat libraries for howl
introspection Add support for GObject based introspection
ipv6 Add support for IP version 6
mdnsresponder-compat Enable compat libraries for mDNSResponder
mono Build Mono bindings to support dotnet type stuff
nls Add Native Language Support (using gettext - GNU locale utilities)
python Add optional support/bindings for the Python language
qt5 Add support for the Qt 5 application and UI framework
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)

Server

root #emerge --ask net-dns/avahi

Client

root #emerge --ask sys-auth/nss-mdns

Configuration

Server Services

systemd

Enable the server to start whenever systemd thinks it is appropriate:

root #systemctl enable avahi-daemon.service

If you want to use it right away, also start the service:

root #systemctl start avahi-daemon.service

OpenRC

Be sure to add the service to the default runlevel for the server daemon to start on system boot. Do so with the rc-update command:

root #rc-update add avahi-daemon default

Start the service (without restarting) with the rc-service command:

root #rc-service avahi-daemon start

Client Files

Add the appropriate mdns into the hosts line in /etc/nsswitch.conf, An example line looks like:

FILE /etc/nsswitch.conf
hosts:       files mdns4_minimal [NOTFOUND=return] dns mdns4

Once this is installed it should be possible to ping the hostname of the machine appending .local. For example:

user $ping yourhostname.local

Service Discovery

To configure Avahi to advertise zeroconf services to clients, add configurations in /etc/avahi/services. For example, this snippet in /etc/avahi/services/smb.service which will make SMB services discoverable

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 <name replace-wildcards="yes">%h</name>
 <service>
   <type>_smb._tcp</type>
   <port>445</port>
 </service>
 <service>
   <type>_device-info._tcp</type>
   <port>0</port>
   <txt-record>model=RackMac</txt-record>
 </service>
</service-group>

Troubleshooting

Check avahi-daemon is running and listen for 5353 UDP:

root #ss -ltunp | grep 5353

Output:

udp   UNCONN 0      0                          0.0.0.0:5353        0.0.0.0:*     users:(("avahi-daemon",pid=4072,fd=13))
udp   UNCONN 0      0                                *:5353              *:*     users:(("avahi-daemon",pid=4072,fd=14))

Commands like host(1) and dig(1) don't use nsswitch.conf(5), so they can't be used for Avahi diagnostics. Instead, use getent(1). For example:

user $getent hosts gentoo-desktop.local

Output when mdns_minimal in /etc/nsswitch.conf:

fe80::bbbd:5967:6af8:9d27 gentoo-desktop.local

External resources