iesd 1.0.3 → 1.1.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
  SHA1:
3
- metadata.gz: 22dd8da8e5ab36c59736224a7f76e7042a75970e
4
- data.tar.gz: 67aaeabf09594bb882c726575c856120df92533d
3
+ metadata.gz: fb4d3cc64133af8167ed061b619cc907b529f08b
4
+ data.tar.gz: 84fd6d472f6e46bc9d8447bcb9531e4be18f22f0
5
5
  SHA512:
6
- metadata.gz: ce21b053f50b227d8e7174b4aa6391f81219bca1f44d33b53eb0119b44169dccea7fcf5bf7f948962dc328572fd34a8bbd81bed3558f616bc08474bd40313674
7
- data.tar.gz: 43881eae97886ff44d6d0ec1ac278067e9c6f282f1c64e45fe5c886fe0eea28b3abcc375f411d29a2652202568d3ba6a70e5fa64f393c760686f2594ea5d9068
6
+ metadata.gz: dd9b62cf21516bbc29f1ebbadaa2cbf6fa7605e412660a94f271709b5ac3dc543c42a774892156caccecb5ec6b9bd0a7ebec33e27ba0afbb6a44b91569002d6e
7
+ data.tar.gz: d50a0b0af9cf6d710f995fb5e2228bb1fe97aea6ead280c39440b0d895e7a2f0fcc38ebcf7ac4db4b9ecd4ce947590ade597c4658abf146cd45b6ee51d79f7c2
data/bin/iesd CHANGED
@@ -17,13 +17,20 @@ options = {
17
17
  :input => nil,
18
18
  :output => nil,
19
19
  :type => nil,
20
+ :interactive => false,
21
+ :hdiutil => {
22
+ :resize => {
23
+ :grow => 0,
24
+ :shrink => false
25
+ }
26
+ },
27
+ :mach_kernel => nil,
20
28
  :extensions => {
21
29
  :install => [],
22
30
  :remove => [],
23
31
  :kextcache => nil,
24
32
  :postinstall => true
25
- },
26
- :mach_kernel => nil
33
+ }
27
34
  }
28
35
 
29
36
  optparse = OptionParser.new do |opts|
@@ -33,48 +40,70 @@ optparse = OptionParser.new do |opts|
33
40
  opts.separator "Specific options:"
34
41
 
35
42
  opts.on("-i", "--input inputfile",
36
- "Specify inputfile (dmg or app)") do |input|
43
+ "Input file (dmg or app)") do |input|
37
44
  options[:input] = File.absolute_path input
38
45
  end
39
46
 
40
47
  opts.on("-o", "--output outputfile",
41
- "Specify outputfile (dmg)") do |output|
48
+ "Output file (dmg)") do |output|
42
49
  output << ".dmg" if File.extname(output).downcase != ".dmg"
43
50
  options[:output] = File.absolute_path output
44
51
  end
45
52
 
46
53
  opts.on("-t", "--type type", [:BaseSystem, :InstallESD],
47
- "Specify type (BaseSystem, InstallESD)") do |type|
54
+ "Output type (BaseSystem, InstallESD)") do |type|
48
55
  options[:type] = type
49
56
  end
50
57
 
51
- opts.on("--install-kexts x.kext,y.kext,z.kext", Array, "Specify list of kexts to install") do |list|
52
- options[:extensions][:install] = list.map { |kext| File.absolute_path kext }
58
+ opts.on("-s", "--[no-]interactive-shell", "Edit in #{ENV["SHELL"]}") do |interactive|
59
+ options[:interactive] = interactive
60
+ end
61
+
62
+ opts.separator ""
63
+ opts.separator "HDIUtil options:"
64
+
65
+ opts.on("--grow sectors", OptionParser::DecimalInteger,
66
+ "Grow dmg size by number of sectors") do |sectors|
67
+ options[:hdiutil][:resize][:grow] = sectors
68
+ end
69
+
70
+ opts.on("--[no-]shrink", "Shrink output dmg") do |s|
71
+ options[:hdiutil][:resize][:shrink] = s
72
+ end
73
+
74
+ opts.separator ""
75
+ opts.separator "Boot options:"
76
+
77
+ opts.on("--[no-]kernel", "Use mach_kernel as fallback to kernelcache") do |k|
78
+ options[:mach_kernel] = k
53
79
  end
54
80
 
55
- opts.on("--remove-kexts x.kext,y.kext,z.kext", Array, "Specify list of kexts to remove") do |list|
81
+ opts.separator ""
82
+ opts.separator "Extension options:"
83
+
84
+ opts.on("--remove-kexts x.kext,y.kext,z.kext", Array, "Kexts to remove") do |list|
56
85
  options[:extensions][:remove] = list
57
86
  end
58
87
 
