I have got things minimally working with a 64 bit kernel, but there is
a kernel panic that arises on killproc atalkd that is perhaps a mystery still.
Maybe this report will help other people decide whether they want to pursue this
path.

###

First thing to do is to build netatalk-1.4b2+asun2.1.3 in 32 bit mode
with gcc.    I did this with the following Makefile changes:

diff -r netatalk-1.4b2+asun2.1.3/Makefile netatalk-1.4b2+asun2.1.3-gcc.32/Makefile
35c35
< DESDIR=/usr/local
---
> #DESDIR=/usr/local
40c40
< TCPWRAPDIR=/usr
---
> #TCPWRAPDIR=/usr
44c44
< PAMDIR=/usr
---
> #PAMDIR=/usr

I didn't want to figure out DES, tcp wrappers, or PAM.


diff -r netatalk-1.4b2+asun2.1.3/etc/afpd/Makefile 
netatalk-1.4b2+asun2.1.3-gcc.32/etc/afpd/Makefile
19c19
<       ${PAMDEFS} -DAPPLCNAME
---
>       ${PAMDEFS} -DAPPLCNAME -DSHADOWPW

I needed this under Solaris 2.6.


With these changes, make, make install, and make kinstall,
netatalk works well enough for my purposes under
Solaris 2.6 or 7 in 32 bit mode.

###

To get to 64 bit mode, I first obtained the Sun 5.0 cc compiler and a license.
The CD was included either in my UltraSPARC 5 box or in the Solaris 7 box -
I forget which.

I unpacked another copy of netatalk, made the changes listed above for 32
bit mode, and then made these additional:

diff -r /usr/dist/sparc-S2/netatalk-1.4b2+asun2.1.3-gcc.32/rc.atalk.sysv 
/usr/dist/sparc-S2/netatalk-1.4b2+asun2.1.3-cc.64/rc.atalk.sysv
77c77
<               killproc atalkd;                echo ' atalkd\c'
---
> sync;         echo SKIP killproc atalkd;              echo ' atalkd\c'

killproc atalkd causes a kernel panic "untimeout: impossible timeout"
so I comment it out, to defer the panic as late as possible in the shutdown
process.    This panic existed under 64-bit Solaris no matter what other
changes I tried.

diff -r netatalk-1.4b2+asun2.1.3-gcc.32/sys/solaris/Makefile 
netatalk-1.4b2+asun2.1.3-cc.64/sys/solaris/Makefile
5,7c5,7
< CC=           gcc
< KCFLAGS=      -D_KERNEL -Wall -Wstrict-prototypes ${KGCCFLAGS}
< OPTOPTS=      -O
---
> #CC=          gcc
> #KCFLAGS=     -D_KERNEL -Wall -Wstrict-prototypes ${KGCCFLAGS}
> #OPTOPTS=     -O
10,12c10,13
< #CC=          /opt/SUNWspro/bin/cc
< #KCFLAGS=     -D_KERNEL
< #OPTOPTS=     -fast -xO4 -xstrconst -xtarget=generic
---
> CC=           /opt/SUNWspro/bin/cc
> KCFLAGS=      -D_KERNEL
> OPTOPTS=      -xarch=v9

-xarch=v9 enables 64-bits.    I had problems with "REG_G2" during linking
if I compiled with any optimization level.

diff -r netatalk-1.4b2+asun2.1.3-gcc.32/sys/solaris/Makefile 
netatalk-1.4b2+asun2.1.3-cc.64/sys/solaris/Makefile
85,86c86,87
<       ${INSTALL} -c ddp /usr/kernel/drv/ddp
<       ln /usr/kernel/drv/ddp /usr/kernel/strmod/ddp
---
>       ${INSTALL} -c ddp /usr/kernel/drv/sparcv9/ddp
>       ln /usr/kernel/drv/sparcv9/ddp /usr/kernel/strmod/sparcv9/ddp

Solaris convention puts 64-bit kernel drivers in /usr/kernel/drv/sparcv9/
rather than in /usr/kernel/drv/.

###

With these changes, I could make, make install, and make kinstall.
But

 1) killproc atalkd causes a kernel panic "untimeout: impossible timeout"
running under 64-bit Solaris, no matter what other changes I tried

 2) netatalk wouldn't work, as far as the Mac clients were concerned.
They could see the server but hung during attempts to connect with their
home directories via the chooser.

Kernel panics aren't great, but I could defer the one in 1) by commenting
out the killproc atalkd in /etc/init.d/atalk.    I am trying that for a
couple of days to see what else is broken in 64 bits.

To handle 2), I did "make install" under 32 bits again, then
"make kinstall" under 64 bits, so that only the kernel driver was 64 bits.   
This worked fine as far as restoring
basic netatalk functionality as far as the Mac clients were concerned.
It didn't help the kernel panic, but it didn't make it any worse.


David Hough
[EMAIL PROTECTED]

Reply via email to