FreeBSD:在监狱中挂载/usr/ports

时间:2020-01-09 10:38:37  来源:igfitidea点击:

问题描述:我想为FreeBSD 7 ISP服务器节省磁盘空间。
我们在功能强大的HP RAID 10服务器下从各种监狱中运行网络服务器,名称服务器。
我如何将/usr/ports从主机导出到/jail /卷上托管的每个监狱,例如/jail/www,/jail/ns,/jail/sql等?

解决方法:您需要使用mount_nullfs命令。
它创建一个空层,在全局文件系统名称空间的另一部分下复制文件系统名称空间的子树。
这允许使用不同的路径名访问现有文件和目录。
您需要在监狱外运行此命令。

选项#1:以读写模式挂载端口

以root用户身份登录并执行以下命令:

# D=/jail/www
# mkdir -p $D/usr/ports
# mount_nullfs /usr/ports $D/usr/ports
# mount | sort

现在登录到名为www(jail id 10)的监狱:

# jls
# jexec 10 sh

尝试安装apache22:

# cd /usr/ports
# cd www/apache22
# make install clean

选项2:以只读模式挂载端口

如读者梅尔的建议,您可以在只读模式下挂载端口树。
从长远来看,这可能会导致端口树完整性。

D=/jail/www
mkdir -p $D/usr/ports
mount_nullfs -o ro /usr/ports $D/usr/ports

以读写模式挂载/var/distfiles:

# mkdir $D/var/distfiles
# mount_nullfs -o rw /usr/ports/distfiles $D/var/distfiles

现在安装名为php5的端口:

# cd /usr/ports/lang/php5
# make install clean WRKDIRPREFIX=/tmp

您需要将WRKDIRPREFIX设置为以只读模式安装的端口。

WRKDIRPREFIX指定在何处创建任何临时文件。
您需要按以下方式设置WRKDIRPREFIX和变量,以使其在/etc/make.conf文件中成为永久设置:

WRKDIRPREFIX=           /var/ports
DISTDIR=                /var/ports/distfiles
PACKAGES=               /var/ports/packages

其中:

  • WRKDIRPREFIX:其中创建任何临时文件。
  • DISTDIR:其中查找/放置distfile。
  • 包:仅用于包目标;软件包树的基本目录,通常是PORTSDIR中的packages /。

您可以使用以下make命令创建这些目录:

# mkdir -p /var/ports/{packages,distfiles}