3 class DebpackagePackager
6 attr_accessor :plugin, :current_package, :tmpdir, :verbose, :libdir
7 attr_accessor :workingdir, :preinstall, :postinstall, :current_package_type
8 attr_accessor :current_package_data, :current_package_shortname
9 attr_accessor :current_package_fullname, :build_dir, :signature
11 def initialize(plugin, pluginpath = nil, signature = nil, verbose = false)
12 raise RuntimeError, "package 'debuild' is not installed" unless PluginPackager.build_tool?("debuild")
15 @libdir = pluginpath || "/usr/share/mcollective/plugins/mcollective/"
16 @signature = signature
23 @plugin.packagedata.each do |type, data|
25 @tmpdir = Dir.mktmpdir("mcollective_packager")
26 @current_package_type = type
27 @current_package_data = data
28 @current_package_shortname = "#{@plugin.mcname}-#{@plugin.metadata[:name]}-#{@current_package_type}"
29 @current_package_fullname = "#{@plugin.mcname}-#{@plugin.metadata[:name]}-#{@current_package_type}" +
30 "_#{@plugin.metadata[:version]}-#{@plugin.iteration}"
32 @build_dir = File.join(@tmpdir, "#{@current_package_shortname}_#{@plugin.metadata[:version]}")
48 ["control", "Makefile", "compat", "rules", "copyright", "changelog"].each do |filename|
53 create_preandpost_install
55 FileUtils.cd @build_dir do |f|
56 PluginPackager.do_quietly?(@verbose) do
58 if @signature.is_a? String
59 PluginPackager.safe_system "debuild -i -k#{@signature}"
61 PluginPackager.safe_system "debuild -i"
64 PluginPackager.safe_system "debuild -i -us -uc"
69 puts "Created package #{@current_package_fullname}"
71 raise RuntimeError, "Could not build package - #{e}"
77 FileUtils.cp(Dir.glob(File.join(@tmpdir, "*.{deb,dsc,diff.gz,orig.tar.gz,changes}")), ".")
79 raise RuntimeError, "Could not copy packages to working directory: '#{e}'"
83 def create_preandpost_install
85 raise RuntimeError, "pre-install script '#{@plugin.preinstall}' not found" unless File.exists?(@plugin.preinstall)
86 FileUtils.cp(@plugin.preinstall, File.join(@build_dir, 'debian', "#{@current_package_shortname}.preinst"))
89 if @plugin.postinstall
90 raise RuntimeError, "post-install script '#{@plugin.postinstall}' not found" unless File.exists?(@plugin.postinstall)
91 FileUtils.cp(@plugin.postinstall, File.join(@build_dir, 'debian', "#{@current_package_shortname}.postinst"))
98 File.open(File.join(@build_dir, "debian", "#{@current_package_shortname}.install"), "w") do |f|
99 @current_package_data[:files].each do |filename|
100 extended_filename = File.join(@libdir, File.expand_path(filename).gsub(/#{File.expand_path(plugin.path)}|\.\//, ''))
101 f.puts "#{extended_filename} #{File.dirname(extended_filename)}"
104 rescue Exception => e
105 raise RuntimeError, "Could not create install file - #{e}"
111 PluginPackager.do_quietly?(@verbose) do
112 Dir.chdir(@tmpdir) do
113 PluginPackager.safe_system "tar -Pcvzf #{File.join(@tmpdir,"#{@current_package_shortname}_#{@plugin.metadata[:version]}.orig.tar.gz")} #{@current_package_shortname}_#{@plugin.metadata[:version]}"
116 rescue Exception => e
117 raise "Could not create tarball - #{e}"
121 def create_file(filename)
123 file = ERB.new(File.read(File.join(File.dirname(__FILE__), "templates", "debian", "#{filename}.erb")), nil, "-")
124 File.open(File.join(@build_dir, "debian", filename), "w") do |f|
125 f.puts file.result(binding)
127 rescue Exception => e
128 raise RuntimeError, "could not create #{filename} file - #{e}"
132 def prepare_tmpdirs(data)
133 data[:files].each do |file|
134 @targetdir = File.join(@build_dir, @libdir, File.dirname(File.expand_path(file)).gsub(@plugin.target_path, ""))
135 FileUtils.mkdir_p(@targetdir) unless File.directory? @targetdir
136 FileUtils.cp_r(file, @targetdir)
139 FileUtils.mkdir_p(File.join(@build_dir, "debian"))
143 FileUtils.rm_r @tmpdir if File.directory? @tmpdir