Ruby 一条命令将 ruby 脚本打包成可执行文件,运行在轻量容器运行时中

weiwenhao · 2023年09月25日 · 最后由 john7865 回复于 2025年08月02日 · 1190 次阅读

当然不止是 ruby,其他的脚本语言比如 python/php 等都可以通过类似的方式进行打包。

仓库地址:https://github.com/weiwenhao/parker 欢迎 watch/start,让该项目有机会出现在 github trending 上得到更多的关注 ~

⚙️ 安装

github releases 中下载并解压 Parker 安装包。推荐将解压后的 parker 文件夹移动到/usr/local/下,并将/usr/local/parker/bin目录加入到系统环境变量。

> parker --version
0.0.1

📦 使用

cd 到工作目录,执行 parker :target 该命令将 :target 连同当前的工作目录一起打包成一个 :target-c 可执行文件,将可执行文件放到目标机器上运行即可。

> cd :workdir && parker :target

示例

上面的可执行文件 + 资源文件打包是标准使用示例,当然也有一些非标准的使用方式,比如以一个 ruby 编写的 server 为例子

> tree .
.
├── ruby  # cp /usr/bin/ruby ./ruby
└── server.rb

0 directories, 2 files

server.rb 内容如下

require 'webrick'

server = WEBrick::HTTPServer.new(Port: 8000)

server.mount_proc '/' do |req, res|
  res.body = 'Hello, World!'
end

trap 'INT' do
  server.shutdown
end

server.start

cd 到工作目录中执行 parker ruby,你将会得到一个 ruby-c 文件,这就是打包好的可执行文件,将其上传到目标机器中执行即可。下面是在目标机器上执行的示例,可以看到此时只有 ruby-c 文件,而没有 server.ruby 啦

> > parker ruby
ruby-c
├── server.ruby
└── ruby
🍻 parker successful

------------------------------------------------------------------------ move ruby-c to target
> tree .
.
└── ruby-c

0 directories, 1 file

------------------------------------------------------------------------ run ruby-c
> ./ruby-c $PWD/hello.rb # 由于 ruby 对 mount namespace 支持不全,所以这里需要使用绝对路径。
[2023-09-25 15:44:43] INFO  WEBrick 1.7.0
[2023-09-25 15:44:43] INFO  ruby 3.0.2 (2021-07-07) [x86_64-linux-gnu]
[2023-09-25 15:44:43] INFO  WEBrick::HTTPServer#start: pid=3231 port=8000

此处 ruby-c 会将参数传递给 ruby 进程。

❗️ parker 不解决 ruby 的动态编译问题。

🚢 运行说明

ruby-c 是 parker 构建的轻量级容器运行时,并且 ruby-c 是一个静态编译的可执行文件。其在执行时通过 linux namespace 创建了一个隔离环境,并解压工作目录运行目标 ruby。

ruby-c 将监听 ruby 主进程的运行,一旦 ruby 进程停止或异常,ruby-c 会通过 cgroup 清理容器环境,并清理 ruby 的所有子进程。

用户像 ruby-c 中传递的所有参数和信号都会原封不动的传递给 ruby 进程。

🐧 环境依赖

容器运行时依赖 cgroup 和 namespace,需要 linux 内核版本大于 2.6.24。并且正确挂载了 cgroup。检查文件 /sys/fs/cgroup/cgroup.controllers/sys/fs/cgroup/freezer 中任意一个目录存在即可。

测试环境:ubuntu:22 / ubuntu:20

🛠️ 源码构建

源代码由编程语言 nature 开发,nature 编译器版本需要 >= 0.4.0。安装完成后在源码目录执行 make amd64 && make install 即可安装到 /usr/local/parker 目录下。

0 楼 已删除

有异常信息么,上面的 example 能不能跑通。

用自己的編程語言寫軟件好酷

It's clear that there is a lot to learn about this. I think you made some good points about features age of war game

Getting Pussy888 on iOS was way easier than I expected. The pussy888 ios download link provided on the official site guided me through every step. I’m using an iPhone 13, and the performance is flawless. The game selection is massive and includes everything from slot games to card tables. It’s stable, smooth, and never lags. I also appreciate the secure login and responsive customer support. For those who want a reliable iOS casino app, Pussy888 iPhone version is a must-have. Highly recommended for iOS users looking to enjoy real-money casino games anywhere, anytime.

需要 登录 后方可回复, 如果你还没有账号请 注册新账号