Skip to content

Instantly share code, notes, and snippets.

@andis
Last active August 29, 2015 14:21
Show Gist options
  • Save andis/30aeb2e386f8120c485a to your computer and use it in GitHub Desktop.
Save andis/30aeb2e386f8120c485a to your computer and use it in GitHub Desktop.
Add apt repos for use with wright (WIP)
# Add an apt repo from wright scripts.
#
# Example:
#
# AddAptRepo.new(
# self,
# name: 'docker',
# key_id: '36A1D7869245C8950F966E92D8576A8BA88D21E9',
# raw_line: "deb https://get.docker.com/ubuntu docker main"
# ).call
#
class AddAptRepo
attr_reader :wright, :name, :raw_line, :key_id, :keyserver
def initialize(wright, opts)
@wright = wright
@name = opts.fetch(:name)
@raw_line = opts.fetch(:raw_line)
@key_id = opts.fetch(:key_id)
@keyserver = opts.fetch(:keyserver, 'hkp://keyserver.ubuntu.com:80')
end
public
def call
create_keyfile
create_listfile
end
def create_keyfile
wright.directory(File.dirname gpg_key_filename)
wright.file(gpg_key_filename) { |f| f.mode = '444' }
File.size(gpg_key_filename) > 0 or
fetch_gpg_key
end
def create_listfile
wright.file list_filename do |f|
f.content = raw_line+"\n"
f.mode = '444'
f.on_update = -> { system 'apt-get', 'update' }
end
end
def gpg_key_filename
"/etc/apt/trusted.gpg.d/#{name}.gpg"
end
def fetch_gpg_key
cmd = [
'apt-key',
'--keyring', gpg_key_filename,
'adv',
'--keyserver', keyserver,
'--recv-keys', key_id
]
system(*cmd) or fail("Error fetching key #{key_id}")
end
def list_filename
"/etc/apt/sources.list.d/#{name}.list"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment