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