Appendix A. Compile Netatalk from Source

2024-09-24

Table of Contents

Overview
Operating Systems
Alpine Linux
Arch Linux
Debian Linux
Fedora Linux
openSUSE Linux
Ubuntu Linux
macOS
DragonflyBSD
FreeBSD
NetBSD
OpenBSD
OmniOS
Solaris

Overview

This appendix describes how to compile Netatalk from source for specific operating systems.

Please note that the steps below are automatically generated, and may not be optimized for your system.

Choose one of the build systems: Autotools or Meson. Test steps are optional.

Operating Systems

Alpine Linux

Install dependencies

apk add \
  acl-dev \
  autoconf \
  automake \
  avahi-compat-libdns_sd \
  avahi-dev \
  bison \
  build-base \
  cracklib \
  cracklib-dev \
  cracklib-words \
  curl \
  db-dev \
  dbus-dev \
  dbus-glib-dev \
  flex \
  gcc \
  krb5-dev \
  libevent-dev \
  libgcrypt-dev \
  libtirpc-dev \
  libtool \
  libtracker \
  linux-pam-dev \
  mariadb-dev \
  meson \
  ninja \
  openldap-dev \
  openrc \
  openssl-dev \
  pkgconfig \
  rpcsvc-proto-dev \
  talloc-dev \
  tracker \
  tracker-dev \
  tracker-miners

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=openrc \
  --with-tracker-pkgconfig-version=3.0

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-style=openrc \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Meson - Uninstall

ninja -C build uninstall

Arch Linux

Install dependencies

pacman -Sy --noconfirm \
  autoconf \
  automake \
  cracklib \
  gcc \
  libtool \
  make \
  mariadb-clients \
  meson \
  ninja \
  pkgconfig \
  rpcsvc-proto

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-init-hooks \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=systemd

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-hooks=false \
  -Dwith-init-style=systemd \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Meson - Uninstall

ninja -C build uninstall

Debian Linux

Install dependencies

apt-get update
apt-get install --assume-yes --no-install-recommends \
  autoconf \
  automake \
  bison \
  default-libmysqlclient-dev \
  file \
  flex \
  gcc \
  libacl1-dev \
  libavahi-client-dev \
  libcrack2-dev \
  libdb-dev \
  libdbus-1-dev \
  libdbus-glib-1-dev \
  libevent-dev \
  libgcrypt-dev \
  libglib2.0-dev \
  libkrb5-dev \
  libldap2-dev \
  libltdl-dev \
  libpam0g-dev \
  libssl-dev \
  libtalloc-dev \
  libtirpc-dev \
  libtool \
  libtool-bin \
  libtracker-sparql-3.0-dev \
  libwolfssl-dev \
  libwrap0-dev \
  make \
  meson \
  ninja-build \
  quota \
  systemtap-sdt-dev \
  tcpd \
  tracker \
  tracker-miner-fs

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-dependency-tracking \
  --disable-init-hooks \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=debian-systemd \
  --with-tracker-pkgconfig-version=3.0

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-hooks=false \
  -Dwith-init-style=debian-systemd \
  -Dwith-pkgconfdir-path=/etc/netatalk \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Meson - Uninstall

ninja -C build uninstall

Fedora Linux

Install dependencies

dnf --setopt=install_weak_deps=False --assumeyes install \
  automake \
  avahi-devel \
  bison \
  chkconfig \
  cracklib-devel \
  dbus-devel \
  dbus-glib-devel \
  flex \
  glib2-devel \
  krb5-devel \
  libacl-devel \
  libdb-devel \
  libgcrypt-devel \
  libtalloc-devel \
  libtool \
  mariadb-connector-c-devel \
  meson \
  ninja-build \
  openldap-devel \
  openssl-devel \
  pam-devel \
  perl \
  quota-devel \
  systemd \
  systemtap-sdt-devel \
  tracker \
  tracker-devel

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-init-hooks \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=redhat-systemd \
  --with-tracker-pkgconfig-version=3.0

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

sudo make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Autotools - Uninstall

sudo make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-hooks=false \
  -Dwith-init-style=redhat-systemd \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

sudo meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Meson - Uninstall

sudo ninja -C build uninstall

openSUSE Linux

Install dependencies

zypper in -y \
  automake \
  file \
  gawk \
  gcc \
  libtool \
  make \
  meson \
  ninja \
  pkg-config \
  systemd \
  wget &&
zypper in -y \
  bison \
  cracklib-devel \
  dbus-1-devel \
  flex \
  libacl-devel \
  libavahi-devel \
  libdb-4_8-devel \
  libevent-devel \
  libgcrypt-devel \
  libmariadb-devel \
  libopenssl-devel \
  libtalloc-devel \
  libtdb-devel \
  libtracker-sparql-3_0-0 \
  openldap2-devel \
  pam-devel \
  systemtap-sdt-devel \
  tcpd-devel \
  tracker

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-init-hooks \
  --disable-krbV-uam \
  --enable-pgp-uam \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=suse-systemd \
  --with-tracker-pkgconfig-version=3.0

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-hooks=false \
  -Dwith-init-style=suse-systemd \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V

