require 'capistrano/addins'
default_ubuntu_packages = %w[
tmux htop vim-nox software-properties-common curl wget unattended-upgrades bash-completion git lsof ufw ntp
]
set(:ubuntu_packages, []) set(:ubuntu_software_sources, [])
namespace :ubuntu do
task :update_sources do on roles(:all) do |server| sources = server.roles.map { |role| fetch(:"ubuntu_software_sources_for_#{role}",[])}.flatten(1) + fetch(:ubuntu_software_sources) sources.each do |source| if source.is_a? Array execute "wget --quiet -O - #{source.last} | sudo apt-key add -" source = source.first end sudo "apt-add-repository", "-y", source end end end task :install_packages do on roles(:all) do |server| packages = server.roles.map { |role| fetch(:"ubuntu_packages_for_#{role}",[])}.flatten + fetch(:ubuntu_packages) + default_ubuntu_packages packages.uniq! sudo "apt-get", "-q", "-y", "update" sudo "apt-get", "-q", "-y", "--force-yes","install", *packages.flatten sudo "apt-get", "-q", "-y", "--force-yes","autoremove" end end task :unattended_upgrades do on roles(:all) do sudo "yes | sudo dpkg-reconfigure -plow unattended-upgrades" file = StringIO.new file.puts 'APT::Periodic::Update-Package-Lists "1";' file.puts 'APT::Periodic::Unattended-Upgrade "1";' file.rewind upload_as :root, file, "/etc/apt/apt.conf.d/20auto-upgrades" file = StringIO.new file.puts <<-EOS
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates";
};
EOS file.rewind upload_as :root, file, "/etc/apt/apt.conf.d/50unattended-upgrades" end end
end
before “ubuntu:install_packages”, “ubuntu:update_sources” after “ubuntu:install_packages”, “ubuntu:unattended_upgrades” before “deploy:starting”, “ubuntu:install_packages”