我有一台 FreeBSD 10.1 机器。我想在监狱里安装tomcat8和openjdk8。这个监狱只会用于少数Web应用程序,我不想安装ports集合,也不想安装其中完整的pkg管理工具。对于另一个监狱,我可以使用以下命令从主机安装所有必需的软件包:
pkg -j jail_name install package_name
问题是,当我的一个应用程序需要 jdk8 时,tomcat8 的预编译包依赖于 openjdk7。
我知道这可以通过在监狱中安装端口集合,打开防火墙以允许从监狱到全世界的连接,从端口安装所有内容,然后重新配置所有内容并删除端口集合来完成。但我宁愿不做这一切!
那么,如何在监狱中通过 openjdk8 安装 tomcat8 而不安装 ports 集合并允许从监狱连接到外部世界呢?
答案1
可以通过混合port collection和pkg工具来完成,但是有点棘手。
1 主机部分
首先安装 openjdk8 作为软件包:pkg install openjdk8
然后构建,从 ports 安装 tomcat8 的生成包。由于openjdk8已经安装,它将被ports使用
cd /usr/ports/www/tomcat8
make build
make install
make package # <= Ok the package is in work/pkg
在构建过程中,jakarta-commons-daemon-1.0.15
由于是依赖 openjdk8 构建的:也只需为其构建包:
cd /usr/ports/devel/jakarta-commons-daemon
make package # <= Ok the package is in work/pkg
2 监狱部分
现在包已经构建好了,我们可以将它们与pkg -j jail_name add
.棘手的部分是,即使命令是从主机启动的,路径也是相对于监狱根目录的!
因此,假设可以通过以下方式访问监狱文件系统/usr/jail/jail_name
:
cp /usr/ports/www/tomcat8/ports/pkg/tomcat*.pkg /usr/jails/jail_name/root
cp /usr/ports/devel/jakarta-commons-daemon/ports/pkg/jakarta*.pkg /usr/jails/jail_name/root
根据监狱的配置方式,您可能需要 scp 文件
现在很简单:
pkg -j jail_name add /root/jakarta-commons-daemon-1.0.15.txz
pkg -j jail_name add /root/tomcat8-8.0.18.txz