Meson - Uninstall

ninja -C build uninstall

Ubuntu Linux

Install dependencies

sudo apt-get update
sudo apt-get install --assume-yes --no-install-recommends autoconf \
automake \
bison \
cracklib-runtime \
docbook-xsl \
flex \
libacl1-dev \
libavahi-client-dev \
libcrack2-dev \
libdb-dev \
libdbus-1-dev \
libdbus-glib-1-dev \
libevent-dev \
libgcrypt-dev \
libglib2.0-dev \
libkrb5-dev \
libldap2-dev \
libmariadb-dev \
libpam0g-dev \
libssl-dev \
libtalloc-dev \
libtirpc-dev \
libtool \
libtool-bin \
libtracker-sparql-3.0-dev \
libwolfssl-dev \
libwrap0-dev \
meson \
ninja-build \
quota \
systemtap-sdt-dev \
tcpd \
tracker \
tracker-miner-fs \
xsltproc

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-init-hooks \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --with-cracklib \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-docbook=/usr/share/xml/docbook/stylesheet/docbook-xsl \
  --with-init-style=debian-systemd \
  --with-tracker-pkgconfig-version=3.0

Autotools - Generate manual pages

make html

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Run distribution tests

make distcheck

Autotools - Install

sudo make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sudo systemctl start netatalk
sleep 2
asip-status localhost

Autotools - Stop netatalk

sudo systemctl stop netatalk

Autotools - Uninstall

sudo make uninstall

Meson - Configure

meson setup build \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-manual=true \
  -Dwith-init-hooks=false \
  -Dwith-init-style=debian-systemd \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run distribution tests

cd build && meson dist

Meson - Install

sudo meson install -C build

Meson - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sudo systemctl start netatalk
sleep 1
asip-status localhost

Meson - Stop netatalk

sudo systemctl stop netatalk

Meson - Uninstall

sudo ninja -C build uninstall

macOS

Install dependencies

brew install automake berkeley-db libressl libtool meson mysql talloc

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-bdb=/opt/homebrew/opt/berkeley-db \
  --with-init-style=macos-launchd \
  --with-ssl-dir=/opt/homebrew/opt/libressl

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Install

sudo make install

Autotools - Start netatalk

/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sudo /usr/local/bin/netatalkd start && sleep 2 && asip-status localhost

Autotools - Stop netatalk

sudo netatalkd stop

Autotools - Uninstall

sudo make uninstall

Meson - Configure

meson setup build \
  -Dwith-init-style=macos-launchd \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

sudo meson install -C build

Meson - Start netatalk

/opt/homebrew/sbin/netatalk -V
/opt/homebrew/sbin/afpd -V
sudo netatalkd start && sleep 2 && asip-status localhost

Meson - Stop netatalk

sudo netatalkd stop

Meson - Uninstall

sudo ninja -C build uninstall

DragonflyBSD

Install required packages

pkg install -y \
  autoconf \
  automake \
  avahi \
  bison \
  db5 \
  gmake \
  krb5-devel \
  libevent \
  libgcrypt \
  libtool \
  meson \
  mysql80-client \
  openldap26-client \
  perl5 \
  pkgconf \
  py39-gdbm \
  py39-sqlite3 \
  py39-tkinter \
  talloc \
  tracker3

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  --with-ssl-dir=/usr/local \
  --with-tracker-pkgconfig-version=3.0 \
  LDFLAGS=-L/usr/local/lib \
  MAKE=gmake
gmake -j2
gmake install
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
gmake uninstall
echo "Building with Meson"
meson setup build
meson compile -C build
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
ninja -C build uninstall

FreeBSD

Install required packages

pkg install -y \
  autoconf \
  automake \
  avahi \
  bison \
  db5 \
  flex \
  gmake \
  libevent \
  libgcrypt \
  libressl \
  libtool \
  meson \
  mysql84-client \
  openldap26-client-2.6.8 \
  pkgconf \
  talloc \
  tracker3

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-init-style=freebsd \
  --with-ldap=/usr/local \
  --with-ssl-dir=/usr/local \
  --with-tracker-pkgconfig-version=3.0 \
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/local/libdata/pkgconfig
gmake -j $(nproc)
gmake install
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
/usr/local/etc/rc.d/netatalk start
sleep 2
/usr/local/bin/asip-status localhost
/usr/local/etc/rc.d/netatalk stop
gmake uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/local/libdata/pkgconfig \
  -Dwith-init-style=freebsd
meson compile -C build
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
/usr/local/etc/rc.d/netatalk start
sleep 2
/usr/local/bin/asip-status localhost
/usr/local/etc/rc.d/netatalk stop
/usr/local/etc/rc.d/netatalk disable
ninja -C build uninstall

NetBSD

Install required packages

pkg_add \
  autoconf \
  automake \
  avahi \
  bison \
  db5 \
  dbus-glib \
  flex \
  gcc13 \
  gmake \
  gnome-tracker \
  libevent \
  libgcrypt \
  libressl \
  libtool \
  meson \
  mysql-client \
  p5-Net-DBus \
  perl \
  pkg-config \
  talloc

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  MAKE=gmake \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-init-style=netbsd \
  --with-tracker-pkgconfig-version=3.0
