Class: BoxGrinder::FedoraPlugin

Inherits:
RPMBasedOSPlugin show all
Defined in:
lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb

Constant Summary collapse

SUPPORTED_VERSIONS =
["13", "14", "15", "16", "17", "rawhide"]

Instance Attribute Summary

Attributes inherited from BasePlugin

#deliverables, #plugin_info

Instance Method Summary collapse

Methods inherited from RPMBasedOSPlugin

#add_repos, #apply_root_password, #build_with_appliance_creator, #change_configuration, #cleanup_after_appliance_creator, #disable_firewall, #execute_appliance_creator, #execute_post, #install_files, #install_repos, #recreate_kernel_image, #recreate_rpm_database, #set_label_for_swap_partitions, #set_motd, #substitute_vars, #use_labels_for_partitions

Methods inherited from BasePlugin

#current_platform, #deliverables_exists?, #init, #initialize, #is_supported_os?, #is_supported_platform?, #merge_plugin_config, #read_plugin_config, #register_deliverable, #register_supported_os, #register_supported_platform, #run, #set_default_config_value, #subtype, #supported_oses, #validate_plugin_config

Methods included from Plugins

#plugin

Constructor Details

This class inherits a constructor from BoxGrinder::BasePlugin

Instance Method Details

#after_initObject



31
32
33
34
35
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 31

def after_init
  super
  register_supported_os('fedora', SUPPORTED_VERSIONS)
  set_default_config_value('PAE', true)
end

#change_runlevel(guestfs) ⇒ Object



96
97
98
99
100
101
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 96

def change_runlevel(guestfs)
  @log.debug "Changing runlevel to multi-user non-graphical..."
  guestfs.rm("/etc/systemd/system/default.target")
  guestfs.ln_sf("/lib/systemd/system/multi-user.target", "/etc/systemd/system/default.target")
  @log.debug "Runlevel changed."
end

#disable_biosdevname(guestfs) ⇒ Object



85
86
87
88
89
90
91
92
93
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 85

def disable_biosdevname(guestfs)
  @log.debug "Disabling biosdevname..."
  if guestfs.exists("/boot/grub2/grub.cfg") != 0
    guestfs.write("/etc/default/grub", "GRUB_CMDLINE_LINUX=\"quiet rhgb biosdevname=0\"\n")
    guestfs.sh("cd / && grub2-mkconfig -o /boot/grub2/grub.cfg")
  end
  guestfs.sh('sed -i "s/kernel\(.*\)/kernel\1 biosdevname=0/g" /boot/grub/grub.conf') if guestfs.exists("/boot/grub/grub.conf") != 0
  @log.debug "Biosdevname disabled."
end

#disable_netfs(guestfs) ⇒ Object



104
105
106
107
108
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 104

def disable_netfs(guestfs)
  @log.debug "Disabling network filesystem mounting..."
  guestfs.sh("chkconfig netfs off")
  @log.debug "Network filesystem mounting disabled."
end

#execute(appliance_definition_file) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 37

def execute(appliance_definition_file)
  normalize_packages(@appliance_config.packages)

  @repos = {}

  @plugin_info[:versions].each do |version|
    if version.match(/\d+/)
      @repos[version] = {
          "base" => {"mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-#{version}&arch=#BASE_ARCH#"},
          "updates" => {"mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f#{version}&arch=#BASE_ARCH#"}
      }
    else
      @repos[version] = {"base" => {"mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=#{version}&arch=#BASE_ARCH#"}}
    end
  end

  build_with_appliance_creator(appliance_definition_file, @repos) do |guestfs, guestfs_helper|
    if @appliance_config.os.version >= "15"
      disable_biosdevname(guestfs)
      change_runlevel(guestfs)
      disable_netfs(guestfs) if @appliance_config.os.version < "17"
      link_mtab(guestfs)
    end
  end
end


111
112
113
114
115
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 111

def link_mtab(guestfs)
  @log.debug "Linking /etc/mtab to /proc/self/mounts..."
  guestfs.ln_sf("/proc/self/mounts", "/etc/mtab")
  @log.debug "/etc/mtab linked."
end

#normalize_packages(packages) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb', line 63

def normalize_packages(packages)
  # https://issues.jboss.org/browse/BGBUILD-89
  packages << '@core'
  packages << "system-config-firewall-base"
  packages << "dhclient"

  packages.delete('kernel')
  packages.delete('kernel-PAE')

  if @appliance_config.is64bit?
    packages << "kernel"
  else
    @plugin_config['PAE'] ? packages << "kernel-PAE" : packages << "kernel"
  end

  if @appliance_config.os.version >= "16"
    packages << "grub2"
  else
    packages << "grub"
  end
end