linux - 请推荐一种在局域网环境下部署到Linux box的方法

标签 linux oracle deployment dependencies

您以前是否为 Linux 部署而苦恼?

我需要将应用程序部署到没有外部网络访问权限的专用 Linux 机器中。 配置应尽可能简单,对不同的配置(缺少库和构建工具)具有鲁棒性,最好是自动的。我需要考虑的另一个困难是我需要连接到 Oracle 数据库。

作为最佳部署方式,您会推荐什么?我有一些想法,但不确定哪个是最好的。

  • 我会使用 Java
    • 我需要安装 JDK,这几乎可以解决所有问题
    • 另一个大问题是我们目前使用 Java 编写的代码写得不好而且速度很慢。
    • 我不确定是否需要安装 Instantclient 才能在 linux 下连接到 Oracle
  • 我可以使用 C(我有一个写得很好的 LGPL 程序的源代码)
    1. 并使用dpkg部署
      • Linux 机器很可能是 Ubuntu 服务器,但我不确定安装的是哪个版本
      • 我不会使用apt-get,但我可以复制我需要的所有包
      • 我知道我可以使用 dpkg -s 来检查它们是哪些包,但我真的不确定我是否会遗漏依赖项。
      • 我想我需要 build-essentials 和 pcap 之类的东西
    2. 并使用静态链接
      • 我用 ./configure LDFLAGS=-static 配置它,没有错误,现在它可以在我的电脑上运行
      • 我已将 chroot 放入此目录并运行它没有问题,这是否意味着没问题?
      • 我真的需要在新的 Linux 机器上测试一下以确保
    3. 并使用 Statifier
      • 我浏览了 stackoverflow 并找到了这个应用程序,还没有试用过。
      • 似乎人们使用它取得了不同程度的成功。
    4. 并创建构建环境并制作
      • 我不相信这会奏效
  • 使用 C 会留下一些问题
    • 但是程序不完整,我必须处理这些数据,最好不要用C。
    • 我必须安装 Instantclient,它很难部署
  • 我会使用 Perl
    • 我不会使用 CPAN
    • 我已经下载了这些库,所以也许我可以将它们复制到已部署的机器中,我不确定这是否有效
    • Perl 很慢
    • 无论如何我都必须安装 Instantclient

请分享您的类似经历。

最佳答案

具有静态链接的 C 以更大的可执行文件为代价解决了很多可移植性问题。为确保所有内容真正获得静态链接而不是 secret 依赖任何外部库,请在您的可执行文件上运行 ldd 并确保它不会动态加载所有内容。请注意,这不会在各种 Linux 机器之间 100% 可移植,因为 Oracle instantclient 对内核版本有一些依赖性,但它应该可以在任何合理的新内核上运行。

编辑:如果盒子有 LAN 访问权限但没有 Internet 访问权限,为什么不在本地网络上运行您自己的 apt 存储库。你甚至可以为你的应用程序创建一个 .deb 并将它放在同一台服务器上,而不是在那台机器上你只需要执行 apt-get myApplication 它会拉下你的应用程序和任何未安装的依赖项。设置 apt 镜像实际上非常简单,而且非常巧妙。如果网络访问全部丢失,您仍然可以创建一个安装 dvd,其中包含包括您的应用程序在内的所有 deb,并设置 apt-get 从那里提取。

关于linux - 请推荐一种在局域网环境下部署到Linux box的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189521/

相关文章:

linux nasm程序集隔离字符串中的字符

oracle - 来自 Oracle 的日期之间的数据

在 where 子句中使用 sum() 进行 Oracle 查询

Android 应用显示的版本低于 list

javascript - Angular 应用程序必须在新部署后清除缓存

deployment - 跨环境管理配置文件

linux - 在 awk 中打印出所有剩余的变量

linux - 服务器不接受端口 9999 上的请求

c - Linux 中的 signal 和 rt_signal 系统调用有什么区别?

database - 当过程 #2 失败并引发错误时,如何阻止过程 #1 显示成功消息?