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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/usr/bin/env ruby
#
require "optparse"
require "ostruct"
require "erb"
def main(args)
settings = OpenStruct.new
opts = OptionParser.new do |opts|
opts.banner = "Usage: #{$0} [options]"
opts.on("-p PACKAGEFILE", "--package PACKAGEFILE",
"The package file to manage") do |path|
if path =~ /^\//
settings.package_path = path
else
settings.package_path = "#{Dir.pwd}/#{path}"
end
end
opts.on("-n PACKAGENAME", "--name PACKAGENAME",
"What name to give to the package") do |name|
settings.package_name = name
end
opts.on("-v VERSION", "--version VERSION",
"version to give the package") do |version|
settings.version = version
end
opts.on("-d DEPENDENCY", "--depends DEPENDENCY") do |dep|
settings.dependencies ||= []
settings.dependencies << dep
end
opts.on("-a ARCHITECTURE", "--architecture ARCHITECTURE") do |arch|
settings.arch = arch
end
opts.on("-m MAINTAINER", "--maintainer MAINTAINER") do |maint|
settings.maintainer = maintainer
end
opts.on("-C DIRECTORY", "Change directory before searching for files") do |dir|
settings.chdir = dir
end
end # OptionParser
opts.parse!(args)
# Actions:
# create package
#
# files: add, remove
# scripts: add, remove
# metadata: set, add, remove
if !settings.package_path
$stderr.puts "No package file given to manage. Give with -p PACKAGEFILE"
return 1
end
package_path = settings.package_path
package_path.gsub!(/VERSION/, eval('"#{version}-#{package_iteration}"', metadata))
package_path.gsub!(/ARCH/, eval("architecture", metadata))
type = package_path.split(".")[-1]
if type != "deb"
$stderr.puts "Unsupported package type '#{type}'"
return 1
end
paths = args
mkbinding = lambda do
package = settings.package_name
version = settings.version
package_iteration = 1
maintainer = "<#{ENV["USER"]}>"
category = "X11"
summary = "sample summary"
architecture = %x(uname -m).chomp
url = "http://www.semicomplete.com/"
dependencies = []
return binding
end
metadata = mkbinding.call
builddir = "#{Dir.pwd}/build-#{type}-#{File.basename(package_path)}"
Dir.mkdir(builddir) if !File.directory?(builddir)
template = File.new("#{File.dirname(__FILE__)}/templates/#{type}.erb").read()
Dir.chdir(settings.chdir || ".") do
puts Dir.pwd
system(*["tar","-zcf", "#{builddir}/data.tar.gz", *paths])
# Generate md5sums
md5sums = []
paths.each do |path|
md5sums += %x{find #{path} -type f -print0 | xargs -0 md5sum}.split("\n")
end
File.open("#{builddir}/md5sums", "w") { |f| f.puts md5sums.join("\n") }
# Generate 'control' file
control = ERB.new(template).result(metadata)
File.open("#{builddir}/control", "w") { |f| f.puts control }
end
# create control.tar.gz
Dir.chdir(builddir) do
system("tar -zcf control.tar.gz control md5sums")
end
Dir.chdir(builddir) do
# create debian-binary
File.open("debian-binary", "w") { |f| f.puts "2.0" }
end
Dir.chdir(builddir) do
system("ar -qc #{package_path} debian-binary control.tar.gz data.tar.gz")
end
end
ret = main(ARGV)
exit(ret != nil ? ret : 0)
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
|