hackmac 0.8.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb9a09c4a8c36db0e881489bb115887d6f9d3141c16799b957417f507c4b70fa
4
- data.tar.gz: 67df1404193ff6557bab90512f3b732a5ca7f90d10020e3a856ad492d17fcd15
3
+ metadata.gz: 923c3844c934086f3e46c41d695766a8198515d02f75894afa90912b87428b86
4
+ data.tar.gz: c022882b0fdfa41fba34d6a6e39031cfb6df6fe0107ae31232d3e0c91ae9eb33
5
5
  SHA512:
6
- metadata.gz: 44a4fd40a4a3c5aeef28c438d6bb4fefb75e3f2368a8c7df9059ed4546eaa126db131be345b71e19d70df2a42aa1146e3d4d0ea8a0b7f799d0ee395568ce5e98
7
- data.tar.gz: 8f9fba1a5922e5c199771165be59ece57d3872ed45e767ec9c61b638e41956c858a0627c8dc45f9b81a68c2eb5df7c8e7eb94c9cfd64b31df96c6dc7df794840
6
+ metadata.gz: 755e5d0e38d23b72951b2d17a44d320ae7423de56b2506dc85bef8409df8530000bd6f11d18a7005cd2da492cd3c6c7057c17ed746dfa1b035645a4a2e20c80c
7
+ data.tar.gz: 7346a101b0798408a94445dd7f1f72d28b904b1b677f4077f819966b28f77f9004bc3271eab6e27286a67ce51c9b681372d2aca4703952d841f093c5f00d1571
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.3
1
+ 1.0.0
data/bin/efi CHANGED
@@ -18,18 +18,8 @@ def clone(from:, to:)
18
18
  x %{rsync -av --exclude ".*" --delete "/Volumes/#{from}/" "/Volumes/#{to}/"}
19
19
  end
20
20
 
