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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
|
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PROJECTS="sgconv rlm_stg rscriptd sgauth sgconf sgconf_xml stargazer"
STG_MODULES_AUTH="always_online internet_access freeradius"
STG_MODULES_CAPTURE="ipq ether netflow"
STG_MODULES_CONFIG="sgconfig rpcconfig"
STG_MODULES_OTHER="ping smux remote_script"
STG_MODULES_STORE="files firebird mysql postgres"
declare -A MODULES
MODULES=( [module_auth_always_online]="authorization\/ao:mod_ao"
[module_auth_internet_access]="authorization\/inetaccess:mod_ia"
[module_auth_freeradius]="other\/radius:mod_radius"
[module_capture_ipq]="capture\/ipq_linux:mod_cap_ipq"
[module_capture_ether]="capture\/ether_linux:mod_cap_ether"
[module_capture_netflow]="capture\/cap_nf:mod_cap_nf"
[module_config_sgconfig]="configuration\/sgconfig:mod_sg"
[module_config_rpcconfig]="configuration\/rpcconfig:mod_rpc"
[module_other_ping]="other\/ping:mod_ping"
[module_other_smux]="other\/smux:mod_smux"
[module_other_remote_script]="other\/rscript:mod_remote_script"
[module_store_files]="store\/files:store_files"
[module_store_firebird]="store\/firebird:store_firebird"
[module_store_mysql]="store\/mysql:store_mysql"
[module_store_postgres]="store\/postgresql:store_postgresql"
)
declare -A INIT
INIT=( [module_store_files]="11d"
[module_store_firebird]="11d;s/need net/need net firebird/"
[module_store_mysql]="11d;s/need net/need net mysql/"
[module_store_postgres]="11d;s/need net/need net postgresql/"
)
MY_P="stg-${PV}"
inherit flag-o-matic linux-info user
DESCRIPTION="Billing system for small home and office networks"
HOMEPAGE="http://stg.dp.ua/"
SRC_URI="http://stg.dp.ua/download/server/${PV}/${MY_P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
RDEPEND="
module_config_rpcconfig? (
dev-libs/expat
dev-libs/xmlrpc-c[abyss,cxx]
)
module_config_sgconfig? ( dev-libs/expat )
module_store_firebird? ( dev-db/firebird )
module_store_mysql? ( dev-db/mysql-connector-c:0= )
module_store_postgres? ( dev-db/postgresql:= )
sgconf? ( dev-libs/expat )
sgconf_xml? ( dev-libs/expat )"
DEPEND="${RDEPEND}"
S="${WORKDIR}/${MY_P}"
REQUIRED_USE="stargazer? ( ^^ ( module_store_files module_store_firebird module_store_mysql module_store_postgres ) )"
DOCS=( BUGS ../../ChangeLog CHANGES README TODO )
# Patches already in upstream's trunk
PATCHES=(
# Fix dependency on fbclient for module_store_firebird
"${FILESDIR}"/patches/stg-2.408-makefile-firebird-upstream.patch
# Rewrite config for rscriptd
"${FILESDIR}"/patches/stg-2.408-rscriptd.conf-upstream.patch
# Rewrite config for sgauth
"${FILESDIR}"/patches/stg-2.408-sgauth.conf-upstream.patch
# Standardization of 'On-scripts'
"${FILESDIR}"/patches/stg-2.408-on-upstream.patch
# Install demo scripts for rscriptd
"${FILESDIR}"/patches/stg-2.408-rscriptd-upstream.patch
# Fix crush on stop
"${FILESDIR}"/patches/stg-2.408-fix-crash-on-stop.patch
# Rename convertor to sgconv to avoid possible file name collisions
"${FILESDIR}"/patches/stg-2.408-sgconv-upstream.patch
# Debug support. Install radius lib to /usr/lib/freeradius
"${FILESDIR}"/patches/stg-2.408-makefile-build-upstream.patch
# Don't compile sgconv always with debug. Remove MAKEOPTS=-j1
"${FILESDIR}"/patches/stg-2.408-build-upstream.patch
# FreeBSD install directory
"${FILESDIR}"/patches/stg-2.408-radius-upstream.patch
)
IUSE="sgconv radius rscriptd sgauth sgconf sgconf_xml stargazer debug"
for module in ${STG_MODULES_AUTH} ; do IUSE="${IUSE} module_auth_${module}" ; done
for module in ${STG_MODULES_CAPTURE} ; do IUSE="${IUSE} module_capture_${module}" ; done
for module in ${STG_MODULES_CONFIG} ; do IUSE="${IUSE} module_config_${module}" ; done
for module in ${STG_MODULES_OTHER} ; do IUSE="${IUSE} module_other_${module}" ; done
for module in ${STG_MODULES_STORE} ; do IUSE="${IUSE} module_store_${module}" ; done
IUSE=${IUSE/stargazer/+stargazer}
IUSE=${IUSE/module_store_files/+module_store_files}
src_prepare() {
# Rename convertor to sgconv to avoid possible file name collisions
mv projects/convertor/ projects/sgconv/ \
|| die "Couldn't move convertor folder"
mv projects/sgconv/convertor.conf \
projects/sgconv/sgconv.conf || die "Couldn't move convertor config"
default
local project
for project in ${PROJECTS} ; do
# Rename build script to configure for further econf launch in every project
mv projects/$project/build projects/$project/configure \
|| die "Couldn't move build folder for $project"
# Change check for debug build
sed -i 's/if \[ "$1" = "debug" \]/if \[ "${10}" = "--enable-debug" \]/' \
projects/$project/configure \
|| die "sed for debug check failed"
done
# Correct working directory, user and group for sgconv.conf, store_files.conf
# Correct paths for rscriptd.conf, store_firebird.conf, mod_remote_scriptd.conf, stargazer.conf, rpcconfig.cpp, 00-base-00.sql
eapply "${FILESDIR}"/patches/stg-2.408-correct-paths.patch
# Correct target install-data for stargazer, rscriptd, sgauth, remove debug symbols stripping
eapply "${FILESDIR}"/patches/stg-2.408-makefile.patch
# Remove make from script (for keeping symbols), always add variable to Makefile.conf for all projects
eapply "${FILESDIR}"/patches/stg-2.408-build.patch
# Remove static-libs
eapply "${FILESDIR}"/patches/stg-2.408-static-libs.patch
# Define which module to compile
local module
for module in ${!MODULES[@]} ; do
if ! use $module ; then
sed -i "s/${MODULES[$module]%:*}//" \
projects/stargazer/configure \
|| die "sed for module configure failed"
fi
done
# Correct Gentoo init script
sed -i -e 's/opts/extra_commands/' \
-e 's/runscript/openrc-run/' \
projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo \
|| die "sed for init-script failed"
local init
for init in ${!INIT[@]} ; do
if use $init ; then
sed -i "${INIT[$init]}" \
projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo \
|| die "sed for $init failed"
fi
done
# Check for IPQ subsystem availability
if use module_capture_ipq && kernel_is ge 3 5 ; then
die "The IPQ subsystem requires kernel 3.5 or greater."
fi
}
src_configure() {
use debug && filter-flags '-O?'
# Define local variables, strip '+' symbol for used by default USE flags
local USEFLAGS=(${IUSE//+})
local PROJECTS=($PROJECTS)
local i
for (( i = 0 ; i < ${#PROJECTS[@]} ; i++ )) ; do
if use ${USEFLAGS[$i]} ; then
cd "${S}"/projects/${PROJECTS[$i]} \
|| die "cd to ${PROJECTS[$i]} failed"
econf $(use_enable debug)
fi
done
}
src_compile() {
# Define local variables, strip '+' symbol for used by default USE flags
local USEFLAGS=(${IUSE//+})
local PROJECTS=($PROJECTS)
local i
# Set jobs to 1 for debug build
use debug && MAKEOPTS="-j1"
# Build necessary libraries first
touch Makefile.conf
cd stglibs || die "cd to stglibs failed"
emake STG_LIBS="ia.lib srvconf.lib"
for (( i = 0 ; i < ${#PROJECTS[@]} ; i++ )) ; do
if use ${USEFLAGS[$i]} ; then
cd "${S}"/projects/${PROJECTS[$i]} \
|| die "cd to ${PROJECTS[$i]} failed"
emake
fi
done
}
src_install() {
if use rscriptd || use stargazer ; then
# Install config file for logrotate
insinto /etc/logrotate.d
newins "${FILESDIR}"/logrotate stargazer
# Keeping logs directory
diropts -m 755 -o stg -g stg
keepdir /var/log/stargazer
if use stargazer ; then
diropts -m 775 -o stg -g stg
keepdir /var/lib/stargazer
fi
fi
if use sgconv ; then
cd projects/sgconv || die "cd to sgconv failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Install files into specified directory
insinto /etc/stargazer
doins "${S}"/projects/sgconv/sgconv.conf
# Install manual page
doman "${FILESDIR}"/mans/sgconv.1
fi
if use radius ; then
cd "${S}"/projects/rlm_stg || die "cd to rlm_stg failed"
emake DESTDIR="${D}" PREFIX="${D}" install
fi
if use rscriptd ; then
cd "${S}"/projects/rscriptd || die "cd to rscriptd failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Install Gentoo init script
doinitd "${FILESDIR}"/rscriptd
# Correct permissions for file
fperms 0640 /etc/stargazer/rscriptd.conf
# Install manual page
doman "${FILESDIR}"/mans/rscriptd.8
fi
if use sgauth ; then
cd "${S}"/projects/sgauth || die "cd to sgauth failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Correct permissions for file
fperms 0640 /etc/stargazer/sgauth.conf
# Install manual page
doman "${FILESDIR}"/mans/sgauth.8
fi
if use sgconf ; then
cd "${S}"/projects/sgconf || die "cd to sgconf failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Install manual page
doman "${FILESDIR}"/mans/sgconf.1
fi
if use sgconf_xml ; then
cd "${S}"/projects/sgconf_xml || die "cd to sgconf_xml failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Install manual page
doman "${FILESDIR}"/mans/sgconf_xml.1
fi
if use stargazer ; then
cd "${S}"/projects/stargazer || die "cd to stargazer failed"
emake DESTDIR="${D}" PREFIX="${D}" install
# Install docs
einstalldocs
# Install and rename Gentoo init script
newinitd "${S}"/projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo stargazer
# Install manual page
doman "${FILESDIR}"/mans/stargazer.8
# Install files needed for module_store_files
if use module_store_files ; then
# Install files into specified directory
insinto /var/lib
doins -r "${S}"/projects/stargazer/inst/var/stargazer
# Correct user and group for files and directories
fowners -R stg:stg /var/lib/stargazer
fi
if use module_store_firebird ; then
# Install files into specified directory
insinto /usr/share/stargazer/db/firebird
doins \
"${S}"/projects/stargazer/inst/var/00-base-00.sql \
"${S}"/projects/stargazer/inst/var/00-alter-01.sql
fi
if use module_store_mysql ; then
# Install file into specified directory
insinto /usr/share/stargazer/db/mysql
doins "${S}"/projects/stargazer/inst/var/00-mysql-01.sql
fi
if use module_store_postgres ; then
# Install files into specified directory
insinto /usr/share/stargazer/db/postgresql
doins \
"${S}"/projects/stargazer/inst/var/00-base-00.postgresql.sql \
"${S}"/projects/stargazer/inst/var/00-alter-01.postgresql.sql
fi
if use module_other_smux ; then
# Install files into specified directory
insinto /usr/share/snmp/mibs
doins "${S}"/projects/stargazer/plugins/other/smux/STG-MIB.mib
fi
if use module_other_remote_script ; then
# Create subnets file based on example from mod_remote_script.conf
grep 192 "${S}"/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_remote_script.conf \
| sed 's/# //' > "${ED%/}"/etc/stargazer/subnets
# Correct permissions for file
fperms 0640 /etc/stargazer/subnets
fi
# Correct permissions for files
fperms 0640 \
/etc/stargazer/rules \
/etc/stargazer/stargazer.conf
# Install files into specified directory for selected modules
insinto /etc/stargazer/conf-available.d
insopts -m 0640
local module
for module in ${!MODULES[@]} ; do
use $module && doins "${S}"/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/${MODULES[$module]#*:}.conf
done
# Create symlinks of configs for selected modules
for module in ${!MODULES[@]} ; do
use $module \
&& dosym \
/etc/stargazer/conf-available.d/${MODULES[$module]#*:}.conf \
/etc/stargazer/conf-enabled.d/${MODULES[$module]#*:}.conf
done
fi
# Correct user and group for files and directories
if use sgconv || use rscriptd || use sgauth || use stargazer ; then
fowners -R stg:stg /etc/stargazer
fi
# Put the files in the right folder to support multilib
if [ ! -e "${ED}"/usr/$(get_libdir) ] ; then
mv "${ED}"/usr/lib/ "${ED}"/usr/$(get_libdir) \
|| die "Failed to move library directory for multilib support"
fi
}
pkg_setup() {
# Add user and group to system only when necessary
if use sgconv || use rscriptd || use sgauth || use stargazer ; then
enewgroup stg
enewuser stg -1 -1 -1 stg
fi
}
pkg_postinst() {
if use sgconv ; then
einfo "\nSgconv:"
einfo "----------"
einfo "For further use edit /etc/stargazer/sgconv.conf."
fi
if use radius ; then
einfo "\nRadius:"
einfo "-------"
einfo "For further use emerge net-dialup/freeradius.\n"
einfo "Example config:\n"
einfo "stg {"
einfo " local_port = 6667"
einfo " server = localhost"
einfo " port = 6666"
einfo " password = 123456"
einfo " }\n"
einfo "You should place 'stg' into section Instantiate, Authorize."
einfo "In section Authentificate 'stg' should go in sub-section"
einfo "Auth-Type before other authentifications modules:\n"
einfo "Auth-Type PAP {"
einfo " stg"
einfo " pap"
einfo "}\n"
einfo "It also may be used in section Accounting and Post-Auth."
use module_auth_freeradius || einfo "\nFor use RADIUS enable USE-flag module_auth_freeradius."
fi
if use rscriptd ; then
einfo "\nRemote Script Executer:"
einfo "-----------------------"
einfo "For further use edit /etc/stargazer/rscriptd.conf."
einfo "You have to change 'Password' field at least."
fi
if use sgauth ; then
einfo "\nSgauth:"
einfo "-------"
einfo "For further use edit /etc/stargazer/sgauth.conf."
einfo "You have to change 'ServerName', 'Login', 'Password' fields at least."
fi
if use sgconf ; then
einfo "\nSgconf:"
einfo "-------"
use module_config_sgconfig \
|| einfo "For further use enable USE-flag module_config_sgconfig."
fi
if use sgconf_xml ; then
einfo "\nSgconf_xml:"
einfo "-----------"
use module_config_rpcconfig \
|| einfo "For further use enable USE-flag module_config_rpcconfig."
fi
if use stargazer ; then
einfo "\nStargazer:"
einfo "----------"
einfo "Modules availability:\n"
if use module_auth_always_online ; then
einfo "* module_auth_always_online available."
fi
if use module_auth_internet_access ; then
einfo "* module_auth_internet_access available."
fi
if use module_auth_freeradius ; then
einfo "* module_auth_freeradius available.\n"
einfo "For further use emerge net-dialup/freeradius.\n"
use radius || einfo "\n For use RADIUS enable use USE-flag radius."
fi
if use module_capture_ipq ; then
einfo "* module_capture_ipq available."
fi
if use module_capture_ether ; then
einfo "* module_capture_ether available."
fi
if use module_capture_netflow ; then
einfo "* module_capture_netflow available.\n"
einfo "For further use emerge any netflow sensor:\n"
einfo "net-firewall/ipt_netflow or net-analyzer/softflowd.\n"
fi
if use module_config_sgconfig ; then
einfo "* module_config_sgconfig available."
fi
if use module_config_rpcconfig ; then
einfo "* module_config_rpcconfig available.\n"
einfo "KNOWN BUG: Sometimes you can't configure Stargazer"
einfo "through xml-based configurator, because module is not responding."
einfo "This bug is introduced by xmlrpc-c library."
einfo "This bug proceeds very rare, but it still exists.\n"
fi
if use module_other_ping ; then
einfo "* module_other_ping available."
fi
if use module_other_smux ; then
einfo "* module_other_smux available.\n"
einfo "For further use emerge net-analyzer/net-snmp.\n"
fi
if use module_other_remote_script ; then
einfo "* module_other_remote_script available.\n"
einfo "For further use edit /etc/stargazer/subnets.\n"
fi
if use module_store_files ; then
einfo "* module_store_files available."
fi
if use module_store_firebird ; then
einfo "* module_store_firebird available.\n"
einfo "You should add 'firebird' user to stg group:\n"
einfo "# usermod -a -G stg firebird\n"
einfo "and restart firebird:\n"
einfo "# /etc/init.d/firebird restart\n"
einfo "Stargazer DB schema for Firebird is here: /usr/share/stargazer/db/firebird"
einfo "For new setup you should execute 00-base-00.sql:\n"
einfo "# fbsql -q -i /usr/share/stargazer/db/firebird/00-base-00.sql\n"
einfo "For upgrade from version 2.406 you should execute 00-alter-01.sql:\n"
einfo "# fbsql -i /usr/share/stargazer/db/firebird/00-alter-01.sql\n"
fi
if use module_store_mysql ; then
einfo "* module_store_mysql available.\n"
einfo "For upgrade from version 2.406 you should execute 00-mysql-01.sql:\n"
einfo "# mysql < /usr/share/stargazer/db/mysql/00-mysql-01.sql\n"
fi
if use module_store_postgres ; then
einfo "* module_store_postgres available.\n"
einfo "DB schema for PostgresSQL is here: /usr/share/stargazer/db/postgresql"
einfo "For new setup you should execute 00-base-00.postgresql.sql:\n"
einfo "# psql -f /usr/share/stargazer/db/postgresql/00-base-00.postgresql.sql\n"
einfo "For upgrade from version 2.406 you should execute 00-alter-01.sql:\n"
einfo "# psql -f /usr/share/stargazer/db/postgresql/00-alter-01.sql\n"
fi
einfo "\n For all storage backends:\n"
einfo "* Default admin login - admin, default admin password - 123456."
einfo "* Default subscriber login - test, default subscriber password - 123456.\n"
einfo "Don't run newer versions without reading their ChangeLog first,"
einfo "it can be found in /usr/share/doc/${PF}"
fi
if use debug ; then
ewarn "\nThis is a debug build, avoid to use it in production."
fi
}
|