machinery-tool 1.22.1 → 1.22.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.git_revision +1 -1
  3. data/NEWS +10 -0
  4. data/bin/machinery +1 -1
  5. data/lib/analyze_changed_config_files_diffs_task.rb +6 -6
  6. data/lib/autoyast.rb +2 -2
  7. data/lib/build_task.rb +10 -7
  8. data/lib/cli.rb +1005 -801
  9. data/lib/compare_task.rb +11 -7
  10. data/lib/comparison.rb +2 -2
  11. data/lib/config_base.rb +1 -1
  12. data/lib/config_task.rb +1 -1
  13. data/lib/containerize_task.rb +3 -3
  14. data/lib/containerized_app.rb +1 -1
  15. data/lib/copy_task.rb +1 -1
  16. data/lib/current_user.rb +1 -1
  17. data/lib/deploy_task.rb +6 -4
  18. data/lib/diff_widget.rb +67 -63
  19. data/lib/docker_system.rb +12 -8
  20. data/lib/dpkg_database.rb +1 -1
  21. data/lib/element_filter.rb +7 -4
  22. data/lib/exceptions.rb +23 -5
  23. data/lib/export_task.rb +1 -1
  24. data/lib/exporter.rb +1 -1
  25. data/lib/file_diff.rb +1 -1
  26. data/lib/file_scope.rb +1 -1
  27. data/lib/file_validator.rb +7 -4
  28. data/lib/filter.rb +97 -93
  29. data/lib/filter_option_parser.rb +2 -2
  30. data/lib/hint.rb +64 -59
  31. data/lib/html.rb +1 -1
  32. data/lib/inspect_task.rb +12 -12
  33. data/lib/inspector.rb +3 -3
  34. data/lib/json_validation_error_cleaner.rb +1 -1
  35. data/lib/json_validator.rb +4 -4
  36. data/lib/kiwi_config.rb +8 -4
  37. data/lib/list_task.rb +10 -9
  38. data/lib/local_system.rb +11 -5
  39. data/lib/logged_cheetah.rb +1 -1
  40. data/lib/man_task.rb +10 -6
  41. data/lib/managed_files_database.rb +1 -1
  42. data/lib/manifest.rb +5 -5
  43. data/lib/migration.rb +16 -10
  44. data/lib/mountpoints.rb +1 -1
  45. data/lib/move_task.rb +1 -1
  46. data/lib/remote_system.rb +7 -7
  47. data/lib/remove_task.rb +1 -1
  48. data/lib/renderer.rb +177 -172
  49. data/lib/rpm.rb +4 -4
  50. data/lib/rpm_database.rb +1 -1
  51. data/lib/scope.rb +2 -2
  52. data/lib/scope_file_access_archive.rb +1 -1
  53. data/lib/scope_file_access_flat.rb +1 -1
  54. data/lib/scope_file_store.rb +1 -1
  55. data/lib/serve_html_task.rb +6 -2
  56. data/lib/server.rb +19 -12
  57. data/lib/show_task.rb +10 -6
  58. data/lib/static_html.rb +1 -1
  59. data/lib/system.rb +10 -10
  60. data/lib/system_description.rb +14 -13
  61. data/lib/system_description_memory_store.rb +1 -1
  62. data/lib/system_description_store.rb +9 -9
  63. data/lib/tarball.rb +8 -2
  64. data/lib/upgrade_format_task.rb +11 -6
  65. data/lib/validate_task.rb +2 -2
  66. data/lib/version.rb +1 -1
  67. data/lib/workload_mapper.rb +2 -2
  68. data/lib/workload_mapper_dsl.rb +1 -1
  69. data/lib/zypper.rb +40 -17
  70. data/machinery-helper/machinery_helper.go +35 -16
  71. data/machinery-helper/version.go +1 -1
  72. data/man/generated/machinery.1.gz +0 -0
  73. data/manual/site/sitemap.xml +24 -24
  74. data/plugins/changed_config_files/changed_config_files_inspector.rb +59 -56
  75. data/plugins/changed_config_files/changed_config_files_model.rb +23 -21
  76. data/plugins/changed_config_files/changed_config_files_renderer.rb +56 -52
  77. data/plugins/changed_managed_files/changed_managed_files_inspector.rb +52 -50
  78. data/plugins/changed_managed_files/changed_managed_files_model.rb +23 -21
  79. data/plugins/changed_managed_files/changed_managed_files_renderer.rb +43 -39
  80. data/plugins/environment/environment_inspector.rb +25 -23
  81. data/plugins/environment/environment_model.rb +5 -3
  82. data/plugins/groups/groups_inspector.rb +30 -28
  83. data/plugins/groups/groups_model.rb +18 -17
  84. data/plugins/groups/groups_renderer.rb +29 -25
  85. data/plugins/os/os_inspector.rb +120 -118
  86. data/plugins/os/os_model.rb +139 -134
  87. data/plugins/os/os_renderer.rb +13 -9
  88. data/plugins/packages/packages_inspector.rb +99 -86
  89. data/plugins/packages/packages_model.rb +35 -34
  90. data/plugins/packages/packages_renderer.rb +47 -39
  91. data/plugins/patterns/patterns_inspector.rb +70 -68
  92. data/plugins/patterns/patterns_model.rb +19 -18
  93. data/plugins/patterns/patterns_renderer.rb +36 -32
  94. data/plugins/repositories/repositories_inspector.rb +162 -156
  95. data/plugins/repositories/repositories_model.rb +50 -49
  96. data/plugins/repositories/repositories_renderer.rb +48 -44
  97. data/plugins/repositories/schema/system-description-repositories.schema-v10.json +0 -1
  98. data/plugins/services/services_inspector.rb +187 -176
  99. data/plugins/services/services_model.rb +37 -36
  100. data/plugins/services/services_renderer.rb +28 -24
  101. data/plugins/unmanaged_files/unmanaged_files_inspector.rb +102 -99
  102. data/plugins/unmanaged_files/unmanaged_files_model.rb +64 -56
  103. data/plugins/unmanaged_files/unmanaged_files_renderer.rb +44 -40
  104. data/plugins/users/users_inspector.rb +67 -65
  105. data/plugins/users/users_model.rb +37 -36
  106. data/plugins/users/users_renderer.rb +31 -27
  107. data/schema/migrations/migrate1to2.rb +1 -1
  108. data/schema/migrations/migrate2to3.rb +1 -1
  109. data/schema/migrations/migrate3to4.rb +1 -1
  110. data/schema/migrations/migrate4to5.rb +1 -1
  111. data/schema/migrations/migrate5to6.rb +1 -1
  112. data/schema/migrations/migrate6to7.rb +1 -1
  113. data/schema/migrations/migrate7to8.rb +1 -1
  114. data/schema/migrations/migrate8to9.rb +1 -1
  115. data/schema/migrations/migrate9to10.rb +1 -1
  116. metadata +2 -2
