# =apt.rb: Debian 'apt' Installer library # Capistrano plugin module to install and manage apt packages # # ---- # Copyright (c) 2007 Neil Wilson, Aldur Systems Ltd # # Licensed under the GNU Public License v2. No warranty is provided. require 'capistrano' # = Purpose # Apt is a Capistrano plugin module providing a set of methods # that invoke the *apt* package manager (as used in Debian and Ubuntu) # # Installs within Capistrano as the plugin _apt_. # # =Usage # # require 'vmbuilder_plugins/apt' # # Prefix all calls to the library with apt. # module Apt # Default apt-get command - reduces any interactivity to the minimum. APT_GET="DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get" UPDATE = { :has_been_run => false } # Run the apt install program across the package list in 'packages'. # Select those packages referenced by :base and the +version+ # of the distribution you want to use. def install(packages, version, options={}) update :once_only => true special_options="--allow-unauthenticated" if version != :stable send(run_method, %{ sh -c "#{APT_GET} -qyu --force-yes #{special_options.to_s} install #{package_list(packages, version)}" }, options) end # Run an apt clean def clean(options={}) send(run_method, %{sh -c "#{APT_GET} -qy clean"}, options) end # Run an apt autoclean def autoclean(options={}) send(run_method, %{sh -c "#{APT_GET} -qy autoclean"}, options) end # Run an apt distribution upgrade def dist_upgrade(options={}) update :once_only => true send(run_method, %{sh -c "#{APT_GET} -qy dist-upgrade"}, options) end # Run an apt upgrade. Use dist_upgrade instead if you want to upgrade # the critical base packages. def upgrade(options={}) update :once_only => true send(run_method, %{sh -c "#{APT_GET} -qy upgrade"}, options) end # Run an apt update. def update(options={}) if options[:once_only] && UPDATE[:has_been_run] return false else send(run_method, %{sh -c "#{APT_GET} -qy update"}, options) UPDATE[:has_been_run] = true end end # RPM package install via alien def rpm_install(packages, options={}) install({:base => %w(wget alien) }, :base) send(run_method, "wget -Ncq #{packages.join(' ')}", options) files=packages.collect { |package| File.basename(package) } send(run_method, "alien -i #{files.join(' ')}", options) end # Clear the source list and package cache def clear_cache(options={}) clean cmd="rm -f /var/cache/apt/*.bin /var/lib/apt/lists/*_* /var/lib/apt/lists/partial/*" send(run_method, cmd, options) end private # Provides a string containing all the package names in the base #list plus those in +version+. def package_list(packages, version) Array(packages[:base]).join(' ') + ' ' + Array(packages[version]).join(' ') end end Capistrano.plugin :apt, Apt # vim: nowrap sw=2 sts=2 ts=8 ff=unix ft=ruby: