Appendix A. Compile Netatalk from Source

2024-07-06

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 \
  build-base \
  cracklib \
  cracklib-dev \
  cracklib-words \
  cups \
  cups-dev \
  curl \
  db-dev \
  gcc \
  krb5-dev \
  libgcrypt-dev \
  libtirpc-dev \
  libtool \
  linux-pam-dev \
  meson \
  ninja \
  openldap-dev \
  openrc \
  openssl-dev \
  pkgconfig \
  rpcsvc-proto-dev

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-krbV-uam \
  --enable-openrc \
  --enable-pgp-uam \
  --with-cracklib \
  --with-libtirpc

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-tests=true \
  -Dwith-init-style=openrc \
  -Dwith-quota=true

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Uninstall

ninja -C build uninstall

Arch Linux

Install dependencies

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

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-install-privileged \
  --enable-systemd \
  --with-cracklib

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-tests=true \
  -Dwith-init-hooks=false \
  -Dwith-init-style=systemd

Meson - Build

meson compile -C build

Meson - Run tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Uninstall

ninja -C build uninstall

Debian Linux

Install dependencies

apt-get update
apt-get install --assume-yes --no-install-recommends autoconf \
automake \
docbook-xsl \
libacl1-dev \
libavahi-client-dev \
libcrack2-dev \
libcups2-dev \
libdb-dev \
libgcrypt-dev \
libkrb5-dev \
libldap2-dev \
libltdl-dev \
libpam0g-dev \
libssl-dev \
libtirpc-dev \
libtool \
libtool-bin \
libwolfssl-dev \
libwrap0-dev \
meson \
ninja-build \
quota \
tcpd \
xsltproc

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-debian \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --with-cracklib \
  --with-libtirpc

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -Dwith-tests=true \
  -Dwith-init-style=debian-sysv \
  -Dwith-quota=true

Meson - Build

meson compile -C build

Meson - Tests

cd build && meson test

Meson - Install

meson install -C build

Meson - Uninstall

ninja -C build uninstall

Fedora Linux

Install dependencies

dnf --setopt=install_weak_deps=False --assumeyes install \
  automake \
  avahi-devel \
  chkconfig \
  cracklib-devel \
  cups-devel \
  file \
  krb5-devel \
  libacl-devel \
  libdb-devel \
  libgcrypt-devel \
  libtool \
  meson \
  ninja-build \
  openldap-devel \
  openssl-devel \
  quota-devel \
  systemd

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --enable-systemd \
  --with-libtirpc \
  --with-cracklib=/usr/share/cracklib

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Install

sudo make install

Autotools - Uninstall

sudo make uninstall

Meson - Configure

meson setup build \
  -Dwith-init-hooks=false \
  -Dwith-init-style=redhat-systemd \
  -Dwith-quota=true \
  -Dwith-tests=true

Meson - Build

meson compile -C build

Meson - Tests

cd build && meson test

Meson - Install

sudo meson install -C build

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 \
  cracklib-devel \
  glib2-devel \
  krb5-devel \
  libacl-devel \
  libavahi-devel \
  libdb-4_8-devel \
  libgcrypt-devel \
  libmariadb-devel \
  libopenssl-devel \
  libtdb-devel \
  openldap2-devel \
  pam-devel \
  systemtap-sdt-devel \
  tcpd-devel

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --disable-install-priviledged \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-cracklib \
  --enable-systemd

Autotools - Build

make -j $(nproc)

Autotools - Run tests

make check

Autotools - Install

make install

Autotools - Uninstall

make uninstall

Meson - Configure

meson setup build \
  -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 - Uninstall

ninja -C build uninstall

Ubuntu Linux

Install dependencies

sudo apt-get update
sudo apt-get install --assume-yes --no-install-recommends autoconf \
automake \
docbook-xsl \
libacl1-dev \
libavahi-client-dev \
libcrack2-dev \
libcups2-dev \
libdb-dev \
libgcrypt-dev \
libkrb5-dev \
libldap2-dev \
libltdl-dev \
libpam0g-dev \
libssl-dev \
libtirpc-dev \
libtool \
libtool-bin \
libwolfssl-dev \
libwrap0-dev \
meson \
ninja-build \
quota \
tcpd \
xsltproc

Autotools - Bootstrap

./bootstrap

Autotools - Configure

./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --enable-quota \
  --enable-systemd \
  --with-cracklib \
  --with-libtirpc

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

Start netatalk

sudo systemctl start afpd && sleep 2 && asip-status localhost

Stop netatalk

sudo systemctl stop afpd

Autotools - Uninstall

sudo make uninstall

Meson - Configure

meson setup build \
  -Dwith-tests=true \
  -Dwith-manual=true \
  -Dwith-init-hooks=false \
  -Dwith-init-style=systemd \
  -Dwith-quota=true

