This morning, I upgraded the first Mac around the house to MacOS 10.7 (aka, "Lion"). Went smoothly, and it's re-indexing Spotlight now. Insert comments about how wonderful it is to have to get used to new trackpad finger gestures (gestures are nice, but it'll be a few days before I'm used to the workflow change).
Naturally, Time Machine is now horribly broken. Originally, I was using AFP and netatalk, as described here, but then I switched to SMB and Samba (since Netatalk 2.1.x wasn't as stable). Lion no longer supports either of these methods; it only works with AFP 3.3. That's only supported by Netatalk 2.2, which (as of this writing) was committed to git yesterday.
This page serves to document my odyessy in setting up netatalk on a FreeBSD jail in the basement, from the latest source in git. Here's a couple useful links:
Throughout all this, I'm assuming a similar earlier setup of Time Machine has been done, and the previous netatalk packages have been removed. Right now, I'm mainly concerned with differences.
As shown in the links above, get git, grab the source, and start building:
pkg_add -r git git clone git://netatalk.git.sourceforge.net/gitroot/netatalk/netatalk cd netatalk git checkout netatalk-2-2-0 ./bootstrap ./configure --without-acls --without-pam --disable-ddp --disable-cups
I didn't have appropriate zeroconf headers on my FreeBSD jail, so I didn't
configure with --enable-zeroconf. I'll use Avahi for that setup, if needed.
My config ended up looking like this (printout from ./configure):
Using libraries:
LIBS = -L$(top_srcdir)/libatalk
CFLAGS = -I$(top_srcdir)/include -D_U_="__attribute__((unused))" -g -O2 -I$(top_srcdir)/sys
SSL:
LIBS = -lcrypto
CFLAGS = -I/usr/include/openssl
LIBGCRYPT:
LIBS = -L/usr/local/lib -lgcrypt -lgpg-error
CFLAGS = -I/usr/local/include
BDB:
LIBS = -L/usr/local/lib -ldb-4.6
CFLAGS = -I/usr/local/include/db46
Configure summary:
Install style:
none
AFP:
AFP 3.x calls activated:
Extended Attributes: ad | sys
CNID:
backends: dbd last tdb
UAMS:
DHX ()
DHX2 ()
RANDNUM ()
passwd ()
guest
Options:
DDP (AppleTalk) support: no
CUPS support: no
SLP support: no
Zeroconf support: no
tcp wrapper support: yes
quota support: no
admin group support: yes
valid shell check: yes
cracklib support: no
dropbox kludge: no
force volume uid/gid: no
Apple 2 boot support: no
ACL support: no
The lack of CUPS and ACLs should be tolerable, since this is just going to be used for Time Machine (I use Samba for everything else). Note that initially I did leave ACL support to autodetect; it was enabled, but that led to compilation errors.
Before you make, if you're using FreeBSD like me you'll need to
fix some compilation errors. I'm sure the ports folks will fix this in due
time, but as I'd rather not wait...
First, at.h:
--- sys/netatalk/at.h.orig 2011-07-24 12:28:55.823029116 -0400 +++ sys/netatalk/at.h 2011-07-24 12:29:40.522913740 -0400 @@ -24,6 +24,14 @@ #include#include /* so that we can deal with sun's s_net #define */ +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; + +#include +#include + #ifdef MACOSX_SERVER #include #endif /* MACOSX_SERVER */
Then cnid_metad.c:
--- etc/cnid_dbd/cnid_metad.c.orig 2011-07-24 12:48:52.140103389 -0400 +++ etc/cnid_dbd/cnid_metad.c 2011-07-24 12:49:21.195654454 -0400 @@ -45,6 +45,7 @@ #include#define _XPG4_2 1 #include +#include #include #include
make, make install, and move on. Be warned: since
this install comes from source, there likely won't be an init.d
or rc.d script to start up daemons. A usable FreeBSD template is
below (based of the most current port, as of this writing).
#!/bin/sh
#
# $FreeBSD: ports/net/netatalk/files/netatalk.in,v 1.3 2010/03/27 00:13:49 dougb Exp $
#
# PROVIDE: atalkd papd cnid_metad timelord afpd
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# AppleTalk daemons. Make sure not to start atalkd in the background:
# its data structures must have time to stablize before running the
# other processes.
#
# Set defaults. Please overide these in /usr/local/etc/netatalk.conf
ATALK_ZONE=
ATALK_NAME="`/bin/hostname -s`"
AFPD_UAMLIST=
AFPD_MAX_CLIENTS=50
AFPD_GUEST=nobody
# Load user config
if [ -f /usr/local/etc/netatalk/netatalk.conf ]; then . /usr/local/etc/netatalk/netatalk.conf; fi
netatalk_enable=${netatalk_enable-"NO"}
atalkd_enable=${atalkd_enable-"NO"}
papd_enable=${papd_enable-"NO"}
cnid_metad_enable=${cnid_metad_enable-"NO"}
afpd_enable=${afpd_enable-"NO"}
timelord_enable=${timelord_enable-"NO"}
. /etc/rc.subr
name=netatalk
rcvar=`set_rcvar`
hostname=`hostname -s`
start_cmd=netatalk_start
stop_cmd=netatalk_stop
netatalk_start() {
checkyesno atalkd_enable && /usr/local/sbin/atalkd
checkyesno atalkd_enable && \
/usr/local/bin/nbprgstr -p 4 "${ATALK_NAME}:Workstation${ATALK_ZONE}" &
checkyesno atalkd_enable && \
/usr/local/bin/nbprgstr -p 4 "${ATALK_NAME}:netatalk${ATALK_ZONE}" &
checkyesno papd_enable && /usr/local/sbin/papd
checkyesno cnid_metad_enable && /usr/local/sbin/cnid_metad
checkyesno timelord_enable && /usr/local/sbin/timelord
checkyesno afpd_enable && \
/usr/local/sbin/afpd -n "${ATALK_NAME}${ATALK_ZONE}" \
-s /usr/local/etc/netatalk/AppleVolumes.system \
-f /usr/local/etc/netatalk/AppleVolumes.default \
-g ${AFPD_GUEST} \
-c ${AFPD_MAX_CLIENTS} \
${AFPD_UAMLIST}
}
netatalk_stop() {
checkyesno timelord_enable && killall timelord
checkyesno afpd_enable && killall afpd
checkyesno cnid_metad_enable && killall cnid_metad
checkyesno papd_enable && killall papd
checkyesno atalkd_enable && killall atalkd
}
load_rc_config ${name}
run_rc_command "$1"
A few extra options are needed, both for each mount and for the server itself.
Here's the relavant (non-comment) bits at the end of AppleVolumes.default. Use your own paths and logins as appropriate.
# The line below sets some DEFAULT, starting with Netatalk 2.1. :DEFAULT: options:upriv,usedots # The "~" below indicates that Home directories are visible by default. # If you do not wish to have people accessing their Home directories, # please put a pound sign in front of the tilde or delete it. #~ /tm/laptop "Laptop Backup" allow:laptop_login cnidscheme:dbd options:usedots,upriv,tm /tm/desktop "Desktop Backup" allow:desktop_login cnidscheme:dbd options:usedots,upriv,tm # End of File
And here's the relevant pieces from afpd.conf. Obviously, use
your own server name and IP.
# default: # - -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword SERVER -tcp -ipaddr 10.0.0.10 -noddp -uamlist uams_randnum.so,uams_dhx.so,uams_dhx2.so -nosavepasswordAvahi
Avahi is relatively unchanged. If you were using Avahi before Lion, it should work the same. I think.
File System Bits
Oddly enough, it looks like the
.com.apple.timemachine.supportedfile is no longer required.Client Configuration
I'm still using the preference for an unsupported time machine volume. Run the following on the client:
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1If you aren't dealing with a recently-upgraded client and pre-existing backups, you may want to read the original notes on setting up sparsebundles on the client here.
Caveats
None so far, but then, I'm still in the middle of my first Time Machine backup under Lion. Things largely seem to work, though. Expect to spend some non-trivial time on the first backup, to re-index any pre-existing dumps, but then Time Machine appears to just do its thing normally.
Mike Shuey
Copyright Mike Shuey, July 2011
$Date: 2011/07/24 11:56:50 $