ruby-schroot
Ruby bindings for debian schroot
What is it?
It's a gem which allows to create schroot sessions and execute commands in the chroot environment from ruby code.
Currently it just calls schroot binaries.
Ability to manage chroots (eg create) is coming soon.
Usage
Library requires installed chroot binary. All chroots u want to use should be configured in /etc/schroot/schroot.conf or /etc/schroot/conf.d/.
Little example:
[sid]
type=directory
description=Debian sid (unstable)
union-type=aufs
directory=/srv/chroot/sid
users=dan
groups=dan
root-groups=root
aliases=unstable,default
Library installation is pretty simple:
$ rake
$ gem install ./*.gem
or just
$ rake install
Examples
Simple example:
irb(main):005:0> require 'schroot'
=> true
irb(main):006:0> my_session = Schroot.new('sid')
=> #<Schroot:0x8ba789c @chroot="sid", @session="sid-19131ba0-84ba-42e5-a2fb-d2d375d61750", @location="/var/lib/schroot/mount/sid-19131ba0-84ba-42e5-a2fb-d2d375d61750">
irb(main):007:0> stdin, stdout, stderr = my_session.run("echo Hello, World!")
=> [#<IO:fd 22>, #<IO:fd 24>, #<IO:fd 26>]
irb(main):008:0> stdout.gets
=> "Hello, World!\n"
Using logger:
irb(main):001:0> require 'schroot'
=> true
irb(main):002:0> my_logger = Logger.new(STDOUT)
=> #<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>>>>
irb(main):003:0> session = Schroot.new('default') do
irb(main):004:1* log my_logger
irb(main):005:1> end
D, [2014-05-06T19:49:15.497952 #3084] DEBUG -- : Hello there!
D, [2014-05-06T19:49:15.498035 #3084] DEBUG -- : Starting chroot session
I, [2014-05-06T19:49:15.498069 #3084] INFO -- : Executing schroot -b -c default
I, [2014-05-06T19:49:15.584809 #3084] INFO -- : Done!
I, [2014-05-06T19:49:15.584939 #3084] INFO -- : Executing schroot --location -c session:sid-7cefa94f-4bea-4d30-b4a9-d3008c255360
I, [2014-05-06T19:49:15.591380 #3084] INFO -- : Done!
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
=> #<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">
irb(main):006:0> stream = session.run('uname -a')
I, [2014-05-06T19:50:35.057816 #3084] INFO -- : Executing schroot -r -c sid-7cefa94f-4bea-4d30-b4a9-d3008c255360 -- uname -a
I, [2014-05-06T19:50:35.251893 #3084] INFO -- : Done!
=> [#<IO:fd 13>, #<IO:fd 15>, #<IO:fd 17>]
irb(main):007:0> stream[1].gets
=> "Linux dan-desktop 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux\n"