Meson - Build and generate man pages

meson compile -C build

Meson - Tests

cd build && meson test

Meson - Distribution tests

cd build && meson dist

Meson - Install

sudo meson install -C build

Start netatalk

sudo systemctl start afpd && sleep 2 && asip-status localhost

Stop netatalk

sudo systemctl stop afpd

Meson - Uninstall

sudo ninja -C build uninstall

macOS

Install dependencies

brew install automake berkeley-db libressl libtool meson

Autotools - Bootstrap

./bootstrap

Autotools - Configure

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

Autotools - Build

make -j $(nproc) all

Autotools - Run tests

make check

Autotools - Install

sudo make install

Start netatalk

sudo netatalkd start && sleep 2 && asip-status localhost

Stop netatalk

sudo netatalkd stop

Autotools - Uninstall

sudo make uninstall

Meson - Configure

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

Meson - Build

meson compile -C build

Meson - Tests

cd build && meson test

Meson - Install

sudo meson install -C build

Start netatalk

sudo netatalkd start && sleep 2 && asip-status localhost

Stop netatalk

sudo netatalkd stop

Meson - Uninstall

sudo ninja -C build uninstall

DragonflyBSD

Install required packages

pkg install -y \
  autoconf \
  automake \
  avahi \
  db5 \
  gmake \
  libgcrypt \
  libtool \
  meson \
  perl5 \
  pkgconf \
  py39-gdbm \
  py39-tkinter

Configure and build

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

FreeBSD

Install required packages

pkg install -y \
  autoconf \
  automake \
  avahi \
  db5 \
  gmake \
  libgcrypt \
  libressl \
  libtool \
  meson \
  openldap26-client-2.6.7 \
  pkgconf

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  --enable-krbV-uam \
  --enable-pgp-uam \
  --with-ldap=/usr/local \
  --with-ssl-dir=/usr/local
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/local/libdata/pkgconfig
gmake -j $(nproc)
gmake install
gmake uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/local/libdata/pkgconfig
meson compile -C build
meson install -C build
ninja -C build uninstall

NetBSD

Install required packages

pkg_add \
  autoconf \
  automake \
  avahi \
  db5 \
  gcc13 \
  gmake \
  libcups \
  libgcrypt \
  libressl \
  libtool \
  meson \
  pkg-config

Configure and build

set -e
echo "Building with Autotools"
./bootstrap
./configure \
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/pkg/lib/pkgconfig \
  --enable-krbV-uam \
  --enable-netbsd \
  --enable-pgp-uam
gmake -j $(nproc)
gmake install
service afpd onestart
sleep 2
asip-status localhost
service afpd onestop
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/usr/pkg/lib/pkgconfig \
  -Dwith-init-hooks=false \
  -Dwith-init-style=netbsd
meson compile -C build
meson install -C build
service afpd onestart
sleep 2
asip-status localhost
service afpd onestop
ninja -C build uninstall

OpenBSD

Install required packages

pkg_add -I \
  autoconf-2.71 \
  automake-1.16.5 \
  avahi \
  db-4.6.21p7v0 \
  gcc-11.2.0p9 \
  gmake \
  libgcrypt \
  libtool \
  meson \
  openldap-client-2.6.6v0 \
  openpam \
  pkgconf

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-ddp \
  MAKE=gmake \
  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
gmake -j $(nproc)
gmake install
gmake uninstall
echo "Building with Meson"
meson setup build \
  -Dwith-ddp=false \
  -Dpkg_config_path=/usr/local/lib/pkgconfig
meson compile -C build
meson install -C build
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 \
  libgcrypt \
  meson \
  openldap

Configure and build

set -e
export PATH=/opt/local/sbin:/opt/local/bin:/usr/gnu/bin:/usr/bin:/usr/sbin:/sbin:$PATH
export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
echo "Building with Autotools"
./bootstrap
./configure \
  --disable-install-privileged \
  --enable-pgp-uam \
  --with-bdb=/opt/local \
  --without-ldap
make -j $(nproc)
make install
make uninstall
echo "Building with Meson"
meson setup build \
  -Dpkg_config_path=/opt/local/lib/pkgconfig \
  -Dwith-init-style=solaris \
  -Dwith-ldap-path=/opt/local
meson compile -C build
meson install -C build
chmod 744 /etc/rc2.d/S90netatalk
chmod 744 /etc/rc0.d/K04netatalk
/etc/rc2.d/S90netatalk start
sleep 2
/usr/local/bin/asip-status localhost
/etc/rc2.d/S90netatalk stop
ninja -C build uninstall

Solaris

Install required packages

pkg install \
  autoconf \
  automake \
  gcc \
  libgcrypt \
  libtool \
  pkg-config
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 \
  MAKE=gmake \
  --enable-cups=no
gmake -j $(nproc) all
gmake install
gmake uninstall