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.
- 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
|