comfy 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +46 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +13 -0
  7. data/README.md +131 -0
  8. data/Rakefile +18 -0
  9. data/bin/comfy +4 -0
  10. data/comfy.gemspec +36 -0
  11. data/config/comfy.yml +20 -0
  12. data/lib/comfy/command_executioner.rb +225 -0
  13. data/lib/comfy/creator.rb +200 -0
  14. data/lib/comfy/errors/invalid_distribution_version_error.rb +1 -0
  15. data/lib/comfy/errors/no_such_distribution_version_error.rb +1 -0
  16. data/lib/comfy/errors/packer_error.rb +1 -0
  17. data/lib/comfy/errors/packer_execution_error.rb +1 -0
  18. data/lib/comfy/errors/packer_validation_error.rb +1 -0
  19. data/lib/comfy/errors.rb +4 -0
  20. data/lib/comfy/extensions/yell.rb +8 -0
  21. data/lib/comfy/settings.rb +15 -0
  22. data/lib/comfy/templater.rb +62 -0
  23. data/lib/comfy/version.rb +3 -0
  24. data/lib/comfy.rb +18 -0
  25. data/lib/templates/centos/centos.cfg.erb +47 -0
  26. data/lib/templates/centos/centos.description +20 -0
  27. data/lib/templates/centos/files/10-ipv6.conf +5 -0
  28. data/lib/templates/centos/files/check-mk-agent-meta-checks-2.0-1.noarch.rpm +0 -0
  29. data/lib/templates/centos/files/check-mk-agent-meta-key-1.0-1.noarch.rpm +0 -0
  30. data/lib/templates/centos/files/cloud.cfg +101 -0
  31. data/lib/templates/centos/files/fail2ban.local +3 -0
  32. data/lib/templates/centos/files/getty@ttyS0.service +47 -0
  33. data/lib/templates/centos/files/grub +11 -0
  34. data/lib/templates/centos/files/iptables-multiport.local +6 -0
  35. data/lib/templates/centos/files/jail.local +17 -0
  36. data/lib/templates/centos/files/krb5.conf +181 -0
  37. data/lib/templates/centos/files/ntp.conf +61 -0
  38. data/lib/templates/centos/files/pakiti-2.1.5-1.noarch.rpm +0 -0
  39. data/lib/templates/centos/files/sshd_config +152 -0
  40. data/lib/templates/centos/files/xen-domU.conf +1 -0
  41. data/lib/templates/centos/scripts/init.sh +83 -0
  42. data/lib/templates/debian/debian.cfg.erb +80 -0
  43. data/lib/templates/debian/debian.description +28 -0
  44. data/lib/templates/debian/files/.bashrc +112 -0
  45. data/lib/templates/debian/files/.gitconfig +7 -0
  46. data/lib/templates/debian/files/10-ipv6.conf +5 -0
  47. data/lib/templates/debian/files/DEPOT-GPG-KEY.cfg +32 -0
  48. data/lib/templates/debian/files/RPM-GPG-KEY-CERIT-SC.cfg +30 -0
  49. data/lib/templates/debian/files/backports.list +2 -0
  50. data/lib/templates/debian/files/cerit-cloudinit.list +2 -0
  51. data/lib/templates/debian/files/cloud.cfg +102 -0
  52. data/lib/templates/debian/files/depot.list +4 -0
  53. data/lib/templates/debian/files/depot_all.pref +6 -0
  54. data/lib/templates/debian/files/depot_check_mk.pref +5 -0
  55. data/lib/templates/debian/files/fail2ban.local +3 -0
  56. data/lib/templates/debian/files/getty@ttyS0.service +47 -0
  57. data/lib/templates/debian/files/grub +34 -0
  58. data/lib/templates/debian/files/inittab +69 -0
  59. data/lib/templates/debian/files/interfaces +15 -0
  60. data/lib/templates/debian/files/iptables-multiport.local +6 -0
  61. data/lib/templates/debian/files/jail.local +17 -0
  62. data/lib/templates/debian/files/krb5.conf +181 -0
  63. data/lib/templates/debian/files/meta-misc.list +2 -0
  64. data/lib/templates/debian/files/modules +15 -0
  65. data/lib/templates/debian/files/ntp.conf +61 -0
  66. data/lib/templates/debian/files/pakiti_2.1.5-2_all.deb +0 -0
  67. data/lib/templates/debian/files/sshd_config +131 -0
  68. data/lib/templates/debian/scripts/debian_cloud_script.sh +80 -0
  69. data/lib/templates/docker/docker.cfg.erb +87 -0
  70. data/lib/templates/docker/docker.description +21 -0
  71. data/lib/templates/docker/files/10-ipv6.conf +5 -0
  72. data/lib/templates/docker/files/DEPOT-GPG-KEY.cfg +32 -0
  73. data/lib/templates/docker/files/RPM-GPG-KEY-CERIT-SC.cfg +30 -0
  74. data/lib/templates/docker/files/cloud.cfg +109 -0
  75. data/lib/templates/docker/files/depot.list +4 -0
  76. data/lib/templates/docker/files/depot_all.pref +6 -0
  77. data/lib/templates/docker/files/depot_check_mk.pref +5 -0
  78. data/lib/templates/docker/files/docker.list +1 -0
  79. data/lib/templates/docker/files/fail2ban.local +3 -0
  80. data/lib/templates/docker/files/grub +34 -0
  81. data/lib/templates/docker/files/interfaces +15 -0
  82. data/lib/templates/docker/files/iptables-multiport.local +6 -0
  83. data/lib/templates/docker/files/jail.local +17 -0
  84. data/lib/templates/docker/files/krb5.conf +181 -0
  85. data/lib/templates/docker/files/meta-misc.list +2 -0
  86. data/lib/templates/docker/files/modules +15 -0
  87. data/lib/templates/docker/files/ntp.conf +61 -0
  88. data/lib/templates/docker/files/pakiti_2.1.5-2_all.deb +0 -0
  89. data/lib/templates/docker/files/sshd_config +131 -0
  90. data/lib/templates/docker/files/ttyS0.conf +11 -0
  91. data/lib/templates/docker/scripts/init.sh +65 -0
  92. data/lib/templates/packer.erb +93 -0
  93. data/lib/templates/scientificlinux/files/10-ipv6.conf +5 -0
  94. data/lib/templates/scientificlinux/files/check-mk-agent-meta-checks-2.0-1.noarch.rpm +0 -0
  95. data/lib/templates/scientificlinux/files/check-mk-agent-meta-key-1.0-1.noarch.rpm +0 -0
  96. data/lib/templates/scientificlinux/files/cloud.cfg +101 -0
  97. data/lib/templates/scientificlinux/files/fail2ban.local +3 -0
  98. data/lib/templates/scientificlinux/files/getty@ttyS0.service +47 -0
  99. data/lib/templates/scientificlinux/files/grub +10 -0
  100. data/lib/templates/scientificlinux/files/iptables-multiport.local +6 -0
  101. data/lib/templates/scientificlinux/files/jail.local +17 -0
  102. data/lib/templates/scientificlinux/files/krb5.conf +181 -0
  103. data/lib/templates/scientificlinux/files/ntp.conf +61 -0
  104. data/lib/templates/scientificlinux/files/pakiti-2.1.5-1.noarch.rpm +0 -0
  105. data/lib/templates/scientificlinux/files/sshd_config +150 -0
  106. data/lib/templates/scientificlinux/files/xen-domU.conf +1 -0
  107. data/lib/templates/scientificlinux/scientificlinux.cfg.erb +57 -0
  108. data/lib/templates/scientificlinux/scientificlinux.description +19 -0
  109. data/lib/templates/scientificlinux/scripts/init.sh +92 -0
  110. data/lib/templates/ubuntu/files/10-ipv6.conf +5 -0
  111. data/lib/templates/ubuntu/files/DEPOT-GPG-KEY.cfg +32 -0
  112. data/lib/templates/ubuntu/files/RPM-GPG-KEY-CERIT-SC.cfg +30 -0
  113. data/lib/templates/ubuntu/files/cloud.cfg +109 -0
  114. data/lib/templates/ubuntu/files/depot.list +4 -0
  115. data/lib/templates/ubuntu/files/depot_all.pref +6 -0
  116. data/lib/templates/ubuntu/files/depot_check_mk.pref +5 -0
  117. data/lib/templates/ubuntu/files/fail2ban.local +3 -0
  118. data/lib/templates/ubuntu/files/grub +34 -0
  119. data/lib/templates/ubuntu/files/interfaces +15 -0
  120. data/lib/templates/ubuntu/files/iptables-multiport.local +6 -0
  121. data/lib/templates/ubuntu/files/jail.local +17 -0
  122. data/lib/templates/ubuntu/files/krb5.conf +181 -0
  123. data/lib/templates/ubuntu/files/meta-misc.list +2 -0
  124. data/lib/templates/ubuntu/files/modules +15 -0
  125. data/lib/templates/ubuntu/files/ntp.conf +61 -0
  126. data/lib/templates/ubuntu/files/pakiti_2.1.5-2_all.deb +0 -0
  127. data/lib/templates/ubuntu/files/sshd_config +131 -0
  128. data/lib/templates/ubuntu/files/ttyS0.conf +11 -0
  129. data/lib/templates/ubuntu/scripts/init.sh +54 -0
  130. data/lib/templates/ubuntu/ubuntu.cfg.erb +87 -0
  131. data/lib/templates/ubuntu/ubuntu.description +21 -0
  132. data/schema/distribution_descriptor.schema +241 -0
  133. metadata +374 -0
@@ -0,0 +1,200 @@
1
+ require 'fileutils'
2
+ require 'mixlib/shellout'
3
+ require 'tmpdir'
4
+ require 'json'
5
+ require 'json-schema'
6
+ require 'cloud-appliance-descriptor'
7
+
8
+ # Creates given virtual machine images.
9
+ class Comfy::Creator
10
+ attr_accessor :data
11
+
12
+ TIMESTAMP_FORMAT = '%Y%m%d%H%M'
13
+
14
+ NEEDLE_REPLACEMENTS = {
15
+ :$v => lambda { |instance| instance.send(:version_string) },
16
+ :$t => lambda { |instance| Time.new.strftime(TIMESTAMP_FORMAT) },
17
+ :$n => lambda { |instance| instance.data[:distro]['name'] },
18
+ :$g => lambda { |instance| instance.data[:groups].join(',') }
19
+ }
20
+ REPLACEMENT_REGEX = /\$[a-zA-Z]/
21
+
22
+ # Creates a creator instance.
23
+ #
24
+ # @param options [Hashie::Mash] hash-like structure with options
25
+ def initialize(options)
26
+ @data = options.clone
27
+ end
28
+
29
+ # Method representing thw whole creation process. Prepares enviroment,
30
+ # prepare files and starts packer job.
31
+ def create
32
+ logger.info('Preparing for image creation...')
33
+
34
+ data[:server_dir] = Dir.mktmpdir('comfy')
35
+ logger.debug("Server root directory: #{data[:server_dir]}")
36
+
37
+ prepare_data
38
+ logger.debug("Prepared data: #{data}")
39
+
40
+ templater = Comfy::Templater.new data
41
+ templater.prepare_files
42
+
43
+ packer_file = "#{data[:server_dir]}/#{data[:distribution]}.packer"
44
+ run_packer(packer_file)
45
+
46
+ # let's create cloud appliance descriptor files
47
+ if data[:description]
48
+ data[:formats].each do |format|
49
+ name = data[:distribution]
50
+ major = data[:distro][:version]['major_version']
51
+ minor = data[:distro][:version]['minor_version']
52
+ dir = File.join(data[:'output-dir'], "comfy_#{name}-#{major}.#{minor}_#{format}/")
53
+ File.write(File.join(dir, "#{data[:identifier]}.json"), description(format))
54
+ end
55
+ end
56
+ end
57
+
58
+ # Cleans everything from temporary directory
59
+ def clean
60
+ if data[:server_dir]
61
+ logger.debug("Cleaning temporary directory #{data[:server_dir]}.")
62
+ FileUtils.remove_dir(data[:server_dir])
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ # Method wrapping usage of packer tool.
69
+ #
70
+ # @param packer_file descriptor file with info for packer processing.
71
+ def run_packer(packer_file)
72
+ logger.info("Calling Packer - building distribution: '#{data[:distribution]}'.")
73
+ packer = Mixlib::ShellOut.new("packer validate #{packer_file}")
74
+ packer.run_command
75
+
76
+ fail Comfy::Errors::PackerValidationError, "Packer validation failed for distribution '#{data[:distribution]}': #{packer.stdout}" if packer.error?
77
+
78
+ packer = Mixlib::ShellOut.new("packer build -parallel=false #{packer_file}", timeout: 5400)
79
+ packer.live_stream = logger
80
+ packer.run_command
81
+
82
+ fail Comfy::Errors::PackerExecutionError, "Packer finished with error for distribution '#{data[:distribution]}': #{packer.stderr}" if packer.error?
83
+
84
+ logger.info("Packer finished successfully for distribution '#{data[:distribution]}'")
85
+ end
86
+
87
+ # Preparation of various data. Method prepares description file for packer and distribution
88
+ # preseed / kickstart file.
89
+ def prepare_data
90
+ description_file = "#{data[:'template-dir']}/#{data[:distribution]}/#{data[:distribution]}.description"
91
+ JSON::Validator.validate!(Comfy::DESCRIPTION_SCHEMA_FILE, description_file)
92
+
93
+ description = File.read(description_file)
94
+ data[:distro] = JSON.parse(description)
95
+ logger.debug("Data from description file: #{data[:distro]}")
96
+
97
+ data[:distro][:version] = choose_version
98
+ logger.debug("Version selected for build: #{data[:distro][:version]}")
99
+
100
+ data[:provisioners] = {}
101
+ data[:provisioners][:scripts] = Dir.glob(File.join(data[:'template-dir'], data[:distribution], 'scripts', '*'))
102
+ data[:provisioners][:files] = Dir.glob(File.join(data[:'template-dir'], data[:distribution], 'files', '*'))
103
+
104
+ data[:password] = password
105
+ logger.debug("Temporary password: '#{data[:password]}'")
106
+
107
+ data[:identifier] = replace_needles(data[:identifier])
108
+ end
109
+
110
+ # Choose_version is a method that selects required version from available versions.
111
+ def choose_version
112
+ version = data[:version]
113
+
114
+ available_versions = []
115
+ data[:distro]['versions'].each do |v|
116
+ available_versions << { major: v['major_version'].to_i, minor: v['minor_version'].to_i, patch: v['patch_version'].to_i, version: v }
117
+ end
118
+ available_versions.sort_by! { |v| [v[:major], v[:minor], v[:patch]] }.reverse!
119
+
120
+ return available_versions.first[:version] if version == :newest
121
+
122
+ version_parts = version.split('.')
123
+ fail Comfy::Errors::InvalidDistributionVersionError, "Version '#{version}' is not a valid distribution version" if version_parts.size > 3
124
+
125
+ version_parts.map! do |part|
126
+ fail Comfy::Errors::InvalidDistributionVersionError, "Version '#{version}' is not a valid distribution version" unless part =~ /\A\d+\z/
127
+
128
+ part.to_i
129
+ end
130
+
131
+ selected = available_versions.select { |v| v[:major] == version_parts[0] }
132
+ if version_parts.size > 1
133
+ selected = selected.select { |v| v[:minor] == version_parts[1] }
134
+
135
+ if version_parts.size > 2
136
+ selected = selected.select { |v| v[:patch] == version_parts[2] }
137
+ end
138
+ end
139
+
140
+ fail Comfy::Errors::NoSuchDistributionVersionError, "No version '#{version}' available for distribution '#{data[:distribution]}'" if selected.empty?
141
+
142
+ selected.sort_by { |v| [v[:major], v[:minor], v[:patch]] }.reverse.first[:version]
143
+ end
144
+
145
+ # Method generating a temporary random password used while creating image.
146
+ #
147
+ # @return [String] password
148
+ def password
149
+ o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
150
+ (0...100).map { o[rand(o.length)] }.join
151
+ end
152
+
153
+ # Description returns cloud appliance descriptor JSON. It uses information gathered from command line arguments
154
+ # and the config file.
155
+ #
156
+ # @param builder [Symbol] builder used in the description of the cloud appliance descriptor
157
+ #
158
+ # @return [Json] appliance descriptor in Json format
159
+ def description(builder)
160
+ # FIXME? mapping platforms/builders to formats is hardcoded for now, nothing else is supported
161
+ formats = { 'virtualbox' => 'ova', 'qemu' => 'qcow2' }
162
+ vm_dir = "comfy_#{data[:distribution]}-#{data[:distro][:version]['major_version']}.#{data[:distro][:version]['minor_version']}_#{builder}"
163
+ vm_name = "#{vm_dir}.#{formats[builder]}"
164
+ disk_path = File.join(data[:'output-dir'],vm_dir,vm_name)
165
+
166
+ os = Cloud::Appliance::Descriptor::Os.new distribution: data[:distribution], version: version_string
167
+ disk = Cloud::Appliance::Descriptor::Disk.new type: :os, format: formats[builder], path: disk_path
168
+
169
+ appliance = Cloud::Appliance::Descriptor::Appliance.new action: :registration, os: os, disks: [disk]
170
+ appliance.title = data[:distro]['name']
171
+ appliance.identifier = data[:identifier]
172
+ appliance.version = Time.new.strftime(TIMESTAMP_FORMAT)
173
+ appliance.groups = data[:groups]
174
+
175
+ appliance.to_json
176
+ end
177
+
178
+ # Replace needles in the argument.
179
+ # Replacements are picked from NEEDLE_REPLACEMENTS constant.
180
+ #
181
+ # @param [String] format_string string with needles to be replaced
182
+ #
183
+ # @return [String] format_string with all needles replaced
184
+ def replace_needles(format_string)
185
+ format_string.gsub(REPLACEMENT_REGEX) do |match|
186
+ NEEDLE_REPLACEMENTS.key?(match.to_sym) ? NEEDLE_REPLACEMENTS[match.to_sym].call(self) : match
187
+ end
188
+ end
189
+
190
+ # Simple method used to return the version string
191
+ #
192
+ # @return [String] string which contains major, minor, and patch version (if possible).
193
+ def version_string
194
+ result = []
195
+ result << data[:distro][:version]['major_version']
196
+ result << data[:distro][:version]['minor_version']
197
+ result << data[:distro][:version]['patch_version']
198
+ result.compact.join('.')
199
+ end
200
+ end
@@ -0,0 +1 @@
1
+ class Comfy::Errors::InvalidDistributionVersionError < StandardError; end
@@ -0,0 +1 @@
1
+ class Comfy::Errors::NoSuchDistributionVersionError < StandardError; end
@@ -0,0 +1 @@
1
+ class Comfy::Errors::PackerError < StandardError; end
@@ -0,0 +1 @@
1
+ class Comfy::Errors::PackerExecutionError < Comfy::Errors::PackerError; end
@@ -0,0 +1 @@
1
+ class Comfy::Errors::PackerValidationError < Comfy::Errors::PackerError; end
@@ -0,0 +1,4 @@
1
+ module Comfy::Errors
2
+ require File.join(File.dirname(__FILE__), "#{self.name.demodulize.underscore}", 'packer_error')
3
+ Dir.glob(File.join(File.dirname(__FILE__), "#{self.name.demodulize.underscore}", '*.rb')) { |error_file| require error_file.chomp('.rb') }
4
+ end
@@ -0,0 +1,8 @@
1
+ require 'yell'
2
+
3
+ # Monkeypatch for Yell
4
+ class Yell::Logger
5
+ def <<(x)
6
+ info x.strip
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ require 'settingslogic'
2
+
3
+ class Comfy::Settings < Settingslogic
4
+ CONFIGURATION = 'comfy.yml'
5
+
6
+ # three possible configuration file locations in order by preference
7
+ # if configuration file is found rest of the locations are ignored
8
+ source "#{ENV['HOME']}/.comfy/#{CONFIGURATION}"\
9
+ if File.exist?("#{ENV['HOME']}/.comfy/#{CONFIGURATION}")
10
+ source "/etc/comfy/#{CONFIGURATION}"\
11
+ if File.exist?("/etc/comfy/#{CONFIGURATION}")
12
+ source "#{File.dirname(__FILE__)}/../../config/#{CONFIGURATION}"
13
+
14
+ namespace 'production'
15
+ end
@@ -0,0 +1,62 @@
1
+ require 'tempfile'
2
+ require 'erb'
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+
6
+ # Class used for preparing and filling file templates.
7
+ class Comfy::Templater
8
+ attr_reader :data
9
+
10
+ # Creates an instance of Templater.
11
+ #
12
+ # @param data [Hash] prepared data with distro, provisioners, files, password and identifier info.
13
+ def initialize(data)
14
+ @data = data
15
+ end
16
+
17
+ # Prepares *.json and *.cfg files from templates for selected distribution
18
+ def prepare_files
19
+ prepare_file('cfg')
20
+ prepare_file('packer', true)
21
+ end
22
+
23
+ private
24
+
25
+ # Method prepares .erb file with given data.
26
+ #
27
+ # @param name [String] type of file for preparation.
28
+ # @param packer [Boolean] (implicite value = false).
29
+ def prepare_file(name, packer = false)
30
+ logger.debug("Creating temporary #{name} file...")
31
+ tmp = Tempfile.new("comfy_#{name}")
32
+ logger.debug("Temporary file '#{tmp.path}' was created.")
33
+
34
+ output = File.join(data[:server_dir], "#{data[:distribution]}.#{name}")
35
+
36
+ logger.debug("Writing to temporary #{name} file...")
37
+ template_path = File.join(data[:'template-dir'], data[:distribution], "#{data[:distribution]}.#{name}.erb")
38
+ template_path = File.join(data[:'template-dir'], 'packer.erb') if packer
39
+ write_to_tmp(tmp, populate_template(template_path))
40
+
41
+ logger.debug("Copying #{name} file to its proper location...")
42
+ FileUtils.cp(tmp.path, output)
43
+
44
+ logger.debug("Cleaning temporary #{name} file...")
45
+ tmp.close(true)
46
+ end
47
+
48
+ def write_to_tmp(tmp, data)
49
+ tmp.write(data)
50
+ tmp.flush
51
+ end
52
+
53
+ # Actual filling of .erb fils with given info.
54
+ #
55
+ # @param template [String] path to template file.
56
+ def populate_template(template)
57
+ logger.debug("Populating template '#{template}'")
58
+ erb = ERB.new(File.read(template), nil, '-')
59
+ erb.filename = template
60
+ erb.result(binding)
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module Comfy
2
+ VERSION = '0.2.0'
3
+ end
data/lib/comfy.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'comfy/settings'
2
+
3
+ module Comfy
4
+ GEM_DIR = File.realdirpath(File.join(File.dirname(__FILE__), '..'))
5
+ DESCRIPTION_SCHEMA_FILE = File.join(GEM_DIR, 'schema', 'distribution_descriptor.schema')
6
+ TEMPLATE_DIR = Comfy::Settings['template-dir'] || File.join(GEM_DIR, 'lib', 'templates')
7
+ PACKER_FILE = File.join(TEMPLATE_DIR, 'packer.erb')
8
+
9
+ require 'active_support/all'
10
+
11
+ require 'comfy/extensions/yell'
12
+
13
+ require 'comfy/command_executioner'
14
+ require 'comfy/version'
15
+ require 'comfy/templater'
16
+ require 'comfy/creator'
17
+ require 'comfy/errors'
18
+ end
@@ -0,0 +1,47 @@
1
+ ### Kickstart
2
+ ## Fresh install, not an upgrade
3
+ install
4
+ url --url=http://mirror.nextlayer.at/centos/<%= @data[:distro][:version]['major_version'] %>.<%= @data[:distro][:version]['minor_version'] %>.<%= @data[:distro][:version]['patch_version'] %>/os/x86_64/
5
+ lang en_US.UTF-8
6
+ keyboard us
7
+ timezone UTC
8
+ ## Disk Partitioning - how the boot loader should be installed, delete all partitions/mbr, then create
9
+ bootloader --location=mbr
10
+ zerombr
11
+ clearpart --all --initlabel
12
+ part / --size=1 --grow --fstype ext4
13
+ ## Don't use GUI
14
+ text
15
+ ## Don't configure X
16
+ skipx
17
+ ## Firstboot - the druid that helps you to set up the system after install - disabled
18
+ firstboot --disabled
19
+ ## Authentication
20
+ ## Sets up the authentication options - use shadow passwords, encryption for user passwords
21
+ authconfig --enableshadow --passalgo=sha512
22
+ auth --useshadow --enablemd5
23
+ ## Sets the system's root password
24
+ rootpw <%= @data[:password] %>
25
+ ## Configure NICs - use dhcp - disable IPv6
26
+ network --device=eth0 --bootproto dhcp --onboot=yes --noipv6
27
+ network --device=eth1 --bootproto dhcp --onboot=yes --noipv6
28
+ ## Firewall - enable and open ssh port
29
+ firewall --enabled --service=ssh
30
+ ## Selinux - disable
31
+ selinux --disabled
32
+ ## Reboot the machine after the install
33
+ reboot
34
+ %packages --nobase
35
+ ## Add basic packages groups
36
+ @core
37
+ ## Add basic packages
38
+ wget
39
+ curl
40
+ bzip2
41
+ ## Add extra packages
42
+ openssh-clients
43
+ openssh-server
44
+ %end
45
+ %post
46
+ /usr/bin/yum -y install sudo
47
+ %end
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "CentOS",
3
+ "versions": [{
4
+ "major_version": "7",
5
+ "minor_version": "1",
6
+ "patch_version": "1503",
7
+ "iso_url": "http://merlin.fit.vutbr.cz/mirrors/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-1503.iso",
8
+ "iso_checksum": "498bb78789ddc7973fe14358822eb1b48521bbaca91c17bd132c7f8c903d79b3"
9
+ }],
10
+ "boot_command": "linux ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}",
11
+ "qemu": {
12
+ "accelerator": "kvm",
13
+ "qemuargs": [ [ "-m", "1024M" ] ]
14
+ },
15
+ "virtualbox": {
16
+ "guest_os_type": "RedHat_64",
17
+ "vboxmanage": [ ["modifyvm", "{{.Name}}", "--memory", "1024"] ],
18
+ "guest_additions_mode": "disable"
19
+ }
20
+ }
@@ -0,0 +1,5 @@
1
+ net.ipv6.conf.all.disable_ipv6 = 1
2
+ net.ipv6.conf.default.disable_ipv6 = 1
3
+ net.ipv6.conf.lo.disable_ipv6 = 1
4
+ net.ipv6.conf.eth0.disable_ipv6 = 1
5
+ net.ipv6.conf.eth1.disable_ipv6 = 1
@@ -0,0 +1,101 @@
1
+ # If this is set, 'root' will not be able to ssh in and they
2
+ # will get a message to login instead as the above $user (ubuntu)
3
+ disable_root: False
4
+ user: root
5
+ ssh_pwauth: False
6
+ ssh_deletekeys: True
7
+ ssh_genkeytypes: ['rsa', 'dsa']
8
+ ssh_svcname: sshd
9
+
10
+ # This will cause the set+update hostname module to not operate (if true)
11
+ preserve_hostname: false
12
+ cc_ready_cmd: ['/bin/true']
13
+ mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
14
+ syslog_fix_perms: ~
15
+ manage_etc_hosts: True
16
+
17
+ # Update and upgrade system on first boot
18
+ apt_preserve_sources_list: True
19
+ package_update: True
20
+ package_upgrade: True
21
+ package_reboot_if_required: True
22
+
23
+ # work only with OpenNebula, use network based datasource,
24
+ # so that we can successfully resolve IPv4 based hostname
25
+ disable_ec2_metadata: True
26
+ datasource_list: ['OpenNebula']
27
+ datasource:
28
+ OpenNebula:
29
+ dsmode: net
30
+
31
+ # The modules that run in the 'init' stage
32
+ cloud_init_modules:
33
+ - migrator
34
+ - seed_random
35
+ - bootcmd
36
+ - write-files
37
+ - growpart
38
+ - resizefs
39
+ - set_hostname
40
+ - update_hostname
41
+ - update_etc_hosts
42
+ - ca-certs
43
+ - rsyslog
44
+ - users-groups
45
+ - ssh
46
+
47
+ # The modules that run in the 'config' stage
48
+ cloud_config_modules:
49
+ # Emit the cloud config ready event
50
+ # this can be used by upstart jobs for 'start on cloud-config'.
51
+ - emit_upstart
52
+ - disk_setup
53
+ - mounts
54
+ - ssh-import-id
55
+ - locale
56
+ - set-passwords
57
+ - grub-dpkg
58
+ - apt-pipelining
59
+ - apt-configure
60
+ - package-update-upgrade-install
61
+ - landscape
62
+ - timezone
63
+ - puppet
64
+ - chef
65
+ - salt-minion
66
+ - mcollective
67
+ - disable-ec2-metadata
68
+ - runcmd
69
+ - byobu
70
+
71
+ # The modules that run in the 'final' stage
72
+ cloud_final_modules:
73
+ - rightscale_userdata
74
+ - scripts-per-once
75
+ - scripts-per-boot
76
+ - scripts-per-instance
77
+ - scripts-user
78
+ - ssh-authkey-fingerprints
79
+ - keys-to-console
80
+ - phone-home
81
+ - final-message
82
+ - power-state-change
83
+
84
+ # System and/or distro specific settings
85
+ # (not accessible to handlers/transforms)
86
+ system_info:
87
+ # This will affect which distro class gets used
88
+ distro: rhel
89
+ # Other config here will be given to the distro class and/or path classes
90
+ paths:
91
+ cloud_dir: /var/lib/cloud/
92
+ templates_dir: /etc/cloud/templates/
93
+ upstart_dir: /etc/init/
94
+ package_mirrors:
95
+ - arches: [default]
96
+ failsafe:
97
+ primary: http://http.us.debian.org/debian/
98
+ security: http://security.debian.org/
99
+ ssh_svcname: sshd
100
+
101
+ # vim:syntax=yaml
@@ -0,0 +1,3 @@
1
+ [Definition]
2
+
3
+ logtarget = SYSLOG
@@ -0,0 +1,47 @@
1
+ # This file is part of systemd.
2
+ #
3
+ # systemd is free software; you can redistribute it and/or modify it
4
+ # under the terms of the GNU Lesser General Public License as published by
5
+ # the Free Software Foundation; either version 2.1 of the License, or
6
+ # (at your option) any later version.
7
+
8
+ [Unit]
9
+ Description=Getty on %I
10
+ Documentation=man:agetty(8) man:systemd-getty-generator(8)
11
+ Documentation=http://0pointer.de/blog/projects/serial-console.html
12
+ After=systemd-user-sessions.service plymouth-quit-wait.service
13
+ After=rc-local.service
14
+
15
+ # If additional gettys are spawned during boot then we should make
16
+ # sure that this is synchronized before getty.target, even though
17
+ # getty.target didn't actually pull it in.
18
+ Before=getty.target
19
+ IgnoreOnIsolate=yes
20
+
21
+ # On systems without virtual consoles, don't start any getty. Note
22
+ # that serial gettys are covered by serial-getty@.service, not this
23
+ # unit.
24
+ ConditionPathExists=/dev/tty0
25
+
26
+ [Service]
27
+ # the VT is cleared by TTYVTDisallocate
28
+ ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
29
+ Type=idle
30
+ Restart=always
31
+ RestartSec=0
32
+ UtmpIdentifier=%I
33
+ TTYPath=/dev/%I
34
+ TTYReset=yes
35
+ TTYVHangup=yes
36
+ TTYVTDisallocate=yes
37
+ KillMode=process
38
+ IgnoreSIGPIPE=no
39
+ SendSIGHUP=yes
40
+
41
+ # Unset locale for the console getty since the console has problems
42
+ # displaying some internationalized messages.
43
+ Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
44
+
45
+ [Install]
46
+ WantedBy=getty.target
47
+ Alias=getty@ttys0.service
@@ -0,0 +1,11 @@
1
+ GRUB_TIMEOUT=5
2
+ GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
3
+ GRUB_DEFAULT=saved
4
+ GRUB_DISABLE_SUBMENU=true
5
+ GRUB_TERMINAL_OUTPUT="console"
6
+ GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet net.ifnames=0 biosdevname=0 console=ttys0,115200n8 console=tty0"
7
+ #GRUB_CMDLINE_LINUX="console=ttys0,115200n8 console=tty0"
8
+ GRUB_DISABLE_RECOVERY="true"
9
+ GRUB_TERMINAL="serial"
10
+ GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
11
+
@@ -0,0 +1,6 @@
1
+ [Definition]
2
+
3
+ actionban = iptables -I fail2ban-<name> 1 -s <ip> -j REJECT
4
+
5
+ actionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT
6
+
@@ -0,0 +1,17 @@
1
+ [DEFAULT]
2
+
3
+ # Seznam vygenerovany skriptem /software/meta-admin/scripts/get_nodes_ips
4
+ # Vygeneruje pouze C site, tzn. je tam o nekolik set hostu vic nez ve skutecnosti
5
+
6
+ ignoreip = 127.0.0.1 147.228.1.0/24 147.251.17.0/24 147.228.240.0/24 147.228.241.0/24 147.231.11.0/24 147.231.18.0/24 147.251.11.0/24 147.251.252.0/24 147.251.254.0/24 147.251.3.0/24 147.251.84.0/24 147.251.9.0/24 195.113.0.0/24 195.113.123.0/24 195.113.209.0/24 195.113.214.0/24 78.128.210.0/24
7
+
8
+ [ssh]
9
+
10
+ enabled = true
11
+ port = ssh
12
+ filter = sshd
13
+ logpath = /var/log/auth.log
14
+ maxretry = 100
15
+ findtime = 86400
16
+ bantime = 1209600
17
+