macinbox 3.3.0 → 3.4.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
- SHA1:
3
- metadata.gz: 36bd1285647b90d338e5519ba42e429e6bb8ea12
4
- data.tar.gz: 65c6e91a11e43bed2921f006fe1469542d716205
2
+ SHA256:
3
+ metadata.gz: 36a4f3b181302a8a5d4efdf5e23d97add1b2f7424c1b981d0fa8467f4317a398
4
+ data.tar.gz: cbab11b8a79ee6eb57db5e164ac34867a3e892f97b166afe3176d1ed9f629657
5
5
  SHA512:
6
- metadata.gz: e08c547e56e15487b2d22cdc492aeaa7b3b78dd13b4df4ebdd77daa09537237b18413daa63bd3e473e2b67d4fb4e83137cf493cca63452e54fb994e5ced8953a
7
- data.tar.gz: 1d4dbf5faac11e49922894e001ea1a32988a11dc85a9327f2f78a6708e9769c18ef32286fbb888273e74183b23e971cf3962328d77d0f443c798bb4df4c235cf
6
+ metadata.gz: 706f282c101a01f8077f3b5e826441610263aee40c19e7b3ffea6480be6c50252f0e38070c4160153abb094a898dddd5b4195fb5d75ae9ecd1c69f1002c54a6c
7
+ data.tar.gz: 65c34dc426dc8a155319a781d0225920208e02c5eeaf74d3c61791fe9cfa0c85a6e8fe79021f1713653c9bd17f14cba039472954182264b7e268b7f80992a687
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 3.4.0 (November 12, 2019)
2
+
3
+ FEATURES:
4
+
5
+ - Create `vagrant` group on first boot of the box. [GH-37]
6
+ - Add a preflight check to ensure that VMware disk conversion will be successful. [GH-12]
7
+
8
+ BUG FIXES:
9
+
10
+ - Handle missing package in Parallels Tools. [GH-43]
11
+
12
+ IMPROVEMENTS:
13
+
14
+ - Remove dependency on vmware-rawdiskCreator tool.
15
+
1
16
  ## 3.3.0 (February 26, 2019)
2
17
 
