--- /dev/null
+This is a README for the major platforms where Netatalk is in use.
+
+Platforms Covered:
+A. Linux
+B. Tru64
+C. Solaris
+D. *BSD
+E. SunOS
+F. Generic
+
+----------------------------------------------------------------
+
+A. Linux
+
+We no longer include linux kernel code with netatalk, since Linux now
+includes AppleTalk support.
+
+1. MAKE CONFIG. Configure your kernel with "make config". Answer yes
+ to "AppleTalk DDP" support.
+
+2. INSTALL KERNEL. Make and install your kernel. Be sure to update
+ your boot blocks!
+
+3. Linux 2.2.x provides the sendfile() call. This reduces overhead
+ when sending/copying files. This option will be autoconfigured on
+ compile. NOTE: you might run into problems if you have this option
+ compiled in and you switch to a machine running an os < 2.2.x.
+
+
+Netatalk supplies two different types of Appletalk servers and both
+can run at the same time. Classic Appletalk requires afpd and
+atalkd. Appletalk over IP only requires afpd.
+
+Classic Appletalk on GNU/Linux requires that CONFIG_ATALK is compiled
+into the kernel or as a kernel module. To check to see if the kernel
+has Appletalk installed:
+
+$> dmesg | grep Apple
+This just parses the boot messages for any line containing
+'Apple'.
+
+To see all the loaded modules (as root):
+$> lsmod
+
+If you don't find it, you may have to compile a kernel and turn on
+Appletalk in Networking options -> Appletalk DDP. You have an option
+to install as a module or directly into the kernel.
+
+Some default distribution kernels have already compiled Appletalk DDP
+as a module, you may have to edit your /etc/modules.conf to include:
+"alias net-pf-5 appletalk ".
+
+Note: check your distribution documentation about editing
+/etc/modules.conf.
+
+For more complete information about the Linux kernel see the
+Kernel-HOWTO:
+http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html
+
+----------------------------------------------------------------
+
+B. TRU64
+
+This is the Tru64 README file for netatalk.
+
+1. Unfortunately, AppleTalk is not available for Digital Unix or Tru64.
+ The reason for this is the kernel patches which Netatalk requires
+ cannot be ported to Tru64. If anyone has the kernel source of Tru64
+ they are welcomed to port the AppleTalk modules themselves.
+
+ As a result, only AppleShare over IP (ASIP) works with Tru64. That
+ is, the program afpd. papd and atalkd compile, but doesn't really
+ work. Anything that requires AppleTalk doesn't work.
+
+2. Netatalk compiles on Tru64 V4.0D or higher using either the built-in
+ DEC C compiler or GCC V2.95.3. Also, either the Tru64 make command or
+ GNU make can be used. Netatalk supports Tru64's Security Integration
+ Architecture (SIA) and runs on machines configured for Base (BSD) or
+ Enhanced (OSFC2) Security without recompilation.
+
+3. A peculiar bug in Netatalk has been noticed on a single Tru64
+ machine. However, because other Tru64 machines have not affected, a
+ patch will not be forthcoming until the circumstances where the bug
+ hits is isolated and a more elegant and appropriate patch can be
+ found. In the meantime, there is a description of the bug below. Any
+ users affected can attempt the workarounds provided. The user is
+ urged to report this to the mailing list so that this bug can be
+ isolated and removed.
+
+ HAVE_GCC_MEMCPY_BUG
+ Description -
+ It appears that memcpy() under Tru64 can fail under some
+ circumstances. This maybe due to the fact that Netatalk is compiled
+ with gcc, but since only gcc can compile Netatalk, this is a mute
+ point.
+
+ Symptoms -
+ The symptoms of this bug is that a 18432 byte file uploaded to
+ the server would upload correctly, but a 18433 byte file would
+ result in a sparse file many megabytes big (16MB+). However, due to
+ the low-level nature of memcpy(), there is no reason why other
+ symptoms could not occur.
+
+ Workarounds -
+ There are two known workarounds at this stage.
+ - The first is to #define the macro HAVE_GCC_MEMCPY_BUG. This forces
+ netatalk to use bcopy() in a few (but not all) cases within the code
+ and is enough to stop the bug from occurring. This is the easiest
+ workaround and would merely alter the standard compilation steps to
+
+ ./configure --with-cflags="-DHAVE_GCC_MEMCPY_BUG"
+ make
+ make install
+
+ - The second workaround is to manually remove the optimisation flag
+ "-O2" from within configure and/or configure.in. Although, this
+ isn't the preferred workaround, it shows that the compiler is
+ (at least) partially at fault.
+
+----------------------------------------------------------------
+
+C. SOLARIS
+
+1. SELECT COMPILER. This distribution is configured to build with
+ gcc. It should also work with cc. At the present time only cc
+ v5.0 and above can build the 64-bit kernel module.
+
+1a. SELECT KERNEL TYPE. Edit sys/solaris/Makefile and set KCFLAGS to
+ include sparcv9 support if you run a 64-bit kernel, or leave it
+ commented out for a 32-bit kernel. Only UltraSPARC systems
+ running Solaris 7 and above support a 64-bit kernel. If you're
+ not sure what kernel you use, run "isainfo -v". You're running a
+ 64-bit kernel if the result includes 64-bit (sparcv9), otherwize
+ it's 32-bit.
+
+ NOTE: If you want both the 32-bit and 64-bit kernel modules to be
+ installed, first compile and install the version appropriate to
+ the kernel that you're currently running, then make clean,
+ compile and install the other version.
+
+2. EDIT NETCONFIG. Add the following line to /etc/netconfig:
+
+ ddp tpi_clts - appletalk ddp /dev/ddp -
+
+ This makes the socket library aware of the AppleTalk protocol
+ family.
+
+3. INSTALL DRIVER. Since the STREAMS ddp driver must be installed as
+ root, we've separated that portion of the build. Type
+
+ make kinstall
+
+ to install the driver. This copies the driver and its config file
+ into /usr/kernel/drv and /usr/kernel/strmod, runs "add_drv ddp" to
+ make the kernel aware of the new driver, and adds an rc file to
+ /etc/rc?.d. Watch out for error messages after it runs add_drv.
+ If you see something like
+ devfsadm: driver failed to attach: ddp
+ Warning: Driver (ddp) successfully added to system but failed to attach
+ then recheck sys/solaris/Makefile and/or try a different compiler.
+
+4. ATALKD.CONF. Under Solaris, you must create atalkd.conf, since
+ Solaris provides no method for determining the names of the
+ available interfaces. It is sufficent to name the available
+ interfaces in atalkd.conf, one per line. E.g.
+
+ le0
+
+ on a line by itself on many Suns. hme0 on Ultras. See atalkd(8).
+
+5. PRINTING. Netatalk can use any postscript printer that has been set
+ up for use by Solaris. If you haven't already set up a printer,
+ type admintool then select Browse --> Printers, and then Edit --> Add
+ and fill in the form for either a local or remote printer. If adding
+ a local printer, set the Printer Type to PostScript. Then find a
+ postscript file and test your printer from the command line. For
+ example if you created a printer called "fred" your print command
+ would be something like: lp -d fred some_file.ps
+
+ Once you have a printer that works under Solaris, you need to create
+ a papd.conf file. For example
+
+ MacLaserjet:\
+ :pr=|/usr/bin/lp -d fred:\
+ :op=nobody:\
+ :pd=/usr/local/etc/HPLJ_4M.PPD:
+
+ See doc/CONFIGURE for more information on papd.conf.
+ Once you have this set up, and assuming netatalk starts up after
+ /etc/rc2.d/S79atalk start
+ you should be able to see the printer from the Macintosh Chooser.
+
+----------------------------------------------------------------
+
+D. *BSD
+
+Note that kernel support for netatalk appears in FreeBSD 2.2-current
+dated after 12 September 1996.
+
+1. KERNEL. Add the line
+
+ options NETATALK
+
+ to the config file for your kernel. Rebuild and install your
+ kernel. Reboot.
+
+----------------------------------------------------------------
+
+E. SunOS
+
+1. KERNEL MODULE. This version of netatalk requires that your kernel
+ be configured with
+
+ options VDDRV
+
+ The loadable kernel module is made and installed during the normal
+ make and make install. NOTE: Unloading the kernel module may not
+ work correctly and may cause your kernel to panic, hang, or do
+ other nasty things.
+
+----------------------------------------------------------------
+
+F. Generic
+
+(It's unknown how applicable this is compared to the current codebase)
+
+ The generic system profile is for use on systems that don't have native
+ appletalk support. For those systems, it should still be possible to get
+ the AFP/tcp portion of netatalk to still work.
+
+ To do that, you will need the following information:
+
+ 1) Endian order: If your machine does not specify the
+ byte-order in netinet/in.h, you may need to modify
+ netatalk/endian.h.
+
+ 2) Integer sizes: If your machine does not define intX_t and
+ u_intX_t, you will need to define them in
+ netatalk/endian.h. To ease matters, you can specify
+ _ISOC9X_SOURCE if you have inttypes.h, HAVE_64BIT_LONGS for
+ 64 bit machines, or HAVE_32BIT_LONGS for 32 bit
+ machines. NOTE: you should only use HAVE_32/64BIT_LONGS on
+ machines that don't have a header file somewhere with the
+ integer sizes. If you have a file with all the relevant
+ bits, modify netatalk/endian.h to include it.
+
+ 3) Quota/statfs information: You may be able to get away with
+ either BSD4_4 or __svr4__, but that's unlikely if your os
+ is some bizarre hybrid. If you don't have quota support,
+ just specify NO_QUOTA_SUPPORT. In addition, if you'll need
+ to specify the include file that gets statfs() (usually
+ either USE_VFS_H or USE_STATFS_H although BSD4_4 and
+ __svr4__ bring in a set of include files for that). Look at
+ etc/afpd/quota.c, unix.c, and unix.h for more information.
+ Finally, if you have a really old version of rquota, you
+ can define USE_OLD_RQUOTA as well.
+
+ 4) path information for lock/spool/printer files. you'll need
+ to specify -D_PATH_LOCKDIR if include/atalk/paths.h doesn't
+ have the correct paths specified for printer info and lock
+ files.
+
+ Beyond that, you should make sure that your operating system looks and
+ smells like a Un*x POSIXy operating system. The only operating systems
+ that netatalk supports that don't quite fit that description are
+ sunos 4 and ultrix. If your operating system is peculiar, you may need
+ to add in compatibility routines (libatalk/compat,
+ include/atalk/compat.h) to make it look more like the others.
+
+ If you would like native AppleTalk support, you will need kernel support
+ for your operating system. Look at the Solaris STREAMS module if your
+ operating system supports that framework. Otherwise, look at the ddp
+ code in FreeBSD, NetBSD, or OpenBSD if your operating system is BSDish
+ in nature. If your operating system looks different than these two
+ cases, you'll have to roll your own implementation.