PackerFiles 0.0.1

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.
Files changed (195) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/PackerFiles.gemspec +36 -0
  6. data/README.md +32 -0
  7. data/Rakefile +21 -0
  8. data/bin/pkf +5 -0
  9. data/lib/PackerFiles/CLI/OS.rb +44 -0
  10. data/lib/PackerFiles/CLI/Root.rb +41 -0
  11. data/lib/PackerFiles/Core/Base.rb +23 -0
  12. data/lib/PackerFiles/Core/CDImage.rb +185 -0
  13. data/lib/PackerFiles/Core/Disk.rb +135 -0
  14. data/lib/PackerFiles/Core/Exceptions.rb +65 -0
  15. data/lib/PackerFiles/Core/Hypervisor.rb +96 -0
  16. data/lib/PackerFiles/Core/Keyboard.rb +38 -0
  17. data/lib/PackerFiles/Core/Locale.rb +62 -0
  18. data/lib/PackerFiles/Core/LogicalVolume.rb +41 -0
  19. data/lib/PackerFiles/Core/Network.rb +67 -0
  20. data/lib/PackerFiles/Core/Packages.rb +30 -0
  21. data/lib/PackerFiles/Core/Partition.rb +41 -0
  22. data/lib/PackerFiles/Core/TimeZone.rb +45 -0
  23. data/lib/PackerFiles/Core/User.rb +46 -0
  24. data/lib/PackerFiles/Core/VolumeGroup.rb +50 -0
  25. data/lib/PackerFiles/Core/example/CDImage.txt +75 -0
  26. data/lib/PackerFiles/Core/example/Disk.txt +29 -0
  27. data/lib/PackerFiles/Core/example/Hypervisor.txt +111 -0
  28. data/lib/PackerFiles/Core/example/Keyboard.txt +28 -0
  29. data/lib/PackerFiles/Core/example/Locale.txt +31 -0
  30. data/lib/PackerFiles/Core/example/Network.txt +68 -0
  31. data/lib/PackerFiles/Core/example/Packages.txt +22 -0
  32. data/lib/PackerFiles/Core/example/TimeZone.txt +36 -0
  33. data/lib/PackerFiles/Core/example/User.txt +48 -0
  34. data/lib/PackerFiles/OS/Builder.rb +116 -0
  35. data/lib/PackerFiles/OS/CentOS/CD.rb +81 -0
  36. data/lib/PackerFiles/OS/CentOS/Kickstart.rb +64 -0
  37. data/lib/PackerFiles/OS/CentOS/Server.rb +170 -0
  38. data/lib/PackerFiles/OS/CentOS/Templates/Base_erb.rb +4 -0
  39. data/lib/PackerFiles/OS/CentOS/Templates/Disk_erb.rb +35 -0
  40. data/lib/PackerFiles/OS/CentOS/Templates/Keyboard_erb.rb +4 -0
  41. data/lib/PackerFiles/OS/CentOS/Templates/Locale_erb.rb +4 -0
  42. data/lib/PackerFiles/OS/CentOS/Templates/Network_erb.rb +17 -0
  43. data/lib/PackerFiles/OS/CentOS/Templates/Packages_erb.rb +34 -0
  44. data/lib/PackerFiles/OS/CentOS/Templates/Tail_erb.rb +15 -0
  45. data/lib/PackerFiles/OS/CentOS/Templates/TimeZone_erb.rb +10 -0
  46. data/lib/PackerFiles/OS/CentOS/Templates/User_erb.rb +20 -0
  47. data/lib/PackerFiles/OS/CentOS/Templates/boot_command_erb.rb +16 -0
  48. data/lib/PackerFiles/OS/CentOS/Templates/command_as_root_erb.rb +1 -0
  49. data/lib/PackerFiles/OS/CentOS/Templates/disable_root_erb.rb +1 -0
  50. data/lib/PackerFiles/OS/CentOS/Templates/enable_root_erb.rb +1 -0
  51. data/lib/PackerFiles/OS/CentOS/Templates/shutdown_command_erb.rb +1 -0
  52. data/lib/PackerFiles/OS/Debian/Apt.rb +42 -0
  53. data/lib/PackerFiles/OS/Debian/CD.rb +65 -0
  54. data/lib/PackerFiles/OS/Debian/Mirrors.rb +73 -0
  55. data/lib/PackerFiles/OS/Debian/Preseed.rb +64 -0
  56. data/lib/PackerFiles/OS/Debian/Server.rb +169 -0
  57. data/lib/PackerFiles/OS/Debian/Templates/Apt_erb.rb +18 -0
  58. data/lib/PackerFiles/OS/Debian/Templates/Disk_erb.rb +69 -0
  59. data/lib/PackerFiles/OS/Debian/Templates/Keyboard_erb.rb +5 -0
  60. data/lib/PackerFiles/OS/Debian/Templates/Locale_erb.rb +7 -0
  61. data/lib/PackerFiles/OS/Debian/Templates/Mirrors_erb.rb +9 -0
  62. data/lib/PackerFiles/OS/Debian/Templates/Network_erb.rb +19 -0
  63. data/lib/PackerFiles/OS/Debian/Templates/Packages_erb.rb +6 -0
  64. data/lib/PackerFiles/OS/Debian/Templates/TimeZone_erb.rb +6 -0
  65. data/lib/PackerFiles/OS/Debian/Templates/User_erb.rb +14 -0
  66. data/lib/PackerFiles/OS/Debian/Templates/boot_command_erb.rb +24 -0
  67. data/lib/PackerFiles/OS/Debian/Templates/command_as_root_erb.rb +1 -0
  68. data/lib/PackerFiles/OS/Debian/Templates/disable_root_erb.rb +5 -0
  69. data/lib/PackerFiles/OS/Debian/Templates/enable_root_erb.rb +1 -0
  70. data/lib/PackerFiles/OS/Debian/Templates/shutdown_command_erb.rb +1 -0
  71. data/lib/PackerFiles/OS/Debian/example/Apt.txt +55 -0
  72. data/lib/PackerFiles/OS/DocGenerator.rb +51 -0
  73. data/lib/PackerFiles/OS/Finder.rb +96 -0
  74. data/lib/PackerFiles/OS/RHEL/CD.rb +32 -0
  75. data/lib/PackerFiles/OS/RHEL/Fedora.rb +59 -0
  76. data/lib/PackerFiles/OS/RHEL/FedoraCD.rb +68 -0
  77. data/lib/PackerFiles/OS/RHEL/Server.rb +32 -0
  78. data/lib/PackerFiles/OS/RHEL/Templates/Fedora_Tail_erb.rb +14 -0
  79. data/lib/PackerFiles/OS/RHEL/Templates/boot_command_fedora_erb.rb +16 -0
  80. data/lib/PackerFiles/OS/SUSE/Templates/Base_erb.xml +32 -0
  81. data/lib/PackerFiles/OS/SUSE/Templates/Disk_erb.xml +110 -0
  82. data/lib/PackerFiles/OS/SUSE/Templates/Keyboard_erb.xml +7 -0
  83. data/lib/PackerFiles/OS/SUSE/Templates/Locale_erb.xml +18 -0
  84. data/lib/PackerFiles/OS/SUSE/Templates/Network_erb.xml +143 -0
  85. data/lib/PackerFiles/OS/SUSE/Templates/Packages_erb.xml +29 -0
  86. data/lib/PackerFiles/OS/SUSE/Templates/Tail_erb.xml +4 -0
  87. data/lib/PackerFiles/OS/SUSE/Templates/TimeZone_erb.xml +15 -0
  88. data/lib/PackerFiles/OS/SUSE/Templates/User_erb.xml +57 -0
  89. data/lib/PackerFiles/OS/SUSE/Templates/boot_command_erb.rb +23 -0
  90. data/lib/PackerFiles/OS/SUSE/Templates/command_as_root_erb.rb +1 -0
  91. data/lib/PackerFiles/OS/SUSE/Templates/disable_root_erb.rb +1 -0
  92. data/lib/PackerFiles/OS/SUSE/Templates/enable_root_erb.rb +1 -0
  93. data/lib/PackerFiles/OS/SUSE/Templates/shutdown_command_erb.rb +1 -0
  94. data/lib/PackerFiles/OS/Ubuntu/CD.rb +81 -0
  95. data/lib/PackerFiles/OS/Ubuntu/Desktop.rb +50 -0
  96. data/lib/PackerFiles/OS/Ubuntu/DesktopCD.rb +16 -0
  97. data/lib/PackerFiles/OS/Ubuntu/Mirrors.rb +103 -0
  98. data/lib/PackerFiles/OS/Ubuntu/Server.rb +78 -0
  99. data/lib/PackerFiles/OS/Ubuntu/Templates/Apt_erb.rb +18 -0
  100. data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_desktop_erb.rb +36 -0
  101. data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_erb.rb +30 -0
  102. data/lib/PackerFiles/OS/Ubuntu/Templates/ubiquity_erb.rb +8 -0
  103. data/lib/PackerFiles/OS/example/Doc.txt +8 -0
  104. data/lib/PackerFiles/Provision/Base.rb +20 -0
  105. data/lib/PackerFiles/Provision/ChefSolo.rb +90 -0
  106. data/lib/PackerFiles/Provision/ChefSoloHelper.rb +72 -0
  107. data/lib/PackerFiles/Provision/Copy.rb +22 -0
  108. data/lib/PackerFiles/Provision/ExternalScript.rb +43 -0
  109. data/lib/PackerFiles/Provision/InlineScript.rb +37 -0
  110. data/lib/PackerFiles/Provision/Provisioners.rb +87 -0
  111. data/lib/PackerFiles/Provision/example/Provisioners.txt +21 -0
  112. data/lib/PackerFiles/Utils/AutoZone.rb +96 -0
  113. data/lib/PackerFiles/Utils/FastestURL.rb +73 -0
  114. data/lib/PackerFiles/Utils/Generator.rb +34 -0
  115. data/lib/PackerFiles/Utils/HashSerializer.rb +110 -0
  116. data/lib/PackerFiles/Utils/Size.rb +44 -0
  117. data/lib/PackerFiles/Utils/TypeAccessor.rb +71 -0
  118. data/lib/PackerFiles/Virtual/Hypervisors.rb +72 -0
  119. data/lib/PackerFiles/Virtual/KVM.rb +119 -0
  120. data/lib/PackerFiles/Virtual/KVMConverter.rb +79 -0
  121. data/lib/PackerFiles/Virtual/VMWare.rb +108 -0
  122. data/lib/PackerFiles/Virtual/VMWareConverter.rb +78 -0
  123. data/lib/PackerFiles/Virtual/VirtualBox.rb +98 -0
  124. data/lib/PackerFiles/Virtual/VirtualBoxConverter.rb +75 -0
  125. data/lib/PackerFiles/Virtual/example/Hypervisors.txt +23 -0
  126. data/lib/PackerFiles/version.rb +3 -0
  127. data/lib/PackerFiles.rb +44 -0
  128. data/spec/core/builder_spec.rb +84 -0
  129. data/spec/core/cdimage_spec.rb +159 -0
  130. data/spec/core/disk_spec.rb +191 -0
  131. data/spec/core/keyboard_spec.rb +36 -0
  132. data/spec/core/locale_spec.rb +73 -0
  133. data/spec/core/network_spec.rb +96 -0
  134. data/spec/core/packages_spec.rb +18 -0
  135. data/spec/core/timezone_spec.rb +43 -0
  136. data/spec/core/user_spec.rb +44 -0
  137. data/spec/core/volume_group_spec.rb +53 -0
  138. data/spec/os/centos/cd_spec.rb +12 -0
  139. data/spec/os/centos/data/Server-Script-Provisioner.rb +57 -0
  140. data/spec/os/centos/data/Server.rb +55 -0
  141. data/spec/os/centos/data/chef-solo-provisioner.rb +58 -0
  142. data/spec/os/centos/finder_spec.rb +22 -0
  143. data/spec/os/centos/templates/boot_command_spec.rb +57 -0
  144. data/spec/os/centos/templates/disk_spec.rb +79 -0
  145. data/spec/os/centos/templates/keyboard_spec.rb +18 -0
  146. data/spec/os/centos/templates/locale_spec.rb +26 -0
  147. data/spec/os/centos/templates/network_spec.rb +38 -0
  148. data/spec/os/centos/templates/packages_spec.rb +18 -0
  149. data/spec/os/centos/templates/timezone_spec.rb +37 -0
  150. data/spec/os/centos/templates/user_spec.rb +24 -0
  151. data/spec/os/debian/apt_spec.rb +50 -0
  152. data/spec/os/debian/cd_spec.rb +30 -0
  153. data/spec/os/debian/data/7zip.tar.gz +0 -0
  154. data/spec/os/debian/data/All-sections.rb +60 -0
  155. data/spec/os/debian/data/Chef-Solo-Provisioner.rb +60 -0
  156. data/spec/os/debian/data/Copy-Provisioner.rb +61 -0
  157. data/spec/os/debian/data/External-Script-Provisioner.rb +69 -0
  158. data/spec/os/debian/data/Missing-CDImage.rb +53 -0
  159. data/spec/os/debian/data/Missing-VMWare-KVM-sections.rb +51 -0
  160. data/spec/os/debian/data/Missing-sections.rb +53 -0
  161. data/spec/os/debian/data/Script-Provisioner.rb +62 -0
  162. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/Berksfile.lock +32 -0
  163. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/README.md +81 -0
  164. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/attributes/default.rb +3 -0
  165. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/metadata.rb +11 -0
  166. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/recipes/default.rb +30 -0
  167. data/spec/os/debian/data/chef-solo.json +5 -0
  168. data/spec/os/debian/data/test-script.sh +4 -0
  169. data/spec/os/debian/finder_spec.rb +59 -0
  170. data/spec/os/debian/mirrors_spec.rb +18 -0
  171. data/spec/os/debian/preseed_spec.rb +56 -0
  172. data/spec/os/debian/server_spec.rb +59 -0
  173. data/spec/os/debian/templates/apt_spec.rb +20 -0
  174. data/spec/os/debian/templates/boot_command_spec.rb +56 -0
  175. data/spec/os/debian/templates/disk_spec.rb +81 -0
  176. data/spec/os/debian/templates/keyboard_spec.rb +18 -0
  177. data/spec/os/debian/templates/locale_spec.rb +36 -0
  178. data/spec/os/debian/templates/mirrors_spec.rb +16 -0
  179. data/spec/os/debian/templates/network_spec.rb +38 -0
  180. data/spec/os/debian/templates/packages_spec.rb +17 -0
  181. data/spec/os/debian/templates/timezone_spec.rb +36 -0
  182. data/spec/os/debian/templates/user_spec.rb +25 -0
  183. data/spec/os/finder_spec.rb +21 -0
  184. data/spec/os/rhel/data/Fedora.rb +45 -0
  185. data/spec/os/rhel/data/Server-Custom.rb +54 -0
  186. data/spec/os/rhel/data/Server.rb +45 -0
  187. data/spec/os/rhel/finder_spec.rb +21 -0
  188. data/spec/os/ubuntu/cd_spec.rb +28 -0
  189. data/spec/os/ubuntu/data/Desktop.rb +61 -0
  190. data/spec/os/ubuntu/data/Server.rb +61 -0
  191. data/spec/os/ubuntu/finder_spec.rb +17 -0
  192. data/spec/os/ubuntu/mirrors_spec.rb +18 -0
  193. data/spec/utils/autozone_spec.rb +33 -0
  194. data/spec/virtual/virtual_box_spec.rb +16 -0
  195. metadata +405 -0
