pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Directions to chroot MySQL ?



On Tue, 7 Dec 2010, Joel Carnat wrote:

> I've installed mysql-server 5.1 from pkgsrc binaries (on netbsd-5/i386)
> and wanted to chroot it.
> I've added 'mysqld_flags="--chroot=/home/sql"' to /etc/rc.conf, added
> various files (errmsg.sys, master.passwd...) and issued various command
> lines. But I still get loads of errors from MySQL (about write
> permissions, missing plugins...).
> 
> I already have quite a few chrooted daemons (pound, named, slapd...)
> that were far easier to deal with :)
> 
> While continuing digging to solve the errors one by one, I wanted to
> know if there were "easy" directions to chroot mysql on netbsd ?

This seams to work!

1) Create the chroot and needed subdirectorys.
# for i in etc tmp `dirname ${mysqld_datadir}` usr/pkg/share/mysql ;do \
        mkdir -p ${mysqld_chroot}/${i} ; done

2) Create a passwd file with the mysql user.
# grep mysql /etc/passwd >${mysqld_chroot}/etc/passwd

3) Make the tmp accessable by the mysql user.
# chown mysql:mysql {mysqld_chroot}/tmp

4) Copy the charsets and error messages into the chroot.
# cp -a /usr/pkg/share/mysql/charsets ${mysqld_chroot}/usr/pkg/share/mysql
# cp -a /usr/pkg/share/mysql/english ${mysqld_chroot}/usr/pkg/share/mysql

5) Move the ${mysqld_datadir} into the chroot.
# ( cd `dirname ${mysqld_datadir}` ; tar cf - `basename ${mysqld_datadir}` )|\
  ( cd ${mysqld_chroot}/`dirname ${mysqld_datadir}`; tar xf - )

6) Delete the old ${mysqld_datadir} and make it symlink to the new location[1]
# rm -rf ${mysqld_datadir}
# ln -s ${mysqld_chroot}${mysqld_datadir} ${mysqld_datadir}

7) If this is a linux system copy file libnss_file library into the chroot.
# mkdir ${mysqld_chroot}/lib
# cp /lib/libnss_files.so.2 ${mysqld_chroot}/lib

8) Put the mysqld_flags="--chroot=......" into /etc/rc.conf
# vi /etc/rc.conf

9) Start mysqld.
# /etc/rc.d/mysqld start

10) Create a symlink to the mysqld socket[2].
# ln -s ${mysqld_chroot}/tmp/mysql.sock /tmp/mysql.sock

11) Enjoy :)

Note 1: kills two birds with one symlink.
 ""  2: ditto.

-- 
Steven


Home | Main Index | Thread Index | Old Index