On 6 September 2012 08:21, Neil Millar <[log in to unmask]> wrote:
> Hi,
>
> We're running starlink from an nfs share that is exported
> read-only. We've noticed recently that running the following
> commands gives an error on Redhat 6 but not Redhat 5:
>
> setenv STARLINK_DIR /opt/star-dev
> source $STARLINK_DIR/etc/login
> source $STARLINK_DIR/etc/cshrc
>
> smurf
> kappa
> makemap
>
> makemap
>
> !! SUBPAR: Failed to open interface file /opt/star-dev/bin/smurf/makemap.ifc
> ! Not a directory
> !
> !! DTASK_DCLTASK: failed to start parameter system SUBPAR__IFCOPN, failed to
> ! open compiled interface file
>
> It seems that redhat 6 is using nfs 4 and redhat 5 is using nfs 3 for this
> mount (the defaults). Changing redhat 5 to nfs 4 gives the same error, and
> redhat 6 works fine if it is set to nfs 3. We get the same error from other
> versions of starlink. Changing to read/write also fixes the problem.
>
> Is there anyway we can fix this at the starlink end, rather than forcing
> the mounts to be nfs 3, or any other way round the problem?
>
> The strace output for nfs 3 and nfs 4 is below:
>
> Thanks,
> Neil.
>
> nfs3, ro
> ========
>
> access("./makemap.ifc", R_OK) = 0
> access("./makemap.ifc", F_OK) = 0
> access("./makemap.ifc", R_OK) = 0
> access("./makemap.ifc", W_OK) = -1 EROFS (Read-only file system)
> stat("./makemap.ifc", {st_mode=S_IFREG|0644, st_size=8830, ...}) = 0
> fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> stat("./makemap.ifc", {st_mode=S_IFREG|0644, st_size=8830, ...}) = 0
> open("./makemap.ifc", O_RDONLY|O_CREAT, 0666) = 3
> brk(0xeb67000) = 0xeb67000
> ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffa26650b0) = -1 ENOTTY (Inappropriate ioctl for device)
> read(3, "\t\0\0\0 \t\0\0\0\204\0\0\0 "..., 16384) = 8830
> close(3) = 0
> stat("/home/neil/adam/makemap.sdf", {st_mode=S_IFREG|0644, st_size=1024, ...}) = 0
> open("/home/neil/adam/makemap.sdf", O_RDWR) = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=1024, ...}) = 0
> mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b19429e9000
> lseek(3, 0, SEEK_SET) = 0
> read(3, "SDS\4\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\21"..., 1048576) = 1024
> lseek(3, 1024, SEEK_SET) = 1024
> futex(0x2b19427dc9a0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
> futex(0x2b193de34420, FUTEX_WAKE_PRIVATE, 2147483647) = 0
> brk(0xeb85000) = 0xeb85000
> uname({sys="Linux", node="NAME", ...}) = 0
>
> nfs4,ro
> =======
>
> access("./makemap.ifc", R_OK) = 0
> access("./makemap.ifc", F_OK) = 0
> access("./makemap.ifc", R_OK) = 0
> access("./makemap.ifc", W_OK) = -1 EROFS (Read-only file system)
> stat("./makemap.ifc", {st_mode=S_IFREG|0644, st_size=8830, ...}) = 0
> fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
> stat("./makemap.ifc", {st_mode=S_IFREG|0644, st_size=8830, ...}) = 0
> open("./makemap.ifc", O_RDONLY|O_CREAT, 0666) = -1 ENOTDIR (Not a directory)
I'm not an expert on the parameter system but two things surprise me here:
1) Why is the O_CREAT flag in there? The line of Fortran that
generates this is line 113 in sup_openifc.F:
OPEN ( UNIT = LUCON, FILE = IFCNAM, STATUS = 'OLD',
#if HAVE_FC_OPEN_READONLY
: READONLY,
#endif
: FORM = 'UNFORMATTED', IOSTAT = ISTAT )
So since STATUS is set to OLD here, why is the open() function told to
create the file if it does not exist? Is this a bug in the Fortran
compiler?
2) Why does the file path start with "./"? Have you set the ADAM_IFL
environment variable? If so, what to? And have you tried running
makemap without ADAM_IFL set?
David
----
Starlink User Support list
For list configuration, including subscribing to and unsubscribing from the list, see
https://www.jiscmail.ac.uk/cgi-bin/webadmin?A0=STARLINK
|