pi-bake 0.1.0
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.
- data/Gemfile +39 -0
- data/Gemfile.lock +36 -0
- data/README.markdown +26 -0
- data/bin/bake +64 -0
- data/lib/actions/all.rb +31 -0
- data/lib/actions/attach.rb +42 -0
- data/lib/actions/detach.rb +36 -0
- data/lib/actions/image.rb +87 -0
- data/lib/actions/info.rb +61 -0
- data/lib/actions/mount.rb +58 -0
- data/lib/actions/unmount.rb +38 -0
- data/lib/actions/update.rb +156 -0
- data/lib/deb/debootstrap +682 -0
- data/lib/deb/functions +1570 -0
- data/lib/deb/scripts/wheezy +191 -0
- data/lib/fs/geom.rb +232 -0
- data/lib/pi-bake.rb +0 -0
- metadata +68 -0
@@ -0,0 +1,191 @@
|
|
1
|
+
mirror_style release
|
2
|
+
download_style apt
|
3
|
+
finddebs_style from-indices
|
4
|
+
variants - buildd fakechroot minbase scratchbox
|
5
|
+
keyring /usr/share/keyrings/debian-archive-keyring.gpg
|
6
|
+
|
7
|
+
if doing_variant fakechroot; then
|
8
|
+
test "$FAKECHROOT" = "true" || error 1 FAKECHROOTREQ "This variant requires fakechroot environment to be started"
|
9
|
+
fi
|
10
|
+
|
11
|
+
case $ARCH in
|
12
|
+
alpha|ia64) LIBC="libc6.1" ;;
|
13
|
+
kfreebsd-*) LIBC="libc0.1" ;;
|
14
|
+
hurd-*) LIBC="libc0.3" ;;
|
15
|
+
*) LIBC="libc6" ;;
|
16
|
+
esac
|
17
|
+
|
18
|
+
work_out_debs () {
|
19
|
+
required="$(get_debs Priority: required)"
|
20
|
+
|
21
|
+
if doing_variant - || doing_variant fakechroot; then
|
22
|
+
#required="$required $(get_debs Priority: important)"
|
23
|
+
# ^^ should be getting debconf here somehow maybe
|
24
|
+
base="$(get_debs Priority: important)"
|
25
|
+
elif doing_variant buildd || doing_variant scratchbox; then
|
26
|
+
base="apt build-essential"
|
27
|
+
elif doing_variant minbase; then
|
28
|
+
base="apt"
|
29
|
+
fi
|
30
|
+
|
31
|
+
if doing_variant fakechroot; then
|
32
|
+
# ldd.fake needs binutils
|
33
|
+
required="$required binutils"
|
34
|
+
fi
|
35
|
+
}
|
36
|
+
|
37
|
+
first_stage_install () {
|
38
|
+
extract $required
|
39
|
+
|
40
|
+
mkdir -p "$TARGET/var/lib/dpkg"
|
41
|
+
: >"$TARGET/var/lib/dpkg/status"
|
42
|
+
: >"$TARGET/var/lib/dpkg/available"
|
43
|
+
|
44
|
+
setup_etc
|
45
|
+
if [ ! -e "$TARGET/etc/fstab" ]; then
|
46
|
+
echo '# UNCONFIGURED FSTAB FOR BASE SYSTEM' > "$TARGET/etc/fstab"
|
47
|
+
chown 0:0 "$TARGET/etc/fstab"; chmod 644 "$TARGET/etc/fstab"
|
48
|
+
fi
|
49
|
+
|
50
|
+
x_feign_install () {
|
51
|
+
local pkg="$1"
|
52
|
+
local deb="$(debfor $pkg)"
|
53
|
+
local ver="$(extract_deb_field "$TARGET/$deb" Version)"
|
54
|
+
|
55
|
+
mkdir -p "$TARGET/var/lib/dpkg/info"
|
56
|
+
|
57
|
+
echo \
|
58
|
+
"Package: $pkg
|
59
|
+
Version: $ver
|
60
|
+
Maintainer: unknown
|
61
|
+
Status: install ok installed" >> "$TARGET/var/lib/dpkg/status"
|
62
|
+
|
63
|
+
touch "$TARGET/var/lib/dpkg/info/${pkg}.list"
|
64
|
+
}
|
65
|
+
|
66
|
+
x_feign_install dpkg
|
67
|
+
}
|
68
|
+
|
69
|
+
second_stage_install () {
|
70
|
+
setup_devices
|
71
|
+
|
72
|
+
x_core_install () {
|
73
|
+
smallyes '' | in_target dpkg --force-depends --install $(debfor "$@")
|
74
|
+
}
|
75
|
+
|
76
|
+
p () {
|
77
|
+
baseprog="$(($baseprog + ${1:-1}))"
|
78
|
+
}
|
79
|
+
|
80
|
+
if doing_variant fakechroot; then
|
81
|
+
setup_proc_fakechroot
|
82
|
+
elif doing_variant scratchbox; then
|
83
|
+
true
|
84
|
+
else
|
85
|
+
setup_proc
|
86
|
+
in_target /sbin/ldconfig
|
87
|
+
fi
|
88
|
+
|
89
|
+
DEBIAN_FRONTEND=noninteractive
|
90
|
+
DEBCONF_NONINTERACTIVE_SEEN=true
|
91
|
+
export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN
|
92
|
+
|
93
|
+
baseprog=0
|
94
|
+
bases=7
|
95
|
+
|
96
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #1
|
97
|
+
info INSTCORE "Installing core packages..."
|
98
|
+
|
99
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #2
|
100
|
+
ln -sf mawk "$TARGET/usr/bin/awk"
|
101
|
+
x_core_install base-files base-passwd
|
102
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #3
|
103
|
+
x_core_install dpkg
|
104
|
+
|
105
|
+
if [ ! -e "$TARGET/etc/localtime" ]; then
|
106
|
+
ln -sf /usr/share/zoneinfo/UTC "$TARGET/etc/localtime"
|
107
|
+
fi
|
108
|
+
|
109
|
+
if doing_variant fakechroot; then
|
110
|
+
install_fakechroot_tools
|
111
|
+
fi
|
112
|
+
|
113
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #4
|
114
|
+
x_core_install $LIBC
|
115
|
+
|
116
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #5
|
117
|
+
x_core_install perl-base
|
118
|
+
|
119
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #6
|
120
|
+
rm "$TARGET/usr/bin/awk"
|
121
|
+
x_core_install mawk
|
122
|
+
|
123
|
+
p; progress $baseprog $bases INSTCORE "Installing core packages" #7
|
124
|
+
if doing_variant -; then
|
125
|
+
x_core_install debconf
|
126
|
+
fi
|
127
|
+
|
128
|
+
baseprog=0
|
129
|
+
bases=$(set -- $required; echo $#)
|
130
|
+
|
131
|
+
info UNPACKREQ "Unpacking required packages..."
|
132
|
+
|
133
|
+
exec 7>&1
|
134
|
+
|
135
|
+
smallyes '' |
|
136
|
+
(repeatn 5 in_target_failmsg UNPACK_REQ_FAIL_FIVE "Failure while unpacking required packages. This will be attempted up to five times." "" \
|
137
|
+
dpkg --status-fd 8 --force-depends --unpack $(debfor $required) 8>&1 1>&7 || echo EXITCODE $?) |
|
138
|
+
dpkg_progress $baseprog $bases UNPACKREQ "Unpacking required packages" UNPACKING
|
139
|
+
|
140
|
+
info CONFREQ "Configuring required packages..."
|
141
|
+
|
142
|
+
mv "$TARGET/sbin/start-stop-daemon" "$TARGET/sbin/start-stop-daemon.REAL"
|
143
|
+
echo \
|
144
|
+
"#!/bin/sh
|
145
|
+
echo
|
146
|
+
echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "$TARGET/sbin/start-stop-daemon"
|
147
|
+
chmod 755 "$TARGET/sbin/start-stop-daemon"
|
148
|
+
|
149
|
+
setup_dselect_method apt
|
150
|
+
|
151
|
+
smallyes '' |
|
152
|
+
(in_target_failmsg CONF_REQ_FAIL "Failure while configuring required packages." "" \
|
153
|
+
dpkg --status-fd 8 --configure --pending --force-configure-any --force-depends 8>&1 1>&7 || echo EXITCODE $?) |
|
154
|
+
dpkg_progress $baseprog $bases CONFREQ "Configuring required packages" CONFIGURING
|
155
|
+
|
156
|
+
baseprog=0
|
157
|
+
bases="$(set -- $base; echo $#)"
|
158
|
+
|
159
|
+
info UNPACKBASE "Unpacking the base system..."
|
160
|
+
|
161
|
+
setup_available $required $base
|
162
|
+
done_predeps=
|
163
|
+
while predep=$(get_next_predep); do
|
164
|
+
# We have to resolve dependencies of pre-dependencies manually because
|
165
|
+
# dpkg --predep-package doesn't handle this.
|
166
|
+
predep=$(without "$(without "$(resolve_deps $predep)" "$required")" "$done_predeps")
|
167
|
+
# XXX: progress is tricky due to how dpkg_progress works
|
168
|
+
# -- cjwatson 2009-07-29
|
169
|
+
p; smallyes '' |
|
170
|
+
in_target dpkg --force-overwrite --force-confold --skip-same-version --install $(debfor $predep)
|
171
|
+
base=$(without "$base" "$predep")
|
172
|
+
done_predeps="$done_predeps $predep"
|
173
|
+
done
|
174
|
+
|
175
|
+
smallyes '' |
|
176
|
+
(repeatn 5 in_target_failmsg INST_BASE_FAIL_FIVE "Failure while installing base packages. This will be re-attempted up to five times." "" \
|
177
|
+
dpkg --status-fd 8 --force-overwrite --force-confold --skip-same-version --unpack $(debfor $base) 8>&1 1>&7 || echo EXITCODE $?) |
|
178
|
+
dpkg_progress $baseprog $bases UNPACKBASE "Unpacking base system" UNPACKING
|
179
|
+
|
180
|
+
info CONFBASE "Configuring the base system..."
|
181
|
+
|
182
|
+
smallyes '' |
|
183
|
+
(repeatn 5 in_target_failmsg CONF_BASE_FAIL_FIVE "Failure while configuring base packages. This will be re-attempted up to five times." "" \
|
184
|
+
dpkg --status-fd 8 --force-confold --skip-same-version --configure -a 8>&1 1>&7 || echo EXITCODE $?) |
|
185
|
+
dpkg_progress $baseprog $bases CONFBASE "Configuring base system" CONFIGURING
|
186
|
+
|
187
|
+
mv "$TARGET/sbin/start-stop-daemon.REAL" "$TARGET/sbin/start-stop-daemon"
|
188
|
+
|
189
|
+
progress $bases $bases CONFBASE "Configuring base system"
|
190
|
+
info BASESUCCESS "Base system installed successfully."
|
191
|
+
}
|
data/lib/fs/geom.rb
ADDED
@@ -0,0 +1,232 @@
|
|
1
|
+
### Copyright (c) 2012 David Love <david@homeunix.org.uk>
|
2
|
+
###
|
3
|
+
### Permission to use, copy, modify, and/or distribute this software for
|
4
|
+
### any purpose with or without fee is hereby granted, provided that the
|
5
|
+
### above copyright notice and this permission notice appear in all copies.
|
6
|
+
###
|
7
|
+
### THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
### WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
### MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
10
|
+
### ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
### WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
12
|
+
### ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
13
|
+
### OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
14
|
+
###
|
15
|
+
|
16
|
+
### @author David Love
|
17
|
+
###
|
18
|
+
### FreeBSD GEOM Interface. Packages the FreeBSD GEOM interfaces and utilities into
|
19
|
+
### a single class.
|
20
|
+
###
|
21
|
+
|
22
|
+
# Sub-process handling library
|
23
|
+
require "open4"
|
24
|
+
|
25
|
+
class Geom
|
26
|
+
|
27
|
+
# Attach a disk image
|
28
|
+
def self.attach_image(image_name)
|
29
|
+
|
30
|
+
# Sanity check the FreeBSD environment, making sure the
|
31
|
+
# geom_gate kernel module is loaded (or can be loaded) before
|
32
|
+
# we do anything else
|
33
|
+
|
34
|
+
unless system("kldstat -q -m ggate") then
|
35
|
+
|
36
|
+
# The kernel module isn't loaded, so lets try to
|
37
|
+
# load it
|
38
|
+
unless system("sudo kldload geom_gate") then
|
39
|
+
# OK now we are really stuck. The correct module
|
40
|
+
# isn't available, and we can't load it either.
|
41
|
+
# Not much else we can do now.
|
42
|
+
return nil
|
43
|
+
end
|
44
|
+
|
45
|
+
# Did that work?
|
46
|
+
unless system("kldstat -q -m ggate") then
|
47
|
+
# No, so tell the caller
|
48
|
+
return nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Attach the image
|
53
|
+
#
|
54
|
+
# NOTE: There appears to be a bug in the output of ggatel, which
|
55
|
+
# fails to report the newly created device name. Instead we have
|
56
|
+
# to reconstruct the new name, and report it to the caller.
|
57
|
+
|
58
|
+
current_devices = `ggatel list`.split
|
59
|
+
`sudo ggatel create #{image_name}`
|
60
|
+
updated_devices = `ggatel list`.split
|
61
|
+
|
62
|
+
device_name = updated_devices - current_devices
|
63
|
+
|
64
|
+
return device_name[0].to_s
|
65
|
+
end
|
66
|
+
|
67
|
+
# Detach a disk image
|
68
|
+
def self.detach_image(device_name)
|
69
|
+
device_number = device_name[-1]
|
70
|
+
system("sudo ggatel destroy -u #{device_number}")
|
71
|
+
end
|
72
|
+
|
73
|
+
# Create a blank disk image, backed by the named file
|
74
|
+
def self.make_image(image_name, image_size)
|
75
|
+
# Work out how many 512 bit blocks we need
|
76
|
+
blocks = image_size / 512
|
77
|
+
|
78
|
+
# Create a spare image of the required size
|
79
|
+
puts "Image size: #{image_size} bytes"
|
80
|
+
`dd of=#{image_name} bs=512 count=0 seek=#{blocks}`
|
81
|
+
end
|
82
|
+
|
83
|
+
# Mount the image slices in known locations
|
84
|
+
def self.mount_image(device_name)
|
85
|
+
|
86
|
+
# Sanity check the FreeBSD environment, making sure the
|
87
|
+
# ext2fs kernel module is loaded (or can be loaded) before
|
88
|
+
# we do anything else
|
89
|
+
|
90
|
+
unless system("kldstat -q -m ext2fs") then
|
91
|
+
|
92
|
+
# The kernel module isn't loaded, so lets try to
|
93
|
+
# load it
|
94
|
+
unless system("sudo kldload ext2fs") then
|
95
|
+
# OK now we are really stuck. The correct module
|
96
|
+
# isn't available, and we can't load it either.
|
97
|
+
# Not much else we can do now.
|
98
|
+
return false
|
99
|
+
end
|
100
|
+
|
101
|
+
# Did that work?
|
102
|
+
unless system("kldstat -q -m ext2fs") then
|
103
|
+
# No, so tell the caller
|
104
|
+
return false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Mount the boot slice
|
109
|
+
unless File.exists?("/mnt/pi-boot") then
|
110
|
+
# Use sudo to assume root powers, instead of the
|
111
|
+
# native ruby method
|
112
|
+
`sudo mkdir -p /mnt/pi-boot`
|
113
|
+
end
|
114
|
+
|
115
|
+
unless system("sudo mount_msdosfs /dev/#{device_name}s1 /mnt/pi-boot") then
|
116
|
+
return false
|
117
|
+
end
|
118
|
+
|
119
|
+
# Mount the boot slice
|
120
|
+
unless File.exists?("/mnt/pi-system1") then
|
121
|
+
# Use sudo to assume root powers, instead of the
|
122
|
+
# native ruby method
|
123
|
+
`sudo mkdir -p /mnt/pi-system1`
|
124
|
+
end
|
125
|
+
|
126
|
+
unless system("sudo mount -t ext2fs /dev/#{device_name}s2 /mnt/pi-system1")
|
127
|
+
return false
|
128
|
+
end
|
129
|
+
|
130
|
+
# Mount the boot slice
|
131
|
+
unless File.exists?("/mnt/pi-system2") then
|
132
|
+
# Use sudo to assume root powers, instead of the
|
133
|
+
# native ruby method
|
134
|
+
`sudo mkdir -p /mnt/pi-system2`
|
135
|
+
end
|
136
|
+
|
137
|
+
unless system("sudo mount -t ext2fs /dev/#{device_name}s3 /mnt/pi-system2")
|
138
|
+
return false
|
139
|
+
end
|
140
|
+
|
141
|
+
# Mount the boot slice
|
142
|
+
unless File.exists?("/mnt/pi-data") then
|
143
|
+
# Use sudo to assume root powers, instead of the
|
144
|
+
# native ruby method
|
145
|
+
`sudo mkdir -p /mnt/pi-data`
|
146
|
+
end
|
147
|
+
|
148
|
+
unless system("sudo mount -t ext2fs /dev/#{device_name}s4 /mnt/pi-data")
|
149
|
+
return false
|
150
|
+
end
|
151
|
+
|
152
|
+
return true
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
# Set-up the basic disk partition table, and file systems
|
157
|
+
def self.prepare_image(device_name, image_size)
|
158
|
+
|
159
|
+
##
|
160
|
+
## Partition the disk image
|
161
|
+
##
|
162
|
+
|
163
|
+
# Calculate the size of a block that is 1% of the total
|
164
|
+
# disk space
|
165
|
+
block_size = image_size.to_f / 100.0
|
166
|
+
|
167
|
+
# Calculate the number of cylinders based on 512 sector
|
168
|
+
# size, 255 heads and 63 sectors per track
|
169
|
+
cylinders = (image_size.to_f / 255.0 / 63.0 / 512.0).floor
|
170
|
+
|
171
|
+
# Tell the user what we have done
|
172
|
+
puts "Heads: 255"
|
173
|
+
puts "Sectors/Track: 63"
|
174
|
+
puts "Cylinder: #{cylinders}"
|
175
|
+
puts
|
176
|
+
puts "Block size: #{(block_size / 1024.0 / 1024.0).floor}MB"
|
177
|
+
puts
|
178
|
+
puts "Layout"
|
179
|
+
puts "------------------------------------------"
|
180
|
+
puts "P1: #{((block_size * 10) / 1024.0 / 1024.0).floor}MB"
|
181
|
+
puts "P2: #{((block_size * 25) / 1024.0 / 1024.0).floor}MB"
|
182
|
+
puts "P3: #{((block_size * 25) / 1024.0 / 1024.0).floor}MB"
|
183
|
+
puts "P4: #{((block_size * 40) / 1024.0 / 1024.0).floor}MB"
|
184
|
+
puts
|
185
|
+
|
186
|
+
config_file = String.new
|
187
|
+
config_file << "g s63 h255 c" + cylinders.floor.to_s + "\n"
|
188
|
+
config_file << "p \t 1 \t 0x0C \t 63 \t #{((block_size * 10) / 1024.0 / 1024.0).floor}M\n"
|
189
|
+
config_file << "p \t 2 \t 0x83 \t * \t #{((block_size * 25) / 1024.0 / 1024.0).floor}M\n"
|
190
|
+
config_file << "p \t 3 \t 0x83 \t * \t #{((block_size * 25) / 1024.0 / 1024.0).floor}M\n"
|
191
|
+
config_file << "p \t 4 \t 0x83 \t * \t *\n"
|
192
|
+
config_file << "a 1\n"
|
193
|
+
|
194
|
+
cmd = "sudo fdisk -f - -i " + device_name
|
195
|
+
status = open4.spawn(cmd, :stdin => config_file)
|
196
|
+
|
197
|
+
##
|
198
|
+
## Format the partitions
|
199
|
+
##
|
200
|
+
|
201
|
+
# Create a FAT-32 file system in the boot partition
|
202
|
+
puts "Formatting #{device_name}s1 as FAT-32..."
|
203
|
+
`sudo newfs_msdos -F 32 -L PI-BOOT /dev/#{device_name}s1`
|
204
|
+
|
205
|
+
# Everything else is EXT2
|
206
|
+
puts "Formatting #{device_name}s2 as ext2..."
|
207
|
+
`sudo mkfs.ext2 -I 128 /dev/#{device_name}s2`
|
208
|
+
puts "Formatting #{device_name}s3 as ext2..."
|
209
|
+
`sudo mkfs.ext2 -I 128 /dev/#{device_name}s3`
|
210
|
+
puts "Formatting #{device_name}s4 as ext2..."
|
211
|
+
`sudo mkfs.ext2 -I 128 /dev/#{device_name}s4`
|
212
|
+
|
213
|
+
end
|
214
|
+
|
215
|
+
def self.umount_image_dirs
|
216
|
+
unless system("sudo umount /mnt/pi-boot") then
|
217
|
+
return false
|
218
|
+
end
|
219
|
+
unless system("sudo umount /mnt/pi-system1") then
|
220
|
+
return false
|
221
|
+
end
|
222
|
+
unless system("sudo umount /mnt/pi-system2") then
|
223
|
+
return false
|
224
|
+
end
|
225
|
+
unless system("sudo umount /mnt/pi-data") then
|
226
|
+
return false
|
227
|
+
end
|
228
|
+
|
229
|
+
return true
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
data/lib/pi-bake.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pi-bake
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- David Love
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-04 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description:
|
15
|
+
email: d.love@shu.ac.uk
|
16
|
+
executables:
|
17
|
+
- bake
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files:
|
20
|
+
- README.markdown
|
21
|
+
files:
|
22
|
+
- Gemfile
|
23
|
+
- Gemfile.lock
|
24
|
+
- README.markdown
|
25
|
+
- bin/bake
|
26
|
+
- lib/actions/update.rb
|
27
|
+
- lib/actions/image.rb
|
28
|
+
- lib/actions/attach.rb
|
29
|
+
- lib/actions/detach.rb
|
30
|
+
- lib/actions/info.rb
|
31
|
+
- lib/actions/unmount.rb
|
32
|
+
- lib/actions/mount.rb
|
33
|
+
- lib/actions/all.rb
|
34
|
+
- lib/fs/geom.rb
|
35
|
+
- lib/deb/scripts/wheezy
|
36
|
+
- lib/deb/functions
|
37
|
+
- lib/deb/debootstrap
|
38
|
+
- lib/pi-bake.rb
|
39
|
+
homepage: http://yoursite.example.com
|
40
|
+
licenses: []
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options:
|
43
|
+
- --main
|
44
|
+
- README.markdown
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
hash: -468393075
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 1.8.24
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: FreeBSD Image Builder for Raspbery Pi
|
68
|
+
test_files: []
|