-
Notifications
You must be signed in to change notification settings - Fork 24
/
rudder-agent.spec
635 lines (538 loc) · 21.8 KB
/
rudder-agent.spec
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
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
#####################################################################################
# Copyright 2011 Normation SAS
#####################################################################################
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#####################################################################################
#=================================================
# Specification file for rudder-agent
#
# Install CFEngine
# Install Rudder initial promises
# Generate a UUID
#
# Copyright (C) 2011 Normation
#=================================================
#=================================================
# Variables
#=================================================
%define real_name rudder-agent
%define rudderdir /opt/rudder
%define ruddervardir /var/rudder
%define rudderlogdir /var/log/rudder
# is_tokyocabinet_here checks if to build CFEngine we will need to build
# Tokyocabinet or if a package already exists on the system.
# Default value is true in order to handle cases which are not caught below
%define is_tokyocabinet_here true
#=================================================
# Header
#=================================================
Summary: Configuration management and audit tool - agent
Name: %{real_name}
Version: %{real_version}
Release: 1%{?dist}
Epoch: 0
License: GPLv3
URL: http://www.rudder-project.org
Group: Applications/System
Source1: rudder-agent.init
Source2: rudder-agent.default
Source3: run-inventory
Source4: uuid.hive
Source5: rudder-agent.cron
# This file will contain path of /opt/rudder/lib for ld which will
# find there all necessary libraries for tokyocabinet.
Source6: rudder.conf
Source7: check-rudder-agent
Source8: vzps.py
Source9: rudder-agent.sh
Source10: detect_os.sh
Source11: rudder-perl
# uuidgen doesn't exist on AIX, so we provide a simple shell compatible version
%if "%{?_os}" == "aix"
Source100: uuidgen
%endif
# We have PERL things in here. Do not try to outsmart me by adding dummy dependencies, you silly tool.
AutoReq: 0
AutoProv: 0
%if 0%{?rhel} == 4
Patch1: fix-missing-headers
%endif
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
#Generic requirement
BuildRequires: gcc openssl-devel bison flex pcre-devel
Requires: pcre openssl
# Specific requirements
## For EL and Fedora
%if 0%{?rhel} || 0%{?fedora}
BuildRequires: make byacc
Requires: crontabs
%endif
## For SLES
%if 0%{?sles_version}
Requires: cron
%endif
# dmiecode is provided in the "dmidecode" package on EL4+ and on kernel-utils
# on EL3
%if 0%{?rhel} && 0%{?rhel} >= 4
Requires: dmidecode
%endif
%if 0%{?rhel} && 0%{?rhel} < 4
Requires: kernel-utils
%endif
# dmidecode is provided by "dmidecode" too on Fedora platforms, but I'm adding
# another if block to prevent cluttering the conditions on the >= el4 one and
# prevent possible unwanted non-matches.
%if 0%{?fedora}
Requires: dmidecode
%endif
## Each tests of OS version comparison with "greater" or "lesser version than"
## need to test before if we compare the right OS.
%if 0%{?rhel} && 0%{?rhel} <= 5
BuildRequires: bzip2-devel zlib-devel
%define is_tokyocabinet_here false
%endif
%if 0%{?rhel} && 0%{?rhel} >= 6
BuildRequires: tokyocabinet-devel
Requires: tokyocabinet
%define is_tokyocabinet_here true
%endif
# Fedora 7 is the first known version to officially
# support TokyoCabinet in the official repositories
%if 0%{?fedora} && 0%{?fedora} >= 7
BuildRequires: tokyocabinet-devel
Requires: tokyocabinet
%define is_tokyocabinet_here true
%endif
%if 0%{?sles_version} && 0%{?sles_version} >= 11
BuildRequires: libbz2-devel zlib-devel
Requires: pmtools
%define is_tokyocabinet_here false
%endif
## Contents of package 'libbz2-devel' in SLES 11 is included in the package of bzip2
## in SLES 10 which is on the system by default.
## cf http://linux.derkeiler.com/Mailing-Lists/SuSE/2003-11/2640.html
%if 0%{?sles_version} == 10
BuildRequires: zlib-devel
Requires: pmtools
%define is_tokyocabinet_here false
%endif
# AIX builds support TokyoCabinet via M. Perzl's
# packages.
# cf http://www.perzl.org/aix/
%if "%{?_os}" == "aix"
BuildRequires: tokyocabinet-devel
Requires: tokyocabinet
%define is_tokyocabinet_here true
%endif
%define install_command install
%define cp_a_command cp -a
%define fusioninventory_folder %{_sourcedir}/fusioninventory-agent
%if "%{?_os}" == "aix"
%define install_command installbsd -c
%define cp_a_command cp -hpPr
%define fusioninventory_folder %{_sourcedir}/fusioninventory-agent-2.3.6
%endif
# Replaces rudder-cfengine-community since 2.4.0~beta3
Provides: rudder-cfengine-community
Obsoletes: rudder-cfengine-community
# We have PERL things in here. Do not try to outsmart me by adding dummy dependencies, you silly tool.
# Same for TokyoCabinet, don't require the libs when we bundle them in this package, duh.
AutoProv: 0
%global _use_internal_dependency_generator 0
%global __find_requires_orig %{__find_requires}
%define __find_requires %{_sourcedir}/filter-reqs.pl %{is_tokyocabinet_here} %{__find_requires_orig}
%global __find_provides_orig %{__find_provides}
%define __find_provides %{_sourcedir}/filter-reqs.pl %{is_tokyocabinet_here} %{__find_provides_orig}
%description
Rudder is an open source configuration management and audit solution.
This package contains the agent that must be installed on all nodes to be
managed by Rudder. It is based on two main components: CFEngine Community 3 and
FusionInventory.
#=================================================
# Source preparation
#=================================================
%prep
%if 0%{?rhel} == 4
%patch1 -p1
%endif
#=================================================
# Building
#=================================================
%build
cd %{_sourcedir}
%{_sourcedir}/perl-prepare.sh %{fusioninventory_folder}
# Ensure an appropriate environment for the compiler
export CFLAGS="$RPM_OPT_FLAGS"
export CXXFLAGS="$RPM_OPT_FLAGS"
%if "%{is_tokyocabinet_here}" != "true"
# Remove all remaining files from temporary build folder before to compile tokyocabinet
rm -rf %{buildroot}
# Compile Tokyocabinet library and install it in /opt/rudder/lib
cd %{_sourcedir}/tokyocabinet-source
./configure --prefix=%{rudderdir}
make %{?_smp_mflags}
make install DESTDIR=%{buildroot}
%endif
# Prepare CFEngine build
cd %{_sourcedir}/cfengine-source
%if "%{is_tokyocabinet_here}" != "true"
## Define path of tokyocabinet if built before instead of being provided by the system.
%define tokyocabinet_arg "--with-tokyocabinet=%{buildroot}%{rudderdir}"
%else
%define tokyocabinet_arg ""
%endif
./configure --build=%_target --prefix=%{rudderdir} --with-workdir=%{ruddervardir}/cfengine-community --enable-static=yes --enable-shared=no %{tokyocabinet_arg}
make %{?_smp_mflags}
#=================================================
# Installation
#=================================================
%install
%if "%{is_tokyocabinet_here}" == "true"
# Remove all remaining files from temporary build folder since no actions should
# have been made before in this directory (if tokyocabinet has not been
# built).
# Besides, all actions should not have been made before macro 'install', so removing all
# the files from %{buildroot} should be made at the begining of macro 'install'.
# Build of and embeded library (here, tokyocabinet)is an exception.
rm -rf %{buildroot}
%endif
cd %{_sourcedir}/cfengine-source
make install DESTDIR=%{buildroot} STRIP=""
# Directories
mkdir -p %{buildroot}%{rudderdir}
mkdir -p %{buildroot}%{rudderdir}/etc
mkdir -p %{buildroot}%{ruddervardir}/cfengine-community/bin
mkdir -p %{buildroot}%{ruddervardir}/cfengine-community/inputs
mkdir -p %{buildroot}%{ruddervardir}/tmp
mkdir -p %{buildroot}%{ruddervardir}/tools
# Init script
# AIX does not use init scripts, instead we set up a subsystem in the post scriptlet below
%if "%{?_os}" != "aix"
mkdir -p %{buildroot}/etc/init.d
mkdir -p %{buildroot}/etc/default
%{install_command} -m 755 %{SOURCE1} %{buildroot}/etc/init.d/rudder-agent
%{install_command} -m 644 %{SOURCE2} %{buildroot}/etc/default/rudder-agent
%endif
# Cron
# AIX does not support cron.d
%if "%{?_os}" != "aix"
mkdir -p %{buildroot}/etc/cron.d
%{install_command} -m 644 %{SOURCE5} %{buildroot}/etc/cron.d/rudder-agent
%endif
# Initial promises
cp -r %{_sourcedir}/initial-promises %{buildroot}%{rudderdir}/share/
# Fusion
%{cp_a_command} %{_sourcedir}/perl-custom/opt/rudder/* %{buildroot}%{rudderdir}
# Wrapper script
%{install_command} -m 755 %{SOURCE3} %{buildroot}/opt/rudder/bin/run-inventory
# Install an empty uuid.hive file before generating an uuid
cp %{SOURCE4} %{buildroot}%{rudderdir}/etc/
# ld.so.conf.d is not supported on CentOS 3
%if "%{is_tokyocabinet_here}" != "true" && 0%{?rhel} != 3
# Install /etc/ld.so.conf.d/rudder.conf in order to use libraries
# contained in /opt/rudder/lib like tokyocabinet
mkdir -p %{buildroot}/etc/ld.so.conf.d
%{install_command} -m 644 %{SOURCE6} %{buildroot}/etc/ld.so.conf.d/rudder.conf
%endif
%{install_command} -m 755 %{SOURCE7} %{buildroot}/opt/rudder/bin/check-rudder-agent
%{install_command} -m 755 %{SOURCE8} %{buildroot}/opt/rudder/bin/vzps.py
%{install_command} -m 755 %{SOURCE11} %{buildroot}/opt/rudder/bin/rudder-perl
# Install a profile script to make cf-* part of the PATH
# AIX does not support profile.d and /etc/profile should not be modified, so we don't do this on AIX at all
%if "%{?_os}" != "aix"
mkdir -p %{buildroot}/etc/profile.d
%{install_command} -m 644 %{SOURCE9} %{buildroot}/etc/profile.d/rudder-agent.sh
%endif
# Install the uuidgen command on AIX
%if "%{?_os}" == "aix"
mkdir -p %{buildroot}%{rudderdir}/bin
%{install_command} -m 755 %{SOURCE100} %{buildroot}%{rudderdir}/bin/
%endif
# Build a list of files to include in this package for use in the %files section below
find %{buildroot}%{rudderdir} %{buildroot}%{ruddervardir} -type f -o -type l | sed "s,%{buildroot},," | sed "s,\.py$,\.py*," | grep -v "%{rudderdir}/etc/uuid.hive" | grep -v "%{ruddervardir}/cfengine-community/ppkeys" > %{_builddir}/file.list.%{name}
%pre -n rudder-agent
#=================================================
# Pre Installation
#=================================================
# Do this only during upgrade process
if [ $1 -eq 2 ];then
%if "%{?_os}" != "aix"
# Keep a backup copy of Rudder agent init and cron files to prevent http://www.rudder-project.org/redmine/issues/3995
for i in init.d default cron.d; do
if [ -f /etc/${i}/rudder-agent ]; then
mkdir -p /var/backups/rudder
if [ "${i}" = "init.d" ]; then mode=755; else mode=644; fi
%{install_command} -m ${mode} /etc/${i}/rudder-agent /var/backups/rudder/rudder-agent.$(basename ${i} .d)-$(date +%Y%m%d) && echo "INFO: A back up copy of /etc/${i}/rudder-agent has been created in /var/backups/rudder"
fi
done
%else
echo "INFO: No init script / cron script backup necessary on AIX builds yet. Skipping..."
%endif
fi
%post -n rudder-agent
#=================================================
# Post Installation
#=================================================
# Ensure our PATH includes Rudder's bin dir (for uuidgen on AIX in particular)
export PATH=%{rudderdir}/bin/:$PATH
CFRUDDER_FIRST_INSTALL=0
echo "Making sure that the permissions on the CFEngine key directory are correct..."
if [ -d %{ruddervardir}/cfengine-community/ppkeys ]; then
chmod 700 %{ruddervardir}/cfengine-community/ppkeys
if [ `ls %{ruddervardir}/cfengine-community/ppkeys | wc -l` -gt 0 ]; then
chmod 600 %{ruddervardir}/cfengine-community/ppkeys/*
fi
fi
# Do this at first install
if [ $1 -eq 1 ]
then
# Set rudder-agent as service
%if "%{?_os}" == "aix"
/usr/bin/mkssys -s rudder-agent -p %{ruddervardir}/cfengine-community/bin/cf-execd -a "-F" -u root -S -n15 -f9 -R
/usr/sbin/mkitab "rudder-agent:23456789:once:/usr/bin/startsrc -s rudder-agent"
# No need to tell init to re-read /etc/inittab, it does it automatically every 60 seconds
%else
/sbin/chkconfig --add rudder-agent
%endif
%if 0%{?rhel} >= 6
/sbin/chkconfig rudder-agent on
%endif
CFRUDDER_FIRST_INSTALL=1
fi
# Reload configuration of ldd if new configuration has been added
%if "%{is_tokyocabinet_here}" != "true" && 0%{?rhel} != 3
if [ -f /etc/ld.so.conf.d/rudder.conf ]; then
ldconfig
fi
%endif
# Reload configuration of ldd if new configuration has been added,
# CentOS 3 style.
%if "%{is_tokyocabinet_here}" != "true" && 0%{?rhel} == 3
if [ ! `grep "/opt/rudder/lib" /etc/ld.so.conf` ]; then
echo "/opt/rudder/lib" >> /etc/ld.so.conf
fi
# Reload the linker configuration
ldconfig
%endif
# Always do this
# Generate a UUID if we don't have one yet
if [ ! -e /opt/rudder/etc/uuid.hive ]
then
uuidgen > /opt/rudder/etc/uuid.hive
else
# UUID is valid only if it has been generetaed by uuidgen or if it is set to 'root' for policy server
CHECK_UUID=`cat /opt/rudder/etc/uuid.hive | grep -E "^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}|root" | wc -l`
# If the UUID is not valid, regenerate it
if [ ${CHECK_UUID} -ne 1 ]
then
uuidgen > /opt/rudder/etc/uuid.hive
fi
fi
# Copy new binaries to workdir, make sure daemons are stopped first
# Set a "lock" to avoid CFEngine being restarted during the upgrade process
I_SET_THE_LOCK=0
if [ ! -e /opt/rudder/etc/disable-agent ]; then
I_SET_THE_LOCK=1
touch /opt/rudder/etc/disable-agent
fi
%if "%{?_os}" == "aix"
if [ ${CFRUDDER_FIRST_INSTALL} -ne 1 ]; then /usr/bin/stopsrc -s rudder-agent; fi
%else
if [ ${CFRUDDER_FIRST_INSTALL} -ne 1 -a -x /etc/init.d/rudder-agent ]; then /sbin/service rudder-agent stop; fi
%endif
# Copy CFEngine binaries
%{cp_a_command} -f /opt/rudder/bin/cf-* /var/rudder/cfengine-community/bin/
NB_COPIED_BINARIES=`ls -1 /var/rudder/cfengine-community/bin/ | wc -l`
if [ ${NB_COPIED_BINARIES} -gt 0 ];then echo "CFEngine binaries copied to workdir"; fi
# Copy initial promises if there aren't any already
if [ ! -e /var/rudder/cfengine-community/inputs/promises.cf ]
then
cp -r /opt/rudder/share/initial-promises/* /var/rudder/cfengine-community/inputs
fi
# If the cf-promises validation fails, it means we have a broken set of promises (possibly a pre-2.8 set).
# Reset the initial promises so the server is able to send the agent a new set of correct ones.
RUDDER_UUID=`cat /opt/rudder/etc/uuid.hive 2>/dev/null || true`
if ! /var/rudder/cfengine-community/bin/cf-promises >/dev/null 2>&1 && [ "z${RUDDER_UUID}" != "zroot" ]
then
rm -rf /var/rudder/cfengine-community/inputs/*
%{cp_a_command} /opt/rudder/share/initial-promises/* /var/rudder/cfengine-community/inputs/
fi
# This fix is required for upgrades from 2.6 or earlier. Since we didn't support AIX on those versions,
# we don't need it. And it breaks on AIX because their "sed" doesn't have a "-i" option. Grrr.
%if "%{?_os}" != "aix"
# Migration to CFEngine 3.5: Correct a specific Technique that breaks the most recent CFEngine versions
if [ -f /var/rudder/cfengine-community/inputs/distributePolicy/1.0/passwordCheck.cf ]
then
sed -i 's%^\(.*ALTER USER rudder WITH PASSWORD.*p.psql_password.*\)"",$%\1""%' /var/rudder/cfengine-community/inputs/distributePolicy/1.0/passwordCheck.cf
fi
%endif
# Remove the lock on CFEngine
if [ ${I_SET_THE_LOCK} -eq 1 ]; then
rm -f /opt/rudder/etc/disable-agent
fi
# Restart daemons if we stopped them, otherwise not
if [ ${CFRUDDER_FIRST_INSTALL} -ne 1 ]
then
# Check if agent is disabled
if [ ! -f /opt/rudder/etc/disable-agent ]
then
if [ -r /var/rudder/cfengine-community/inputs/failsafe.cf -o -r /var/rudder/cfengine-community/inputs/promises.cf ]
then
%if "%{?_os}" == "aix"
/usr/bin/startsrc -s rudder-agent
%else
/sbin/service rudder-agent start
%endif
fi
else
echo "********************************************************************************"
echo "rudder-agent has been updated, but was not started as it is disabled."
echo "To enable rudder agent, you have to remove disable file, and start rudder-agent:"
echo "# rm -f /opt/rudder/etc/disable-agent"
%if "%{?_os}" == "aix"
echo "# startsrc -s rudder-agent"
%else
echo "# /sbin/service rudder-agent start"
%endif
echo "********************************************************************************"
fi
else
echo "********************************************************************************"
echo "rudder-agent has been installed (not started). This host can be a Rudder node."
echo "To get started, configure your Rudder server's hostname and launch the agent:"
echo "# echo 'rudder.server' > /var/rudder/cfengine-community/policy_server.dat"
%if "%{?_os}" == "aix"
echo "# startsrc -s rudder-agent"
%else
echo "# service rudder-agent start"
%endif
echo "This node will then appear in the Rudder web interface under 'Accept new nodes'."
echo "********************************************************************************"
fi
# Create a key if we don't have one yet
if [ ! -f /var/rudder/cfengine-community/ppkeys/localhost.priv ]
then
echo "INFO: Creating keys for CFEngine agent..."
/var/rudder/cfengine-community/bin/cf-key > /dev/null 2>&1
echo "INFO: Created a new key for CFEngine agent in /var/rudder/cfengine-community/ppkeys/"
fi
%if "%{?_os}" != "aix"
# Add temporary cron for checking UUID. This cron is created in postinst
# in order to remove it later without complains of the package manager.
CHECK_RUDDER_AGENT_CRON=`grep "/opt/rudder/bin/check-rudder-agent" /etc/cron.d/rudder-agent | wc -l`
TMP_CRON=/etc/cron.d/rudder-agent-uuid
# Add it only if the default cron file does not call check-rudder-agent script
if [ ${CHECK_RUDDER_AGENT_CRON} -eq 0 ]; then
if [ ! -f ${TMP_CRON} ]; then
echo "0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /opt/rudder/bin/check-rudder-agent" > ${TMP_CRON}
fi
fi
# Vixie-cron and cronie (at least) expect specific permissions to be applied
# on /etc/cron.d entries, and will refuse to load executable files.
if [ -f ${TMP_CRON} ]; then
chmod 644 ${TMP_CRON}
fi
%endif
/opt/rudder/bin/check-rudder-agent
%preun -n rudder-agent
#=================================================
# Pre Uninstallation
#=================================================
# Do it during upgrade and uninstall
# Keep a backup copy of uuid.hive
if [ -f /opt/rudder/etc/uuid.hive ]; then
mkdir -p /var/backups/rudder
cp -f /opt/rudder/etc/uuid.hive /var/backups/rudder/uuid-$(date +%Y%m%d).hive
echo "INFO: A back up copy of the /opt/rudder/etc/uuid.hive has been created in /var/backups/rudder"
fi
# Keep a backup copy of CFEngine ppkeys
if [ -d /var/rudder/cfengine-community/ppkeys/ ]; then
mkdir -p /var/backups/rudder
%{cp_a_command} -f /var/rudder/cfengine-community/ppkeys/ /var/backups/rudder/ppkeys-$(date +%Y%m%d)
echo "INFO: A back up copy of the /var/rudder/cfengine-community/ppkeys has been created in /var/backups/rudder"
fi
%postun -n rudder-agent
#=================================================
# Post Uninstallation
#=================================================
%if "%{?_os}" == "aix"
# AIX doesn't have a pidof command, let's define it
function pidof {
# Yeah, "grep -v grep" is ugly, but we can't use the [u]nique trick on a variable
ps -A | grep "$1" | grep -v grep | awk '{print $1}';
}
%endif
# Do it only during uninstallation
if [ $1 -eq 0 ]; then
# Make sure that CFEngine is not running anymore
for component in cf-agent cf-serverd cf-execd cf-monitord; do
if pid=`pidof ${component}`; then
kill -9 ${pid}
fi
done
%if "%{?_os}" != "aix"
# Remove the cron script we create at installation to prevent mail
# flooding, re-installation surprises, and general system garbage.
rm -f /etc/cron.d/rudder-agent
# Make sure that Rudder agent specific files have been removed
rm -f /etc/init.d/rudder-agent
rm -f /etc/default/rudder-agent
%endif
# Remove UUID in any case
rm -f /opt/rudder/etc/uuid.hive
fi
#=================================================
# Cleaning
#=================================================
%clean
rm -rf %{buildroot}
rm -f %{_builddir}/file.list.%{name}
#=================================================
# Files
#=================================================
# Files from %{rudderdir} and %{ruddervardir} are automatically added via the -f option
%files -n rudder-agent -f %{_builddir}/file.list.%{name}
%defattr(-, root, root, 0755)
%config(noreplace) %{rudderdir}/etc/uuid.hive
%if "%{?_os}" != "aix"
/etc/profile.d/rudder-agent.sh
/etc/init.d/rudder-agent
/etc/default/rudder-agent
/etc/cron.d/rudder-agent
%endif
%attr(0600, -, -) %dir %{ruddervardir}/cfengine-community/ppkeys
%dir %{ruddervardir}/cfengine-community/bin
%dir %{ruddervardir}/cfengine-community/inputs
%dir %{ruddervardir}/tmp
%dir %{ruddervardir}/tools
%if "%{is_tokyocabinet_here}" != "true" && 0%{?rhel} != 3
%config(noreplace) /etc/ld.so.conf.d/rudder.conf
%endif
#=================================================
# Changelog
#=================================================
%changelog
* Fri Apr 27 2011 - Matthieu CERDA <matthieu.cerda@normation.com> 2.2-beta1-2
- The packages now builds correctly on both x86 and x86_64 archs, and on EL4/CentOS 4.
* Tue Mar 1 2011 - Jonathan CLARKE <jonathan.clarke@normation.com> 2.2-beta1-1
- Release 2.2.beta1
* Fri Feb 25 2011 - Jonathan CLARKE <jonathan.clarke@normation.com> 2.2-beta0-4
- Fix bug in postinstall script - stop daemons before replacing them!
* Fri Feb 25 2011 - Jonathan CLARKE <jonathan.clarke@normation.com> 2.2-beta0-3
- Fix bug to get initial promises in RPM, using the right git branch
* Fri Feb 25 2011 - Jonathan CLARKE <jonathan.clarke@normation.com> 2.2-beta0-2
- Fix bug to get initial promises in RPM
* Fri Feb 25 2011 - Jonathan CLARKE <jonathan.clarke@normation.com> 2.2-beta0-1
- Initial package