59
- opts.on("--[no-]kextcache", "Rebuild kernelcache") do |c|
60
- options[:extensions][:kextcache] = c
88
+ opts.on("--install-kexts x.kext,y.kext,z.kext", Array, "Kexts to install") do |list|
89
+ options[:extensions][:install] = list.map { |kext| File.absolute_path kext }
61
90
  end
62
91
 
63
- opts.on("--[no-]postinstall-kexts", "Patch OSInstall.pkg for postinstall kexts") do |p|
92
+ opts.on("--[no-]postinstall-kexts", "Patch OSInstall.pkg to postinstall kexts") do |p|
64
93
  options[:extensions][:postinstall] = p
65
94
  end
66
95
 
67
- opts.on("--[no-]kernel", "Use mach_kernel as fallback to kextcache") do |k|
68
- options[:mach_kernel] = k
96
+ opts.on("--[no-]kextcache", "Rebuild kernelcache") do |c|
97
+ options[:extensions][:kextcache] = c
69
98
  end
70
99
 
100
+ opts.separator ""
101
+ opts.separator "Common options:"
102
+
71
103
  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
72
104
  ENV['VERBOSE'] = '1'
73
105
  end
74
106
 
75
- opts.separator ""
76
- opts.separator "Common options:"
77
-
78
107
  opts.on_tail("-h", "--help", "Show this message") do
79
108
  puts opts
80
109
  exit
@@ -2,7 +2,7 @@ Gem::Specification.new do |s|
2
2
  s.required_ruby_version = ">= 1.9.2"
3
3
 
4
4
  s.name = "iesd"
5
- s.version = "1.0.3"
5
+ s.version = "1.1.0"
6
6
  s.summary = "Customize OS X InstallESD."
7
7
  s.description = "Modify Extensions, Kextcache and Packages on InstallESD."
8
8
  s.authors = "なつき"
@@ -3,21 +3,27 @@ module IESD
3
3
  class BaseSystem < HDIUtil::DMG
4
4
  PACKAGES = %w{ System Installation Packages }
5
5
 
6
- def export options, add_sectors = 0
6
+ def export options
7
7
  case options[:type]
8
8
  when :BaseSystem, nil
