Hello community,

here is the log from the commit of package machinery for openSUSE:Factory 
checked in at 2016-01-16 11:57:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/machinery (Old)
 and      /work/SRC/openSUSE:Factory/.machinery.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "machinery"

Changes:
--------
--- /work/SRC/openSUSE:Factory/machinery/machinery.changes      2015-11-28 
15:19:03.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.machinery.new/machinery.changes 2016-01-16 
11:57:09.000000000 +0100
@@ -1,0 +2,23 @@
+Thu Jan 14 18:35:47 CET 2016 - [email protected]
+
+- update to version 1.16.4
+  * The unmanaged-files scope filter will not include "/boot" by default 
anymore.
+    In order to have the same behavior as before run:
+  * Fix crash during image build on SLES12 SP1 (gh#SUSE/machinery#1828)
+- reduce version restrictions for gems to the major version (bnc#961176)
+
+-------------------------------------------------------------------
+Thu Jan 07 17:57:27 CET 2016 - [email protected]
+
+- update to version 1.16.3
+  * Remove concept of "supported systems" in favor of letting Machinery run
+    everywhere. Whether a system can be built, exported, etc will be validated
+    from its related task by checking if the propper tooling is installed
+  * Remove hint for `show`, when `inspect-container` is run with `--show` 
option
+  * Rephrase the startup messages and warn messages when starting the HTTP
+    server for compare, show, or serve system descriptions
+  * Change `serve` command to always list all system descriptions
+- increase nokogiri requirement to >= 1.6.1
+- tracking bug (bnc#961011)
+
+-------------------------------------------------------------------
@@ -18,0 +42 @@
+  * Add HTML landing page, which lists all system descriptions on your system

Old:
----
  machinery-tool-1.16.2.gem

New:
----
  machinery-tool-1.16.4.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ machinery.spec ++++++
--- /var/tmp/diff_new_pack.NfiRK5/_old  2016-01-16 11:57:10.000000000 +0100
+++ /var/tmp/diff_new_pack.NfiRK5/_new  2016-01-16 11:57:10.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package machinery
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           machinery
-Version:        1.16.2
+Version:        1.16.4
 Release:        0
 %define binary_name machinery
 %define mod_name machinery-tool
@@ -49,83 +49,83 @@
 BuildRequires:  %{rubygem bundler}
 BuildRequires:  %{rubygem gem2rpm}
 %if 0%{?bundlegems}
-BuildRequires:  %{rubygem abstract_method <= 1.3}
-BuildRequires:  %{rubygem abstract_method >= 1.2.1}
-BuildRequires:  %{rubygem cheetah <= 0.5}
-BuildRequires:  %{rubygem cheetah >= 0.4.0}
-BuildRequires:  %{rubygem diffy <= 3.1}
-BuildRequires:  %{rubygem diffy >= 3.0.7}
-BuildRequires:  %{rubygem gli <= 3}
+BuildRequires:  %{rubygem abstract_method < 2}
+BuildRequires:  %{rubygem abstract_method >= 1.2}
+BuildRequires:  %{rubygem cheetah < 1}
+BuildRequires:  %{rubygem cheetah >= 0.4}
+BuildRequires:  %{rubygem diffy < 4}
+BuildRequires:  %{rubygem diffy >= 3.0}
+BuildRequires:  %{rubygem gli < 3}
 BuildRequires:  %{rubygem gli >= 2.11}
-BuildRequires:  %{rubygem haml <= 4.1}
-BuildRequires:  %{rubygem haml >= 4.0.5}
-BuildRequires:  %{rubygem json <= 1.9}
-BuildRequires:  %{rubygem json >= 1.8.0}
-BuildRequires:  %{rubygem json-schema <= 2.3}
+BuildRequires:  %{rubygem haml < 5}
+BuildRequires:  %{rubygem haml >= 4.0}
+BuildRequires:  %{rubygem json < 2}
+BuildRequires:  %{rubygem json >= 1.8}
+BuildRequires:  %{rubygem json-schema < 2.3}
 BuildRequires:  %{rubygem json-schema >= 2.2.4}
-BuildRequires:  %{rubygem kramdown <= 2}
+BuildRequires:  %{rubygem kramdown < 2}
 BuildRequires:  %{rubygem kramdown >= 1.3}
-BuildRequires:  %{rubygem mimemagic <= 0.4}
-BuildRequires:  %{rubygem mimemagic >= 0.3.0}
-BuildRequires:  %{rubygem nokogiri <= 1.7}
-BuildRequires:  %{rubygem nokogiri >= 1.6.3}
-BuildRequires:  %{rubygem sinatra <= 1.5}
-BuildRequires:  %{rubygem sinatra >= 1.4.6}
-BuildRequires:  %{rubygem tilt <= 3}
+BuildRequires:  %{rubygem mimemagic < 1}
+BuildRequires:  %{rubygem mimemagic >= 0.3}
+BuildRequires:  %{rubygem nokogiri < 2}
+BuildRequires:  %{rubygem nokogiri >= 1.6}
+BuildRequires:  %{rubygem sinatra < 2}
+BuildRequires:  %{rubygem sinatra >= 1.4}
+BuildRequires:  %{rubygem tilt < 3}
 BuildRequires:  %{rubygem tilt >= 2.0}
 %else
-Requires:       %{rubygem abstract_method <= 1.3}
-Requires:       %{rubygem abstract_method >= 1.2.1}
-Requires:       %{rubygem cheetah <= 0.5}
-Requires:       %{rubygem cheetah >= 0.4.0}
-Requires:       %{rubygem diffy <= 3.1}
-Requires:       %{rubygem diffy >= 3.0.7}
-Requires:       %{rubygem gli <= 3}
+Requires:       %{rubygem abstract_method < 2}
+Requires:       %{rubygem abstract_method >= 1.2}
+Requires:       %{rubygem cheetah < 1}
+Requires:       %{rubygem cheetah >= 0.4}
+Requires:       %{rubygem diffy < 4}
+Requires:       %{rubygem diffy >= 3.0}
+Requires:       %{rubygem gli < 3}
 Requires:       %{rubygem gli >= 2.11}
-Requires:       %{rubygem haml <= 4.1}
-Requires:       %{rubygem haml >= 4.0.5}
-Requires:       %{rubygem json <= 1.9}
-Requires:       %{rubygem json >= 1.8.0}
-Requires:       %{rubygem json-schema <= 2.3}
+Requires:       %{rubygem haml < 5}
+Requires:       %{rubygem haml >= 4.0}
+Requires:       %{rubygem json < 2}
+Requires:       %{rubygem json >= 1.8}
+Requires:       %{rubygem json-schema < 2.3}
 Requires:       %{rubygem json-schema >= 2.2.4}
-Requires:       %{rubygem kramdown <= 2}
+Requires:       %{rubygem kramdown < 2}
 Requires:       %{rubygem kramdown >= 1.3}
-Requires:       %{rubygem mimemagic <= 0.4}
-Requires:       %{rubygem mimemagic >= 0.3.0}
-Requires:       %{rubygem nokogiri <= 1.7}
-Requires:       %{rubygem nokogiri >= 1.6.3}
-Requires:       %{rubygem sinatra <= 1.5}
-Requires:       %{rubygem sinatra >= 1.4.6}
-Requires:       %{rubygem tilt <= 3}
+Requires:       %{rubygem mimemagic < 1}
+Requires:       %{rubygem mimemagic >= 0.3}
+Requires:       %{rubygem nokogiri < 2}
+Requires:       %{rubygem nokogiri >= 1.6}
+Requires:       %{rubygem sinatra < 2}
+Requires:       %{rubygem sinatra >= 1.4}
+Requires:       %{rubygem tilt < 3}
 Requires:       %{rubygem tilt >= 2.0}
 %endif
 %else
 BuildRequires:  ruby-devel
-BuildRequires:  rubygem(abstract_method) <= 1.3
-BuildRequires:  rubygem(abstract_method) >= 1.2.1
+BuildRequires:  rubygem(abstract_method) < 2
+BuildRequires:  rubygem(abstract_method) >= 1.2
 BuildRequires:  rubygem(bundler)
-BuildRequires:  rubygem(cheetah) <= 0.5
-BuildRequires:  rubygem(cheetah) >= 0.4.0
-BuildRequires:  rubygem(diffy) <= 3.1
-BuildRequires:  rubygem(diffy) >= 3.0.7
+BuildRequires:  rubygem(cheetah) < 1
+BuildRequires:  rubygem(cheetah) >= 0.4
+BuildRequires:  rubygem(diffy) < 4
+BuildRequires:  rubygem(diffy) >= 3.0
 BuildRequires:  rubygem(gem2rpm)
-BuildRequires:  rubygem(gli) <= 3
+BuildRequires:  rubygem(gli) < 3
 BuildRequires:  rubygem(gli) >= 2.11
-BuildRequires:  rubygem(haml) <= 4.1
-BuildRequires:  rubygem(haml) >= 4.0.5
-BuildRequires:  rubygem(json) <= 1.9
-BuildRequires:  rubygem(json) >= 1.8.0
-BuildRequires:  rubygem(json-schema) <= 2.3
+BuildRequires:  rubygem(haml) < 5
+BuildRequires:  rubygem(haml) >= 4.0
+BuildRequires:  rubygem(json) < 2
+BuildRequires:  rubygem(json) >= 1.8
+BuildRequires:  rubygem(json-schema) < 2.3
 BuildRequires:  rubygem(json-schema) >= 2.2.4
-BuildRequires:  rubygem(kramdown) <= 2
+BuildRequires:  rubygem(kramdown) < 2
 BuildRequires:  rubygem(kramdown) >= 1.3
-BuildRequires:  rubygem(mimemagic) <= 0.4
-BuildRequires:  rubygem(mimemagic) >= 0.3.0
-BuildRequires:  rubygem(nokogiri) <= 1.7
-BuildRequires:  rubygem(nokogiri) >= 1.6.3
-BuildRequires:  rubygem(sinatra) <= 1.5
-BuildRequires:  rubygem(sinatra) >= 1.4.6
-BuildRequires:  rubygem(tilt) <= 3
+BuildRequires:  rubygem(mimemagic) < 1
+BuildRequires:  rubygem(mimemagic) >= 0.3
+BuildRequires:  rubygem(nokogiri) < 2
+BuildRequires:  rubygem(nokogiri) >= 1.6
+BuildRequires:  rubygem(sinatra) < 2
+BuildRequires:  rubygem(sinatra) >= 1.4
+BuildRequires:  rubygem(tilt) < 3
 BuildRequires:  rubygem(tilt) >= 2.0
 %endif
 # Disable autogenerating "Requires:" headers for bundled gems.
@@ -169,20 +169,20 @@
 pushd %{buildroot}%{_libdir}/ruby/gems/%{rb_ver}/gems/%{mod_full_name}
 
 cat > Gemfile <<EOT
-gem "cheetah", "~> 0.4.0"
+gem "cheetah", "~> 0.4"
 %if %suse_version <= 1310
-gem "json", "~> 1.8.0"
+gem "json", "~> 1.8"
 %endif
-gem "abstract_method", "~> 1.2.1"
-gem "nokogiri", "~> 1.6.3"
+gem "abstract_method", "~> 1.2"
+gem "nokogiri", "~> 1.6"
 gem "gli", "~> 2.11"
 gem "json-schema", "~> 2.2.4"
-gem "haml", "~> 4.0.5"
+gem "haml", "~> 4.0"
 gem "kramdown", "~> 1.3"
 gem "tilt", "~> 2.0"
-gem "sinatra", "~> 1.4.6"
-gem "mimemagic", "~> 0.3.0"
-gem "diffy", "~> 3.0.7"
+gem "sinatra", "~> 1.4"
+gem "mimemagic", "~> 0.3"
+gem "diffy", "~> 3.0"
 EOT
 
 mkdir -p vendor/cache

++++++ machinery-tool-1.16.2.gem -> machinery-tool-1.16.4.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.git_revision new/.git_revision
--- old/.git_revision   2015-11-24 13:19:37.000000000 +0100
+++ new/.git_revision   2016-01-14 18:38:19.000000000 +0100
@@ -1 +1 @@
-4afb989b21b401f983686603e6521c112630cac9
\ No newline at end of file
+493384074f90a69256c6fa174a1e1e05ae5ce219
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/NEWS new/NEWS
--- old/NEWS    2015-11-24 13:19:37.000000000 +0100
+++ new/NEWS    2016-01-14 18:38:19.000000000 +0100
@@ -1,6 +1,24 @@
 # Machinery Release Notes
 
 
+## Version 1.16.4 - Thu Jan 14 18:35:47 CET 2016 - [email protected]
+
+* The unmanaged-files scope filter will not include "/boot" by default anymore.
+  In order to have the same behavior as before run:
+  `machinery inspect --skip-files=/boot`
+* Fix crash during image build on SLES12 SP1 (gh#SUSE/machinery#1828)
+
+## Version 1.16.3 - Thu Jan 07 17:57:27 CET 2016 - [email protected]
+
+* Remove concept of "supported systems" in favor of letting Machinery run
+  everywhere. Whether a system can be built, exported, etc will be validated
+  from its related task by checking if the propper tooling is installed
+  (Fixes bnc#959558)
+* Remove hint for `show`, when `inspect-container` is run with `--show` option
+* Rephrase the startup messages and warn messages when starting the HTTP
+  server for compare, show, or serve system descriptions
+* Change `serve` command to always list all system descriptions
+
 ## Version 1.16.2 - Tue Nov 24 13:17:18 CET 2015 - [email protected]
 
 * Fix crash when the user does not have enough permissions to create the image
@@ -19,6 +37,7 @@
 * Fix Autoyast export on openSUSE Leap and Tumbleweed (gh#SUSE/machinery#1627)
 * Allow building of openSUSE Leap and Tumbleweed on openSUSE Leap and 
Tumbleweed
 * Allow building of SLES11 and SLES12 on openSUSE Leap
+* Add HTML landing page, which lists all system descriptions on your system
 
 ## Version 1.16.1 - Mon Nov 09 17:55:15 CET 2015 - [email protected]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bin/machinery new/bin/machinery
--- old/bin/machinery   2015-11-24 13:19:37.000000000 +0100
+++ new/bin/machinery   2016-01-14 18:38:19.000000000 +0100
@@ -26,7 +26,6 @@
     end
   end
 
-  LocalSystem.validate_machinery_compatibility
   Machinery.initialize_logger(ENV["MACHINERY_LOG_FILE"] || 
Machinery::DEFAULT_LOG_FILE)
   command_log = "Executing (Version #{Machinery::VERSION}) '#{$PROGRAM_NAME} 
#{ARGV.join(" ")}'"
   command_log += " (store: #{ENV["MACHINERY_DIR"]})" if ENV["MACHINERY_DIR"]
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filters/default_filters.json 
new/filters/default_filters.json
--- old/filters/default_filters.json    2015-11-24 13:19:37.000000000 +0100
+++ new/filters/default_filters.json    2016-01-14 18:38:19.000000000 +0100
@@ -11,7 +11,6 @@
     "/unmanaged_files/files/name=/var/lib/rpm",
     "/unmanaged_files/files/name=/.snapshots",
     "/unmanaged_files/files/name=/proc",
-    "/unmanaged_files/files/name=/boot",
     "/unmanaged_files/files/name=/etc/init.d/boot.d",
     "/unmanaged_files/files/name=/etc/init.d/rc0.d",
     "/unmanaged_files/files/name=/etc/init.d/rc1.d",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filters/filter-packages-for-build.yaml 
new/filters/filter-packages-for-build.yaml
--- old/filters/filter-packages-for-build.yaml  2015-11-24 13:19:37.000000000 
+0100
+++ new/filters/filter-packages-for-build.yaml  2016-01-14 18:38:19.000000000 
+0100
@@ -1,8 +1,3 @@
-# check lib/os.rb for the distribution names
-"openSUSE 13.2 (Harlequin)":
-  - openSUSE-release-dvd
-"openSUSE 13.1 (Bottle)":
-  - openSUSE-release-dvd
-"SUSE Linux Enterprise Server 12":
-  - sle-sdk-release-DVD
-  - sles-release-DVD
+- openSUSE-release-dvd
+- sle-sdk-release-DVD
+- sles-release-DVD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/html/assets/compare/machinery.js 
new/html/assets/compare/machinery.js
--- old/html/assets/compare/machinery.js        2015-11-24 13:19:37.000000000 
+0100
+++ new/html/assets/compare/machinery.js        2016-01-14 18:38:19.000000000 
+0100
@@ -22,10 +22,6 @@
     }
   });
 
-  $(".dismiss").click(function(){
-    $(this).closest(".scope").hide();
-  });
-
   // Hook up the toggle links
   $(".toggle").click(function(){
     $(this).closest(".scope").find(".scope_content").collapse("toggle");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/html/assets/landing_page/landing_page.js 
new/html/assets/landing_page/landing_page.js
--- old/html/assets/landing_page/landing_page.js        1970-01-01 
01:00:00.000000000 +0100
+++ new/html/assets/landing_page/landing_page.js        2016-01-14 
18:38:19.000000000 +0100
@@ -0,0 +1,10 @@
+$(document).ready(function () {
+    // Set up filter
+    $(".filterable").searcher({
+        inputSelector: "#filter"
+    });
+    $("#reset-filter").click(function () {
+        $("#filter").val("").change()
+    });
+
+})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/html/assets/machinery-base.js 
new/html/assets/machinery-base.js
--- old/html/assets/machinery-base.js   2015-11-24 13:19:37.000000000 +0100
+++ new/html/assets/machinery-base.js   2016-01-14 18:38:19.000000000 +0100
@@ -17,3 +17,9 @@
     anchor.removeClass("over-the-top");
   }
 }
+
+$(document).ready(function () {
+  $(".dismiss").click(function(){
+    $(this).closest(".scope").hide();
+  });
+})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/html/landing_page.html.haml 
new/html/landing_page.html.haml
--- old/html/landing_page.html.haml     1970-01-01 01:00:00.000000000 +0100
+++ new/html/landing_page.html.haml     2016-01-14 18:38:19.000000000 +0100
@@ -0,0 +1,59 @@
+!!!
+%html
+  %head
+    %title
+      Machinery System Descriptions
+    %meta{ :charset => 'utf-8' }
+    %link{ :href => "assets/machinery-base.css", :rel => "stylesheet", :type 
=> "text/css" }
+    %link{ :href => "assets/machinery.css", :rel => "stylesheet", :type => 
"text/css" }
+    %script{ :src => "assets/jquery-2.1.1.min.js" }
+    %script{ :src => "assets/jquery.searcher.min.js" }
+    %script{ :src => "assets/machinery-base.js" }
+    %script{ :src => "assets/show/machinery.js" }
+    %script{ :src => "assets/bootstrap-tooltip.js" }
+    %script{ :src => "assets/bootstrap-popover.js" }
+
+  %body
+    .container-fluid
+      #nav-bar
+        .row
+          .col-xs-1
+          .col-xs-10
+            %h1
+              System Descriptions
+        .row
+          .filter-input.col-md-3.col-md-offset-1
+            %input.col-md-8#filter{ :placeholder => "Type to Filter" }
+            %a.btn.btn-default.btn-reset{ :href => "#", :title => "Reset 
Filter" }
+              %span Reset
+
+          .col-xs-6.nav-buttons
+            %small.pull-right.pad-top
+              created by
+              %a{ :href => "http://machinery-project.org";, :target => "_blank" 
}
+                Machinery
+
+
+      #content_container
+        = render_partial "landing_page/alert"
+        - if @all_descriptions.empty?
+          %p.col-md-5.col-md-offset-1
+            %strong
+              No system descriptions available on your machine.
+        - else
+          %table.table.table-striped.table-condensed.filterable
+            %thead
+              %tr
+                %th Name
+                %th Last update
+                %th Scopes
+                %th Host
+            %tbody
+              - @all_descriptions.each do |key, value|
+                %tr
+                  %td
+                    %a{ :href => "/#{key}" }
+                      #{key}
+                  %td= value["date"]
+                  %td= value["scopes"].join(", ")
+                  %td= value["host"].join(", ")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/html/partials/landing_page/alert.html.haml 
new/html/partials/landing_page/alert.html.haml
--- old/html/partials/landing_page/alert.html.haml      1970-01-01 
01:00:00.000000000 +0100
+++ new/html/partials/landing_page/alert.html.haml      2016-01-14 
18:38:19.000000000 +0100
@@ -0,0 +1,9 @@
+- if @errors
+  .scope#alert_container
+    .row
+      .col-xs-10.col-xs-offset-1
+        .well
+          %span.text-right.dismiss{ title: "Collapse/Expand" }
+          - @errors.each do |error|
+            %p
+              = error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/analyze_config_file_diffs_task.rb 
new/lib/analyze_config_file_diffs_task.rb
--- old/lib/analyze_config_file_diffs_task.rb   2015-11-24 13:19:37.000000000 
+0100
+++ new/lib/analyze_config_file_diffs_task.rb   2016-01-14 18:38:19.000000000 
+0100
@@ -18,6 +18,7 @@
 class AnalyzeConfigFileDiffsTask
   def analyze(description)
     description.assert_scopes("os")
+    LocalSystem.validate_existence_of_packages(["zypper"])
     description.validate_analysis_compatibility
     description.assert_scopes(
       "repositories",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/build_task.rb new/lib/build_task.rb
--- old/lib/build_task.rb       2015-11-24 13:19:37.000000000 +0100
+++ new/lib/build_task.rb       2016-01-14 18:38:19.000000000 +0100
@@ -18,8 +18,8 @@
 class BuildTask
   def build(system_description, output_path, options = {})
     LocalSystem.validate_architecture("x86_64")
-    LocalSystem.validate_build_compatibility(system_description)
     LocalSystem.validate_existence_of_packages(["kiwi", "kiwi-desc-vmxboot"])
+    system_description.validate_build_compatibility
 
     tmp_config_dir = Dir.mktmpdir("machinery-config", "/tmp")
     tmp_image_dir = Dir.mktmpdir("machinery-image", "/tmp")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/cli.rb new/lib/cli.rb
--- old/lib/cli.rb      2015-11-24 13:19:37.000000000 +0100
+++ new/lib/cli.rb      2016-01-14 18:38:19.000000000 +0100
@@ -75,16 +75,6 @@
     end
   end
 
-  def self.buildable_distributions
-    distribution_string = ""
-    Os.supported_host_systems.each do |distribution|
-      distribution_string += "* #{distribution.canonical_name}\n\n"
-      distribution_string += 
distribution.buildable_systems.map(&:canonical_name).join(", ")
-      distribution_string += "\n\n"
-    end
-    distribution_string
-  end
-
   def self.handle_error(e)
     Machinery::Ui.kill_pager
 
@@ -312,10 +302,6 @@
   long_desc <<-LONGDESC
     Build image from a given system description and store it to the given
     location.
-
-    The following combinations of build hosts and targets are supported:
-
-    #{buildable_distributions}
   LONGDESC
   arg "NAME"
   command "build" do |c|
@@ -663,8 +649,7 @@
         system.stop
       end
 
-
-      Hint.print(:show_data, name: name)
+      Hint.print(:show_data, name: name) unless options[:show]
 
       if !options["extract-files"] || Inspector.all_scopes.count != 
scope_list.count
         Hint.print(:do_complete_inspection, name: name, docker_container: 
image)
@@ -688,10 +673,26 @@
       desc: "Display additional information about origin of scopes"
     c.switch :short, required: false, negatable: false,
       desc: "List only description names"
+    c.switch :html, required: false, negatable: false,
+      desc: "Open overview of all system descriptions in HTML format in your 
web browser"
 
     c.action do |global_options,options,args|
+      if options[:html]
+        begin
+          check_port_validity(@config.http_server_port)
+        rescue Machinery::Errors::ServerPortError => e
+          raise Machinery::Errors::InvalidCommandLine.new(e.message + " The 
port can be " \
+            "specified in the 'http_server_port' section of the configuration 
file.")
+        end
+      end
+
+      opts = {
+        ip: "127.0.0.1",
+        port: @config.http_server_port
+      }.merge(options)
+
       task = ListTask.new
-      task.list(system_description_store, args, options)
+      task.list(system_description_store, args, opts)
     end
   end
 
@@ -883,7 +884,7 @@
         value = args[1]
       end
 
-      task = ConfigTask.new
+      task = ConfigTask.new(@config)
       task.config(key, value)
 
       if key == "hints" && (value == "false" || value == "off")
@@ -893,14 +894,14 @@
     end
   end
 
-  desc "Start a webserver serving an HTML view of a system description"
+  desc "Start a web server for viewing system descriptions"
   long_desc <<-LONGDESC
-    Starts a web server which serves an HTML view for the given system 
description.
+    Starts a web server which serves an HTML view of all system descriptions 
and
+    an overview page listing all descriptions.
   LONGDESC
-  arg "NAME"
   command "serve" do |c|
     c.flag [:port, :p], type: Integer, required: false,
-      default_value: Machinery::Config.new.http_server_port,
+      default_value: @config.http_server_port,
       desc: "Listen on port PORT. Ports can be selected in a range between 
2-65535. Ports between
         2 and 1023 can only be chosen when `machinery` will be executed as 
`root` user.",
         arg_name: "PORT"
@@ -908,8 +909,6 @@
       desc: "Makes the server reachable from all IP addresses."
 
     c.action do |_global_options, options, args|
-      name = shift_arg(args, "NAME")
-
       begin
         check_port_validity(options[:port])
       rescue Machinery::Errors::ServerPortError => e
@@ -918,19 +917,10 @@
           "or via the --port option.")
       end
 
-      if options[:public]
-        ip = "0.0.0.0"
-
-        Machinery::Ui.warn("The --public option makes ALL of your system 
descriptions publicly " \
-          "available. Take care if there are system descriptions that should 
not be read by " \
-          "others!\n\n")
-      else
-        ip = "127.0.0.1"
-      end
-
-      description = SystemDescription.load(name, system_description_store)
       task = ServeHtmlTask.new
-      task.serve(description, ip, options[:port])
+      task.serve(
+        system_description_store, port: options[:port], public: 
options[:public]
+      )
     end
   end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/config.rb new/lib/config.rb
--- old/lib/config.rb   2015-11-24 13:19:37.000000000 +0100
+++ new/lib/config.rb   2016-01-14 18:38:19.000000000 +0100
@@ -40,14 +40,14 @@
         description: "Enable experimental features. See " \
           "https://github.com/SUSE/machinery/wiki/Experimental-Features for 
more details"
       )
-      entry("perform_support_check",
-        default: true,
-        description: "Check whether the current platform is supported by 
Machinery"
-      )
       entry("http_server_port",
         default: 7585,
         description: "TCP port used by the HTTP server for the HTML view"
       )
     end
+
+    def deprecated_entries
+      ["perform_support_check"]
+    end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/config_base.rb new/lib/config_base.rb
--- old/lib/config_base.rb      2015-11-24 13:19:37.000000000 +0100
+++ new/lib/config_base.rb      2016-01-14 18:38:19.000000000 +0100
@@ -32,6 +32,7 @@
   abstract_method :default_config_files
 
   abstract_method :define_entries
+  abstract_method :deprecated_entries
 
   def entry(key, parameters = {})
     key = normalize_key(key)
@@ -53,18 +54,23 @@
   end
 
   def set(key, value, options = {auto_save: true} )
-    key = normalize_key(key)
-    ensure_config_exists(key)
+    if deprecated?(key)
+      @entries.delete(key)
+    else
+      key = normalize_key(key)
+      ensure_config_exists(key)
+
+      # Check if data type is correct. true and false are not of the same type 
which makes the
+      # check complex
+      if value.class != @entries[key][:value].class &&
+          !(boolean?(value) && boolean?(@entries[key][:value]))
+        raise Machinery::Errors::MachineryError,
+          "The value '#{value}' for configuration key '#{key}' is of an 
invalid data type."
+      end
 
-    # Check if data type is correct. true and false are not of the same type 
which makes the check complex
-    if value.class != @entries[key][:value].class &&
-      !(boolean?(value) && boolean?(@entries[key][:value]))
-      raise Machinery::Errors::MachineryError,
-        "The value '#{value}' for configuration key '#{key}' is of an invalid 
data type."
+      @entries[key][:value] = value
     end
 
-    @entries[key][:value] = value
-
     save if options[:auto_save]
   end
 
@@ -77,7 +83,7 @@
   def save
     config_table_stripped = {}
     @entries.each do |key,value|
-      config_table_stripped[key] = value[:value]
+      config_table_stripped[key] = value[:value] unless deprecated?(key)
     end
 
     FileUtils.mkdir_p(File.dirname(file))
@@ -94,6 +100,8 @@
     content = read_config_file(file) || []
 
     content.each do |key, value|
+      next if deprecated?(key)
+
       begin
         set(key, value, :auto_save => false )
       rescue => e
@@ -129,4 +137,8 @@
   def unnormalize_key(key)
     key.gsub("_", "-")
   end
+
+  def deprecated?(key)
+    deprecated_entries.include?(key)
+  end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/deploy_task.rb new/lib/deploy_task.rb
--- old/lib/deploy_task.rb      2015-11-24 13:19:37.000000000 +0100
+++ new/lib/deploy_task.rb      2016-01-14 18:38:19.000000000 +0100
@@ -19,7 +19,7 @@
   def deploy(description, cloud_config, options = {})
     LocalSystem.validate_architecture("x86_64")
     LocalSystem.validate_existence_of_packages(["python-glanceclient", "kiwi", 
"kiwi-desc-vmxboot"])
-    LocalSystem.validate_build_compatibility(description)
+    description.validate_build_compatibility
 
     if !File.exists?(cloud_config)
       raise(Machinery::Errors::DeployFailed,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/exceptions.rb new/lib/exceptions.rb
--- old/lib/exceptions.rb       2015-11-24 13:19:37.000000000 +0100
+++ new/lib/exceptions.rb       2016-01-14 18:38:19.000000000 +0100
@@ -46,9 +46,15 @@
       end
 
       def to_s
-        "The system description '#{@name}' has an incompatible data " \
-        "format and can not be read.\n" \
-        "Try '#{Hint.program_name} upgrade-format #{name}' to upgrade it to 
the current version.\n"
+        if !@format_version
+          "#{@name}: incompatible format version. Can not be upgraded."
+        elsif @format_version < SystemDescription::CURRENT_FORMAT_VERSION
+          "#{@name}: format version #{@format_version}, needs to be upgraded. 
" \
+          "Try '#{Hint.program_name} upgrade-format #{name}' to upgrade it to 
the current version."
+        else
+          "#{@name}: format version #{@format_version}. " \
+            "Please upgrade Machinery to the latest version."
+        end
       end
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/export_task.rb new/lib/export_task.rb
--- old/lib/export_task.rb      2015-11-24 13:19:37.000000000 +0100
+++ new/lib/export_task.rb      2016-01-14 18:38:19.000000000 +0100
@@ -22,7 +22,6 @@
 
   def export(output_dir, options)
     @exporter.system_description.assert_scopes("os")
-    @exporter.system_description.validate_export_compatibility
 
     ["unmanaged_files", "changed_managed_files", "config_files"].each do 
|scope|
       if @exporter.system_description[scope] &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/helper.rb new/lib/helper.rb
--- old/lib/helper.rb   2015-11-24 13:19:37.000000000 +0100
+++ new/lib/helper.rb   2016-01-14 18:38:19.000000000 +0100
@@ -22,6 +22,10 @@
 
   def self.content_is_binary?(content)
     !Cheetah.run("file", "-b", "-", stdout: :capture, stdin: 
content).include?(" text")
+  # newer versions of file exit != 0 when some ELF files are sliced
+  # the file type is still provided besides the exit code
+  rescue Cheetah::ExecutionFailed => e
+    !e.stdout.include?(" text")
   end
 
   # Implementation of String#scrub for Ruby < 2.1. Assumes the string is in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/html.rb new/lib/html.rb
--- old/lib/html.rb     2015-11-24 13:19:37.000000000 +0100
+++ new/lib/html.rb     2016-01-14 18:38:19.000000000 +0100
@@ -19,29 +19,39 @@
   # Creates a new thread running a sinatra webserver which serves the local 
system descriptions
   # The Thread object is returned so that the caller can `.join` it until it's 
finished.
   def self.run_server(system_description_store, opts, &block)
+    if opts[:public] && opts[:ip]
+      raise RuntimeError.new("It's only possible to use either an IP address 
or the 'public' " \
+        "flag bot not both.")
+    end
+
     Thread.new do
-      Server.set :system_description_store, system_description_store
-      Server.set :port, opts[:port] || Machinery::Config.new.http_server_port
-      Server.set :bind, opts[:ip] || "localhost"
-      Server.set :public_folder, File.join(Machinery::ROOT, "html")
-      Server.set :static_cache_control, "no-cache"
+      if opts[:public]
+        opts[:ip] = "0.0.0.0"
 
-      if opts[:ip] != "localhost" && opts[:ip] != "127.0.0.1"
-        if opts[:ip] == "0.0.0.0"
-          Machinery::Ui.puts <<EOF
+        Machinery::Ui.warn <<-EOF.chomp
+Warning:
+The --public option makes the HTTP server listen on all configured IP 
addresses. Everyone who has access to one of those IP addresses can access all 
of your system descriptions stored in '~/.machinery'. Be careful if there are 
sensible information (such as private keys) stored in one of your descriptions.
+EOF
+      elsif opts[:ip] == "0.0.0.0"
+        Machinery::Ui.warn <<-EOF.chomp
 Warning:
-The server is listening on all configured IP addresses.
-This could lead to confidential data like passwords or private keys being 
readable by others.
+The server is listening on all configured IP addresses. Everyone who has 
access to one of those IP addresses can access all of your system descriptions 
stored in '~/.machinery'. Be careful if there are sensible information (such as 
private keys) stored in one of your descriptions.
 EOF
-        else
-          Machinery::Ui.puts <<EOF
+      elsif opts[:ip] && opts[:ip] != "localhost" && opts[:ip] != "127.0.0.1"
+        Machinery::Ui.warn <<-EOF.chomp
 Warning:
-You specified an IP address other than '127.0.0.1', your server may be 
reachable from the network.
-This could lead to confidential data like passwords or private keys being 
readable by others.
+You specified an IP address other than '127.0.0.1', your server may be 
reachable from the network. Everyone who can access that network can access 
your system descriptions stored in '~/.machinery'. Be careful if there are 
sensible information (such as private keys) stored in one of your descriptions.
 EOF
-        end
+      elsif !opts[:ip]
+        opts[:ip] = "127.0.0.1"
       end
 
+      Server.set :system_description_store, system_description_store
+      Server.set :port, opts[:port] || Machinery::Config.new.http_server_port
+      Server.set :bind, opts[:ip]
+      Server.set :public_folder, File.join(Machinery::ROOT, "html")
+      Server.set :static_cache_control, "no-cache"
+
       begin
         setup_output_redirection
         begin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/kiwi_config.rb new/lib/kiwi_config.rb
--- old/lib/kiwi_config.rb      2015-11-24 13:19:37.000000000 +0100
+++ new/lib/kiwi_config.rb      2016-01-14 18:38:19.000000000 +0100
@@ -181,26 +181,8 @@
 suseImportBuildKey
 suseConfig
 EOF
-    case @system_description.os
-    when OsOpenSuse13_2
-      boot = "vmxboot/suse-13.2"
-      bootloader = "grub2"
-    when OsOpenSuse13_1
-      boot = "vmxboot/suse-13.1"
-      bootloader = "grub2"
-    when OsSles12
-      boot = "vmxboot/suse-SLES12"
-      bootloader = "grub2"
-    when OsSles11
-      boot = "vmxboot/suse-SLES11"
-      bootloader = "grub"
-    when OsOpenSuseTumbleweed
-      boot = "vmxboot/suse-tumbleweed"
-      bootloader = "grub2"
-    when OsOpenSuseLeap
-      boot = "vmxboot/suse-leap42.1"
-      bootloader = "grub2"
-    else
+
+    unless @system_description.os.is_a?(OsSuse)
       raise Machinery::Errors::ExportFailed.new(
         "Export is not possible because the operating system " \
         "'#{@system_description.os.display_name}' is not supported."
@@ -218,8 +200,13 @@
         xml.preferences do
           xml.packagemanager "zypper"
           xml.version "0.0.1"
-          xml.type_(image: "vmx", filesystem: "ext3", installiso: "true",
-                   boot: boot, format: "qcow2", bootloader: bootloader)
+          xml.type_(
+            image: "vmx",
+            filesystem: "ext3",
+            installiso: "true",
+            boot: @system_description.os.kiwi_boot,
+            format: "qcow2", bootloader: @system_description.os.kiwi_bootloader
+          )
         end
 
         xml.users(group: "root") do
@@ -240,10 +227,9 @@
   end
 
   def apply_packages(xml)
-    build_filter = YAML.load_file(
+    filter = YAML.load_file(
       File.join(Machinery::ROOT, "filters", "filter-packages-for-build.yaml")
-    )
-    filter = build_filter[@system_description.os.canonical_name] || []
+    ) || []
 
     xml.packages(type: "bootstrap") do
       if @system_description.packages
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/list_task.rb new/lib/list_task.rb
--- old/lib/list_task.rb        2015-11-24 13:19:37.000000000 +0100
+++ new/lib/list_task.rb        2016-01-14 18:38:19.000000000 +0100
@@ -17,77 +17,100 @@
 
 class ListTask
   def list(store, system_descriptions, options = {})
-    if system_descriptions.empty?
-      descriptions = store.list
+    if options[:html]
+      list_html(store, options)
     else
-      descriptions = system_descriptions.sort
-    end
-    has_incompatible_version = false
+      if system_descriptions.empty?
+        descriptions = store.list
+      else
+        descriptions = system_descriptions.sort
+      end
+      has_incompatible_version = false
 
-    descriptions.each do |name|
-      begin
-        system_description = SystemDescription.load(name, store, 
skip_validation: true)
-      rescue Machinery::Errors::SystemDescriptionIncompatible => e
-        if !e.format_version
-          show_error("#{name}: incompatible format version. Can not be 
upgraded.\n", options)
-        elsif e.format_version < SystemDescription::CURRENT_FORMAT_VERSION
-          show_error("#{name}: format version #{e.format_version}, " \
-            "needs to be upgraded.", options)
-          has_incompatible_version = true
-        else
-          show_error("#{name}: format version #{e.format_version}. " \
-            "Please upgrade Machinery to the latest version.", options)
+      descriptions.each do |name|
+        begin
+          system_description = SystemDescription.load(name, store, 
skip_validation: true)
+        rescue Machinery::Errors::SystemDescriptionIncompatible => e
+          show_error("#{e}\n", options)
+          next
+        rescue Machinery::Errors::SystemDescriptionNotFound
+          show_error(
+            "#{name}: Couldn't find a system description with the name 
'#{name}'.", options
+          )
+          next
+        rescue Machinery::Errors::SystemDescriptionValidationFailed
+          show_error("#{name}: This description is broken. Use " \
+            "`#{Hint.program_name} validate #{name}` to see the error 
message.", options)
+          next
+        rescue Machinery::Errors::SystemDescriptionError
+          show_error("#{name}: This description is broken.", options)
+          next
         end
-        next
-      rescue Machinery::Errors::SystemDescriptionNotFound
-        show_error("#{name}: Couldn't find a system description with the name 
'#{name}'.", options)
-        next
-      rescue Machinery::Errors::SystemDescriptionValidationFailed
-        show_error("#{name}: This description is broken. Use " \
-          "`#{Hint.program_name} validate #{name}` to see the error message.", 
options)
-        next
-      rescue Machinery::Errors::SystemDescriptionError
-        show_error("#{name}: This description is broken.", options)
-        next
-      end
 
-      if options[:short]
-        Machinery::Ui.puts name
-      else
-        scopes = []
+        if options[:short]
+          Machinery::Ui.puts name
+        else
+          scopes = []
 
-        system_description.scopes.each do |scope|
-          entry = Machinery::Ui.internal_scope_list_to_string(scope)
-          if SystemDescription::EXTRACTABLE_SCOPES.include?(scope)
-            if system_description.scope_extracted?(scope)
-              entry += " (extracted)"
-            else
-              entry += " (not extracted)"
+          system_description.scopes.each do |scope|
+            entry = Machinery::Ui.internal_scope_list_to_string(scope)
+            if SystemDescription::EXTRACTABLE_SCOPES.include?(scope)
+              if system_description.scope_extracted?(scope)
+                entry += " (extracted)"
+              else
+                entry += " (not extracted)"
+              end
             end
-          end
 
-          if options[:verbose]
-            meta = system_description[scope].meta
-            if meta
-              time = Time.parse(meta.modified).getlocal
-              date = time.strftime "%Y-%m-%d %H:%M:%S"
-              hostname = meta.hostname
-            else
-              date = "unknown"
-              hostname = "Unknown hostname"
+            if options[:verbose]
+              meta = system_description[scope].meta
+              if meta
+                time = Time.parse(meta.modified).getlocal
+                date = time.strftime "%Y-%m-%d %H:%M:%S"
+                hostname = meta.hostname
+              else
+                date = "unknown"
+                hostname = "Unknown hostname"
+              end
+              entry += "\n      Host: [#{hostname}]"
+              entry += "\n      Date: (#{date})"
             end
-            entry += "\n      Host: [#{hostname}]"
-            entry += "\n      Date: (#{date})"
+
+            scopes << entry
           end
 
-          scopes << entry
+          Machinery::Ui.puts " #{name}:\n   * " + scopes .join("\n   * ") + 
"\n"
         end
-
-        Machinery::Ui.puts " #{name}:\n   * " + scopes .join("\n   * ") + "\n"
       end
+
+      Hint.print(:upgrade_system_description) if has_incompatible_version
     end
+  end
+
+  def list_html(store, options)
+    begin
+      LocalSystem.validate_existence_of_command("xdg-open", "xdg-utils")
+
+      url = "http://#{options[:ip]}:#{options[:port]}/";
+
+      Machinery::Ui.use_pager = false
+      Machinery::Ui.puts <<EOF
+Trying to start a web server for serving the descriptions on #{url}.
 
-    Hint.print(:upgrade_system_description) if has_incompatible_version
+The server can be closed with Ctrl+C.
+EOF
+
+      server = Html.run_server(store, port: options[:port], ip: options[:ip]) 
do
+        LoggedCheetah.run("xdg-open", url)
+      end
+
+      server.join # Wait until the user cancelled the blocking webserver
+    rescue Cheetah::ExecutionFailed => e
+      raise Machinery::Errors::OpenInBrowserFailed.new(
+        "Could not open system descriptions in the web browser.\n" \
+          "Error: #{e}\n"
+      )
+    end
   end
 
   private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/local_system.rb new/lib/local_system.rb
--- old/lib/local_system.rb     2015-11-24 13:19:37.000000000 +0100
+++ new/lib/local_system.rb     2016-01-14 18:38:19.000000000 +0100
@@ -77,34 +77,6 @@
       raise(Machinery::Errors::MissingRequirement.new(output))
     end
 
-    def validate_machinery_compatibility
-      return if !Machinery::Config.new.perform_support_check || 
os.can_run_machinery?
-
-      supported_oses = Os.supported_host_systems.map { |o| o.canonical_name 
}.sort.join(", ")
-      message = <<EOF
-You are running Machinery on a platform we do not explicitly support and test.
-It still could work very well. If you run into issues or would like to provide 
us feedback, you are welcome to file an issue at 
https://github.com/SUSE/machinery/issues/new or write an email to 
[email protected].
-Officially supported operating systems are: '#{supported_oses}'
-
-To disable this message in the machinery configuration use 'machinery config 
perform-support-check=false'
-EOF
-
-      Machinery::Ui.warn message
-    end
-
-    def validate_build_compatibility(system_description)
-      if !os.can_build?(system_description.os)
-        message = "Building '#{system_description.os.display_name}' is " \
-          "not supported on this distribution.\n" \
-          "Check the 'BUILD SUPPORT MATRIX' by running `#{Hint.program_name} 
build --help` for " \
-          "further information which build targets are supported.\n" \
-          "You are only able to build the architecture you are running " \
-          "(#{LocalSystem.os.architecture})."
-
-        raise(Machinery::Errors::BuildFailed.new(message))
-      end
-    end
-
     def matches_architecture?(arch)
       os.architecture == arch
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/serve_html_task.rb new/lib/serve_html_task.rb
--- old/lib/serve_html_task.rb  2015-11-24 13:19:37.000000000 +0100
+++ new/lib/serve_html_task.rb  2016-01-14 18:38:19.000000000 +0100
@@ -16,17 +16,24 @@
 # you may find current contact information at www.suse.com
 
 class ServeHtmlTask
-  def serve(description, ip, port)
-    url = "http://#{ip}:#{port}/#{CGI.escape(description.name)}"
-
+  def serve(system_description_store, opts)
+    url = "http://127.0.0.1:#{opts[:port]}/";
     Machinery::Ui.use_pager = false
     Machinery::Ui.puts <<EOF
-Trying to start a web server for the description on #{url}
+Trying to start a web server for serving a view on all system descriptions.
+
+The overview of all descriptions is accessible at:
+
+    #{url}
+
+A specific descriptions with the name NAME is accessible at:
+
+    #{url}NAME
 
 The web server can be closed with Ctrl+C.
 EOF
 
-    server = Html.run_server(description.store, port: port, ip: ip)
+    server = Html.run_server(system_description_store, port: opts[:port], 
public: opts[:public])
 
     server.join
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/server.rb new/lib/server.rb
--- old/lib/server.rb   2015-11-24 13:19:37.000000000 +0100
+++ new/lib/server.rb   2016-01-14 18:38:19.000000000 +0100
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 # Copyright (c) 2013-2015 SUSE LLC
 #
 # This program is free software; you can redistribute it and/or
@@ -214,6 +215,41 @@
     content
   end
 
+  get "/" do
+    descriptions = settings.system_description_store.list
+    @all_descriptions = Hash.new
+
+    descriptions.each do |name|
+      scopes = []
+      begin
+        system_description = SystemDescription.load(
+          name, settings.system_description_store, skip_validation: true
+        )
+        @all_descriptions[name] = Hash.new
+        @all_descriptions[name]["date"] = system_description.latest_update
+        @all_descriptions[name]["host"] = system_description.host
+        system_description.scopes.each do |scope|
+          entry = Machinery::Ui.internal_scope_list_to_string(scope)
+          if SystemDescription::EXTRACTABLE_SCOPES.include?(scope)
+            if system_description.scope_extracted?(scope)
+              entry += " (extracted)"
+            else
+              entry += " (not extracted)"
+            end
+          end
+          scopes << entry
+        end
+        @all_descriptions[name]["scopes"] = scopes
+      rescue Machinery::Errors::SystemDescriptionIncompatible,
+             Machinery::Errors::SystemDescriptionError => e
+        @errors ||= Array.new
+        @errors.push(e)
+      end
+    end
+
+    haml File.read(File.join(Machinery::ROOT, "html/landing_page.html.haml"))
+  end
+
   get "/compare/:a/:b" do
     @description_a = SystemDescription.load(params[:a], 
settings.system_description_store)
     @description_b = SystemDescription.load(params[:b], 
settings.system_description_store)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/system_description.rb 
new/lib/system_description.rb
--- old/lib/system_description.rb       2015-11-24 13:19:37.000000000 +0100
+++ new/lib/system_description.rb       2016-01-14 18:38:19.000000000 +0100
@@ -154,16 +154,21 @@
   end
 
   def validate_analysis_compatibility
-    if !os.can_be_analyzed?
-      raise Machinery::Errors::AnalysisFailed.new("Analysis of operating " +
-        "system '#{os.display_name}' is not supported.")
+    Zypper.isolated(arch: os.architecture) do |zypper|
+      major, minor, patch = zypper.version
+      if major <= 1 && minor <= 11 && patch < 4
+        raise Machinery::Errors::AnalysisFailed.new("Analyzing command 
requires zypper 1.11.4 " \
+          "or grater to be installed.")
+      end
     end
   end
 
-  def validate_export_compatibility
-    if !os.can_be_exported?
-      raise Machinery::Errors::ExportFailed.new("Export of operating " +
-        "system '#{os.display_name}' is not supported.")
+  def validate_build_compatibility
+    kiwi_template_path = "/usr/share/kiwi/image/#{os.kiwi_boot}"
+    unless Dir.exist?(kiwi_template_path)
+      raise Machinery::Errors::BuildFailed.new("The execution of the build 
script failed. " \
+        "Building of operating system '#{os.display_name}' can't be 
accomplished because the " \
+        "kiwi template file in `#{kiwi_template_path}` does not exist.")
     end
   end
 
@@ -265,6 +270,16 @@
     end
   end
 
+  def latest_update
+    attributes.keys.map { |scope| self[scope].meta.try(:[], "modified") }
+      .compact.map { |t| Time.parse(t) }.sort.last
+  end
+
+  def host
+    all_hosts = attributes.keys.map { |scope| self[scope].meta.try(:[], 
"hostname") }
+    all_hosts.uniq.compact
+  end
+
   def description_path
     @store.description_path(name)
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/version.rb new/lib/version.rb
--- old/lib/version.rb  2015-11-24 13:19:37.000000000 +0100
+++ new/lib/version.rb  2016-01-14 18:38:19.000000000 +0100
@@ -17,6 +17,6 @@
 
 module Machinery
 
-  VERSION = "1.16.2"
+  VERSION = "1.16.4"
 
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/zypper.rb new/lib/zypper.rb
--- old/lib/zypper.rb   2015-11-24 13:19:37.000000000 +0100
+++ new/lib/zypper.rb   2016-01-14 18:38:19.000000000 +0100
@@ -80,6 +80,12 @@
     xml.xpath("//localfile/@path").to_s
   end
 
+  def version
+    version = call_zypper "--version", stdout: :capture
+    found = version.match(/zypper (\d+)\.(\d+)\.(\d+)/)
+    [found[1].to_i, found[2].to_i, found[3].to_i] if found
+  end
+
   private
 
   def call_zypper(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/machinery-helper/version.go 
new/machinery-helper/version.go
--- old/machinery-helper/version.go     2015-11-24 13:19:37.000000000 +0100
+++ new/machinery-helper/version.go     2016-01-14 18:38:19.000000000 +0100
@@ -2,4 +2,4 @@
 
 package main
 
-const VERSION = "4afb989b21b401f983686603e6521c112630cac9"
+const VERSION = "493384074f90a69256c6fa174a1e1e05ae5ce219"
Files old/man/generated/machinery.1.gz and new/man/generated/machinery.1.gz 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/man/generated/machinery.1.html 
new/man/generated/machinery.1.html
--- old/man/generated/machinery.1.html  2015-11-24 13:19:37.000000000 +0100
+++ new/man/generated/machinery.1.html  2016-01-14 18:38:19.000000000 +0100
@@ -72,7 +72,7 @@
     <a href="#man-Shows-Man-Page">man — Shows Man Page</a>
     <a href="#move-Move-System-Description">move — Move System Description</a>
     <a href="#remove-Remove-System-Descriptions">remove — Remove System 
Descriptions</a>
-    <a href="#serve-Serve-A-System-Description-Using-A-Web-Server">serve — 
Serve A System Description Using A Web Server</a>
+    <a href="#serve-Serve-System-Descriptions-Using-A-Web-Server">serve — 
Serve System Descriptions Using A Web Server</a>
     <a href="#show-Show-System-Description">show — Show System Description</a>
     <a href="#upgrade-format-Upgrade-System-Description">upgrade-format — 
Upgrade System Description</a>
     <a href="#validate-Validate-System-Description">validate — Validate System 
Description</a>
@@ -493,19 +493,16 @@
 <h3 id="PREREQUISITES">PREREQUISITES</h3>
 
 <ul>
-<li><p>The <code>build</code> command requires the packages <code>kiwi</code> 
and <code>kiwi-desc-vmbxoot</code>.</p></li>
+<li><p>The <code>build</code> command requires the packages <code>kiwi</code> 
and <code>kiwi-desc-vmxboot</code>.</p></li>
+<li><p>The necessary vmxboot template for the machinery being built must be
+installed (i.e. if you want to build an openSUSE Leap machine then the
+template <code>/usr/share/kiwi/image/vmxboot/suse-leap42.1</code> is 
required)</p></li>
 <li><p>All repositories in the system description must be accessible from the
 build machine on which <code>machinery build</code> is called.</p></li>
+<li><p>Machinery can only build x86_64 images on x86_64 systems at the 
moment.</p></li>
 </ul>
 
 
-<h3 id="BUILD-SUPPORT-MATRIX">BUILD SUPPORT MATRIX</h3>
-
-<p>Machinery only supports building x86_64 images on x86_64 systems.</p>
-
-<p>To see the list of supported combinations of build hosts and targets run
-<code>machinery build --help</code>.</p>
-
 <h3 id="EXAMPLES">EXAMPLES</h3>
 
 <ul>
@@ -1040,8 +1037,7 @@
 
 <h3 id="SYNOPSIS">SYNOPSIS</h3>
 
-<p><code>machinery list</code>
-    [NAME[,NAME2[,NAME3]]]</p>
+<p><code>machinery list</code> [OPTIONS] [NAME[,NAME2[,NAME3]]]</p>
 
 <p><code>machinery</code> help list</p>
 
@@ -1058,6 +1054,8 @@
 <dt><code>--verbose</code> (optional)</dt><dd>Print additional information 
about the origin of scopes.
 Currently displays [HOSTNAME] and (DATE).</dd>
 <dt><code>--short</code> (optional)</dt><dd>List only descripton names.</dd>
+<dt><code>--html</code> (optional)</dt><dd>Run a web server and open the list 
of system descriptions in HTML format in
+your web browser using the <code>xdg-open</code> command.</dd>
 </dl>
 
 
@@ -1076,6 +1074,9 @@
 <dt>Lists all available system description names without any additional 
details:</dt><dd><p></p>
 
 <p>$ <code>machinery</code> list --short</p></dd>
+<dt>Opens HTML view of list of all available system descriptions in web 
browser:</dt><dd><p></p>
+
+<p>$ <code>machinery</code> list --html</p></dd>
 </dl>
 
 
@@ -1162,32 +1163,30 @@
 </dl>
 
 
-<h2 id="serve-Serve-A-System-Description-Using-A-Web-Server">serve — Serve A 
System Description Using A Web Server</h2>
+<h2 id="serve-Serve-System-Descriptions-Using-A-Web-Server">serve — Serve 
System Descriptions Using A Web Server</h2>
 
 <h3 id="SYNOPSIS">SYNOPSIS</h3>
 
-<p><code>machinery serve</code> [-p PORT | --port=PORT] [--public] NAME</p>
+<p><code>machinery serve</code> [-p PORT | --port=PORT] [--public]</p>
 
 <p><code>machinery</code> help serve</p>
 
 <h3 id="DESCRIPTION">DESCRIPTION</h3>
 
-<p>The <code>serve</code> command spawns a web server and serves a stored 
system description on
-it.
-By default the description is available from http://127.0.0.1:7585 but both the
-IP address and the port can be configured using the according options.</p>
-
-<h3 id="ARGUMENTS">ARGUMENTS</h3>
+<p>The <code>serve</code> command spawns a web server to view system 
descriptions as an HTML
+view.</p>
 
-<dl>
-<dt><code>NAME</code> (required)</dt><dd>Use specified system description.</dd>
-</dl>
+<p>By default the server is available from http://127.0.0.1:7585 but both the
+IP address and the port can be configured using the according options.</p>
 
+<p>Specific descriptions are available from http://127.0.0.1:7585/NAME, where 
NAME
+is the name of the system description. If no name is specified in the URL an
+overview of all descriptions is served.</p>
 
 <h3 id="OPTIONS">OPTIONS</h3>
 
 <dl>
-<dt><code>-p PORT</code>, <code>--port=PORT</code> 
(optional)</dt><dd><p>Specify the port on which the web server will serve the 
system description: Default: 7585</p>
+<dt><code>-p PORT</code>, <code>--port=PORT</code> 
(optional)</dt><dd><p>Specify the port on which the web server will serve the 
HTML view: Default: 7585</p>
 
 <p>Ports can be selected in a range between 2-65535. Ports between 2 and 1023 
can only be
 chosen when <code>machinery</code> will be executed as <code>root</code> 
user.</p></dd>
@@ -1199,12 +1198,12 @@
 <h3 id="EXAMPLES">EXAMPLES</h3>
 
 <dl>
-<dt>Serve the system description taken from the last inspection, saved as 
<code>earth</code>:</dt><dd><p></p>
+<dt>Start the server with default options:</dt><dd><p></p>
 
-<p>$ <code>machinery</code> serve earth</p></dd>
-<dt>Make the system description available to other machines on the network on 
port 3000:</dt><dd><p></p>
+<p>$ <code>machinery</code> serve</p></dd>
+<dt>Make the server available to other machines on the network on port 
3000:</dt><dd><p></p>
 
-<p>$ <code>machinery</code> serve earth --public --port 3000</p></dd>
+<p>$ <code>machinery</code> serve --public --port 3000</p></dd>
 </dl>
 
 
@@ -1380,7 +1379,7 @@
 
   <ol class='man-decor man-foot man foot'>
     <li class='tl'></li>
-    <li class='tc'>November 2015</li>
+    <li class='tc'>January 2016</li>
     <li class='tr'>machinery(1)</li>
   </ol>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2015-11-24 13:19:37.000000000 +0100
+++ new/metadata        2016-01-14 18:38:19.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: machinery-tool
 version: !ruby/object:Gem::Version
-  version: 1.16.2
+  version: 1.16.4
 platform: ruby
 authors:
 - SUSE
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2015-11-24 00:00:00.000000000 Z
+date: 2016-01-14 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: cheetah
@@ -16,56 +16,56 @@
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.4.0
+        version: '0.4'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.4.0
+        version: '0.4'
 - !ruby/object:Gem::Dependency
   name: json
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.8.0
+        version: '1.8'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.8.0
+        version: '1.8'
 - !ruby/object:Gem::Dependency
   name: abstract_method
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.2.1
+        version: '1.2'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.2.1
+        version: '1.2'
 - !ruby/object:Gem::Dependency
   name: nokogiri
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.6.3
+        version: '1.6'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.6.3
+        version: '1.6'
 - !ruby/object:Gem::Dependency
   name: gli
   requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.0.5
+        version: '4.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 4.0.5
+        version: '4.0'
 - !ruby/object:Gem::Dependency
   name: kramdown
   requirement: !ruby/object:Gem::Requirement
@@ -142,42 +142,42 @@
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.4.6
+        version: '1.4'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 1.4.6
+        version: '1.4'
 - !ruby/object:Gem::Dependency
   name: mimemagic
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.3.0
+        version: '0.3'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 0.3.0
+        version: '0.3'
 - !ruby/object:Gem::Dependency
   name: diffy
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.0.7
+        version: '3.0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: 3.0.7
+        version: '3.0'
 - !ruby/object:Gem::Dependency
   name: ronn
   requirement: !ruby/object:Gem::Requirement
@@ -254,6 +254,7 @@
 - html/assets/file_loader.gif
 - html/assets/jquery-2.1.1.min.js
 - html/assets/jquery.searcher.min.js
+- html/assets/landing_page/landing_page.js
 - html/assets/machinery-base.css
 - html/assets/machinery-base.js
 - html/assets/machinery.css
@@ -264,6 +265,7 @@
 - html/assets/wheels_horizontal.png
 - html/comparison.html.haml
 - html/index.html.haml
+- html/landing_page.html.haml
 - html/partials/changed_managed_files.html.haml
 - html/partials/compare/alert.html.haml
 - html/partials/compare/changed_managed_file_list.html.haml
@@ -290,6 +292,7 @@
 - html/partials/compare/users.html.haml
 - html/partials/config_files.html.haml
 - html/partials/groups.html.haml
+- html/partials/landing_page/alert.html.haml
 - html/partials/os.html.haml
 - html/partials/packages.html.haml
 - html/partials/patterns.html.haml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plugins/os/os_model.rb new/plugins/os/os_model.rb
--- old/plugins/os/os_model.rb  2015-11-24 13:19:37.000000000 +0100
+++ new/plugins/os/os_model.rb  2016-01-14 18:38:19.000000000 +0100
@@ -36,6 +36,11 @@
         return os
       end
     end
+    if os_name.match(/SUSE Linux|openSUSE/)
+      os = OsSuse.new
+      os.name = os_name
+      return os
+    end
     os = OsUnknown.new
     os.name = os_name
     os
@@ -51,10 +56,6 @@
     "os"
   end
 
-  def self.buildable_systems
-    []
-  end
-
   def self.module_dependencies
     {}
   end
@@ -71,18 +72,6 @@
     self.class.can_run_machinery?
   end
 
-  def can_build?(os)
-    self.class.buildable_systems.include?(os.class) && os.architecture == 
"x86_64"
-  end
-
-  def can_be_analyzed?
-    false
-  end
-
-  def can_be_exported?
-    false
-  end
-
   def module_required_by_package(package)
     self.class.module_dependencies[package]
   end
@@ -100,19 +89,28 @@
   def self.canonical_name
     "Unknown OS"
   end
-
-  def self.can_run_machinery?
-    false
-  end
 end
 
 class OsSuse < Os
-  def can_be_analyzed?
-    true
+  def self.canonical_name
+    "SUSE OS"
   end
 
-  def can_be_exported?
-    true
+  def kiwi_bootloader
+    "grub2"
+  end
+
+  def kiwi_boot
+    os_version = version.match(/(\d+)+\.?(\d+)?/)
+    os_id = case name
+            when /SUSE Linux Enterprise Server/
+              "SLES#{os_version[1]}"
+            when /SUSE Linux Enterprise Desktop/
+              "SLED#{os_version[1]}"
+            when /openSUSE/
+              "#{os_version[1]}.#{os_version[2]}"
+    end
+    "vmxboot/suse-#{os_id}"
   end
 end
 
@@ -130,6 +128,10 @@
     sp = $1
     "#{name} #{sp} (#{architecture})"
   end
+
+  def kiwi_bootloader
+    "grub"
+  end
 end
 
 class OsSles12 < OsSuse
@@ -137,10 +139,6 @@
     "SUSE Linux Enterprise Server 12"
   end
 
-  def self.buildable_systems
-    [OsSles12]
-  end
-
   def self.module_dependencies
     { "python-glanceclient" => "Public Cloud Module" }
   end
@@ -162,20 +160,12 @@
   def self.canonical_name
     "openSUSE 13.1 (Bottle)"
   end
-
-  def self.buildable_systems
-    [OsSles11, OsOpenSuse13_1]
-  end
 end
 
 class OsOpenSuse13_2 < OsOpenSuse
   def self.canonical_name
     "openSUSE 13.2 (Harlequin)"
   end
-
-  def self.buildable_systems
-    [OsSles11, OsOpenSuse13_1, OsOpenSuse13_2]
-  end
 end
 
 class OsOpenSuseTumbleweed < OsSuse
@@ -187,8 +177,8 @@
     "openSUSE Tumbleweed"
   end
 
-  def self.buildable_systems
-    [OsOpenSuse13_2, OsOpenSuseTumbleweed, OsOpenSuseLeap]
+  def kiwi_boot
+    "vmxboot/suse-tumbleweed"
   end
 end
 
@@ -201,8 +191,8 @@
     "openSUSE Leap"
   end
 
-  def self.buildable_systems
-    [OsOpenSuse13_1, OsOpenSuse13_2, OsOpenSuseLeap, OsOpenSuseTumbleweed, 
OsSles12, OsSles11]
+  def kiwi_boot
+    "vmxboot/suse-leap42.1"
   end
 end
 
@@ -210,8 +200,4 @@
   def self.canonical_name
     "Red Hat Enterprise Linux Server"
   end
-
-  def self.can_run_machinery?
-    false
-  end
 end


Reply via email to