1 %define dbhost localhost
4 %define dbpassword gforge
6 %{!?hostname:%define hostname localhost}
7 %{!?sitename:%define sitename MyGForge}
9 %define httpduser apache
11 %define gfgroup gforge
13 %{!?release:%define release 1}
15 Summary: GForge Collaborative Development Environment
21 Group: Development/Tools
22 Source0: %{name}-%{version}.tar.bz2
24 Patch1000: gforge-4.0-deb_rpm.patch
27 Requires: /bin/sh, /bin/bash
28 Requires: perl, perl-DBI, perl-DBD-Pg, perl-HTML-Parser
30 Requires: php, php-mbstring, php-pgsql
31 Requires: postgresql, postgresql-server
32 URL: http://www.gforge.org/
33 BuildRoot: %{_tmppath}/%{name}-%{version}-root
36 GForge is a web-based Collaborative Development Environment offering
37 easy access to CVS, mailing lists, bug tracking, message
38 boards/forums, task management, permanent file archival, and total
39 web-based administration.
41 # Macro for generating an environment variable (%1) with %2 random characters
42 %define randstr() %1=`perl -e 'for ($i = 0, $bit = "!", $key = ""; $i < %2; $i++) {while ($bit !~ /^[0-9A-Za-z]$/) { $bit = chr(rand(90) + 32); } $key .= $bit; $bit = "!"; } print "$key";'`
44 # Change password for admin user
45 %define changepassword() echo "UPDATE users SET user_pw='%1' WHERE user_name='admin'" | su -l postgres -s /bin/sh -c "psql %dbname" >/dev/null 2>&1
54 # cleaning build environment
55 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
58 GFORGE_DIR=$RPM_BUILD_ROOT/%{_datadir}/gforge
59 CACHE_DIR=$RPM_BUILD_ROOT/var/cache/gforge
60 UPLOAD_DIR=$RPM_BUILD_ROOT/var/lib/gforge/upload
61 SCM_TARBALLS_DIR=$RPM_BUILD_ROOT/var/lib/gforge/scmtarballs
62 SCM_SNAPSHOTS_DIR=$RPM_BUILD_ROOT/var/lib/gforge/scmsnapshots
63 HTTPD_CONF_DIR=$RPM_BUILD_ROOT/%{_sysconfdir}/httpd
64 GFORGE_CONF_DIR=$RPM_BUILD_ROOT/%{_sysconfdir}/gforge
65 GFORGE_LIB_DIR=$RPM_BUILD_ROOT/%{_libdir}/gforge
66 PLUGINS_DIR=$GFORGE_LIB_DIR/plugins
67 CROND_DIR=$RPM_BUILD_ROOT/%{_sysconfdir}/cron.d
70 mkdir -p $GFORGE_DIR $GFORGE_LIB_DIR
71 for i in common cronjobs etc rpm-specific utils www ; do
72 cp -rp $i $GFORGE_DIR/
74 chmod 755 $GFORGE_DIR/utils/fill-in-the-blanks.pl
76 install -m 750 setup $GFORGE_DIR/
77 cp -rp db $GFORGE_LIB_DIR/
78 cp -p deb-specific/sf-2.6-complete.sql $GFORGE_LIB_DIR/db/
79 mkdir -p $GFORGE_LIB_DIR/lib $GFORGE_LIB_DIR/bin
80 for i in deb-specific/sqlhelper.pm deb-specific/sqlparser.pm utils/include.pl ; do
81 cp -p $i $GFORGE_LIB_DIR/lib/
83 for i in db-upgrade.pl register-plugin unregister-plugin register-theme unregister-theme ; do
84 install -m 755 deb-specific/$i $GFORGE_LIB_DIR/bin/
87 # creating required directories
90 mkdir -p $SCM_TARBALLS_DIR
94 mkdir -p $HTTPD_CONF_DIR/conf.d
95 install -m 644 rpm-specific/conf/vhost.conf $HTTPD_CONF_DIR/conf.d/gforge.conf
98 mkdir -p $GFORGE_CONF_DIR
99 install -m 600 rpm-specific/conf/gforge.conf $GFORGE_CONF_DIR/
100 install -m 750 rpm-specific/scripts/refresh.sh $GFORGE_CONF_DIR/
101 mkdir -p $GFORGE_CONF_DIR/languages-local
102 cp rpm-specific/languages/*.tab $GFORGE_CONF_DIR/languages-local/
106 install -m 664 rpm-specific/cron.d/gforge $CROND_DIR/
109 if ! id -u %gfuser >/dev/null 2>&1; then
110 groupadd -r %{gfgroup}
111 useradd -r -g %{gfgroup} -d %{_datadir}/gforge -s /bin/bash -c "GForge User" %{gfuser}
115 if [ "$1" -eq "1" ]; then
116 # creating the database
117 service postgresql status | grep '(pid' >/dev/null 2>&1 || service postgresql start
118 su -l postgres -s /bin/sh -c "createdb -E UNICODE %{dbname} >/dev/null 2>&1"
119 su -l postgres -s /bin/sh -c "createlang plpgsql %{dbname} >/dev/null 2>&1"
121 # generating and updating site admin password
122 %randstr SITEADMIN_PASSWORD 8
124 echo "$SITEADMIN_PASSWORD" > %{_sysconfdir}/gforge/siteadmin.pass
125 chmod 0600 %{_sysconfdir}/gforge/siteadmin.pass
126 SITEADMIN_PASSWORD=`echo -n $SITEADMIN_PASSWORD | md5sum | awk '{print $1}'`
128 # creating gforge database user
129 %randstr GFORGEDATABASE_PASSWORD 8
131 su -l postgres -c "psql -c \"CREATE USER %{dbuser} WITH PASSWORD '$GFORGEDATABASE_PASSWORD' NOCREATEUSER\" %{dbname} >/dev/null 2>&1"
133 # updating PostgreSQL configuration
134 if ! grep -i '^ *host.*%{dbname}.*' /var/lib/pgsql/data/pg_hba.conf >/dev/null 2>&1; then
135 echo 'host %{dbname} %{dbuser} 127.0.0.1 255.255.255.255 md5' >> /var/lib/pgsql/data/pg_hba.conf
136 service postgresql reload
139 # adding "noreply" alias
140 for i in /etc/postfix/aliases /etc/mail/aliases /etc/aliases ; do
142 if ! grep -i '^ *noreply:' $i >/dev/null 2>&1; then
143 echo 'noreply: /dev/null' >> $i
150 # generating random session ID
153 # replacing variables in configuration files
155 s/DB_HOST/"%{dbhost}"/g;
156 s/DB_NAME/"%{dbname}"/g;
157 s/DB_USER/"%{dbuser}"/g;
158 s/DB_PASSWORD/"$GFORGEDATABASE_PASSWORD"/g;
159 s/SYSTEM_NAME/"%{sitename}"/g;
160 s/RANDOM_ID/"$SESSID"/g;
161 s/HOST_NAME/"%{hostname}"/g" %{_sysconfdir}/gforge/gforge.conf
162 perl -pi -e "s/HOST_NAME/%{hostname}/g" /etc/httpd/conf.d/gforge.conf
164 # initializing configuration
165 cd %{_datadir}/gforge && ./setup -confdir %{_sysconfdir}/gforge/ -input %{_sysconfdir}/gforge/gforge.conf -noapache >/dev/null 2>&1
167 # creating the database
168 su -l %{gfuser} -c "%{_libdir}/gforge/bin/db-upgrade.pl >/dev/null 2>&1"
169 su -l postgres -c "psql -c 'UPDATE groups SET register_time=EXTRACT(EPOCH FROM NOW());' %{dbname} >/dev/null 2>&1"
170 %changepassword $SITEADMIN_PASSWORD
172 service httpd graceful >/dev/null 2>&1
175 su -l %{gfuser} -c "%{_libdir}/gforge/bin/db-upgrade.pl >/dev/null 2>&1"
177 # updating configuration
178 cd %{_datadir}/gforge && ./setup -confdir %{_sysconfdir}/gforge/ -input %{_sysconfdir}/gforge/gforge.conf -noapache >/dev/null 2>&1
182 if [ "$1" -eq "0" ]; then
183 # dropping gforge database
184 #su -l postgres -s /bin/sh -c "dropuser %{dbuser} >/dev/null 2>&1 ; dropdb %{dbname} >/dev/null 2>&1"
186 for file in siteadmin.pass local.pl httpd.secrets local.inc httpd.conf httpd.vhosts database.inc ; do
187 rm -f %{_sysconfdir}/gforge/$file
189 # Remove PostgreSQL access
190 if grep -i '^ *host.*%{dbname}.*' /var/lib/pgsql/data/pg_hba.conf >/dev/null 2>&1; then
191 perl -ni -e 'm@^ *host.*%{dbname}.*@ or print;' /var/lib/pgsql/data/pg_hba.conf >/dev/null 2>&1
192 perl -ni -e 'm@^ *local.*%{dbname}.*@ or print;' /var/lib/pgsql/data/pg_hba.conf >/dev/null 2>&1
195 if id -u %{gfuser} >/dev/null 2>&1; then
196 userdel %{gfuser} >/dev/null 2>&1
197 groupdel %{gfgroup} >/dev/null 2>&1
203 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
206 %defattr(-, root, root)
207 %doc AUTHORS AUTHORS.sourceforge COPYING ChangeLog INSTALL README*
209 %attr(0660, apache, gforge) %config(noreplace) %{_sysconfdir}/gforge/gforge.conf
210 %attr(0750, root, root) %{_sysconfdir}/gforge/refresh.sh
211 %attr(0640, apache, apache) %config(noreplace) %{_sysconfdir}/httpd/conf.d/gforge.conf
212 %attr(0664, root, root) %config(noreplace) %{_sysconfdir}/cron.d/gforge
213 %attr(0775, apache, apache) %dir /var/lib/gforge/upload
214 %attr(0775, apache, apache) %dir /var/cache/gforge
217 %{_sysconfdir}/gforge/languages-local
218 /var/lib/gforge/scmtarballs
221 * Sat Dec 25 2004 Guillaume Smet <guillaume-gforge@smet.org>
222 - it's now possible to add specific language files in the RPM
223 * Fri Dec 03 2004 Dassault Aviation <guillaume.smet@openwide.fr>
224 - fixed the vhost configuration
225 - fixed the default crontab
226 - the crontab is now a config file and is not replaced on update
227 - added refresh.sh in /etc/gforge/ to refresh the configuration easily
228 * Wed Nov 03 2004 Guillaume Smet <guillaume-gforge@smet.org>