help with rpm script

Started by Craig Jensenover 22 years ago2 messages
#1Craig Jensen
cjensen@acenet-tech.org

Hello,

I am building an rpm for Mitle SME (a scaled down redhat 7.3) and have all functions working except:

I need to have the rpm when installed create a database and a user with privilege to that database.
These are the command functions I need to execute within the rpm...

# service postgresql start
# su postgres
# createdb account
# psql account < my1.sql
# psql account < my2.sql
# exit

But, I need these functions to be executed when someone installs my rpm. For Mysql, I have the following
in the %post of my spec file:

-------------------snippet-from-spec-file-------------------------
%post
# This section creates the database, dbuser, dbpasswd and # data after the package has been installed

pw=`/bin/cat /etc/openldap/ldap.pw`
/bin/echo exit | /usr/bin/mysql --password=$pw mydb 2>&1 &> /dev/null
if [ "$?" = "1" ; then
/bin/echo "Creating mydb database..."
/usr/bin/mysqladmin --password=$pw create mydb
/bin/echo "grant all on mydb.* to dude@localhost identified by 'dudepass';" | /usr/bin/mysql --password=$pw
/usr/bin/mysql --password=$pw mydb < /path/to/my.sql
/usr/bin/mysqladmin --password=$pw reload
fi

--------------end-of-snippet-from-spec--------------------------
What commands could I use to complete similar needs for
a postgresql database to be created by an rpm?

Thank you for any help.

--
Best regards,
Craig Jensen mailto:cjensen@acenet-tech.org

Ace Net-Tech
http://www.acenet-tech.org/ My computer services site.
http://www.acenet-tech.org/phpBB2/ My forum, business and otherwise.

}}}All ouotgoing messages scanned and verified virus-free by Norton Antivirus
2003.{{{

#2Lamar Owen
lamar.owen@wgcr.org
In reply to: Craig Jensen (#1)
Re: help with rpm script

On Wednesday 02 July 2003 01:20, Craig Jensen wrote:

I need to have the rpm when installed create a database and a user with
privilege to that database. These are the command functions I need to
execute within the rpm...

# service postgresql start
# su postgres
# createdb account
# psql account < my1.sql
# psql account < my2.sql
# exit

It is an extremely bad idea to do this. Scriptlets in RPM run in a weird
mode.

Rather, in your spec file, do an initdb in the %install phase, and run a
restore of the precreated database (in %install, again, but this might be a
little tricky to do, since the postmaster as associated executables are in
the buildroot, not in a really runnable position). Then have this packaged
as, say, postgresql-data or somesuch. Add the precreated dump (if it's a
dumpall, it will have the database name and all users as part of the dump).

Or have the initscript in /etc/rc.d/init.d perform the restore immediately
after the initdb that the first initscript run will do.

But you really don't want to be doing this in %post. What if it's an upgrade?
RPM upgrades and installs are identical from the scriptlet's point of view
(except for the one parameter). I have a little experience in this regard,
having maintained the mainline PostgreSQL RPM's for four years.
--
Lamar Owen
WGCR Internet Radio
1 Peter 4:11