Uzix | микроблог

/dev во freebsd chroot

Не нашёл в интернете хорошего решения, поэтому выкладываю тут.

Т.к. во FreeBSD нельзя сделать просто mknod в произвольном месте фс (вернее можно, но результат работать не будет с ошибкой “operation not supported”), то для доступа к устройствам внутри chroot приходится немного шаманить - а именно монтировать devfs с нужными нам устройствами.

Покажу на примере php-fpm. Создаём файл /usr/local/etc/rc.conf.d/php_fpm со следующим содержимым:

mount_devs() {
    for i in $php_fpm_chroots; do
        umount "${i}/dev" 2>/dev/null || true
        devfs_domount "${i}/dev" devfsrules_hide_all
        devfs -m "${i}/dev" rule apply path null unhide
        devfs -m "${i}/dev" rule apply path random unhide
        devfs -m "${i}/dev" rule apply path urandom unhide
    done
}

start_precmd="$start_precmd && mount_devs"

и в rc.conf дописываем:

php_fpm_chroots="/var/www1 /var/www2"

Создаём по нужным путям dev/, делаем рестарт сервиса - и после этого всё должно заработать.

Комментарии