在 FreeBSD jail 中挂载 /dev/shm

在 FreeBSD jail 中挂载 /dev/shm

我想在 freebsd jail 中挂载 /dev/shm。每次我尝试这样做时,都会收到以下错误:

[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 自动创建目录。

谢谢。

答案1

如果你想在 jail 中使用 tmpfs,最好添加如下行

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

到监狱的 fstab 文件。

答案2

可以为监狱中的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

使用 mode=1777 为 tmpfs 设备创建尚未存在的挂载点。您可以使用符号链接
在 jail 中提供更多设备,例如,提供可用的设备/compat/linux/dev/dev/null

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

/dev/shm我通过运行带有以下脚本的 Linux python 来测试监狱中的可用性:

#!/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

相关内容