Class: Macinbox::VirtualDisk
- Inherits:
-
Object
- Object
- Macinbox::VirtualDisk
- Defined in:
- lib/macinbox/virtual_disk.rb
Instance Method Summary collapse
- #attach ⇒ Object
- #convert(format: 'UDZO', outfile:) ⇒ Object
- #create(disk_size, fstype) ⇒ Object
- #create_from_folder(srcfolder) ⇒ Object
- #detach! ⇒ Object
- #device ⇒ Object
- #eject ⇒ Object
-
#initialize(image) ⇒ VirtualDisk
constructor
A new instance of VirtualDisk.
- #mount(at: nil, owners: false) ⇒ Object
- #mount_efi(at:) ⇒ Object
- #mountpoint ⇒ Object
- #set_devices(devices) ⇒ Object
- #unmount_efi ⇒ Object
- #unset_devices ⇒ Object
Constructor Details
#initialize(image) ⇒ VirtualDisk
Returns a new instance of VirtualDisk.
9 10 11 12 13 |
# File 'lib/macinbox/virtual_disk.rb', line 9 def initialize(image) @image = image @quiet_flag = $verbose ? [] : %W[ -quiet ] @task_opts = $verbose ? [] : [{ :out => File::NULL }] end |
Instance Method Details
#attach ⇒ Object
49 50 51 |
# File 'lib/macinbox/virtual_disk.rb', line 49 def attach set_devices(Task.backtick %W[ /usr/bin/hdiutil attach #{@image} -nomount ]) end |
#convert(format: 'UDZO', outfile:) ⇒ Object
45 46 47 |
# File 'lib/macinbox/virtual_disk.rb', line 45 def convert(format: 'UDZO', outfile:) Task.run %W[ /usr/bin/hdiutil convert -format #{format} -o #{outfile} #{@image} ] + @quiet_flag end |
#create(disk_size, fstype) ⇒ Object
41 42 43 |
# File 'lib/macinbox/virtual_disk.rb', line 41 def create(disk_size, fstype) Task.run %W[ /usr/bin/hdiutil create -size #{disk_size}g -type SPARSE -fs #{fstype} -volname #{"Macintosh HD"} -uid 0 -gid 80 -mode 1775 #{@image} ] + @quiet_flag end |
#create_from_folder(srcfolder) ⇒ Object
37 38 39 |
# File 'lib/macinbox/virtual_disk.rb', line 37 def create_from_folder(srcfolder) Task.run %W[ /usr/bin/hdiutil create -srcfolder #{srcfolder} #{@image} ] + @quiet_flag end |
#detach! ⇒ Object
83 84 85 86 87 |
# File 'lib/macinbox/virtual_disk.rb', line 83 def detach! return unless @disk_device %x( /usr/bin/hdiutil detach -quiet -force #{@disk_device.shellescape} > /dev/null 2>&1 ) unset_devices end |
#device ⇒ Object
15 16 17 |
# File 'lib/macinbox/virtual_disk.rb', line 15 def device @disk_device end |
#eject ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/macinbox/virtual_disk.rb', line 67 def eject max_attempts = 5 for attempt in 1..max_attempts begin quiet = $verbose ? [] : %W[ quiet ] Task.run %W[ /usr/sbin/diskutil ] + quiet + %W[ eject #{@disk_device} ] + @task_opts unset_devices break rescue Macinbox::Error => error raise if attempt == max_attempts Logger.info "Eject failed: #{error.}. Sleeping and retrying..." if $verbose sleep 15 end end end |
#mount(at: nil, owners: false) ⇒ Object
53 54 55 56 57 |
# File 'lib/macinbox/virtual_disk.rb', line 53 def mount(at: nil, owners: false) mount_option = at ? %W[ -mountpoint #{at} ] : [] owners_option = owners ? %W[ -owners on ] : [] Task.run %W[ /usr/bin/hdiutil attach #{@volume_device} -nobrowse ] + mount_option + owners_option + @quiet_flag end |
#mount_efi(at:) ⇒ Object
59 60 61 |
# File 'lib/macinbox/virtual_disk.rb', line 59 def mount_efi(at:) Task.run %W[ /usr/sbin/diskutil mount -mountPoint #{at} #{@efi_device} ] + @task_opts end |
#mountpoint ⇒ Object
32 33 34 35 |
# File 'lib/macinbox/virtual_disk.rb', line 32 def mountpoint disk_info = Task.backtick %W[ /usr/sbin/diskutil info #{@volume_device} ] disk_info[/Mount Point:\s+(.*)/, 1] end |
#set_devices(devices) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/macinbox/virtual_disk.rb', line 19 def set_devices(devices) @disk_device = devices[/([^ \n]*)([ \t])+\w*_partition_scheme/, 1] @efi_device = devices[/([^ \n]*)([ \t])+EFI/, 1] @volume_device = devices[/([^ \n]*)([ \t])+(Apple_HFS|41504653-0000-11AA-AA11-0030654)/, 1] raise Macinbox::Error.new("failed to attach the image") unless File.exist? @disk_device end |
#unmount_efi ⇒ Object
63 64 65 |
# File 'lib/macinbox/virtual_disk.rb', line 63 def unmount_efi Task.run %W[ /usr/sbin/diskutil unmount #{@efi_device} ] + @task_opts end |
#unset_devices ⇒ Object
26 27 28 29 30 |
# File 'lib/macinbox/virtual_disk.rb', line 26 def unset_devices @disk_device = nil @efi_device = nil @volume_device = nil end |