schroot 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -29
  3. data/Rakefile +1 -1
  4. data/lib/schroot.rb +69 -2
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 360e830115b4cb4068f260942452b45c4c064752
4
- data.tar.gz: 0ac8b4afcb132b04a561e55211fefbdaf966deed
3
+ metadata.gz: 0736aa3c2bf393670a231765da40367d4e33c50d
4
+ data.tar.gz: 81aca34c23f3f9c8f245acf8d51e93d47e84f14f
5
5
  SHA512:
6
- metadata.gz: 5bf309ce86c4c7277d7a836d3160359035d7bf53ce6533aca5a73e0b5d760de1e93b7d32396cbd9144cbfaff133ca61512d577b1c6bf7bd6653656bfc40b61f1
7
- data.tar.gz: cb7abbeff9362b59b39737f0d6cff71b0b3a20dd2779389a3f68c5397c59d41dbfcdb5a8bdf8be35549be615ed6dafd149363ccbcb79cf1ee9d5b21ef29084c5
6
+ metadata.gz: 14390f1cd286f513c1e8f0c38d2112c7c0576d102e8991032570714ea868eaa8de96dec33971f250f889fc4220da35354923772369adbdda91951c5fce03a5f1
7
+ data.tar.gz: 27da31f097bf5ddf2789a2e012669e1260ba1b3cf784904f83d5c58c8eb87f015ce052482fbb4c3166d01989c88f44b8e69122124402d7d8ed6014aa39b5d1da
data/README.md CHANGED
@@ -42,36 +42,37 @@ Examples
42
42
  Simple example:
43
43
 
44
44
  ```ruby
45
- irb(main):005:0> require 'schroot'
46
- => true
47
- irb(main):006:0> my_session = Schroot.new('sid')
48
- => #<Schroot:0x8ba789c @chroot="sid", @session="sid-19131ba0-84ba-42e5-a2fb-d2d375d61750", @location="/var/lib/schroot/mount/sid-19131ba0-84ba-42e5-a2fb-d2d375d61750">
49
- irb(main):007:0> stdin, stdout, stderr = my_session.run("echo Hello, World!")
50
- => [#<IO:fd 22>, #<IO:fd 24>, #<IO:fd 26>]
51
- irb(main):008:0> stdout.gets
52
- => "Hello, World!\n"
45
+ irb(main):005:0> require 'schroot'
46
+ => true
47
+ irb(main):006:0> my_session = Schroot.new('sid')
48
+ => #<Schroot:0x8ba789c @chroot="sid", @session="sid-19131ba0-84ba-42e5-a2fb-d2d375d61750", @location="/var/lib/schroot/mount/sid-19131ba0-84ba-42e5-a2fb-d2d375d61750">
49
+ irb(main):007:0> stdin, stdout, stderr = my_session.run("echo Hello, World!")
50
+ => [#<IO:fd 22>, #<IO:fd 24>, #<IO:fd 26>]
51
+ irb(main):008:0> stdout.gets
52
+ => "Hello, World!\n"
53
53
  ```
54
54
  Using logger:
