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 9.2 9.3"
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 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 # Fedora9 (an maybe newer) requires running initdb
91 if [ "$pgservice" = '/etc/init.d/postgresql' ]
93 if [ ! -d /var/lib/pgsql/data/base ]
95 service postgresql initdb #&>/dev/null
99 # Might fail if it's already running, so we'll ingnore the result
104 if [ ! -d "$fusionforge_src_dir" ]
106 msg red "Error: $fusionforge_src_dir folder doesn't exist. Run install2 first."
111 # Where the pghba config file is
113 pghbafile="/var/lib/pgsql/data/pg_hba.conf"
114 for v in $PG_VERSIONS ; do
115 pghbafile="$pghbafile /etc/postgresql/$v/main/pg_hba.conf"
117 pghbafile="$pghbafile /opt/csw/var/pgdata/pg_hba.conf"
127 msg red "ERROR: Could not find pg_hba.conf file"
132 forge_save_db_config(){
133 if [ -z "$FFORGE_DB" ]
135 while test -z "$FFORGE_DB"
137 msg noreturn green "* Enter the Database Name (fusionforge): "
141 gforge_db="$FFORGE_DB"
142 msg green " ...using $gforge_db"
144 if [ -z "$FFORGE_USER" ]
146 while test -z "$FFORGE_USER"
148 msg noreturn green "* Enter the Database Username (gforge): "
152 gforge_user="$FFORGE_USER"
153 msg green " ...using $gforge_user"
155 if [ ! -d "$fusionforge_etc_dir" ]
157 mkdir $fusionforge_etc_dir
159 if [ ! -d "$fusionforge_etc_dir/config.ini.d" ]
161 mkdir $fusionforge_etc_dir/config.ini.d
164 msg green " * Saving database configuration in FForge config file"
165 if [ ! -f "$fusionforge_etc_dir/config.ini.d/rpm-install.ini" ]
167 cat > $fusionforge_etc_dir/config.ini.d/rpm-install.ini <<-EOF
168 ; You can edit the values here or move them to other files.
170 forge_name=FusionForge
171 web_host=`hostname -f`
173 ; This file was generated by the RPM installation system.
177 if [ ! -f "$fusionforge_etc_dir/config.ini.d/rpm-install-secrets.ini" ]
179 if [ -c /dev/urandom ]; then # ...using /dev/urandom when possible
180 sk=$(dd if=/dev/urandom count=1 bs=16 2> /dev/null | md5sum | cut -c-32)
182 sk=$(date +"%s:%N" | md5sum | cut -c-32)
185 cat > $fusionforge_etc_dir/config.ini.d/rpm-install-secrets.ini <<-EOF
186 ; You can edit the values here or move them to other files.
187 ; These values should not go into world-readable files!
191 database_name=$gforge_db
192 database_user=$gforge_user
194 ; database_password=""
197 ; This file was generated by the RPM installation system.
200 msg green " * Saving installation log in /tmp/gforge-import.log"
207 export PATH=$PATH:/usr/share/gforge/bin/:/usr/share/gforge/utils:/opt/gforge/utils
208 database=`FUSIONFORGE_NO_PLUGINS=true forge_get_config database_name`
212 if [ -z "$database" ]
214 echo "Forge database name not found"
224 echo "Droping database $database"
225 su - postgres -c "dropdb -e $database"
231 # USING $gforge_user, $gforge_db, $pghba, $fusionforge_src_dir, $fusionforge_etc_dir, $tsearch, $pgservice, $STDIN, $STDOUT;
232 msg green " * Modifying DB Access Permissions..."
234 if [ ! -f $pghba.fforge.backup ]
236 cp $pghba $pghba.fforge.backup
242 msg green " * Restarting PostgreSQL..."
246 msg green " * Creating $gforge_user Group..."
247 /usr/sbin/groupadd $gforge_user;
249 msg green " * Creating '$gforge_user' User..."
250 /usr/sbin/useradd -g $gforge_user $gforge_user
252 # Let's give some time for PostgreSQL to start
255 msg green " * Creating Database User $gforge_user..."
256 su - postgres -c "createuser -A -R -d -E $gforge_user"
258 msg green " * Creating Language..."
259 su - postgres -c "createlang plpgsql template1"
261 if [ -d /home/$gforge_user ]
265 susufix='- -s /bin/sh'
268 msg green " * Creating $gforge_db Database..."
269 su $susufix $gforge_user -c "createdb $dboption --encoding UNICODE $gforge_db"
271 # Enable plpgsql language
272 if [ -f /usr/bin/createlang ]
274 if [ `su -s /bin/sh postgres -c "/usr/bin/createlang -l $gforge_db | grep plpgsql | wc -l"` != 1 ]
276 su -s /bin/sh postgres -c "/usr/bin/createlang plpgsql $gforge_db"
278 echo "Procedural language on $gforge_db already enabled"
281 echo "No way found to enable plpgsql on $gforge_db here"
284 # Detect postgresql version, require at least 8.3
286 for i in postgres psql ; do
287 if [ "$(type -p $i)" != '' ] ; then
288 pgv=$($i --version | cut -d" " -f3)
291 if [ "$pgv" = '' ] ; then
292 msg red "Error: Can't find command-line PostgreSQL client."
297 msg red " * Unsupported PostgreSQL version; 8.3 or later is required"
302 msg green " * Loading FusionForge DB"
303 su $susufix $gforge_user -c "psql $gforge_db < $fusionforge_src_dir/db/gforge.sql" >> /tmp/gforge-import.log 2>&1
305 msg green " * Running php db/upgrade-db.php"
306 if ! php $fusionforge_src_dir/db/upgrade-db.php >> /tmp/gforge-upgrade.log ; then
307 msg red "upgrade-db.php failed."
311 if [ -z "$FFORGE_ADMIN_USER" ]
313 while test -z "$FFORGE_ADMIN_USER"
315 msg noreturn green " * Enter the Admin Username (fforgeadmin): "
316 read FFORGE_ADMIN_USER
319 admin_user=$FFORGE_ADMIN_USER
320 msg green " ...using $admin_user"
322 if [ -z "$FFORGE_ADMIN_PASSWORD" ]
325 while test -z "$FFORGE_ADMIN_PASSWORD" -a $retry -gt 0
327 msg noreturn green " * Enter the Site Admin Password:"
328 read -s FFORGE_ADMIN_PASSWORD1
329 if validatePassword "$FFORGE_ADMIN_PASSWORD1"
331 msg noreturn green " * Please enter it again:"
332 read -s FFORGE_ADMIN_PASSWORD2
333 if [ "$FFORGE_ADMIN_PASSWORD1" = "$FFORGE_ADMIN_PASSWORD2" ]
335 FFORGE_ADMIN_PASSWORD="$FFORGE_ADMIN_PASSWORD1"
337 msg green "Passwords don't match. Please try again."
340 retry=`expr $retry - 1`
342 if [ -z "$FFORGE_ADMIN_PASSWORD" ]
344 msg green "Passwords didn't match! Aborting."
347 create_db_admin_user "$gforge_db" "$admin_user"
348 $fusionforge_src_dir/utils/forge_set_password "$admin_user" "$FFORGE_ADMIN_PASSWORD"
351 create_db_admin_user "$gforge_db" "$admin_user"
352 $fusionforge_src_dir/utils/forge_set_password "$admin_user" "$FFORGE_ADMIN_PASSWORD"
358 strlen=`echo "$1" | wc -m`
361 msg red "Password is too short. Please try again"
364 CHECK=`echo $password | grep -E "[[:alnum:]]*"`
367 msg red "Password contains invalid characters. Please try again."
375 msg green "-=# Welcome to FusionForge DB-Installer #=-"
387 export dboption="--template=template0"
398 export dboption="--template=template0"
404 export dboption="--template=template0"
408 install3_db_unknown()
410 echo "Install 3 db not implemented"