2023-08-03 16:16:40 +03:00
|
|
|
|
---
|
|
|
|
|
title: Как собрать бинарник ruby и не сойти с ума
|
|
|
|
|
description: ruby-packer
|
|
|
|
|
date: 2023-08-03T19:00:00+06:00
|
|
|
|
|
tags: [linux, ruby, gcc]
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Вступление
|
|
|
|
|
|
|
|
|
|
Лучше всего использовать ту же версию bundler и ruby, что использует rubyc.
|
|
|
|
|
Необходимо прописать все зависимости явно в *.gemspec.
|
|
|
|
|
Если сборка завершается с ошибкой не найденой версией GLIBC/XCRYPT, то необходимо понизить версию rubyc/поднять версию ОС.
|
|
|
|
|
Если же завершается успешно, но при запуске вываливается ошибка, связанная с каким-нибудь gem'ом - надо попробовать понизить/повысить его версию.
|
|
|
|
|
У меня получилось собрать бинарник только используя Debian SID и форк Rubyc (3.1.3).
|
2023-08-03 16:24:23 +03:00
|
|
|
|
[Пример утилиты, которая успешно собралась](https://github.com/fruworg/pg-ldap-sync).
|
2023-08-03 16:16:40 +03:00
|
|
|
|
|
|
|
|
|
## Установка пакетов для сборки (и не только)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-09-25 14:10:32 +03:00
|
|
|
|
apt -y install wget unzip gcc make autoconf squashfs-tools libtool bison gnupg
|
2023-08-03 16:16:40 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка ruby (из пакета)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
apt -y install ruby ruby-dev
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка ruby (из исходников)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
wget -P /tmp https://cache.ruby-lang.org/pub/ruby/<ver.sion>/ruby-<ve.rsi.on>.tar.gz
|
|
|
|
|
tar -C /tmp -xvf /tmp/ruby-*.tar.gz
|
|
|
|
|
cd /tmp/ruby-*/
|
|
|
|
|
./configure
|
|
|
|
|
make
|
|
|
|
|
make install
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка rubyc (форк, 3.1.3, рекомендую)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
wget -P /tmp https://github.com/ericbeland/ruby-packer/releases/download/3_1_3/linux-amd64.zip
|
|
|
|
|
unzip /tmp/linux-amd64.zip -d /tmp
|
|
|
|
|
mv /tmp/linux-amd64/rubyc /usr/local/bin
|
|
|
|
|
chmod +x /usr/local/bin/rubyc
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка rubyc (unstable, 2.7, не рекомендую)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
wget -P /usr/local/bin https://github.com/pmq20/ruby-packer/releases/download/linux-x64/rubyc
|
|
|
|
|
chmod +x /usr/local/bin/rubyc
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка rubyc (stable, 2.4, не рекомендую)
|
|
|
|
|
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-09-25 14:10:32 +03:00
|
|
|
|
wget -P /tmp https://gw.alipayobjects.com/os/enclose-prod/1fd23e6b-d48f-4ed0-94dd-f0f539960253/rubyc-v0.4.0-linux-x64.gz
|
2023-08-03 16:16:40 +03:00
|
|
|
|
gzip -d /tmp/rubyc-v0.4.0-linux-x64.gz
|
|
|
|
|
mv /tmp/rubyc-v0.4.0-linux-x64 /usr/local/bin/rubyc
|
|
|
|
|
chmod +x /usr/local/bin/rubyc
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Правка запускаемого файла собираемой утилиты
|
|
|
|
|
|
2023-09-30 14:18:44 +03:00
|
|
|
|
В запускаемый файл `exe/<ruby-util>` (обычно лежит в exe или bin) необходимо добавить в самое начало следующие строки:
|
|
|
|
|
```sh
|
2023-08-03 16:16:40 +03:00
|
|
|
|
#!/usr/bin/env ruby
|
|
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
|
require 'bundler/setup'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Подготовка к сборке
|
|
|
|
|
|
|
|
|
|
Необходимо собрать gem с помощью Bundle.
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
gem install bundler
|
|
|
|
|
bundle install
|
|
|
|
|
bundle exec rake install
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Сборка бинарника
|
|
|
|
|
|
2023-09-25 22:06:42 +03:00
|
|
|
|
Собираем бинарник. Обязательно при этом необходимо молиться.
|
2023-09-24 18:58:33 +03:00
|
|
|
|
```shell
|
2023-08-03 16:16:40 +03:00
|
|
|
|
cd <ruby-util-dir>
|
|
|
|
|
rubyc -r . -d /tmp/ -o <ruby-util> exe/<ruby-util>
|
2023-08-08 20:41:30 +03:00
|
|
|
|
```
|