system-builder 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -20,8 +20,11 @@ lib/system_builder/configurator.rb
20
20
  lib/system_builder/core_ext.rb
21
21
  lib/system_builder/disk_image.rb
22
22
  lib/system_builder/disk_squashfs_image.rb
23
+ lib/system_builder/init_ram_fs_configurator.rb
23
24
  lib/system_builder/iso_image.rb
25
+ lib/system_builder/iso_squashfs_image.rb
24
26
  lib/system_builder/live_image.rb
27
+ lib/system_builder/mount_boot.sh
25
28
  lib/system_builder/task.rb
26
29
  script/console
27
30
  script/destroy
@@ -14,10 +14,11 @@ module SystemBuilder
14
14
 
15
15
  class PuppetConfigurator
16
16
 
17
- attr_reader :manifest
17
+ attr_reader :manifest, :config
18
18
 
19
- def initialize(manifest = ".")
20
- @manifest = manifest
19
+ def initialize(options = {})
20
+ @manifest = (options.delete(:manifest) or ".")
21
+ @config = options.dup
21
22
  end
22
23
 
23
24
  def puppet_directories
@@ -42,6 +43,12 @@ module SystemBuilder
42
43
 
43
44
  chroot.image.rsync context_dir, puppet_directories, :exclude => "*~", :delete => true
44
45
 
46
+ chroot.image.open("#{context_dir}/manifests/config.pp") do |f|
47
+ config.each do |key, value|
48
+ f.puts "$#{key}=\"#{value}\""
49
+ end
50
+ end
51
+
45
52
  chroot.image.mkdir "#{context_dir}/config"
46
53
  chroot.image.open("#{context_dir}/config/fileserver.conf") do |f|
47
54
  %w{files plugins}.each do |mount_point|
@@ -11,46 +11,7 @@ class SystemBuilder::DiskSquashfsImage
11
11
  end
12
12
 
13
13
  def create
14
- boot.configurators << SystemBuilder::ProcConfigurator.new do |chroot|
15
- puts "* install initramfs-tools"
16
- chroot.apt_install %w{initramfs-tools syslinux}
17
-
18
- script = "/usr/share/initramfs-tools/scripts/local-top/mount_boot"
19
- unless chroot.image.exists?(script)
20
- chroot.image.open(script) do |f|
21
- f.puts <<EOF
22
- #!/bin/sh -x
23
- case ${1:-} in
24
- prereqs) echo ""; exit 0;;
25
- esac
26
- modprobe loop
27
- mkdir /boot
28
- mount -r -t ext3 LABEL=#{fs_label} /boot
29
- exit 0
30
- EOF
31
- end
32
- chroot.sudo "chmod +x #{script}"
33
-
34
- chroot.image.mkdir "/usr/share/initramfs-tools/scripts/local-bottom"
35
- chroot.image.open("/usr/share/initramfs-tools/scripts/local-bottom/umount_boot") do |f|
36
- f.puts <<EOF
37
- #!/bin/sh -x
38
- case ${1:-} in
39
- prereqs) echo ""; exit 0;;
40
- esac
41
- mount -n -o move /boot /root/boot
42
- exit 0
43
- EOF
44
- end
45
- chroot.sudo "chmod +x /usr/share/initramfs-tools/scripts/local-bottom/umount_boot"
46
-
47
- chroot.image.open("/etc/initramfs-tools/modules") do |f|
48
- f.puts "squashfs"
49
- end
50
- chroot.sudo "/usr/sbin/update-initramfs -u"
51
- end
52
- end
53
-
14
+ boot.configurators << SystemBuilder::InitRamFsConfigurator.new
54
15
  boot.create
55
16
 
56
17
  file_creation = (not File.exists?(file))
@@ -101,8 +62,11 @@ EOF
101
62
  end
102
63
 
103
64
  def compress_root_fs
