Назад | Перейти на главную страницу

Смонтируйте / dev / shm в тюрьме FreeBSD

Я хотел бы смонтировать / dev / shm в jail freebsd. Каждый раз, когда я пытаюсь это сделать, я получаю следующие ошибки:

[root@gaming /]# mount -t tmpfs tmpfs /dev/shm
mount: /dev/shm: No such file or directory
[root@gaming /]# touch /dev/shm
touch: /dev/shm: Operation not supported
[root@gaming /]#

Jail работает отлично, я просто не могу понять, как заставить devfs автоматически создавать каталог.

Спасибо.

Если вы хотите использовать tmpfs внутри тюрьмы, лучше добавить строку вроде

tmpfs /jails/foo.example.org/tmp tmpfs rw,size=524288000 0 0

в файл fstab тюрьмы.

Есть возможность обеспечить приложения Linux в тюрьме необходимыми /dev/shm.
Установить /usr/ports/emulators/linux_base-c7.
Добавить в /etc/fstab:

tmpfs  /compat/linux/dev/shm    tmpfs    rw,mode=1777    0 0
tmpfs  /tmp                     tmpfs    rw,mode=1777    0 0

Добавить в /etc/devfs.conf:

link /tmp shm

В /etc/jail.conf для тюрьмы my_jail Добавить:

devfs_ruleset = 4;
mount.devfs;
mount.fstab = /etc/fstab.my_jail;
allow.mount;
allow.mount.devfs;

Добавить в /etc/fstab.my_jail:

tmpfs  /opt/jails/my_jail/tmp                     tmpfs   rw,late,mode=1777 0 0
tmpfs  /opt/jails/my_jail/compat/linux/dev/shm    tmpfs   rw,mode=1777      0 0
devfs  /opt/jails/my_jail/dev                     devfs   rw,late           0 0

Создайте еще не существующие точки монтирования для устройств tmpfs с mode = 1777.
Вы можете предоставить другие устройства в тюрьмах /compat/linux/dev используя символические ссылки, например для обеспечения рабочего /dev/null использование устройства

sudo ln -s / dev / null / opt / jails / my_jail / compat / linux / dev / null

Я проверил удобство использования /dev/shm в тюрьме, запустив питон Linux со следующим скриптом:

#!/usr/bin/env python
import multiprocessing

lock = multiprocessing.Lock()
print("lock: %s" % lock)
q = multiprocessing.Queue()
print ("q: %s" % q)

Если /dev/shm доступен в тюрьме, тогда он возвращает что-то вроде

lock: <Lock(owner=None)>
q: <multiprocessing.queues.Queue object at 0x80088ef90>

Если /dev/shm недоступен, затем возвращается

Traceback (most recent call last):
  File "sem-test.py", line 4, in <module>
    lock = multiprocessing.Lock()
  File "/usr/lib/python2.7/multiprocessing/__init__.py", line 176, in Lock
    return Lock()
  File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 147, in __init__
    SemLock.__init__(self, SEMAPHORE, 1, 1)
  File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 75, in __init__
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 38] Function not implemented