docker_core 0.0.7 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +121 -72
  3. metadata +2 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18a1b927ec2c709078daec960fad7bd08f003333be2e76f7367c33aa24511c23
4
- data.tar.gz: a9020d2876c4bf326e40cdee982f88e658a870b5f2f0472e74820d1ed74c1f3d
3
+ metadata.gz: 07652f554831c30520e7d9d2c0c5b596d86bc59a9c6f036135aa01dc7827efb6
4
+ data.tar.gz: c959b71d67090e58b04ae12339820d02d9cb25423ef9dbab3f8fc5fb9edb3901
5
5
  SHA512:
6
- metadata.gz: e0c4455fea8ace38ffd9bd7843143cafd6d9e8c48de8e3e61d04ea75ecd035142ecb68f09dd4f1fe4c0ea5ecc8fb1ffd64396f69734b5fe24160cafed3cfacc6
7
- data.tar.gz: '02852c9ea649dce1b521d927fd28f2e31438646955b6d88e81e6fc1fe89b2f931c00dcf329ea9b36226ddf1aeed367a7e8122d70524ca81e90901638bd541bc5'
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('zlib')
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 = self::COLOR_CODE[:info])
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] echo
38
- # @param [Boolean] throw
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
- if throw
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 = 500, gid = 500)
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 |list|
67
- FileUtils.chown_R('core', 'core', list)
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.mkdir(*arguments)
74
- arguments.each do |list|
75
- FileUtils.mkdir_p(list)
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 = '', stderr = '')
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.each do |list|
101
- FileUtils.rm_rf(list)
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
- body = Net::HTTP.get(URI("https://api.github.com/repos/#{repository}/releases/latest"))
115
- return JSON.parse(body)['tag_name']
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
- def self.ungzip(file, path)
146
- longlink = '././@LongLink'
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
- # @type [Gem::Package::TarReader] tar
149
- Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
- target = nil
151
- tar.rewind
167
+ if verbose
168
+ self.echo(": #{file}")
169
+ end
152
170
 
153
- tar.each do |entry|
154
- name = entry.full_name
171
+ if entry.directory?
172
+ self.mkdir(file, mode: mode)
173
+ next
174
+ end
155
175
 
156
- if name == longlink
157
- target = File.join(path, "#{entry.read}".strip)
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
- target ||= File.join(path, name)
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
- # @type [Gem::Package::TarHeader] header
164
- header = entry.header
165
- typeflag = header.typeflag
166
- end_slash = name.end_with?('/')
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 entry.directory? || ('' == typeflag && end_slash)
169
- if File.file?(target)
170
- File.delete(target)
171
- end
213
+ if File.directory?(name)
214
+ writer.mkdir(file, mode)
215
+ next
216
+ end
172
217
 
173
- FileUtils.mkdir_p(target, header.mode)
174
- elsif entry.file? || ('' == typeflag && !end_slash)
175
- if File.directory?(target)
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.7
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-05 00:00:00.000000000 Z
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