gmake -j $(nproc)
gmake install
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
service netatalk onestart
sleep 2
asip-status localhost
service netatalk onestop
gmake uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/pkg/lib/pkgconfig \
  -Dwith-dtrace=false \
  -Dwith-init-style=netbsd \
  -Dwith-tests=false
meson compile -C build
cd build && meson test
cd ..
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
service netatalk onestart
sleep 2
asip-status localhost
service netatalk onestop
ninja -C build uninstall

OpenBSD

Install required packages

pkg_add -I \
  autoconf-2.71 \
  automake-1.16.5 \
  avahi \
  bison \
  dbus-glib \
  db-4.6.21p7v0 \
  gcc-11.2.0p11 \
  gmake \
  libevent \
  libgcrypt \
  libtalloc \
  libtool \
  mariadb-client \
  meson \
  openldap-client-2.6.7v0 \
  openpam \
  pkgconf \
  tracker3

Configure and build

set -e
echo "Building with Autotools"
export AUTOCONF_VERSION=2.71
export AUTOMAKE_VERSION=1.16
export CFLAGS=-I/usr/local/include
export LDFLAGS=-L/usr/local/lib
autoreconf -fi
./configure \
  --disable-init-hooks \
  --with-init-style=openbsd \
  --with-tracker-pkgconfig-version=3.0 \
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
gmake -j $(nproc)
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/local/lib/pkgconfig \
  -Dwith-init-style=openbsd
meson compile -C build
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
rcctl -d start netatalk
sleep 2
asip-status localhost
rcctl -d stop netatalk
rcctl -d disable netatalk
ninja -C build uninstall

OmniOS

Install required packages

pkg install \
  build-essential \
  libtool \
  pkg-config
curl -O https://pkgsrc.smartos.org/packages/SmartOS/bootstrap/bootstrap-trunk-x86_64-20240116.tar.gz
tar -zxpf bootstrap-trunk-x86_64-20240116.tar.gz -C /
export PATH=/opt/local/sbin:/opt/local/bin:/usr/gnu/bin:/usr/bin:/usr/sbin:/sbin:$PATH
pkgin -y install \
  avahi \
  dbus-glib \
  gnome-tracker \
  libevent \
  libgcrypt \
  meson \
  mysql-client \
  talloc

Configure and build

set -e
export PATH=/opt/local/sbin:/opt/local/bin:/usr/gnu/bin:/usr/bin:/usr/sbin:/sbin:$PATH
echo "Building with Autotools"
export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
./bootstrap
./configure \
  --enable-pgp-uam \
  --with-bdb=/opt/local \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=solaris \
  --with-ldap=/opt/local \
  --with-tracker-pkgconfig-version=3.0
make -j $(nproc)
make install
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sleep 2
svcadm enable svc:/network/netatalk:default
sleep 2
/usr/local/bin/asip-status localhost
svcadm disable svc:/network/netatalk:default
make uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/opt/local/lib/pkgconfig \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-style=solaris \
  -Dwith-ldap-path=/opt/local \
  -Dwith-pgp-uam=true
meson compile -C build
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sleep 2
svcadm enable svc:/network/netatalk:default
sleep 2
/usr/local/bin/asip-status localhost
svcadm disable svc:/network/netatalk:default
ninja -C build uninstall

Solaris

Install required packages

pkg install \
  autoconf \
  automake \
  bison \
  flex \
  gcc \
  libevent \
  libgcrypt \
  libtool \
  ninja \
  pkg-config \
  python/pip
pip install meson
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz --no-check-certificate
wget https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.gz --no-check-certificate
tar xvf autoconf-2.71.tar.gz
tar xvf automake-1.16.5.tar.gz
cd autoconf-2.71
./configure --prefix=/usr
make
make install
cd ../automake-1.16.5
./configure --prefix=/usr
make
make install
cd ..

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-dbus-sysconf-dir=/usr/share/dbus-1/system.d \
  --with-init-style=solaris \
  --with-tracker-pkgconfig-version=2.0 \
  --without-afpstats \
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/lib/amd64/pkgconfig
gmake -j $(nproc)
gmake install
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sleep 2
svcadm enable svc:/network/netatalk:default
sleep 2
/usr/local/bin/asip-status localhost
svcadm disable -s svc:/network/netatalk:default
gmake uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/lib/amd64/pkgconfig \
  -Dwith-dbus-sysconf-path=/usr/share/dbus-1/system.d \
  -Dwith-init-style=solaris \
  -Dwith-pgp-uam=true \
  -Dwith-tests=true
meson compile -C build
cd build && meson test
cd ..
meson install -C build
/usr/local/sbin/netatalk -V
/usr/local/sbin/afpd -V
sleep 2
svcadm enable svc:/network/netatalk:default
sleep 2
/usr/local/bin/asip-status localhost
svcadm disable svc:/network/netatalk:default
ninja -C build uninstall