hackmac 0.8.3 → 1.0.0

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 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