我遇到了一个奇怪的问题,服务器已经部署完毕,但不再连接到网络。就其最初的用途而言,它不需要任何 C/C++ 编译工具,因此从未安装过这些工具。
我已经检查过了/usr/sfw/bin
,但它们确实从那里消失了。
我对 Solaris 环境不是很熟悉,但似乎找不到适用于 Solaris 11 的 GCC 作为“可安装包”(例如类似于 debian 的 dpkg)。不过似乎有适用于较旧 Solaris 环境的东西。有没有办法在不使用互联网连接和包管理器的情况下对这些工具进行后期安装?例如,是否有 DVD 映像可以用作包管理器的源?
我想运行一个用 C++ 编写的程序,但由于我运行的是 64 位 x86 Linux 机器,所以我无法在我的计算机上编译该代码。
我可以访问较旧的 Solaris 8 机器,该机器设置正常,我用它来创建静态二进制文件 (已使用gcc 3.8
)。程序可以运行,但字符串格式存在一些奇怪的行为,并且无法按预期执行 - 此行为在 Solaris 8 主机上不会出现。
我可以从机器上复制库,例如创建交叉编译环境,但我不确定这是否容易。从动态链接文件中,我看到例如我链接到 libstdc++,但目标机器上缺少它。
所以我想知道我是否可以创建适当的交叉编译环境?
答案1
/usr/sfw/bin
是gcc
与 Solaris 10 捆绑的路径。在 Solaris 11.1 上,gcc
安装后,可直接/usr/bin
作为指向 的符号链接使用/usr/gcc/<version>/bin/gcc
。
现在有 ips 包(文件)的磁盘数据格式,.p5p
但我建议下载整个存储库(查找Oracle Solaris 11.1 信息库映像在 Solaris 11.1 下载页面中)并创建自己的 IPS 服务。请参阅此博客了解详情。这样可以安装任何gcc
依赖的软件包,以及可能仍缺少的其他软件包。
答案2
在我看来你可以访问Solaris 11 软件包存储库在 Web 上也是如此,您可以在那里下载软件包。编辑:我承认错误(感谢@alanc),您只能下载那里的包的“标题”,所以唯一的选择是通过其他方式获取包。
我假设有一种方法可以指示 Solaris 软件包管理器使用一些命令行参数安装单个文件。这种方法的问题在于,无需反复下载、尝试安装并再次搜索下一个文件,即可找出可能仍缺少的所有依赖项。
我还假设有 DVD 映像包含所有必需软件包的原始发行版本,并且我希望 gcc 是其中的一部分。
答案3
请注意,如果您在本地区域内(是吗?),那么您实际上不需要访问 Internet 即可使用这些pkg
命令,或者更准确地说,该区域不需要它。原因是 IPS(在区域内使用时)会自动使用全局区域的 IPS 作为代理存储库服务器。但当然,如果全局区域也无法访问 Internet,那么您需要遵循 jlliagre 的回答。
你可以看看这个发帖关于在 Solaris 11 上实际安装的内容。只需几个pkg
命令,您就完成了!
答案4
我遇到了类似的问题,并使用了另一个连接到互联网和支持存储库的系统。步骤的简要概述如下。但是,请注意,您可能会遇到依赖性和版本控制问题,因此建议/首选的方法是构建一个完整的本地存储库服务器——特别是如果您的系统预计与支持存储库保持断开连接。
// 获取 iperf pkg 并保存为 /tmp/iperf.p5p
pkgrecv -s https://pkg.oracle.com/solaris/support/ -d /tmp/iperf.p5p -a -r pkg://benchmark/iperf
// 使用以下命令检查包的内容:
pkgrepo -s /tmp/iperf.p5p list
// 或者你可以使用:
pkg list -f -g /tmp/iperf.p5p
// 我必须禁用 solaris 发布者才能安装
pkg set-publisher --disable solaris
// 将 p5p 文件通过 Sneaker-net 传输到断开连接的系统
// 安装软件包:
pkg install -g file:///tmp/iperf.p5p benchmark/iperf