data/lib/tarball.rb CHANGED
@@ -16,13 +16,19 @@
16
16
  # you may find current contact information at www.suse.com
17
17
 
18
18
  # Represents a tarball, possibly gzipped.
19
- class Tarball
19
+ class Machinery::Tarball
20
20
  def initialize(file)
21
21
  @file = file
22
22
  end
23
23
 
24
24
  def list
25
- output = LoggedCheetah.run("tar", "tvf", @file, "--quoting-style=literal", stdout: :capture)
25
+ output = Machinery::LoggedCheetah.run(
26
+ "tar",
27
+ "tvf",
28
+ @file,
29
+ "--quoting-style=literal",
30
+ stdout: :capture
31
+ )
26
32
 
27
33
  output.lines.map do |line|
28
34
  mode, user_and_group, size, _date, _time, rest = line.split(" ", 6)
@@ -15,7 +15,7 @@
15
15
  # To contact SUSE about this file by physical or electronic mail,
16
16
  # you may find current contact information at www.suse.com
17
17
 
18
- class UpgradeFormatTask
18
+ class Machinery::UpgradeFormatTask
19
19
  def upgrade(store, name, options = {})
20
20
  if !options[:all] && !store.list.include?(name)
21
21
  raise Machinery::Errors::SystemDescriptionNotFound.new(
@@ -34,15 +34,20 @@ class UpgradeFormatTask
34
34
 
35
35
  descriptions.each do |description|
36
36
  begin
37
- hash = Manifest.load(description, store.manifest_path(description)).to_hash
37
+ hash = Machinery::Manifest.load(description, store.manifest_path(description)).to_hash
38
38
  Machinery.logger.info "Upgrading description '#{description}'"
39
39
  Machinery::Ui.print "Reading '#{description}' ... "
40
- migrated = Migration.migrate_description(store, description, force: options[:force])
40
+ migrated = Machinery::Migration.migrate_description(
41
+ store,
42
+ description,
43
+ force: options[:force]
44
+ )
41
45
 
42
46
  if migrated
43
47
  migrations_done += 1
44
- Machinery::Ui.puts "Successfully upgraded from version" \
45
- " #{hash["meta"]["format_version"]} to #{SystemDescription::CURRENT_FORMAT_VERSION}."
48
+ Machinery::Ui.puts "Successfully upgraded from version"\
49
+ " #{hash["meta"]["format_version"]}"\
50
+ " to #{Machinery::SystemDescription::CURRENT_FORMAT_VERSION}."
46
51
  end
47
52
  rescue StandardError => e
48
53
  errors.push("Upgrading description '#{description}' failed:\n#{e}")
@@ -53,7 +58,7 @@ class UpgradeFormatTask
53
58
  unless errors.empty?
54
59
  Machinery.logger.error errors.join("\n")
55
60
  exception = Machinery::Errors::UpgradeFailed.new("\n" + errors.join("\n") +
56
- Hint.to_string(:upgrade_format_force, name: name || "--all"))
61
+ Machinery::Ui::Hint.to_string(:upgrade_format_force, name: name || "--all"))
57
62
  raise exception
