It used to be necessary to specify a DTB manually back in very old versions of qemu on armv7. However qemu has constructed a correct DTB for a very long time and it's almost certainly a mistake if you are using the supermin --dtb parameter to override that. (For this reason, supermin will intentionally give an error now if you try to use --dtb). libguestfs stopped using this parameter in commit af762e43424382d895d3a10aa6632adc601fdbad (2015-03-05). --- src/build.ml | 5 ++-- src/build.mli | 2 +- src/kernel.ml | 70 +------------------------------------------------------- src/kernel.mli | 9 +++----- src/prepare.ml | 2 +- src/prepare.mli | 2 +- src/supermin.ml | 7 ++---- src/supermin.pod | 44 +++-------------------------------- 8 files changed, 14 insertions(+), 127 deletions(-) diff --git a/src/build.ml b/src/build.ml index 83a0d98..43aedc4 100644 --- a/src/build.ml +++ b/src/build.ml @@ -58,7 +58,7 @@ and string_of_file_content = function | Excludefiles -> "excludefiles" let rec build debug - (copy_kernel, dtb_wildcard, format, host_cpu, + (copy_kernel, format, host_cpu, packager_config, tmpdir, use_installed, size, include_packagelist) inputs outputdir = @@ -222,11 +222,10 @@ let rec build debug | Ext2 -> let kernel = outputdir // "kernel" - and dtb = outputdir // "dtb" and appliance = outputdir // "root" and initrd = outputdir // "initrd" in let kernel_version, modpath = - Kernel.build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb in + Kernel.build_kernel debug host_cpu copy_kernel kernel in Ext2.build_ext2 debug basedir files modpath kernel_version appliance size packagelist_file; Ext2_initrd.build_initrd debug tmpdir modpath initrd diff --git a/src/build.mli b/src/build.mli index 6feb4f8..0f8b956 100644 --- a/src/build.mli +++ b/src/build.mli @@ -18,6 +18,6 @@ (** Implements the [--build] subcommand. *) -val build : int -> (bool * string option * Types.format * string * string option * string * bool * int64 option * bool) -> string list -> string -> unit +val build : int -> (bool * Types.format * string * string option * string * bool * int64 option * bool) -> string list -> string -> unit (** [build debug (args...) inputs outputdir] performs the [supermin --build] subcommand. *) diff --git a/src/kernel.ml b/src/kernel.ml index b4e89da..5d1ae66 100644 --- a/src/kernel.ml +++ b/src/kernel.ml @@ -39,7 +39,7 @@ let patt_of_cpu host_cpu = in List.map (fun model -> sprintf "vmlinu?-*-%s" model) models -let rec build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb = +let rec build_kernel debug host_cpu copy_kernel kernel = (* Locate the kernel. *) let kernel_file, kernel_name, kernel_version, modpath = try @@ -84,13 +84,6 @@ let rec build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb = ) else find_kernel debug host_cpu kernel in - (* If the user passed --dtb option, locate dtb. *) - (match dtb_wildcard with - | None -> () - | Some wildcard -> - find_dtb debug copy_kernel kernel_name wildcard dtb - ); - if debug >= 1 then ( printf "supermin: kernel: kernel_version %s\n" kernel_version; printf "supermin: kernel: modules %s\n%!" modpath; @@ -161,67 +154,6 @@ installed, try installing a fullvirt kernel (only for supermin use, you shouldn't boot the Xen guest with it)." host_cpu -and find_dtb debug copy_kernel kernel_name wildcard dtb = - let dtb_file = - try - let dtb_file = getenv "SUPERMIN_DTB" in - if debug >= 1 then - printf "supermin: kernel: SUPERMIN_DTB environment variable = %s\n%!" - dtb_file; - dtb_file - with Not_found -> - (* Replace vmlinuz- with dtb- *) - if not (string_prefix "vmlinuz-" kernel_name) && - not (string_prefix "vmlinuz-" kernel_name) then - no_dtb_dir kernel_name; - let dtb_dir = - try - List.find dir_exists ( - List.map (fun prefix -> - prefix ^ String.sub kernel_name 8 (String.length kernel_name - 8) - ) ["/boot/dtb-"; "/usr/lib/linux-image-"]) - with Not_found -> - no_dtb_dir kernel_name; "" - in - - let all_files = Sys.readdir dtb_dir in - let all_files = Array.to_list all_files in - - let files = - List.filter (fun filename -> fnmatch wildcard filename [FNM_NOESCAPE]) - all_files in - if files = [] then - no_dtb dtb_dir wildcard; - - let dtb_name = List.hd files in - let dtb_file = dtb_dir // dtb_name in - if debug >= 1 then - printf "supermin: kernel: picked dtb %s\n%!" dtb_file; - dtb_file in - - copy_or_symlink_file copy_kernel dtb_file dtb - -and no_dtb_dir kernel_name = - error "\ -failed to find a dtb (device tree) directory. - -I expected to take '%s' and to -replace vmlinuz- with dtb- to form a directory. - -You can set SUPERMIN_KERNEL, SUPERMIN_MODULES and SUPERMIN_DTB -to override automatic selection. See supermin(1)." - kernel_name - -and no_dtb dtb_dir wildcard = - error "\ -failed to find a matching device tree. - -I looked for a file matching '%s' in directory '%s'. - -You can set SUPERMIN_KERNEL, SUPERMIN_MODULES and SUPERMIN_DTB -to override automatic selection. See supermin(1)." - wildcard dtb_dir - and find_modpath debug kernel_version = try let modpath = getenv "SUPERMIN_MODULES" in diff --git a/src/kernel.mli b/src/kernel.mli index 36b4ab7..35a1273 100644 --- a/src/kernel.mli +++ b/src/kernel.mli @@ -21,15 +21,12 @@ See also the {!Ext2} module. *) -val build_kernel : int -> string -> string option -> bool -> string -> string -> string * string -(** [build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb] +val build_kernel : int -> string -> bool -> string -> string * string +(** [build_kernel debug host_cpu copy_kernel kernel] chooses the kernel to use and links to it or copies it into the appliance directory. The output is written to the file [kernel]. The function returns the [kernel_version, modpath] tuple as a - side-effect of locating the kernel. - - The [--dtb] option is also handled here, but that support is - now effectively obsolete and will be removed in future. *) + side-effect of locating the kernel. *) diff --git a/src/prepare.ml b/src/prepare.ml index 830b620..e8cf058 100644 --- a/src/prepare.ml +++ b/src/prepare.ml @@ -21,7 +21,7 @@ open Printf open Package_handler open Utils -let prepare debug (copy_kernel, dtb_wildcard, format, host_cpu, +let prepare debug (copy_kernel, format, host_cpu, packager_config, tmpdir, use_installed, size, include_packagelist) inputs outputdir = diff --git a/src/prepare.mli b/src/prepare.mli index 404302a..e2d677a 100644 --- a/src/prepare.mli +++ b/src/prepare.mli @@ -18,6 +18,6 @@ (** Implements the [--prepare] subcommand. *) -val prepare : int -> (bool * string option * Types.format * string * string option * string * bool * int64 option * bool) -> string list -> string -> unit +val prepare : int -> (bool * Types.format * string * string option * string * bool * int64 option * bool) -> string list -> string -> unit (** [prepare debug (args...) inputs outputdir] performs the [supermin --prepare] subcommand. *) diff --git a/src/supermin.ml b/src/supermin.ml index a09b498..6dd75b2 100644 --- a/src/supermin.ml +++ b/src/supermin.ml @@ -86,7 +86,6 @@ let main () = let copy_kernel = ref false in let debug = ref 0 in - let dtb_wildcard = ref "" in let format = ref None in let host_cpu = ref Config.host_cpu in let if_newer = ref false in @@ -134,7 +133,6 @@ or upgrade to libguestfs >= 1.26. let argspec = Arg.align [ "--build", Arg.Unit set_build_mode, " Build a full appliance"; "--copy-kernel", Arg.Set copy_kernel, " Copy kernel instead of symlinking"; - "--dtb", Arg.Set_string dtb_wildcard, "WILDCARD Find device tree matching wildcard"; "-f", Arg.String set_format, "chroot|ext2 Set output format"; "--format", Arg.String set_format, ditto; "--host-cpu", Arg.Set_string host_cpu, "ARCH Set host CPU architecture"; @@ -160,7 +158,6 @@ or upgrade to libguestfs >= 1.26. let copy_kernel = !copy_kernel in let debug = !debug in - let dtb_wildcard = match !dtb_wildcard with "" -> None | s -> Some s in let host_cpu = !host_cpu in let if_newer = !if_newer in let inputs = List.rev !inputs in @@ -191,7 +188,7 @@ or upgrade to libguestfs >= 1.26. else outputdir in debug, mode, if_newer, inputs, lockfile, outputdir, - (copy_kernel, dtb_wildcard, format, host_cpu, + (copy_kernel, format, host_cpu, packager_config, tmpdir, use_installed, size, include_packagelist) in @@ -201,7 +198,7 @@ or upgrade to libguestfs >= 1.26. * This fails with an error if one could not be located. *) let () = - let (_, _, _, _, packager_config, tmpdir, _, _, _) = args in + let (_, _, _, packager_config, tmpdir, _, _, _) = args in let settings = { debug = debug; tmpdir = tmpdir; diff --git a/src/supermin.pod b/src/supermin.pod index 8c9aca7..4581201 100644 --- a/src/supermin.pod +++ b/src/supermin.pod @@ -143,40 +143,6 @@ the kernel in F</boot>. This is fractionally slower, but is necessary if you want to change the permissions or SELinux label on the kernel or device tree. -=item B<--dtb> WILDCARD - -(I<--build> mode only) - -If specified, search for a device tree which is compatible with the -selected kernel and the name of which matches the given wildcard. You -can use a wildcard such as C<vexpress-*a9*.dtb> which would match -F<vexpress-v2p-ca9.dtb>. - -Notes: - -=over 4 - -=item * - -You may need to quote the wildcard to prevent it from being expanded -by your shell. - -=item * - -If no I<--dtb> option is given, no device tree will be looked for. - -=item * - -You only need a device tree on architectures such as ARM and PowerPC -which use them. On other architectures, don't use this option. - -=item * - -If you use this option and no compatible device tree can be found, -supermin will exit with an error. - -=back - =item B<-f> FORMAT =item B<--format> FORMAT @@ -202,15 +168,15 @@ This is called a C<chroot> because you could literally L<chroot(1)> into this directory afterwards, although it's a better idea to use a container technology (LXC, etc.). -No kernel, initrd or dtb is generated in this mode because it is +No kernel or initrd is generated in this mode because it is assumed that you will be running the appliance using the host kernel. =item ext2 An ext2 filesystem disk image. -The output kernel is written to F<OUTPUTDIR/kernel>, the device tree -(if using) to F<OUTPUTDIR/dtb>, a small initramfs which can mount the +The output kernel is written to F<OUTPUTDIR/kernel>, +a small initramfs which can mount the appliance to F<OUTPUTDIR/initrd>, and the ext2 filesystem image to F<OUTPUTDIR/root>. (Where F<OUTPUTDIR> is specified by the I<-o> option). @@ -543,10 +509,6 @@ This specifies the kernel modules directory to use. The environment variable should point to a module directory, eg. F</lib/modules/3.0.x86_64/> -=item SUPERMIN_DTB - -Force the given device tree file to be used. - =item SUPERMIN_KERNEL_VERSION On non-x86 architectures, you may need to set this environment -- 2.10.2