tebako 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CMakeLists.txt +694 -0
- data/Gemfile +35 -0
- data/README.adoc +389 -0
- data/Rakefile +33 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/cmake/copy_dir.cmake +29 -0
- data/cmake/def_tty_colours.cmake +19 -0
- data/common.env +6 -0
- data/exe/tebako +31 -0
- data/include/tebako/tebako-fs.h +40 -0
- data/include/tebako/tebako-main.h +40 -0
- data/lib/cli.rb +28 -0
- data/lib/tebako/cli.rb +137 -0
- data/lib/tebako/cli_helpers.rb +147 -0
- data/lib/tebako/error.rb +39 -0
- data/lib/tebako/packager/pass1.rb +155 -0
- data/lib/tebako/packager/pass2.rb +374 -0
- data/lib/tebako/packager.rb +210 -0
- data/lib/tebako/version.rb +30 -0
- data/resources/tebako-fs.cpp.in +37 -0
- data/resources/tebako-version.h.in +37 -0
- data/src/tebako-main.cpp +188 -0
- data/tebako.gemspec +63 -0
- data/tests/scripts/cross-tests.sh +34 -0
- data/tests/scripts/functional-tests.sh +335 -0
- data/tests/test-00/test.rb +4 -0
- data/tests/test-01/tebako-test-run.rb +5 -0
- data/tests/test-09/tebako-test-0.0.1.gem +0 -0
- data/tests/test-11/bin/tebako-test-run.rb +10 -0
- data/tests/test-11/lib/tebako-test.rb +20 -0
- data/tests/test-11/tebako-test.gemspec +15 -0
- data/tests/test-12/tebako-test-a.gemspec +15 -0
- data/tests/test-12/tebako-test-b.gemspec +15 -0
- data/tests/test-13/bin/tebako-test-run.rb +10 -0
- data/tests/test-13/lib/tebako-test.rb +20 -0
- data/tests/test-13/tebako-test.gemspec +15 -0
- data/tests/test-15/Gemfile +8 -0
- data/tests/test-15/Rakefile +4 -0
- data/tests/test-15/bin/tebako-test-run.rb +10 -0
- data/tests/test-15/lib/tebako/bundle/test/version.rb +9 -0
- data/tests/test-15/lib/tebako/bundle/test.rb +29 -0
- data/tests/test-15/tebako-bundle-test.gemspec +30 -0
- data/tests/test-16/Gemfile +8 -0
- data/tests/test-16/Rakefile +4 -0
- data/tests/test-16/bin/tebako-test-run.rb +10 -0
- data/tests/test-16/lib/tebako/bundle/test/version.rb +9 -0
- data/tests/test-16/lib/tebako/bundle/test.rb +29 -0
- data/tests/test-16/tebako-bundle-test.gemspec +24 -0
- data/tests/test-18/Gemfile +5 -0
- data/tests/test-18/tebako-test-run.rb +12 -0
- data/tests/test-19/Gemfile +6 -0
- data/tests/test-19/tebako-test-run.rb +11 -0
- data/tests-2/fixtures/gems-bundler/Gemfile +4 -0
- data/tests-2/fixtures/gems-bundler/gems-bundler.rb +34 -0
- data/tests-2/fixtures/gems-byebug/Gemfile +5 -0
- data/tests-2/fixtures/gems-byebug/gems-byebug.rb +31 -0
- data/tests-2/fixtures/gems-expressir/Gemfile +7 -0
- data/tests-2/fixtures/gems-expressir/gems-expressir.rb +33 -0
- data/tests-2/fixtures/gems-libmspack/Gemfile +5 -0
- data/tests-2/fixtures/gems-libmspack/gems-libmspack.rb +91 -0
- data/tests-2/fixtures/gems-sassc/Gemfile +6 -0
- data/tests-2/fixtures/gems-sassc/base_style/all.scss +1 -0
- data/tests-2/fixtures/gems-sassc/base_style/reset.scss +100 -0
- data/tests-2/fixtures/gems-sassc/gems-sassc.rb +129 -0
- data/tests-2/fixtures/gems-seven-zip/Gemfile +7 -0
- data/tests-2/fixtures/gems-seven-zip/gems-seven-zip.rb +53 -0
- data/tests-2/fixtures/launcher-coreincl/launcher-coreincl.rb +29 -0
- data/tests-2/fixtures/launcher-package/launcher-package.rb +29 -0
- data/tests-2/fixtures/launcher-pwd/launcher-pwd.rb +28 -0
- data/tests-2/fixtures/launcher-stdinredir/input.txt +1 -0
- data/tests-2/fixtures/launcher-stdinredir/launcher-stdinredir.rb +31 -0
- data/tests-2/fixtures/launcher-stdoutredir/launcher-stdoutredir.rb +28 -0
- data/tests-2/fixtures/patches-dir/level-1/level-2/file-1.txt +1 -0
- data/tests-2/fixtures/patches-dir/level-1/level-2/file-2.txt +1 -0
- data/tests-2/fixtures/patches-dir/level-1/level-2/file-3.txt +1 -0
- data/tests-2/fixtures/patches-dir/patches-dir.rb +154 -0
- data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-1.txt +1 -0
- data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-2.txt +2 -0
- data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-3.txt +1 -0
- data/tests-2/fixtures/patches-io-and-file/level-1/link-3 +1 -0
- data/tests-2/fixtures/patches-io-and-file/patches-io-and-file.rb +87 -0
- data/tests-2/fixtures/patches-main/patches-main.rb +6 -0
- data/tests-2/tebako-test.rb +312 -0
- metadata +170 -0
data/Gemfile
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
# This file is a part of tebako
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions
|
|
9
|
+
# are met:
|
|
10
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
# notice, this list of conditions and the following disclaimer.
|
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
source "https://rubygems.org"
|
|
29
|
+
|
|
30
|
+
# Specify your gem's dependencies in tebako.gemspec
|
|
31
|
+
gemspec
|
|
32
|
+
gem "hoe"
|
|
33
|
+
gem "minitest"
|
|
34
|
+
gem "rubocop", "~> 1.52"
|
|
35
|
+
gem "rubocop-rubycw"
|
data/README.adoc
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
= Tebako: an image packager
|
|
2
|
+
|
|
3
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/ubuntu.yml/badge.svg["Ubuntu amd64", link="https://github.com/tamatebako/tebako/actions/workflows/ubuntu.yml"]
|
|
4
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/alpine.yml/badge.svg["Alpine", link="https://github.com/tamatebako/tebako/actions/workflows/alpine.yml"]
|
|
5
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/macos.yml/badge.svg["MacOS amd64", link="https://github.com/tamatebako/tebako/actions/workflows/macos.yml"]
|
|
6
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/lint.yml/badge.svg["lint", link="https://github.com/tamatebako/tebako/actions/workflows/lint.yml"]
|
|
7
|
+
|
|
8
|
+
image:https://api.cirrus-ci.com/github/tamatebako/tebako.svg?branch=main&task=ubuntu-aarch64["Ubuntu aarch64", link="https://cirrus-ci.com/github/tamatebako/tebako"]
|
|
9
|
+
image:https://api.cirrus-ci.com/github/tamatebako/tebako.svg?branch=main&task=macos-arm64["MacOS arm64", link="https://cirrus-ci.com/github/tamatebako/tebako"]
|
|
10
|
+
|
|
11
|
+
== Purpose
|
|
12
|
+
|
|
13
|
+
Tebako is an executable packager. It packages a set of files into a DwarFS file
|
|
14
|
+
system for read-only purposes.
|
|
15
|
+
|
|
16
|
+
After packaging the file system into an image, Tebako produces a single
|
|
17
|
+
executable binary that allows the user to execute a selected file from the
|
|
18
|
+
packaged software from a point in the file system.
|
|
19
|
+
|
|
20
|
+
The packaged binary should support:
|
|
21
|
+
|
|
22
|
+
* Packaging a default DwarFS image inside the binary
|
|
23
|
+
* Support signing of the binary on macOS (via notarization)
|
|
24
|
+
|
|
25
|
+
In the future:
|
|
26
|
+
|
|
27
|
+
* Downloading new DwarFS images to be stored in the local home directory
|
|
28
|
+
* Allowing loading multiple DwarFS images in a stacked way
|
|
29
|
+
* Supporting a COW mechanism that the newly written files are stored
|
|
30
|
+
in a separate image that can be loaded on top of the read-only file systems.
|
|
31
|
+
|
|
32
|
+
== Supported platforms
|
|
33
|
+
|
|
34
|
+
The Tebako packager is tested on the following platforms:
|
|
35
|
+
|
|
36
|
+
* Linux: Ubuntu 20.04; Alpine 3.16
|
|
37
|
+
* macOS: macOS 11.0 (Monterey)
|
|
38
|
+
* Windows: TBD
|
|
39
|
+
|
|
40
|
+
== Supported Ruby versions
|
|
41
|
+
|
|
42
|
+
The Tebako packager supports the following versions of Ruby for packaging:
|
|
43
|
+
* 2.7.7
|
|
44
|
+
* 3.0.6
|
|
45
|
+
* 3.1.4
|
|
46
|
+
|
|
47
|
+
Support of specific version including minor release requires some effort, sometimes extensive
|
|
48
|
+
but our goal is to be able to package all maintained Ruby releases.
|
|
49
|
+
|
|
50
|
+
== Prerequisites
|
|
51
|
+
|
|
52
|
+
=== Ubuntu
|
|
53
|
+
|
|
54
|
+
==== GNU C/C++ 9+ or Clang C/C++ 11+
|
|
55
|
+
|
|
56
|
+
==== CMake version 3.20+
|
|
57
|
+
|
|
58
|
+
Tebako relies on CMake 3.20+, which may not be available as a default package.
|
|
59
|
+
|
|
60
|
+
If it is not available as default package it can be set up as follows:
|
|
61
|
+
|
|
62
|
+
[source,sh]
|
|
63
|
+
----
|
|
64
|
+
apt-get remove --purge --auto-remove cmake
|
|
65
|
+
apt-get update
|
|
66
|
+
apt-get install -y software-properties-common lsb-release curl
|
|
67
|
+
apt-get clean all
|
|
68
|
+
curl https://apt.kitware.com/kitware-archive.sh | bash
|
|
69
|
+
apt-get install cmake
|
|
70
|
+
----
|
|
71
|
+
|
|
72
|
+
==== Other development tools and libraries
|
|
73
|
+
|
|
74
|
+
[source,sh]
|
|
75
|
+
----
|
|
76
|
+
apt-get install -y curl git ruby ruby-dev pkg-config bison flex make autoconf
|
|
77
|
+
apt-get install -y binutils-dev libarchive-dev libevent-dev libjemalloc-dev acl-dev \
|
|
78
|
+
libdouble-conversion-dev libiberty-dev liblz4-dev liblzma-dev libssl-dev \
|
|
79
|
+
libboost-context-dev libboost-filesystem-dev libboost-program-options-dev \
|
|
80
|
+
libboost-regex-dev libboost-system-dev libboost-thread-dev \
|
|
81
|
+
libunwind-dev libdwarf-dev libelf-dev libfuse-dev libgoogle-glog-dev \
|
|
82
|
+
libffi-dev libgdbm-dev libyaml-dev libncurses-dev libreadline-dev \
|
|
83
|
+
libfmt-dev
|
|
84
|
+
----
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
== Installation
|
|
88
|
+
|
|
89
|
+
=== General
|
|
90
|
+
|
|
91
|
+
Just clone this repository, install Ruby bundle and run `tebako setup` as follows.
|
|
92
|
+
|
|
93
|
+
[source,sh]
|
|
94
|
+
----
|
|
95
|
+
git clone https://github.com/tamatebako/tebako
|
|
96
|
+
bundle install
|
|
97
|
+
tebako/exe/tebako setup
|
|
98
|
+
----
|
|
99
|
+
|
|
100
|
+
=== Quick setup on Ubuntu 20.04 on Docker
|
|
101
|
+
|
|
102
|
+
Launch a container on the target platform:
|
|
103
|
+
|
|
104
|
+
[source,sh]
|
|
105
|
+
----
|
|
106
|
+
# For x86_64
|
|
107
|
+
docker run -it --platform linux/x86_64 ubuntu bash
|
|
108
|
+
|
|
109
|
+
# For Apple M1
|
|
110
|
+
docker run -it --platform linux/aarch64 ubuntu bash
|
|
111
|
+
----
|
|
112
|
+
|
|
113
|
+
In the container:
|
|
114
|
+
|
|
115
|
+
[source,sh]
|
|
116
|
+
----
|
|
117
|
+
export DEBIAN_FRONTEND=noninteractive
|
|
118
|
+
export TZ=Etc/UTC
|
|
119
|
+
|
|
120
|
+
apt-get update
|
|
121
|
+
apt-get install -y software-properties-common
|
|
122
|
+
add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
|
123
|
+
apt-get install -y gcc-9 g++-9
|
|
124
|
+
|
|
125
|
+
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
|
|
126
|
+
update-alternatives --set gcc /usr/bin/gcc-9
|
|
127
|
+
|
|
128
|
+
apt-get install -y curl git ruby ruby-dev pkg-config bison flex make autoconf
|
|
129
|
+
curl https://apt.kitware.com/kitware-archive.sh | bash
|
|
130
|
+
apt-get install -y cmake
|
|
131
|
+
|
|
132
|
+
apt-get install -y binutils-dev libarchive-dev libevent-dev libjemalloc-dev acl-dev \
|
|
133
|
+
libdouble-conversion-dev libiberty-dev liblz4-dev liblzma-dev libssl-dev \
|
|
134
|
+
libboost-context-dev libboost-filesystem-dev libboost-program-options-dev \
|
|
135
|
+
libboost-regex-dev libboost-system-dev libboost-thread-dev \
|
|
136
|
+
libunwind-dev libdwarf-dev libelf-dev libfuse-dev libgoogle-glog-dev \
|
|
137
|
+
libffi-dev libgdbm-dev libyaml-dev libncurses-dev libreadline-dev \
|
|
138
|
+
libsqlite3-dev
|
|
139
|
+
|
|
140
|
+
apt-get install -y libfmt-dev
|
|
141
|
+
|
|
142
|
+
git clone https://github.com/tamatebako/tebako
|
|
143
|
+
bundle install
|
|
144
|
+
tebako/exe/tebako setup
|
|
145
|
+
----
|
|
146
|
+
|
|
147
|
+
== Usage
|
|
148
|
+
|
|
149
|
+
=== Commands
|
|
150
|
+
|
|
151
|
+
==== Installation
|
|
152
|
+
|
|
153
|
+
[source,sh]
|
|
154
|
+
----
|
|
155
|
+
gem install tebako
|
|
156
|
+
----
|
|
157
|
+
|
|
158
|
+
==== Press
|
|
159
|
+
|
|
160
|
+
This command "presses" a Ruby project using the Tebako setup from the Tebako root
|
|
161
|
+
folder (`<tebako-root-folder>`).
|
|
162
|
+
Please note that upon the first invocation of press command tebako collects required packages,
|
|
163
|
+
builds the and creates packaging environment. This is a lengthly task that can take significant
|
|
164
|
+
time, up to 1 hour.
|
|
165
|
+
Upon the next invocation tebako will use previously created packaging environment. The press process
|
|
166
|
+
itself takes minutes.
|
|
167
|
+
You can manage setup of packaging environment manually; please refer to description of setup and clean
|
|
168
|
+
cmmands below.
|
|
169
|
+
|
|
170
|
+
[source,sh]
|
|
171
|
+
----
|
|
172
|
+
<install-folder>/exe/tebako press \
|
|
173
|
+
[-p |--prefix=<tebako-root-folder>] \
|
|
174
|
+
[-R | --Ruby=<2.7.7|3.0.6|3.1.4>] \
|
|
175
|
+
-r|--root=<project-root-folder> \
|
|
176
|
+
-e|--entry-point=<entry-point> \
|
|
177
|
+
[-o |--output=<packaged file name>] \
|
|
178
|
+
[-l|--log-level=<error|warn|debug|trace>]
|
|
179
|
+
----
|
|
180
|
+
|
|
181
|
+
Where:
|
|
182
|
+
|
|
183
|
+
* `<tebako-root-folder>`, the Tebako setup folder (optional, defaults to current
|
|
184
|
+
folder)
|
|
185
|
+
|
|
186
|
+
* `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.0.6)
|
|
187
|
+
|
|
188
|
+
* `<project-root>`, a folder at the host source file system where project files
|
|
189
|
+
are located
|
|
190
|
+
|
|
191
|
+
* `<entry-point>`, an executable file (binary executable or script) that shall
|
|
192
|
+
be started when packaged file is called
|
|
193
|
+
|
|
194
|
+
* `output`, the output file name (optional, defaults to `<current folder>/<entry
|
|
195
|
+
point base name`)
|
|
196
|
+
|
|
197
|
+
* `log-level`, the logging level for tebako built-in memory filesystem driver (optional, defaults to `error`)
|
|
198
|
+
|
|
199
|
+
[example]
|
|
200
|
+
====
|
|
201
|
+
[source,sh]
|
|
202
|
+
----
|
|
203
|
+
exe/tebako press \
|
|
204
|
+
--root='~/projects/myproject' \
|
|
205
|
+
--entry=start.rb \
|
|
206
|
+
--output=/temp/myproject.tebako
|
|
207
|
+
----
|
|
208
|
+
====
|
|
209
|
+
|
|
210
|
+
==== Setup
|
|
211
|
+
|
|
212
|
+
Collects required packages, builds the and creates packaging environment. This is a lengthly
|
|
213
|
+
task that can take significant time, up to 1 hour.
|
|
214
|
+
Tebako supports several configurations at a single system given that their root
|
|
215
|
+
directories differ and nultiple Ruby versions within single configuration
|
|
216
|
+
|
|
217
|
+
This command is optional, tebako creates packaging environment automatically upon the first
|
|
218
|
+
invocation of press command.
|
|
219
|
+
|
|
220
|
+
[source,sh]
|
|
221
|
+
----
|
|
222
|
+
<install-folder>/exe/tebako setup \
|
|
223
|
+
[-p |--prefix=<tebako-root-folder>] \
|
|
224
|
+
[-R | --Ruby=<2.7.7|3.0.6|3.1.4>]
|
|
225
|
+
----
|
|
226
|
+
|
|
227
|
+
Where:
|
|
228
|
+
|
|
229
|
+
* `<tebako-root-folder>`, the Tebako setup folder (optional, defaults to current
|
|
230
|
+
folder)
|
|
231
|
+
|
|
232
|
+
* `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.0.6)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
==== Clean
|
|
237
|
+
|
|
238
|
+
This command deletes tebako artifacts created by setup and press commands.
|
|
239
|
+
Normally you do not need to do it since tebako packager optimizes artifacts lifecycle on its own.
|
|
240
|
+
|
|
241
|
+
[source,sh]
|
|
242
|
+
----
|
|
243
|
+
exe/tebako press \
|
|
244
|
+
[-p |--prefix=<tebako-root-folder>]
|
|
245
|
+
----
|
|
246
|
+
|
|
247
|
+
Where:
|
|
248
|
+
|
|
249
|
+
* `<tebako-root-folder>`, the Tebako setup folder (optional, defaults to current
|
|
250
|
+
folder)
|
|
251
|
+
|
|
252
|
+
[example]
|
|
253
|
+
====
|
|
254
|
+
[source,sh]
|
|
255
|
+
----
|
|
256
|
+
exe/tebako clean --root='~/projects/myproject'
|
|
257
|
+
----
|
|
258
|
+
====
|
|
259
|
+
|
|
260
|
+
=== Exit codes
|
|
261
|
+
|
|
262
|
+
[cols,"a,a"]
|
|
263
|
+
|===
|
|
264
|
+
| Code | Condition
|
|
265
|
+
|
|
266
|
+
| 0 | No error
|
|
267
|
+
| 1 | Invalid command line
|
|
268
|
+
| 101 | `tebako setup` failed at configuration step
|
|
269
|
+
| 102 | `tebako setup` failed at build step
|
|
270
|
+
| 103 | `tebako press` failed at configuration step
|
|
271
|
+
| 104 | `tebako press` failed at build step
|
|
272
|
+
| 253 | Unsupported Ruby version
|
|
273
|
+
| 254 | Unsupported operating systems
|
|
274
|
+
| 255 | Internal error
|
|
275
|
+
|
|
276
|
+
|===
|
|
277
|
+
|
|
278
|
+
== Image extraction
|
|
279
|
+
|
|
280
|
+
Tebako provides an option to an extract filesystem from a package to local
|
|
281
|
+
folder for verification or execution.
|
|
282
|
+
|
|
283
|
+
[source,sh]
|
|
284
|
+
----
|
|
285
|
+
<tebako-packaged-executable> --tebako-extract [<root folder for extracted filesystem>]
|
|
286
|
+
----
|
|
287
|
+
|
|
288
|
+
Where,
|
|
289
|
+
|
|
290
|
+
* `<root folder for extracted filesystem>` is optional and defaults to
|
|
291
|
+
`source_filesystem`
|
|
292
|
+
|
|
293
|
+
[example]
|
|
294
|
+
====
|
|
295
|
+
Extracting Tebako content from the `metanorma` package:
|
|
296
|
+
|
|
297
|
+
[source,sh]
|
|
298
|
+
----
|
|
299
|
+
metanorma --tebako-extract temp-image
|
|
300
|
+
----
|
|
301
|
+
====
|
|
302
|
+
|
|
303
|
+
The `--tebako-extract` option actually runs the following Ruby script:
|
|
304
|
+
|
|
305
|
+
[source,ruby]
|
|
306
|
+
----
|
|
307
|
+
require 'fileutils'
|
|
308
|
+
FileUtils.copy_entry '<in-memory filesystem root>', ARGV[2] || 'source_filesystem'
|
|
309
|
+
----
|
|
310
|
+
|
|
311
|
+
== Ruby packaging specification
|
|
312
|
+
|
|
313
|
+
This is high-level description of the Tebako Ruby packaging mechanism.
|
|
314
|
+
This specification was inspired by the `ruby-packer` approach.
|
|
315
|
+
|
|
316
|
+
NOTE: For various reasons, Tebako Ruby is a fully separate implementation,
|
|
317
|
+
no line of code was copied from `ruby-packer`.
|
|
318
|
+
|
|
319
|
+
Depending on the configuration files that are present in the root project folder,
|
|
320
|
+
the Tebako Ruby packager support five different scenarios:
|
|
321
|
+
|
|
322
|
+
[cols="a,a,a,a"]
|
|
323
|
+
|===
|
|
324
|
+
| Scenario | `*.gemspec` | `Gemfile` | `*.gem`
|
|
325
|
+
|
|
326
|
+
| 1 | No | No | No
|
|
327
|
+
| 2 | No | No | One
|
|
328
|
+
| 3 | One | No | Any
|
|
329
|
+
| 4 | One | One | Any
|
|
330
|
+
| 5 | No | One | Any
|
|
331
|
+
| Error | No | No |Two or more
|
|
332
|
+
| Error |Two or more| Any | Any
|
|
333
|
+
|
|
334
|
+
|===
|
|
335
|
+
|
|
336
|
+
These scenarios differ in what files are packaged and where the entry point is
|
|
337
|
+
located, as follows:
|
|
338
|
+
|
|
339
|
+
[cols="a,a,a,a"]
|
|
340
|
+
|===
|
|
341
|
+
| Scenario | Description | Packaging | Entry point
|
|
342
|
+
|
|
343
|
+
| 1
|
|
344
|
+
| Simple ruby script
|
|
345
|
+
| Copy `<project-root>` with all sub-folders to packaged filesystem
|
|
346
|
+
| `<mount_point>/local/<entry_point base name>`
|
|
347
|
+
|
|
348
|
+
| 2
|
|
349
|
+
| Packaged gem
|
|
350
|
+
| Install the gem with `gem install` to packaged filesystem
|
|
351
|
+
| `<mount_point>/bin/<entry_point base name>` (i.e., binstub is expected)
|
|
352
|
+
|
|
353
|
+
| 3
|
|
354
|
+
| Gem source, no `bundler`
|
|
355
|
+
|
|
|
356
|
+
. Build the gem using `gem build` command at the host
|
|
357
|
+
. Install it with `gem install` to packaged filesystem
|
|
358
|
+
|
|
359
|
+
| `<mount_point>/bin/<entry_point base name>` (i.e., binstub is expected)
|
|
360
|
+
|
|
361
|
+
| 4
|
|
362
|
+
| Gem source, `bundler`
|
|
363
|
+
|
|
|
364
|
+
. Collect dependencies at the host with `bundle install`
|
|
365
|
+
. Build the gem using `gem build` command
|
|
366
|
+
. Install it with `gem install` to packaged file system
|
|
367
|
+
|
|
368
|
+
| `<mount_point>/bin/<entry_point base name>` (i.e., binstub is expected)
|
|
369
|
+
|
|
370
|
+
| 5
|
|
371
|
+
| Rails project
|
|
372
|
+
| Deploy project to packaged filesystem using `bundle install`
|
|
373
|
+
| `<mount_point>/local/<entry_point base name>`
|
|
374
|
+
|
|
375
|
+
|===
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
== Trivia: origin of name
|
|
379
|
+
|
|
380
|
+
"tamatebako" (玉手箱) is the treasure box given to Urashima Taro in the Ryugu,
|
|
381
|
+
for which he was asked not to open if he wished to return. He opened the box
|
|
382
|
+
upon the shock from his return that three hundred years has passed. Apparently
|
|
383
|
+
what was stored in the box was his age.
|
|
384
|
+
|
|
385
|
+
This packager was made to store Ruby and its gems, and therefore named after
|
|
386
|
+
the said treasure box (storing gems inside a treasure box).
|
|
387
|
+
|
|
388
|
+
Since "tamatebako" is rather long for the non-Japanese speaker, we use "tebako"
|
|
389
|
+
(手箱, also "tehako") instead, the generic term for a personal box.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
# This file is a part of tebako
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions
|
|
9
|
+
# are met:
|
|
10
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
# notice, this list of conditions and the following disclaimer.
|
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
require "bundler/gem_tasks"
|
|
29
|
+
require "rubocop/rake_task"
|
|
30
|
+
|
|
31
|
+
RuboCop::RakeTask.new
|
|
32
|
+
|
|
33
|
+
task default: %i[rubocop]
|
data/bin/console
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "bundler/setup"
|
|
5
|
+
require "tebako"
|
|
6
|
+
|
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
9
|
+
|
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
+
# require "pry"
|
|
12
|
+
# Pry.start
|
|
13
|
+
|
|
14
|
+
require "irb"
|
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright (c) 2021, [Ribose Inc](https://www.ribose.com).
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
# This file is a part of tebako
|
|
4
|
+
#
|
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
|
6
|
+
# modification, are permitted provided that the following conditions
|
|
7
|
+
# are met:
|
|
8
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
|
10
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
12
|
+
# documentation and/or other materials provided with the distribution.
|
|
13
|
+
#
|
|
14
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
15
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
16
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
17
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
18
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
19
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
20
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
21
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
22
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
23
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
24
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
+
|
|
26
|
+
# https://cmake.org/Bug/view.php?id=13204
|
|
27
|
+
# note the trailing slash after ${SOURCE_DIR}
|
|
28
|
+
|
|
29
|
+
file (COPY "${SOURCE_DIR}/" DESTINATION "${TARGET_DIR}")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
if(NOT WIN32)
|
|
2
|
+
string(ASCII 27 Escape)
|
|
3
|
+
set(ColourReset "${Escape}[m")
|
|
4
|
+
set(ColourBold "${Escape}[1m")
|
|
5
|
+
set(ColourRed "${Escape}[31m")
|
|
6
|
+
set(ColourGreen "${Escape}[32m")
|
|
7
|
+
set(ColourYellow "${Escape}[33m")
|
|
8
|
+
set(ColourBlue "${Escape}[34m")
|
|
9
|
+
set(ColourMagenta "${Escape}[35m")
|
|
10
|
+
set(ColourCyan "${Escape}[36m")
|
|
11
|
+
set(ColourWhite "${Escape}[37m")
|
|
12
|
+
set(ColourBoldRed "${Escape}[1;31m")
|
|
13
|
+
set(ColourBoldGreen "${Escape}[1;32m")
|
|
14
|
+
set(ColourBoldYellow "${Escape}[1;33m")
|
|
15
|
+
set(ColourBoldBlue "${Escape}[1;34m")
|
|
16
|
+
set(ColourBoldMagenta "${Escape}[1;35m")
|
|
17
|
+
set(ColourBoldCyan "${Escape}[1;36m")
|
|
18
|
+
set(ColourBoldWhite "${Escape}[1;37m")
|
|
19
|
+
endif()
|
data/common.env
ADDED
data/exe/tebako
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
|
|
5
|
+
# All rights reserved.
|
|
6
|
+
# This file is a part of tebako
|
|
7
|
+
#
|
|
8
|
+
# Redistribution and use in source and binary forms, with or without
|
|
9
|
+
# modification, are permitted provided that the following conditions
|
|
10
|
+
# are met:
|
|
11
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
|
13
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
14
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
15
|
+
# documentation and/or other materials provided with the distribution.
|
|
16
|
+
#
|
|
17
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
18
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
19
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
20
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
21
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
22
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
23
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
24
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
25
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
26
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
27
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
|
|
29
|
+
require_relative "../lib/cli"
|
|
30
|
+
|
|
31
|
+
Tebako::TebakoCli.start
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) 2021, [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* This file is a part of tebako
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions
|
|
9
|
+
* are met:
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
* documentation and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#pragma once
|
|
31
|
+
|
|
32
|
+
#include <incbin/incbin.h>
|
|
33
|
+
|
|
34
|
+
INCBIN_EXTERN(fs);
|
|
35
|
+
|
|
36
|
+
namespace tebako {
|
|
37
|
+
extern const char* fs_log_level;
|
|
38
|
+
extern const char* fs_mount_point;
|
|
39
|
+
extern const char* fs_entry_point;
|
|
40
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) 2021, [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* This file is a part of tebako
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions
|
|
9
|
+
* are met:
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
* documentation and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifdef __cplusplus
|
|
31
|
+
extern "C" {
|
|
32
|
+
#endif
|
|
33
|
+
int tebako_main(int* argc, char*** argv);
|
|
34
|
+
const char* tebako_mount_point(void);
|
|
35
|
+
#ifdef RB_W32
|
|
36
|
+
int tebako_file_load_ok(const char *path);
|
|
37
|
+
#endif
|
|
38
|
+
#ifdef __cplusplus
|
|
39
|
+
}
|
|
40
|
+
#endif
|
data/lib/cli.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
# This file is a part of tebako
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions
|
|
9
|
+
# are met:
|
|
10
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
# notice, this list of conditions and the following disclaimer.
|
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
require_relative "tebako/cli"
|