2024-07-14

# Compile Netatalk from Source

## 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-systemd \
      --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-init-hooks=false \
      -Dwith-init-style=debian-systemd \
      -Dwith-pkgconfdir-path=/etc/netatalk \
      -Dwith-quota=true \
      -Dwith-tests=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 \
      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-krbV-uam \
      --enable-pgp-uam \
      --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-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.8 \
      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 \
      -Dwith-pgp-uam=true
    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 update --accept
    pkg install \
      autoconf \
      automake \
      gcc \
      libgcrypt \
      libtool \
      pkg-config
    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 \
      MAKE=gmake \
      --enable-cups=no
    gmake -j $(nproc) all
    gmake install
    gmake uninstall
    echo "Building with Meson"
    meson setup build \
      -Dpkg_config_path=/usr/lib/amd64/pkgconfig \
      -Dwith-init-style=solaris \
      -Dwith-pgp-uam=true
    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