Я хотел бы смонтировать / 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