2 # This script is used by the debian and RPM packages to set up fusionforge.
5 echo "$0: [-interact] [-help] [-debug] [-confdir confdir] [-input conffile] [-output conffile] [-localinc gforgelocalinc] [-example|-fhs] [-clean] [-noapache] [-dovhost] [-novhost] [-home homepath] [-group grouppath] [-listen80|nolisten80] [-nossl]"
14 hostname "$@" | while read first rest; do
21 echo "Calculating defaults"
22 # This is used to make a default working gforge.conf
23 DEFAULTsystem_name=MyForge
24 DEFAULTdomain_name=`hostname_oneword -f`
25 DEFAULTserver_admin=webmaster@$DEFAULTdomain_name
30 DEFAULTdb_password=$(dd if=/dev/urandom count=1 bs=8 2> /dev/null | md5sum | cut -b1-8)
31 DEFAULTip_address=`hostname_oneword -i`
32 DEFAULTscm_host=scm.$DEFAULTdomain_name
33 DEFAULTshell_host=shell.$DEFAULTdomain_name
34 DEFAULTusers_host=users.$DEFAULTdomain_name
35 DEFAULTlists_host=lists.$DEFAULTdomain_name
36 # The following three have to be synced when domain_name changes
37 # and docs_host is supposed not to be used
38 #DEFAULTdocs_host=gfdocs.$DEFAULTdomain_name
39 DEFAULTjabber_host=jabber.$DEFAULTdomain_name
40 DEFAULTupload_host=upload.$DEFAULTdomain_name
42 DEFAULTdownload_host=download.$DEFAULTdomain_name
43 # The following is upload host and dir for FRS
44 DEFAULTftpuploadhost=upload.$DEFAULTdomain_name
45 DEFAULTftpuploaddir=$GFGDIR/var/lib/gforge/chroot/ftproot
47 DEFAULTnewsadmin_groupid=2
48 DEFAULTstatsadmin_groupid=3
49 DEFAULTpeerrating_groupid=4
50 DEFAULTtemplate_project=5
51 DEFAULTadmin_login=admin
52 DEFAULTadmin_password=$(dd if=/dev/urandom count=1 bs=8 2> /dev/null | md5sum | cut -b1-8)
53 DEFAULTskill_list="Ada;C;C++;HTML;LISP;Perl;PHP;Python;SQL"
54 DEFAULTdefault_trove_cat=18
55 DEFAULTldap_host=localhost
56 DEFAULTldap_base_dn="dc=`echo $DEFAULTdomain_name | sed 's/\./,dc=/g'`"
57 DEFAULTldap_web_add_password=$(dd if=/dev/urandom count=1 bs=8 2> /dev/null | md5sum | cut -b1-8)
58 DEFAULTsys_path_to_mailman=$(if test -d /usr/lib/mailman; then echo /usr/lib/mailman; else echo /var/mailman; fi)
60 DEFAULTcronolog_path=$(findcronolog)
61 DEFAULTsys_sendmail_path=$(findsendmail)
62 DEFAULTsys_path_to_jpgraph=/usr/share/jpgraph/
63 DEFAULTsys_path_to_scmweb=/usr/share/gforge/bin/
64 DEFAULTgforge_chroot=$CHROOT
65 DEFAULTgforge_etc=$ETCDIR
66 DEFAULTsys_custom_path=$ETCDIR/custom
67 DEFAULTgroupdir=$GROUPPATH
68 DEFAULThomedir=$HOMEPATH
69 DEFAULTcvsdir=$CVSPATH
70 DEFAULTsvndir=$SVNPATH
71 # The place where file uploaded with http are stored for download
72 DEFAULTuploaddir=$GFGDIR/var/lib/gforge/download/
73 DEFAULTsys_urlroot=$SHAREDIR/www/
74 DEFAULTsys_jabber_pass=$(dd if=/dev/urandom count=1 bs=8 2> /dev/null | md5sum | cut -b1-8)
75 DEFAULTusr_share_gforge=$SHAREDIR
76 DEFAULTusr_lib_gforge=$LIBDIR
77 DEFAULTvar_lib_gforge=$GFGDIR/var/lib/gforge
78 DEFAULTvar_log_gforge=$GFGDIR/var/log/gforge
79 DEFAULTsys_show_source=0
80 DEFAULTsys_force_login=0
81 DEFAULTsys_session_key=$(dd if=/dev/urandom count=1 bs=16 2> /dev/null | md5sum | cut -b1-32)
82 DEFAULTsys_session_expire='60 * 60 * 24 * 7'
83 DEFAULTsys_show_contact_info=1
84 DEFAULTsys_themeroot=$SHAREDIR/www/themes/
85 DEFAULTsys_theme=gforge
86 DEFAULTsys_lang=English
87 DEFAULTsys_default_timezone=GMT
88 DEFAULTsys_default_country_code=US
89 DEFAULTsys_account_manager_type=$SYSTEM
90 DEFAULTsys_use_jabber=0
91 DEFAULTsys_use_auth_ldap=1
92 # Couldn't find where this is used, maybe some rest of ext auth
93 #DEFAULTsys_ldap_auth_host=localhost
94 DEFAULTsys_ldap_auth_port=389
95 DEFAULTsys_ldap_auth_version=3
96 DEFAULTsys_ldap_auth_dn="dc=`echo $DEFAULTdomain_name | sed 's/\./,dc=/g'`"
97 DEFAULTsys_scm_tarballs_path=$GFGDIR/var/lib/gforge/scmtarballs
98 DEFAULTsys_scm_snapshots_path=$GFGDIR/var/lib/gforge/scmsnapshots
99 DEFAULTsys_use_scm=true
100 DEFAULTsys_use_tracker=true
101 DEFAULTsys_use_forum=true
102 DEFAULTsys_use_pm=true
103 DEFAULTsys_use_docman=true
104 DEFAULTsys_use_news=true
105 DEFAULTsys_use_mail=true
106 DEFAULTsys_use_survey=true
107 DEFAULTsys_use_frs=true
108 DEFAULTsys_use_fti=false
109 DEFAULTsys_use_ftp=true
110 DEFAULTsys_use_trove=true
111 DEFAULTsys_use_snippet=true
112 DEFAULTsys_use_shell=true
113 DEFAULTsys_use_ratings=true
114 DEFAULTsys_use_ssl=false
115 DEFAULTsys_use_people=true
116 DEFAULTsys_use_manual_uploads=false
117 DEFAULTsys_use_ftpuploads=false
118 DEFAULTsys_use_diary=true
119 DEFAULTsys_use_bookmarks=true
120 DEFAULTsys_use_project_tags=true
121 DEFAULTsys_use_project_full_list=true
122 DEFAULTsys_use_gateways=true
123 DEFAULTsys_use_project_vhost=true
124 DEFAULTsys_use_project_database=false
125 DEFAULTsys_use_project_multimedia=false
126 DEFAULTsys_use_private_project=true
127 DEFAULTsys_project_reg_restricted=false
128 DEFAULTsys_user_reg_restricted=false
129 DEFAULTsys_require_accept_conditions=false
130 DEFAULTsys_require_unique_email=false
131 DEFAULTsys_localinc=$ETCDIR/local.inc
132 DEFAULTsys_jabber_pass=$(dd if=/dev/urandom count=1 bs=8 2> /dev/null | md5sum | cut -b1-8)
133 DEFAULTsys_plugins_path=$SHAREDIR/plugins/
134 DEFAULTsys_sslcrt=$(findcrt)
135 DEFAULTsys_sslkey=$(findkey)
136 DEFAULTnoreply_to_bitbucket=true
137 DEFAULTsys_simple_dns=true
138 DEFAULTsys_apache_user=$(findapacheowner)
139 DEFAULTsys_apache_group=$(findapacheowner)
140 DEFAULTsys_forum_return_domain=$DEFAULTdomain_name
141 DEFAULTsys_block_anonymous_downloads=false
142 DEFAULTsys_urlprefix=/
143 DEFAULTdovhost=$dovhost
146 #usr_lib_gforge=$GFGDIR
152 if [ -e /etc/gforge/ssl-cert.pem ] ; then
153 echo /etc/gforge/ssl-cert.pem
154 elif [ -f /etc/apache2/ssl/apache.pem ] ; then
155 echo /etc/apache2/ssl/apache.pem
156 elif [ -f /etc/apache/ssl.crt/server.crt ] ; then
157 echo /etc/apache/ssl.crt/server.crt
161 if [ -e /etc/gforge/ssl-cert.key ] ; then
162 echo /etc/gforge/ssl-cert.key
163 elif [ -f /etc/apache2/ssl/apache.pem ] ; then
164 echo /etc/apache2/ssl/apache.pem
165 elif [ -f /etc/apache/ssl.key/server.key ] ; then
166 echo /etc/apache/ssl.key/server.key
170 if [ -x /usr/bin/cronolog ]
172 echo /usr/bin/cronolog
174 if [ -x /usr/sbin/cronolog ]
176 echo /usr/sbin/cronolog
183 if [ -x /usr/sbin/sendmail ]
185 echo /usr/sbin/sendmail
191 if grep 'Red Hat' /etc/issue > /dev/null; then
193 elif grep SuSE /etc/issue > /dev/null; then
195 elif grep Debian /etc/issue > /dev/null; then
204 # This create a default conf file in $1
205 tmpfile=$1.$$computedefault
206 echo 'echo "# do not forget to run /usr/sbin/fusionforge-config after changing contents of this file" >$1' > $tmpfile
207 echo "cat >>$1<<-EOF" >> $tmpfile
208 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/\1=\${\1:-\$DEFAULT\1}/' >> $tmpfile
209 echo 'EOF' >> $tmpfile
215 cat $1 | sed 's/\(.[^=]*\)=\(.*\)/DEFAULT\1="\2"/' |
216 grep -v '^DEFAULTcronolog_path' > $1.$$readdefault
219 if [ ! -z "$DEFAULTsys_sslcrt" -a ! -f "$DEFAULTsys_sslcrt" ]
221 unset DEFAULTsys_sslcrt
222 DEFAULTsys_sslcrt=$(findcrt)
224 if [ -z "$DEFAULTsys_sslcrt" ]
226 DEFAULTsys_sslcrt=$(findcrt)
229 if [ ! -z "$DEFAULTsys_sslkey" -a ! -f "$DEFAULTsys_sslkey" ]
231 unset DEFAULTsys_sslkey
232 DEFAULTsys_sslkey=$(findkey)
234 if [ -z "$DEFAULTsys_sslkey" ]
236 DEFAULTsys_sslkey=$(findkey)
239 if [ ! -d "$DEFAULTsys_themeroot/$DEFAULTsys_theme" ]
241 if [ -d "$DEFAULTsys_themeroot/gforge" ]
243 DEFAULTsys_theme=gforge
246 rm -f $1.$$readdefault
253 writedefault $CONFFILEIN.new
255 if [ -f $CONFFILEIN ]
257 echo "Reading defaults from $CONFFILEIN"
258 readdefault $CONFFILEIN
260 readdefault $CONFFILEIN.new
263 if [ "$interact" = true ]
265 echo "Enter values or type enter for defaults:"
267 # This ask for change of default
269 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/getval \1 "\${DEFAULT\1}"/' > $tmpfile
271 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/\1="\${DEFAULT\1}"/' > $tmpfile
276 echo "Creating $CONFFILEOUT"
277 [ ! -d `dirname $CONFFILEOUT` ] && (mkdir -p `dirname $CONFFILEOUT` || (echo "Could not create `dirname $CONFFILEOUT`" && exit 1))
278 writedefault $CONFFILEOUT.new
279 mv $CONFFILEOUT.new $CONFFILEOUT
282 # Remove trailing space
283 cat $CONFFILEIN | sed 's/ *$//' > $CONFFILEIN.new
284 mv $CONFFILEIN.new $CONFFILEIN
288 if [ "$dovhost" = true ]
290 EXCLUDEVHOST=".vhost\|"
293 rm -f $ETCDIR/httpd.d/10cvs
294 rm -f $ETCDIR/httpd.d/10scmcvs
295 rm -f $ETCDIR/httpd.d/10scmcvsauth
296 rm -f $ETCDIR/httpd.d/07maindirhttps
297 rm -f $ETCDIR/httpd.d/11scmcvshttp
298 rm -f $ETCDIR/httpd.d/11scmsvnhttp
299 rm -f $ETCDIR/httpd.d/12scmcvshttp.ssl
300 #rm -f $ETCDIR/httpd.d/20list
303 echo "Creating $LOCALINC"
304 find $ETCTEMPLATEDIR/local.d -follow -type f -regex "$ETCTEMPLATEDIR/local.d/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.$database\)" | sort | while read i
306 if [ "$ETCTEMPLATEDIR" != "$ETCDIR" -a -f $ETCDIR/local.d/`basename $i` ]
308 if diff -q $i $ETCDIR/local.d/`basename $i`
310 rm -f $ETCDIR/local.d/`basename $i`
312 i=$ETCDIR/local.d/`basename $i`
315 $BINDIR/fill-in-the-blanks.pl $i $CONFFILEOUTDIR/`basename $i` $CONFFILEOUT
317 (find $CONFFILEOUTDIR -follow -type f -regex "$CONFFILEOUTDIR/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.$database\)" | sort | xargs cat ) > $LOCALINC
318 find $CONFFILEOUTDIR -follow -type f -regex "$CONFFILEOUTDIR/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.$database\)" -print0 | xargs -0 rm
320 echo "Creating other includes"
321 #for i in $ETCDIR/templates/[a-z]*
322 find $ETCTEMPLATEDIR/templates -follow -type f -regex "$ETCTEMPLATEDIR/templates/[a-z].*" | while read i
324 if [ "$ETCTEMPLATEDIR" != "$ETCDIR" -a -f $ETCDIR/templates/`basename $i` ]
326 if diff -q $i $ETCDIR/templates/`basename $i`
328 rm -f $ETCDIR/templates/`basename $i`
330 i=$ETCDIR/templates/`basename $i`
333 $BINDIR/fill-in-the-blanks.pl $i $CONFFILEOUTDIR/`basename $i` $CONFFILEOUT
335 chmod 600 $CONFFILEIN $CONFFILEOUT
336 chmod 640 $CONFFILEOUTDIR/local.pl $CONFFILEOUTDIR/database.inc
337 chown gforge:gforge $CONFFILEOUTDIR/local.pl $CONFFILEOUTDIR/database.inc
341 APACHECONF=/etc/apache/httpd.conf
342 GFORGE_ETC_SEARCH=$HTTPDCONF
343 export GFORGE_ETC_SEARCH
344 if [ -f $APACHECONF -a -f $BINDIR/install-apache.sh ] ; then
345 if [ ! -f /etc/apache/conf.d/gforge.httpd.conf ] ; then
346 if ! grep -q "^Include $GFORGE_ETC_SEARCH" $APACHECONF ; then
347 $BINDIR/install-apache.sh setup
349 echo "Found Include $GFORGE_ETC_SEARCH in $APACHECONF"
352 LINK=`ls -l /etc/apache/conf.d/gforge.httpd.conf | sed 's/.*-> \(.*\)$/\1/'`
353 if [ "$LINK" != "$GFORGE_ETC_SEARCH" ] ; then
354 echo Need to readjust Symlink
355 $BINDIR/install-apache.sh setup
357 if ! grep -q "^Include $GFORGE_ETC_SEARCH" $APACHECONF ; then
358 echo "Found /etc/apache/conf.d/gforge.httpd.conf"
360 # There is a link and an include
361 $BINDIR/install-apache.sh setup
369 ETCTEMPLATEDIR=`pwd`/etc
375 GROUPPATH=/home/groups
377 if [ ! -e /cvsroot ] && [ -e /var/lib/gforge/chroot/cvsroot ] ; then
378 CVSPATH=/var/lib/gforge/chroot/cvsroot
381 if [ ! -e /svnroot ] && [ -e /var/lib/gforge/chroot/svnroot ] ; then
382 SVNPATH=/var/lib/gforge/chroot/svnroot
386 CONFFILEOUTDIR=$ETCDIR
387 CONFFILEIN=$ETCDIR/gforge.conf
388 CONFFILEOUT=$ETCDIR/gforge.conf
389 LOCALINC=$ETCDIR/local.inc
391 export ETCDIR ETCTEMPLATEDIR BINDIR GFGDIR CONFFILEOUTDIR CONFFILEIN CONFFILEOUT LOCALINC DOAPACHE SYSTEM
429 CONFFILEIN=$1/gforge.conf
430 CONFFILEOUT=$1/gforge.conf
431 LOCALINC=$1/local.inc
432 echo Using $1 as config directory
437 ETCTEMPLATEDIR=/usr/share/gforge/etc
438 BINDIR=/usr/share/gforge/bin
439 CGIDIR=/usr/share/gforge/cgi-bin
442 GROUPPATH=/home/groups
443 CHROOT=/var/lib/gforge/chroot
444 SHAREDIR=/usr/share/gforge
445 LIBDIR=/usr/share/gforge
446 CONFFILEOUTDIR=/etc/gforge
447 CONFFILEIN=/etc/fusionforge/fusionforge.conf
448 CONFFILEOUT=/etc/fusionforge/fusionforge.conf
449 LOCALINC=/etc/gforge/local.inc
474 CONFFILEIN=$ETCDIR/gforge.conf.example
475 CONFFILEOUT=$ETCDIR/gforge.conf.example
476 LOCALINC=$ETCDIR/local.inc.example
489 [ -f $CONFFILEIN ] && echo Removing $CONFFILEIN && rm -f $CONFFILEIN
490 [ -f $CONFFILEOUT ] && echo Removing $CONFFILEOUT && rm -f $CONFFILEOUT
491 [ -f $LOCALINC ] && echo Removing $LOCALINC && rm -f $LOCALINC
506 [ "$noapache" != true ] && doapache