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.
- checksums.yaml +4 -4
- data/README.md +30 -29
- data/Rakefile +1 -1
- data/lib/schroot.rb +69 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0736aa3c2bf393670a231765da40367d4e33c50d
|
|
4
|
+
data.tar.gz: 81aca34c23f3f9c8f245acf8d51e93d47e84f14f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
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
|
-
|
|
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, "
|
|
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
|
+
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:
|
|
35
|
+
version: 1.8.6
|
|
36
36
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - '>='
|