sle2docker 0.1.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: eb963af94d7f7cc450726198692b2a3115fe03bc
4
+ data.tar.gz: dcaab3e0f989f15cfd31202edcc631e5285b258a
5
+ SHA512:
6
+ metadata.gz: 904c4a1861c40735824e5a79995c30eaa4a055797b4287a7e898e1b8ebe24b88a3219db8f19a3ab63deb960b465dbc84472f4417f0e43bc3d7451178c65bf940
7
+ data.tar.gz: e69c0883939c6fc41a3cd62f656f09b177d33fbcf42a5d564db17a82cbfbe2d962f203daef48adfcf2a70be5b040f3ae3e21f207d476f6e71c0f2e5d3b53e2c9
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg
data/Changelog ADDED
@@ -0,0 +1,11 @@
1
+ Tue Sep 02 08:19:22 CEST 2014 Flavio Castelli <fcastelli@suse.com>
2
+
3
+ * Version 0.1.2: made template name case insensitive
4
+
5
+ Thu Aug 07 11:10:26 CEST 2014 Flavio Castelli <fcastelli@suse.com>
6
+
7
+ * Version 0.1.1: added SLE12 template
8
+
9
+ Tue Aug 05 16:58:21 CEST 2014 Flavio Castelli <fcastelli@suse.com>
10
+
11
+ * Release of the initial version 0.1.0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Flavio Castelli
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ sle2docker is a convenience tool which creates SUSE Linux Enterprise images for
2
+ [Docker](http://docker.com).
3
+
4
+ The tool relies on [KIWI](https://github.com/openSUSE/kiwi) and Docker itself
5
+ to build the images.
6
+
7
+ Packages can be fetched either from SUSE Customer Center (SCC) or from a local
8
+ Subscription Management Tool (SMT).
9
+
10
+ Using DVD sources is currently unsupported.
11
+
12
+ # Requirements
13
+
14
+ Ruby is required to execute the sle2docker program.
15
+
16
+ Docker must be running on the system and the user invoking sle2docker must
17
+ have the rights to interact with it.
18
+
19
+ # Installation
20
+
21
+ The recommended way to install sle2docker is via zypper:
22
+
23
+ ```
24
+ sudo zypper in rubygem-sle2docker
25
+ ```
26
+
27
+ However sle2docker can be installed via gem:
28
+
29
+ ```
30
+ sudo gem install --no-format-exec sle2docker
31
+ ```
32
+
33
+ The `--no-format-exec` is recommended otherwise the `sle2docker` binary will
34
+ be prefixed with the ruby version installed on the system (eg: the binary on
35
+ SLE12 would be called `sle2docker.ruby2.1`).
36
+
37
+ # How it works
38
+
39
+ The sle2docker gem comes with a set of supported SLE templates. These are KIWI
40
+ source files which are filled with the informations provided by the user at
41
+ runtime.
42
+
43
+ The image creation happens inside of
44
+ [this](https://registry.hub.docker.com/u/opensuse/kiwi/)
45
+ Docker image. This has to be done because on recent systems (like SLE12) KIWI
46
+ cannot create SLE11 images. That happens because building a SLE11 systems
47
+ requires the `db45-utils` package to be installed on the host system; this
48
+ package is obsolete and is not available on SLE12.
49
+
50
+ The Docker image used by sle2docker is based on openSUSE and it's freely
51
+ downloadable from the [Docker Hub](https://registry.hub.docker.com/). The image
52
+ is built using Docker's build system by starting from the
53
+ [official openSUSE image](https://registry.hub.docker.com/_/opensuse/).
54
+ The `Dockerfile` used to create this image can be found inside of
55
+ [this](https://github.com/openSUSE/docker-containers) repository.
56
+
57
+ sle2docker automatically fetches the `opensuse/kiwi` image if not found on the
58
+ system.
59
+
60
+ # Usage
61
+
62
+ To build a template just use the following command:
63
+
64
+ ```
65
+ sle2docker <template name>
66
+ ```
67
+
68
+ A list of the available templates can be obtained by running:
69
+
70
+ ```
71
+ sle2docker -l
72
+ ```
73
+
74
+ ## SUSE Customer Center integration
75
+
76
+ By default sle2docker downloads all the required packages from SUSE
77
+ Customer Center (SCC). Before the build starts sle2docker ask the user
78
+ his credentials. It is possible to start a build in a non interactive way by
79
+ using the following command:
80
+
81
+ ```
82
+ sle2docker -u USERNAME -p PASSWORD TEMPLATE_NAME
83
+ ```
84
+
85
+
86
+ ## Subscription Management Tool integration
87
+
88
+ It is possible to download all the reuiqred packages from a local
89
+ Subscription Management Tool (SMT) instance:
90
+
91
+ ```
92
+ sle2docker -s SMT_SERVER_HOSTNAME TEMPLATE_NAME
93
+ ```
94
+
95
+ By default sle2docker assumes the contents of the SMT server are served over
96
+ HTTPS. To force the retrieval of the package over plain HTTP use the
97
+ following command:
98
+
99
+ ```
100
+ sle2docker -s SMT_SERVER_HOSTNAME --disable-https TEMPLATE_NAME
101
+ ```
102
+
103
+ By default sle2docker expects the SMT instance to not require any form of
104
+ authentication. However it is possible to specify the access credentials by
105
+ using the following command:
106
+
107
+ ```
108
+ sle2docker -s SMT_SERVER_HOSTNAME -u USERNAME -p PASSWORD TEMPLATE_NAME
109
+ ```
110
+
111
+
112
+ # License
113
+
114
+ sle2docker is released under the MIT license.
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require 'bundler'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rake/testtask'
7
+ Rake::TestTask.new(:test) do |test|
8
+ test.libs << 'lib' << 'test'
9
+ test.pattern = 'test/**/*_test.rb'
10
+ test.verbose = true
11
+ end
12
+
13
+ begin
14
+ require 'yard'
15
+ YARD::Rake::YardocTask.new
16
+ rescue LoadError
17
+ puts "Yard not available. To generate documentation install it with: gem install yard"
18
+ end
data/bin/sle2docker ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/sle2docker'
3
+
4
+ container = Sle2Docker::Cli.new.start()
5
+ puts "Container created, it can be imported by running the following command:"
6
+ puts " docker import - <desired image name> < #{container}"
7
+ puts "\nThen the '#{File.expand_path(File.join(File.dirname(container), '..'))}' directory and all its contents can be removed."
8
+ puts "Note well: KIWI created some of these files while running as root user, " +
9
+ "hence root privileges are required to remove them."
data/lib/sle2docker.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ require 'io/console'
4
+ require 'optparse'
5
+ require 'tmpdir'
6
+
7
+ require_relative 'sle2docker/cli'
8
+ require_relative 'sle2docker/builder'
9
+ require_relative 'sle2docker/exceptions'
10
+ require_relative 'sle2docker/template'
11
+ require_relative 'sle2docker/version'
@@ -0,0 +1,102 @@
1
+ module Sle2Docker
2
+ class Builder
3
+
4
+ def initialize(options)
5
+ @options = options
6
+ end
7
+
8
+ # Creates the actual Docker image using kiwi
9
+ #
10
+ # @param [String] template_dir
11
+ # @return [String] path to the image created by kiwi
12
+ def create(template_dir)
13
+ tmp_dir = Dir.mktmpdir("sle2docker")
14
+ tmp_template_dir = File.join(tmp_dir, "template")
15
+ result_dir = File.join(tmp_dir, "result")
16
+
17
+ FileUtils.cp_r(File.join(template_dir, "."), tmp_template_dir)
18
+ FileUtils.mkdir_p(result_dir)
19
+
20
+ template_file = find_template_file(tmp_template_dir)
21
+ if template_file.end_with?('.erb')
22
+ template = render_template(template_file)
23
+ File.open(File.join(tmp_template_dir, "config.xml"), "w") do |file|
24
+ file.write(template)
25
+ end
26
+ end
27
+
28
+ docker_cmd = "docker run "
29
+ # ensure kiwi cache is persistent
30
+ docker_cmd += "-v /var/cache/kiwi:/var/cache/kiwi "
31
+ # share build dir
32
+ docker_cmd += "-v #{tmp_dir}:/#{tmp_dir} "
33
+ # required because kiwi needs to bind mount /proc while creating the image
34
+ docker_cmd += "--privileged "
35
+ # the image to use
36
+ docker_cmd += "opensuse/kiwi "
37
+ # kiwi directives
38
+ docker_cmd += "--build #{tmp_template_dir} --type docker -d #{result_dir}"
39
+ begin
40
+ puts "Starting build process inside of Docker container"
41
+ if !system(docker_cmd)
42
+ $stderr.printf("Something wrong happened during the build process\n")
43
+ exit(1)
44
+ end
45
+ end
46
+ Dir[File.join(result_dir, "*.tbz")].first
47
+ end
48
+
49
+ # Looks for either config.xml or config.xml.erb inside of the template
50
+ # directory.
51
+ #
52
+ # Exits with an error if no file is found.
53
+ #
54
+ # @param [String] template_dir
55
+ # @return [String] full path to the template file
56
+ def find_template_file(template_dir)
57
+ template_file = File.join(template_dir, 'config.xml.erb')
58
+
59
+ if !File.exist?(template_file)
60
+ raise ConfigNotFoundError.new("Cannot find config.xml.erb file inside of #{template_dir}")
61
+ end
62
+
63
+ template_file
64
+ end
65
+
66
+ # Performs the rendering of config.xml.erb
67
+ #
68
+ # @param [String] template_file
69
+ # @return [String] rendered template
70
+ def render_template(template_file)
71
+ host = if @options[:smt_host]
72
+ @options[:smt_host]
73
+ else
74
+ "nu.novell.com"
75
+ end
76
+
77
+ username = @options[:username]
78
+ if !username && (!@options[:password].empty? || !@options[:smt_host])
79
+ puts "Enter #{@options[:smt_host] ? '' : 'NCC '}username:"
80
+ username = $stdin.gets.chomp
81
+ end
82
+
83
+ password = @options[:password]
84
+ if (username || !@options[:smt_host]) && password.empty?
85
+ puts "Enter #{@options[:smt_host] ? '' : 'NCC '}password:"
86
+ password = $stdin.noecho(&:gets).chomp
87
+ end
88
+
89
+ credentials = ""
90
+ if username || !password.empty?
91
+ credentials = "username='#{username}' password='#{password}'"
92
+ end
93
+
94
+ use_ncc = !@options[:smt_host]
95
+
96
+ enable_https = !@options[:disable_https]
97
+
98
+ ERB.new(File.read(template_file)).result(binding)
99
+ end
100
+ end
101
+
102
+ end
@@ -0,0 +1,83 @@
1
+ module Sle2Docker
2
+
3
+ class Cli
4
+
5
+ def initialize
6
+ @options, @template_dir = parse_options()
7
+ end
8
+
9
+ def start
10
+ builder = Builder.new(@options)
11
+ builder.create(@template_dir)
12
+ rescue ConfigNotFoundError => e
13
+ $stderr.printf(e.message + "\n")
14
+ exit(1)
15
+ end
16
+
17
+ private
18
+
19
+ def parse_options()
20
+ options = {}
21
+
22
+ optparse = OptionParser.new do|opts|
23
+ opts.banner = "Usage: sle2docker [options] TEMPLATE"
24
+
25
+ options[:username] = nil
26
+ opts.on('-u', '--username USERNAME',
27
+ 'Username required to access repositories' ) do |u|
28
+ options[:username] = u
29
+ end
30
+
31
+ options[:password] = ""
32
+ opts.on('-p', '--password PASSWORD',
33
+ 'Password required to access repositories' ) do |p|
34
+ options[:password] = p
35
+ end
36
+
37
+ options[:smt_host] = nil
38
+ opts.on('-s', '--smt-host SMT_HOST',
39
+ 'SMT machine hosting the repositories' ) do |smt_host|
40
+ options[:smt_host] = smt_host
41
+ end
42
+
43
+ options[:disable_https] = false
44
+ opts.on('--disable-https',
45
+ 'Do not use HTTPS when accessing repositories' ) do
46
+ options[:disable_https] = true
47
+ end
48
+
49
+ opts.on('-l', '--list-templates', 'List the available templates' ) do
50
+ puts "Available templates:"
51
+ Template.list.each {|template| puts " - #{template}"}
52
+ exit
53
+ end
54
+
55
+
56
+ opts.on('-h', '--help', 'Display this screen' ) do
57
+ puts opts
58
+ exit
59
+ end
60
+
61
+ opts.on('-v', '--version', 'Display version' ) do
62
+ puts Sle2Docker::VERSION
63
+ exit
64
+ end
65
+
66
+ end
67
+
68
+ optparse.parse!
69
+
70
+ if ARGV.count != 1
71
+ $stderr.printf("Template not provided\n")
72
+ exit(1)
73
+ end
74
+
75
+ [options, Template.template_dir(ARGV[0])]
76
+ rescue TemplateNotFoundError => ex
77
+ $stderr.printf(ex.message + "\n")
78
+ $stderr.printf("To list the available templates use:\n")
79
+ $stderr.printf(" sle2docker -l\n")
80
+ exit(1)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,9 @@
1
+ module Sle2Docker
2
+
3
+ class TemplateNotFoundError < RuntimeError
4
+ end
5
+
6
+ class ConfigNotFoundError < RuntimeError
7
+ end
8
+
9
+ end
@@ -0,0 +1,21 @@
1
+ module Sle2Docker
2
+
3
+ class Template
4
+
5
+ def self.list
6
+ Dir[File.expand_path('../../templates/*', __FILE__)].map do |dir|
7
+ File.basename(dir)
8
+ end
9
+ end
10
+
11
+ def self.template_dir(template_name)
12
+ dir = File.expand_path("../../templates/#{template_name.upcase}", __FILE__)
13
+ if !File.exists?(dir)
14
+ raise TemplateNotFoundError.new("Cannot find template with name #{template_name}")
15
+ end
16
+ dir
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,5 @@
1
+ module Sle2Docker
2
+
3
+ VERSION = "0.1.3"
4
+
5
+ end
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ #================
3
+ # FILE : config.sh
4
+ #----------------
5
+ # PROJECT : OpenSuSE KIWI Image System
6
+ # COPYRIGHT : (c) 2013 SUSE LLC
7
+ # :
8
+ # AUTHOR : Robert Schweikert <rjschwei@suse.com>
9
+ # :
10
+ # BELONGS TO : Operating System images
11
+ # :
12
+ # DESCRIPTION : configuration script for SUSE based
13
+ # : operating systems
14
+ # :
15
+ # :
16
+ # STATUS : BETA
17
+ #----------------
18
+ #======================================
19
+ # Functions...
20
+ #--------------------------------------
21
+ test -f /.kconfig && . /.kconfig
22
+ test -f /.profile && . /.profile
23
+
24
+ #======================================
25
+ # Greeting...
26
+ #--------------------------------------
27
+ echo "Configure image: [$kiwi_iname]..."
28
+
29
+ #======================================
30
+ # Setup baseproduct link
31
+ #--------------------------------------
32
+ suseSetupProduct
33
+
34
+ #======================================
35
+ # SuSEconfig
36
+ #--------------------------------------
37
+ suseConfig
38
+
39
+ #======================================
40
+ # Activate services
41
+ #--------------------------------------
42
+ suseActivateDefaultServices
43
+
44
+ #======================================
45
+ # Umount kernel filesystems
46
+ #--------------------------------------
47
+ baseCleanMount
48
+
49
+ exit 0
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP2-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP2 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp2">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP2:Updates" <%= credentials %>>
29
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP2-Updates/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP2:Core" <%= credentials %>>
32
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP2-Core/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
33
+ </repository>
34
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP1:Updates" <%= credentials %>>
35
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP1-Updates/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
36
+ </repository>
37
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP1:Pool" <%= credentials %>>
38
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP1-Pool/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
39
+ </repository>
40
+ <packages type="image">
41
+ <package name="coreutils"/>
42
+ <package name="iputils"/>
43
+ </packages>
44
+ <packages type="bootstrap">
45
+ <package name="filesystem"/>
46
+ <package name="glibc-locale"/>
47
+ <package name="libstdc++46"/>
48
+ <package name="libgcc46"/>
49
+ <package name="openssl-certs"/>
50
+ </packages>
51
+ </image>
File without changes
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ #================
3
+ # FILE : config.sh
4
+ #----------------
5
+ # PROJECT : OpenSuSE KIWI Image System
6
+ # COPYRIGHT : (c) 2013 SUSE LLC
7
+ # :
8
+ # AUTHOR : Robert Schweikert <rjschwei@suse.com>
9
+ # :
10
+ # BELONGS TO : Operating System images
11
+ # :
12
+ # DESCRIPTION : configuration script for SUSE based
13
+ # : operating systems
14
+ # :
15
+ # :
16
+ # STATUS : BETA
17
+ #----------------
18
+ #======================================
19
+ # Functions...
20
+ #--------------------------------------
21
+ test -f /.kconfig && . /.kconfig
22
+ test -f /.profile && . /.profile
23
+
24
+ #======================================
25
+ # Greeting...
26
+ #--------------------------------------
27
+ echo "Configure image: [$kiwi_iname]..."
28
+
29
+ #======================================
30
+ # Setup baseproduct link
31
+ #--------------------------------------
32
+ suseSetupProduct
33
+
34
+ #======================================
35
+ # SuSEconfig
36
+ #--------------------------------------
37
+ suseConfig
38
+
39
+ #======================================
40
+ # Activate services
41
+ #--------------------------------------
42
+ suseActivateDefaultServices
43
+
44
+ #======================================
45
+ # Umount kernel filesystems
46
+ #--------------------------------------
47
+ baseCleanMount
48
+
49
+ exit 0
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP3-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP3 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp3">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Updates" <%= credentials %>>
29
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Pool" <%= credentials %>>
32
+ <source path="http<%= "s" if enable_https %>://<%= host %>/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64<%= "?credentials=NCCcredentials" if use_ncc %>"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="libstdc++6"/>
42
+ <package name="libgcc_s1"/>
43
+ <package name="openssl-certs" />
44
+ </packages>
45
+ </image>
File without changes
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ #================
3
+ # FILE : config.sh
4
+ #----------------
5
+ # PROJECT : OpenSuSE KIWI Image System
6
+ # COPYRIGHT : (c) 2013 SUSE LLC
7
+ # :
8
+ # AUTHOR : Robert Schweikert <rjschwei@suse.com>
9
+ # :
10
+ # BELONGS TO : Operating System images
11
+ # :
12
+ # DESCRIPTION : configuration script for SUSE based
13
+ # : operating systems
14
+ # :
15
+ # :
16
+ # STATUS : BETA
17
+ #----------------
18
+ #======================================
19
+ # Functions...
20
+ #--------------------------------------
21
+ test -f /.kconfig && . /.kconfig
22
+ test -f /.profile && . /.profile
23
+
24
+ #======================================
25
+ # Greeting...
26
+ #--------------------------------------
27
+ echo "Configure image: [$kiwi_iname]..."
28
+
29
+ #======================================
30
+ # Setup baseproduct link
31
+ #--------------------------------------
32
+ suseSetupProduct
33
+
34
+ #======================================
35
+ # SuSEconfig
36
+ #--------------------------------------
37
+ suseConfig
38
+
39
+ #======================================
40
+ # Activate services
41
+ #--------------------------------------
42
+ suseActivateDefaultServices
43
+
44
+ #======================================
45
+ # Umount kernel filesystems
46
+ #--------------------------------------
47
+ baseCleanMount
48
+
49
+ exit 0
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sle-12-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 12 docker container</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sle12">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLE12:Pool" >
29
+ <source path="http<%= "s" if enable_https %>://<%= host %>/SUSE:/Products:/SLE-12/images/repo/SLE-12-Server-POOL-x86_64-Media1/<%= "?credentials=NCCcredentials" if use_ncc %>"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLE12:Updates" >
32
+ <source path="http<%= "s" if enable_https %>://<%= host %>/SUSE:/Updates:/SLE-SERVER:/12:/x86_64/standard<%= "?credentials=NCCcredentials" if use_ncc %>"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="ca-certificates"/>
42
+ <package name="ca-certificates-mozilla"/>
43
+ </packages>
44
+ </image>
File without changes
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path("../lib/sle2docker/version", __FILE__)
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sle2docker"
7
+ s.version = Sle2Docker::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Flavio Castelli']
10
+ s.email = ['fcastelli@suse.com']
11
+ s.homepage = "https://github.com/SUSE/sle2docker"
12
+ s.summary = "Create SLE images for Docker"
13
+ s.description = "Quickly create SLE images for Docker using kiwi."
14
+
15
+ s.required_rubygems_version = ">= 1.3.6"
16
+ s.rubyforge_project = "sle2docker"
17
+
18
+ s.add_development_dependency "bundler"
19
+ s.add_development_dependency "yard"
20
+ s.files = `git ls-files`.split("\n")
21
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
22
+ s.require_path = 'lib'
23
+ end
@@ -0,0 +1,170 @@
1
+ require_relative 'test_helper'
2
+
3
+ class BuilderTest < MiniTest::Test
4
+
5
+ def setup
6
+ @options = {
7
+ :username => nil,
8
+ :password => '',
9
+ :smt_host => nil,
10
+ :disable_https => false
11
+ }
12
+
13
+ @template_file = File.join(Sle2Docker::Template.template_dir("SLE11SP3"),
14
+ "config.xml.erb")
15
+ end
16
+
17
+
18
+ # testing render_template
19
+
20
+ def test_render_template_ncc_nothing_set
21
+ expected = read_fixture("sle11sp3_config.xml")
22
+ password = "fake password"
23
+ username = "test_user"
24
+
25
+ builder = Sle2Docker::Builder.new(@options)
26
+
27
+ $stdin = FakeStdin.new([username, password])
28
+
29
+ template = ""
30
+ stdout = capture(:stdout) do
31
+ template = builder.render_template(@template_file)
32
+ end
33
+
34
+ assert_equal(expected, template)
35
+ stdout_expected_sequence = ["Enter NCC username:", "Enter NCC password:"]
36
+ assert_equal(stdout.split("\n"), stdout_expected_sequence)
37
+ end
38
+
39
+ def test_render_template_ncc_username_set
40
+ expected = read_fixture("sle11sp3_config.xml")
41
+ password = "fake password"
42
+ @options[:username] = "test_user"
43
+
44
+ builder = Sle2Docker::Builder.new(@options)
45
+
46
+ $stdin = FakeStdin.new([password])
47
+
48
+ template = ""
49
+ stdout = capture(:stdout) do
50
+ template = builder.render_template(@template_file)
51
+ end
52
+
53
+ assert_equal(expected, template)
54
+ assert_equal("Enter NCC password:", stdout.chomp)
55
+ end
56
+
57
+ def test_render_template_ncc_username_and_password_set
58
+ expected = read_fixture("sle11sp3_config.xml")
59
+ @options[:password] = "fake password"
60
+ @options[:username] = "test_user"
61
+
62
+ builder = Sle2Docker::Builder.new(@options)
63
+
64
+ template = ""
65
+ stdout = capture(:stdout) do
66
+ template = STDIN.stub(:gets, RuntimeError.new("Not expected!")) do
67
+ builder.render_template(@template_file)
68
+ end
69
+ end
70
+
71
+ assert_equal(expected, template)
72
+ assert stdout.empty?
73
+ end
74
+
75
+ def test_render_template_smt_no_auth
76
+ expected = read_fixture("sle11sp3_smt_no_auth_https_config.xml")
77
+ @options[:smt_host] = "my_smt.local"
78
+
79
+ builder = Sle2Docker::Builder.new(@options)
80
+
81
+ template = ""
82
+ stdout = capture(:stdout) do
83
+ template = STDIN.stub(:gets, RuntimeError.new("Not expected!")) do
84
+ builder.render_template(@template_file)
85
+ end
86
+ end
87
+
88
+ assert_equal(expected, template)
89
+ assert stdout.empty?
90
+ end
91
+
92
+ def test_render_template_smt_no_auth_disable_https
93
+ expected = read_fixture("sle11sp3_smt_no_auth_no_https_config.xml")
94
+ @options[:smt_host] = "my_smt.local"
95
+ @options[:disable_https] = true
96
+
97
+ builder = Sle2Docker::Builder.new(@options)
98
+
99
+ template = ""
100
+ stdout = capture(:stdout) do
101
+ template = STDIN.stub(:gets, RuntimeError.new("Not expected!")) do
102
+ builder.render_template(@template_file)
103
+ end
104
+ end
105
+
106
+ assert_equal(expected, template)
107
+ assert stdout.empty?
108
+ end
109
+
110
+ def test_render_template_smt_username_set
111
+ expected = read_fixture("sle11sp3_smt_auth_config.xml")
112
+ @options[:smt_host] = "my_smt.local"
113
+ @options[:disable_https] = true
114
+ @options[:username] = "test_user"
115
+ password = "fake password"
116
+
117
+ builder = Sle2Docker::Builder.new(@options)
118
+
119
+ $stdin = FakeStdin.new([password])
120
+
121
+ template = ""
122
+ stdout = capture(:stdout) do
123
+ template = builder.render_template(@template_file)
124
+ end
125
+
126
+ assert_equal(expected, template)
127
+ assert_equal("Enter password:", stdout.chomp)
128
+ end
129
+
130
+ def test_render_template_smt_password_set
131
+ expected = read_fixture("sle11sp3_smt_auth_config.xml")
132
+ @options[:smt_host] = "my_smt.local"
133
+ @options[:disable_https] = true
134
+ @options[:password] = "fake password"
135
+ username = "test_user"
136
+
137
+ builder = Sle2Docker::Builder.new(@options)
138
+
139
+ $stdin = FakeStdin.new([username])
140
+
141
+ template = ""
142
+ stdout = capture(:stdout) do
143
+ template = builder.render_template(@template_file)
144
+ end
145
+
146
+ assert_equal(expected, template)
147
+ assert_equal("Enter username:", stdout.chomp)
148
+ end
149
+
150
+ # Testing find_template_file
151
+
152
+ def test_find_template_file
153
+ template = Sle2Docker::Template.list.first
154
+ template_dir = Sle2Docker::Template.template_dir(template)
155
+ builder = Sle2Docker::Builder.new(@options)
156
+
157
+ actual = builder.find_template_file(template_dir)
158
+ assert File.exist?(actual)
159
+ end
160
+
161
+ def test_find_template_file_raises_exception_on_missing_file
162
+ builder = Sle2Docker::Builder.new(@options)
163
+
164
+ assert_raises(Sle2Docker::ConfigNotFoundError) do
165
+ builder.find_template_file("/tmp")
166
+ end
167
+ end
168
+
169
+ end
170
+
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP3-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP3 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp3">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Updates" username='test_user' password='fake password'>
29
+ <source path="https://nu.novell.com/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64?credentials=NCCcredentials"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Pool" username='test_user' password='fake password'>
32
+ <source path="https://nu.novell.com/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64?credentials=NCCcredentials"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="libstdc++6"/>
42
+ <package name="libgcc_s1"/>
43
+ <package name="openssl-certs" />
44
+ </packages>
45
+ </image>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP3-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP3 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp3">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Updates" username='test_user' password='fake password'>
29
+ <source path="http://my_smt.local/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Pool" username='test_user' password='fake password'>
32
+ <source path="http://my_smt.local/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="libstdc++6"/>
42
+ <package name="libgcc_s1"/>
43
+ <package name="openssl-certs" />
44
+ </packages>
45
+ </image>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP3-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP3 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp3">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Updates" >
29
+ <source path="https://my_smt.local/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Pool" >
32
+ <source path="https://my_smt.local/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="libstdc++6"/>
42
+ <package name="libgcc_s1"/>
43
+ <package name="openssl-certs" />
44
+ </packages>
45
+ </image>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <image schemaversion="6.1" name="sles-11-SP3-docker-guest">
4
+ <description type="system">
5
+ <author>Flavio Castelli</author>
6
+ <contact>fcastelli@suse.com</contact>
7
+ <specification>SLE 11 SP3 Docker image</specification>
8
+ </description>
9
+ <preferences>
10
+ <type image="docker" container="sles11sp3">
11
+ <machine>
12
+ <vmdisk/>
13
+ <vmnic interface="eth0" mode="veth"/>
14
+ </machine>
15
+ </type>
16
+ <version>1.0.0</version>
17
+ <packagemanager>zypper</packagemanager>
18
+ <rpm-check-signatures>false</rpm-check-signatures>
19
+ <rpm-force>true</rpm-force>
20
+ <locale>en_US</locale>
21
+ <keytable>us.map.gz</keytable>
22
+ <hwclock>utc</hwclock>
23
+ <timezone>US/Eastern</timezone>
24
+ </preferences>
25
+ <users group="root">
26
+ <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
27
+ </users>
28
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Updates" >
29
+ <source path="http://my_smt.local/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64"/>
30
+ </repository>
31
+ <repository type="rpm-md" imageinclude="true" alias="SLES11:SP3:Pool" >
32
+ <source path="http://my_smt.local/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64"/>
33
+ </repository>
34
+ <packages type="image">
35
+ <package name="coreutils"/>
36
+ <package name="iputils"/>
37
+ </packages>
38
+ <packages type="bootstrap">
39
+ <package name="filesystem"/>
40
+ <package name="glibc-locale"/>
41
+ <package name="libstdc++6"/>
42
+ <package name="libgcc_s1"/>
43
+ <package name="openssl-certs" />
44
+ </packages>
45
+ </image>
@@ -0,0 +1,30 @@
1
+ require_relative 'test_helper'
2
+
3
+ class TemplateTest < MiniTest::Test
4
+
5
+ def test_list
6
+ actual = Sle2Docker::Template.list
7
+ expected = ['SLE11SP2', 'SLE11SP3', 'SLE12']
8
+ assert_equal expected.sort, actual.sort
9
+ end
10
+
11
+ def test_complain_when_requested_template_does_not_exist
12
+ assert_raises(Sle2Docker::TemplateNotFoundError)do
13
+ Sle2Docker::Template.template_dir("foo")
14
+ end
15
+ end
16
+
17
+ def test_find_existing_template
18
+ dir = Sle2Docker::Template.template_dir(Sle2Docker::Template.list.first)
19
+ assert File.exist?(dir)
20
+ end
21
+
22
+ def test_find_should_be_case_insensitive
23
+ dir = Sle2Docker::Template.template_dir(
24
+ Sle2Docker::Template.list.first.downcase)
25
+ assert File.exist?(dir)
26
+ end
27
+
28
+
29
+ end
30
+
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../lib/sle2docker',__FILE__)
2
+ require 'bundler/setup' # Use bundled environment for testing
3
+ require 'minitest/autorun'
4
+ require 'stringio'
5
+
6
+ class Object
7
+ def capture(stream)
8
+ begin
9
+ stream = stream.to_s
10
+ eval "$#{stream} = StringIO.new"
11
+ yield
12
+ result = eval("$#{stream}").string
13
+ ensure
14
+ eval("$#{stream} = #{stream.upcase}")
15
+ end
16
+ result
17
+ end
18
+ end
19
+
20
+ class MiniTest::Test
21
+
22
+ def read_fixture(name)
23
+ File.read(File.expand_path("../fixtures/#{name}", __FILE__))
24
+ end
25
+
26
+ end
27
+
28
+ class FakeStdin
29
+
30
+ # @param [Array[String]] fake_input
31
+ def initialize(fake_input)
32
+ @fake_input = fake_input.reverse
33
+ end
34
+
35
+ def gets()
36
+ @fake_input.pop
37
+ end
38
+
39
+ def noecho()
40
+ yield(self)
41
+ end
42
+
43
+ end
44
+
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sle2docker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Flavio Castelli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Quickly create SLE images for Docker using kiwi.
42
+ email:
43
+ - fcastelli@suse.com
44
+ executables:
45
+ - sle2docker
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Changelog
51
+ - LICENSE
52
+ - README.md
53
+ - Rakefile
54
+ - bin/sle2docker
55
+ - lib/sle2docker.rb
56
+ - lib/sle2docker/builder.rb
57
+ - lib/sle2docker/cli.rb
58
+ - lib/sle2docker/exceptions.rb
59
+ - lib/sle2docker/template.rb
60
+ - lib/sle2docker/version.rb
61
+ - lib/templates/SLE11SP2/config.sh
62
+ - lib/templates/SLE11SP2/config.xml.erb
63
+ - lib/templates/SLE11SP2/root/etc/resolv.conf
64
+ - lib/templates/SLE11SP3/config.sh
65
+ - lib/templates/SLE11SP3/config.xml.erb
66
+ - lib/templates/SLE11SP3/root/etc/resolv.conf
67
+ - lib/templates/SLE12/config.sh
68
+ - lib/templates/SLE12/config.xml.erb
69
+ - lib/templates/SLE12/root/etc/resolv.conf
70
+ - sle2docker.gemspec
71
+ - test/builder_test.rb
72
+ - test/fixtures/sle11sp3_config.xml
73
+ - test/fixtures/sle11sp3_smt_auth_config.xml
74
+ - test/fixtures/sle11sp3_smt_no_auth_https_config.xml
75
+ - test/fixtures/sle11sp3_smt_no_auth_no_https_config.xml
76
+ - test/template_test.rb
77
+ - test/test_helper.rb
78
+ homepage: https://github.com/SUSE/sle2docker
79
+ licenses: []
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: 1.3.6
95
+ requirements: []
96
+ rubyforge_project: sle2docker
97
+ rubygems_version: 2.0.3
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Create SLE images for Docker
101
+ test_files: []
102
+ has_rdoc: