docker_core 0.0.9 → 0.0.10
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 +4 -4
- data/lib/docker_core.rb +113 -65
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad11481b8c2d460b9685c4022b1805220b64bf1db62bbf7faca9a0733d568169
|
4
|
+
data.tar.gz: aa21c991bfa072b42b378b7f569bbd55f54b7bd98b10b73a8b01a56a765bd8bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6b657275d527d98b636106b41f524ecf380743d525089affc0369240c6c93f243e0f9b646efea7195462c030e7f1813153b8a23a9e7551364b77ec5004eaf5e
|
7
|
+
data.tar.gz: 67897ef4a150344583d759fc9a89d333cf414c65496bd13cffaa2a6be3ccd644ed9fa3f0850cf0bc8b4646ed0643d6633df02bedc51c9e8ebafa4038bef27909
|
data/lib/docker_core.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require('fileutils')
|
2
|
-
require('net/http')
|
3
2
|
require('json')
|
4
|
-
require('
|
3
|
+
require('net/http')
|
5
4
|
require('rubygems/package')
|
5
|
+
require('zlib')
|
6
6
|
|
7
7
|
module DockerCore
|
8
8
|
COLOR_CODE = { error: 31, info: 32, warn: 33 }
|
@@ -19,7 +19,7 @@ module DockerCore
|
|
19
19
|
|
20
20
|
# @param [String] text
|
21
21
|
# @param [Integer] code
|
22
|
-
def self.echo(text, code
|
22
|
+
def self.echo(text, code: self::COLOR_CODE[:info])
|
23
23
|
puts(self.color(text, code))
|
24
24
|
end
|
25
25
|
|
@@ -28,16 +28,16 @@ module DockerCore
|
|
28
28
|
# @param [Array] argumets
|
29
29
|
def self.execute(title, run, *argumets)
|
30
30
|
code = self::COLOR_CODE[:warn]
|
31
|
-
self.echo("> #{title}", code)
|
31
|
+
self.echo("> #{title}", code: code)
|
32
32
|
run.call(*argumets)
|
33
|
-
self.echo("< #{title}", code)
|
33
|
+
self.echo("< #{title}", code: code)
|
34
34
|
end
|
35
35
|
|
36
36
|
# @param [String] command
|
37
|
-
# @param [Boolean]
|
37
|
+
# @param [Boolean] verbose
|
38
38
|
# @param [Boolean] throw
|
39
|
-
def self.run(command,
|
40
|
-
if
|
39
|
+
def self.run(command, verbose: true, throw: true)
|
40
|
+
if verbose
|
41
41
|
self.echo("+ #{command}")
|
42
42
|
end
|
43
43
|
|
@@ -52,56 +52,66 @@ module DockerCore
|
|
52
52
|
|
53
53
|
# @param [Integer] uid
|
54
54
|
# @param [Integer] gid
|
55
|
-
def self.update_user(uid
|
55
|
+
def self.update_user(uid: 500, gid: 500)
|
56
56
|
uid = ENV.fetch('DOCKER_CORE_UID', uid)
|
57
57
|
gid = ENV.fetch('DOCKER_CORE_GID', gid)
|
58
|
-
self.run('deluser core')
|
59
|
-
self.run('delgroup core')
|
58
|
+
self.run('deluser core', throw: false)
|
59
|
+
self.run('delgroup core', throw: false)
|
60
60
|
self.run("addgroup --system --gid=#{gid} core")
|
61
61
|
self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
|
62
62
|
end
|
63
63
|
|
64
|
+
# @param [Array<String>] arguments
|
65
|
+
def self.path(*arguments)
|
66
|
+
return Dir[*arguments].map { |item| File.path(item) }.uniq
|
67
|
+
end
|
68
|
+
|
64
69
|
# @param [Array<String>] arguments
|
65
70
|
def self.chown(*arguments)
|
66
|
-
arguments.each do |
|
67
|
-
FileUtils.chown_R('core', 'core',
|
71
|
+
self.path(*arguments).each do |path|
|
72
|
+
FileUtils.chown_R('core', 'core', path, force: true)
|
68
73
|
end
|
69
|
-
return
|
70
74
|
end
|
71
75
|
|
72
76
|
# @param [Array<String>] arguments
|
73
|
-
def self.mkdir(*arguments)
|
74
|
-
arguments.each do |
|
75
|
-
|
77
|
+
def self.mkdir(*arguments, mode: nil)
|
78
|
+
self.path(*arguments).each do |path|
|
79
|
+
if File.exist?(path) && false == File.directory?(path)
|
80
|
+
File.delete(path)
|
81
|
+
end
|
82
|
+
|
83
|
+
FileUtils.mkdir_p(path, mode: mode)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# @param [Array<String>] arguments
|
88
|
+
def self.rm(*arguments)
|
89
|
+
self.path(*arguments).each do |path|
|
90
|
+
FileUtils.rm_rf(path)
|
76
91
|
end
|
77
|
-
self.chown(*arguments)
|
78
92
|
end
|
79
93
|
|
80
94
|
# @param [String] value
|
81
95
|
def self.to_boolean(value)
|
82
|
-
return %w[true yes on].include?(value.strip.downcase)
|
96
|
+
return %w[true yes on].include?("#{value}".strip.downcase)
|
83
97
|
end
|
84
98
|
|
85
99
|
# @param [String] stdout
|
86
100
|
# @param [String] stderr
|
87
|
-
def self.link_log(stdout
|
101
|
+
def self.link_log(stdout: '', stderr: '')
|
88
102
|
if '' != stdout
|
89
|
-
File.symlink('/dev/stdout', stdout)
|
103
|
+
File.symlink('/dev/stdout', File.path(stdout))
|
90
104
|
end
|
91
105
|
|
92
106
|
if '' != stderr
|
93
|
-
File.symlink('/dev/stderr', stderr)
|
107
|
+
File.symlink('/dev/stderr', File.path(stderr))
|
94
108
|
end
|
95
|
-
return
|
96
109
|
end
|
97
110
|
|
98
111
|
# @param [Array<String>] arguments
|
99
|
-
def self.clear_path(*arguments)
|
100
|
-
arguments
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
self.mkdir(*arguments)
|
112
|
+
def self.clear_path(*arguments, mode: nil)
|
113
|
+
self.rm(*arguments)
|
114
|
+
self.mkdir(*arguments, mode: mode)
|
105
115
|
end
|
106
116
|
|
107
117
|
def self.arch_suffix
|
@@ -111,8 +121,8 @@ module DockerCore
|
|
111
121
|
|
112
122
|
# @param [String] repository
|
113
123
|
def self.github_latest_version(repository)
|
114
|
-
|
115
|
-
return JSON.parse(
|
124
|
+
uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
|
125
|
+
return JSON.parse(Net::HTTP.get(uri))['tag_name']
|
116
126
|
end
|
117
127
|
|
118
128
|
# @param [String] uri
|
@@ -128,8 +138,9 @@ module DockerCore
|
|
128
138
|
|
129
139
|
if 0 == max_redirect
|
130
140
|
raise('maximum redirect reached')
|
131
|
-
else return self.uri_resolve(response['location'], max_redirect)
|
132
141
|
end
|
142
|
+
|
143
|
+
return self.uri_resolve(response['location'], max_redirect)
|
133
144
|
end
|
134
145
|
|
135
146
|
# @param [String] uri
|
@@ -140,53 +151,90 @@ module DockerCore
|
|
140
151
|
return File.binwrite(file, content)
|
141
152
|
end
|
142
153
|
|
143
|
-
# @param [String] file
|
144
154
|
# @param [String] path
|
145
|
-
|
146
|
-
|
155
|
+
# @param [Boolean] verbose
|
156
|
+
def self.untar(io, path, verbose: false)
|
157
|
+
# @type [Gem::Package::TarReader] reader
|
158
|
+
Gem::Package::TarReader.new(io) do |reader|
|
159
|
+
reader.rewind
|
160
|
+
reader.each do |entry|
|
161
|
+
# @type [Gem::Package::TarHeader] header
|
162
|
+
header = entry.header
|
163
|
+
mode = header.mode
|
164
|
+
file = File.join(path, entry.full_name)
|
147
165
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
tar.rewind
|
166
|
+
if verbose
|
167
|
+
self.echo(": #{file}")
|
168
|
+
end
|
152
169
|
|
153
|
-
|
154
|
-
|
170
|
+
if entry.directory?
|
171
|
+
self.mkdir(file, mode: mode)
|
172
|
+
next
|
173
|
+
end
|
155
174
|
|
156
|
-
if
|
157
|
-
|
175
|
+
if entry.file?
|
176
|
+
self.mkdir(File.dirname(file))
|
177
|
+
File.binwrite(file, entry.read)
|
178
|
+
FileUtils.chmod(mode, file)
|
158
179
|
next
|
159
180
|
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
160
184
|
|
161
|
-
|
185
|
+
# @param [String] file
|
186
|
+
# @param [String] path
|
187
|
+
# @param [Boolean] verbose
|
188
|
+
def self.ungzip(file, path, verbose: false)
|
189
|
+
# @type [Zlib::GzipReader] reader
|
190
|
+
Zlib::GzipReader.open(file) do |reader|
|
191
|
+
self.untar(reader, path, verbose: verbose)
|
192
|
+
end
|
193
|
+
end
|
162
194
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
195
|
+
# @param [String] path
|
196
|
+
# @param [Boolean] verbose
|
197
|
+
def self.tar(path, verbose: false)
|
198
|
+
io = StringIO.new('')
|
199
|
+
offset = path.size + 1
|
200
|
+
|
201
|
+
# @type [Gem::Package::TarWriter] writer
|
202
|
+
Gem::Package::TarWriter.new(io) do |writer|
|
203
|
+
# @type [String] file
|
204
|
+
Dir[File.join(path, '**/*')].each do |name|
|
205
|
+
mode = File.stat(name).mode
|
206
|
+
file = name.slice(offset ..)
|
207
|
+
|
208
|
+
if verbose
|
209
|
+
self.echo(": #{file}")
|
210
|
+
end
|
167
211
|
|
168
|
-
if
|
169
|
-
|
170
|
-
|
171
|
-
|
212
|
+
if File.directory?(name)
|
213
|
+
writer.mkdir(file, mode)
|
214
|
+
next
|
215
|
+
end
|
172
216
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
FileUtils.rm_rf(target)
|
217
|
+
if File.file?(name)
|
218
|
+
writer.add_file(file, mode) do |stream|
|
219
|
+
stream.write(File.binread(name))
|
177
220
|
end
|
178
|
-
|
179
|
-
FileUtils.mkdir_p(File.dirname(target))
|
180
|
-
File.binwrite(target, entry.read)
|
181
|
-
FileUtils.chmod(header.mode, target)
|
182
|
-
elsif '2' == typeflag #Symlink!
|
183
|
-
File.symlink(header.linkname, target)
|
184
|
-
else raise("Unkown tar entry: #{name} type: #{typeflag}.")
|
221
|
+
next
|
185
222
|
end
|
186
|
-
|
187
|
-
target = nil
|
188
223
|
end
|
189
224
|
end
|
225
|
+
|
226
|
+
io.rewind
|
227
|
+
return io.string
|
228
|
+
end
|
229
|
+
|
230
|
+
# @param [String] file
|
231
|
+
# @param [String] path
|
232
|
+
# @param [Boolean] verbose
|
233
|
+
def self.gzip(file, path, verbose: false)
|
234
|
+
# @type [Zlib::GzipWriter] writer
|
235
|
+
Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |writer|
|
236
|
+
writer.write(self.tar(path, verbose: verbose))
|
237
|
+
end
|
190
238
|
end
|
191
239
|
|
192
240
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- agrozyme
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fileutils
|