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 +5 -5
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +2 -2
- data/README.md +8 -10
- data/lib/macinbox.rb +2 -0
- data/lib/macinbox/actions/check_macos_versions.rb +6 -10
- data/lib/macinbox/actions/create_hdd_from_image.rb +6 -49
- data/lib/macinbox/actions/create_image_from_installer.rb +37 -8
- data/lib/macinbox/actions/create_vmdk_from_image.rb +8 -3
- data/lib/macinbox/actions/install_box.rb +1 -1
- data/lib/macinbox/cli.rb +18 -2
- data/lib/macinbox/os_version.rb +56 -0
- data/lib/macinbox/version.rb +1 -1
- data/lib/macinbox/vmdk.rb +60 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 36a4f3b181302a8a5d4efdf5e23d97add1b2f7424c1b981d0fa8467f4317a398
|
4
|
+
data.tar.gz: cbab11b8a79ee6eb57db5e164ac34867a3e892f97b166afe3176d1ed9f629657
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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.
|
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
|
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
|
48
|
-
* [Vagrant VMware Desktop Provider 2.0.
|
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
|
57
|
-
* [Vagrant Parallels Provider
|
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.
|
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
|
-
|
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
|
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
|
-
|
98
|
-
|
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
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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,
|
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
|
-
|
146
|
-
|
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]
|
61
|
-
|
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
|
data/lib/macinbox/version.rb
CHANGED
@@ -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.
|
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-
|
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
|
-
|
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
|