58
63
  end
59
64
 
data/lib/validate_task.rb CHANGED
@@ -15,9 +15,9 @@
15
15
  # To contact SUSE about this file by physical or electronic mail,
16
16
  # you may find current contact information at www.suse.com
17
17
 
18
- class ValidateTask
18
+ class Machinery::ValidateTask
19
19
  def validate(store, name)
20
- SystemDescription.load!(name, store)
20
+ Machinery::SystemDescription.load!(name, store)
21
21
  Machinery::Ui.puts "Validation succeeded."
22
22
  rescue
23
23
  Machinery::Ui.puts "Validation failed."
data/lib/version.rb CHANGED
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Machinery
19
19
 
20
- VERSION = "1.22.1"
20
+ VERSION = "1.22.2"
21
21
 
22
22
  end
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # To contact SUSE about this file by physical or electronic mail,
16
16
  # you may find current contact information at www.suse.com
17
- class WorkloadMapper
17
+ class Machinery::WorkloadMapper
18
18
  def save(workloads, path)
19
19
  workloads.each do |workload, config|
20
20
  FileUtils.mkdir_p(File.join(path, workload))
@@ -75,7 +75,7 @@ class WorkloadMapper
75
75
  workloads = {}
76
76
 
77
77
  Dir["#{File.expand_path(workload_mapper_path)}/*"].each do |workload_dir|
78
- mapper = WorkloadMapperDSL.new(system_description)
78
+ mapper = Machinery::WorkloadMapperDSL.new(system_description)
79
79
  workload = mapper.check_clue(File.read(File.join(workload_dir, "clue.rb")))
