summaryrefslogtreecommitdiff
blob: e4d6c9968ea5d6263594e8a6eb20586acba16ae6 (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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-cluster/slurm/slurm-2.2.7-r2.ebuild,v 1.2 2011/10/26 16:00:57 alexxy Exp $

EAPI=4

inherit eutils pam perl-module

DESCRIPTION="SLURM: A Highly Scalable Resource Manager"
HOMEPAGE="https://computing.llnl.gov/linux/slurm/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="maui +munge mysql pam +perl postgres ssl static-libs +torque"

DEPEND="
	!net-analyzer/slurm
	mysql? ( dev-db/mysql )
	munge? ( sys-auth/munge )
	pam? ( virtual/pam )
	perl? ( perl-core/Switch )
	postgres? ( dev-db/postgresql-base )
	ssl? ( dev-libs/openssl )
	torque? ( !sys-cluster/torque )
	>=sys-apps/hwloc-1.1.1-r1
	"
RDEPEND="${DEPEND}
	maui? ( sys-cluster/maui[slurm] )
	"

REQUIRED_USE="torque? ( perl )"

LIBSLURM_PERL_S="${WORKDIR}/${P}/contribs/perlapi/libslurm/perl"
LIBSLURMDB_PERL_S="${WORKDIR}/${P}/contribs/perlapi/libslurmdb/perl"

pkg_setup() {
	enewgroup slurm 500
	enewuser slurm 500 -1 /var/spool/slurm slurm
}

src_prepare() {
	# gentoo uses /sys/fs/cgroup instead of /dev/cgroup
	sed -e 's:/dev/cgroup:/sys/fs/cgroup:g' \
		-i "${S}/doc/man/man5/cgroup.conf.5" \
		-i "${S}/etc/cgroup.conf.example" \
		-i "${S}/etc/cgroup.release_agent" \
		-i "${S}/src/plugins/proctrack/cgroup/xcgroup.h" \
		|| die
	# and pids should go to /var/run/slurm
	sed -e 's:/var/run/slurmctld.pid:/var/run/slurm/slurmctld.pid:g' \
		-e 's:/var/run/slurmd.pid:/var/run/slurm/slurmd.pid:g' \
		-i "${S}/etc/slurm.conf.example"
	# also state dirs are in /var/spool/slurm
	sed -e 's:StateSaveLocation=/tmp:StateSaveLocation=/var/spool/slurm:g' \
		-e 's:SlurmdSpoolDir=/tmp/slurmd:SlurmdSpoolDir=/var/spool/slurm/slurmd:g' \
		-i "${S}/etc/slurm.conf.example"
}

src_configure() {
	local myconf=(
			--sysconfdir="${EPREFIX}/etc/${PN}"
			--with-hwloc="${EPREFIX}/usr"
			)
	use pam && myconf+=( --with-pam_dir=$(getpam_mod_dir) )
	use mysql || myconf+=( --without-mysql_config )
	use postgres || myconf+=( --without-pg_config )
	econf "${myconf[@]}" \
		$(use_enable pam) \
		$(use_with ssl) \
		$(use_with munge) \
		$(use_enable static-libs static)
	if use perl ; then
		# small hack to make it compile
		mkdir -p "${S}/src/api/.libs"
		mkdir -p "${S}/src/db_api/.libs"
		touch "${S}/src/api/.libs/libslurm.so"
		touch "${S}/src/db_api/.libs/libslurmdb.so"
		cd "${LIBSLURM_PERL_S}"
		S="${LIBSLURM_PERL_S}" SRC_PREP="no" perl-module_src_configure
		cd "${LIBSLURMDB_PERL_S}"
		S="${LIBSLURMDB_PERL_S}" SRC_PREP="no" perl-module_src_configure
		cd "${S}"
		rm -rf "${S}/src/api/.libs" "${S}/src/db_api/.libs"
	fi
}

src_compile() {
	default
	use pam && emake -C contribs/pam || die
	if use perl ; then
		cd "${LIBSLURM_PERL_S}"
		S="${LIBSLURM_PERL_S}" perl-module_src_compile
		cd "${LIBSLURMDB_PERL_S}"
		S="${LIBSLURMDB_PERL_S}" perl-module_src_compile
		cd "${S}"
	fi
	if use torque ;then
		emake -C contribs/torque || die
	fi
}

src_install() {
	default
	emake DESTDIR="${D}" -C contribs/torque install || die
	use pam && emake DESTDIR="${D}" -C contribs/pam install || die
	if use perl; then
		cd "${LIBSLURM_PERL_S}"
		S="${LIBSLURM_PERL_S}" perl-module_src_install
		cd "${LIBSLURMDB_PERL_S}"
		S="${LIBSLURMDB_PERL_S}" perl-module_src_install
		cd "${S}"
	fi
	if use torque; then
		emake DESTDIR="${D}" -C contribs/torque || die
	fi
	use static-libs || find "${ED}" -name '*.la' -exec rm {} +
	# we dont need it
	rm "${ED}/usr/bin/mpiexec" || die
	# install sample configs
	keepdir /etc/slurm
	keepdir /var/log/slurm
	keepdir /var/spool/slurm
	keepdir /var/run/slurm
	insinto /etc/slurm
	doins etc/cgroup.conf.example
	doins etc/federation.conf.example
	doins etc/slurm.conf.example
	doins etc/slurmdbd.conf.example
	exeinto /etc/slurm
	doexe etc/cgroup.release_agent
	doexe etc/slurm.epilog.clean
	# install init.d files
	newinitd "${FILESDIR}/slurmd.initd" slurmd
	newinitd "${FILESDIR}/slurmctld.initd" slurmctld
	newinitd "${FILESDIR}/slurmdbd.initd" slurmdbd
	# install conf.d files
	newconfd "${FILESDIR}/slurm.confd" slurm
}

pkg_preinst() {
	if use munge; then
		sed -i 's,\(PBS_USE_MUNGE=\).*,\11,' "${D}"etc/conf.d/slurm || die
	fi
}

pkg_postinst() {
	einfo "Fixing permissions in /var/spool/${PN}"
	chown -R ${PN}:${PN} /var/spool/${PN}
	einfo "Fixing permissions in /var/run/${PN}"
	chown -R ${PN}:${PN} /var/run/${PN}
	einfo "Fixing permissions in /var/log/${PN}"
	chown -R ${PN}:${PN} /var/log/${PN}
	echo

	elog "Please visit the file '/usr/share/doc/${P}/html/configurator.html"
	elog "through a (javascript enabled) browser to create a configureation file."
	elog "Copy that file to /etc/slurm.conf on all nodes (including the headnode) of your cluster."
}