ec2_amitools 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +54 -0
- data/bin/console +14 -0
- data/bin/ec2-ami-tools-version +6 -0
- data/bin/ec2-bundle-image +6 -0
- data/bin/ec2-bundle-vol +6 -0
- data/bin/ec2-delete-bundle +6 -0
- data/bin/ec2-download-bundle +6 -0
- data/bin/ec2-migrate-bundle +6 -0
- data/bin/ec2-migrate-manifest +6 -0
- data/bin/ec2-unbundle +6 -0
- data/bin/ec2-upload-bundle +6 -0
- data/bin/setup +8 -0
- data/etc/ec2/amitools/cert-ec2-cn-north-1.pem +28 -0
- data/etc/ec2/amitools/cert-ec2-gov.pem +17 -0
- data/etc/ec2/amitools/cert-ec2.pem +23 -0
- data/etc/ec2/amitools/mappings.csv +9 -0
- data/lib/ec2/amitools/bundle.rb +251 -0
- data/lib/ec2/amitools/bundle_base.rb +58 -0
- data/lib/ec2/amitools/bundleimage.rb +94 -0
- data/lib/ec2/amitools/bundleimageparameters.rb +42 -0
- data/lib/ec2/amitools/bundlemachineparameters.rb +60 -0
- data/lib/ec2/amitools/bundleparameters.rb +120 -0
- data/lib/ec2/amitools/bundlevol.rb +240 -0
- data/lib/ec2/amitools/bundlevolparameters.rb +164 -0
- data/lib/ec2/amitools/crypto.rb +379 -0
- data/lib/ec2/amitools/decryptmanifest.rb +20 -0
- data/lib/ec2/amitools/defaults.rb +12 -0
- data/lib/ec2/amitools/deletebundle.rb +212 -0
- data/lib/ec2/amitools/deletebundleparameters.rb +78 -0
- data/lib/ec2/amitools/downloadbundle.rb +161 -0
- data/lib/ec2/amitools/downloadbundleparameters.rb +84 -0
- data/lib/ec2/amitools/exception.rb +86 -0
- data/lib/ec2/amitools/fileutil.rb +219 -0
- data/lib/ec2/amitools/format.rb +127 -0
- data/lib/ec2/amitools/instance-data.rb +97 -0
- data/lib/ec2/amitools/manifest_wrapper.rb +132 -0
- data/lib/ec2/amitools/manifestv20070829.rb +361 -0
- data/lib/ec2/amitools/manifestv20071010.rb +403 -0
- data/lib/ec2/amitools/manifestv3.rb +331 -0
- data/lib/ec2/amitools/mapids.rb +148 -0
- data/lib/ec2/amitools/migratebundle.rb +222 -0
- data/lib/ec2/amitools/migratebundleparameters.rb +173 -0
- data/lib/ec2/amitools/migratemanifest.rb +225 -0
- data/lib/ec2/amitools/migratemanifestparameters.rb +118 -0
- data/lib/ec2/amitools/minimalec2.rb +116 -0
- data/lib/ec2/amitools/parameter_exceptions.rb +34 -0
- data/lib/ec2/amitools/parameters_base.rb +168 -0
- data/lib/ec2/amitools/region.rb +93 -0
- data/lib/ec2/amitools/s3toolparameters.rb +183 -0
- data/lib/ec2/amitools/showversion.rb +12 -0
- data/lib/ec2/amitools/syschecks.rb +27 -0
- data/lib/ec2/amitools/tool_base.rb +224 -0
- data/lib/ec2/amitools/unbundle.rb +107 -0
- data/lib/ec2/amitools/unbundleparameters.rb +65 -0
- data/lib/ec2/amitools/uploadbundle.rb +361 -0
- data/lib/ec2/amitools/uploadbundleparameters.rb +108 -0
- data/lib/ec2/amitools/util.rb +532 -0
- data/lib/ec2/amitools/version.rb +33 -0
- data/lib/ec2/amitools/xmlbuilder.rb +237 -0
- data/lib/ec2/amitools/xmlutil.rb +55 -0
- data/lib/ec2/common/constants.rb +16 -0
- data/lib/ec2/common/curl.rb +110 -0
- data/lib/ec2/common/headers.rb +95 -0
- data/lib/ec2/common/headersv4.rb +173 -0
- data/lib/ec2/common/http.rb +333 -0
- data/lib/ec2/common/s3support.rb +231 -0
- data/lib/ec2/common/signature.rb +68 -0
- data/lib/ec2/oem/LICENSE.txt +58 -0
- data/lib/ec2/oem/open4.rb +399 -0
- data/lib/ec2/platform/base/architecture.rb +26 -0
- data/lib/ec2/platform/base/constants.rb +54 -0
- data/lib/ec2/platform/base/pipeline.rb +181 -0
- data/lib/ec2/platform/base.rb +57 -0
- data/lib/ec2/platform/current.rb +55 -0
- data/lib/ec2/platform/linux/architecture.rb +35 -0
- data/lib/ec2/platform/linux/constants.rb +23 -0
- data/lib/ec2/platform/linux/fstab.rb +99 -0
- data/lib/ec2/platform/linux/identity.rb +16 -0
- data/lib/ec2/platform/linux/image.rb +811 -0
- data/lib/ec2/platform/linux/mtab.rb +74 -0
- data/lib/ec2/platform/linux/pipeline.rb +40 -0
- data/lib/ec2/platform/linux/rsync.rb +114 -0
- data/lib/ec2/platform/linux/tar.rb +124 -0
- data/lib/ec2/platform/linux/uname.rb +50 -0
- data/lib/ec2/platform/linux.rb +83 -0
- data/lib/ec2/platform/solaris/architecture.rb +28 -0
- data/lib/ec2/platform/solaris/constants.rb +30 -0
- data/lib/ec2/platform/solaris/fstab.rb +43 -0
- data/lib/ec2/platform/solaris/identity.rb +16 -0
- data/lib/ec2/platform/solaris/image.rb +327 -0
- data/lib/ec2/platform/solaris/mtab.rb +29 -0
- data/lib/ec2/platform/solaris/pipeline.rb +40 -0
- data/lib/ec2/platform/solaris/rsync.rb +24 -0
- data/lib/ec2/platform/solaris/tar.rb +36 -0
- data/lib/ec2/platform/solaris/uname.rb +21 -0
- data/lib/ec2/platform/solaris.rb +38 -0
- data/lib/ec2/platform.rb +69 -0
- data/lib/ec2/version.rb +8 -0
- data/lib/ec2_amitools +1 -0
- data/lib/ec2_amitools.rb +7 -0
- metadata +184 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
module EC2
|
12
|
+
module Platform
|
13
|
+
module Linux
|
14
|
+
LOCAL_FS_TYPES = ['ext2', 'ext3', 'ext4', 'xfs', 'jfs', 'reiserfs', 'tmpfs']
|
15
|
+
class Mtab
|
16
|
+
class Entry
|
17
|
+
REGEX = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+).*$/
|
18
|
+
attr_reader :device # mounted device.
|
19
|
+
attr_reader :mpoint # mount point.
|
20
|
+
attr_reader :fstype # file system type.
|
21
|
+
attr_reader :options # options
|
22
|
+
attr_reader :value # entire line
|
23
|
+
|
24
|
+
|
25
|
+
def initialize(dev, mnt_point, fs_type, opts, line)
|
26
|
+
@device = dev
|
27
|
+
@mpoint = mnt_point
|
28
|
+
@fstype = fs_type
|
29
|
+
@options= opts
|
30
|
+
@value = line
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.parse(line)
|
34
|
+
return nil if line[0,1] == '#'
|
35
|
+
if (m = REGEX.match(line))
|
36
|
+
parts = m.captures
|
37
|
+
return Entry.new(parts[0], parts[1], parts[2], parts[3], line.strip)
|
38
|
+
else
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_s
|
44
|
+
value
|
45
|
+
end
|
46
|
+
|
47
|
+
def print
|
48
|
+
puts(to_s)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_reader :entries
|
53
|
+
LOCATION = '/etc/mtab'
|
54
|
+
|
55
|
+
def initialize(filename = LOCATION)
|
56
|
+
begin
|
57
|
+
f = File.new(filename, File::RDONLY)
|
58
|
+
rescue SystemCallError => e
|
59
|
+
raise FileError(filename, "could not open #{filename} to read mount table", e)
|
60
|
+
end
|
61
|
+
@entries = Hash.new
|
62
|
+
f.readlines.each do |line|
|
63
|
+
entry = Entry.parse(line)
|
64
|
+
@entries[entry.mpoint] = entry unless entry.nil?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.load
|
69
|
+
self.new()
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
require 'ec2/platform/base/pipeline'
|
13
|
+
|
14
|
+
#------------------------------------------------------------------------------
|
15
|
+
module EC2
|
16
|
+
#----------------------------------------------------------------------------
|
17
|
+
module Platform
|
18
|
+
#--------------------------------------------------------------------------
|
19
|
+
module Linux
|
20
|
+
#------------------------------------------------------------------------
|
21
|
+
class Pipeline < EC2::Platform::Base::Pipeline
|
22
|
+
|
23
|
+
#----------------------------------------------------------------------
|
24
|
+
# Given a pipeline of commands, modify it so that we can obtain
|
25
|
+
# the exit status of each pipeline stage by reading the tempfile
|
26
|
+
# associated with that stage.
|
27
|
+
def pipestatus(cmd)
|
28
|
+
command = cmd
|
29
|
+
command << ';' unless cmd.rstrip[-1,1] == ';'
|
30
|
+
command << ' ' unless cmd[-1,1] == ' '
|
31
|
+
list = []
|
32
|
+
@tempfiles.each_with_index do |file, index|
|
33
|
+
list << "echo ${PIPESTATUS[#{index}]} > #{file.path}"
|
34
|
+
end
|
35
|
+
command + list.join(' & ')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
require 'ec2/amitools/fileutil'
|
12
|
+
module EC2
|
13
|
+
module Platform
|
14
|
+
module Linux
|
15
|
+
class Rsync
|
16
|
+
class Command
|
17
|
+
EXECUTABLE='rsync'
|
18
|
+
def initialize(e = EXECUTABLE)
|
19
|
+
@src = nil
|
20
|
+
@dst = nil
|
21
|
+
@options = []
|
22
|
+
@executable = e
|
23
|
+
@quiet = false
|
24
|
+
end
|
25
|
+
|
26
|
+
def archive; @options << '-rlpgoD'; self; end
|
27
|
+
def times; @options << '-t'; self; end
|
28
|
+
def recursive; @options << '-r'; self; end
|
29
|
+
def sparse; @options << '-S'; self; end
|
30
|
+
def links; @options << '-l'; self; end
|
31
|
+
def dereference; @options << '-L'; self; end
|
32
|
+
def xattributes; @options << '-X'; self; end
|
33
|
+
def version; @options << '--version'; self; end
|
34
|
+
def src(path) @src = path; self; end
|
35
|
+
def dst(path) @dst = path; self; end
|
36
|
+
def quietly; @quiet = true; self; end
|
37
|
+
|
38
|
+
alias :source :src
|
39
|
+
alias :from :src
|
40
|
+
alias :destination :dst
|
41
|
+
alias :to :dst
|
42
|
+
|
43
|
+
def exclude(files)
|
44
|
+
if files.is_a? Array
|
45
|
+
files.each {|file| exclude file }
|
46
|
+
else
|
47
|
+
@options << "--exclude '#{files}'" unless files.nil?
|
48
|
+
end
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def include(files)
|
53
|
+
if files.is_a? Array
|
54
|
+
files.each {|file| include file }
|
55
|
+
else
|
56
|
+
@options << "--include '#{files}'" unless files.nil?
|
57
|
+
end
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def expand
|
62
|
+
"#{@executable} #{@options.join(' ')} #{@src} #{@dst} #{'2>&1 > /dev/null' if @quiet}".strip
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.symlinking?
|
67
|
+
begin
|
68
|
+
src = FileUtil.tempdir('ec2-ami-tools-rsync-test-src')
|
69
|
+
dst = FileUtil.tempdir('ec2-ami-tools-rsync-test-dst')
|
70
|
+
FileUtils.mkdir(src)
|
71
|
+
FileUtils.touch("#{src}/foo")
|
72
|
+
FileUtils.symlink("#{src}/foo", "#{src}/bar")
|
73
|
+
FileUtils.mkdir("#{src}/baz")
|
74
|
+
File.open("#{src}/baz/food", 'w+'){|io| io << IO.read(__FILE__) }
|
75
|
+
FileUtils.symlink("#{src}/baz/food", "#{src}/baz/bard")
|
76
|
+
FileUtils.mkdir(dst)
|
77
|
+
incantation = Command.new.archive.recursive.sparse.links.src("#{src}/").dst("#{dst}")
|
78
|
+
`#{incantation.expand} 2>&1`
|
79
|
+
rc = $?.exitstatus
|
80
|
+
return true if rc == 0
|
81
|
+
if rc == 23
|
82
|
+
#check that the structure was copied reasonably anyway
|
83
|
+
slist = Dir["#{src}/**/**"]
|
84
|
+
dlist = Dir["#{dst}/**/**"]
|
85
|
+
return false unless dlist == dlist
|
86
|
+
slist.each do |sitem|
|
87
|
+
ditem = item.gsub(src, dst)
|
88
|
+
return false unless dlist.include? ditem
|
89
|
+
if File.file?(sitem) or File.symlink?(sitem)
|
90
|
+
@out.print "comparing #{sitem} to #{ditem}" if @out
|
91
|
+
return false unless IO.read(ditem) == IO.read(sitem)
|
92
|
+
end
|
93
|
+
if ['food', 'bard'].include? File.basename(ditem)
|
94
|
+
return false unless IO.read(sitem) == IO.read(__FILE__)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
return true
|
98
|
+
end
|
99
|
+
return false
|
100
|
+
rescue Exception
|
101
|
+
return false
|
102
|
+
ensure
|
103
|
+
FileUtils.rm_rf src
|
104
|
+
FileUtils.rm_rf dst
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.usable?()
|
109
|
+
@@usable ||= self.symlinking?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
require 'ec2/platform/linux/constants'
|
12
|
+
module EC2
|
13
|
+
module Platform
|
14
|
+
module Linux
|
15
|
+
class Tar
|
16
|
+
class Command
|
17
|
+
EXECUTABLE=EC2::Platform::Linux::Constants::Utility::TAR
|
18
|
+
def initialize(e = EXECUTABLE)
|
19
|
+
@files = []
|
20
|
+
@options = []
|
21
|
+
@executable = e
|
22
|
+
end
|
23
|
+
|
24
|
+
def version; @options << '--version'; self; end
|
25
|
+
def verbose; @options << '-v'; self; end
|
26
|
+
def create; @options << '-c'; self; end
|
27
|
+
def bzip2; @options << '-j'; self; end
|
28
|
+
def diff; @options << '-d'; self; end
|
29
|
+
def gzip; @options << '-z'; self; end
|
30
|
+
def extract; @options << '-x'; self; end
|
31
|
+
def update; @options << '-u'; self; end
|
32
|
+
def sparse; @options << '-S'; self; end
|
33
|
+
def dereference; @options << '-h'; self; end
|
34
|
+
|
35
|
+
def archive(filename)
|
36
|
+
filename = '-' if filename.nil?
|
37
|
+
@options << "-f #{filename}"
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def owner(user)
|
42
|
+
@options << "--owner #{user}"
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def group(grp)
|
47
|
+
@options << "--group #{grp}"
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
def chdir(dir)
|
52
|
+
@options << "-C #{dir}" unless dir.nil?
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def add(filename, dir = nil)
|
57
|
+
item = dir.nil? ? filename : "-C #{dir} #{filename}"
|
58
|
+
@files << item
|
59
|
+
self
|
60
|
+
end
|
61
|
+
def expand
|
62
|
+
"#{@executable} #{@options.join(' ')} #{@files.join(' ')}".strip
|
63
|
+
end
|
64
|
+
end
|
65
|
+
class Version
|
66
|
+
RECOMMENDED = 'tar 1.15'
|
67
|
+
REGEX = /(?:tar).*?(\d+)\.(\d+)\.?(\d*)/
|
68
|
+
attr_reader :values
|
69
|
+
attr_reader :string
|
70
|
+
|
71
|
+
def initialize(str=nil)
|
72
|
+
@string = str
|
73
|
+
@string = default if str.nil? or str.empty?
|
74
|
+
@values = Version.parse @string
|
75
|
+
end
|
76
|
+
def default
|
77
|
+
s = `#{Command.new.version.expand}`.strip
|
78
|
+
s = nil unless $? == 0
|
79
|
+
s
|
80
|
+
end
|
81
|
+
def string= (str)
|
82
|
+
@string = str
|
83
|
+
@values = Version.parse @string
|
84
|
+
end
|
85
|
+
def >= (other)
|
86
|
+
return nil if @values.nil?
|
87
|
+
if other.nil? or not other.is_a? Version
|
88
|
+
raise ArgumentError, "Cannot compare with invalid version #{other}"
|
89
|
+
end
|
90
|
+
@values.zip(other.values).each do |mine, others|
|
91
|
+
return false if mine < others
|
92
|
+
return true if mine > others
|
93
|
+
end
|
94
|
+
return true
|
95
|
+
end
|
96
|
+
def usable?
|
97
|
+
self >= Version.new(Version::RECOMMENDED)
|
98
|
+
end
|
99
|
+
def self.parse(str)
|
100
|
+
match = REGEX.match(str)
|
101
|
+
return nil if match.nil?
|
102
|
+
begin
|
103
|
+
items = match.captures.collect do |cap|
|
104
|
+
cap.sub!(/^0*/, "")
|
105
|
+
case cap
|
106
|
+
when ""
|
107
|
+
num = 0
|
108
|
+
else
|
109
|
+
num = Integer(cap)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
rescue ArgumentError
|
113
|
+
return nil
|
114
|
+
end
|
115
|
+
items
|
116
|
+
end
|
117
|
+
def self.current
|
118
|
+
Version.new
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
require 'ostruct'
|
12
|
+
require 'ec2/platform'
|
13
|
+
|
14
|
+
module EC2
|
15
|
+
module Platform
|
16
|
+
module Linux
|
17
|
+
class Uname
|
18
|
+
@@uname ||= OpenStruct.new
|
19
|
+
def self.all
|
20
|
+
@@uname.all ||= `uname -a`.strip
|
21
|
+
end
|
22
|
+
def self.platform
|
23
|
+
@@uname.platform ||= `uname -i`.strip
|
24
|
+
end
|
25
|
+
def self.nodename
|
26
|
+
@@uname.nodename ||= `uname -n`.strip
|
27
|
+
end
|
28
|
+
def self.processor
|
29
|
+
@@uname.processor ||= `uname -p`.strip
|
30
|
+
end
|
31
|
+
def self.release
|
32
|
+
@@uname.release ||= `uname -r`.strip
|
33
|
+
end
|
34
|
+
def self.os
|
35
|
+
@@uname.os ||= `uname -s`.strip
|
36
|
+
end
|
37
|
+
def self.machine
|
38
|
+
@@uname.machine ||= `uname -m`.strip
|
39
|
+
end
|
40
|
+
def self.uname
|
41
|
+
@@uname
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
if __FILE__ == $0
|
48
|
+
include EC2::Platform::Linux
|
49
|
+
puts "Uname = #{Uname.all.inspect}"
|
50
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Copyright 2008-2014 Amazon.com, Inc. or its affiliates. All Rights
|
2
|
+
# Reserved. Licensed under the Amazon Software License (the
|
3
|
+
# "License"). You may not use this file except in compliance with the
|
4
|
+
# License. A copy of the License is located at
|
5
|
+
# http://aws.amazon.com/asl or in the "license" file accompanying this
|
6
|
+
# file. This file is distributed on an "AS IS" BASIS, WITHOUT
|
7
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
8
|
+
# the License for the specific language governing permissions and
|
9
|
+
# limitations under the License.
|
10
|
+
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
require 'ec2/platform/base'
|
13
|
+
require 'ec2/platform/linux/identity'
|
14
|
+
require 'ec2/platform/linux/architecture'
|
15
|
+
require 'ec2/platform/linux/fstab'
|
16
|
+
require 'ec2/platform/linux/mtab'
|
17
|
+
require 'ec2/platform/linux/image'
|
18
|
+
require 'ec2/platform/linux/rsync'
|
19
|
+
require 'ec2/platform/linux/tar'
|
20
|
+
require 'ec2/platform/linux/uname'
|
21
|
+
require 'ec2/platform/linux/pipeline'
|
22
|
+
require 'ec2/platform/linux/constants'
|
23
|
+
|
24
|
+
module EC2
|
25
|
+
module Platform
|
26
|
+
module Linux
|
27
|
+
module Distribution
|
28
|
+
include EC2::Platform::Base::Distribution
|
29
|
+
AMAZON = 'Amazon Linux'
|
30
|
+
REDHAT = 'Red Hat Linux'
|
31
|
+
GENTOO = 'Gentoo'
|
32
|
+
DEBIAN = 'Debian'
|
33
|
+
UBUNTU = 'Ubuntu'
|
34
|
+
FEDORA = 'Fedora'
|
35
|
+
SLACKWARE = 'Slackware'
|
36
|
+
SUSE = 'SuSE Linux'
|
37
|
+
MANDRAKE = 'Mandrake'
|
38
|
+
CAOS = 'Caos Linux'
|
39
|
+
|
40
|
+
IDENTITIES= [
|
41
|
+
# file distro regex
|
42
|
+
['/etc/system-release-cpe', Distribution::AMAZON, /amazon/],
|
43
|
+
['/etc/caos-release', Distribution::CAOS, nil],
|
44
|
+
['/etc/debian-release', Distribution::DEBIAN, nil],
|
45
|
+
['/etc/debian_version', Distribution::DEBIAN, nil],
|
46
|
+
['/etc/fedora-release', Distribution::FEDORA, nil],
|
47
|
+
['/etc/gentoo-release', Distribution::GENTOO, nil],
|
48
|
+
['/etc/redhat-release', Distribution::REDHAT, nil],
|
49
|
+
['/etc/slackware-version', Distribution::SLACKWARE, nil],
|
50
|
+
['/etc/slackware-release', Distribution::SLACKWARE, nil],
|
51
|
+
['/etc/SuSE-release', Distribution::SUSE, nil],
|
52
|
+
['/etc/ubuntu-release', Distribution::UBUNTU, nil],
|
53
|
+
['/etc/ubuntu-version', Distribution::UBUNTU, nil],
|
54
|
+
['/etc/mandrake-release', Distribution::MANDRAKE, nil],
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
class System < EC2::Platform::Base::System
|
59
|
+
|
60
|
+
BUNDLING_ARCHITECTURE = EC2::Platform::Linux::Architecture.bundling
|
61
|
+
|
62
|
+
#---------------------------------------------------------------------#
|
63
|
+
def self.distribution
|
64
|
+
Distribution::IDENTITIES.each do |file, distro, regex|
|
65
|
+
if File.exists? file
|
66
|
+
if regex.is_a? Regexp
|
67
|
+
return distro if regex.match((IO.read file rescue nil))
|
68
|
+
else
|
69
|
+
return distro
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
return Distribution::UNKNOWN
|
74
|
+
end
|
75
|
+
|
76
|
+
#---------------------------------------------------------------------#
|
77
|
+
def self.superuser?()
|
78
|
+
return `id -u`.strip == '0'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|