80
80
  workloads.merge!(workload.to_h)
81
81
  end
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # To contact SUSE about this file by physical or electronic mail,
16
16
  # you may find current contact information at www.suse.com
17
- class WorkloadMapperDSL
17
+ class Machinery::WorkloadMapperDSL
18
18
  attr_reader :system, :name, :service, :parameters, :data
19
19
 
20
20
  def initialize(system)
data/lib/zypper.rb CHANGED
@@ -21,33 +21,44 @@
21
21
  # for running zypper in an isolated environment using 'Zypper.isolated'.
22
22
  # That way Machinery can safely add repositories and download packages without
23
23
  # polluting the host.
24
- class Zypper
24
+ class Machinery::Zypper
25
25
  attr_accessor :zypper_options
26
26
  attr_accessor :zypp_config
27
+ attr_accessor :zypp_base
27
28
 
28
29
  class <<self
29
30
  def isolated(options = {}, &block)
30
- Dir.mktmpdir("machinery_zypper") do |zypper_base|
31
- zypper = Zypper.new
31
+ zypper = Machinery::Zypper.new
32
+ zypper.zypp_base = Dir.mktmpdir("machinery_zypper")
32
33
 
33
- zypper.zypper_options = [
34
- "--non-interactive",
35
- "--no-gpg-checks",
36
- "--root", zypper_base
37
- ]
34
+ zypper.zypper_options = [
35
+ "--non-interactive",
36
+ "--no-gpg-checks",
37
+ "--root", zypper.zypp_base
38
+ ]
38
39
 
39
- if options[:arch]
40
- zypper.zypp_config = create_zypp_config(zypper_base, options[:arch])
41
- end
42
-
43
- block.call(zypper)
40
+ if options[:arch]
41
+ zypper.zypp_config = create_zypp_config(zypper.zypp_base, options[:arch])
44
42
  end
43
+
44
+ block.call(zypper)
45
+ ensure
46
+ clean_up(zypper)
45
47
  end
46
48
 
47
49
  private
48
50
 
49
- def create_zypp_config(base_path, arch)
50
- zypp_dir = File.join(base_path, "/etc/zypp")
51
+ def clean_up(zypper)
52
+ unless zypper.zypp_base =~ /^\/tmp\/machinery_zypper/
53
+ raise("The zypper base directory is not inside of '/tmp'. Aborting...")
54
+ end
55
+ cmd = ["rm", "-rf", zypper.zypp_base]
56
+ cmd = cmd.insert(0, "sudo") if zypper.contains_mountable_repos?
57
+ Machinery::LoggedCheetah.run(*cmd)
58
+ end
59
+
60
+ def create_zypp_config(zypp_base, arch)
61
+ zypp_dir = File.join(zypp_base, "/etc/zypp")
51
62
  zypp_config = File.join(zypp_dir, "zypp.conf")
52
63
 
53
64
  FileUtils.mkdir_p(zypp_dir)
@@ -70,7 +81,7 @@ class Zypper
70
81
  end
71
82
 
72
83
  def refresh
73
- call_zypper "refresh"
84
+ call_zypper "refresh", sudo: contains_mountable_repos?
74
85
  end
75
86
 
76
87
  def download_package(package)
@@ -86,15 +97,27 @@ class Zypper
86
97
  [found[1].to_i, found[2].to_i, found[3].to_i] if found
87
98
  end
88
99
 
100
+ def contains_mountable_repos?
101
+ files = Dir.glob(File.join(@zypp_base, "etc/zypp/repos.d", "*"))
102
+ files.any? do |file|
103
+ File.readlines(file).any? do |line|
104
+ line.start_with?("baseurl=nfs://", "baseurl=nfs4://", "baseurl=smb://", "baseurl=cifs://")
105
+ end
106
+ end
107
+ end
108
+
89
109
  private
90
110
 
91
111
  def call_zypper(*args)
112
+ sudo = args.last.delete(:sudo) if args.last.is_a?(Hash)
113
+
92
114
  cmd = ["zypper"]
115
+ cmd.unshift("sudo") if sudo
93
116
  cmd += @zypper_options if @zypper_options
94
117
  cmd += args
95
118
 
96
119
  with_env "ZYPP_CONF" => @zypp_config do
97
- LoggedCheetah.run(*cmd)
120
+ Machinery::LoggedCheetah.run(*cmd)
98
121
  end
99
122
  end
100
123
  end
@@ -199,8 +199,8 @@ func getManagedFiles() (map[string]string, map[string]bool) {
199
199
  return files, dirs
200
200
  }
201
201
 
202
- func assembleJSON(unmanagedFilesMap interface{}) string {
203
- jsonMap := map[string]interface{}{"extracted": false, "files": unmanagedFilesMap}
202
+ func assembleJSON(unmanagedFilesList interface{}) string {
203
+ jsonMap := map[string]interface{}{"extracted": false, "files": unmanagedFilesList}
204
204
  json, _ := json.MarshalIndent(jsonMap, " ", " ")
205
205
  return string(json)
206
206
  }
@@ -299,7 +299,7 @@ func dirInfo(path string) (size int64, fileCount int, dirCount int) {
299
299
  if f.IsDir() {
300
300
  dirCount++
301
301
  fileCount--
302
- if _, ok := IgnoreList[path + f.Name()]; !ok {
302
+ if _, ok := IgnoreList[path+f.Name()]; !ok {
303
303
  subSize, subFiles, subDirs := dirInfo(path + f.Name() + "/")
304
304
  size += subSize
305
305
  fileCount += subFiles
@@ -352,6 +352,36 @@ func printVersion() {
352
352
  os.Exit(0)
353
353
  }
354
354
 
355
+ func getUnmanagedFilesList(files []string, unmanagedFiles map[string]string, extractMetadataFlag *bool) []UnmanagedFile {
356
+ unmanagedFilesList := make([]UnmanagedFile, len(unmanagedFiles))
357
+ i := 0
358
+ for j := range files {
359
+ // only add accessible files
360
+ if _, err := os.Lstat(files[j]); isAccessible(err) {
361
+ entry := UnmanagedFile{}
362
+ entry.Name = files[j]
363
+ entry.Type = unmanagedFiles[files[j]]
364
+
365
+ if *extractMetadataFlag {
366
+ amendPathAttributes(&entry, unmanagedFiles[files[j]])
367
+ }
368
+
369
+ unmanagedFilesList[i] = entry
370
+ i++
371
+ } else {
372
+ fmt.Fprintln(os.Stderr, files[j], "was not accessible. Skipping.")
373
+ }
374
+ }
375
+ return unmanagedFilesList[0:i]
376
+ }
377
+
378
+ func isAccessible(err error) bool {
379
+ return err == nil ||
380
+ (os.IsNotExist(err) == false &&
381
+ os.IsPermission(err) == false &&
382
+ strings.Contains(err.Error(), "no such device") == false)
383
+ }
384
+
355
385
  // IgnoreList includes mounts and any other file type that will be ignored when
356
386
  // evaluating the unmanaged files in a system.
357
387
  var IgnoreList = map[string]bool{}
@@ -405,19 +435,8 @@ func main() {
405
435
  }
406
436
  sort.Strings(files)
407
437
 
408
- unmanagedFilesMap := make([]UnmanagedFile, len(unmanagedFiles))
409
- for j := range files {
410
- entry := UnmanagedFile{}
411
- entry.Name = files[j]
412
- entry.Type = unmanagedFiles[files[j]]
413
-
414
- if *extractMetadataFlag {
415
- amendPathAttributes(&entry, unmanagedFiles[files[j]])
416
- }
417
-
418
- unmanagedFilesMap[j] = entry
419
- }
438
+ unmanagedFilesList := getUnmanagedFilesList(files, unmanagedFiles, extractMetadataFlag)
420
439
 
421
- json := assembleJSON(unmanagedFilesMap)
440
+ json := assembleJSON(unmanagedFilesList)
422
441
  fmt.Println(json)
423
442
  }
@@ -2,4 +2,4 @@
2
2
 
3
3
  package main
4
4
 
5
- const VERSION = "c9cc765d7146920c59d05dd9e483a82eb5f836df"
5
+ const VERSION = "5544d3469a45c0bf15d3263bc1bbbd32afb7f274"
Binary file
@@ -4,7 +4,7 @@
4
4
 
5
5
  <url>
6
6
  <loc>None/docs/</loc>
7
- <lastmod>2016-10-14</lastmod>
7
+ <lastmod>2016-11-16</lastmod>
8
8
  <changefreq>daily</changefreq>
9
9
  </url>
10
10
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  <url>
14
14
  <loc>None/machinery_main_general.1/</loc>
15
- <lastmod>2016-10-14</lastmod>
15
+ <lastmod>2016-11-16</lastmod>
16
16
  <changefreq>daily</changefreq>
17
17
  </url>
18
18
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  <url>
22
22
  <loc>None/machinery_main_scopes.1/</loc>
23
- <lastmod>2016-10-14</lastmod>
23
+ <lastmod>2016-11-16</lastmod>
24
24
  <changefreq>daily</changefreq>
25
25
  </url>
26
26
 
@@ -28,7 +28,7 @@
28
28
 
29
29
  <url>
30
30
  <loc>None/machinery_main_usecases.1/</loc>
31
- <lastmod>2016-10-14</lastmod>
31
+ <lastmod>2016-11-16</lastmod>
32
32
  <changefreq>daily</changefreq>
33
33
  </url>
34
34
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  <url>
38
38
  <loc>None/machinery_main_security_implications.1/</loc>
39
- <lastmod>2016-10-14</lastmod>
39
+ <lastmod>2016-11-16</lastmod>
40
40
  <changefreq>daily</changefreq>
41
41
  </url>
42
42
 
@@ -45,115 +45,115 @@
45
45
 
46
46
  <url>
47
47
  <loc>None/machinery-analyze.1/</loc>
48
- <lastmod>2016-10-14</lastmod>
48
+ <lastmod>2016-11-16</lastmod>
49
49
  <changefreq>daily</changefreq>
50
50
  </url>
51
51
 
52
52
  <url>
53
53
  <loc>None/machinery-build.1/</loc>
54
- <lastmod>2016-10-14</lastmod>
54
+ <lastmod>2016-11-16</lastmod>
55
55
  <changefreq>daily</changefreq>
56
56
  </url>
57
57
 
58
58
  <url>
59
59
  <loc>None/machinery-compare.1/</loc>
60
- <lastmod>2016-10-14</lastmod>
60
+ <lastmod>2016-11-16</lastmod>
61
61
  <changefreq>daily</changefreq>
62
62
  </url>
63
63
 
64
64
  <url>
65
65
  <loc>None/machinery-config.1/</loc>
66
- <lastmod>2016-10-14</lastmod>
66
+ <lastmod>2016-11-16</lastmod>
67
67
  <changefreq>daily</changefreq>
68
68
  </url>
69
69
 
70
70
  <url>
71
71
  <loc>None/machinery-copy.1/</loc>
72
- <lastmod>2016-10-14</lastmod>
72
+ <lastmod>2016-11-16</lastmod>
73
73
  <changefreq>daily</changefreq>
74
74
  </url>
75
75
 
76
76
  <url>
77
77
  <loc>None/machinery-deploy.1/</loc>
78
- <lastmod>2016-10-14</lastmod>
78
+ <lastmod>2016-11-16</lastmod>
79
79
  <changefreq>daily</changefreq>
80
80
  </url>
81
81
 
82
82
  <url>
83
83
  <loc>None/machinery-export-autoyast.1/</loc>
84
- <lastmod>2016-10-14</lastmod>
84
+ <lastmod>2016-11-16</lastmod>
85
85
  <changefreq>daily</changefreq>
86
86
  </url>
87
87
 
88
88
  <url>
89
89
  <loc>None/machinery-export-kiwi.1/</loc>
90
- <lastmod>2016-10-14</lastmod>
90
+ <lastmod>2016-11-16</lastmod>
91
91
  <changefreq>daily</changefreq>
92
92
  </url>
93
93
 
94
94
  <url>
95
95
  <loc>None/machinery-export-html.1/</loc>
96
- <lastmod>2016-10-14</lastmod>
96
+ <lastmod>2016-11-16</lastmod>
97
97
  <changefreq>daily</changefreq>
98
98
  </url>
99
99
 
100
100
  <url>
101
101
  <loc>None/machinery-inspect.1/</loc>
102
- <lastmod>2016-10-14</lastmod>
102
+ <lastmod>2016-11-16</lastmod>
103
103
  <changefreq>daily</changefreq>
104
104
  </url>
105
105
 
106
106
  <url>
107
107
  <loc>None/machinery-inspect-container.1/</loc>
108
- <lastmod>2016-10-14</lastmod>
108
+ <lastmod>2016-11-16</lastmod>
109
109
  <changefreq>daily</changefreq>
110
110
  </url>
111
111
 
112
112
  <url>
113
113
  <loc>None/machinery-list.1/</loc>
114
- <lastmod>2016-10-14</lastmod>
114
+ <lastmod>2016-11-16</lastmod>
115
115
  <changefreq>daily</changefreq>
116
116
  </url>
117
117
 
118
118
  <url>
119
119
  <loc>None/machinery-man.1/</loc>
120
- <lastmod>2016-10-14</lastmod>
120
+ <lastmod>2016-11-16</lastmod>
121
121
  <changefreq>daily</changefreq>
122
122
  </url>
123
123
 
124
124
  <url>
125
125
  <loc>None/machinery-move.1/</loc>
126
- <lastmod>2016-10-14</lastmod>
126
+ <lastmod>2016-11-16</lastmod>
127
127
  <changefreq>daily</changefreq>
128
128
  </url>
129
129
 
130
130
  <url>
131
131
  <loc>None/machinery-remove.1/</loc>
132
- <lastmod>2016-10-14</lastmod>
132
+ <lastmod>2016-11-16</lastmod>
133
133
  <changefreq>daily</changefreq>
134
134
  </url>
135
135
 
136
136
  <url>
137
137
  <loc>None/machinery-serve.1/</loc>
138
- <lastmod>2016-10-14</lastmod>
138
+ <lastmod>2016-11-16</lastmod>
139
139
  <changefreq>daily</changefreq>
140
140
  </url>
141
141
 
142
142
  <url>
143
143
  <loc>None/machinery-show.1/</loc>
144
- <lastmod>2016-10-14</lastmod>
144
+ <lastmod>2016-11-16</lastmod>
145
145
  <changefreq>daily</changefreq>
146
146
  </url>
147
147
 
148
148
  <url>
149
149
  <loc>None/machinery-upgrade-format.1/</loc>
150
- <lastmod>2016-10-14</lastmod>
150
+ <lastmod>2016-11-16</lastmod>
151
151
  <changefreq>daily</changefreq>
152
152
  </url>
153
153
 
154
154
  <url>
155
155
  <loc>None/machinery-validate.1/</loc>
156
- <lastmod>2016-10-14</lastmod>
156
+ <lastmod>2016-11-16</lastmod>
157
157
  <changefreq>daily</changefreq>
158
158
  </url>
159
159