Class: Buildizer::Image::Centos

Inherits:
Base
  • Object
show all
Defined in:
lib/buildizer/image/centos.rb

Direct Known Subclasses

Centos6, Centos7

Instance Attribute Summary collapse

Attributes inherited from Base

#docker, #instructions, #target

Instance Method Summary collapse

Methods inherited from Base

#base_image, #instruction, #name, #patch_build_dep

Constructor Details

#initialize(docker, os_version, **kwargs) ⇒ Centos

Returns a new instance of Centos.



6
7
8
9
# File 'lib/buildizer/image/centos.rb', line 6

def initialize(docker, os_version, **kwargs)
  @os_version = os_version
  super(docker, **kwargs)
end

Instance Attribute Details

#os_versionObject (readonly)

Returns the value of attribute os_version.



4
5
6
# File 'lib/buildizer/image/centos.rb', line 4

def os_version
  @os_version
end

Instance Method Details

#add_repo(id:, name:, baseurl: nil, enabled: 1, gpgcheck: nil, gpgkey: nil, exclude: nil, includepkgs: nil, mirrorlist: nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/buildizer/image/centos.rb', line 37

def add_repo(id:, name:, baseurl: nil, enabled: 1, gpgcheck: nil, gpgkey: nil, exclude: nil, includepkgs: nil, mirrorlist: nil)
  repo = "[#{id}]\
\\nname=#{name}\
\\nenabled=#{enabled}\
#{baseurl ? "\\nbaseurl=#{baseurl}" : nil}\
#{mirrorlist ? "\\nmirrorlist=#{mirrorlist}" : nil}\
#{gpgcheck ? "\\ngpgcheck=#{gpgcheck}" : nil}\
#{gpgkey ? "\\ngpgkey=#{gpgkey}" : nil}\
#{exclude ? "\\nexclude=#{exclude}" : nil}\
#{includepkgs ? "\\nincludepkgs=#{includepkgs}" : nil}"

  instruction :RUN, "bash -lec \"echo -e '#{repo}' >> /etc/yum.repos.d/CentOS-Extra-Buildizer.repo\""
end

#build_dep(build_dep) ⇒ Object



33
34
35
# File 'lib/buildizer/image/centos.rb', line 33

def build_dep(build_dep)
  instruction :RUN, "yum-builddep -y #{build_dep.to_a.join(' ')}" if build_dep.any?
end

#build_rpm_instructions(builder, target) ⇒ Object



59
60
61
62
63
64
# File 'lib/buildizer/image/centos.rb', line 59

def build_rpm_instructions(builder, target)
  ["cd ~/rpmbuild/SPECS/",
   "rpmbuild -bb #{target_spec_name(target)}",
   ["find ~/rpmbuild/RPMS -name '*.rpm' ",
    "-exec mv {} #{builder.docker.container_build_path} \\;"].join]
end

#fpm_extra_paramsObject



27
28
29
30
31
# File 'lib/buildizer/image/centos.rb', line 27

def fpm_extra_params
  Array(super).tap do |res|
    res << '--rpm-use-file-permissions'
  end
end

#fpm_output_typeObject



23
24
25
# File 'lib/buildizer/image/centos.rb', line 23

def fpm_output_type
  'rpm'
end

#native_build_instructions(builder, target) ⇒ Object



66
67
68
69
70
71
# File 'lib/buildizer/image/centos.rb', line 66

def native_build_instructions(builder, target)
  [*Array(rpmdev_setuptree_instructions(builder, target)),
   "cp #{builder.docker.container_package_archive_path} ~/rpmbuild/SOURCES/",
   "cp #{builder.docker.container_package_path.join(target_spec_name(target))} ~/rpmbuild/SPECS/",
   *Array(build_rpm_instructions(builder, target))]
end

#os_nameObject



11
12
13
# File 'lib/buildizer/image/centos.rb', line 11

def os_name
  'centos'
end

#os_package_cloud_nameObject



15
16
17
# File 'lib/buildizer/image/centos.rb', line 15

def os_package_cloud_name
  'el'
end

#os_package_cloud_versionObject



19
20
21
# File 'lib/buildizer/image/centos.rb', line 19

def os_package_cloud_version
  os_version.match(/\d+$/).to_s.to_i
end

#patch_build_instructions(builder, target) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/buildizer/image/centos.rb', line 73

def patch_build_instructions(builder, target)
  rpmchange_cmd = "rpmchange %{cmd} --specfile ~/rpmbuild/SPECS/#{target_spec_name(target)} %{args}"
  get_release_cmd = rpmchange_cmd % {cmd: :tag, args: "--name release"}
  set_release_cmd = rpmchange_cmd % {cmd: :tag, args: "--name release --value %{value}"}
  changelog_cmd = rpmchange_cmd % {
    cmd: :changelog,
    args: "--append --name \"%{name}\" --email \"%{email}\" --message \"%{message}\""
  }

  [*Array(rpmdev_setuptree_instructions(builder, target)),
   "yumdownloader --source #{target_package_spec(target)}",
   "rpm -i *.rpm",
   "gem install rpmchange",
   set_release_cmd % {value: "$(#{get_release_cmd})buildizer#{target.package_version}"},
   *target.patch.map {|patch| "cp #{patch} ~/rpmbuild/SOURCES/"},
   *target.patch.map {|patch|
     rpmchange_cmd % {cmd: :append,
                      args: "--section prep --value \"patch -p1 < %{_sourcedir}/#{patch}\""}
   },
   changelog_cmd % {name: target.maintainer,
                    email: target.maintainer_email,
                    message: 'Patch by buildizer'},
   *Array(build_rpm_instructions(builder, target))]
end

#rpmdev_setuptree_instructions(builder, target) ⇒ Object



55
56
57
# File 'lib/buildizer/image/centos.rb', line 55

def rpmdev_setuptree_instructions(builder, target)
  "rpmdev-setuptree"
end

#target_package_spec(target) ⇒ Object



98
99
100
# File 'lib/buildizer/image/centos.rb', line 98

def target_package_spec(target)
  [target.package_name, target.package_version].compact.join('-')
end

#target_spec_name(target) ⇒ Object



51
52
53
# File 'lib/buildizer/image/centos.rb', line 51

def target_spec_name(target)
  "#{target.base_package_name}.spec"
end