This tutorial will show you how to install netatalk on SmartOS . Netatalk is an open-source implementation of the Apple Filing Protocol , which used to be the default file-sharing protocol on % jimmy@vostok beta % . It has since been replaced as the default file-sharing protocol on Macs by SMB/CIFS .

Netatalk can be used to build your own NAS from % jimmy@vostok beta % instead of % jimmy@vostok beta % , which is also an option.

SmartOS supports % jimmy@vostok beta % and % jimmy@vostok beta % CPUs since a while back, in addition to the long-supported Intel CPUs, such as the % jimmy@vostok beta % .

This article assumes you have a working SmartOS host and are logged in as root.

Create a SmartOS Zone

Find the latest base-64 image, in this case, f3a6e1a2-9d71-11e9-9bd2-e7e5b4a5c141:

# imgadm avail | grep base-64

Import the SmartOS image:

# imgadm import f3a6e1a2-9d71-11e9-9bd2-e7e5b4a5c141

Next, we’ll create the container based on the imported SmartOS image. The following command line will create a new SmartOS container with 2048 MB RAM, 32 GB disk, and a statically configured NIC (change the NIC settings to match your network setup). It’ll also pass a ZFS dataset from the host system to the container (/tank/data); this is useful to give netatalk access to files stored on the host.

Create the container:

# vmadm create << EOL
{
  "alias": "netatalk",
  "hostname": "netatalk",
  "brand": "joyent",
  "image_uuid": "f3a6e1a2-9d71-11e9-9bd2-e7e5b4a5c141",
  "max_physical_memory": 2048,
  "max_locked_memory": 2048,
  "max_swap": 2048,
  "quota": 32,
  "filesystems": [
    {
      "type": "lofs",
      "source": "/tank/data",
      "target": "/tank/data"
    }
  ],
  "nics": [
    {
      "nic_tag": "admin",
      "ip": "10.0.2.5",
      "netmask": "255.255.0.0",
      "gateway": "10.0.0.1"
    }
  ],
  "resolvers": ["8.8.8.8", "8.8.4.4"]
}
EOL

This will generate a message: Successfully created VM <UUID>. Make a note of the container UUID; we’ll need it next.

Build and Install netatalk

Next, we’ll log in to the newly created container (remember the UUID from earlier):

# zlogin <UUID>

Update the pkgsrc package manager:

# pkgin up

Install the compiler, build tools and cryptographic dependencies:

# pkgin in gcc47 gmake libevent libgcrypt openssl

Next, we’ll download and extract the latest version of netatalk. This guide uses version 3.1.12. You can find the latest version at SourceForge . Run:

# cd ~
# wget http://sourceforge.net/projects/netatalk/files/netatalk/3.1.12/netatalk-3.1.12.tar.gz
# tar xfvz netatalk-3.1.12.tar.gz
# cd netatalk-3.1.12

Configure the netatalk source before building:

# ./configure --with-ssl-dir=/opt/local --with-libevent-header=/opt/local --with-libevent-lib=/opt/local --with-libgcrypt --with-bdb=/opt/local --with-init-style=solaris --with-init-dir=/var/svc/manifest/network/ --without-pam --prefix=/opt/locals

Building netatalk requires a symbolic link for 64-bit libraries:

# ln -s /opt/local/lib /opt/local/lib/64

Finally, let’s build netatalk (this will likely take a little while):

# make && make install

Configure netatalk

Edit the configuration file /opt/local/etc/afp.conf:

# vim /opt/local/etc/afp.conf

And add the following, changing to match your specific configuration:

[Global]
server name = NAS
log file = /var/log/netatalk.log
uam list = uams_dhx.so,uams_dhx2.so
mimic model = RackMac

[Data]
path = /tank/data
valid users = user
rwlist = user

[Time Machine]
path = /tank/data/timemachine
valid users = user
rwlist = user
time machine = yes
vol size limit = 512000
  • mimic model = RackMac sets the icon displayed in Finder; for available options, see the file on a Mac: /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
  • The [Time Machine] section enables support for Time Machine on your netatalk server

Configure Permissions

Make sure the correct user and group have permissions to access your storage:

# groupadd -g 1000 nas
# useradd -u 1001 -g 1000 -s /usr/bin/false user
# chown -R user:nas /tank/data

Set the password for your user user:

# passwd user

Start Services

And finally, start the required services:

# svcadm enable svc:/network/dns/multicast:default
# svcadm enable svc:/network/netatalk:default

That’s all! You should now be able to access your server via netatalk from your % jimmy@vostok beta % , logging in with the credentials you configured above! 😀

Revision

2023-08-31 Revised language