# Installation

Netatalk 2 cannot coexist with either Netatalk 1 or Netatalk 3. See the upgrading chapter in this manual if you want to migrate a Netatalk 1 installation to Netatalk 2.

## How to obtain Netatalk

Please have a look at the Netatalk homepage for the most up to date information on where to find the latest version of the software.

https://github.com/Netatalk/netatalk

### Binary packages

Binary packages of Netatalk are included in the package repositories of some Linux and BSD distributions. Installing Netatalk through this channel will give you the most seamless experience, with managed updates when new package versions are available.

You might also want to have a look at 3rd party package repositories for your operating system, such as OpenCSW for Solaris and its descendants, and Homebrew or MacPorts for macOS.

### Source packages

#### Tarballs

Prepackaged tarballs with stable releases of the Netatalk source code are available on the Netatalk releases page on GitHub.

#### Git

Downloading the Git repository can be done quickly and easily:

1. Make sure you have Git installed. `which git` should produce a path to git.

       $ which git
       /usr/bin/git

2. Now get the source:

       $ git clone https://github.com/Netatalk/netatalk.git netatalk-code
       Cloning into 'netatalk-code'...
       remote: Enumerating objects: 41592, done.
       ...
       Resolving deltas: 100% (32227/32227), done.

   This will create a local directory called `netatalk-code` containing a complete and fresh copy of the whole Netatalk source tree from the Git repository.

3. If you don't specify a branch or tag, you will get the bleeding edge development code. In order to get the latest stable Netatalk 2.4 code, for instance, check out the branch named "branch-netatalk-2-4":

       $ git checkout branch-netatalk-2-4

4. In order to keep your repository copy updated, occasionally run:

       $ git pull

## Compiling Netatalk

### Prerequisites

The following pieces of software are likely to have a package available for your OS distribution of choice.

Please see the Netatalk wiki docs for OS specific installation guides.

#### System requirements

Your system needs to meet the following requirements:

- A C compiler: Netatalk compiles fine with gcc > 2.7.95 or later.

To be able to compile with AFP3 support, your system has to support large files (>2GB).

On linux systems glibc > 2.2 is required.

#### Required third-party software

- Berkeley DB

  At the time of writing you need at least version 4.6.

  The recommended version is 5.3, which was the final release under the permissive Sleepycat license, which means that this is what most FLOSS operating systems are distributing.

- Libgcrypt

  The Libgcrypt library enables the DHX2 UAM, which is required to authenticate with OS X 10.7 and later.

#### Optional third-party software

Netatalk can use the following third-party software to enhance its functionality.

- OpenSSL

  OpenSSL 1.x or LibreSSL is needed for the older DHCAST128 (a.k.a. DHX) UAM, which provides the strongest password encryption for Classic Mac OS. The older Random Number UAMs uses this library, too.

- OpenSLP

  SLP
  (Service Location Protocol) is an IETF
  standards track protocol that provides a framework to allow networking applications to discover the existence, location, and configuration of networked services in enterprise networks.

  Mac OS 8.5 - Mac OS X 10.4 use SLP to locate AFP servers.

- Avahi or mDNSResponder

  Mac OS X 10.2 and later prefer Bonjour (aka Zeroconf). Netatalk can advertise AFP servers and Time Machine volumes by using Avahi or mDNSResponder.

  Avahi is a freely-available implementation of Zeroconf. Avahi itself must be built with DBUS support ( `--enable-dbus`).

  Starting with Netatalk 2.2.3, mDNSResponder is also available.

- TCP wrappers

  Wietse Venema's network logger, also known as TCPD or LOG_TCP.

  Security options are: access control per host, domain and/or service; detection of host name spoofing or host address spoofing; booby traps to implement an early-warning system.

- PAM

  PAM provides a flexible mechanism for authenticating users. PAM was invented by SUN
  Microsystems. Linux-PAM is a suite of shared libraries that enable the local system administrator to choose how applications authenticate users.

- Kerberos V

  Kerberos v5 is a client-server based authentication protocol invented at the Massachusetts Institute of Technology. With the Kerberos library, netatalk can produce the GSS UAM library for authentication with existing Kerberos infrastructure.

- ACL and LDAP

  LDAP is an open and industry-standard user directory protocol that works in tandem with the advanced permissions scheme of ACL. On some operating systems ACL and LDAP libraries are built in to the system, while on others you have to install supporting packages to enable this functionality. At least OpenLDAP 2.3 or later is required.

- CUPS

  When building the optional papd print server, CUPS can provide the ability to create printing queues for modern network printers that are AirPrint compatible.

- iconv

  iconv provides conversion routines for many character encodings. Netatalk uses it to provide charsets it does not have built in conversions for, like ISO-8859-1. On glibc systems, Netatalk can use the glibc provided iconv implementation. Otherwise you can use the GNU libiconv implementation.

- CrackLib

  When using the Random Number UAMs and netatalk's own `afppasswd` password manager, CrackLib can help protect against setting weak passwords for authentication with netatalk.

- quota or libtirpc

  Either of these libraries can provide the ability to limit the disk usage per system user, which is controlled at the file system level.

- Perl

  Administrative utilities such as `apple_dump`, `asip-status` and `macusers` rely on the Perl runtime, version 5.8 or later. Additionally, the IO::Socket::IP module is required by asip-status.

- DocBook XSL and xsltproc

  The netatalk documentation (such as this manual) are authored in XML format, and then styled with DocBook XSL stylesheets. We rely on xsltproc to transcode the XML to other human-readable formats.

### Configure and Build
Netatalk

Instructions on how to use the build system are documented in the INSTALL file in the Netatalk source tree.

For examples of concrete steps to compile on specific operating systems, refer to the Compile Netatalk from Source appendix in this manual, which is automatically generated from the CI build scripts.

## Starting and stopping Netatalk

The Netatalk distribution comes with several operating system specific startup script templates that are tailored according to the options given to the build system before compiling. Currently, templates are provided for popular Linux distributions, BSD variants, Solaris descendants, and macOS.

When building from source, you can configure the build system to install the generated startup script(s)
you want by specifying an `init-style` option. For the specific syntax, please refer to the build system's help text.

Some of the non-systemd scripts can be further parametrized by the configuration file netatalk.conf (described in the

netatalk.conf

5 manual page), some obtain that information in another, operating system specific way (like NetBSD, Debian and so on).

If you use the cross-platform `systemd` option, there is no need to specify the system type. Also, the `netatalk.conf` configuration file is not used by systemd unit configurations.

Since new releases of Linux distributions appear all the time and the startup procedure for the other systems mentioned above might change as well, it is probably a good idea to not blindly install a startup script but to confirm first that it will work on your system.

If you use Netatalk as part of a fixed setup, like a Linux distribution, an RPM or a BSD package, things will probably have been arranged properly for you. The previous paragraphs therefore apply mostly for people who have compiled Netatalk themselves.

The following daemons need to be started by whatever startup script mechanism is used:

- atalkd
  (if you use the AppleTalk protocol)

- papd
  (if you want to provide print services via AppleTalk)

- timelord
  (for old style time synchronization via AppleTalk)

- a2boot
  (Apple II boot server via AppleTalk)

- cnid_metad
  (if the dbd CNID backend is used)

- afpd

Additionally, make sure that the various configuration files (`afpd.conf`, `AppleVolumes.default`, `papd.conf` etc.) are in the right place and that `netatalk.conf`
(if used) contains the right entries. If you want e.g. papd to be started using this mechanism, set the environment variable "`PAPD_RUN`"
to "yes" in netatalk.conf. You can inquire netatalk where it is expecting the configuration files to be by running the `afpd -V` command.