class Dodebui::Distribution
handle distribution releases
Attributes
cli[R]
codename[R]
os[R]
Public Class Methods
new(name, cli)
click to toggle source
# File lib/dodebui/distribution.rb, line 26 def initialize(name, cli) @cli = cli # convert string if name.is_a? String split = name.split(':') os = split[0].to_sym codename = split[1].to_sym end if (!DISTRIBUTIONS.key? os) || (!DISTRIBUTIONS[os].include? codename) fail "Operating system #{os} with codename #{codename} not found" end @os = os @codename = codename end
Public Instance Methods
apt_proxy()
click to toggle source
# File lib/dodebui/distribution.rb, line 93 def apt_proxy ( 'echo ' \ '"Acquire::http::Proxy ' \ '\"%s\";" ' \ '> ' \ '/etc/apt/apt.conf.d/01proxy' ) % @cli.apt_proxy end
base_image_name()
click to toggle source
# File lib/dodebui/distribution.rb, line 179 def base_image_name "#{@os}:#{@codename}" end
build()
click to toggle source
# File lib/dodebui/distribution.rb, line 171 def build @build ||= Build.new self end
codename_int()
click to toggle source
# File lib/dodebui/distribution.rb, line 50 def codename_int DISTRIBUTIONS[os].index(codename) + 1 end
codename_str()
click to toggle source
# File lib/dodebui/distribution.rb, line 46 def codename_str format('%02d', codename_int) end
create_image()
click to toggle source
# File lib/dodebui/distribution.rb, line 153 def create_image logger.info("Start building a new image from #{base_image_name}") # build docker build directory Dir.mktmpdir do |dir| # Write docker file dockerfile_path = File.join(dir, 'Dockerfile') File.open(dockerfile_path, 'w') do |file| file.write(create_image_dockerfile_contents) end create_image_copy_dep_resolver(dir) # build image create_image_build(dir) end end
create_image_build(dir)
click to toggle source
# File lib/dodebui/distribution.rb, line 137 def create_image_build(dir) image = Docker::Image.build_from_dir( dir, nocache: true ) logger.info( "Finished building a new image #{image_name} from #{base_image_name}" ) image.tag( repo: repo_name, tag: @codename.to_s, force: true ) end
create_image_copy_dep_resolver(dir)
click to toggle source
# File lib/dodebui/distribution.rb, line 128 def create_image_copy_dep_resolver(dir) pbuilder_files.each do |file| src = File.join(share_path, 'pbuilder', file) dest = File.join(dir, file) logger.debug("Copy file from #{src} to #{dest}") FileUtils.cp src, dest end end
create_image_dockerfile_contents()
click to toggle source
# File lib/dodebui/distribution.rb, line 103 def create_image_dockerfile_contents dockerfile = "FROM #{base_image_name}\n" # append proxy if needed dockerfile += "RUN #{apt_proxy}\n" unless @cli.apt_proxy.nil? dockerfile += ( "ENV DEBIAN_FRONTEND=noninteractive\n" \ "RUN apt-get update && \\ \n" \ " apt-get -y dist-upgrade && \\ \n" \ " apt-get -y install wget curl build-essential aptitude \n" \ "RUN mkdir -p #{pbuilder_dir}\n" ) # add pbuilder dep resolver pbuilder_files.each do |file| dockerfile += "ADD #{file} #{pbuilder_dir}/#{file}\n" end # make dep resolver executable dockerfile += 'RUN chmod +x ' dockerfile += "#{pbuilder_dir}/pbuilder-satisfydepends-aptitude\n" dockerfile end
ensure_image_updated()
click to toggle source
# File lib/dodebui/distribution.rb, line 59 def ensure_image_updated # Test if image_name exists @image = Docker::Image.get(image_name) if image_age(@image) > MAX_IMAGE_AGE logger.info "Image #{image_name} is outdated renew it" @image = create_image end rescue Docker::Error::NotFoundError @image = create_image end
image_age(i)
click to toggle source
# File lib/dodebui/distribution.rb, line 54 def image_age(i) age = DateTime.now - DateTime.parse(i.info['Created']) (age * 24 * 60 * 60).to_i end
image_name()
click to toggle source
# File lib/dodebui/distribution.rb, line 183 def image_name "#{repo_name}:#{@codename}" end
logger()
click to toggle source
# File lib/dodebui/distribution.rb, line 42 def logger @cli.logger end
pbuilder_dir()
click to toggle source
# File lib/dodebui/distribution.rb, line 89 def pbuilder_dir '/usr/lib/pbuilder' end
pbuilder_files()
click to toggle source
# File lib/dodebui/distribution.rb, line 70 def pbuilder_files [ 'pbuilder-satisfydepends-aptitude', 'pbuilder-satisfydepends-checkparams', 'pbuilder-satisfydepends-funcs' ] end
repo_name()
click to toggle source
# File lib/dodebui/distribution.rb, line 175 def repo_name "dodebui_#{@os}" end