iSCSI initiator (netbsd-iscsi-initiator) for OS X Mountain Lion (10.8.2)

I am playing around with iSCSI for my macbook pro. Looked around and the used to be free SNS globalSAN iSCSI is no longer free. ATO is too expensive to play with. Saw that macport has a netbsd-iscsi, so went that route.


$ sudo port install netbsd-iscsi-initiator
---> Computing dependencies for netbsd-iscsi-initiator
---> Dependencies to be installed: netbsd-iscsi-lib
---> Building netbsd-iscsi-lib
Error: org.macports.build for port netbsd-iscsi-lib returned: command execution failed
Error: Failed to install netbsd-iscsi-lib
Please see the log file for port netbsd-iscsi-lib for details:
/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_devel_netbsd-iscsi-lib/netbsd-iscsi-lib/main.log
Error: The following dependencies were not installed: netbsd-iscsi-lib
To report a bug, follow the instructions in the guide:
http://guide.macports.org/#project.tickets
Error: Processing of port netbsd-iscsi-initiator failed

Poking in main.log show the error at compiling disk.c.


:info:build /bin/sh ../../libtool --tag=CC --mode=compile /usr/bin/clang -DHAVE_CONFIG_H -I. -I../../include -I../../include -I/opt/local/include -pipe -O2 -arch x86_64 -MT libiscsi_la-disk.lo -MD -MP -MF .deps/libiscsi_la-disk.Tpo -c -o libiscsi_la-disk.lo `test -f 'disk.c' || echo './'`disk.c
:info:build /usr/bin/clang -DHAVE_CONFIG_H -I. -I../../include -I../../include -I/opt/local/include -pipe -O2 -arch x86_64 -MT libiscsi_la-disk.lo -MD -MP -MF .deps/libiscsi_la-disk.Tpo -c disk.c -fno-common -DPIC -o .libs/libiscsi_la-disk.o
:info:build disk.c:811:40: error: assignment to cast is illegal, lvalue casts are not supported
:info:build *((uint64_t *) ((void *)data + 8)) = (uint64_t) ISCSI_HTONLL(key);
:info:build ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
:info:build 1 error generated.
:info:build make: *** [libiscsi_la-disk.lo] Error 1

So I patched that line.


- *((uint64_t *) (void *)data + 8) = (uint64_t) ISCSI_HTONLL(key);
+ *((uint64_t *) ((void *)data + 8)) = (uint64_t) (ISCSI_HTONLL(key));

and now it builds. I just got to play with this to see if it works. More to report later.

22 thoughts on “iSCSI initiator (netbsd-iscsi-initiator) for OS X Mountain Lion (10.8.2)”

  1. daniel :
    Hi tin,
    check out
    https://github.com/sakuro/macports/tree/master/net/netbsd-iscsi-initiator
    Not sure if that was the latest one, but better than nothing for a start maybe
    Would be awesome if someone took on iSCSI for Mac. It is a shame that there is no free and open implementation right now, would be terribly if this technology was left to ATO, GlobalSAN and others with crazy pricing ideas.
    Many thanks for any effort
    daniel

    I have started a new open-source project to bring an iSCSI initiator to OS X. At the moment, it functions reasonably well but it is still a work in progress. Please see:

    https://github.com/iscsi-osx/iSCSIInitiator

    Any help contributing in the form of development or testing is welcomed.

  2. newborn :
    @tin
    I’ve compiled initiator but not working(on yosemite)
    iscsi-initiator -v -D -h 192.168.100.200
    pid 15026:initiator.c:788: ***ERROR*** Target is not allowing access
    pid 15026:initiator.c:1301: ***ERROR*** enqueue_worker: discovery_phase() failed (ignoring command)
    no matter what parameters are the initiator ouput errors above.

    as i figured the problem may causes by fuse4x which is replaced by osxfuse

    1. I recently updated to Yosemite. Still having lock up issues with it though. There seem to be bad interaction with OpenLDAP and AD environment. I’ll take a look at iscsi-initiator when I have some time.

  3. @tin
    I’ve compiled initiator but not working(on yosemite)

    iscsi-initiator -v -D -h 192.168.100.200
    pid 15026:initiator.c:788: ***ERROR*** Target is not allowing access
    pid 15026:initiator.c:1301: ***ERROR*** enqueue_worker: discovery_phase() failed (ignoring command)

    no matter what parameters are the initiator ouput errors above.

  4. Was looking for an open source iscsi initiator for Mac and your blog popped up. I’m at a lose as to why Apple has not included one in their OS.

    Can you direct me to instruction or resources so I can try wrapping my head around installing this
    out?

    1. This is all source code based, so you will need to install Xcode and compile it yourself. It’s not the easy plug-n-play stuffs. Although if you have Mac port stuffs install, it should be straight forward to do. I’ll try to find some time to write up documentation for this package.

      1. I’ve got macports installed, working, and back to where I was before with netbsd-iscsi-initiator. It’s compiled, and this time I’ve created the correct patch and updated Portfile for devel/netbsd-iscsi-lib, which is a prereq for the initiator.

        I’ll play with it and see if I can get further this time.

        I’ve pushed the compile patch fix to https://github.com:TinLe/macports.git

  5. I now have a macbook pro and it seem macports has removed support for this package. Anyone know what happened to it? Even the last non-working source is fine. I was going to restart working on porting/fixing it.

    Let me know if anyone know where I can find it.

  6. I run into some other issues in getting it to work with my ReadyNAS NV+. I need to put sometime into debugging this. Then I’ll put together a HOW-TO using this initiator.

    tinmbp:~ tin $ sudo iscsi-initiator -v 5 -h 192.168.2.60 -D
    pid 1397:initiator.c:2222: ***ERROR*** Bad Status-Class: got 2, expected 0
    pid 1397:initiator.c:2018: ***ERROR*** initiator_cmd_t failed
    pid 1397:initiator.c:716: ***ERROR*** login_phase_i() failed
    pid 1397:initiator.c:1301: ***ERROR*** enqueue_worker: discovery_phase() failed (ignoring command)
    

Leave a Reply