@@ -0,0 +1,169 @@
1
+ # Requires
2
+ require 'OS/Builder'
3
+ require 'Core/Locale'
4
+ require 'Core/Keyboard'
5
+ require 'Core/TimeZone'
6
+ require 'Core/User'
7
+ require 'Core/Disk'
8
+ require 'Core/Network'
9
+ require 'Core/Packages'
10
+ require 'Core/CDImage'
11
+ require 'Virtual/VirtualBoxConverter'
12
+ require 'Virtual/KVMConverter'
13
+ require 'Virtual/VMWareConverter'
14
+ require_relative 'Preseed'
15
+ require_relative 'Mirrors'
16
+ require_relative 'CD'
17
+ require_relative 'Apt'
18
+
19
+ # OS class that handles details for generating Packer files for Debian
20
+ # Servers.
21
+ module PackerFiles
22
+ module Debian
23
+
24
+ class Server < Builder
25
+
26
+ # List of type accessors used by this class that also gets converted
27
+ # to a preseed
28
+ def self.preseed_accessors
29
+ [Core::Locale, Core::Keyboard, Core::TimeZone,
30
+ Core::User, Core::Disk, Core::Network,
31
+ Core::Packages, Apt
32
+ ]
33
+ end
34
+
35
+ # Create accessors based on Type
36
+ self.preseed_accessors.each do |type|
37
+ type_accessor type
38
+ end
39
+
40
+ # Constructor. Yield self for further initialization
41
+ def initialize
42
+ yield self if block_given?
43
+ end
44
+
45
+ # hook function for generation
46
+ def generate_hook
47
+
48
+ # Construct objects that needs to be converted by using accessors.
49
+ # The tracker type_accessors tracks the mapping b/w Type names and
50
+ # method calls.
51
+ objects = []
52
+ objects.push self.Locale, self.Keyboard, self.TimeZone, self.User
53
+ objects.push self.Disk, self.Network, self.Packages, self.Apt
54
+ objects.each do |obj|
55
+ obj.normalize
56
+ end
57
+
58
+ # Call a hook function to customize preseed generation by
59
+ # derived classes.
60
+ preseed_write_hook(objects)
61
+ end
62
+
63
+ # Hook function called before normalizing CD Image
64
+ def cd_image_hook
65
+ self.CDImage.impl = CD.new
66
+ end
67
+
68
+ # Hook function called for converting this object into a hash for
69
+ # VirtualBox
70
+ def vbox_converter_hook(gen)
71
+ Virtual::VirtualBoxConverter.new(self, gen).value
72
+ end
73
+
74
+ # Hook function called for converting this object into a hash for
75
+ # KVM
76
+ def kvm_converter_hook(gen)
77
+ Virtual::KVMConverter.new(self, gen).value
78
+ end
79
+
80
+ # Hook function called for converting this object into a hash for
81
+ # VMWare
82
+ def vmware_converter_hook(gen)
83
+ Virtual::VMWareConverter.new(self, gen).value
84
+ end
85
+
86
+ # Hook for writing into preseed file.
87
+ def preseed_write_hook(objects)
88
+
89
+ # Preseed file by evaluating templates @ Debian folder.
90
+ preseed = Preseed.new(preseed_file)
91
+
92
+ # Convert objects into Preseed configuration.
93
+ objects.each do |obj|
94
+ preseed.convert obj, 'Debian/Templates'
95
+ end
96
+
97
+ # Generate fastest debian mirrors
98
+ preseed.eval_file 'Debian/Templates/Mirrors_erb.rb',
99
+ {'obj' => Mirrors.new}
100
+ end
101
+
102
+ # Name of the preseed file
103
+ def preseed_file
104
+ rel = self.CDImage.release
105
+ arch = self.CDImage.arch
106
+ name = "preseed-debian-server-#{rel}-#{arch}.cfg"
107
+ File.join(http_dir, name)
108
+ end
109
+
110
+ # Boot Command Override
111
+ def boot_command
112
+ file = PackerFiles.DirPath('Debian/Templates/boot_command_erb.rb')
113
+ hash = { 'obj' => self, 'network' => self.Network }
114
+ value = PackerFiles.evaluate_erb(file.first, hash)
115
+ value.split("\n")
116
+ end
117
+
118
+ # Shutdown command Override
119
+ def shutdown_command
120
+ file = PackerFiles.DirPath('Debian/Templates/shutdown_command_erb.rb')
121
+ hash = { 'obj' => self.User }
122
+ value = PackerFiles.evaluate_erb(file.first, hash)
123
+ value.chop
124
+ end
125
+
126
+ # Guest OS Type override
127
+ def guest_os_type
128
+ return "Debian_64" if (self.CDImage.arch == "amd64")
129
+ return "Debian"
130
+ end
131
+
132
+ # VMWare Guest OS Type override
133
+ def vmware_guest_os_type
134
+ return "other26xlinux-64" if (self.CDImage.arch == "amd64")
135
+ return "other26xlinux"
136
+ end
137
+
138
+ # VMWare guest os flavor
139
+ def vmware_guest_os_flavor
140
+ return 'linux'
141
+ end
142
+
143
+ # Run any given command as root
144
+ def run_command_as_root
145
+ file = PackerFiles.DirPath('Debian/Templates/command_as_root_erb.rb')
146
+ hash = { 'obj' => self }
147
+ value = PackerFiles.evaluate_erb(file.first, hash)
148
+ value.chop
149
+ end
150
+
151
+ # Enable root user command w/o a password
152
+ def enable_root_for_user
153
+ file = PackerFiles.DirPath('Debian/Templates/enable_root_erb.rb')
154
+ hash = { 'obj' => self }
155
+ value = PackerFiles.evaluate_erb(file.first, hash)
156
+ value.chop
157
+ end
158
+
159
+ # Disable root user command w/o a password
160
+ def disable_root_for_user
161
+ file = PackerFiles.DirPath('Debian/Templates/disable_root_erb.rb')
162
+ hash = { 'obj' => self }
163
+ value = PackerFiles.evaluate_erb(file.first, hash)
164
+ value.chop
165
+ end
166
+
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,18 @@
1
+ # Apt Configuration Section
2
+ apt-cdrom-setup apt-setup/cdrom/set-first boolean false
3
+ apt-mirror-setup apt-setup/use_mirror boolean true
4
+ popularity-contest popularity-contest/participate boolean false
5
+ <% if !@obj.tasks.nil? -%>
6
+ tasksel tasksel/first multiselect <%= @obj.tasks.join(',') %>
7
+ <% end -%>
8
+ d-i apt-setup/non-free boolean <%= @obj.non_free %>
9
+ d-i apt-setup/contrib boolean <%= @obj.contrib %>
10
+ d-i pkgsel/upgrade select <%= @obj.upgrades %>
11
+ d-i apt-setup/services-select multiselect security, updates
12
+
13
+ # Basic OS Settings and Configuration
14
+ d-i base-installer/kernel/override-image string <%= @obj.kernel %>
15
+ d-i finish-install/reboot_in_progress note
16
+ d-i grub-installer/only_debian boolean true
17
+ d-i grub-installer/with_other_os boolean true
18
+
@@ -0,0 +1,69 @@
1
+ # Case 1: When just a disk is given, always use the regular atomic
2
+ # recipe, unless indicated otherwise.
3
+ <% if @obj.is_raw? -%>
4
+ <% recipe = 'atomic' if recipe.nil? -%>
5
+ d-i partman-auto/choose_recipe select <%= recipe %>
6
+ d-i partman-auto/method string regular
7
+ d-i partman-partitioning/confirm_write_new_label boolean true
8
+ d-i partman/choose_partition select finish
9
+ d-i partman/confirm boolean true
10
+ d-i partman/confirm_nooverwrite boolean true
11
+ <% end -%>
12
+
13
+ # Case 2: A disk with multiple partitions
14
+ <% if @obj.only_partitions? -%>
15
+ d-i partman-auto/method string regular
16
+ d-i partman-partitioning/confirm_write_new_label boolean true
17
+ d-i partman/choose_partition select finish
18
+ d-i partman/confirm boolean true
19
+ d-i partman/confirm_nooverwrite boolean true
20
+ d-i partman-auto/expert_recipe string \
21
+ boot-root :: \
22
+ <% @obj.partitions.each do |part| -%>
23
+ <%= (part.size/2) -%> <%= (part.size*3/4) -%> <%= part.size -%> <%= part.file_system -%> \
24
+ <% if part.boot -%>
25
+ $primary{ } $bootable{ } \
26
+ <% end -%>
27
+ <% if part.file_system == 'linux-swap' -%>
28
+ method { swap } format { } \
29
+ <% else -%>
30
+ method { format } format { } \
31
+ <% end -%>
32
+ <% if !part.file_system.nil? && part.file_system != 'linux-swap' -%>
33
+ use_filesystem{ } filesystem{ <%= part.file_system -%> } \
34
+ <% end -%>
35
+ <% if !part.mount_point.nil? && part.file_system != 'linux-swap' -%>
36
+ mountpoint{ <%= part.mount_point -%> } \
37
+ <% end -%>
38
+ . \
39
+ <% end -%>
40
+ <% end -%>
41
+
42
+ # Case 3: A disk with Logical Volumes
43
+ <% if @obj.only_vg? -%>
44
+ d-i partman-auto/method string lvm
45
+ d-i partman-auto-lvm/guided_size string max
46
+ d-i partman/choose_partition select finish
47
+ d-i partman/confirm_nooverwrite boolean true
48
+ d-i partman-lvm/confirm_nooverwrite boolean true
49
+ d-i partman-auto/expert_recipe string \
50
+ boot-root-vg :: \
51
+ <% @obj.vg.lvs.each do |lv| -%>
52
+ <%= (lv.size/2) -%> <%= (lv.size*3/4) -%> <%= lv.size -%> <%= lv.file_system -%> \
53
+ $lvmok{ } in_vg{ <%= lv.vg_name -%> } lv_name{ <%= lv.name -%> } \
54
+ <% if lv.file_system == 'linux-swap' -%>
55
+ method { swap } format { } \
56
+ <% else -%>
57
+ method { format } format { } \
58
+ <% end -%>
59
+ <% if !lv.file_system.nil? && lv.file_system != 'linux-swap' -%>
60
+ use_filesystem{ } filesystem{ <%= lv.file_system -%> } \
61
+ <% end -%>
62
+ <% if !lv.mount_point.nil? && lv.file_system != 'linux-swap' -%>
63
+ mountpoint{ <%= lv.mount_point -%> } \
64
+ <% end -%>
65
+ . \
66
+ <% end -%>
67
+ <% end -%>
68
+
69
+
@@ -0,0 +1,5 @@
1
+ # Keyboard configuration.
2
+ d-i keymap select <%= @obj.layout %>
3
+ d-i keyboard-configuration/xkb-keymap select <%= @obj.layout -%>
4
+
5
+
@@ -0,0 +1,7 @@
1
+ ### Localization
2
+ d-i debian-installer/locale string <%= @obj.default -%>
3
+ <% if @obj.supported.length > 0
4
+ value = @obj.supported.join(", ") %>
5
+ d-i localechooser/supported-locales multiselect <%= value -%>
6
+ <% end %>
7
+
@@ -0,0 +1,9 @@
1
+ # Mirror Section
2
+ choose-mirror-bin mirror/http/proxy string <%= @obj.proxy %>
3
+ d-i mirror/http/proxy string <%= @obj.proxy %>
4
+ d-i apt-setup/use_mirror boolean true
5
+ d-i mirror/country string manual
6
+ d-i mirror/http/directory string <%= @obj.best.path.chop %>
7
+ d-i mirror/http/hostname string <%= @obj.best.host -%>
8
+
9
+
@@ -0,0 +1,19 @@
1
+ # Network configuration
2
+ d-i netcfg/enable boolean true
3
+ d-i netcfg/choose_interface select <%= @obj.interface %>
4
+ d-i netcfg/link_detection_timeout string 10
5
+ <% if ( (@obj.type & PackerFiles::Core::Network::STATIC) > 0 ) -%>
6
+ d-i netcfg/disable_autoconfig boolean true
7
+ d-i netcfg/get_ipaddress string <%= @obj.ip %>
8
+ d-i netcfg/get_netmask string <%= @obj.mask %>
9
+ d-i netcfg/get_gateway string <%= @obj.gateway %>
10
+ d-i netcfg/get_nameservers string <%= @obj.dns.join(" ") %>
11
+ d-i netcfg/confirm_static boolean true
12
+ <% else -%>
13
+ d-i netcfg/dhcp_timeout string 60
14
+ d-i netcfg/dhcpv6_timeout string 60
15
+ <% end -%>
16
+ d-i netcfg/get_hostname string unassigned-hostname
17
+ d-i netcfg/get_domain string unassigned-domain
18
+
19
+
@@ -0,0 +1,6 @@
1
+ # Package configuration.
2
+ d-i pkgsel/include string <%= @obj.list.join(' ') %>
3
+ d-i pkgsel/install-language-support boolean false
4
+ d-i pkgsel/update-policy select unattended-upgrades
5
+ d-i pkgsel/upgrade select full-upgrade
6
+
@@ -0,0 +1,6 @@
1
+ # Timezone configuration.
2
+ d-i clock-setup/utc boolean <%= @obj.utc %>
3
+ d-i clock-setup/utc-auto boolean <%= @obj.utc %>
4
+ d-i clock-setup/ntp boolean true
5
+ d-i time/zone string <%=@obj.zone %>
6
+
@@ -0,0 +1,14 @@
1
+ # User configuration.
2
+ d-i passwd/root-login boolean false
3
+ d-i user-setup/allow-password-weak boolean true
4
+ d-i passwd/user-fullname string <%= @obj.name %>
5
+ d-i passwd/username string <%= @obj.login %>
6
+ d-i passwd/user-password password <%= @obj.password %>
7
+ d-i passwd/user-password-again password <%= @obj.password %>
8
+ <% if !@obj.uid.nil? -%>
9
+ d-i passwd/user-uid string <%= @obj.uid -%>
10
+ <% end -%>
11
+ <% if @obj.groups.length > 0 -%>
12
+ d-i passwd/user-default-groups string <%= @obj.groups.join(' ') -%>
13
+ <% end -%>
14
+
@@ -0,0 +1,24 @@
1
+ <esc><wait>
2
+ install <wait>
3
+ <% preseed = @obj.preseed_file.gsub(@obj.http_dir,'').gsub('/', '') -%>
4
+ <% if @network.nil? -%>
5
+ preseed/url=http://{{user `host`}}:{{user `port`}}/<%= preseed -%> <wait>
6
+ <% elsif !@network.is_static? -%>
7
+ preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/<%= preseed -%> <wait>
8
+ <% else -%>
9
+ preseed/url=http://{{user `host`}}:{{user `port`}}/<%= preseed -%> <wait>
10
+ <% end -%>
11
+ auto=true priority=critical <wait>
12
+ <% if !@network.nil? && @network.is_static? -%>
13
+ netcfg/disable_autoconfig=true <wait>
14
+ netcfg/get_ipaddress=<%= @network.ip %> <wait>
15
+ netcfg/get_netmask=<%= @network.mask %> <wait>
16
+ netcfg/get_gateway=<%= @network.gateway %> <wait>
17
+ netcfg/get_nameservers=<%= @network.dns.join(" ") %> <wait>
18
+ netcfg/confirm_static=true <wait>
19
+ netcfg/dhcp_timeout=60 <wait>
20
+ netcfg/dhcpv6_timeout=60 <wait>
21
+ netcfg/get_hostname=unassigned-hostname <wait>
22
+ netcfg/get_domain=unassigned-domain <wait>
23
+ <% end -%>
24
+ <enter><wait>
@@ -0,0 +1 @@
1
+ echo '<%= @obj.User.password -%>' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'
@@ -0,0 +1,5 @@
1
+ set -e
2
+ temp=`mktemp`
3
+ head -n -1 /etc/sudoers > $temp
4
+ cp $temp /etc/sudoers
5
+ rm $temp
@@ -0,0 +1 @@
1
+ echo "<%= @obj.User.login -%> ALL=NOPASSWD: ALL" >> /etc/sudoers
@@ -0,0 +1 @@
1
+ echo '<%= @obj.password -%>'|sudo -S /sbin/shutdown -hP now
@@ -0,0 +1,55 @@
1
+
2
+ # Define Apt Configuration for this OS
3
+ <% if @obj.nil? -%>
4
+ #os.<%= @name -%> do |apt|
5
+ <% else -%>
6
+ os.<%= @name -%> do |apt|
7
+ <% end -%>
8
+
9
+ # Should include contrib software?
10
+ <% if @obj.nil? || @obj.contrib.nil? -%>
11
+ #apt.contrib = false
12
+ <% else -%>
13
+ apt.contrib = <%= @obj.contrib %>
14
+ <% end -%>
15
+
16
+ # Should include non-free software?
17
+ <% if @obj.nil? || @obj.non_free.nil? -%>
18
+ #apt.non_free = false
19
+ <% else -%>
20
+ apt.contrib = <%= @obj.non_free %>
21
+ <% end -%>
22
+
23
+ # Should upgrade packages during install. Setting this to
24
+ # true, gets the latest packages, but can significantly increase
25
+ # OS build time.
26
+ # apt.upgrades = 'none' [For no upgrades during install]
27
+ # apt.upgrades = 'safe-upgrade' [ For only safe upgrades]
28
+ # apt.upgrades = 'full-upgrade'
29
+ <% if @obj.nil? || @obj.upgrades.nil? -%>
30
+ #apt.upgrades = 'none'
31
+ <% else -%>
32
+ apt.upgrades = '<%= @obj.upgrades -%>'
33
+ <% end -%>
34
+
35
+ # Name of the kernel image to use for initial install
36
+ <% if @obj.nil? || @obj.kernel.nil? -%>
37
+ #apt.kernel = 'linux-server'
38
+ <% else -%>
39
+ apt.kernel = '<%= @obj.kernel -%>'
40
+ <% end -%>
41
+
42
+ # List of tasks that need to be installed for Debian OS during
43
+ # install. The list for a particular OS can be obtained from
44
+ # 'tasksel --list-tasks' command.
45
+ <% if @obj.nil? || @obj.tasks.nil? -%>
46
+ #apt.tasks = ['standard']
47
+ <% else -%>
48
+ apt.tasks = <%= @obj.tasks.to_s %>
49
+ <% end -%>
50
+
51
+ <% if @obj.nil? -%>
52
+ #end
53
+ <% else -%>
54
+ end
55
+ <% end -%>
@@ -0,0 +1,51 @@
1
+ # Requires
2
+
3
+ # The Document generator class generates the template file for a
4
+ # given OS class.
5
+ module PackerFiles
6
+ class DocGenerator
7
+
8
+ # Constructor accepts a class name and the file name to write
9
+ # the documentation to.
10
+ def initialize(class_name, filename)
11
+ @class_name = class_name
12
+ @file_name = filename
13
+ end
14
+
15
+ # Generate the documentation.This is done by looking at the
16
+ # type accessors that are defined by the OS class and then
17
+ # calling the doc_file function to figure out the ERB template.
18
+ def Generate
19
+
20
+ # Generate content for all the type accessor classes.
21
+ content = []
22
+ ancestry_class_list.each do |class_name|
23
+ hash = class_name.type_accessors
24
+ next if hash.nil?
25
+ hash.each_pair { |func, type_data|
26
+ file = type_data.first.doc_file
27
+ hash = {'name' => func, 'mod' => PackerFiles}
28
+ doc = PackerFiles.evaluate_erb(file, hash)
29
+ content += doc.split("\n").map {|line| ' ' + line }
30
+ }
31
+ end
32
+
33
+ # Generate content for the top level structure.
34
+ top_doc_file = PackerFiles.DirPath('OS/example/Doc.txt').first
35
+ os_name = @class_name.name.gsub('PackerFiles::', '')
36
+ hash = Hash['os_name', os_name, 'content', content]
37
+ value = PackerFiles.evaluate_erb(top_doc_file, hash)
38
+ File.write(@file_name, value)
39
+ end
40
+
41
+ # Get the complete hierarchy of classes until PackerFiles::Builder.
42
+ # This is to ensure that all type_accessors are captured at every
43
+ # inheritance level.
44
+ private
45
+ def ancestry_class_list
46
+ index = @class_name.ancestors.index(PackerFiles::Builder)
47
+ @class_name.ancestors.slice(0, index + 1)
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,96 @@
1
+ # Requires
2
+ require 'PackerFiles'
3
+
4
+ # The Finder class is used to find various things about OS supported
5
+ # by PackerFiles gem.
6
+ module PackerFiles
7
+ class Finder
8
+
9
+ # Dummy constructor
10
+ def initialize
11
+ end
12
+
13
+ # Return the correct class name that matches the given OS
14
+ # name and Version
15
+ def class_name(os_name, version=nil)
16
+ generic = []
17
+ specific = []
18
+ load_file_list(os_name)
19
+ class_list(os_name).each do |cl|
20
+ if !cl.respond_to? :versions
21
+ next
22
+ elsif cl.name.gsub('PackerFiles::','') != os_name
23
+ next
24
+ elsif cl.versions.empty?
25
+ generic.push(cl)
26
+ else
27
+ specific.push(cl) if cl.versions.index(version)
28
+ end
29
+ end
30
+ return specific.first if !specific.empty?
31
+ return generic.first if !generic.empty?
32
+ raise NotImplementedError.new(os_name)
33
+ end
34
+
35
+ # Return the list of OSes that can be found by the finder.
36
+ def class_names
37
+
38
+ # Get list of directories under OS folder. We can find
39
+ # files to load from this location.
40
+ classes = PackerFiles.DirPath("OS/*/").map {|dir|
41
+ Dir.glob(File.join(dir, '*.rb')) { |filename|
42
+ load(filename)
43
+ }
44
+ begin
45
+ class_list(File.basename(dir))
46
+ rescue NotImplementedError
47
+ nil
48
+ end
49
+ }
50
+ classes.flatten.keep_if {|cl| cl.respond_to? :versions}
51
+ end
52
+
53
+ # Given the OS Name, return the list of classes that are
54
+ # defined for this OS. (Note: OS Name is a combination of
55
+ # class name and a module name: e.g. A::B, A => Module name
56
+ # B is class name.). There can be many classes that can be
57
+ # defined under the module, but only some are loaded if their
58
+ # file names match the os_name.
59
+ private
60
+ def class_list(os_name)
61
+
62
+ # Module name is everything before the last '::'
63
+ m_name = module_name(os_name)
64
+
65
+ # Do a top-level instance eval on the object to get the
66
+ # module name
67
+ m_name = 'PackerFiles::' + m_name
68
+ begin
69
+ m_obj = Object.instance_eval(m_name)
70
+ m_obj.constants.map {|c|
71
+ m_obj.const_get(c)
72
+ }
73
+ rescue
74
+ raise NotImplementedError.new(os_name)
75
+ end
76
+ end
77
+
78
+ # Convert the given OS name into a relative directory and
79
+ # load all files under them
80
+ private
81
+ def load_file_list(os_name)
82
+ PackerFiles.DirPath(os_name.gsub('::', '/') + '*.rb').each do |file|
83
+ load(file)
84
+ end
85
+ end
86
+
87
+ # Given a OS Name, return it's module name. Module name is everything
88
+ # before the last '::'
89
+ private
90
+ def module_name(os_name)
91
+ return os_name if os_name.match('::').nil?
92
+ os_name.match(/(.*::)(.*)/)[1].gsub(/::$/, '')
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,32 @@
1
+ # Requires
2
+ require "Core/CDImage"
3
+
4
+ # An implementation for CDImage For RHEL
5
+ module PackerFiles
6
+ module RHEL
7
+ class CD < Core::CDImageImpl
8
+
9
+ # Override method for getting the ISO name
10
+ def get_iso_name_pattern
11
+ 'rhel-server-@release@-@arch@-dvd.iso'
12
+ end
13
+
14
+ # Override method for getting checksums
15
+ def get_check_sum_pattern
16
+ ''
17
+ end
18
+
19
+ # Override method for checksum type
20
+ def get_check_sum_type
21
+ 'none'
22
+ end
23
+
24
+ # Override method for getting index URLs. This is a dummy URL
25
+ # which is not accessible.
26
+ def index_urls
27
+ ['https://download.redhat.com/isos/@release@/@arch@/']
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,59 @@
1
+ # Requires
2
+ require 'OS/CentOS/Server'
3
+ require_relative 'FedoraCD'
4
+
5
+ # OS class that handles details for generating Packer files for Fedora
6
+ # Servers.
7
+ module PackerFiles
8
+ module RHEL
9
+
10
+ class Fedora < PackerFiles::CentOS::Server
11
+
12
+ # Constructor. Yield self for further initialization
13
+ def initialize
14
+ yield self if block_given?
15
+ end
16
+
17
+ # Hook function called before normalizing CD Image
18
+ def cd_image_hook
19
+ self.CDImage.impl = PackerFiles::Fedora::CD.new
20
+ end
21
+
22
+ # Hook for writing into preseed file.
23
+ def kickstart_write_hook(objects)
24
+
25
+ # Preseed file by evaluating templates @ Debian folder.
26
+ kickstart = PackerFiles::CentOS::Kickstart.new(kickstart_file)
27
+
28
+ # Evaluate Head
29
+ kickstart.eval_file('CentOS/Templates/Base_erb.rb', {})
30
+
31
+ # Convert objects into Preseed configuration.
32
+ objects.each do |obj|
33
+ kickstart.convert obj, 'CentOS/Templates'
34
+ end
35
+
36
+ # Evaluate tail
37
+ kickstart.eval_file('RHEL/Templates/Fedora_Tail_erb.rb', {'obj' => self})
38
+
39
+ end
40
+
41
+ # Name of the preseed file
42
+ def kickstart_file
43
+ rel = self.CDImage.release
44
+ arch = self.CDImage.arch
45
+ name = "kickstart-fedora-server-#{rel}-#{arch}.cfg"
46
+ File.join(http_dir, name)
47
+ end
48
+
49
+ # Boot Command hook for Fedora
50
+ def boot_command
51
+ file = PackerFiles.DirPath('RHEL/Templates/boot_command_fedora_erb.rb')
52
+ hash = { 'obj' => self, 'network' => self.Network }
53
+ value = PackerFiles.evaluate_erb(file.first, hash)
54
+ value.split("\n")
55
+ end
56
+
57
+ end
58
+ end
59
+ end