55
55
  ```ruby
56
- irb(main):001:0> require 'schroot'
57
- => true
58
- irb(main):002:0> my_logger = Logger.new(STDOUT)
59
- => #<Logger:0x0000000199b460 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x0000000199b438 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000000199b3c0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000199b370 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000000199b2f8>>>>
60
- irb(main):003:0> session = Schroot.new('default') do
61
- irb(main):004:1* log my_logger
62
- irb(main):005:1> end
63
- D, [2014-05-06T19:49:15.497952 #3084] DEBUG -- : Hello there!
64
- D, [2014-05-06T19:49:15.498035 #3084] DEBUG -- : Starting chroot session
65
- I, [2014-05-06T19:49:15.498069 #3084] INFO -- : Executing schroot -b -c default
66
- I, [2014-05-06T19:49:15.584809 #3084] INFO -- : Done!
67
- I, [2014-05-06T19:49:15.584939 #3084] INFO -- : Executing schroot --location -c session:sid-7cefa94f-4bea-4d30-b4a9-d3008c255360
68
- I, [2014-05-06T19:49:15.591380 #3084] INFO -- : Done!
69
- D, [2014-05-06T19:49:15.591504 #3084] DEBUG -- : Session sid-7cefa94f-4bea-4d30-b4a9-d3008c255360 with default started in /var/lib/schroot/mount/sid-7cefa94f-4bea-4d30-b4a9-d3008c255360
70
- => #<Schroot:0x000000019acda0 @logger=#<Logger:0x0000000199b460 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x0000000199b438 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000000199b3c0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000199b370 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000000199b2f8>>>>, @chroot="default", @session="sid-7cefa94f-4bea-4d30-b4a9-d3008c255360", @location="/var/lib/schroot/mount/sid-7cefa94f-4bea-4d30-b4a9-d3008c255360">
71
- irb(main):006:0> stream = session.run('uname -a')
72
- I, [2014-05-06T19:50:35.057816 #3084] INFO -- : Executing schroot -r -c sid-7cefa94f-4bea-4d30-b4a9-d3008c255360 -- uname -a
73
- I, [2014-05-06T19:50:35.251893 #3084] INFO -- : Done!
74
- => [#<IO:fd 13>, #<IO:fd 15>, #<IO:fd 17>]
75
- irb(main):007:0> stream[1].gets
76
- => "Linux dan-desktop 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux\n"
56
+ irb(main):001:0> require 'schroot'
57
+ => true
58
+ irb(main):002:0> my_logger = Logger.new(STDOUT)
59
+ => #<Logger:0x0000000199b460 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x0000000199b438 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000000199b3c0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000199b370 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000000199b2f8>>>>
60
+ irb(main):003:0> session = Schroot.new('default') do
61
+ irb(main):004:1* log my_logger
62
+ irb(main):005:1> end
63
+ D, [2014-05-06T19:49:15.497952 #3084] DEBUG -- : Hello there!
64
+ D, [2014-05-06T19:49:15.498035 #3084] DEBUG -- : Starting chroot session
65
+ I, [2014-05-06T19:49:15.498069 #3084] INFO -- : Executing schroot -b -c default
66
+ I, [2014-05-06T19:49:15.584809 #3084] INFO -- : Done!
67
+ I, [2014-05-06T19:49:15.584939 #3084] INFO -- : Executing schroot --location -c session:sid-7cefa94f-4bea-4d30-b4a9-d3008c255360
68
+ I, [2014-05-06T19:49:15.591380 #3084] INFO -- : Done!
69
+ D, [2014-05-06T19:49:15.591504 #3084] DEBUG -- : Session sid-7cefa94f-4bea-4d30-b4a9-d3008c255360 with default started in /var/lib/schroot/mount/sid-7cefa94f-4bea-4d30-b4a9-d3008c255360
70
+ => #<Schroot:0x000000019acda0 @logger=#<Logger:0x0000000199b460 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x0000000199b438 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000000199b3c0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000199b370 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000000199b2f8>>>>, @chroot="default", @session="sid-7cefa94f-4bea-4d30-b4a9-d3008c255360", @location="/var/lib/schroot/mount/sid-7cefa94f-4bea-4d30-b4a9-d3008c255360">
71
+ irb(main):006:0> stream = session.run('uname -a')
72
+ I, [2014-05-06T19:50:35.057816 #3084] INFO -- : Executing schroot -r -c sid-7cefa94f-4bea-4d30-b4a9-d3008c255360 -- uname -a
73
+ I, [2014-05-06T19:50:35.251893 #3084] INFO -- : Done!
74
+ => [#<IO:fd 13>, #<IO:fd 15>, #<IO:fd 17>]
75
+ irb(main):007:0> stream[1].gets
76
+ => "Linux dan-desktop 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux\n"
77
77
  ```
