dock0 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e03efc79249c833960aa75d7df70773e809fec0
4
- data.tar.gz: 06e14ea724f68d12664dc0e9df7bc5d5c5a20a86
3
+ metadata.gz: dc715c368b527dcfc38003b9a92c518d02b33a04
4
+ data.tar.gz: 5dc7b512052f879254ba807a80b8e0c4d8cc0eb7
5
5
  SHA512:
6
- metadata.gz: 06c1c5c0a8f07af437714525a1c76a11fbbf790c27ab832e1126f639676fd97ad324ba8c2cbf201dc5a6bb75a093712d0098ff16390a777bf02b5a1faef1ac71
7
- data.tar.gz: e6cc0e1b04ffc8edff39e8aa5d5cae671ca56f1b60280ab7180f851bd0855663ad9b5c6705150430ce18524594f4befa042034a5f146d530b96b7c8181e1e060
6
+ metadata.gz: f532497c23cad81480947e8bf5c8952814d4761a0713c4089448cb8740adb5aec9162d718800ecbacd9bf491f155eac20f5b0a9002ebb844f04fd0cc4ef60dba
7
+ data.tar.gz: 0c5c7adfcb2eea1fa55722f470792a4c15c78076744e7853085ffc519114ee84c3feb55435dee1c40c7dbb668a150a7d1c7de0d596065646ba17968916ddfd4d
data/Rakefile CHANGED
@@ -7,8 +7,8 @@ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  desc 'Run Rubocop on the gem'
9
9
  RuboCop::RakeTask.new(:rubocop) do |task|
