博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把BSD上的istgt移植到Mac OS X上
阅读量:7120 次
发布时间:2019-06-28

本文共 2840 字,大约阅读时间需要 9 分钟。

  hot3.png

istgt软件简介

istgt是跑在openSUSE/Debian/NetBSD/FreeBSD上的iscsi target软件,工作在用户进程模式下。

主页为:http://shell.peach.ne.jp/aoyama/

这是一个日本人写的软件,请抛开xx因素先别鄙视日本人。

虽然FreeBSD和Mac OS X是近亲,但是直接下载源代码到OS X编译安装,运行时是会出错的,而且不支持OS X的BSD子系统的kqueue。需要修改源代码的两个文件然后编译才能正常在OS X上运行。

两年前我就已经改好了年末的一个版本,给作者发过邮件,可是那家伙不鸟,呵呵。

# tar zxf istgt-20141125.tar.gz

# cd istgt-20141125/src

1、istgt.h

# vi istgt.h

跳转到128行,启用kqueue支持,修改成如下补丁信息的+号一行

--- istgt.h.orig    2012-08-19 05:04:12.000000000 +0800+++ istgt.h    2014-12-31 00:11:32.000000000 +0800@@ -125,7 +125,7 @@ #else #error "no signal for internal" #endif-#if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__)+#if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) || (defined(__APPLE__) && defined(__GNUC__)) #define ISTGT_USE_KQUEUE #if defined (__FreeBSD__) #define ISTGT_EV_SET(kevp,a,b,c,d,e,f) EV_SET((kevp),(a),(b),(c),(d),(e),(void *)(f))

2、istgt.c

# vi istgt.c

跳转到1555行,再看1576行,你会发现,他把pthread_attr_init和istgt_uctl_init的前后顺序搞反了。所以你需要调整一个段落的代码顺序

从1576到1630行的代码,都要剪切放到原1555行的rc = istgt_uctl_init(istgt);之前

以下是补丁:

--- istgt.c.orig    2012-11-13 02:44:24.000000000 +0800+++ istgt.c    2014-12-31 00:10:04.000000000 +0800@@ -1552,27 +1552,6 @@ istgt_init(ISTGT_Ptr istgt)             istgt->discovery_auth_group);     } -    rc = istgt_uctl_init(istgt);-    if (rc < 0) {-        ISTGT_ERRLOG("istgt_uctl_init() failed\n");-        return -1;-    }-    rc = istgt_build_uctl_portal(istgt);-    if (rc < 0) {-        ISTGT_ERRLOG("istgt_build_uctl_portal() failed\n");-        return -1;-    }-    rc = istgt_build_portal_group_array(istgt);-    if (rc < 0) {-        ISTGT_ERRLOG("istgt_build_portal_array() failed\n");-        return -1;-    }-    rc = istgt_build_initiator_group_array(istgt);-    if (rc < 0) {-        ISTGT_ERRLOG("build_initiator_group_array() failed\n");-        return -1;-    }-     rc = pthread_attr_init(&istgt->attr);     if (rc != 0) {         ISTGT_ERRLOG("pthread_attr_init() failed\n");@@ -1629,6 +1608,27 @@ istgt_init(ISTGT_Ptr istgt)         return -1;     } +    rc = istgt_uctl_init(istgt);+    if (rc < 0) {+        ISTGT_ERRLOG("istgt_uctl_init() failed\n");+        return -1;+    }+    rc = istgt_build_uctl_portal(istgt);+    if (rc < 0) {+        ISTGT_ERRLOG("istgt_build_uctl_portal() failed\n");+        return -1;+    }+    rc = istgt_build_portal_group_array(istgt);+    if (rc < 0) {+        ISTGT_ERRLOG("istgt_build_portal_array() failed\n");+        return -1;+    }+    rc = istgt_build_initiator_group_array(istgt);+    if (rc < 0) {+        ISTGT_ERRLOG("build_initiator_group_array() failed\n");+        return -1;+    }+     rc = pipe(istgt->sig_pipe);     if (rc != 0) {         ISTGT_ERRLOG("pipe() failed\n");

 

3、注意事项

istgt不支持scsi reservation协议,如果你需要模拟存储锁定LUN,请使用linux的iscsitarget。

转载于:https://my.oschina.net/cytan/blog/362518

你可能感兴趣的文章
RMAN冷备份异机还原
查看>>
Atlas系列一:Atlas功能特点FAQ
查看>>
Android开机动画启动流程
查看>>
玩转博客园的5个小技巧
查看>>
对Spring的IoC和DI最生动的解释
查看>>
kettle转换JavaScript获取命令行参数
查看>>
PHP漏洞全解
查看>>
记2014“蓝桥杯全国软件大赛&quot;决赛北京之行
查看>>
让 ASP.NET JS验证和服务端的 双验证 更简单
查看>>
学 shell (1/5)
查看>>
Theano2.1.10-基础知识之循环
查看>>
从Clarifai的估值聊聊深度学习
查看>>
(林雷看来13):功能优先,发展和重建同步,业绩后
查看>>
shell脚本批量生成配置文件
查看>>
探索C/C++大数快(自然数)模板
查看>>
怎样找到native speaker的感觉
查看>>
关于如何学习
查看>>
用Java来写常见的排序算法
查看>>
C++链接ODBC数据源:VS2013,Access
查看>>
SQL Server 2014里的性能提升
查看>>