Description:
I have succesfully installed both MySQL client and server from rpm on a machine running linux (White Box Enterprise 3.0) as a non-privileged user and relocated *but* I needed to do a bug fix which I report here.
I used the following rpms:
MySQL-client-4.0.20-0.i386.rpm
MySQL-server-4.0.20-0.i386.rpm
After having built my local rpm database I can install those rpm with the following command
rpm -ivh --relocate /=$HOME MySQL-client-4.0.20-0.i386.rpm
and
rpm -ivh --noscripts --relocate /=$HOME MySQL-server-4.0.20-0.i386.rpm
so that installation scripts are not run and I can just run them manually with:
cd $HOME/usr
bin/mysql_install_db
bin/mysqladmin -u root password <mypasswd>
bin/mysqladmin -u root -h $HOST password <mypasswd>
but bin/mysql_install_db fails because it is looking for but it is located in
$HOME/usr/bin/mysqld.
I also needed to have a ~/.my.cnf with the following lines
[mysqld]
basedir=/home/patrick
datadir=/home/patrick/var/lib/mysql
socket=/home/patrick/var/lib/mysql/the.sock
port=3306
language=/home/patrick/usr/share/mysql/english
How to repeat:
Deinstall completely MySQL
mysqladmin -u root shutdown
rpm -e --nopreun MySQL-server-4.0.20-0.i386.rpm
rpm -e MySQL-client-4.0.20-0.i386.rpm
Suggested fix:
I looked into the file bin/mysql_install_db:78
if test -z "$basedir"
then
basedir=/
bindir=/usr/bin
execdir=/usr/sbin
else
bindir="$basedir/bin"
if test -x "$basedir/libexec/mysqld"
then
execdir="$basedir/libexec"
elif test -x "/usr/sbin/mysqld"
then
execdir="/usr/sbin"
else
execdir="$basedir/bin"
fi
fi
mdata=$ldata/mysql
if test ! -x $execdir/mysqld
then
if test "$IN_RPM" = "1"
then
echo "FATAL ERROR $execdir/mysqld not found!"
exit 1
else
echo "Didn't find $execdir/mysqld"
echo "You should do a 'make install' before executing this script"
exit 1
fi
fi
In my case
basedir=/home/patrick
and therefore the last statement is used
execdir="$basedir/bin"
while it should be
execdir="$basedir/sbin"
so that $execdir/mysqld should be found
Description: I have succesfully installed both MySQL client and server from rpm on a machine running linux (White Box Enterprise 3.0) as a non-privileged user and relocated *but* I needed to do a bug fix which I report here. I used the following rpms: MySQL-client-4.0.20-0.i386.rpm MySQL-server-4.0.20-0.i386.rpm After having built my local rpm database I can install those rpm with the following command rpm -ivh --relocate /=$HOME MySQL-client-4.0.20-0.i386.rpm and rpm -ivh --noscripts --relocate /=$HOME MySQL-server-4.0.20-0.i386.rpm so that installation scripts are not run and I can just run them manually with: cd $HOME/usr bin/mysql_install_db bin/mysqladmin -u root password <mypasswd> bin/mysqladmin -u root -h $HOST password <mypasswd> but bin/mysql_install_db fails because it is looking for but it is located in $HOME/usr/bin/mysqld. I also needed to have a ~/.my.cnf with the following lines [mysqld] basedir=/home/patrick datadir=/home/patrick/var/lib/mysql socket=/home/patrick/var/lib/mysql/the.sock port=3306 language=/home/patrick/usr/share/mysql/english How to repeat: Deinstall completely MySQL mysqladmin -u root shutdown rpm -e --nopreun MySQL-server-4.0.20-0.i386.rpm rpm -e MySQL-client-4.0.20-0.i386.rpm Suggested fix: I looked into the file bin/mysql_install_db:78 if test -z "$basedir" then basedir=/ bindir=/usr/bin execdir=/usr/sbin else bindir="$basedir/bin" if test -x "$basedir/libexec/mysqld" then execdir="$basedir/libexec" elif test -x "/usr/sbin/mysqld" then execdir="/usr/sbin" else execdir="$basedir/bin" fi fi mdata=$ldata/mysql if test ! -x $execdir/mysqld then if test "$IN_RPM" = "1" then echo "FATAL ERROR $execdir/mysqld not found!" exit 1 else echo "Didn't find $execdir/mysqld" echo "You should do a 'make install' before executing this script" exit 1 fi fi In my case basedir=/home/patrick and therefore the last statement is used execdir="$basedir/bin" while it should be execdir="$basedir/sbin" so that $execdir/mysqld should be found