22a6b3ebe7
- Choose providers better (RHBZ#1266918). - Use autopatch.
185 lines
6.5 KiB
Diff
185 lines
6.5 KiB
Diff
From 92bc55b54a17d368b43241394ace1d862899f9d7 Mon Sep 17 00:00:00 2001
|
|
From: Pino Toscano <ptoscano@redhat.com>
|
|
Date: Mon, 13 Jul 2015 17:33:34 +0200
|
|
Subject: [PATCH 2/7] Add --size for ext2 filesystem
|
|
|
|
Add a --size option to setting the size of the ext2 filesystem,
|
|
so it is possible to create ext2 appliances with smaller disk images.
|
|
|
|
The default is like the previously hardcoded value of 4GB.
|
|
---
|
|
src/build.ml | 4 ++--
|
|
src/ext2.ml | 19 ++++++++++---------
|
|
src/prepare.ml | 2 +-
|
|
src/supermin.ml | 9 +++++++--
|
|
src/supermin.pod | 15 +++++++++++++++
|
|
5 files changed, 35 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/src/build.ml b/src/build.ml
|
|
index d7d0781..fb2e6d3 100644
|
|
--- a/src/build.ml
|
|
+++ b/src/build.ml
|
|
@@ -59,7 +59,7 @@ and string_of_file_content = function
|
|
|
|
let rec build debug
|
|
(copy_kernel, dtb_wildcard, format, host_cpu,
|
|
- packager_config, tmpdir, use_installed)
|
|
+ packager_config, tmpdir, use_installed, size)
|
|
inputs outputdir =
|
|
if debug >= 1 then
|
|
printf "supermin: build: %s\n%!" (String.concat " " inputs);
|
|
@@ -210,7 +210,7 @@ let rec build debug
|
|
and initrd = outputdir // "initrd" in
|
|
let kernel_version, modpath =
|
|
Kernel.build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb in
|
|
- Ext2.build_ext2 debug basedir files modpath kernel_version appliance;
|
|
+ Ext2.build_ext2 debug basedir files modpath kernel_version appliance size;
|
|
Ext2_initrd.build_initrd debug tmpdir modpath initrd
|
|
|
|
and read_appliance debug basedir appliance = function
|
|
diff --git a/src/ext2.ml b/src/ext2.ml
|
|
index d5c26a7..79539a3 100644
|
|
--- a/src/ext2.ml
|
|
+++ b/src/ext2.ml
|
|
@@ -23,26 +23,27 @@ open Utils
|
|
open Ext2fs
|
|
open Package_handler
|
|
|
|
-(* The ext2 image that we build always has a fixed size, and we 'hope'
|
|
- * that the files fit in (otherwise we'll get an error). Note that
|
|
- * the file is sparsely allocated.
|
|
+(* The ext2 image that we build has a size of 4GB if not specified,
|
|
+ * and we 'hope' that the files fit in (otherwise we'll get an error).
|
|
+ * Note that the file is sparsely allocated.
|
|
*
|
|
* The downside of allocating a very large initial disk is that the
|
|
* fixed overhead of ext2 is larger (since ext2 calculates it based on
|
|
* the size of the disk). For a 4GB disk the overhead is
|
|
* approximately 66MB.
|
|
- *
|
|
- * In future, make this configurable, or determine it from the input
|
|
- * files (XXX).
|
|
*)
|
|
-let appliance_size = 4L *^ 1024L *^ 1024L *^ 1024L
|
|
+let default_appliance_size = 4L *^ 1024L *^ 1024L *^ 1024L
|
|
|
|
-let build_ext2 debug basedir files modpath kernel_version appliance =
|
|
+let build_ext2 debug basedir files modpath kernel_version appliance size =
|
|
if debug >= 1 then
|
|
printf "supermin: ext2: creating empty ext2 filesystem '%s'\n%!" appliance;
|
|
|
|
let fd = openfile appliance [O_WRONLY;O_CREAT;O_TRUNC;O_NOCTTY] 0o644 in
|
|
- LargeFile.ftruncate fd appliance_size;
|
|
+ let size =
|
|
+ match size with
|
|
+ | None -> default_appliance_size
|
|
+ | Some s -> s in
|
|
+ LargeFile.ftruncate fd size;
|
|
close fd;
|
|
|
|
let cmd =
|
|
diff --git a/src/prepare.ml b/src/prepare.ml
|
|
index 75f21dc..7e522e9 100644
|
|
--- a/src/prepare.ml
|
|
+++ b/src/prepare.ml
|
|
@@ -22,7 +22,7 @@ open Package_handler
|
|
open Utils
|
|
|
|
let prepare debug (copy_kernel, dtb_wildcard, format, host_cpu,
|
|
- packager_config, tmpdir, use_installed)
|
|
+ packager_config, tmpdir, use_installed, size)
|
|
inputs outputdir =
|
|
if debug >= 1 then
|
|
printf "supermin: prepare: %s\n%!" (String.concat " " inputs);
|
|
diff --git a/src/supermin.ml b/src/supermin.ml
|
|
index 14261d6..9623229 100644
|
|
--- a/src/supermin.ml
|
|
+++ b/src/supermin.ml
|
|
@@ -94,6 +94,7 @@ let main () =
|
|
let outputdir = ref "" in
|
|
let packager_config = ref "" in
|
|
let use_installed = ref false in
|
|
+ let size = ref None in
|
|
|
|
let set_debug () = incr debug in
|
|
|
|
@@ -118,6 +119,8 @@ let main () =
|
|
exit 1
|
|
in
|
|
|
|
+ let set_size arg = size := Some (parse_size arg) in
|
|
+
|
|
let error_supermin_5 () =
|
|
eprintf "supermin: *** error: This is supermin version 5.\n";
|
|
eprintf "supermin: *** It looks like you are looking for supermin version 4.\n";
|
|
@@ -143,6 +146,7 @@ let main () =
|
|
"-o", Arg.Set_string outputdir, "OUTPUTDIR Set output directory";
|
|
"--packager-config", Arg.Set_string packager_config, "CONFIGFILE Set packager config file";
|
|
"--prepare", Arg.Unit set_prepare_mode, " Prepare a supermin appliance";
|
|
+ "--size", Arg.String set_size, " Set the size of the ext2 filesystem";
|
|
"--use-installed", Arg.Set use_installed, " Use installed files instead of accessing network";
|
|
"-v", Arg.Unit set_debug, " Enable debugging messages";
|
|
"--verbose", Arg.Unit set_debug, ditto;
|
|
@@ -165,6 +169,7 @@ let main () =
|
|
let packager_config =
|
|
match !packager_config with "" -> None | s -> Some s in
|
|
let use_installed = !use_installed in
|
|
+ let size = !size in
|
|
|
|
let format =
|
|
match mode, !format with
|
|
@@ -184,7 +189,7 @@ let main () =
|
|
|
|
debug, mode, if_newer, inputs, lockfile, outputdir,
|
|
(copy_kernel, dtb_wildcard, format, host_cpu,
|
|
- packager_config, tmpdir, use_installed) in
|
|
+ packager_config, tmpdir, use_installed, size) in
|
|
|
|
if debug >= 1 then printf "supermin: version: %s\n" Config.package_version;
|
|
|
|
@@ -192,7 +197,7 @@ let main () =
|
|
* 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 f2e8446..f9b7395 100644
|
|
--- a/src/supermin.pod
|
|
+++ b/src/supermin.pod
|
|
@@ -189,6 +189,9 @@ appliance to C<OUTPUTDIR/initrd>, and the ext2 filesystem image to
|
|
C<OUTPUTDIR/root>. (Where C<OUTPUTDIR> is specified by the I<-o>
|
|
option).
|
|
|
|
+The filesystem (C<OUTPUTDIR/root>) has a default size of 4 GB
|
|
+(see also the I<--size> option).
|
|
+
|
|
=back
|
|
|
|
=item B<--host-cpu> CPU
|
|
@@ -283,6 +286,18 @@ However this option is useful in some controlled situations: for
|
|
example when using supermin inside a freshly installed chroot, or if
|
|
you have no network access during the build.
|
|
|
|
+=item B<--size> SIZE
|
|
+
|
|
+(I<--build> mode only)
|
|
+
|
|
+Select the size of the output ext2 filesystem, where the size can be
|
|
+specified using common names such as C<32G> (32 gigabytes) etc.
|
|
+
|
|
+If the size is not specified, a default size of 4 GB is used.
|
|
+
|
|
+To specify size in bytes, the number must be followed by the lowercase
|
|
+letter I<b>, eg: S<C<--size 10737418240b>>.
|
|
+
|
|
=item B<-v>
|
|
|
|
=item B<--verbose>
|
|
--
|
|
2.5.0
|
|
|