Class | BoxGrinder::LinuxHelper |
In: |
lib/boxgrinder-build/helpers/linux-helper.rb
lib/boxgrinder-build/helpers/linux-helper.rb |
Parent: | Object |
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 56 56: def initialize(options = {}) 57: @log = options[:log] || LogHelper.new 58: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 56 56: def initialize(options = {}) 57: @log = options[:log] || LogHelper.new 58: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 113 113: def kernel_image_name(guestfs) 114: guestfs.sh("ls -1 /boot | grep initramfs | wc -l").chomp.strip.to_i > 0 ? "initramfs" : "initrd" 115: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 113 113: def kernel_image_name(guestfs) 114: guestfs.sh("ls -1 /boot | grep initramfs | wc -l").chomp.strip.to_i > 0 ? "initramfs" : "initrd" 115: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 94 94: def kernel_version(guestfs) 95: kernel_versions = guestfs.ls("/lib/modules") 96: 97: # By default use the latest available kernel... 98: version = RPMVersion.new.newest(kernel_versions) 99: 100: # ...but prefer xen or PAE kernel over others 101: if kernel_versions.size > 1 102: kernel_versions.each do |v| 103: if v.match(/xen$/) or v.match(/PAE$/) 104: version = v 105: break 106: end 107: end 108: end 109: 110: version 111: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 94 94: def kernel_version(guestfs) 95: kernel_versions = guestfs.ls("/lib/modules") 96: 97: # By default use the latest available kernel... 98: version = RPMVersion.new.newest(kernel_versions) 99: 100: # ...but prefer xen or PAE kernel over others 101: if kernel_versions.size > 1 102: kernel_versions.each do |v| 103: if v.match(/xen$/) or v.match(/PAE$/) 104: version = v 105: break 106: end 107: end 108: end 109: 110: version 111: end
Returns valid array of sorted mount points
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 67 67: def partition_mount_points(partitions) 68: partitions.keys.sort do |a, b| 69: a_count = a.count('/') 70: b_count = b.count('/') 71: 72: if a_count > b_count 73: v = 1 74: else 75: if a_count < b_count 76: v = -1 77: else 78: if a.length == b.length 79: v = a <=> b 80: else 81: v = a.length <=> b.length 82: end 83: end 84: end 85: 86: # This forces having swap partition at the end of the disk 87: v = 1 if a_count == 0 88: v = -1 if b_count == 0 89: 90: v 91: end 92: end
Returns valid array of sorted mount points
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 67 67: def partition_mount_points(partitions) 68: partitions.keys.sort do |a, b| 69: a_count = a.count('/') 70: b_count = b.count('/') 71: 72: if a_count > b_count 73: v = 1 74: else 75: if a_count < b_count 76: v = -1 77: else 78: if a.length == b.length 79: v = a <=> b 80: else 81: v = a.length <=> b.length 82: end 83: end 84: end 85: 86: # This forces having swap partition at the end of the disk 87: v = 1 if a_count == 0 88: v = -1 if b_count == 0 89: 90: v 91: end 92: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 117 117: def recreate_kernel_image(guestfs, modules = []) 118: kernel_version = kernel_version(guestfs) 119: 120: raise "Cannot find valid kernel installs in the appliance. Make sure you have your kernel installed in '/lib/modules'." if kernel_version.nil? 121: 122: kernel_image_name = kernel_image_name(guestfs) 123: 124: if guestfs.exists("/sbin/dracut") != 0 125: command = "/sbin/dracut -f -v --add-drivers #{modules.join(' ')}" 126: else 127: drivers_argument = "" 128: modules.each { |mod| drivers_argument << " --preload=#{mod}" } 129: 130: command = "/sbin/mkinitrd -f -v#{drivers_argument}" 131: end 132: 133: @log.trace "Additional modules to preload in kernel: #{modules.join(', ')}" 134: 135: @log.debug "Recreating kernel image for #{kernel_version} kernel..." 136: guestfs.sh("#{command} /boot/#{kernel_image_name}-#{kernel_version}.img #{kernel_version}") 137: @log.debug "Kernel image recreated." 138: end
# File lib/boxgrinder-build/helpers/linux-helper.rb, line 117 117: def recreate_kernel_image(guestfs, modules = []) 118: kernel_version = kernel_version(guestfs) 119: 120: raise "Cannot find valid kernel installs in the appliance. Make sure you have your kernel installed in '/lib/modules'." if kernel_version.nil? 121: 122: kernel_image_name = kernel_image_name(guestfs) 123: 124: if guestfs.exists("/sbin/dracut") != 0 125: command = "/sbin/dracut -f -v --add-drivers #{modules.join(' ')}" 126: else 127: drivers_argument = "" 128: modules.each { |mod| drivers_argument << " --preload=#{mod}" } 129: 130: command = "/sbin/mkinitrd -f -v#{drivers_argument}" 131: end 132: 133: @log.trace "Additional modules to preload in kernel: #{modules.join(', ')}" 134: 135: @log.debug "Recreating kernel image for #{kernel_version} kernel..." 136: guestfs.sh("#{command} /boot/#{kernel_image_name}-#{kernel_version}.img #{kernel_version}") 137: @log.debug "Kernel image recreated." 138: end