From 068bbc95b6d0df18294a0d6aa66ee72448f99e0e Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sat, 26 Oct 2019 22:21:34 +0200 Subject: [PATCH] program-checks (dependencies to qemu, kpartx, ...) --- lib/to_lvm_xfs/base.rb | 27 ++++++++++++++++++++++++--- lib/to_lvm_xfs/raspbian.rb | 5 ++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/to_lvm_xfs/base.rb b/lib/to_lvm_xfs/base.rb index e0f80b0..aaa9b42 100644 --- a/lib/to_lvm_xfs/base.rb +++ b/lib/to_lvm_xfs/base.rb @@ -9,6 +9,15 @@ require 'to_lvm_xfs/structs' class ProgrammError < RuntimeError end +class Pathname + def self.which cmd + ENV['PATH'].each do |path| + path = Pathname.new( path) + cmd + return path if path.executable? + end + end +end + class Base def self.run *args, &exe new( *args).instance_eval &exe @@ -96,6 +105,11 @@ class Base STDERR.print "\e[0m" end + def check_program cmd + path = Pathname.which cmd + raise Error, "#{cmd} not found." unless path&.executable? + end + attr_reader :sh, :mounted, :looped, :base, :dest, :vgname def initialize *args OptionParser.new do |opts| @@ -103,6 +117,12 @@ class Base opts.parse! args end + %w[kpartx parted rsync lvm lvs pvs vgs mkfs.xfs mkfs.vfat dmsetup losetup lsblk blkid].each do |cmd| + check_program cmd + end + @qemu_bin_src = check_program 'qemu-arm-static' + raise Error, "@qemu-arm-static not found. Please install qemu-user-static" unless @qemu_bin_srci&.executable? + if :ask == @password v = b = nil require 'io/console' @@ -127,6 +147,8 @@ class Base @base = Image.new self, 'base', image: @baseimage @dest = Image.new self, 'dest', image: @destination + @qemu_bin = dest.root.join 'usr/bin/qemu-arm-static' + STDERR.print <