commit machinery for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
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 - thardeck@suse.de + +- 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 - thardeck@suse.de + +- 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 - thardeck@suse.de + +* 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 - thardeck@suse.de + +* 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 - thardeck@suse.de * 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 - thardeck@suse.de 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 machinery@lists.suse.com. -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
participants (1)
-
root@hilbert.suse.de