Module: Tebako::LayeredPackage
- Defined in:
- lib/tebako/layered_package.rb
Overview
Writes application packages made from independently reusable DwarFS images.
Defined Under Namespace
Classes: InspectedLayer, Inspection, Layer
Constant Summary
collapse
- MAGIC =
Tebako::Generated::LayeredFormat::MAGIC
Class Method Summary
collapse
Class Method Details
.inspect(path) ⇒ Object
53
54
55
|
# File 'lib/tebako/layered_package.rb', line 53
def inspect(path)
inspect_bytes(File.binread(path))
end
|
.inspect_bytes(package) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/tebako/layered_package.rb', line 57
def inspect_bytes(package)
raise ArgumentError, "Package is too small for a layered footer" if package.bytesize <
raise ArgumentError, "Package is not a supported layered package" unless package.end_with?(MAGIC)
manifest_size = package.byteslice(-, 8).unpack1("Q<")
= package.bytesize -
raise ArgumentError, "Invalid layer manifest size" if manifest_size >
manifest_offset = - manifest_size
layers = decode_manifest(package, manifest_offset, )
Inspection.new(
format: "layered",
major_version: Tebako::Generated::LayeredFormat::MAJOR_VERSION,
minor_version: Tebako::Generated::LayeredFormat::MINOR_VERSION,
descriptor_size: layers.map(&:offset).min,
byte_size: package.bytesize,
sha256: Digest::SHA256.hexdigest(package),
layers: layers
)
end
|
.write(output, descriptor:, layers:) ⇒ Object
43
44
45
46
47
48
49
50
51
|
# File 'lib/tebako/layered_package.rb', line 43
def write(output, descriptor:, layers:)
validate_layers(layers)
FileUtils.mkdir_p(File.dirname(File.expand_path(output)))
temporary = "#{output}.#{Process.pid}.tmp"
write_package(temporary, descriptor, layers)
File.rename(temporary, output)
ensure
FileUtils.rm_f(temporary) if temporary
end
|