LINUX.ORG.RU
ФорумAdmin

[mysql,chroot] Не хочет.


0

0

Есть gentoo_amd64. А в ней через debootstrap сделано chroot-окружение debian_lenny32. Сделано, поскольку есть для debian один замечательный скрипт, который позволяет легким движением руки установить желанный мной Openmeetings.

Ещё вчера ночью всё работало:) А вот теперь зашел заново в chroot и при попытке запуска mysql меня жестоко обламывают:

calculate:/# /etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
calculate:/# whereis mysqld
mysqld: /usr/sbin/mysqld /usr/share/man/man8/mysqld.8.gz
calculate:/# /usr/sbin/mysqld start --user=root
100423 14:53:17 [Warning] Ignoring user change to 'root' because the user was set to 'mysql' earlier on the command line

Логи:

Apr 23 14:50:07 calculate mysqld_safe[4588]: started
Apr 23 14:50:08 calculate mysqld[4591]: 100423 14:50:08 [ERROR] Fatal error: Can't change to run as user 'mysql' ;  Please check that the user exists!
Apr 23 14:50:08 calculate mysqld[4591]: 
Apr 23 14:50:08 calculate mysqld[4591]: 100423 14:50:08 [ERROR] Aborting
Apr 23 14:50:08 calculate mysqld[4591]: 
Apr 23 14:50:08 calculate mysqld[4591]: 100423 14:50:08 [Note] /usr/sbin/mysqld: Shutdown complete
Apr 23 14:50:08 calculate mysqld[4591]: 
Apr 23 14:50:08 calculate mysqld_safe[4593]: ended
Apr 23 14:50:21 calculate /etc/init.d/mysql[4728]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
Apr 23 14:50:21 calculate /etc/init.d/mysql[4728]: /usr/bin/mysqladmin: connect to server at 'localhost' failed
Apr 23 14:50:21 calculate /etc/init.d/mysql[4728]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Apr 23 14:50:21 calculate /etc/init.d/mysql[4728]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
Apr 23 14:50:21 calculate /etc/init.d/mysql[4728]:

Подскажите, пожалуйста, как завставить заработать? Сам что-то не осиливаю.

А пользователь то есть? Что показывает «calculate:/# id mysql» ?

И ещё попробуйте «calculate:/# sudo -u mysql /etc/init.d/mysql start»

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо за отзыв! Пользователя не было. Я его создал:

calculate:/# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
sudo в chroot-окружении не установлена. А при попытке установки сказал:
calculate:/# apt-get install sudo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudo
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 176kB of archives.
After this operation, 434kB of additional disk space will be used.
Get:1 http://security.debian.org lenny/updates/main sudo 1.6.9p17-2+lenny1 [176kB]
Fetched 176kB in 2s (66.6kB/s)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_NUMERIC = "POSIX",
	LANG = "ru_RU.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
dpkg: unrecoverable fatal error, aborting:
 syntax error: unknown group `Debian-exim' in statoverride file 
E: Sub-process /usr/bin/dpkg returned an error code (2)
Ладно, буду читать о русификации debian. Хотя странно, почему когда устанавливались mysql, openoffice,swtools,etc. локаль его вполне устраивала?

Кажеться, я немного недопонимаю принципов работы chroot. Когда я захожу в chroot-окружение я не указываю, что я за пользователь:

linux32 chroot /mnt/debian32 /bin/bash
Значит, я в chroot-окружении являюсь root'oм, а root'у вроде бы как всё дозволено. Хотя who ничего не говорит. Интересно почему. Наверное, надо курить доки по chroot.

Anatolik ★★
() автор топика
Ответ на: комментарий от Anatolik

Запуск через sudo это был второй вариант решения проблемы, может создания пользователя mysql было достаточно.

Относительно chroot. Системный вызов chroot не изменяет идентификатор пользователя (число) и доступен только суперпользователю (root'у). Поэтому когда вы переходите в chroot, вы root. who ничего не говорит, так как эта команда читает файл /var/log/wtmp (wtmpx), а записи в это файл создаются при логине пользователя в системе, в chroot вы переходите, а логин в системе у вас был с нормальным корнем. Смотрите на себя командой id или whoami.

mky ★★★★★
()
Ответ на: комментарий от mky

Относительно chroot.

Познавательно, спасибо.

может создания пользователя mysql было достаточно.

К сожалению, нет. Не заработало. А после того, как я вышел из chroot. Сделал /etc/init.d/debian32 restart, и вошел в chroot, оно говорит, что пользователя mysql уже нет. При этом директория /home/mysql осталась.

/etc/init.d/debian32 делал по вот этому howto. Возможно, я ему монтирую что-то, что мешает ему увидеть своих пользователей?:

calculate ~ # cat /etc/init.d/debian32 
#!/sbin/runscript

depend() {
   need localmount
   need bootmisc
}

start() {
    ebegin "Mounting 32bit chroot dirs"
    mount -o bind /dev /mnt/debian32/dev >/dev/null
    mount -o bind /dev/pts /mnt/debian32/dev/pts >/dev/null &
    mount -o bind /dev/shm /mnt/debian32/dev/shm >/dev/null &
    mount -o bind /proc /mnt/debian32/proc >/dev/null
    mount -o bind /proc/bus/usb /mnt/debian32/proc/bus/usb >/dev/null &
    mount -o bind /sys /mnt/debian32/sys >/dev/null &
    mount -o bind /tmp /mnt/debian32/tmp >/dev/null &
    #mount -o bind /usr/portage /mnt/debian32/usr/portage/ >/dev/null &
    eend $? "An error occured while attempting to mount 32bit chroot directories"
    ebegin "Copying 32bit chroot files"
    cp -pf /etc/resolv.conf /mnt/debian32/etc >/dev/null &
    cp -pf /etc/passwd /mnt/debian32/etc >/dev/null &
    cp -pf /etc/shadow /mnt/debian32/etc >/dev/null &
    cp -pf /etc/group /mnt/debian32/etc >/dev/null &
   #cp -pf /etc/gshadow /mnt/debian32/etc >/dev/null &
    cp -pf /etc/hosts /mnt/debian32/etc > /dev/null &
    cp -Ppf /etc/localtime /mnt/debian32/etc >/dev/null &
    eend $? "An error occured while attempting to copy 32 bits chroot files."
}

stop() {
    ebegin "Unmounting 32bit chroot dirs"
    umount -f /mnt/debian32/dev/pts >/dev/null
    umount -f /mnt/debian32/dev/shm >/dev/null
    umount -f /mnt/debian32/dev >/dev/null &
    umount -f /mnt/debian32/proc/bus/usb >/dev/null
    umount -f /mnt/debian32/proc >/dev/null &
    umount -f /mnt/debian32/sys >/dev/null &
    umount -f /mnt/debian32/tmp >/dev/null &
    #umount -f /mnt/debian32/usr/portage/ >/dev/null &
    eend $? "An error occured while attempting to unmount 32bit chroot directories"
}

Anatolik ★★
() автор топика
Ответ на: комментарий от Anatolik

Думаю, что вам нужно убрать копирование файлов в /mnt/debian32/etc/, оставить только resolv.conf и может, localtime, а потом удалить и поставит заново mysql в chroot.

Может я и путаю, но пользователь mysql создаётся при установке пакета. При этом ему назначается какой-то идентификатор и часть файлов пакета, принадлежащие пользователю mysql получают этот идентификатор пользователя-владельца. То есть на файловой системе файлы принадлежат не пользователю, а идентификатору пользователя. Вы, создав пользователя mysql могли создать его под другим uid'ом и соответсвенно нужные файлы ему не принадлежат.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.