2 # FusionForge Installation Dependency Setup
4 # Copyright 2006 GForge, LLC
5 # Copyright 2011 Christian Bayle <bayle@debian.org>
6 # http://fusionforge.org/
10 # This file is part of GInstaller, it is called by install.sh.
12 # FusionForge is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 2 of the License, or
15 # (at your option) any later version.
17 # FusionForge is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
22 # You should have received a copy of the GNU General Public License along
23 # with FusionForge; if not, write to the Free Software Foundation, Inc.,
24 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 PG_VERSIONS="8.3 8.4 9.0 9.1"
32 if [ "$1" = "noreturn" ]
42 echo $extra "$RED $1 $NORMAL"
45 echo $extra "$GREEN $1 $NORMAL"
50 create_db_admin_user(){
53 su - postgres -c "psql $gforge_db -c \"INSERT INTO users (user_name, realname, firstname, lastname, email, user_pw, unix_pw, status, theme_id) VALUES ('$admin_user', 'Forge Admin', 'Forge', 'Admin', 'root@localhost.localdomain', 'INVALID', 'INVALID', 'A', 1); INSERT INTO user_group (user_id, group_id, admin_flags, role_id) VALUES (currval('users_pk_seq'), 1, 'A',17); INSERT INTO pfo_user_role (user_id, role_id) VALUES (currval('users_pk_seq'), 3)\""
57 initpsql="/etc/init.d/postgresql"
58 for v in $PG_VERSIONS ; do
59 initpsql="$initpsql postgresql-$v"
61 initpsql="$initpsql /etc/init.d/cswpostgres"
69 if [ -z "$pgservice" ]
76 # Fedora9 (an maybe newer) requires running initdb
77 if [ "$pgservice" = '/etc/init.d/postgresql' ]
79 if [ ! -d /var/lib/pgsql/data/base ]
81 service postgresql initdb &>/dev/null
85 # Might fail if it's already running, so we'll ingnore the result
90 if [ ! -d "$fusionforge_src_dir" ]
92 msg red "Error: $fusionforge_src_dir folder doesn't exist. Run install2 first."
97 # Where the pghba config file is
99 pghbafile="/var/lib/pgsql/data/pg_hba.conf"
100 for v in $PG_VERSIONS ; do
101 pghbafile="$pghbafile /etc/postgresql/$v/main/pg_hba.conf"
103 pghbafile="$pghbafile /opt/csw/var/pgdata/pg_hba.conf"
113 msg red "ERROR: Could not find pg_hba.conf file"
118 forge_save_db_config(){
119 if [ -z "$FFORGE_DB" ]
121 while test -z "$FFORGE_DB"
123 msg noreturn green "* Enter the Database Name (fusionforge): "
127 gforge_db="$FFORGE_DB"
128 msg green " ...using $gforge_db"
130 if [ -z "$FFORGE_USER" ]
132 while test -z "$FFORGE_USER"
134 msg noreturn green "* Enter the Database Username (gforge): "
138 gforge_user="$FFORGE_USER"
139 msg green " ...using $gforge_user"
141 if [ ! -d "$fusionforge_etc_dir" ]
143 mkdir $fusionforge_etc_dir
145 if [ ! -d "$fusionforge_etc_dir/config.ini.d" ]
147 mkdir $fusionforge_etc_dir/config.ini.d
150 msg green " * Saving database configuration in FForge config file"
151 if [ ! -f "$fusionforge_etc_dir/config.ini.d/rpm-install.ini" ]
153 cat > $fusionforge_etc_dir/config.ini.d/rpm-install.ini <<-EOF
154 ; You can edit the values here or move them to other files.
156 forge_name=FusionForge
157 web_host=`hostname -f`
159 ; This file was generated by the RPM installation system.
163 if [ ! -f "$fusionforge_etc_dir/config.ini.d/rpm-install-secrets.ini" ]
165 cat > $fusionforge_etc_dir/config.ini.d/rpm-install-secrets.ini <<-EOF
166 ; You can edit the values here or move them to other files.
167 ; These values should not go into world-readable files!
171 database_name=$gforge_db
172 database_user=$gforge_user
174 ; database_password=""
176 ; This file was generated by the RPM installation system.
179 msg green " * Saving installation log in /tmp/gforge-import.log"
186 export PATH=$PATH:/usr/share/gforge/bin/:/usr/share/gforge/utils:/opt/gforge/utils
187 database=`FUSIONFORGE_NO_PLUGINS=true forge_get_config database_name`
191 if [ -z "$database" ]
193 echo "Forge database name not found"
203 echo "Droping database $database"
204 su - postgres -c "dropdb -e $database"
210 # USING $gforge_user, $gforge_db, $pghba, $fusionforge_src_dir, $fusionforge_etc_dir, $tsearch, $pgservice, $STDIN, $STDOUT;
211 msg green " * Modifying DB Access Permissions..."
213 if [ ! -f $pghba.fforge.backup ]
215 cp $pghba $pghba.fforge.backup
221 msg green " * Restarting PostgreSQL..."
225 msg green " * Creating $gforge_user Group..."
226 /usr/sbin/groupadd $gforge_user;
228 msg green " * Creating '$gforge_user' User..."
229 /usr/sbin/useradd -g $gforge_user $gforge_user
231 # Let's give some time for PostgreSQL to start
234 msg green " * Creating Database User $gforge_user..."
235 su - postgres -c "createuser -A -R -d -E $gforge_user"
237 msg green " * Creating Language..."
238 su - postgres -c "createlang plpgsql template1"
240 if [ -d /home/$gforge_user ]
244 susufix='- -s /bin/sh'
247 msg green " * Creating $gforge_db Database..."
248 su $susufix $gforge_user -c "createdb $dboption --encoding UNICODE $gforge_db"
250 # Enable plpgsql language
251 if [ -f /usr/bin/createlang ]
253 if [ `su -s /bin/sh postgres -c "/usr/bin/createlang -l $gforge_db | grep plpgsql | wc -l"` != 1 ]
255 su -s /bin/sh postgres -c "/usr/bin/createlang plpgsql $gforge_db"
257 echo "Procedural language on $gforge_db already enabled"
260 echo "No way found to enable plpgsql on $gforge_db here"
263 # Detect postgresql version, require at least 8.3
265 for i in postgres psql ; do
266 if [ "$(type -p $i)" != '' ] ; then
267 pgv=$($i --version | cut -d" " -f3)
270 if [ "$pgv" = '' ] ; then
271 msg red "Error: Can't find command-line PostgreSQL client."
276 msg red " * Unsupported PostgreSQL version; 8.3 or later is required"
281 msg green " * Loading FusionForge DB"
282 su $susufix $gforge_user -c "psql $gforge_db < $fusionforge_src_dir/db/gforge.sql" >> /tmp/gforge-import.log
284 msg green " * Running php db/upgrade-db.php"
285 php $fusionforge_src_dir/db/upgrade-db.php >> /tmp/gforge-upgrade.log
288 if [ -z "$FFORGE_ADMIN_USER" ]
290 while test -z "$FFORGE_ADMIN_USER"
292 msg noreturn green " * Enter the Admin Username (fforgeadmin): "
293 read FFORGE_ADMIN_USER
296 admin_user=$FFORGE_ADMIN_USER
297 msg green " ...using $admin_user"
299 if [ -z "$FFORGE_ADMIN_PASSWORD" ]
302 while test -z "$FFORGE_ADMIN_PASSWORD" -a $retry -gt 0
304 msg noreturn green " * Enter the Site Admin Password:"
305 read -s FFORGE_ADMIN_PASSWORD1
306 if validatePassword "$FFORGE_ADMIN_PASSWORD1"
308 msg noreturn green " * Please enter it again:"
309 read -s FFORGE_ADMIN_PASSWORD2
310 if [ "$FFORGE_ADMIN_PASSWORD1" = "$FFORGE_ADMIN_PASSWORD2" ]
312 FFORGE_ADMIN_PASSWORD="$FFORGE_ADMIN_PASSWORD1"
314 msg green "Passwords don't match. Please try again."
317 retry=`expr $retry - 1`
319 if [ -z "$FFORGE_ADMIN_PASSWORD" ]
321 msg green "Passwords didn't match! Aborting."
324 create_db_admin_user "$gforge_db" "$admin_user"
325 $fusionforge_src_dir/utils/forge_set_password "$admin_user" "$FFORGE_ADMIN_PASSWORD"
328 create_db_admin_user "$gforge_db" "$admin_user"
329 $fusionforge_src_dir/utils/forge_set_password "$admin_user" "$FFORGE_ADMIN_PASSWORD"
335 strlen=`echo "$1" | wc -m`
338 msg red "Password is too short. Please try again"
341 CHECK=`echo $password | grep -E "[[:alnum:]]*"`
344 msg red "Password contains invalid characters. Please try again."
352 msg green "-=# Welcome to FusionForge DB-Installer #=-"
374 export dboption="--template=template0"
380 export dboption="--template=template0"
384 install3_db_unknown()
386 echo "Install 3 db not implemented"