10
- task.patterns = ['lib/**/*.rb', 'spec/**/*.rb']
10
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb', 'bin/*']
11
11
  task.fail_on_error = true
12
12
  end
13
13
 
14
- task default: [:spec, :rubocop, :build]
14
+ task default: [:spec, :rubocop, :build, :install]
data/bin/dock0 CHANGED
@@ -6,14 +6,14 @@ require 'mercenary'
6
6
  Mercenary.program(:dock0) do |p|
7
7
  p.version Dock0::VERSION
8
8
  p.description 'Tool for creating server components'
9
- p.syntax 'dock0 [command] CONFIG1 [... CONFIGN]'
9
+ p.syntax 'dock0 <subcommand> [args]'
10
10
 
11
11
  p.command(:image) do |c|
12
12
  c.syntax 'image CONFIG1 [... CONFIGN]'
13
13
  c.description 'Build a root image'
14
14
 
15
15
  c.action do |args, _|
16
- Dock0.easy_mode Dock0::Image, args
16
+ Dock0.easy_mode :Image, args
17
17
  puts 'All done!'
18
18
  end
19
19
  end
@@ -23,8 +23,13 @@ Mercenary.program(:dock0) do |p|
23
23
  c.description 'Build a configuration bundle'
24
24
 
25
25
  c.action do |args, _|
26
- Dock0.easy_mode Dock0::Config, args
26
+ Dock0.easy_mode :Config, args
27
27
  puts 'All done!'
28
28
  end
29
29
  end
30
+
31
+ p.action do
32
+ puts p
33
+ exit
34
+ end
30
35
  end
data/lib/dock0.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'yaml'
2
2
  require 'English'
3
+ require 'fileutils'
3
4
 
4
5
  ##
5
6
  # Dock0 provides an interface for building Arch images
@@ -25,14 +26,8 @@ module Dock0
25
26
  class Base
26
27
  attr_reader :config
27
28
 
28
- DEFAULT_CONFIG = {
29
- 'paths' => {
30
- 'scripts' => './scripts'
31
- }
32
- }
33
-
34
29
  def initialize(*configs)
35
- @config = configs.each_with_object(DEFAULT_CONFIG.dup) do |path, obj|
30
+ @config = configs.each_with_object(default_config) do |path, obj|
36
31
  new = YAML.load(File.read(path))
37
32
  next unless new
38
33
  obj.merge! new
@@ -40,6 +35,14 @@ module Dock0
40
35
  @paths = @config['paths']
41
36
  end
42
37
 
38
+ def default_config
39
+ {
40
+ 'paths' => {
41
+ 'scripts' => './scripts'
42
+ }
43
+ }
44
+ end
45
+
43
46
  def run(cmd)
44
47
  results = `#{cmd} 2>&1`
45
48
  return results if $CHILD_STATUS.success?
@@ -56,6 +59,11 @@ module Dock0
56
59
  run_script script
57
60
  end
58
61
  end
62
+
63
+ def cleanup(list)
64
+ puts "Removing: #{list.join(', ')}"
65
+ FileUtils.rm_rf list
66
+ end
59
67
  end
60
68
  end
61
69
 
data/lib/dock0/config.rb CHANGED
@@ -5,12 +5,16 @@ module Dock0
5
5
  ##
6
6
  # A Config is a system-specific customization layer
7
7
  class Config < Base
8
- DEFAULT_CONFIG = {
9
- 'paths' => {
10
- 'templates' => './templates',
11
- 'build' => './build'
8
+ def default_config
9
+ {
10
+ 'paths' => {
11
+ 'templates' => './templates',
12
+ 'scripts' => './scripts',
13
+ 'build' => './build/config',
14
+ 'output' => './build.tar.gz'
15
+ }
12
16
  }
13
- }
17
+ end
14
18
 
15
19
  def templates
16
20
  Dir.chdir(@paths['templates']) do
@@ -20,6 +24,7 @@ module Dock0
20
24
 
21
25
  def render_templates
22
26
  templates.each do |path|
27
+ puts "Templating #{path}"
23
28
  template = File.read "#{@paths['templates']}/#{path}"
24
29
  parsed = ERB.new(template, nil, '<>').result(binding)
25
30
 
@@ -29,8 +34,18 @@ module Dock0
29
34
  end
30
35
  end
31
36
 
37
+ def finalize
38
+ puts "Packing config into #{@paths['output']}"
39
+ tar = Dir.chdir(File.dirname(@paths['build'])) { run 'tar cz .' }
40
+ File.open(@paths['output'], 'w') { |fh| fh << tar }
41
+ end
42
+
32
43
  def easy_mode
44
+ cleanup @paths.values_at('build', 'output')
33
45
  render_templates
46
+ run_scripts
47
+ finalize
48
+ cleanup @paths.values_at('build')
34
49
  end
35
50
  end
36
51
  end
data/lib/dock0/image.rb CHANGED
@@ -4,21 +4,23 @@ module Dock0
4
4
  ##
5
5
  # An Image is a rootfs for a system
6
6
  class Image < Base
7
- DEFAULT_CONFIG = {
8
- 'paths' => {
9
- 'build_file' => '/opt/build_file',
10
- 'build' => '/opt/build_file_mount',
11
- 'package_list' => './packages',
12
- 'overlay' => './overlay',
13
- 'scripts' => './scripts',
14
- 'output' => './root.fs.sfs'
15
- },
16
- 'fs' => {
17
- 'size' => 512,
18
- 'type' => 'ext4',
19
- 'flags' => '-F'
7
+ def default_config # rubocop:disable Metrics/MethodLength
8
+ {
9
+ 'paths' => {
10
+ 'build_file' => './build_file',
11
+ 'build' => './build_file_mount',
12
+ 'package_list' => './packages',
13
+ 'overlay' => './overlay',
14
+ 'scripts' => './scripts',
15
+ 'output' => './root.fs.sfs'
16
+ },
17
+ 'fs' => {
18
+ 'size' => 512,
19
+ 'type' => 'ext4',
20
+ 'flags' => '-F'
21
+ }
20
22
  }
21
- }
23
+ end
22
24
 
23
25
  def run_chroot(cmd)
24
26
  run "arch-chroot #{@paths['build']} #{cmd}"
@@ -68,20 +70,15 @@ module Dock0
68
70
  run "mksquashfs #{@paths['build_file']} #{@paths['output']}"
69
71
  end
70
72
 
71
- def cleanup
72
- puts 'Removing temporary build image'
73
- File.unlink @paths['build_file']
74
- end
75
-
76
73
  def easy_mode
74
+ cleanup @paths.values_at('build_file', 'build', 'output')
77
75
  prepare_root
78
76
  install_packages
79
77
  apply_overlay
80
78
  run_scripts
81
79
  run_commands
82
- sleep 5
83
80
  finalize
84
- cleanup
81
+ cleanup @paths.values_at('build_file', 'build')
85
82
  end
86
83
  end
87
84
  end
data/lib/dock0/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ##
2
2
  # Set the version (needed for Mercenary -v)
3
3
  module Dock0
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dock0
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker