docker_core 0.0.4 → 0.0.9

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 +126 -5
  3. metadata +18 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1346550965774882d7c67a54f7d0602496e440314841a343942d0238764a17e
4
- data.tar.gz: 3411725ec2fba2004e89dff0ec83ffa1b5da2380d88a4216ae02c4d13e8fdf54
3
+ metadata.gz: 3f70d7fa0c2f973490e37183f8b2af082d3ae23c01182982030806442da8b057
4
+ data.tar.gz: 2d079bfee65ce10d1d73fab1565841aa6f46337891a0057c6af1dbcc1e9978f7
5
5
  SHA512:
6
- metadata.gz: 0b4311165ce2b3624eebea30c34996fe1508ad1fa0a3107b9d6d487adcf1ed385110ee2c0e07ea8e1c2eb6eb4b422d1882f3a026b0c4715cc6d28594e504e7d3
7
- data.tar.gz: 68cbccda12f0b47148f7df7f75be75c1f72489d27df7dc6a98f338b1443da97e01b4ba3b56a514304beb15ff65898e63d0dea77577567dfb6ae0afea50e9cea1
6
+ metadata.gz: 6d3326c261ce7ebb72226eba403c5e46a1d1a500eda84c530a368c868758717763ed51d1744b3f8cb6b03dd1321105d5fa2296b2c0ef2851d0b59afcbe0c0ed3
7
+ data.tar.gz: 38fd0d39ac645253844533f1f80c2a95c82efaa8822e0d9a3d88a6b539b2f7eb2809311b292cf9c37fa661beed9edd4d4ce6b004291c8483ddad237b33cac939
data/lib/docker_core.rb CHANGED
@@ -1,7 +1,12 @@
1
- require 'fileutils'
1
+ require('fileutils')
2
+ require('net/http')
3
+ require('json')
4
+ require('zlib')
5
+ require('rubygems/package')
2
6
 
3
7
  module DockerCore
4
8
  COLOR_CODE = { error: 31, info: 32, warn: 33 }
9
+ ARCH_SUFFIX = { x86: '386', x86_64: 'amd64', armhf: 'armv6', aarch64: 'arm64' }
5
10
 
6
11
  # @param [String] text
7
12
  # @param [Integer] code
@@ -23,9 +28,9 @@ module DockerCore
23
28
  # @param [Array] argumets
24
29
  def self.execute(title, run, *argumets)
25
30
  code = self::COLOR_CODE[:warn]
26
- self.echo(">> #{title}", code)
31
+ self.echo("> #{title}", code)
27
32
  run.call(*argumets)
28
- self.echo("<< #{title}", code)
33
+ self.echo("< #{title}", code)
29
34
  end
30
35
 
31
36
  # @param [String] command
@@ -56,16 +61,132 @@ module DockerCore
56
61
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
57
62
  end
58
63
 
59
- # @param [Array] arguments
64
+ # @param [Array<String>] arguments
65
+ def self.chown(*arguments)
66
+ arguments.each do |list|
67
+ FileUtils.chown_R('core', 'core', list)
68
+ end
69
+ return
70
+ end
71
+
72
+ # @param [Array<String>] arguments
60
73
  def self.mkdir(*arguments)
61
74
  arguments.each do |list|
62
75
  FileUtils.mkdir_p(list)
63
- FileUtils.chown_R('core', 'core', list)
64
76
  end
77
+ self.chown(*arguments)
65
78
  end
66
79
 
67
80
  # @param [String] value
68
81
  def self.to_boolean(value)
69
82
  return %w[true yes on].include?(value.strip.downcase)
70
83
  end
84
+
85
+ # @param [String] stdout
86
+ # @param [String] stderr
87
+ def self.link_log(stdout = '', stderr = '')
88
+ if '' != stdout
89
+ File.symlink('/dev/stdout', stdout)
90
+ end
91
+
92
+ if '' != stderr
93
+ File.symlink('/dev/stderr', stderr)
94
+ end
95
+ return
96
+ end
97
+
98
+ # @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)
105
+ end
106
+
107
+ def self.arch_suffix
108
+ arch = "#{`apk --print-arch`}".strip
109
+ return ARCH_SUFFIX.fetch(arch.to_sym, arch)
110
+ end
111
+
112
+ # @param [String] repository
113
+ 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']
116
+ end
117
+
118
+ # @param [String] uri
119
+ # @param [Integer] max_redirect
120
+ def self.uri_resolve(uri, max_redirect = 10)
121
+ response = Net::HTTP.get_response(URI.parse(uri))
122
+
123
+ if false == response.is_a?(Net::HTTPRedirection)
124
+ return uri
125
+ end
126
+
127
+ max_redirect = max_redirect - 1
128
+
129
+ if 0 == max_redirect
130
+ raise('maximum redirect reached')
131
+ else return self.uri_resolve(response['location'], max_redirect)
132
+ end
133
+ end
134
+
135
+ # @param [String] uri
136
+ # @param [String] file
137
+ def self.download_file(uri, file)
138
+ uri = self.uri_resolve(uri)
139
+ content = Net::HTTP.get(URI(uri))
140
+ return File.binwrite(file, content)
141
+ end
142
+
143
+ # @param [String] file
144
+ # @param [String] path
145
+ def self.ungzip(file, path)
146
+ longlink = '././@LongLink'
147
+
148
+ # @type [Gem::Package::TarReader] tar
149
+ Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
+ target = nil
151
+ tar.rewind
152
+
153
+ tar.each do |entry|
154
+ name = entry.full_name
155
+
156
+ if name == longlink
157
+ target = File.join(path, "#{entry.read}".strip)
158
+ next
159
+ end
160
+
161
+ target ||= File.join(path, name)
162
+
163
+ # @type [Gem::Package::TarHeader] header
164
+ header = entry.header
165
+ typeflag = header.typeflag
166
+ end_slash = name.end_with?('/')
167
+
168
+ if entry.directory? || ('' == typeflag && end_slash)
169
+ if File.file?(target)
170
+ File.delete(target)
171
+ end
172
+
173
+ FileUtils.mkdir_p(target, mode: header.mode)
174
+ elsif entry.file? || ('' == typeflag && !end_slash)
175
+ if File.directory?(target)
176
+ FileUtils.rm_rf(target)
177
+ 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}.")
185
+ end
186
+
187
+ target = nil
188
+ end
189
+ end
190
+ end
191
+
71
192
  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
4
+ version: 0.0.9
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-01 00:00:00.000000000 Z
11
+ date: 2021-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils
@@ -25,7 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: etc
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zlib
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -63,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
77
  - !ruby/object:Gem::Version
64
78
  version: '0'
65
79
  requirements: []
66
- rubygems_version: 3.2.15
80
+ rubygems_version: 3.1.6
67
81
  signing_key:
68
82
  specification_version: 4
69
83
  summary: some functions for docker build / run