Freebsd

在 FreeBSD 監獄中掛載 /dev/shm

  • April 18, 2020

我想將 /dev/shm 掛載在 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 /]#

監獄工作完美,我只是不知道如何讓 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

為 mode=1777 的 tmpfs 設備創建尚不存在的掛載點。

您可以通過使用符號連結在監獄中提供更多設備/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

引用自:https://serverfault.com/questions/678693