3
18
  FEATURES:
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- macinbox (3.3.0)
4
+ macinbox (3.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -17,4 +17,4 @@ DEPENDENCIES
17
17
  rake (~> 10.0)
18
18
 
19
19
  BUNDLED WITH
20
- 1.16.1
20
+ 1.17.2
data/README.md CHANGED
@@ -24,13 +24,13 @@ The following software is required. Versions other than those mentioned may work
24
24
 
25
25
  To boot a box created by `macinbox` you will need Vagrant:
26
26
 
27
- * [Vagrant 2.2.3](https://www.vagrantup.com/)
27
+ * [Vagrant 2.2.5](https://www.vagrantup.com/)
28
28
 
29
29
  ### macOS Installer
30
30
 
31
31
  To create a box you will need a macOS installer application:
32
32
 
33
- * [macOS 10.14.3 Mojave installer application](http://appstore.com/mac/macosmojave)
33
+ * [macOS Mojave installer application](http://appstore.com/mac/macosmojave) Tested with 10.14.3, 10.14.4, 10.14.5, 10.14.6
34
34
 
35
35
  Previous versions of the macOS installer (e.g. High Sierra) may also work.
36
36
 
@@ -44,23 +44,21 @@ One of the following virtualization applications is required:
44
44
 
45
45
  To create and boot a box in the 'vmware_fusion' or 'vmware_desktop' formats you will need:
46
46
 
47
- * [VMware Fusion Pro 10.1.5](http://www.vmware.com/products/fusion.html)
48
- * [Vagrant VMware Desktop Provider 2.0.1](https://www.vagrantup.com/vmware/)
49
-
50
- **NOTE:** VMware Fusion Pro 11 is not yet supported for box creation; see [issue #12](https://github.com/bacongravy/macinbox/issues/12) for more information. As a workaround you can install `qemu-img` and pass the `--use-qemu` option.
47
+ * [VMware Fusion Pro 11.5.1](http://www.vmware.com/products/fusion.html)
48
+ * [Vagrant VMware Desktop Provider 2.0.3](https://www.vagrantup.com/vmware/)
51
49
 
52
50
  #### Parallels Desktop
53
51
 
54
52
  To create and boot a box in the 'parallels' format you will need:
55
53
 
56
- * [Parallels Desktop 14 for Mac Pro Edition 14.1.0](https://www.parallels.com/products/desktop/)
57
- * [Vagrant Parallels Provider 1.7.8](https://parallels.github.io/vagrant-parallels/)
54
+ * [Parallels Desktop 15 for Mac Pro Edition 15.0.0](https://www.parallels.com/products/desktop/)
55
+ * [Vagrant Parallels Provider 2.0.1](https://parallels.github.io/vagrant-parallels/)
58
56
 
59
57
  #### VirtualBox
60
58
 
61
59
  To create and boot a box in the 'virtualbox' format you will need:
62
60
 
63
- * [VirtualBox 6.0.2 with the extension pack](https://www.virtualbox.org)
61
+ * [VirtualBox 6.0.12 with the extension pack](https://www.virtualbox.org)
64
62
 
65
63
  ## Installation
66
64
 
@@ -228,7 +226,7 @@ opts[:full_name] = "Vagrant"
228
226
  opts[:password] = "vagrant"
229
227
  opts[:image_path] = "macinbox.sparseimage"
230
228
  opts[:boxes_dir] = File.expand_path "~/.vagrant.d/boxes"
231
- opts[:debug] = true
229
+ $debug = $verbose = true
232
230
 
233
231
  include Macinbox::Actions
234
232
 
data/lib/macinbox.rb CHANGED
@@ -4,7 +4,9 @@ require "macinbox/collector"
4
4
  require "macinbox/copyfiles"
5
5
  require "macinbox/error"
6
6
  require "macinbox/logger"
7
+ require "macinbox/os_version"
7
8
  require "macinbox/task"
8
9
  require "macinbox/tty"
9
10
  require "macinbox/version"
10
11
  require "macinbox/virtual_disk"
12
+ require "macinbox/vmdk"
@@ -1,3 +1,6 @@
1
+ require "macinbox/error"
2
+ require "macinbox/os_version"
3
+
1
4
  module Macinbox
2
5
 
3
6
  module Actions
@@ -16,21 +19,14 @@ module Macinbox
16
19
  install_info_plist = "#{@installer_app}/Contents/SharedSupport/InstallInfo.plist"
17
20
  raise Macinbox::Error.new("InstallInfo.plist not found in installer app bundle") unless File.exist? install_info_plist
18
21
 
19
- installer_os_version = Task.backtick %W[ /usr/libexec/PlistBuddy -c #{'Print :System\ Image\ Info:version'} #{install_info_plist} ]
20
- installer_os_version_components = installer_os_version.split(".") rescue [0, 0, 0]
21
- installer_os_version_major = installer_os_version_components[0]
22
- installer_os_version_minor = installer_os_version_components[1]
22
+ installer_os_version = Macinbox::OSVersion.new(Task.backtick %W[ /usr/libexec/PlistBuddy -c #{'Print :System\ Image\ Info:version'} #{install_info_plist} ])
23
23
  Logger.info "Installer macOS version detected: #{installer_os_version}" if $verbose
24
24
 
25
- host_os_version = Task.backtick %W[ /usr/bin/sw_vers -productVersion ]
26
- host_os_version_components = host_os_version.split(".") rescue [0, 0, 0]
27
- host_os_version_major = host_os_version_components[0]
28
- host_os_version_minor = host_os_version_components[1]
25
+ host_os_version = Macinbox::OSVersion.new(Task.backtick %W[ /usr/bin/sw_vers -productVersion ])
29
26
  Logger.info "Host macOS version detected: #{host_os_version}" if $verbose
30
27
 
31
- if installer_os_version_major != host_os_version_major || installer_os_version_minor != host_os_version_minor
28
+ if installer_os_version.major != host_os_version.major || installer_os_version.minor != host_os_version.minor
32
29
  Logger.error "Warning: host OS version (#{host_os_version}) and installer OS version (#{installer_os_version}) do not match"
33
- # raise Macinbox::Error.new("host OS version (#{host_os_version}) and installer OS version (#{installer_os_version}) do not match")
34
30
  end
35
31
 
36
32
  installer_os_version
@@ -6,6 +6,7 @@ require 'macinbox/error'
6
6
  require 'macinbox/logger'
7
7
  require 'macinbox/task'
8
8
  require 'macinbox/virtual_disk'
9
+ require 'macinbox/vmdk'
9
10
 
10
11
  module Macinbox
11
12
 
@@ -94,8 +95,10 @@ module Macinbox
94
95
  FileUtils.mkdir tools_expanded_packages_dir
95
96
 
96
97
  tools_packages.each do |package|
97
- Task.run %W[ /usr/sbin/pkgutil --expand #{tools_packages_dir}/#{package} #{tools_expanded_packages_dir}/#{package} ]
98
- Task.run %W[ /usr/bin/ditto -x -z #{tools_expanded_packages_dir}/#{package}/Payload #{@image_mountpoint} ]
98
+ if File.exist? "#{tools_packages_dir}/#{package}"
99
+ Task.run %W[ /usr/sbin/pkgutil --expand #{tools_packages_dir}/#{package} #{tools_expanded_packages_dir}/#{package} ]
100
+ Task.run %W[ /usr/bin/ditto -x -z #{tools_expanded_packages_dir}/#{package}/Payload #{@image_mountpoint} ]
101
+ end
99
102
  end
100
103
 
101
104
  prl_nettool_source = "/Library/Parallels Guest Tools/prl_nettool"
@@ -122,53 +125,7 @@ module Macinbox
122
125
 
123
126
  def convert_image
124
127
  Logger.info "Converting the image to HDD format..." do
125
-
126
- disk_info = Task.backtick %W[ /usr/sbin/fdisk #{@disk.device} ]
127
-
128
- geometry_re = /geometry: (\d+)\/(\d+)\/(\d+) \[(\d+) sectors\]/
129
-
130
- match = geometry_re.match(disk_info)
131
-
132
- raise Macinbox::Error.new("failed to determine disk geometry") if match.nil? || match.captures.length != 4
133
-
134
- device_sectors = match.captures[3]
135
-
136
- device_cylinders = match.captures[0]
137
- device_heads_per_track = match.captures[1]
138
- device_sectors_per_track = match.captures[2]
139
-
140
- bios_cylinders = 1024
141
- bios_heads_per_track = device_heads_per_track
142
- bios_sectors_per_track = device_sectors_per_track
143
-
144
- File.write "#{@temp_dir}/macinbox.vmdk", <<~EOF
145
- # Disk DescriptorFile
146
- version=1
147
- encoding="UTF-8"
148
- CID=fffffffe
149
- parentCID=ffffffff
150
- isNativeSnapshot="no"
151
- createType="monolithicFlat"
152
-
153
- # Extent description
154
- RW #{device_sectors} FLAT "#{@disk.device}" 0
155
-
156
- # The Disk Data Base
157
- #DDB
158
-
159
- ddb.adapterType = "lsilogic"
160
- ddb.deletable = "true"
161
- ddb.geometry.biosCylinders = "#{bios_cylinders}"
162
- ddb.geometry.biosHeads = "#{bios_heads_per_track}"
163
- ddb.geometry.biosSectors = "#{bios_sectors_per_track}"
164
- ddb.geometry.cylinders = "#{device_cylinders}"
165
- ddb.geometry.heads = "#{device_heads_per_track}"
166
- ddb.geometry.sectors = "#{device_sectors_per_track}"
167
- ddb.longContentID = "9fa218b506cfe68615c39994fffffffe"
168
- ddb.uuid = "60 00 C2 99 91 76 dd 77-6e 0d 84 8b b0 24 6e 00"
169
- ddb.virtualHWVersion = "14"
170
- EOF
171
-
128
+ VMDK.create_raw_vmdk(@disk.device, "#{@temp_dir}/macinbox.vmdk")
172
129
  prl_convert = "#{@parallels_app}/Contents/MacOS/prl_convert"
173
130
  task_opts = $verbose ? {} : { :out => File::NULL }
174
131
  Task.run %W[ #{prl_convert} #{@temp_dir}/macinbox.vmdk --allow-no-os --dst=#{@temp_dir} ] + [task_opts]
@@ -48,6 +48,7 @@ module Macinbox
48
48
  install_macos
49
49
  create_rc_vagrant
50
50
  automate_user_account_creation
51
+ automate_vagrant_group_creation
51
52
  automate_vagrant_ssh_key_installation
52
53
  enable_passwordless_sudo
53
54
  enable_sshd
@@ -107,17 +108,28 @@ module Macinbox
107
108
  end
108
109
 
109
110
  def create_rc_vagrant
110
- scratch_rc_installer_cleanup = "#{@scratch_mountpoint}/private/etc/rc.installer_cleanup"
111
- @scratch_rc_vagrant = "#{@scratch_mountpoint}/private/etc/rc.vagrant"
112
- File.write scratch_rc_installer_cleanup, <<~EOF
113
- #!/bin/sh
114
- rm -f /etc/rc.installer_cleanup
115
- /etc/rc.vagrant &
116
- exit 0
111
+ first_boot_launch_daemon = "#{@scratch_mountpoint}/Library/LaunchDaemons/rc.vagrant.plist"
112
+ File.write first_boot_launch_daemon, <<~EOF
113
+ <?xml version="1.0" encoding="UTF-8"?>
114
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
115
+ <plist version="1.0">
116
+ <dict>
117
+ <key>Label</key>
118
+ <string>rc.vagrant</string>
119
+ <key>ProgramArguments</key>
120
+ <array>
121
+ <string>/etc/rc.vagrant</string>
122
+ </array>
123
+ <key>RunAtLoad</key>
124
+ <true/>
125
+ </dict>
126
+ </plist>
117
127
  EOF
118
- FileUtils.chmod 0755, scratch_rc_installer_cleanup
128
+ FileUtils.chmod 0755, first_boot_launch_daemon
129
+ @scratch_rc_vagrant = "#{@scratch_mountpoint}/private/etc/rc.vagrant"
119
130
  File.write @scratch_rc_vagrant, <<~EOF
120
131
  #!/bin/sh
132
+ rm -r /Library/LaunchDaemons/rc.vagrant.plist
121
133
  rm -f /etc/rc.vagrant
122
134
  EOF
123
135
  FileUtils.chmod 0755, @scratch_rc_vagrant
@@ -154,6 +166,23 @@ module Macinbox
154
166
  end
155
167
  end
156
168
 
169
+ def automate_vagrant_group_creation
170
+ if @short_name == "vagrant"
171
+ Logger.info "Configuring the 'vagrant' group..." do
172
+ contents = <<~EOF
173
+ until dscl . -read /Users/vagrant UniqueID; do
174
+ sleep 1
175
+ done
176
+ dscl . -create /Groups/vagrant
177
+ dscl . -create /Groups/vagrant gid 501
178
+ dscl . -create /Groups/vagrant GroupMembers `dscl . -read /Users/vagrant GeneratedUID | cut -d ' ' -f 2`
179
+ dscl . -create /Groups/vagrant GroupMembership vagrant
180
+ EOF
181
+ File.write @scratch_rc_vagrant, contents, mode: 'a'
182
+ end
183
+ end
184
+ end
185
+
157
186
  def automate_vagrant_ssh_key_installation
158
187
  if @short_name == "vagrant"
159
188
  Logger.info "Installing the default insecure vagrant ssh key..." do
@@ -6,6 +6,7 @@ require 'macinbox/error'
6
6
  require 'macinbox/logger'
7
7
  require 'macinbox/task'
8
8
  require 'macinbox/virtual_disk'
9
+ require 'macinbox/vmdk'
9
10
 
10
11
  module Macinbox
11
12
 
@@ -139,11 +140,15 @@ module Macinbox
139
140
  else
140
141
  @disk.attach
141
142
  task_opts = $verbose ? {} : { :out => File::NULL }
142
- rawdiskCreator = "#{@vmware_fusion_app}/Contents/Library/vmware-rawdiskCreator"
143
143
  vdiskmanager = "#{@vmware_fusion_app}/Contents/Library/vmware-vdiskmanager"
144
144
  Dir.chdir(@temp_dir) do
145
- Task.run %W[ #{rawdiskCreator} create #{@disk.device} fullDevice rawdisk lsilogic ] + [task_opts]
146
- Task.run %W[ #{vdiskmanager} -t 0 -r rawdisk.vmdk macinbox.vmdk ] + [task_opts]
145
+ VMDK.create_raw_vmdk(@disk.device, "rawdisk.vmdk")
146
+ begin
147
+ Task.run %W[ #{vdiskmanager} -t 0 -r rawdisk.vmdk macinbox.vmdk ] + [task_opts]
148
+ rescue Macinbox::Error => e
149
+ Logger.error "If the conversion failed due to an AppleXPC error please see https://kb.vmware.com/s/article/65163 for a possible workaround."
150
+ raise e
151
+ end
147
152
  end
148
153
  @disk.eject
149
154
  end
@@ -17,7 +17,7 @@ module Macinbox
17
17
  @box_format = opts[:box_format] or raise ArgumentError.new(":box_format not specified")
18
18
  @boxes_dir = opts[:boxes_dir] or raise ArgumentError.new(":boxes_dir not specified")
19
19
 
20
- @box_version = opts[:macos_version]
20
+ @box_version = opts[:macos_version].to_s rescue nil
21
21
 
22
22
  raise Macinbox::Error.new("box not found: #{@input_box}") unless File.exist? @input_box
23
23
  raise Macinbox::Error.new("boxes directory not found: #{@boxes_dir}") unless File.exist? @boxes_dir
data/lib/macinbox/cli.rb CHANGED
@@ -57,8 +57,12 @@ module Macinbox
57
57
  raise Macinbox::Error.new("Box format not supported: #{@options[:box_format]}")
58
58
  end
59
59
 
60
- if /^vmware_(fusion|desktop)$/ === @options[:box_format] && !File.exists?(@options[:vmware_path])
61
- raise Macinbox::Error.new("VMware Fusion app not found: #{@options[:vmware_path]}")
60
+ if /^vmware_(fusion|desktop)$/ === @options[:box_format]
61
+ unless File.exists?(@options[:vmware_path])
62
+ raise Macinbox::Error.new("VMware Fusion app not found: #{@options[:vmware_path]}")
63
+ end
64
+ vmware_version = Task.backtick %W[ defaults read #{@options[:vmware_path]}/Contents/Info.plist CFBundleShortVersionString ]
65
+ @options[:vmware_major_version] = vmware_version.split(".")[0].to_i rescue 10
62
66
  end
63
67
 
64
68
  if /^parallels$/ === @options[:box_format] && !File.exists?(@options[:parallels_path])
@@ -73,6 +77,18 @@ module Macinbox
73
77
  raise Macinbox::Error.new("QEMU not found: /usr/local/bin/qemu-img")
74
78
  end
75
79
 
80
+ if /^vmware_(fusion|desktop)$/ === @options[:box_format] && !@options[:use_qemu] && @options[:vmware_major_version] >= 11
81
+ fusion_is_not_running = false
82
+ begin
83
+ Task.run %W[ pgrep -q #{"^VMware Fusion$"} ]
84
+ rescue
85
+ fusion_is_not_running = true
86
+ end
87
+ if fusion_is_not_running || !File.exist?("/Library/PrivilegedHelperTools/com.vmware.DiskHelper")
88
+ raise Macinbox::Error.new("VMware Fusion is not running and the workaround was not detected. See https://kb.vmware.com/s/article/65163 for more information, or try the --use-qemu option.")
89
+ end
90
+ end
91
+
76
92
  vagrant_home = ENV["VAGRANT_HOME"]
77
93
 
78
94
  if vagrant_home.nil? or vagrant_home.empty?
@@ -0,0 +1,56 @@
1
+ module Macinbox
2
+
3
+ class OSVersion
4
+
5
+ def initialize(version)
6
+ @version = version
7
+ @components = @version.split(".") rescue [0, 0]
8
+ end
9
+
10
+ def to_s
11
+ @version
12
+ end
13
+
14
+ def major
15
+ @components[0].to_i rescue 0
16
+ end
17
+
18
+ def minor
19
+ @components[1].to_i rescue 0
20
+ end
21
+
22
+ def darwin_major
23
+ minor + 4
24
+ end
25
+
26
+ def is_sierra?
27
+ major == 10 && minor == 12
28
+ end
29
+
30
+ def is_high_sierra?
31
+ major == 10 && minor == 13
32
+ end
33
+
34
+ def is_mojave?
35
+ major == 10 && minor == 14
36
+ end
37
+
38
+ def is_catalina?
39
+ major == 10 && minor == 15
40
+ end
41
+
42
+ def is_sierra_or_later?
43
+ major == 10 && minor >= 12
44
+ end
45
+
46
+ def is_mojave_or_earlier?
47
+ major == 10 && minor <= 14
48
+ end
49
+
50
+ def is_catalina_or_later?
51
+ major == 10 && minor >= 15
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -1,3 +1,3 @@
1
1
  module Macinbox
2
- VERSION = "3.3.0"
2
+ VERSION = "3.4.0"
3
3
  end
@@ -0,0 +1,60 @@
1
+ require 'macinbox/error'
2
+ require 'macinbox/task'
3
+
4
+ module Macinbox
5
+
6
+ class VMDK
7
+
8
+ def self.create_raw_vmdk(device, output)
9
+
10
+ disk_info = Task.backtick %W[ /usr/sbin/fdisk #{device} ]
11
+
12
+ geometry_re = /geometry: (\d+)\/(\d+)\/(\d+) \[(\d+) sectors\]/
13
+
14
+ match = geometry_re.match(disk_info)
15
+
16
+ raise Macinbox::Error.new("failed to determine disk geometry") if match.nil? || match.captures.length != 4
17
+
18
+ device_sectors = match.captures[3]
19
+
20
+ device_cylinders = match.captures[0]
21
+ device_heads_per_track = match.captures[1]
22
+ device_sectors_per_track = match.captures[2]
23
+
24
+ bios_cylinders = 1024
25
+ bios_heads_per_track = device_heads_per_track
26
+ bios_sectors_per_track = device_sectors_per_track
27
+
28
+ File.write output, <<~EOF
29
+ # Disk DescriptorFile
30
+ version=1
31
+ encoding="UTF-8"
32
+ CID=fffffffe
33
+ parentCID=ffffffff
34
+ isNativeSnapshot="no"
35
+ createType="monolithicFlat"
36
+
37
+ # Extent description
38
+ RW #{device_sectors} FLAT "#{device}" 0
39
+
40
+ # The Disk Data Base
41
+ #DDB
42
+
43
+ ddb.adapterType = "lsilogic"
44
+ ddb.deletable = "true"
45
+ ddb.geometry.biosCylinders = "#{bios_cylinders}"
46
+ ddb.geometry.biosHeads = "#{bios_heads_per_track}"
47
+ ddb.geometry.biosSectors = "#{bios_sectors_per_track}"
48
+ ddb.geometry.cylinders = "#{device_cylinders}"
49
+ ddb.geometry.heads = "#{device_heads_per_track}"
50
+ ddb.geometry.sectors = "#{device_sectors_per_track}"
51
+ ddb.longContentID = "9fa218b506cfe68615c39994fffffffe"
52
+ ddb.uuid = "60 00 C2 99 91 76 dd 77-6e 0d 84 8b b0 24 6e 00"
53
+ ddb.virtualHWVersion = "14"
54
+ EOF
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macinbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Kramer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-27 00:00:00.000000000 Z
11
+ date: 2019-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,10 +74,12 @@ files:
74
74
  - lib/macinbox/copyfiles.rb
75
75
  - lib/macinbox/error.rb
76
76
  - lib/macinbox/logger.rb
77
+ - lib/macinbox/os_version.rb
77
78
  - lib/macinbox/task.rb
78
79
  - lib/macinbox/tty.rb
79
80
  - lib/macinbox/version.rb
80
81
  - lib/macinbox/virtual_disk.rb
82
+ - lib/macinbox/vmdk.rb
81
83
  - macinbox.gemspec
82
84
  homepage: https://github.com/bacongravy/macinbox
83
85
  licenses:
@@ -101,8 +103,7 @@ requirements:
101
103
  - macOS Mojave
102
104
  - macOS Mojave installer app
103
105
  - Vagrant
104
- rubyforge_project:
105
- rubygems_version: 2.5.2.3
106
+ rubygems_version: 3.0.3
106
107
  signing_key:
107
108
  specification_version: 4
108
109
  summary: Puts macOS in a Vagrant box