UUID support has made it upstream after 1.14.2 was released. I'm attaching a backport to 1.14.2.
Build-tested, not runtime-tested. Max
Index: trunk/debian/config/udeb =================================================================== --- trunk/debian/config/udeb (revision 59555) +++ trunk/debian/config/udeb (working copy) @@ -497,6 +497,7 @@ # CONFIG_FEATURE_MDEV_EXEC is not set # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set CONFIG_MKSWAP=y +CONFIG_FEATURE_MKSWAP_UUID=y # CONFIG_FEATURE_MKSWAP_V0 is not set CONFIG_MORE=y CONFIG_FEATURE_USE_TERMIOS=y Index: trunk/debian/config/static =================================================================== --- trunk/debian/config/static (revision 59555) +++ trunk/debian/config/static (working copy) @@ -501,6 +501,7 @@ # CONFIG_FEATURE_MDEV_EXEC is not set # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_UUID is not set # CONFIG_FEATURE_MKSWAP_V0 is not set CONFIG_MORE=y CONFIG_FEATURE_USE_TERMIOS=y Index: trunk/debian/config/deb =================================================================== --- trunk/debian/config/deb (revision 59555) +++ trunk/debian/config/deb (working copy) @@ -497,6 +497,7 @@ # CONFIG_FEATURE_MDEV_EXEC is not set # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set # CONFIG_MKSWAP is not set +# CONFIG_FEATURE_MKSWAP_UUID is not set # CONFIG_FEATURE_MKSWAP_V0 is not set CONFIG_MORE=y CONFIG_FEATURE_USE_TERMIOS=y Index: trunk/debian/patches/mkswap-uuid.patch =================================================================== --- trunk/debian/patches/mkswap-uuid.patch (revision 0) +++ trunk/debian/patches/mkswap-uuid.patch (revision 0) @@ -0,0 +1,138 @@ +Backport of mkswap UUID support to 1.14.2 + +This combines the following upstream commits: + + e25ba804dd38009f7b7df6b6efd7e1847e4242fa mkswap: separate UUID feature + ae5e96ad6900a287b0c18e3e6713769cead8dd71 mkswap: accidentally committed wrong + a262cddae85667b1c073b35c3d000ae7f4a44b31 mkswap: improve randomness of UUID ge + f7ac66b55ffd036d9590f180149b6b7bb85a2d1b mkswap: generate UUID if CONFIG_DESKT + +diff --git a/util-linux/Config.in b/util-linux/Config.in +index e5c053f..e7b0ec7 100644 +--- a/util-linux/Config.in ++++ b/util-linux/Config.in +@@ -409,6 +409,13 @@ config FEATURE_MKSWAP_V0 + If your kernel is older than 2.1.117, then v0 support is the + only option. + ++config FEATURE_MKSWAP_UUID ++ bool "UUID support" ++ default n ++ depends on MKSWAP ++ help ++ Generate swap spaces with universally unique identifiers. ++ + config MORE + bool "more" + default n +diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c +index 11c411b..f718843 100644 +--- a/util-linux/mkswap.c ++++ b/util-linux/mkswap.c +@@ -5,7 +5,6 @@ + * + * Licensed under GPL version 2, see file LICENSE in this tarball for details. + */ +- + #include "libbb.h" + + #if ENABLE_SELINUX +@@ -48,7 +47,85 @@ static void mkswap_selinux_setcontext(int fd, const char *path) + bb_perror_msg_and_die("SELinux relabeling failed"); + } + #else +-#define mkswap_selinux_setcontext(fd, path) ((void)0) ++# define mkswap_selinux_setcontext(fd, path) ((void)0) ++#endif ++ ++#if ENABLE_FEATURE_MKSWAP_UUID ++static void mkswap_generate_uuid(uint8_t *buf) ++{ ++ /* http://www.ietf.org/rfc/rfc4122.txt ++ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ * | time_low | ++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ * | time_mid | time_hi_and_version | ++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ * |clk_seq_and_variant | node (0-1) | ++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ * | node (2-5) | ++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ * IOW, uuid has this layout: ++ * uint32_t time_low (big endian) ++ * uint16_t time_mid (big endian) ++ * uint16_t time_hi_and_version (big endian) ++ * version is a 4-bit field: ++ * 1 Time-based ++ * 2 DCE Security, with embedded POSIX UIDs ++ * 3 Name-based (MD5) ++ * 4 Randomly generated ++ * 5 Name-based (SHA-1) ++ * uint16_t clk_seq_and_variant (big endian) ++ * variant is a 3-bit field: ++ * 0xx Reserved, NCS backward compatibility ++ * 10x The variant specified in rfc4122 ++ * 110 Reserved, Microsoft backward compatibility ++ * 111 Reserved for future definition ++ * uint8_t node[6] ++ * ++ * For version 4, these bits are set/cleared: ++ * time_hi_and_version & 0x0fff | 0x4000 ++ * clk_seq_and_variant & 0x3fff | 0x8000 ++ */ ++ pid_t pid; ++ int i; ++ char uuid_string[32]; ++ ++ i = open("/dev/urandom", O_RDONLY); ++ if (i >= 0) { ++ read(i, buf, 16); ++ close(i); ++ } ++ /* Paranoia. /dev/urandom may be missing. ++ * rand() is guaranteed to generate at least [0, 2^15) range, ++ * but lowest bits in some libc are not so "random". */ ++ srand(monotonic_us()); ++ pid = getpid(); ++ while (1) { ++ for (i = 0; i < 16; i++) ++ buf[i] ^= rand() >> 5; ++ if (pid == 0) ++ break; ++ srand(pid); ++ pid = 0; ++ } ++ ++ /* version = 4 */ ++ buf[4 + 2 ] = (buf[4 + 2 ] & 0x0f) | 0x40; ++ /* variant = 10x */ ++ buf[4 + 2 + 2] = (buf[4 + 2 + 2] & 0x3f) | 0x80; ++ ++ bin2hex(uuid_string, (void*) buf, 16); ++ /* f.e. UUID=dfd9c173-be52-4d27-99a5-c34c6c2ff55f */ ++ printf("UUID=%.8s" "-%.4s-%.4s-%.4s-%.12s\n", ++ uuid_string, ++ uuid_string+8, ++ uuid_string+8+4, ++ uuid_string+8+4+4, ++ uuid_string+8+4+4+4 ++ ); ++} ++#else ++# define mkswap_generate_uuid(buf) ((void)0) + #endif + + #if 0 /* from Linux 2.6.23 */ +@@ -113,10 +190,10 @@ int mkswap_main(int argc, char **argv) + // Make a header. hdr is zero-filled so far... + hdr[0] = 1; + hdr[1] = (len / pagesize) - 1; ++ mkswap_generate_uuid((void*) &hdr[3]); + + // Write the header. Sync to disk because some kernel versions check + // signature on disk (not in cache) during swapon. +- + xlseek(fd, 1024, SEEK_SET); + xwrite(fd, hdr, NWORDS * 4); + xlseek(fd, pagesize - 10, SEEK_SET); Index: trunk/debian/patches/series =================================================================== --- trunk/debian/patches/series (revision 59555) +++ trunk/debian/patches/series (working copy) @@ -4,3 +4,4 @@ version.patch init-console.patch strip.patch +mkswap-uuid.patch Index: trunk/debian/changelog =================================================================== --- trunk/debian/changelog (revision 59555) +++ trunk/debian/changelog (working copy) @@ -7,6 +7,10 @@ [ Otavio Salvador ] * [udeb] Add an udhcpc script to be used by netcfg. + [ Max Vozeler ] + * Backport mkswap UUID support. (closes: #531572) + * [udeb] Enable mkswap UUID support. + -- Otavio Salvador <ota...@ossystems.com.br> Sun, 19 Jul 2009 14:43:18 -0300 busybox (1:1.13.3-1) unstable; urgency=low