Обсуждение: help with rpm script
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.{{{
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