21
- def boot_dev
22
- unless @boot_dev
23
- value = x(%{bdmesg}, verbose: false).lines.
24
- find { |l| l =~ /SelfDevicePath=(.*)\r?\n/ and break $1 }
25
- uuid = value.split('\\').last[/(?:<?GPT,)([\h-]+)/, 1] or exit 1
26
- @boot_dev = x(%{partutil --search-uuid #{uuid}}).chomp
27
- end
28
- @boot_dev
29
- end
30
-
31
21
  def usage
32
- default_dev = boot_dev
22
+ default_dev = device_name('main')
33
23
 
34
24
  puts <<~end
35
25
 
@@ -72,6 +62,12 @@ def usage
72
62
  The EFI partion on DEVICE is used to find the clover kexts in
73
63
  subdirectory /Other.
74
64
 
65
+ oc shows currently booted OpenCore version
66
+
67
+ oc_upgrade EFI partition
68
+
69
+ Upgrade OpenCore on this partition to newest version
70
+
75
71
  diff EFI partition
76
72
 
77
73
  argument DEVICE (defaults to #{default_dev})
@@ -86,8 +82,6 @@ def usage
86
82
  Commits changes with git, passes arguments to commit command
87
83
  after "--".
88
84
 
89
- list shows boot disk information (which EFI partition was used)
90
-
91
85
  end
92
86
  end
93
87
 
@@ -95,8 +89,6 @@ $config = Hackmac::Config.load
95
89
 
96
90
  def device_name(mdev)
97
91
  case mdev
98
- when 'boot'
99
- boot_dev
100
92
  when nil
101
93
  $config.devices.main.name
102
94
  else
@@ -187,40 +179,14 @@ when 'kext_upgrade'
187
179
  path = Pathname.new(path).expand_path.to_s
188
180
  force = ARGV.shift == 'force'
189
181
  Hackmac::KextUpgrader.new(path: path, config: $config, force: force).perform
190
- when 'list'
191
- disks = Disks.new
192
- efis = []
193
- disks.AllDisksAndPartitions.each_with_object([]) { |d, ps|
194
- uuids = Array(d['Partitions']&.map { |p| p['DiskUUID'] }&.compact)
195
- efis.concat uuids.
196
- map { |uuid| DiskInfo.new(disk: uuid) }.
197
- select { |di| di.FilesystemType == 'msdos' }
198
- }
199
- efis.each do |e|
200
- e.Booted = e.DeviceIdentifier == boot_dev
201
- e.Volumes =
202
- ContainerDisk.new(disk: e.ParentWholeDisk, limiter: 'internal').VolumesFromDisks
203
- end
204
- aliases = $config.devices.to_h.each_with_object({}) do |(dk,dv),h|
205
- h[dv[:name]] = dk
206
- end
207
- puts Tabulo::Table.new(efis, align_header: :left, border: :modern) { |t|
208
- t.add_column(
209
- :Booted,
210
- styler: -> v, _ { v == ?☑ ? v.green : v.red },
211
- header_styler: bold_head
212
- ) { |e| e.Booted ? ?☑ : ?☐ }
213
- t.add_column(:VolumeName, header_styler: bold_head)
214
- t.add_column(:Alias, header_styler: bold_head) { |e| aliases[e.VolumeName] }
215
- t.add_column(:DeviceIdentifier, header_styler: bold_head)
216
- t.add_column(:ParentWholeDisk, header_styler: bold_head)
217
- t.add_column(:Volumes, header_styler: bold_head) { |e| e.Volumes * ?, }
218
- t.add_column(
219
- :MountPoint,
220
- styler: -> v, _ { v.empty? ? v : v.green },
221
- header_styler: bold_head
222
- )
223
- }.pack
182
+ when 'oc'
183
+ x %{nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version}
184
+ when 'oc_remote'
185
+ puts OC.new(config: $config)
186
+ when 'oc_upgrade'
187
+ mdev = device_name(ARGV.shift)
188
+ ocu = OCUpgrader.new(mdev: mdev, config: $config)
189
+ ocu.perform
224
190
  else
225
191
  fail "don't know how to #{command}"
226
192
  end
data/hackmac.gemspec CHANGED
@@ -1,22 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: hackmac 0.8.3 ruby lib
2
+ # stub: hackmac 1.0.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "hackmac".freeze
6
- s.version = "0.8.3"
6
+ s.version = "1.0.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2021-03-05"
11
+ s.date = "2022-05-25"
12
12
  s.description = "This ruby gem provides some useful tools for working with a Hackintosh.".freeze
13
13
  s.email = "flori@ping.de".freeze
14
- s.executables = ["gfxmon".freeze, "usb".freeze, "efi".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_download.rb".freeze, "lib/hackmac/kext_source.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
16
- s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_download.rb".freeze, "lib/hackmac/kext_source.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
14
+ s.executables = ["efi".freeze, "gfxmon".freeze, "usb".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
16
+ s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
17
17
  s.homepage = "http://github.com/flori/hackmac".freeze
18
18
  s.rdoc_options = ["--title".freeze, "Hackmac - Some useful tools for working with a Hackintosh".freeze, "--main".freeze, "README.md".freeze]
19
- s.rubygems_version = "3.1.4".freeze
19
+ s.rubygems_version = "3.3.13".freeze
20
20
  s.summary = "Some useful tools for working with a Hackintosh".freeze
21
21
 
22
22
  if s.respond_to? :specification_version then
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  end
25
25
 
26
26
  if s.respond_to? :add_runtime_dependency then
27
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
27
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
28
28
  s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
29
29
  s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.14"])
30
30
  s.add_runtime_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  s.add_runtime_dependency(%q<tabulo>.freeze, [">= 0"])
35
35
  s.add_runtime_dependency(%q<search_ui>.freeze, [">= 0"])
36
36
  else
37
- s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
37
+ s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
38
38
  s.add_dependency(%q<byebug>.freeze, [">= 0"])
39
39
  s.add_dependency(%q<tins>.freeze, ["~> 1.14"])
40
40
  s.add_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
@@ -0,0 +1,27 @@
1
+ module Hackmac
2
+ module AssetTools
3
+ private
4
+
5
+ def isolate
6
+ Dir.mktmpdir do |dir|
7
+ cd dir do
8
+ yield dir
9
+ end
10
+ end
11
+ end
12
+
13
+ def decompress(name)
14
+ print "Decompressing #{name.inspect}…"
15
+ case name
16
+ when /\.zip\z/i
17
+ system "unzip #{name.inspect}" or fail "Could not unzip #{name.inspect}"
18
+ when /\.tar\.gz\z/i
19
+ system "tar xfz #{name.inspect}" or fail "Could not tar xfz #{name.inspect}"
20
+ else
21
+ fail "Cannot decompress #{name.inspect}"
22
+ end
23
+ puts "done!"
24
+ end
25
+
26
+ end
27
+ end
@@ -1,6 +1,7 @@
1
1
  require 'complex_config/shortcuts'
2
2
  require 'tins/xt/secure_write'
3
3
  require 'fileutils'
4
+ require 'pathname'
4
5
 
5
6
  module Hackmac
6
7
  module Config
@@ -46,15 +47,15 @@ module Hackmac
46
47
  github: 'acidanthera/WhateverGreen'
47
48
  end
48
49
 
49
- def self.load
50
- path = File.expand_path('~/.config/hackmac')
51
- mkdir_p path
52
- ComplexConfig::Provider.config_dir = path
53
- config_path = File.join(path, 'hackmac.yml')
54
- unless File.exist?(config_path)
55
- File.secure_write(config_path, DEFAULT)
50
+ def self.load(path: ENV.fetch('CONFIG_PATH', '~/.config/hackmac/hackmac.yml'))
51
+ path = Pathname.new(path).expand_path
52
+ mkdir_p path.dirname
53
+ ComplexConfig::Provider.config_dir = path.dirname
54
+ unless path.exist?
55
+ File.secure_write(path, DEFAULT)
56
56
  end
57
- complex_config.hackmac
57
+ puts "Loading config from #{path.to_s.inspect}."
58
+ ComplexConfig::Provider[path.basename.to_s.sub(/\..*?\z/, '')]
58
59
  end
59
60
  end
60
61
  end
@@ -3,7 +3,7 @@ require 'json'
3
3
  require 'tins/string_version'
4
4
 
5
5
  module Hackmac
6
- class KextSource
6
+ class GithubSource
7
7
  GITHUB_API_URL = 'https://api.github.com/repos/%s/releases'
8
8
 
9
9
  include Tins::StringVersion
data/lib/hackmac/kext.rb CHANGED
@@ -51,9 +51,9 @@ module Hackmac
51
51
  when false then 'RELEASE'
52
52
  when nil then nil
53
53
  end
54
- @remote_kext = Hackmac::KextSource.new(github, auth: auth, suffix: suffix)
54
+ @remote_kext = Hackmac::GithubSource.new(github, auth: auth, suffix: suffix)
55
55
  when download = source&.download
56
- @remote_kext = Hackmac::KextDownload.new(download.name, download.version, download.url)
56
+ @remote_kext = Hackmac::URLDownload.new(download.name, download.version, download.url)
57
57
  end
58
58
  end
59
59
  end
@@ -5,34 +5,12 @@ require 'pathname'
5
5
  module Hackmac
6
6
  class KextUpgrader
7
7
  include FileUtils
8
+ include Hackmac::AssetTools
8
9
 
9
10
  def initialize(path:, config:, force: false)
10
11
  @path, @config, @force = path, config, force
11
12
  end
12
13
 
13
- private
14
-
15
- def isolate
16
- Dir.mktmpdir do |dir|
17
- cd dir do
18
- yield dir
19
- end
20
- end
21
- end
22
-
23
- def decompress(name)
24
- print "Decompressing #{name.inspect}…"
25
- case name
26
- when /\.zip\z/i
27
- system "unzip #{name.inspect}" or fail "Could not unzip #{name.inspect}"
28
- when /\.tar\.gz\z/i
29
- system "tar xfz #{name.inspect}" or fail "Could not tar xfz #{name.inspect}"
30
- else
31
- fail "Cannot decompress #{name.inspect}"
32
- end
33
- puts "done!"
34
- end
35
-
36
14
  public
37
15
 
38
16
  def perform
data/lib/hackmac/oc.rb ADDED
@@ -0,0 +1,39 @@
1
+ module Hackmac
2
+ class OC
3
+ def initialize(config:)
4
+ @config = config
5
+ end
6
+
7
+ def remote
8
+ @remote and return @remote
9
+ source = @config.oc.source
10
+ github = source.github
11
+ auth = [ @config.github.user, @config.github.access_token ].compact
12
+ auth.empty? and auth = nil
13
+ suffix =
14
+ case debug = source.debug?
15
+ when true then 'DEBUG'
16
+ when false then 'RELEASE'
17
+ when nil then nil
18
+ end
19
+ @remote = Hackmac::GithubSource.new(github, auth: auth, suffix: suffix)
20
+ end
21
+
22
+ def name
23
+ remote.name
24
+ end
25
+
26
+ def version
27
+ remote.version
28
+ end
29
+
30
+ def inspect
31
+ "#<#{self.class}: #{to_s}>"
32
+ end
33
+
34
+ def to_s
35
+ "#{name} #{version}"
36
+ end
37
+ end
38
+ end
39
+
@@ -0,0 +1,35 @@
1
+ require 'fileutils'
2
+
3
+ module Hackmac
4
+ class OCUpgrader
5
+ include FileUtils::Verbose
6
+ include Hackmac::AssetTools
7
+
8
+ def initialize(mdev:, config:)
9
+ @config = config
10
+ mount_path = Pathname.new('/Volumes').join(mdev)
11
+ @install_dir = Pathname.new(mount_path).join(@config.oc.efi_path)
12
+ end
13
+
14
+ def perform
15
+ isolate do |dir|
16
+ oc = OC.new(config: @config)
17
+ name, data = oc.remote.download_asset
18
+ if name
19
+ File.secure_write(name, data)
20
+ decompress(name)
21
+ for f in @config.oc.files.map { |x| Pathname.new(x) }
22
+ sf = Pathname.new(dir).join(@config.oc.install_path).join(f)
23
+ cp sf, @install_dir.join(f.dirname)
24
+ end
25
+ else
26
+ fail "#{oc} could not be downloaded"
27
+ end
28
+ end
29
+ end
30
+
31
+ def to_s
32
+ 'Installation into %s' % @install_dir
33
+ end
34
+ end
35
+ end
data/lib/hackmac/plist.rb CHANGED
@@ -11,6 +11,10 @@ module Hackmac
11
11
  @plist.dup
12
12
  end
13
13
 
14
+ def each(&block)
15
+ as_hash.each(&block)
16
+ end
17
+
14
18
  def to_json(*a)
15
19
  as_hash.to_json(*a)
16
20
  end
@@ -2,7 +2,7 @@ require 'open-uri'
2
2
  require 'tins/string_version'
3
3
 
4
4
  module Hackmac
5
- class KextDownload
5
+ class URLDownload
6
6
  include Tins::StringVersion
7
7
 
8
8
  def initialize(name, version, url)
@@ -1,6 +1,6 @@
1
1
  module Hackmac
2
2
  # Hackmac version
3
- VERSION = '0.8.3'
3
+ VERSION = '1.0.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/lib/hackmac.rb CHANGED
@@ -7,9 +7,12 @@ require 'tins/xt'
7
7
  require 'hackmac/version'
8
8
  require 'hackmac/plist'
9
9
  require 'hackmac/disks'
10
+ require 'hackmac/asset_tools'
11
+ require 'hackmac/github_source'
12
+ require 'hackmac/url_download'
10
13
  require 'hackmac/kext'
11
- require 'hackmac/kext_source'
12
- require 'hackmac/kext_download'
13
14
  require 'hackmac/kext_upgrader'
15
+ require 'hackmac/oc'
16
+ require 'hackmac/oc_upgrader'
14
17
  require 'hackmac/config'
15
18
  require 'hackmac/utils'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hackmac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-05 00:00:00.000000000 Z
11
+ date: 2022-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.11.0
19
+ version: 1.12.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.11.0
26
+ version: 1.12.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -139,20 +139,23 @@ dependencies:
139
139
  description: This ruby gem provides some useful tools for working with a Hackintosh.
140
140
  email: flori@ping.de
141
141
  executables:
142
+ - efi
142
143
  - gfxmon
143
144
  - usb
144
- - efi
145
145
  extensions: []
146
146
  extra_rdoc_files:
147
147
  - README.md
148
148
  - lib/hackmac.rb
149
+ - lib/hackmac/asset_tools.rb
149
150
  - lib/hackmac/config.rb
150
151
  - lib/hackmac/disks.rb
152
+ - lib/hackmac/github_source.rb
151
153
  - lib/hackmac/kext.rb
152
- - lib/hackmac/kext_download.rb
153
- - lib/hackmac/kext_source.rb
154
154
  - lib/hackmac/kext_upgrader.rb
155
+ - lib/hackmac/oc.rb
156
+ - lib/hackmac/oc_upgrader.rb
155
157
  - lib/hackmac/plist.rb
158
+ - lib/hackmac/url_download.rb
156
159
  - lib/hackmac/utils.rb
157
160
  - lib/hackmac/version.rb
158
161
  files:
@@ -166,13 +169,16 @@ files:
166
169
  - bin/usb
167
170
  - hackmac.gemspec
168
171
  - lib/hackmac.rb
172
+ - lib/hackmac/asset_tools.rb
169
173
  - lib/hackmac/config.rb
170
174
  - lib/hackmac/disks.rb
175
+ - lib/hackmac/github_source.rb
171
176
  - lib/hackmac/kext.rb
172
- - lib/hackmac/kext_download.rb
173
- - lib/hackmac/kext_source.rb
174
177
  - lib/hackmac/kext_upgrader.rb
178
+ - lib/hackmac/oc.rb
179
+ - lib/hackmac/oc_upgrader.rb
175
180
  - lib/hackmac/plist.rb
181
+ - lib/hackmac/url_download.rb
176
182
  - lib/hackmac/utils.rb
177
183
  - lib/hackmac/version.rb
178
184
  homepage: http://github.com/flori/hackmac
@@ -197,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
203
  - !ruby/object:Gem::Version
198
204
  version: '0'
199
205
  requirements: []
200
- rubygems_version: 3.1.4
206
+ rubygems_version: 3.3.13
201
207
  signing_key:
202
208
  specification_version: 4
203
209
  summary: Some useful tools for working with a Hackintosh