4 echo "$0: [-interact] [-help] [-debug] [-confdir confdir] [-input conffile] [-output conffile] [-httpdconf gforgehttpdconf] [-httpdsecrets gforgehttpdsecrets] [-localinc gforgelocalinc] [-example|-fhs] [-clean] [-noapache] [-dovhost] [-home homepath] [-group grouppath] [-listen80|nolisten80] [-nossl]"
13 echo "Calculating defaults"
14 # This is used to make a default working gforge.conf
15 DEFAULTsystem_name=MyGForge
16 DEFAULTdomain_name=`hostname -f`
17 DEFAULTserver_admin=webmaster@$DEFAULTdomain_name
18 DEFAULTdb_host=`hostname -i`
22 DEFAULTdb_password=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-8)
23 DEFAULTip_address=`hostname -i`
24 DEFAULTscm_host=scm.$DEFAULTdomain_name
25 DEFAULTshell_host=shell.$DEFAULTdomain_name
26 DEFAULTusers_host=users.$DEFAULTdomain_name
27 DEFAULTlists_host=lists.$DEFAULTdomain_name
28 # The following three have to be synced when domain_name changes
29 # and docs_host is supposed not to be used
30 #DEFAULTdocs_host=gfdocs.$DEFAULTdomain_name
31 DEFAULTjabber_host=jabber.$DEFAULTdomain_name
32 DEFAULTupload_host=upload.$DEFAULTdomain_name
34 DEFAULTdownload_host=download.$DEFAULTdomain_name
35 # The following is upload host and dir for FRS
36 DEFAULTftpuploadhost=upload.$DEFAULTdomain_name
37 DEFAULTftpuploaddir=$GFGDIR/var/lib/gforge/chroot/ftproot
39 DEFAULTstatsadmin_groupid=2
40 DEFAULTnewsadmin_groupid=3
41 DEFAULTpeerrating_groupid=4
42 DEFAULTtemplate_project=5
43 DEFAULTadmin_login=admin
44 DEFAULTadmin_password=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-8)
45 DEFAULTskill_list="Ada;C;C++;HTML;LISP;Perl;PHP;Python;SQL"
46 DEFAULTdefault_trove_cat=18
47 DEFAULTldap_host=localhost
48 DEFAULTldap_base_dn="dc=`echo $DEFAULTdomain_name | sed 's/\./,dc=/g'`"
49 DEFAULTldap_web_add_password=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-8)
50 DEFAULTsys_path_to_mailman=$(if test -d /usr/lib/mailman; then echo /usr/lib/mailman; else echo /var/mailman; fi)
52 DEFAULTcronolog_path=$(findcronolog)
53 DEFAULTsys_sendmail_path=$(findsendmail)
54 DEFAULTsys_path_to_jpgraph=/usr/share/jpgraph/
55 DEFAULTsys_path_to_scmweb=/usr/share/gforge/bin/
56 DEFAULTgforge_chroot=$CHROOT
57 DEFAULTgforge_etc=$ETCDIR
58 DEFAULTsys_custom_path=$ETCDIR/custom
59 DEFAULTgroupdir=$GROUPPATH
60 DEFAULThomedir=$HOMEPATH
61 DEFAULTcvsdir=$CVSPATH
62 DEFAULTsvndir=$SVNPATH
63 # The place where file uploaded with http are stored for download
64 DEFAULTuploaddir=$GFGDIR/var/lib/gforge/download/
65 DEFAULTsys_urlroot=$SHAREDIR/www/
66 DEFAULTsys_jabber_pass=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-8)
67 DEFAULTusr_share_gforge=$SHAREDIR
68 DEFAULTusr_lib_gforge=$LIBDIR
69 DEFAULTvar_lib_gforge=$GFGDIR/var/lib/gforge
70 DEFAULTvar_log_gforge=$GFGDIR/var/log/gforge
71 DEFAULTsys_show_source=0
72 DEFAULTsys_force_login=0
73 DEFAULTsys_session_key=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-32)
74 DEFAULTsys_session_expire='60 * 60 * 24 * 7'
75 DEFAULTsys_show_contact_info=1
76 DEFAULTsys_themeroot=$SHAREDIR/www/themes/
77 DEFAULTsys_theme=gforge
78 DEFAULTsys_lang=English
79 DEFAULTsys_default_timezone=GMT
80 DEFAULTsys_default_country_code=US
81 DEFAULTsys_account_manager_type=$SYSTEM
82 DEFAULTsys_use_jabber=0
83 DEFAULTsys_use_auth_ldap=1
84 # Couldn't find where this is used, maybe some rest of ext auth
85 #DEFAULTsys_ldap_auth_host=localhost
86 DEFAULTsys_ldap_auth_port=389
87 DEFAULTsys_ldap_auth_version=3
88 DEFAULTsys_ldap_auth_dn="dc=`echo $DEFAULTdomain_name | sed 's/\./,dc=/g'`"
89 DEFAULTsys_scm_tarballs_path=$GFGDIR/var/lib/gforge/scmtarballs
90 DEFAULTsys_scm_snapshots_path=$GFGDIR/var/lib/gforge/scmsnapshots
91 DEFAULTsys_use_scm=true
92 DEFAULTsys_use_tracker=true
93 DEFAULTsys_use_forum=true
94 DEFAULTsys_use_pm=true
95 DEFAULTsys_use_docman=true
96 DEFAULTsys_use_news=true
97 DEFAULTsys_use_mail=true
98 DEFAULTsys_use_survey=true
99 DEFAULTsys_use_frs=true
100 DEFAULTsys_use_fti=false
101 DEFAULTsys_use_ftp=true
102 DEFAULTsys_use_trove=true
103 DEFAULTsys_use_snippet=true
104 DEFAULTsys_use_shell=true
105 DEFAULTsys_use_ratings=true
106 DEFAULTsys_use_ssl=false
107 DEFAULTsys_use_people=true
108 DEFAULTsys_use_ftpuploads=false
109 DEFAULTsys_use_diary=true
110 DEFAULTsys_use_bookmarks=true
111 DEFAULTsys_use_project_tags=true
112 DEFAULTsys_use_project_full_list=true
113 DEFAULTsys_use_gateways=true
114 DEFAULTsys_use_project_vhost=true
115 DEFAULTsys_use_project_database=false
116 DEFAULTsys_use_project_multimedia=false
117 DEFAULTsys_use_private_project=true
118 DEFAULTsys_project_reg_restricted=false
119 DEFAULTsys_user_reg_restricted=false
120 DEFAULTsys_require_accept_conditions=false
121 DEFAULTsys_localinc=$ETCDIR/local.inc
122 DEFAULTsys_jabber_pass=$(dd if=/dev/urandom count=256 bs=1 2> /dev/null | md5sum | cut -b1-8)
123 DEFAULTsys_plugins_path=$SHAREDIR/plugins/
124 DEFAULTsys_sslcrt=$(findcrt)
125 DEFAULTsys_sslkey=$(findkey)
126 DEFAULTnoreply_to_bitbucket=true
127 DEFAULTsys_simple_dns=true
128 DEFAULTsys_apache_user=$(findapacheowner)
129 DEFAULTsys_apache_group=$(findapacheowner)
130 DEFAULTsys_forum_return_domain=$DEFAULTdomain_name
133 #usr_lib_gforge=$GFGDIR
139 if [ -e /etc/gforge/ssl-cert.pem ] ; then
140 echo /etc/gforge/ssl-cert.pem
141 elif [ -f /etc/apache2/ssl/apache.pem ] ; then
142 echo /etc/apache2/ssl/apache.pem
143 elif [ -f /etc/apache/ssl.crt/server.crt ] ; then
144 echo /etc/apache/ssl.crt/server.crt
148 if [ -e /etc/gforge/ssl-cert.key ] ; then
149 echo /etc/gforge/ssl-cert.key
150 elif [ -f /etc/apache2/ssl/apache.pem ] ; then
151 echo /etc/apache2/ssl/apache.pem
152 elif [ -f /etc/apache/ssl.key/server.key ] ; then
153 echo /etc/apache/ssl.key/server.key
157 if [ -x /usr/bin/cronolog ]
159 echo /usr/bin/cronolog
161 if [ -x /usr/sbin/cronolog ]
163 echo /usr/sbin/cronolog
170 if [ -x /usr/sbin/sendmail ]
172 echo /usr/sbin/sendmail
178 if grep 'Red Hat' /etc/issue > /dev/null; then
180 elif grep SuSE /etc/issue > /dev/null; then
182 elif grep Debian /etc/issue > /dev/null; then
191 # This create a default conf file in $1
192 tmpfile=$1.$$computedefault
193 echo "cat >$1<<-EOF" > $tmpfile
194 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/\1=\${\1:-\$DEFAULT\1}/' >> $tmpfile
195 echo 'EOF' >> $tmpfile
201 cat $1 | sed 's/\(.[^=]*\)=\(.*\)/DEFAULT\1="\2"/' |
202 grep -v '^DEFAULTcronolog_path' > $1.$$readdefault
205 if [ ! -z "$DEFAULTsys_sslcrt" -a ! -f "$DEFAULTsys_sslcrt" ]
207 unset DEFAULTsys_sslcrt
208 DEFAULTsys_sslcrt=$(findcrt)
210 if [ -z "$DEFAULTsys_sslcrt" ]
212 DEFAULTsys_sslcrt=$(findcrt)
215 if [ ! -z "$DEFAULTsys_sslkey" -a ! -f "$DEFAULTsys_sslkey" ]
217 unset DEFAULTsys_sslkey
218 DEFAULTsys_sslkey=$(findkey)
220 if [ -z "$DEFAULTsys_sslkey" ]
222 DEFAULTsys_sslkey=$(findkey)
225 if [ ! -d "$DEFAULTsys_themeroot/$DEFAULTsys_theme" ]
227 if [ -d "$DEFAULTsys_themeroot/gforge" ]
229 DEFAULTsys_theme=gforge
232 rm -f $1.$$readdefault
239 writedefault $CONFFILEIN.new
241 if [ -f $CONFFILEIN ]
243 echo "Reading defaults from $CONFFILEIN"
244 readdefault $CONFFILEIN
246 readdefault $CONFFILEIN.new
249 if [ "$interact" = true ]
251 echo "Enter values or type enter for defaults:"
253 # This ask for change of default
255 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/getval \1 "\${DEFAULT\1}"/' > $tmpfile
257 cat $0 | grep "^ DEFAULT" | sed 's/ DEFAULT\(.[^=]*\)=.*/\1="\${DEFAULT\1}"/' > $tmpfile
262 echo "Creating $CONFFILEOUT"
263 [ ! -d `dirname $CONFFILEOUT` ] && (mkdir -p `dirname $CONFFILEOUT` || (echo "Could not create `dirname $CONFFILEOUT`" && exit 1))
264 writedefault $CONFFILEOUT.new
265 mv $CONFFILEOUT.new $CONFFILEOUT
268 # Remove trailing space
269 cat $CONFFILEIN | sed 's/ *$//' > $CONFFILEIN.new
270 mv $CONFFILEIN.new $CONFFILEIN
273 EXCLUDEVHOST=' -not -name 55vhost'
274 if [ "$dovhost" = true ]
279 rm -f $ETCDIR/httpd.d/10cvs
280 rm -f $ETCDIR/httpd.d/10scmcvs
281 rm -f $ETCDIR/httpd.d/10scmcvsauth
282 rm -f $ETCDIR/httpd.d/07maindirhttps
283 rm -f $ETCDIR/httpd.d/11scmcvshttp
284 rm -f $ETCDIR/httpd.d/11scmsvnhttp
285 rm -f $ETCDIR/httpd.d/12scmcvshttp.ssl
286 #rm -f $ETCDIR/httpd.d/20list
289 find $ETCTEMPLATEDIR/httpd.d -type f -regex "$ETCTEMPLATEDIR/httpd.d/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.ssl\|.secrets\)" $EXCLUDEVHOST | sort | while read i
291 if [ "$ETCTEMPLATEDIR" != "$ETCDIR" -a -f $ETCDIR/httpd.d/`basename $i` ]
293 if diff -q $i $ETCDIR/httpd.d/`basename $i`
295 rm -f $ETCDIR/httpd.d/`basename $i`
297 i=$ETCDIR/httpd.d/`basename $i`
300 $BINDIR/fill-in-the-blanks.pl $i $ETCDIR/`basename $i`.gforge-new $CONFFILEOUT
303 if [ $listen80 = false ]
305 rm -f $ETCDIR/00listen80.gforge-new
308 if [ $usessl = false -o -z "$(findkey)" -o -z "$(findcrt)" ]
311 rm -f $ETCDIR/[0-9][0-9]*.ssl.gforge-new
316 echo "Creating $HTTPDCONF"
317 ls $ETCDIR/[0-9][0-9]*.gforge-new | sort | xargs cat > $HTTPDCONF
318 rm $ETCDIR/[0-9][0-9]*.gforge-new
319 echo "Creating $HTTPDSECRETS"
320 cat $ETCDIR/httpd.secrets.gforge-new > $HTTPDSECRETS
321 rm $ETCDIR/httpd.secrets.gforge-new
323 echo "Creating $LOCALINC"
324 find $ETCTEMPLATEDIR/local.d -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
326 if [ "$ETCTEMPLATEDIR" != "$ETCDIR" -a -f $ETCDIR/local.d/`basename $i` ]
328 if diff -q $i $ETCDIR/local.d/`basename $i`
330 rm -f $ETCDIR/local.d/`basename $i`
332 i=$ETCDIR/local.d/`basename $i`
335 $BINDIR/fill-in-the-blanks.pl $i $CONFFILEOUTDIR/`basename $i` $CONFFILEOUT
337 (find $CONFFILEOUTDIR -type f -regex "$CONFFILEOUTDIR/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.$database\)" | sort | xargs cat ) > $LOCALINC
338 find $CONFFILEOUTDIR -type f -regex "$CONFFILEOUTDIR/\([a-z0-9]+\|_?([a-z0-9_.]+-)+[a-z0-9]+\|[a-z0-9][a-z0-9-]*\)\(\|.$database\)" -print0 | xargs -0 rm
340 echo "Creating other includes"
341 #for i in $ETCDIR/templates/[a-z]*
342 find $ETCTEMPLATEDIR/templates -type f -regex "$ETCTEMPLATEDIR/templates/[a-z].*" | while read i
344 if [ "$ETCTEMPLATEDIR" != "$ETCDIR" -a -f $ETCDIR/templates/`basename $i` ]
346 if diff -q $i $ETCDIR/templates/`basename $i`
348 rm -f $ETCDIR/templates/`basename $i`
350 i=$ETCDIR/templates/`basename $i`
353 $BINDIR/fill-in-the-blanks.pl $i $CONFFILEOUTDIR/`basename $i` $CONFFILEOUT
355 chmod 600 $HTTPDSECRETS $CONFFILEIN $CONFFILEOUT
356 chmod 640 $CONFFILEOUTDIR/local.pl $CONFFILEOUTDIR/database.inc
357 chown gforge:gforge $CONFFILEOUTDIR/local.pl $CONFFILEOUTDIR/database.inc
361 APACHECONF=/etc/apache/httpd.conf
362 GFORGE_ETC_SEARCH=$HTTPDCONF
363 export GFORGE_ETC_SEARCH
364 if [ -f $APACHECONF -a -f $BINDIR/install-apache.sh ] ; then
365 if [ ! -f /etc/apache/conf.d/gforge.httpd.conf ] ; then
366 if ! grep -q "^Include $GFORGE_ETC_SEARCH" $APACHECONF ; then
367 $BINDIR/install-apache.sh setup
369 echo "Found Include $GFORGE_ETC_SEARCH in $APACHECONF"
372 LINK=`ls -l /etc/apache/conf.d/gforge.httpd.conf | sed 's/.*-> \(.*\)$/\1/'`
373 if [ "$LINK" != "$GFORGE_ETC_SEARCH" ] ; then
374 echo Need to readjust Symlink
375 $BINDIR/install-apache.sh setup
377 if ! grep -q "^Include $GFORGE_ETC_SEARCH" $APACHECONF ; then
378 echo "Found /etc/apache/conf.d/gforge.httpd.conf"
380 # There is a link and an include
381 $BINDIR/install-apache.sh setup
389 ETCTEMPLATEDIR=`pwd`/etc
395 GROUPPATH=/home/groups
397 if [ ! -e /cvsroot ] && [ -e /var/lib/gforge/chroot/cvsroot ] ; then
398 CVSPATH=/var/lib/gforge/chroot/cvsroot
401 if [ ! -e /svnroot ] && [ -e /var/lib/gforge/chroot/svnroot ] ; then
402 SVNPATH=/var/lib/gforge/chroot/svnroot
406 CONFFILEOUTDIR=$ETCDIR
407 CONFFILEIN=$ETCDIR/gforge.conf
408 CONFFILEOUT=$ETCDIR/gforge.conf
409 LOCALINC=$ETCDIR/local.inc
410 HTTPDCONF=$ETCDIR/httpd.conf
411 HTTPDSECRETS=$ETCDIR/httpd.secrets
413 export ETCDIR ETCTEMPLATEDIR BINDIR GFGDIR CONFFILEOUTDIR CONFFILEIN CONFFILEOUT LOCALINC HTTPDCONF HTTPDSECRETS DOAPACHE SYSTEM
458 CONFFILEIN=$1/gforge.conf
459 CONFFILEOUT=$1/gforge.conf
460 LOCALINC=$1/local.inc
461 HTTPDCONF=$1/httpd.conf
462 HTTPDSECRETS=$1/httpd.secrets
463 echo Using $1 as config directory
468 ETCTEMPLATEDIR=/usr/share/gforge/etc
469 BINDIR=/usr/share/gforge/bin
470 CGIDIR=/usr/share/gforge/cgi-bin
473 GROUPPATH=/home/groups
474 CHROOT=/var/lib/gforge/chroot
475 SHAREDIR=/usr/share/gforge
476 LIBDIR=/usr/share/gforge
477 CONFFILEOUTDIR=/etc/gforge
478 CONFFILEIN=/etc/gforge/gforge.conf
479 CONFFILEOUT=/etc/gforge/gforge.conf
480 LOCALINC=/etc/gforge/local.inc
481 HTTPDCONF=/etc/gforge/httpd.conf
482 HTTPDSECRETS=/etc/gforge/httpd.secrets
504 CONFFILEIN=$ETCDIR/gforge.conf.example
505 CONFFILEOUT=$ETCDIR/gforge.conf.example
506 LOCALINC=$ETCDIR/local.inc.example
507 HTTPDCONF=$ETCDIR/httpd.conf.example
508 HTTPDSECRETS=$ETCDIR/httpd.secrets.example
521 [ -f $CONFFILEIN ] && echo Removing $CONFFILEIN && rm -f $CONFFILEIN
522 [ -f $CONFFILEOUT ] && echo Removing $CONFFILEOUT && rm -f $CONFFILEOUT
523 [ -f $LOCALINC ] && echo Removing $LOCALINC && rm -f $LOCALINC
524 [ -f $HTTPDCONF ] && echo Removing $HTTPDCONF && rm -f $HTTPDCONF
525 [ -f $HTTPDSECRETS ] && echo Removing $HTTPDSECRETS && rm -f $HTTPDSECRETS
540 [ "$noapache" != true ] && doapache