9
9
  Dir.mktmpdir { |tmp|
10
- HDIUtil.write(@url, (tmpfile = File.join(tmp, File.basename(@url))), add_sectors) { |volume_root|
10
+ HDIUtil.write(@url, (tmpfile = File.join(tmp, File.basename(@url))), options[:hdiutil]) { |volume_root|
11
11
  options[:extensions][:up_to_date] = (options[:extensions][:remove].empty? and options[:extensions][:install].empty?)
12
12
  options[:mach_kernel] = File.exist? File.join(volume_root, "mach_kernel") if options[:mach_kernel].nil?
13
13
 
14
14
  yield volume_root if block_given?
15
15
 
16
- pre_update volume_root, options
16
+ pre_update_extension volume_root, options
17
17
 
18
18
  IESD::DMG::BaseSystem::Extensions.new(volume_root).update options[:extensions]
19
19
 
20
- post_update volume_root, options
20
+ post_update_extension volume_root, options
21
+
22
+ if options[:interactive]
23
+ oh1 "Starting Interactive Shell"
24
+ puts "Environment: BaseSystem"
25
+ HDIUtil.shell volume_root
26
+ end
21
27
  }
22
28
  system(Utility::MV, tmpfile, options[:output])
23
29
  }
@@ -28,14 +34,14 @@ module IESD
28
34
 
29
35
  private
30
36
 
31
- def pre_update volume_root, options
37
+ def pre_update_extension volume_root, options
32
38
  if !File.exist? (mach_kernel = File.join(volume_root, "mach_kernel")) and (options[:mach_kernel] or !options[:extensions][:up_to_date])
33
39
  IESD::Packages::BaseSystemBinaries.new(File.join(volume_root, *PACKAGES, "BaseSystemBinaries.pkg")).extract_mach_kernel mach_kernel
34
40
  system(Utility::CHFLAGS, "hidden", mach_kernel)
35
41
  end
36
42
  end
37
43
 
38
- def post_update volume_root, options
44
+ def post_update_extension volume_root, options
39
45
  if !options[:extensions][:up_to_date] and options[:extensions][:postinstall]
40
46
  IESD::Packages::OSInstall.new(File.join(volume_root, *PACKAGES, "OSInstall.pkg")).postinstall_extensions options[:extensions]
41
47
  end
@@ -6,9 +6,17 @@ module IESD
6
6
  def export options
7
7
  case options[:type]
8
8
  when :BaseSystem
9
- resize_limits = `#{Utility::HDIUTIL} resize -limits "#{@url}"`.chomp.split.map { |s| s.to_i }
9
+ options = {
10
+ :hdiutil => {
11
+ :resize => {
12
+ :grow => 0,
13
+ }
14
+ }
15
+ }.merge(options)
16
+ options[:hdiutil][:resize][:grow] += ( `#{Utility::HDIUTIL} resize -limits "#{@url}"`.chomp.split.map { |s| s.to_i } ).first
17
+
10
18
  show { |installesd|
11
- IESD::DMG::BaseSystem.new(File.join(installesd, "BaseSystem.dmg")).export(options, resize_limits[0]) { |basesystem|
19
+ IESD::DMG::BaseSystem.new(File.join(installesd, "BaseSystem.dmg")).export(options) { |basesystem|
12
20
  installesd_packages = File.join installesd, PACKAGES
13
21
  basesystem_packages = File.join basesystem, *IESD::DMG::BaseSystem::PACKAGES
14
22
  oh1 "Copying #{installesd_packages}"
@@ -28,13 +36,13 @@ module IESD
28
36
  }
29
37
  when :InstallESD, nil
30
38
  Dir.mktmpdir { |tmp|
31
- HDIUtil.write(@url, (tmpfile = File.join(tmp, File.basename(@url)))) { |installesd|
39
+ HDIUtil.write(@url, (tmpfile = File.join(tmp, File.basename(@url))), options[:hdiutil]) { |installesd|
32
40
  options[:extensions][:up_to_date] = (options[:extensions][:remove].empty? and options[:extensions][:install].empty?)
33
41
  options[:mach_kernel] = File.exist? File.join(installesd, "mach_kernel") if options[:mach_kernel].nil?
34
42
 
35
43
  yield installesd if block_given?
36
44
 
37
- pre_update installesd, options
45
+ pre_update_extension installesd, options
38
46
 
39
47
  basesystem_options = options.clone
40
48
  basesystem_options[:input] = basesystem_options[:output] = File.join(installesd, "BaseSystem.dmg")
@@ -60,7 +68,13 @@ module IESD
60
68
  }
61
69
  end
62
70
 
63
- post_update installesd, options
71
+ post_update_extension installesd, options
72
+
73
+ if options[:interactive]
74
+ oh1 "Starting Interactive Shell"
75
+ puts "Environment: InstallESD"
76
+ HDIUtil.shell installesd
77
+ end
64
78
  }
65
79
  system(Utility::MV, tmpfile, options[:output])
66
80
  }
@@ -71,14 +85,14 @@ module IESD
71
85
 
72
86
  private
73
87
 
74
- def pre_update volume_root, options
88
+ def pre_update_extension volume_root, options
75
89
  if !File.exist? (mach_kernel = File.join(volume_root, "mach_kernel")) and (options[:mach_kernel] or !options[:extensions][:up_to_date])
76
90
  IESD::Packages::BaseSystemBinaries.new(File.join(volume_root, *PACKAGES, "BaseSystemBinaries.pkg")).extract_mach_kernel mach_kernel
77
91
  system(Utility::CHFLAGS, "hidden", mach_kernel)
78
92
  end
79
93
  end
80
94
 
81
- def post_update volume_root, options
95
+ def post_update_extension volume_root, options
82
96
  if !options[:extensions][:up_to_date] and options[:extensions][:postinstall]
83
97
  IESD::Packages::OSInstall.new(File.join(volume_root, *PACKAGES, "OSInstall.pkg")).postinstall_extensions options[:extensions]
84
98
  end
@@ -1,5 +1,5 @@
1
1
  module HDIUtil
2
- DEFAULT_MOUNT_OPTIONS = %w{ -nobrowse -quiet -noverify}
2
+ DEFAULT_MOUNT_OPTIONS = %w{ -nobrowse -quiet -noverify }
3
3
  DEFAULT_MOUNT_OPTIONS.concat(%w{ -owners on }) if Process.uid == 0
4
4
  DEFAULT_UNMOUNT_OPTIONS = %w{ -quiet }
5
5
  DEFAULT_CONVERT_OPTIONS = %w{ -quiet }
@@ -16,14 +16,21 @@ module HDIUtil
16
16
  }
17
17
  end
18
18
 
19
- def self.write input, output, add_sectors = 0
19
+ def self.write input, output, options = {}
20
+ options = {
21
+ :resize => {
22
+ :grow => 0,
23
+ :shrink => false
24
+ }
25
+ }.merge(options)
26
+
20
27
  Dir.mktmpdir { |tmp|
21
28
  shadow = File.join(tmp, "#{File.basename input}.shadow")
22
29
  shadow_options = ["-shadow", shadow]
23
30
  format_options = ["-format", `#{Utility::HDIUTIL} imageinfo -format "#{input}"`.chomp]
24
31
  Dir.mktmpdir(nil, tmp) { |mountpoint|
25
32
  resize_limits = `#{Utility::HDIUTIL} resize -limits -shadow "#{shadow}" "#{input}"`.chomp.split.map { |s| s.to_i }
26
- sectors = (resize_limits[1] + add_sectors).to_s
33
+ sectors = (resize_limits[1] + options[:resize][:grow]).to_s
27
34
  system(Utility::HDIUTIL, "resize", "-growonly", "-sectors", sectors, *shadow_options, input)
28
35
  attach input, mountpoint, [*DEFAULT_MOUNT_OPTIONS, *shadow_options]
29
36
  if block_given?
@@ -32,7 +39,7 @@ module HDIUtil
32
39
  shell mountpoint
33
40
  end
34
41
  detach input, mountpoint, [*DEFAULT_UNMOUNT_OPTIONS]
35
- system(Utility::HDIUTIL, "resize", "-shrinkonly", "-sectors", "min", *shadow_options, input)
42
+ system(Utility::HDIUTIL, "resize", "-shrinkonly", "-sectors", "min", *shadow_options, input) if options[:resize][:shrink]
36
43
  }
37
44
  oh1 "Merging #{shadow}"
38
45
  system(Utility::HDIUTIL, "convert", *DEFAULT_CONVERT_OPTIONS, *format_options, *shadow_options, "-o", output, input)
@@ -46,22 +53,22 @@ module HDIUtil
46
53
 
47
54
  private
48
55
 
49
- def self.attach dmg, mountpoint, options = []
56
+ def self.attach dmg, mountpoint, arguments = []
50
57
  ohai "Mounting #{dmg}"
51
- system(Utility::HDIUTIL, "attach", *options, "-mountpoint", mountpoint, dmg)
58
+ system(Utility::HDIUTIL, "attach", *arguments, "-mountpoint", mountpoint, dmg)
52
59
  puts "Mounted: #{mountpoint}"
53
60
  end
54
61
 
55
- def self.detach dmg, mountpoint, options = []
62
+ def self.detach dmg, mountpoint, arguments = []
56
63
  ohai "Unmounting #{dmg}"
57
- system(Utility::HDIUTIL, "detach", *options, mountpoint)
64
+ system(Utility::HDIUTIL, "detach", *arguments, mountpoint)
58
65
  puts "Unmounted: #{mountpoint}"
59
66
  end
60
67
 
61
68
  def self.shell dir
62
69
  Dir.chdir(dir) {
63
70
  ohai ENV['SHELL']
64
- system(ENV, ENV['SHELL'])
71
+ Kernel.system ENV, ENV['SHELL']
65
72
  }
66
73
  end
67
74
  end
@@ -41,7 +41,7 @@ module PKGUtil
41
41
  def self.shell dir
42
42
  Dir.chdir(dir) {
43
43
  ohai ENV['SHELL']
44
- system(ENV, ENV['SHELL'])
44
+ Kernel.system ENV, ENV['SHELL']
45
45
  }
46
46
  end
47
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iesd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "なつき"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-04 00:00:00.000000000 Z
11
+ date: 2014-03-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Modify Extensions, Kextcache and Packages on InstallESD.
14
14
  email: i@ntk.me
@@ -17,26 +17,26 @@ executables:
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - README.md
21
20
  - LICENSE.md
21
+ - README.md
22
22
  - bin/iesd
23
23
  - iesd.gemspec
24
+ - lib/iesd.rb
25
+ - lib/iesd/InstallESD.rb
24
26
  - lib/iesd/InstallESD/BaseSystem.dmg.rb
25
27
  - lib/iesd/InstallESD/Extensions.rb
26
28
  - lib/iesd/InstallESD/InstallESD.dmg.rb
27
29
  - lib/iesd/InstallESD/InstallOSX.app.rb
28
30
  - lib/iesd/InstallESD/InstallOSX.dmg.rb
31
+ - lib/iesd/InstallESD/Packages.rb
29
32
  - lib/iesd/InstallESD/Packages/BaseSystemBinaries.pkg.rb
30
33
  - lib/iesd/InstallESD/Packages/OSInstall.mpkg.rb
31
34
  - lib/iesd/InstallESD/Packages/OSInstall.pkg.rb
32
35
  - lib/iesd/InstallESD/Packages/OSUpgrade.pkg.rb
33
- - lib/iesd/InstallESD/Packages.rb
34
- - lib/iesd/InstallESD.rb
36
+ - lib/iesd/utility.rb
35
37
  - lib/iesd/utility/hdiutil.rb
36
38
  - lib/iesd/utility/pkgutil.rb
37
39
  - lib/iesd/utility/tty.rb
38
- - lib/iesd/utility.rb
39
- - lib/iesd.rb
40
40
  homepage: https://github.com/ntkme/iesd
41
41
  licenses:
42
42
  - BSD-2-Clause
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 2.1.9
60
+ rubygems_version: 2.2.2
61
61
  signing_key:
62
62
  specification_version: 4
63
63
  summary: Customize OS X InstallESD.