summaryrefslogtreecommitdiff
blob: dd39e9c5fd08b536f665c21328e131a9d67e2f4a (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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"
inherit eutils multilib

DESCRIPTION="Groupware/Email/Jabberserver. Collaboration, Calender, BBS/Forum, Chat with easy install and usage"
HOMEPAGE="http://www.citadel.org/"
SRC_URI="http://easyinstall.citadel.org/${P}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="ldap pam pic postfix ssl threads"

DEPEND="=dev-libs/libcitadel-${PV}
	>=sys-libs/db-4.1.25_p1
	virtual/libiconv
	ldap? ( >=net-nds/openldap-2.0.27 )
	pam? ( sys-libs/pam )
	postfix? ( mail-mta/postfix )
	ssl? ( >=dev-libs/openssl-0.9.6 )"
RDEPEND="${DEPEND}
	net-mail/mailbase
	!postfix? ( !virtual/mta )
	!net-mail/mailwrapper"
# dropped virtual/mta from PROVIDE in order to install with postfix on a system
# removed mailwrapper stuff entirely and made sure it isn't left on system
PROVIDE="virtual/imapd"

MESSAGEBASE="/var/lib/citadel"

pkg_setup() {
	#Homedir needs to be the same as --with-datadir
	einfo "Adding Citadel User/Group"
	enewgroup citadel
	enewuser citadel -1 -1 ${MESSAGEBASE} citadel,mail
}

src_configure() {
	econf \
		--with-rundir=/var/run/citadel \
		--with-datadir=/var/lib/citadel \
		--with-spooldir=/var/spool/citadel \
		--with-autosysconfdir=/var/lib/citadel/data \
		--with-staticdatadir=/etc/citadel \
		--with-sysconfdir=/etc/citadel \
		--with-ssldir=/etc/ssl/citadel \
		--with-helpdir=/usr/share/citadel-server \
		--with-docdir=/usr/share/doc/${PF} \
		--with-utility-bindir=/usr/$(get_libdir)/citadel \
		--without-libdspam \
		$(use_enable pic pie) \
		$(use_with pam) \
		$(use_with ssl openssl) \
		$(use_with ldap) \
		--with-db
}

src_install() {
	if use pam ; then
		 dodir /etc/pam.d || die "Creating /etc/pam.d failed in sandbox"
	fi

	emake DESTDIR="${D}" install-new || die "make install failed"

	# Protect ${MESSAGEBASE}
	echo CONFIG_PROTECT="${MESSAGEBASE}" > "${T}"/10citadel
	doenvd "${T}"/10citadel || die "Config-protecting failed"

	# Keep emerge from removing empty directories when updating
	keepdir "${MESSAGEBASE}"/data
	keepdir /var/spool/citadel/network/{systems,spoolout,spoolin}
	keepdir /var/run/citadel/network/{systems,spoolout,spoolin}
	keepdir /etc/citadel/messages

	#Fix some permissions and sendmail stuff
	fowners citadel:citadel /etc/citadel /var/lib/citadel || die "Changing owner failed"
	fowners root:citadel /usr/sbin/citmail || die "Changing owner failed"
	rm "${D}"/usr/sbin/sendmail || die "Removing sendmail bin failed"

	if ! use postfix ; then
		dosym /usr/sbin/citmail /usr/sbin/sendmail || die "Linking sendmail to citmail failed"
		dosym /usr/sbin/citmail /usr/$(get_libdir)/sendmail || die "Compatibility sendmail link failed"
	fi

	if use ldap ; then
		insinto /etc/openldap/schema
		doins openldap/citadel.schema || die "Inserting LDAP schema failed"
		doins openldap/rfc2739.schema || die "Inserting LDAP schema failed"
	fi

	newinitd "${FILESDIR}"/citadel.init citadel || die "Inserting initscript failed"
	newconfd "${FILESDIR}"/citadel.confd citadel || die  "Inserting conf for initscript failed"
}

pkg_postinst() {
	#remove a file Citadel complains about in the logs while running
	rm /var/lib/citadel/data/.keep_mail-mta_citadel-0 || die "Removing keepdir dummie failed"

	einfo "The administration tools have been placed in /usr/$(get_libdir)/citadel"
	einfo
	einfo "There are two possible options to get Citadel running, if this is"
	einfo "a new install:"
	einfo
	einfo "1. The no-nonse fullspeed approach with most stuff done for you:"
	einfo "# emerge --config =${CATEGORY}/${PF}"
	einfo
	einfo "2. Manually configuring it with its setup routine:"
	einfo "You should make yourself familiar with Citadels setup:"
	einfo "http://www.citadel.org/doku.php/documentation:cmdman:setup"
	einfo "You probalby do not want to let setup chose the mode of starting"
	einfo
	einfo "The second approach is only recommended to experienced users!!!"
	einfo
	einfo "The service will automatically start after you configured it."
	einfo "Initscript is /etc/init.d/citadel. Also look into /etc/conf.d"
	einfo
	einfo "The following clients are available:"
	einfo "a) the citadel console client was installed with this ebuild"
	einfo "b) www-servers/webcit provides a web-based gui"
}

pkg_config() {
	#we have to stop the server if it is accidently running
	[ -f /var/run/citadel/citadel.socket ] && \
		die "Citadel seems to be running, please stop it while configuring!"

	#Citadel's setup uses a few enviromental variables to control it.
	# Mandatory for non-interactive setup!
	export CITADEL_INSTALLER="yes"

	# Citadel location.
	export CITADEL="/var/run/citadel/"

	if use ldap ; then
		export SLAPD_Binary="/usr/$(get_libdir)/openldap/slapd"
		export LDAP_CONFIG="/etc/openldap/sldap.conf"
	fi

	# Don't create any inittab/initscript/xinet stuff entry.
	# We'll provide our own init script
	export CREATE_INITTAB_ENTRY="no"
	export CREATE_XINETD_ENTRY="no"
	export NO_INIT_SCRIPTS="yes"
	export ACT_AS_MTA="no" #just prohibits setup to mess with init scripts

	einfo "On which ip should the server listen?"
	einfo "Press enter to default to 0.0.0.0 and listen on all interfaces."
	read -rp "   >" ipadress ; echo
	if  [ -z "$ipadress" ] ; then
		export IP_ADDR="0.0.0.0"
	else
		export IP_ADDR="$ipadress"
	fi

	# The main admin name for citadel can be chosen at random
	einfo "Insert a name for your citadel admin account:"
	read -rp "   >" sysadminname ; echo
	export SYSADMIN_NAME="$sysadminname"

	local pwd1="misch"
	local pwd2="masch"

	until [[ "x$pwd1" = "x$pwd2" ]] ; do
		einfo "Insert a password for the citadel admin user"
		einfo "Avoid [\"'\\_%] characters in the password"
		read -rsp "   >" pwd1 ; echo

		einfo "Retype the password"
		read -rsp "   >" pwd2 ; echo

		if [[ "x$pwd1" != "x$pwd2" ]] ; then
			ewarn "Passwords are not the same"
		fi
	done
	export SYSADMIN_PW="$pwd2"

	#Now we will create the config using defaults and enviromental variables.
	/usr/$(get_libdir)/citadel/setup -q
	unset SYSADMIN_PW

	#Verify the /etc/services entry was made
	if [ -f /etc/services ] && ! grep -q '^citadel' /etc/services ; then
		echo "citadel		504/tcp		# citadel" >> /etc/services
	fi

	einfo "Be sure to read the documentation in /usr/share/doc/${PF}"
	einfo
	einfo "The server should now be up and running, enjoy!"
	einfo "Citadel will listen on its default port 504"
	if use postfix ; then
		einfo
		einfo "Citadel listens on port 25 by default, even with postfix useflag!"
		einfo "Right now this can only be disabled in WebCit or with the cli client."
		einfo "There is no elegant way to disable that atm, will be fixed upstream."
		einfo "Sorry for this inconvenience!"
	fi
}