PackerFiles 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,170 @@
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 'Kickstart'
15
+ require_relative 'CD'
16
+
17
+ # OS class that handles details for generating Packer files for CentOS
18
+ # Servers.
19
+ module PackerFiles
20
+ module CentOS
21
+
22
+ class Server < Builder
23
+
24
+ # List of type accessors used by this class that also gets converted
25
+ # to a preseed
26
+ def self.preseed_accessors
27
+ [Core::Locale, Core::Keyboard, Core::TimeZone,
28
+ Core::User, Core::Disk, Core::Network,
29
+ Core::Packages
30
+ ]
31
+ end
32
+
33
+ # Create accessors based on Type
34
+ self.preseed_accessors.each do |type|
35
+ type_accessor type
36
+ end
37
+
38
+ # Constructor. Yield self for further initialization
39
+ def initialize
40
+ yield self if block_given?
41
+ end
42
+
43
+ # hook function for generation
44
+ def generate_hook
45
+
46
+ # Construct objects that needs to be converted by using accessors.
47
+ # The tracker type_accessors tracks the mapping b/w Type names and
48
+ # method calls.
49
+ objects = []
50
+ objects.push self.Locale, self.Keyboard, self.TimeZone, self.User
51
+ objects.push self.Disk, self.Network, self.Packages
52
+ objects.each do |obj|
53
+ obj.normalize
54
+ end
55
+
56
+ # Call a hook function to customize kickstart generation by
57
+ # derived classes.
58
+ kickstart_write_hook(objects)
59
+ end
60
+
61
+ # Hook function called before normalizing CD Image
62
+ def cd_image_hook
63
+ self.CDImage.impl = CD.new
64
+ end
65
+
66
+ # Hook function called for converting this object into a hash for
67
+ # VirtualBox
68
+ def vbox_converter_hook(gen)
69
+ Virtual::VirtualBoxConverter.new(self, gen).value
70
+ end
71
+
72
+ # Hook function called for converting this object into a hash for
73
+ # KVM
74
+ def kvm_converter_hook(gen)
75
+ Virtual::KVMConverter.new(self, gen).value
76
+ end
77
+
78
+ # Hook function called for converting this object into a hash for
79
+ # VMWare
80
+ def vmware_converter_hook(gen)
81
+ Virtual::VMWareConverter.new(self, gen).value
82
+ end
83
+
84
+ # Hook for writing into preseed file.
85
+ def kickstart_write_hook(objects)
86
+
87
+ # Preseed file by evaluating templates @ Debian folder.
88
+ kickstart = Kickstart.new(kickstart_file)
89
+
90
+ # Evaluate Head
91
+ kickstart.eval_file('CentOS/Templates/Base_erb.rb', {})
92
+
93
+ # Convert objects into Preseed configuration.
94
+ objects.each do |obj|
95
+ kickstart.convert obj, 'CentOS/Templates'
96
+ end
97
+
98
+ # Evaluate tail
99
+ kickstart.eval_file('CentOS/Templates/Tail_erb.rb', {'obj' => self})
100
+
101
+ end
102
+
103
+ # Name of the preseed file
104
+ def kickstart_file
105
+ rel = self.CDImage.release
106
+ arch = self.CDImage.arch
107
+ name = "kickstart-centos-server-#{rel}-#{arch}.cfg"
108
+ File.join(http_dir, name)
109
+ end
110
+
111
+ # Boot Command Override
112
+ def boot_command
113
+ file = PackerFiles.DirPath('CentOS/Templates/boot_command_erb.rb')
114
+ hash = { 'obj' => self, 'network' => self.Network }
115
+ value = PackerFiles.evaluate_erb(file.first, hash)
116
+ value.split("\n")
117
+ end
118
+
119
+ # Shutdown command Override
120
+ def shutdown_command
121
+ file = PackerFiles.DirPath('CentOS/Templates/shutdown_command_erb.rb')
122
+ hash = { 'obj' => self.User }
123
+ value = PackerFiles.evaluate_erb(file.first, hash)
124
+ value.chop
125
+ end
126
+
127
+ # Guest OS Type override
128
+ def guest_os_type
129
+ return "RedHat_64" if (self.CDImage.arch == "x86_64")
130
+ return "RedHat"
131
+ end
132
+
133
+ # VMWare Guest OS Type override
134
+ def vmware_guest_os_type
135
+ return "rhel4-64" if (self.CDImage.arch == "x86_64")
136
+ return "rhel4"
137
+ end
138
+
139
+ # VMWare Guest Flavor override
140
+ def vmware_guest_os_flavor
141
+ return "linux"
142
+ end
143
+
144
+ # Run any given command as root
145
+ def run_command_as_root
146
+ file = PackerFiles.DirPath('CentOS/Templates/command_as_root_erb.rb')
147
+ hash = { 'obj' => self }
148
+ value = PackerFiles.evaluate_erb(file.first, hash)
149
+ value.chop
150
+ end
151
+
152
+ # Enable root user command w/o a password
153
+ def enable_root_for_user
154
+ file = PackerFiles.DirPath('CentOS/Templates/enable_root_erb.rb')
155
+ hash = { 'obj' => self }
156
+ value = PackerFiles.evaluate_erb(file.first, hash)
157
+ value.chop
158
+ end
159
+
160
+ # Disable root user command w/o a password
161
+ def disable_root_for_user
162
+ file = PackerFiles.DirPath('CentOS/Templates/disable_root_erb.rb')
163
+ hash = { 'obj' => self }
164
+ value = PackerFiles.evaluate_erb(file.first, hash)
165
+ value.chop
166
+ end
167
+
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,4 @@
1
+ # Install from CDROM sources
2
+ install
3
+ cdrom
4
+
@@ -0,0 +1,35 @@
1
+ # Disk and Partition related
2
+ bootloader --location=mbr
3
+ zerombr
4
+ clearpart --all --initlabel
5
+
6
+ # Case 1: When just a disk is given, always use the regular atomic
7
+ # recipe, unless indicated otherwise.
8
+ <% if @obj.is_raw? -%>
9
+ autopart
10
+ <% end -%>
11
+
12
+ # Case 2: A disk with multiple partitions
13
+ <% if @obj.only_partitions? -%>
14
+ <% @obj.partitions.each do |part| -%>
15
+ <% if part.file_system == 'linux-swap' -%>
16
+ partition swap --recommended --size=<%= part.size -%> --grow
17
+ <% else -%>
18
+ partition <%= part.mount_point -%> --size=<%= part.size -%> --fstype=<%= part.file_system %>
19
+ <% end -%>
20
+ <% end -%>
21
+ <% end -%>
22
+
23
+ # Case 3: A disk with Logical Volumes
24
+ <% if @obj.only_vg? -%>
25
+ partition pv.01 --size=<%= @obj.size -%> --grow
26
+ volgroup <%= @obj.vg.name -%> pv.01
27
+ <% @obj.vg.lvs.each do |lv| -%>
28
+ <% if lv.file_system == 'linux-swap' -%>
29
+ logvol swap --recommended --size=<%= lv.size -%> --grow --name=<%= lv.name -%> --vgname=<%= lv.vg_name %>
30
+ <% else -%>
31
+ logvol <%= lv.mount_point -%> --size=<%= lv.size -%> --fstype=<%= lv.file_system -%> --name=<%= lv.name -%> --vgname=<%= lv.vg_name %>
32
+ <% end -%>
33
+ <% end -%>
34
+ <% end -%>
35
+
@@ -0,0 +1,4 @@
1
+ # Specify the Keyboard to use
2
+ keyboard <%= @obj.layout -%>
3
+
4
+
@@ -0,0 +1,4 @@
1
+ # Specify locale
2
+ lang <%= @obj.default -%>
3
+
4
+
@@ -0,0 +1,17 @@
1
+ # Network Configuration
2
+ <% if (@obj.is_static?) && ((@obj.type & PackerFiles::Core::Network::IPV4) > 0) -%>
3
+ network --device=<%= @obj.interface -%> --bootproto=static --ip=<%= @obj.ip -%> --netmask=<%= @obj.mask -%> --gateway=<%= @obj.gateway -%> --nameserver=<%= @obj.dns.join(',') -%>
4
+ <% elsif (@obj.is_static?) && ((@obj.type & PackerFiles::Core::Network::IPV6) > 0) -%>
5
+ network --device=<%= @obj.interface -%> --bootproto=static --ipv6=<%= @obj.ip -%> --netmask=<%= @obj.mask -%> --ipv6gateway=<%= @obj.gateway -%> --nameserver=<%= @obj.dns.join(',') -%>
6
+ <% elsif (!@obj.is_static?) && ((@obj.type & PackerFiles::Core::Network::IPV6) > 0) -%>
7
+ network --device=<%= @obj.interface -%> --bootproto=dhcp --noipv4
8
+ <% elsif (!@obj.is_static?) && ((@obj.type & PackerFiles::Core::Network::IPV4) > 0) -%>
9
+ network --device=<%= @obj.interface -%> --bootproto=dhcp --noipv6
10
+ <% end -%>
11
+
12
+ # Enable Firewall
13
+ firewall --enabled --trust=<%= @obj.interface -%> --ssh
14
+
15
+ # Run SELINux in permissive mode
16
+ selinux --permissive
17
+
@@ -0,0 +1,34 @@
1
+ # Install the following packages
2
+ %packages --nobase --ignoremissing --excludedocs
3
+ <%= @obj.list.join("\n") -%>
4
+
5
+ # unnecessary firmware
6
+ -aic94xx-firmware
7
+ -atmel-firmware
8
+ -b43-openfwwf
9
+ -bfa-firmware
10
+ -ipw2100-firmware
11
+ -ipw2200-firmware
12
+ -ivtv-firmware
13
+ -iwl100-firmware
14
+ -iwl1000-firmware
15
+ -iwl3945-firmware
16
+ -iwl4965-firmware
17
+ -iwl5000-firmware
18
+ -iwl5150-firmware
19
+ -iwl6000-firmware
20
+ -iwl6000g2a-firmware
21
+ -iwl6050-firmware
22
+ -libertas-usb8388-firmware
23
+ -ql2100-firmware
24
+ -ql2200-firmware
25
+ -ql23xx-firmware
26
+ -ql2400-firmware
27
+ -ql2500-firmware
28
+ -rt61pci-firmware
29
+ -rt73usb-firmware
30
+ -xorg-x11-drv-ati-firmware
31
+ -zd1211-firmware
32
+ %end
33
+
34
+
@@ -0,0 +1,15 @@
1
+ # Misc. Parameters that are required for installation.
2
+ unsupported_hardware
3
+ text
4
+ firstboot --disabled
5
+ reboot
6
+
7
+ # Post Install Script
8
+ %post
9
+
10
+ # enable sudo for first user
11
+ <% str="%#{@obj.User.login} ALL=(ALL) NOPASSWD: ALL" -%>
12
+ echo "<%= str -%>" >> /etc/sudoers.d/<%= @obj.User.login %>
13
+ sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers
14
+
15
+ %end
@@ -0,0 +1,10 @@
1
+ # Set the time zone configuration
2
+ <% if @obj.utc
3
+ utc = '--utc'
4
+ else
5
+ utc = ''
6
+ end
7
+ -%>
8
+ timezone <%= utc -%> <%= @obj.zone -%>
9
+
10
+
@@ -0,0 +1,20 @@
1
+ # Initial User configuration
2
+ <% if @obj.uid.nil?
3
+ uid = ''
4
+ else
5
+ uid = "--uid=#{@obj.uid}"
6
+ end
7
+ if @obj.groups.nil? || @obj.groups.empty?
8
+ groups = ''
9
+ else
10
+ groups = "--groups=" + @obj.groups.join(",")
11
+ end
12
+ -%>
13
+ user --name=<%= @obj.login -%> --password=<%= @obj.password -%> <%= uid -%> <%= groups %>
14
+
15
+ # Also specify the root password along with it.
16
+ rootpw <%= @obj.password -%>
17
+
18
+ # Enable shadow passwords with SHA-512 hash
19
+ auth --enableshadow --passalgo=sha512
20
+
@@ -0,0 +1,16 @@
1
+ <% kickstart = @obj.kickstart_file.gsub(@obj.http_dir,'').gsub('/', '') -%>
2
+ <% if @network.nil? -%>
3
+ <tab> text ks=http://{{user `host`}}:{{user `port`}}/<%= kickstart -%> <wait>
4
+ <% elsif !@network.is_static? -%>
5
+ <tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/<%= kickstart -%> <wait>
6
+ <% else -%>
7
+ <tab> text ks=http://{{user `host`}}:{{user `port`}}/<%= kickstart -%> <wait>
8
+ <% end -%>
9
+ <% if !@network.nil? && @network.is_static? -%>
10
+ ip=<%= @network.ip %> <wait>
11
+ netmask=<%= @network.mask %> <wait>
12
+ gateway=<%= @network.gateway %> <wait>
13
+ dns=<%= @network.dns.join(" ") %> <wait>
14
+ ksdevice=<%= @network.interface %> <wait>
15
+ <% end -%>
16
+ <enter><wait>
@@ -0,0 +1 @@
1
+ echo '<%= @obj.User.password -%>' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'
@@ -0,0 +1 @@
1
+ rm -rf /etc/sudoers/<%= @obj.User.login %>
@@ -0,0 +1 @@
1
+ echo "<%= @obj.User.login -%> ALL=NOPASSWD: ALL" >> /etc/sudoers.d/<%= @obj.User.login %>
@@ -0,0 +1 @@
1
+ sudo /sbin/halt -h -p
@@ -0,0 +1,42 @@
1
+ # Requires
2
+ require 'Core/Base'
3
+ require 'Core/Exceptions'
4
+
5
+ # Apt Setup handles all apt-related questions during the initial
6
+ # phase of OS installation.
7
+ module PackerFiles
8
+ module Debian
9
+ class Apt < Core::Base
10
+
11
+ # Accessors
12
+ attr_accessor :tasks
13
+ attr_accessor :non_free
14
+ attr_accessor :contrib
15
+ attr_accessor :upgrades
16
+ attr_accessor :kernel
17
+
18
+ # Documentation for this class
19
+ def self.doc_file
20
+ PackerFiles.DirPath('Debian/example/Apt.txt').first
21
+ end
22
+
23
+ # Constructor
24
+ def initialize
25
+ @tasks = []
26
+ @non_free = false
27
+ @contrib = false
28
+ @upgrades = 'none'
29
+ @kernel = 'linux-server'
30
+ yield self if block_given?
31
+ end
32
+
33
+ # Normalize
34
+ def normalize
35
+ raise Core::NilException.new(self, 'tasks') if @tasks.nil?
36
+ raise Core::NilException.new(self, 'kernel') if @kernel.nil?
37
+ raise Core::EmptyArrayException.new(self, 'tasks') if @tasks.empty?
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,65 @@
1
+ # Requires
2
+ require 'uri'
3
+ require 'open-uri'
4
+ require 'nokogiri'
5
+ require "Core/CDImage"
6
+ require "Utils/AutoZone"
7
+
8
+ # An implementation for CDImage which lists all available Debian CD Mirrors
9
+ module PackerFiles
10
+ module Debian
11
+ class CD < Core::CDImageImpl
12
+
13
+ # Index URL which contains all the Debian CD Mirror list
14
+ @@index = 'https://www.debian.org/CD/http-ftp/'
15
+
16
+ # Override method for getting the ISO name
17
+ def get_iso_name_pattern
18
+ 'debian-@release@-@arch@-CD-1.iso'
19
+ end
20
+
21
+ # Override method for getting checksums
22
+ def get_check_sum_pattern
23
+ 'MD5SUMS'
24
+ end
25
+
26
+ # Override method for checksum type
27
+ def get_check_sum_type
28
+ 'md5'
29
+ end
30
+
31
+ # Override method for getting index URLs.
32
+ def index_urls
33
+ master_index_urls + mirror_index_urls
34
+ end
35
+
36
+ # The Index URLs from the main debian CD Image server.
37
+ private
38
+ def master_index_urls
39
+ %w[
40
+ http://cdimage.debian.org/debian-cd/@release@/@arch@/iso-cd/
41
+ http://cdimage.debian.org/mirror/cdimage/archive/@release@/@arch@/iso-cd/
42
+ ]
43
+ end
44
+
45
+ # The Index URLs from other debian CD mirrors. The CD Mirrors only support CD
46
+ # images and not DVD Images.
47
+ private
48
+ def mirror_index_urls
49
+
50
+ # Use nokogiri to parse the index page, to get all the URLs that contain
51
+ # country name [as detected by AutoZone]. Unfortunately this code can only
52
+ # be understood if HTML structure is visually inspected first. In short,
53
+ # debian mirrors for all the countries in the index file, looks like
54
+ # <li> "Country" <a rel="nofollow" href="http://debian.xfree.com.ar/debian-cd/"> </li>
55
+ page = Nokogiri::HTML(open(@@index))
56
+ country = Utils::AutoZone.new.JSON['country']
57
+ nodes = page.css('li').select {|node| node.text.include?(country)}
58
+ arefs = nodes.map {|node| node.css('a')}.flatten
59
+ mirrors = arefs.map {|aref| aref.attribute('href').value}
60
+ mirrors.map! {|m| URI::join(m, '@release@/@arch@/iso-cd/').to_s}
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,73 @@
1
+ # Requires
2
+ require 'open-uri'
3
+ require 'benchmark'
4
+ require 'uri'
5
+ require 'Utils/AutoZone'
6
+ require 'Utils/FastestURL'
7
+
8
+ # Auto configures the debian mirror list. This is useful in pre-seeding
9
+ # the fastest possible mirror.
10
+ module PackerFiles
11
+ module Debian
12
+ class Mirrors
13
+
14
+ # default debian mirror
15
+ @@default = 'http://mirrors.kernel.org/debian'
16
+
17
+ # Default debian mirror list
18
+ @@mirrors = 'https://www.debian.org/mirror/list'
19
+
20
+ # accessors
21
+ attr_reader :hosts
22
+ attr_reader :best
23
+ attr_reader :proxy
24
+
25
+ # Constructor
26
+ def initialize
27
+
28
+ # A Single web page get more than this (in seconds) is SLOW
29
+ limit = 1
30
+
31
+ # No. of trials for a web page
32
+ trials = 4
33
+
34
+ # Get the name of the http proxy
35
+ @proxy = ENV['http_proxy']
36
+
37
+ # Get the host list of mirrors for this country
38
+ code = Utils::AutoZone.new.country_code.downcase
39
+ @hosts = country_mirror(code)
40
+ if @hosts.empty?
41
+ @hosts = [@@default] if @hosts.empty?
42
+ @best = URI::parse(@@default)
43
+ else
44
+ f = Utils::FastestURL.new(limit, trials)
45
+ all = f.best_urls(@hosts).flatten
46
+ begin
47
+ @best = URI::parse(all.first)
48
+ rescue Exception => e
49
+ puts "Exception: #{e}, All: #{all.to_s}"
50
+ raise e
51
+ end
52
+ end
53
+ end
54
+
55
+ # Given the country code, get a list of mirror sites that match
56
+ # the country code.
57
+ private
58
+ def country_mirror(code)
59
+ arr = []
60
+ regex = 'href=\"(http://.+\.' + code + '\/.+)"'
61
+ open(@@mirrors) {|f|
62
+ f.each_line do |line|
63
+ if match = line.match(regex)
64
+ arr.push(match[1])
65
+ end
66
+ end
67
+ }
68
+ return arr
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,64 @@
1
+ # Requires
2
+ require 'rubygems'
3
+
4
+ # OS class that handles details for generating Preseed files for Debian
5
+ # Servers.
6
+ module PackerFiles
7
+ module Debian
8
+
9
+ class Preseed
10
+
11
+ # Constructor. The preseed file name is the name of the file
12
+ # that will be written to.
13
+ def initialize(filename)
14
+ @preseed = filename
15
+ create_file
16
+ end
17
+
18
+ # Serializes the given object and write out the content
19
+ # in the output file.
20
+ def convert(obj, os_name)
21
+ file = erb_file(obj, os_name)
22
+ content = PackerFiles.evaluate_erb(file, { "obj" => obj })
23
+ add_content(content)
24
+ end
25
+
26
+ # Evaluate a partially specified file name (should be in the Gem's
27
+ # file list though) and add the content to the @preseed file
28
+ def eval_file(file_name, hash)
29
+ erb_file = PackerFiles.DirPath(file_name).first
30
+ content = PackerFiles.evaluate_erb(erb_file, hash)
31
+ add_content(content)
32
+ end
33
+
34
+ # Given an object, figure out the class name and return back the correct
35
+ # erb file name.
36
+ private
37
+ def erb_file(obj, os_name)
38
+
39
+ erb_file = File.join(os_name, obj.class.name.gsub(/.*::/,'') + '_erb.rb')
40
+ erb_path = PackerFiles.DirPath(erb_file)
41
+
42
+ if erb_path.nil? || erb_path.empty?
43
+ raise RuntimeError.new("Template Path #{erb_file} does not exist")
44
+ end
45
+ return erb_path.first
46
+ end
47
+
48
+ # Create a new file with no content
49
+ private
50
+ def create_file
51
+ basename = File.dirname(@preseed)
52
+ FileUtils.mkdir_p(basename) if !Dir.exist?(basename)
53
+ File.open(@preseed, 'w') {|f| f.write ''}
54
+ end
55
+
56
+ # Add content to the preseed file
57
+ private
58
+ def add_content(content)
59
+ File.open(@preseed, 'a') {|f| f.write(content) }
60
+ end
61
+
62
+ end
63
+ end
64
+ end