65
+ FileUtils::sudo "mksquashfs #{boot.root}/ build/filesystem.squashfs -noappend -e /boot"
66
+ FileUtils::sudo "chown #{ENV['USER']}:#{ENV['USER']} build/filesystem.squashfs && chmod +r build/filesystem.squashfs"
67
+
104
68
  mount_boot_fs do |mount_dir|
105
- FileUtils::sudo "mksquashfs #{boot.root}/ #{mount_dir}/filesystem.squashfs -noappend -e #{boot.root}/"
69
+ FileUtils::sudo "cp build/filesystem.squashfs #{mount_dir}/filesystem.squashfs"
106
70
  end
107
71
  FileUtils.touch file
108
72
  end
@@ -127,7 +91,7 @@ EOF
127
91
  f.puts "LABEL linux"
128
92
  f.puts "SAY Now booting #{version} from syslinux ..."
129
93
  f.puts "KERNEL /vmlinuz"
130
- f.puts "APPEND ro initrd=/initrd.img boot=local root=/boot/filesystem.squashfs rootflags=loop rootfstype=squashfs debug"
94
+ f.puts "APPEND ro initrd=/initrd.img boot=local root=/boot/filesystem.squashfs rootflags=loop rootfstype=squashfs"
131
95
  end
132
96
  end
133
97
  end
@@ -162,4 +126,5 @@ EOF
162
126
  linux_partition_info = `/sbin/sfdisk -l #{file}`.scan(%r{#{file}.*Linux}).first
163
127
  linux_partition_info.split[5].to_i
164
128
  end
129
+
165
130
  end
@@ -0,0 +1,63 @@
1
+ class SystemBuilder::InitRamFsConfigurator
2
+
3
+ def configure(chroot)
4
+ puts "* install initramfs-tools"
5
+ chroot.apt_install %w{initramfs-tools syslinux}
6
+
7
+ install_script(chroot, "local-top/mount_boot") do |f|
8
+ f.puts "modprobe loop"
9
+ f.puts "/lib/initrd/mount_boot"
10
+ # f.puts "PS1='(initramfs) ' /bin/sh -i </dev/console >/dev/console 2>&1"
11
+ end
12
+
13
+ install_script(chroot, "local-bottom/move_boot") do |f|
14
+ f.puts "mount -n -o move /boot /root/boot"
15
+ end
16
+
17
+ install_hook(chroot, "mount_boot") do |f|
18
+ f.puts "mkdir -p $DESTDIR/lib/initrd/"
19
+ f.puts "install -m 755 /usr/local/share/initramfs-tools/mount_boot $DESTDIR/lib/initrd/"
20
+ end
21
+
22
+ chroot.image.open("/etc/initramfs-tools/modules") do |f|
23
+ f.puts "squashfs"
24
+ end
25
+
26
+ chroot.image.mkdir "/usr/local/share/initramfs-tools"
27
+ chroot.image.open("/usr/local/share/initramfs-tools/mount_boot") do |f|
28
+ f.puts File.read("#{File.dirname(__FILE__)}/mount_boot.sh")
29
+ end
30
+
31
+ chroot.sudo "/usr/sbin/update-initramfs -u"
32
+ end
33
+
34
+ @@script_header = <<EOF
35
+ #!/bin/sh -x
36
+ if [ "$1" == "prereqs" ]; then
37
+ echo ""; exit 0;
38
+ fi
39
+ EOF
40
+
41
+ def install_script(chroot, name, &block)
42
+ install_file(chroot, :script, name, &block)
43
+ end
44
+
45
+ def install_hook(chroot, name, &block)
46
+ install_file(chroot, :hook, name) do |f|
47
+ f.puts ". /usr/share/initramfs-tools/hook-functions"
48
+ yield f
49
+ end
50
+ end
51
+
52
+ def install_file(chroot, type, name, &block)
53
+ file = "/usr/share/initramfs-tools/#{type}s/#{name}"
54
+ chroot.image.mkdir File.dirname(file)
55
+ chroot.image.open(file) do |f|
56
+ f.puts @@script_header
57
+ yield f
58
+ f.puts "exit 0"
59
+ end
60
+ chroot.sudo "chmod +x #{file}"
61
+ end
62
+
63
+ end
@@ -0,0 +1,53 @@
1
+ require 'tempfile'
2
+
3
+ class SystemBuilder::IsoSquashfsImage
4
+
5
+ attr_accessor :boot
6
+ attr_reader :file
7
+
8
+ def initialize(file)
9
+ @file = file
10
+ end
11
+
12
+ def create
13
+ boot.configurators << SystemBuilder::InitRamFsConfigurator.new
14
+ boot.create
15
+
16
+ compress_root_fs
17
+ install_isolinux_files
18
+ make_iso_fs
19
+
20
+ self
21
+ end
22
+
23
+ def compress_root_fs
24
+ FileUtils::sudo "mksquashfs #{boot.root}/ build/filesystem.squashfs -noappend -e /boot"
25
+ end
26
+
27
+ def install_isolinux_files(options = {})
28
+ version = (options[:version] or Time.now.strftime("%Y%m%d%H%M"))
29
+
30
+ boot.image do |image|
31
+ image.mkdir "/boot/isolinux"
32
+
33
+ image.open("/boot/isolinux/isolinux.cfg") do |f|
34
+ f.puts "default linux"
35
+ f.puts "label linux"
36
+ f.puts "kernel /vmlinuz"
37
+ f.puts "append ro initrd=/initrd.img boot=local root=/boot/filesystem.squashfs rootflags=loop rootfstype=squashfs"
38
+ end
39
+
40
+ image.install "/boot/isolinux", "/usr/lib/syslinux/isolinux.bin"
41
+ end
42
+ end
43
+
44
+ def readlink_boot_file(boot_file)
45
+ File.basename(%x{readlink #{boot.root}/#{boot_file}}.strip)
46
+ end
47
+
48
+ def make_iso_fs
49
+ FileUtils::sudo "mkisofs -quiet -R -o #{file} -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -graft-points vmlinuz=#{boot.root}/boot/#{readlink_boot_file('vmlinuz')} initrd.img=#{boot.root}/boot/#{readlink_boot_file('initrd.img')} filesystem.squashfs=build/filesystem.squashfs #{boot.root}/boot"
50
+ FileUtils::sudo "chown $USER #{file}"
51
+ end
52
+
53
+ end
@@ -0,0 +1,41 @@
1
+ #!/bin/sh -x
2
+
3
+ get_fstype() {
4
+ # udev >=146-1 no longer provides vol_id:
5
+ if [ -x /lib/udev/vol_id ]
6
+ then
7
+ /lib/udev/vol_id -t ${1} 2>/dev/null
8
+ else
9
+ eval $(blkid -o udev "${1}")
10
+ if [ -n "$ID_FS_TYPE" ]
11
+ then
12
+ echo "${ID_FS_TYPE}"
13
+ fi
14
+ fi
15
+ }
16
+
17
+ list_devices() {
18
+ # list partitions first
19
+ (ls /dev/hd*[1-9] /dev/sd*[1-9] ; ls /dev/hd[a-z] /dev/sd[a-z]) 2> /dev/null
20
+ }
21
+
22
+ mkdir /boot
23
+
24
+ for device in `list_devices`; do
25
+ fs_type=`get_fstype ${device}`
26
+ echo "check if $device ($fs_type) is the boot image"
27
+
28
+ case $fs_type in
29
+ ext3|iso9660)
30
+ mount -r -t $fs_type $device /boot
31
+ if [ -f "/boot/config.pp" ]; then
32
+ exit 0
33
+ else
34
+ umount /boot
35
+ fi
36
+ ;;
37
+ esac
38
+ done
39
+
40
+ echo "no image found"
41
+ exit 1
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module SystemBuilder
5
- VERSION = '0.0.7'
5
+ VERSION = '0.0.9'
6
6
 
7
7
  @@configurations = {}
8
8
 
@@ -22,6 +22,8 @@ require 'system_builder/core_ext'
22
22
  require 'system_builder/disk_image'
23
23
  require 'system_builder/iso_image'
24
24
  require 'system_builder/live_image'
25
+ require 'system_builder/init_ram_fs_configurator'
25
26
  require 'system_builder/disk_squashfs_image'
27
+ require 'system_builder/iso_squashfs_image'
26
28
  require 'system_builder/boot'
27
29
  require 'system_builder/configurator'
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{system-builder}
5
- s.version = "0.0.7"
5
+ s.version = "0.0.9"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Alban Peignier"]
9
- s.date = %q{2010-04-17}
9
+ s.date = %q{2010-05-09}
10
10
  s.default_executable = %q{system-builder}
11
11
  s.description = %q{FIX (describe your package)}
12
12
  s.email = ["alban@tryphon.eu"]
13
13
  s.executables = ["system-builder"]
14
14
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
15
- s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "bin/system-builder", "examples/Rakefile", "examples/config.rb", "examples/manifests/classes/test.pp", "examples/manifests/site.pp", "features/development.feature", "features/step_definitions/common_steps.rb", "features/support/common.rb", "features/support/env.rb", "features/support/matchers.rb", "lib/system_builder.rb", "lib/system_builder/boot.rb", "lib/system_builder/cli.rb", "lib/system_builder/configurator.rb", "lib/system_builder/core_ext.rb", "lib/system_builder/disk_image.rb", "lib/system_builder/disk_squashfs_image.rb", "lib/system_builder/iso_image.rb", "lib/system_builder/live_image.rb", "lib/system_builder/task.rb", "script/console", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/system_builder/boot_spec.rb", "spec/system_builder/cli_spec.rb", "system-builder.gemspec", "tasks/rspec.rake"]
15
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "bin/system-builder", "examples/Rakefile", "examples/config.rb", "examples/manifests/classes/test.pp", "examples/manifests/site.pp", "features/development.feature", "features/step_definitions/common_steps.rb", "features/support/common.rb", "features/support/env.rb", "features/support/matchers.rb", "lib/system_builder.rb", "lib/system_builder/boot.rb", "lib/system_builder/cli.rb", "lib/system_builder/configurator.rb", "lib/system_builder/core_ext.rb", "lib/system_builder/disk_image.rb", "lib/system_builder/disk_squashfs_image.rb", "lib/system_builder/init_ram_fs_configurator.rb", "lib/system_builder/iso_image.rb", "lib/system_builder/iso_squashfs_image.rb", "lib/system_builder/live_image.rb", "lib/system_builder/mount_boot.sh", "lib/system_builder/task.rb", "script/console", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/system_builder/boot_spec.rb", "spec/system_builder/cli_spec.rb", "system-builder.gemspec", "tasks/rspec.rake"]
16
16
  s.homepage = %q{http://projects.tryphon.eu/system-builder}
17
17
  s.rdoc_options = ["--main", "README.rdoc"]
18
18
  s.require_paths = ["lib"]
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 7
9
- version: 0.0.7
8
+ - 9
9
+ version: 0.0.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alban Peignier
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-17 00:00:00 +02:00
17
+ date: 2010-05-09 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -79,8 +79,11 @@ files:
79
79
  - lib/system_builder/core_ext.rb
80
80
  - lib/system_builder/disk_image.rb
81
81
  - lib/system_builder/disk_squashfs_image.rb
82
+ - lib/system_builder/init_ram_fs_configurator.rb
82
83
  - lib/system_builder/iso_image.rb
84
+ - lib/system_builder/iso_squashfs_image.rb
83
85
  - lib/system_builder/live_image.rb
86
+ - lib/system_builder/mount_boot.sh
84
87
  - lib/system_builder/task.rb
85
88
  - script/console
86
89
  - script/destroy