summaryrefslogtreecommitdiff
blob: 552d373862e7ce41458324ca2dfccc09e44e119a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit autotools linux-info flag-o-matic toolchain-funcs systemd udev

DESCRIPTION="A performant, transport independent, multi-platform implementation of RFC3720"
HOMEPAGE="https://www.open-iscsi.com/"
SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0/0.2"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
IUSE="debug infiniband +tcp rdma systemd"
REQUIRED_USE="infiniband? ( rdma ) || ( rdma tcp )"

DEPEND="
	sys-apps/kmod
	sys-block/open-isns:=
	sys-kernel/linux-headers
	infiniband? ( sys-cluster/rdma-core )
	dev-libs/openssl:0=
	systemd? ( sys-apps/systemd )
"
RDEPEND="${DEPEND}
	sys-fs/lsscsi
	sys-apps/util-linux"
BDEPEND="virtual/pkgconfig"

PATCHES=(
	"${FILESDIR}"/${PN}-2.1.7-fix_bitwise.patch
	"${FILESDIR}"/${PN}-2.1.7-fix_sed.patch
	"${FILESDIR}"/${PN}-2.1.7-no_werror.patch
)

pkg_setup() {
	linux-info_pkg_setup

	if kernel_is -lt 2 6 16; then
		die "Sorry, your kernel must be 2.6.16-rc5 or newer!"
	fi

	# Needs to be done, as iscsid currently only starts, when having the iSCSI
	# support loaded as module. Kernel builtin options don't work. See this for
	# more information:
	# https://groups.google.com/group/open-iscsi/browse_thread/thread/cc10498655b40507/fd6a4ba0c8e91966
	# If there's a new release, check whether this is still valid!
	TCP_MODULES="SCSI_ISCSI_ATTRS ISCSI_TCP"
	RDMA_MODULES="INFINIBAND_ISER"
	INFINIBAND_MODULES="INFINIBAND_IPOIB INIBAND_USER_MAD INFINIBAND_USER_ACCESS"
	CONFIG_CHECK_MODULES="tcp? ( ${TCP_MODULES} ) rdma? ( ${RDMA_MODULES} ) infiniband? ( ${INFINIBAND_MODULES} )"
	if linux_config_exists; then
		if use tcp; then
			for module in ${TCP_MODULES}; do
				linux_chkconfig_module ${module} || ewarn "${module} needs to be built as module (builtin doesn't work)"
		done
		fi
		if use infiniband; then
			for module in ${INFINIBAND_MODULES}; do
				linux_chkconfig_module ${module} || ewarn "${module} needs to be built as module (builtin doesn't work)"
		done
		fi
		if use rdma; then
			for module in ${RDMA_MODULES}; do
				linux_chkconfig_module ${module} || ewarn "${module} needs to be built as module (builtin doesn't work)"$
			done
		fi
	fi
}

src_prepare() {
	default

	pushd iscsiuio >/dev/null || die
	eautoreconf
	popd >/dev/null || die
}

src_configure() {
	use debug && append-cppflags -DDEBUG_TCP -DDEBUG_SCSI

	append-lfs-flags
}

src_compile() {
	# Stuffing CPPFLAGS into CFLAGS isn't entirely correct, but the build
	# is messed up already here, so it's not making it that much worse.
	KSRC="${KV_DIR}" CFLAGS="" \
	emake \
		OPTFLAGS="${CFLAGS} ${CPPFLAGS} $(usex systemd '' -DNO_SYSTEMD)" \
		AR="$(tc-getAR)" CC="$(tc-getCC)" \
		$(usex systemd '' NO_SYSTEMD=1) \
		user
}

src_install() {
	# Force serial install to avoid race conditions
	emake -j1 \
		DESTDIR="${ED}" \
		sbindir="/usr/sbin" \
		SED="${EPREFIX}/bin/sed" \
		systemddir="$(systemd_get_utildir)" \
		install install_systemd

	# Upstream make is not deterministic, per bug #601514
	rm -f "${ED}"/etc/initiatorname.iscsi

	# QA: install udev rule into right place
	mkdir -p "${ED}"/lib/udev/rules.d
	mv "${ED}"/etc/udev/rules.d/50-iscsi-firmware-login.rules \
		"${ED}"/lib/udev/rules.d || die "mv failed"

	# QA: let docompress compress man pages
	gunzip -r "${ED}"/usr/share/man/man3/ || die "gunzip failed"
	gunzip -r "${ED}"/usr/share/man/man8/ || die "gunzip failed"

	dodoc README THANKS

	docinto test/
	dodoc $(find test -maxdepth 1 -type f ! -name ".*")

	insinto /etc/iscsi
	newins "${FILESDIR}"/initiatorname.iscsi initiatorname.iscsi.example

	newconfd "${FILESDIR}"/iscsid-conf.d iscsid
	newinitd "${FILESDIR}"/iscsid-init.d iscsid

	keepdir /var/db/iscsi
	fperms 700 /var/db/iscsi
	fperms 600 /etc/iscsi/iscsid.conf
}

pkg_postinst() {
	in='/etc/iscsi/initiatorname.iscsi'
	if [[ ! -f "${EROOT}${in}" ]] && [[ -f "${EROOT}${in}.example" ]] ; then
		{
		  cat "${EROOT}${in}.example"
		  echo "# InitiatorName generated by ${CATEGORY}/${PF} at $(date -uR)"
		  echo "InitiatorName=$(${ROOT}/usr/sbin/iscsi-iname)"
		} >> "${EROOT}${in}.tmp" && mv -f "${EROOT}${in}.tmp" "${EROOT}${in}"
	fi

	udev_reload
}