PackerFiles 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/PackerFiles.gemspec +36 -0
- data/README.md +32 -0
- data/Rakefile +21 -0
- data/bin/pkf +5 -0
- data/lib/PackerFiles/CLI/OS.rb +44 -0
- data/lib/PackerFiles/CLI/Root.rb +41 -0
- data/lib/PackerFiles/Core/Base.rb +23 -0
- data/lib/PackerFiles/Core/CDImage.rb +185 -0
- data/lib/PackerFiles/Core/Disk.rb +135 -0
- data/lib/PackerFiles/Core/Exceptions.rb +65 -0
- data/lib/PackerFiles/Core/Hypervisor.rb +96 -0
- data/lib/PackerFiles/Core/Keyboard.rb +38 -0
- data/lib/PackerFiles/Core/Locale.rb +62 -0
- data/lib/PackerFiles/Core/LogicalVolume.rb +41 -0
- data/lib/PackerFiles/Core/Network.rb +67 -0
- data/lib/PackerFiles/Core/Packages.rb +30 -0
- data/lib/PackerFiles/Core/Partition.rb +41 -0
- data/lib/PackerFiles/Core/TimeZone.rb +45 -0
- data/lib/PackerFiles/Core/User.rb +46 -0
- data/lib/PackerFiles/Core/VolumeGroup.rb +50 -0
- data/lib/PackerFiles/Core/example/CDImage.txt +75 -0
- data/lib/PackerFiles/Core/example/Disk.txt +29 -0
- data/lib/PackerFiles/Core/example/Hypervisor.txt +111 -0
- data/lib/PackerFiles/Core/example/Keyboard.txt +28 -0
- data/lib/PackerFiles/Core/example/Locale.txt +31 -0
- data/lib/PackerFiles/Core/example/Network.txt +68 -0
- data/lib/PackerFiles/Core/example/Packages.txt +22 -0
- data/lib/PackerFiles/Core/example/TimeZone.txt +36 -0
- data/lib/PackerFiles/Core/example/User.txt +48 -0
- data/lib/PackerFiles/OS/Builder.rb +116 -0
- data/lib/PackerFiles/OS/CentOS/CD.rb +81 -0
- data/lib/PackerFiles/OS/CentOS/Kickstart.rb +64 -0
- data/lib/PackerFiles/OS/CentOS/Server.rb +170 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Base_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Disk_erb.rb +35 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Keyboard_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Locale_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Network_erb.rb +17 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Packages_erb.rb +34 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Tail_erb.rb +15 -0
- data/lib/PackerFiles/OS/CentOS/Templates/TimeZone_erb.rb +10 -0
- data/lib/PackerFiles/OS/CentOS/Templates/User_erb.rb +20 -0
- data/lib/PackerFiles/OS/CentOS/Templates/boot_command_erb.rb +16 -0
- data/lib/PackerFiles/OS/CentOS/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/disable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Apt.rb +42 -0
- data/lib/PackerFiles/OS/Debian/CD.rb +65 -0
- data/lib/PackerFiles/OS/Debian/Mirrors.rb +73 -0
- data/lib/PackerFiles/OS/Debian/Preseed.rb +64 -0
- data/lib/PackerFiles/OS/Debian/Server.rb +169 -0
- data/lib/PackerFiles/OS/Debian/Templates/Apt_erb.rb +18 -0
- data/lib/PackerFiles/OS/Debian/Templates/Disk_erb.rb +69 -0
- data/lib/PackerFiles/OS/Debian/Templates/Keyboard_erb.rb +5 -0
- data/lib/PackerFiles/OS/Debian/Templates/Locale_erb.rb +7 -0
- data/lib/PackerFiles/OS/Debian/Templates/Mirrors_erb.rb +9 -0
- data/lib/PackerFiles/OS/Debian/Templates/Network_erb.rb +19 -0
- data/lib/PackerFiles/OS/Debian/Templates/Packages_erb.rb +6 -0
- data/lib/PackerFiles/OS/Debian/Templates/TimeZone_erb.rb +6 -0
- data/lib/PackerFiles/OS/Debian/Templates/User_erb.rb +14 -0
- data/lib/PackerFiles/OS/Debian/Templates/boot_command_erb.rb +24 -0
- data/lib/PackerFiles/OS/Debian/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Templates/disable_root_erb.rb +5 -0
- data/lib/PackerFiles/OS/Debian/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/example/Apt.txt +55 -0
- data/lib/PackerFiles/OS/DocGenerator.rb +51 -0
- data/lib/PackerFiles/OS/Finder.rb +96 -0
- data/lib/PackerFiles/OS/RHEL/CD.rb +32 -0
- data/lib/PackerFiles/OS/RHEL/Fedora.rb +59 -0
- data/lib/PackerFiles/OS/RHEL/FedoraCD.rb +68 -0
- data/lib/PackerFiles/OS/RHEL/Server.rb +32 -0
- data/lib/PackerFiles/OS/RHEL/Templates/Fedora_Tail_erb.rb +14 -0
- data/lib/PackerFiles/OS/RHEL/Templates/boot_command_fedora_erb.rb +16 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Base_erb.xml +32 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Disk_erb.xml +110 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Keyboard_erb.xml +7 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Locale_erb.xml +18 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Network_erb.xml +143 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Packages_erb.xml +29 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Tail_erb.xml +4 -0
- data/lib/PackerFiles/OS/SUSE/Templates/TimeZone_erb.xml +15 -0
- data/lib/PackerFiles/OS/SUSE/Templates/User_erb.xml +57 -0
- data/lib/PackerFiles/OS/SUSE/Templates/boot_command_erb.rb +23 -0
- data/lib/PackerFiles/OS/SUSE/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/disable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Ubuntu/CD.rb +81 -0
- data/lib/PackerFiles/OS/Ubuntu/Desktop.rb +50 -0
- data/lib/PackerFiles/OS/Ubuntu/DesktopCD.rb +16 -0
- data/lib/PackerFiles/OS/Ubuntu/Mirrors.rb +103 -0
- data/lib/PackerFiles/OS/Ubuntu/Server.rb +78 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/Apt_erb.rb +18 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_desktop_erb.rb +36 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_erb.rb +30 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/ubiquity_erb.rb +8 -0
- data/lib/PackerFiles/OS/example/Doc.txt +8 -0
- data/lib/PackerFiles/Provision/Base.rb +20 -0
- data/lib/PackerFiles/Provision/ChefSolo.rb +90 -0
- data/lib/PackerFiles/Provision/ChefSoloHelper.rb +72 -0
- data/lib/PackerFiles/Provision/Copy.rb +22 -0
- data/lib/PackerFiles/Provision/ExternalScript.rb +43 -0
- data/lib/PackerFiles/Provision/InlineScript.rb +37 -0
- data/lib/PackerFiles/Provision/Provisioners.rb +87 -0
- data/lib/PackerFiles/Provision/example/Provisioners.txt +21 -0
- data/lib/PackerFiles/Utils/AutoZone.rb +96 -0
- data/lib/PackerFiles/Utils/FastestURL.rb +73 -0
- data/lib/PackerFiles/Utils/Generator.rb +34 -0
- data/lib/PackerFiles/Utils/HashSerializer.rb +110 -0
- data/lib/PackerFiles/Utils/Size.rb +44 -0
- data/lib/PackerFiles/Utils/TypeAccessor.rb +71 -0
- data/lib/PackerFiles/Virtual/Hypervisors.rb +72 -0
- data/lib/PackerFiles/Virtual/KVM.rb +119 -0
- data/lib/PackerFiles/Virtual/KVMConverter.rb +79 -0
- data/lib/PackerFiles/Virtual/VMWare.rb +108 -0
- data/lib/PackerFiles/Virtual/VMWareConverter.rb +78 -0
- data/lib/PackerFiles/Virtual/VirtualBox.rb +98 -0
- data/lib/PackerFiles/Virtual/VirtualBoxConverter.rb +75 -0
- data/lib/PackerFiles/Virtual/example/Hypervisors.txt +23 -0
- data/lib/PackerFiles/version.rb +3 -0
- data/lib/PackerFiles.rb +44 -0
- data/spec/core/builder_spec.rb +84 -0
- data/spec/core/cdimage_spec.rb +159 -0
- data/spec/core/disk_spec.rb +191 -0
- data/spec/core/keyboard_spec.rb +36 -0
- data/spec/core/locale_spec.rb +73 -0
- data/spec/core/network_spec.rb +96 -0
- data/spec/core/packages_spec.rb +18 -0
- data/spec/core/timezone_spec.rb +43 -0
- data/spec/core/user_spec.rb +44 -0
- data/spec/core/volume_group_spec.rb +53 -0
- data/spec/os/centos/cd_spec.rb +12 -0
- data/spec/os/centos/data/Server-Script-Provisioner.rb +57 -0
- data/spec/os/centos/data/Server.rb +55 -0
- data/spec/os/centos/data/chef-solo-provisioner.rb +58 -0
- data/spec/os/centos/finder_spec.rb +22 -0
- data/spec/os/centos/templates/boot_command_spec.rb +57 -0
- data/spec/os/centos/templates/disk_spec.rb +79 -0
- data/spec/os/centos/templates/keyboard_spec.rb +18 -0
- data/spec/os/centos/templates/locale_spec.rb +26 -0
- data/spec/os/centos/templates/network_spec.rb +38 -0
- data/spec/os/centos/templates/packages_spec.rb +18 -0
- data/spec/os/centos/templates/timezone_spec.rb +37 -0
- data/spec/os/centos/templates/user_spec.rb +24 -0
- data/spec/os/debian/apt_spec.rb +50 -0
- data/spec/os/debian/cd_spec.rb +30 -0
- data/spec/os/debian/data/7zip.tar.gz +0 -0
- data/spec/os/debian/data/All-sections.rb +60 -0
- data/spec/os/debian/data/Chef-Solo-Provisioner.rb +60 -0
- data/spec/os/debian/data/Copy-Provisioner.rb +61 -0
- data/spec/os/debian/data/External-Script-Provisioner.rb +69 -0
- data/spec/os/debian/data/Missing-CDImage.rb +53 -0
- data/spec/os/debian/data/Missing-VMWare-KVM-sections.rb +51 -0
- data/spec/os/debian/data/Missing-sections.rb +53 -0
- data/spec/os/debian/data/Script-Provisioner.rb +62 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/Berksfile.lock +32 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/README.md +81 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/attributes/default.rb +3 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/metadata.rb +11 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/recipes/default.rb +30 -0
- data/spec/os/debian/data/chef-solo.json +5 -0
- data/spec/os/debian/data/test-script.sh +4 -0
- data/spec/os/debian/finder_spec.rb +59 -0
- data/spec/os/debian/mirrors_spec.rb +18 -0
- data/spec/os/debian/preseed_spec.rb +56 -0
- data/spec/os/debian/server_spec.rb +59 -0
- data/spec/os/debian/templates/apt_spec.rb +20 -0
- data/spec/os/debian/templates/boot_command_spec.rb +56 -0
- data/spec/os/debian/templates/disk_spec.rb +81 -0
- data/spec/os/debian/templates/keyboard_spec.rb +18 -0
- data/spec/os/debian/templates/locale_spec.rb +36 -0
- data/spec/os/debian/templates/mirrors_spec.rb +16 -0
- data/spec/os/debian/templates/network_spec.rb +38 -0
- data/spec/os/debian/templates/packages_spec.rb +17 -0
- data/spec/os/debian/templates/timezone_spec.rb +36 -0
- data/spec/os/debian/templates/user_spec.rb +25 -0
- data/spec/os/finder_spec.rb +21 -0
- data/spec/os/rhel/data/Fedora.rb +45 -0
- data/spec/os/rhel/data/Server-Custom.rb +54 -0
- data/spec/os/rhel/data/Server.rb +45 -0
- data/spec/os/rhel/finder_spec.rb +21 -0
- data/spec/os/ubuntu/cd_spec.rb +28 -0
- data/spec/os/ubuntu/data/Desktop.rb +61 -0
- data/spec/os/ubuntu/data/Server.rb +61 -0
- data/spec/os/ubuntu/finder_spec.rb +17 -0
- data/spec/os/ubuntu/mirrors_spec.rb +18 -0
- data/spec/utils/autozone_spec.rb +33 -0
- data/spec/virtual/virtual_box_spec.rb +16 -0
- 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,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,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 @@
|
|
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
|