Class: RepoMgr::Backend::Deb

Inherits:
Object
  • Object
show all
Defined in:
lib/repo_mgr/backends/deb.rb

Overview

deb backend handler implemented on top of aptly

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Deb

Returns a new instance of Deb.



11
12
13
14
# File 'lib/repo_mgr/backends/deb.rb', line 11

def initialize(config)
  @config = config
  init_aptly_config
end

Instance Method Details

#add_pkg(repo, pkg) ⇒ Object



48
49
50
51
52
# File 'lib/repo_mgr/backends/deb.rb', line 48

def add_pkg(repo, pkg)
  sign_pkg repo, pkg
  repo_add repo, pkg
  repo_publish repo
end

#add_repo(name) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/repo_mgr/backends/deb.rb', line 16

def add_repo(name)
  aptly "repo create #{name}" unless aptly_repos.include? name

  repo_config = @config.cfg[:repos][name]

  @aptly_config['FileSystemPublishEndpoints'][name] = {
    rootDir: repo_config[:path],
    linkMethod: 'copy',
    verifyMethod: 'md5'
  }

  save_aptly_config
end

#check_sig(pkg, allow_fail: false) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/repo_mgr/backends/deb.rb', line 59

def check_sig(pkg, allow_fail: false)
  out, status = Open3.capture2e "dpkg-sig --verify #{pkg}"

  return out if status.exitstatus.zero? || allow_fail

  Tools.error "unable to check package signature for #{pkg} - "\
              "dpkg-sig returned:\n#{out}"
end

#dl_repo(options) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/repo_mgr/backends/deb.rb', line 30

def dl_repo(options)
  name = options[:repo]
  url = options[:url]
  keyring = options[:keyring]

  if keyring.nil?
    Tools.error 'you must specify a keyring file for deb repo'
  end

  keyring = "/usr/share/keyrings/#{keyring}"

  aptly "-keyring=#{keyring} mirror create #{name} #{url} stable main"
  aptly "-keyring=#{keyring} mirror update #{name}", :output
  aptly "repo import #{name} #{name} Name"
  aptly "mirror drop #{name}"
  aptly("repo search #{name}", :return).split.map { |e| "#{e}.deb" }
end

#export(repo) ⇒ Object



93
94
95
# File 'lib/repo_mgr/backends/deb.rb', line 93

def export(repo)
  repo_publish repo
end

#rebuild_pkg_list(repo) ⇒ Object



87
88
89
90
91
# File 'lib/repo_mgr/backends/deb.rb', line 87

def rebuild_pkg_list(repo)
  aptly("-with-packages repo search #{repo}", :return).split.map do |e|
    "#{e}.deb"
  end
end

#remove_pkg(repo, pkg) ⇒ Object



54
55
56
57
# File 'lib/repo_mgr/backends/deb.rb', line 54

def remove_pkg(repo, pkg)
  repo_rm repo, pkg
  repo_publish repo
end

#sign_pkg(repo, pkg) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/repo_mgr/backends/deb.rb', line 68

def sign_pkg(repo, pkg)
  signature = check_sig pkg, allow_fail: true

  unless signature[-6, 5] == 'NOSIG'
    return puts "-- dpkg-sig returned:\n#{signature.split.first}"
  end

  if @config.cfg[:repos][repo].nil?
    Tools.error "unable to find #{repo} repository"
  end

  keyid = @config.cfg[:repos][repo][:keyid]
  out, status = Open3.capture2e "dpkg-sig -k #{keyid} -s builder #{pkg}"

  return if status.exitstatus.zero?

  Tools.error "unable to sign #{pkg} - dpkg-sig returned:\n#{out}"
end