Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142743935
D49716.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D49716.diff
View Options
diff --git a/usr.bin/mkimg/mkimg.h b/usr.bin/mkimg/mkimg.h
--- a/usr.bin/mkimg/mkimg.h
+++ b/usr.bin/mkimg/mkimg.h
@@ -29,6 +29,9 @@
#include <sys/queue.h>
#include <sys/types.h>
+#include <stdbool.h>
+
+extern bool reproducible; /* Generate reproducible output. */
struct part {
TAILQ_ENTRY(part) link;
diff --git a/usr.bin/mkimg/mkimg.1 b/usr.bin/mkimg/mkimg.1
--- a/usr.bin/mkimg/mkimg.1
+++ b/usr.bin/mkimg/mkimg.1
@@ -22,7 +22,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd March 12, 2024
+.Dd June 25, 2025
.Dt MKIMG 1
.Os
.Sh NAME
@@ -41,6 +41,7 @@
.Op Fl f Ar format
.Op Fl o Ar outfile
.Op Fl a Ar active
+.Op Fl R
.Op Fl v
.Op Fl y
.Op Fl s Ar scheme Op Fl p Ar partition ...
@@ -138,6 +139,11 @@
same time.
.Pp
The
+.Fl R
+option enables reproducible mode: any timestamps or random identifiers will
+be fixed so as to ensure consistent output.
+.Pp
+The
.Fl v
option increases the level of output that the
.Nm
diff --git a/usr.bin/mkimg/mkimg.c b/usr.bin/mkimg/mkimg.c
--- a/usr.bin/mkimg/mkimg.c
+++ b/usr.bin/mkimg/mkimg.c
@@ -61,6 +61,8 @@
static uint64_t min_capacity = 0;
static uint64_t max_capacity = 0;
+bool reproducible = false;
+
struct partlisthead partlist = TAILQ_HEAD_INITIALIZER(partlist);
u_int nparts = 0;
@@ -561,7 +563,7 @@
bcfd = -1;
outfd = 1; /* Write to stdout by default */
- while ((c = getopt_long(argc, argv, "a:b:c:C:f:o:p:s:vyH:P:S:T:",
+ while ((c = getopt_long(argc, argv, "a:b:c:C:f:o:p:s:vyH:P:RS:T:",
longopts, NULL)) != -1) {
switch (c) {
case 'a': /* ACTIVE PARTITION, if supported */
@@ -606,6 +608,9 @@
if (error)
errc(EX_DATAERR, error, "partition");
break;
+ case 'R':
+ reproducible = true;
+ break;
case 's': /* SCHEME */
if (scheme_selected() != NULL)
usage("multiple schemes given");
@@ -675,6 +680,9 @@
if (max_capacity != 0 && min_capacity > max_capacity)
usage("minimum capacity cannot be larger than the maximum one");
+ if (reproducible)
+ srandom(42);
+
if (secsz > blksz) {
if (blksz != 0)
errx(EX_DATAERR, "the physical block size cannot "
diff --git a/usr.bin/mkimg/uuid.c b/usr.bin/mkimg/uuid.c
--- a/usr.bin/mkimg/uuid.c
+++ b/usr.bin/mkimg/uuid.c
@@ -45,20 +45,9 @@
}
#endif /* __APPLE__ */
-#ifdef __FreeBSD__
-#include <sys/uuid.h>
-
-static void
-osdep_uuidgen(mkimg_uuid_t *uuid)
-{
-
- uuidgen((void *)uuid, 1);
-}
-#endif /* __FreeBSD__ */
-
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD__)
+#include <sys/time.h>
#include <stdlib.h>
-#include <time.h>
static void
osdep_uuidgen(mkimg_uuid_t *uuid)
@@ -68,7 +57,9 @@
u_int i;
uint16_t seq;
- if (gettimeofday(&tv, NULL) == -1)
+ if (reproducible)
+ memset(&tv, 0, sizeof(tv));
+ else if (gettimeofday(&tv, NULL) == -1)
abort();
time += (uint64_t)tv.tv_sec * 10000000LL;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jan 24, 12:19 AM (8 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27892000
Default Alt Text
D49716.diff (2 KB)
Attached To
Mode
D49716: mkimg: Add a reproducible mode
Attached
Detach File
Event Timeline
Log In to Comment