class Dock0::Image

An Image is a rootfs for a system

Public Instance Methods

apply_overlay() click to toggle source
# File lib/dock0/image.rb, line 48
def apply_overlay
  puts "Applying overlay from #{@paths[:overlay]}"
  overlay_path = @paths[:overlay] + '/.'
  FileUtils.cp_r overlay_path, @paths[:build]
end
default_config() click to toggle source
# File lib/dock0/image.rb, line 7
def default_config # rubocop:disable Metrics/MethodLength
  {
    paths: {
      build_file: './root.fs',
      build: './build',
      package_list: './packages',
      overlay: './overlay',
      scripts: './scripts',
      output: './root.fs.sfs'
    },
    fs: {
      size: 512,
      type: 'ext4',
      flags: '-F'
    }
  }
end
easy_mode() click to toggle source
# File lib/dock0/image.rb, line 73
def easy_mode
  cleanup @paths.values_at(:build_file, :build, :output)
  prepare_root
  install_packages
  apply_overlay
  run_scripts
  run_commands
  finalize
  cleanup @paths.values_at(:build_file, :build)
end
finalize() click to toggle source
# File lib/dock0/image.rb, line 66
def finalize
  puts 'Packing up root FS'
  run "umount #{@paths[:build]}"
  FileUtils.rm_f @paths[:output]
  run "mksquashfs #{@paths[:build_file]} #{@paths[:output]}"
end
install_packages() click to toggle source
# File lib/dock0/image.rb, line 41
def install_packages
  File.read(@paths[:package_list]).split("\n").each do |package|
    puts "Installing #{package}"
    run "pacstrap -G -M #{@paths[:build]} #{package}"
  end
end
prepare_root() click to toggle source
# File lib/dock0/image.rb, line 29
def prepare_root
  build_file = @paths[:build_file]
  filesystem = @config[:fs]
  puts "Making build FS at #{build_file}"
  run "dd if=/dev/zero of=#{build_file} bs=1MB count=#{filesystem[:size]}"
  mkfs = "mkfs.#{filesystem[:type]} #{filesystem[:flags]}"
  run "#{mkfs} #{build_file}"
  puts "Mounting FS at #{@paths[:build]}"
  FileUtils.mkdir_p @paths[:build]
  run "mount #{build_file} #{@paths[:build]}"
end
run_chroot(cmd) click to toggle source
# File lib/dock0/image.rb, line 25
def run_chroot(cmd)
  run "arch-chroot #{@paths[:build]} #{cmd}"
end
run_commands() click to toggle source
# File lib/dock0/image.rb, line 54
def run_commands
  cmds = @config.fetch(:commands, {})
  cmds.fetch(:chroot, []).each do |cmd|
    puts "Running #{cmd} in chroot"
    run_chroot cmd
  end
  cmds.fetch(:host, []).each do |cmd|
    puts "Running #{cmd} on host"
    run cmd
  end
end