78
+
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ Rake::TestTask.new do |t|
4
4
  t.libs << 'test'
5
5
  end
6
6
 
7
- task :build => :test do
7
+ task :build do
8
8
  system "gem build schroot.gemspec"
9
9
  end
10
10
 
data/lib/schroot.rb CHANGED
@@ -6,6 +6,69 @@ SCHROOT_BASE="/var/lib/schroot"
6
6
  class SchrootError < StandardError
7
7
  end
8
8
 
9
+ # Schroot config unit
10
+ class SchrootConfigUnit
11
+ attr_accessor :type, :description, :union_type,
12
+ :directory, :users, :groups, :root_groups,
13
+ :aliases
14
+ end
15
+
16
+ # Schroot config data
17
+ class SchrootConfig
18
+ def initialize
19
+ @base_conf = "/etc/schroot/schroot.conf"
20
+ @conf_d = "/etc/schroot/chroot.d/"
21
+ @chroots = {}
22
+ end
23
+
24
+ def readconf
25
+ files = [@base_conf]
26
+ Dir.entries(@conf_d).each do |file|
27
+ files << (@conf_d+file) unless ['.','..'].include? file
28
+ end
29
+ name_regexp = /^\s*\[([a-z0-9A-Z\-\_]+)\]/
30
+ param_regexp = /^\s*([a-z0-9A-Z\-\_]+)\=(.*)$/
31
+ files.each do |file|
32
+ stream = File.open(file,"r")
33
+ current = nil
34
+ while (line = stream.gets)
35
+ if name_regexp.match line
36
+ current = name_regexp.match(line)[1]
37
+ @chroots[current.strip] = {"source" => file}
38
+ elsif current and param_regexp.match line
39
+ param, value = param_regexp.match(line)[1],param_regexp.match(line)[2]
40
+ @chroots[current][param.strip] = value.strip if current
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ # Adds new chroot configuration to .../chroot.d/ directory
47
+ #
48
+ # @param name [String] name of chroot
49
+ # @param kwargs [Hash] options
50
+ # @return [Bool]
51
+ def add(name, kwargs = {})
52
+ readconf()
53
+ filename = @conf_d+name
54
+ if @chroots[name] or File.exists?(filename)
55
+ return false
56
+ else
57
+ begin
58
+ stream = File.open(filename,"w")
59
+ rescue Errno::EACCES
60
+ raise SchrootError, "Cannot open #{filename} for writing"
61
+ end
62
+ stream.puts "# Generated automatically with ruby-schroot"
63
+ stream.puts "[#{name}]"
64
+ kwargs.each do |param, value|
65
+ stream.puts "#{param}=#{value}"
66
+ end
67
+ end
68
+ return true
69
+ end
70
+ end
71
+
9
72
  # Schroot session handler
10
73
  class Schroot
11
74
  def initialize(chroot_name = 'default', &block)
@@ -24,9 +87,13 @@ class Schroot
24
87
 
25
88
  def safe_run(cmd)
26
89
  @logger.info("Executing %s" % cmd)
27
- stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
90
+ begin
91
+ stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
92
+ rescue Errno::ENOENT
93
+ raise SchrootError, "Schroot binary is missing!"
94
+ end
28
95
  if wait_thr.value != 0
29
- raise SchrootError, "\ncmd=\"%s\"\nreturn_code= %i\nstdout= \"%s\"" % [cmd, wait_thr.value, stdout.gets]
96
+ raise SchrootError, "`%s` execution failed with %i" % [cmd, wait_thr.value]
30
97
  end
31
98
  @logger.info("Done!")
32
99
  return stdin, stdout, stderr
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schroot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniil Guzanov
@@ -32,7 +32,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '>='
34
34
  - !ruby/object:Gem::Version
35
- version: '0'
35
+ version: 1.8.6
36
36
  required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '>='