1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# $NetBSD: image.rb,v 1.1.1.1 2011/01/31 20:56:14 jym Exp $
#
# Copyright (c) 2011 Jean-Yves Migeon <jym@NetBSD.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#------------------------------------------------------------------------------
require 'fileutils'
require 'ec2/platform/netbsd/mtab'
require 'ec2/platform/netbsd/fstab'
require 'ec2/platform/netbsd/constants'
module EC2
module Platform
module NetBSD
# Implements all the required commands to generate a NetBSD image
# file. Note that the tools used here are specific to NetBSD; so
# you have to use a NetBSD environment to create the file, or build
# the tools from a NetBSD src tree (./build.sh -T TOOLDIR tools) and
# add TOOLDIR to PATH.
class Image
EXCLUDES = ['/kern', '/proc']
def initialize(volume, img_filename, img_size, exclude_dirs,
fstab = nil, debug = false)
@volume = volume
@img_filename = img_filename
@img_size = img_size # in MiB
@exclude_dirs = exclude_dirs
@debug = debug
@fstab = (fstab.nil? ? EC2::Platform::NetBSD::Fstab::DEFAULT : fstab)
end
# Make the image file.
# Just use the tree generated via a ./build.sh release &&
# ./build.sh install=/path/to/volume run from a NetBSD src tree.
# build.sh nearly takes care of everything, but for more advanced
# customization, the user should edit the files directly within
# the generated tree.
def make
puts "Generating image file #{@img_filename} from path #{@volume}"
if not @exclude_dirs.nil?
puts "WARNING: Excluding directories operation is not supported."
puts "The following directories will NOT be excluded from " \
"image file:"
@exclude_dirs.each { |dir| puts("#{dir}\t") }
end
### TODO Update fstab, etc... (do the extreme
### minimum here, the script should not alter the install tree too
### heavily)
execute("makefs -s '#{@img_size}m' -B le -o density=32k " \
"'#{@img_filename}' '#{@volume}'")
puts "Image #{@img_filename} successfully created."
end
def execute(cmd)
if @debug
puts "Executing command: '#{cmd}'"
end
raise FatalError.new("Command '#{cmd}' failed") unless system(cmd)
end
end
end
end
end
|