Accepting request 57893 from home:puzel:staging

OBS-URL: https://build.opensuse.org/request/show/57893
OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=62
This commit is contained in:
Petr Uzel 2011-01-11 15:19:40 +00:00 committed by Git OBS Bridge
parent fa8c4863b3
commit fa7691ac65
10 changed files with 313 additions and 1073 deletions

View File

@ -38,10 +38,10 @@ Signed-off-by: Ludwig Nussel <ludwig.nussel@suse.de>
create mode 100644 mount/sha512.c
create mode 100644 mount/sha512.h
Index: util-linux-ng-2.18/mount/Makefile.am
Index: util-linux-2.19-rc1/mount/Makefile.am
===================================================================
--- util-linux-ng-2.18.orig/mount/Makefile.am
+++ util-linux-ng-2.18/mount/Makefile.am
--- util-linux-2.19-rc1.orig/mount/Makefile.am
+++ util-linux-2.19-rc1/mount/Makefile.am
@@ -7,7 +7,7 @@ sbin_PROGRAMS = losetup swapon
dist_man_MANS = fstab.5 mount.8 swapoff.8 swapon.8 umount.8 losetup.8
@ -51,10 +51,10 @@ Index: util-linux-ng-2.18/mount/Makefile.am
# generic header for mount and umount
hdrs_mount = fstab.h mount_mntent.h mount_constants.h \
Index: util-linux-ng-2.18/mount/lomount.c
Index: util-linux-2.19-rc1/mount/lomount.c
===================================================================
--- util-linux-ng-2.18.orig/mount/lomount.c
+++ util-linux-ng-2.18/mount/lomount.c
--- util-linux-2.19-rc1.orig/mount/lomount.c
+++ util-linux-2.19-rc1/mount/lomount.c
@@ -23,6 +23,12 @@
#include "sundries.h"
#include "xmalloc.h"
@ -68,7 +68,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
#ifdef LOOP_SET_FD
@@ -390,12 +396,22 @@ show_loop_fd(int fd, char *device) {
@@ -464,12 +470,22 @@ show_loop_fd(int fd, char *device) {
if (loopinfo64.lo_encrypt_type ||
loopinfo64.lo_crypt_name[0]) {
@ -94,7 +94,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
}
printf("\n");
return 0;
@@ -644,7 +660,7 @@ xgetpass(int pfd, const char *prompt) {
@@ -718,7 +734,7 @@ xgetpass(int pfd, const char *prompt) {
}
if (pass == NULL)
@ -103,7 +103,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
pass[i] = 0;
return pass;
@@ -658,6 +674,24 @@ digits_only(const char *s) {
@@ -732,6 +748,24 @@ digits_only(const char *s) {
return 1;
}
@ -128,7 +128,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
/*
* return codes:
* 0 - success
@@ -666,10 +700,11 @@ digits_only(const char *s) {
@@ -740,10 +774,11 @@ digits_only(const char *s) {
*/
int
set_loop(const char *device, const char *file, unsigned long long offset,
@ -142,7 +142,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
char *filename;
if (verbose) {
@@ -707,13 +742,37 @@ set_loop(const char *device, const char
@@ -781,13 +816,37 @@ set_loop(const char *device, const char
filename = (char *) file;
xstrncpy((char *)loopinfo64.lo_file_name, filename, LO_NAME_SIZE);
@ -182,7 +182,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
}
}
@@ -734,20 +793,69 @@ set_loop(const char *device, const char
@@ -808,20 +867,69 @@ set_loop(const char *device, const char
}
#endif
@ -264,9 +264,9 @@ Index: util-linux-ng-2.18/mount/lomount.c
}
if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
@@ -897,7 +1005,13 @@ usage(void) {
@@ -969,7 +1077,13 @@ usage(FILE *f) {
fprintf(stderr, _("\nOptions:\n"
fprintf(f, _("\nOptions:\n"
" -e | --encryption <type> enable data encryption with specified <name/num>\n"
+ " -H | --phash <type> hash password using specified algorithm (sha512/sha256/sha384/rmd160/none)\n"
" -h | --help this help\n"
@ -278,7 +278,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
" -o | --offset <num> start at offset <num> into file\n"
" --sizelimit <num> loop limited to only <num> bytes of the file\n"
" -p | --pass-fd <num> read passphrase from file descriptor <num>\n"
@@ -910,11 +1024,14 @@ usage(void) {
@@ -983,11 +1097,14 @@ usage(FILE *f) {
int
main(int argc, char **argv) {
char *p, *offset, *sizelimit, *encryption, *passfd, *device, *file, *assoc;
@ -293,7 +293,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
uintmax_t off = 0, slimit = 0;
struct option longopts[] = {
{ "all", 0, 0, 'a' },
@@ -923,6 +1040,8 @@ main(int argc, char **argv) {
@@ -996,6 +1113,8 @@ main(int argc, char **argv) {
{ "encryption", 1, 0, 'e' },
{ "find", 0, 0, 'f' },
{ "help", 0, 0, 'h' },
@ -302,7 +302,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
{ "associated", 1, 0, 'j' },
{ "offset", 1, 0, 'o' },
{ "sizelimit", 1, 0, 128 },
@@ -939,12 +1058,13 @@ main(int argc, char **argv) {
@@ -1012,12 +1131,13 @@ main(int argc, char **argv) {
capacity = delete = find = all = 0;
assoc = offset = sizelimit = encryption = passfd = NULL;
@ -317,7 +317,7 @@ Index: util-linux-ng-2.18/mount/lomount.c
longopts, NULL)) != -1) {
switch (c) {
case 'a':
@@ -969,6 +1089,12 @@ main(int argc, char **argv) {
@@ -1045,6 +1165,12 @@ main(int argc, char **argv) {
case 'j':
assoc = optarg;
break;
@ -330,36 +330,37 @@ Index: util-linux-ng-2.18/mount/lomount.c
case 'o':
offset = optarg;
break;
@@ -1058,8 +1184,11 @@ main(int argc, char **argv) {
@@ -1134,8 +1260,10 @@ main(int argc, char **argv) {
else {
if (passfd && sscanf(passfd, "%d", &pfd) != 1)
usage();
usage(stderr);
+ if (keysize && sscanf(keysize,"%d",&keysz) != 1)
+ usage();
+ usage(stderr);
do {
- res = set_loop(device, file, off, slimit, encryption, pfd, &ro);
+ res = set_loop(device, file, off, slimit, encryption, phash,
+ pfd, &ro, keysz);
+ res = set_loop(device, file, off, slimit, encryption, phash, pfd, &ro, keysz);
if (res == 2 && find) {
if (verbose)
printf(_("stolen loop=%s...trying again\n"),
Index: util-linux-ng-2.18/mount/lomount.h
Index: util-linux-2.19-rc1/mount/lomount.h
===================================================================
--- util-linux-ng-2.18.orig/mount/lomount.h
+++ util-linux-ng-2.18/mount/lomount.h
@@ -1,5 +1,6 @@
--- util-linux-2.19-rc1.orig/mount/lomount.h
+++ util-linux-2.19-rc1/mount/lomount.h
@@ -1,8 +1,8 @@
#ifndef UTIL_LINUX_LOMOUNT_H
#define UTIL_LINUX_LOMOUNT_H
-extern int set_loop(const char *, const char *, unsigned long long, unsigned long long,
- const char *, int, int *);
+extern int set_loop(const char * device, const char * file, unsigned long long offset,
+ unsigned long long, const char *encryption, const char *phash,
+ int pfd, int *options, int keysz);
+extern int set_loop(const char * device, const char * file, unsigned long long offset, unsigned long long,
+ const char * encryption, const char *phash, int pfd, int *options, int keysz);
extern int del_loop(const char *);
extern int is_loop_device(const char *);
extern int is_loop_autoclear(const char *device);
Index: util-linux-ng-2.18/mount/losetup.8
Index: util-linux-2.19-rc1/mount/losetup.8
===================================================================
--- util-linux-ng-2.18.orig/mount/losetup.8
+++ util-linux-ng-2.18/mount/losetup.8
--- util-linux-2.19-rc1.orig/mount/losetup.8
+++ util-linux-2.19-rc1/mount/losetup.8
@@ -96,9 +96,18 @@ find the first unused loop device. If a
argument is present, use this device. Otherwise, print its name
.IP "\fB\-h, \-\-help\fP"
@ -388,11 +389,11 @@ Index: util-linux-ng-2.18/mount/losetup.8
Cryptoloop is deprecated in favor of dm-crypt. For more details see
.BR cryptsetup (8).
Index: util-linux-ng-2.18/mount/mount.8
Index: util-linux-2.19-rc1/mount/mount.8
===================================================================
--- util-linux-ng-2.18.orig/mount/mount.8
+++ util-linux-ng-2.18/mount/mount.8
@@ -869,6 +869,15 @@ Every time the inode is modified, the i_
--- util-linux-2.19-rc1.orig/mount/mount.8
+++ util-linux-2.19-rc1/mount/mount.8
@@ -901,6 +901,15 @@ Every time the inode is modified, the i_
.B noiversion
Do not increment the i_version inode field.
.TP
@ -408,7 +409,7 @@ Index: util-linux-ng-2.18/mount/mount.8
.B mand
Allow mandatory locks on this filesystem. See
.BR fcntl (2).
@@ -2582,6 +2591,10 @@ that are really options to
@@ -2623,6 +2632,10 @@ that are really options to
.BR \%losetup (8).
(These options can be used in addition to those specific
to the filesystem type.)
@ -419,11 +420,11 @@ Index: util-linux-ng-2.18/mount/mount.8
Since Linux 2.6.25 is supported auto-destruction of loop devices and
then any loop device allocated by
Index: util-linux-ng-2.18/mount/mount.c
Index: util-linux-2.19-rc1/mount/mount.c
===================================================================
--- util-linux-ng-2.18.orig/mount/mount.c
+++ util-linux-ng-2.18/mount/mount.c
@@ -96,6 +96,9 @@ struct mountargs {
--- util-linux-2.19-rc1.orig/mount/mount.c
+++ util-linux-2.19-rc1/mount/mount.c
@@ -105,6 +105,9 @@ struct mountargs {
void *data;
};
@ -433,7 +434,7 @@ Index: util-linux-ng-2.18/mount/mount.c
/* Map from -o and fstab option strings to the flag argument to mount(2). */
struct opt_map {
const char *opt; /* option name */
@@ -201,6 +204,7 @@ static int opt_nofail = 0;
@@ -210,6 +213,7 @@ static int opt_nofail = 0;
static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_sizelimit,
*opt_encryption, *opt_speed, *opt_comment, *opt_uhelper;
@ -441,7 +442,7 @@ Index: util-linux-ng-2.18/mount/mount.c
static int is_readonly(const char *node);
static int mounted (const char *spec0, const char *node0);
@@ -217,6 +221,8 @@ static struct string_opt_map {
@@ -226,6 +230,8 @@ static struct string_opt_map {
{ "offset=", 0, &opt_offset },
{ "sizelimit=", 0, &opt_sizelimit },
{ "encryption=", 0, &opt_encryption },
@ -450,7 +451,7 @@ Index: util-linux-ng-2.18/mount/mount.c
{ "speed=", 0, &opt_speed },
{ "comment=", 1, &opt_comment },
{ "uhelper=", 0, &opt_uhelper },
@@ -1116,7 +1122,8 @@ loop_check(const char **spec, const char
@@ -1208,7 +1214,8 @@ loop_check(const char **spec, const char
*type = opt_vfstype;
}
@ -460,7 +461,7 @@ Index: util-linux-ng-2.18/mount/mount.c
*loopfile = *spec;
/* Automatically create a loop device from a regular file if a filesystem
@@ -1170,7 +1177,7 @@ loop_check(const char **spec, const char
@@ -1273,7 +1280,7 @@ loop_check(const char **spec, const char
printf(_("mount: going to use the loop device %s\n"), *loopdev);
if ((res = set_loop(*loopdev, *loopfile, offset, sizelimit,
@ -469,7 +470,7 @@ Index: util-linux-ng-2.18/mount/mount.c
if (res == 2) {
/* loop dev has been grabbed by some other process,
try again, if not given explicitly */
@@ -1981,6 +1988,7 @@ static struct option longopts[] = {
@@ -2209,6 +2216,7 @@ static struct option longopts[] = {
{ "options", 1, 0, 'o' },
{ "test-opts", 1, 0, 'O' },
{ "pass-fd", 1, 0, 'p' },
@ -477,7 +478,7 @@ Index: util-linux-ng-2.18/mount/mount.c
{ "types", 1, 0, 't' },
{ "bind", 0, 0, 'B' },
{ "move", 0, 0, 'M' },
@@ -2143,6 +2151,7 @@ main(int argc, char *argv[]) {
@@ -2372,6 +2380,7 @@ main(int argc, char *argv[]) {
char *options = NULL, *test_opts = NULL, *node;
const char *spec = NULL;
char *label = NULL;
@ -485,7 +486,7 @@ Index: util-linux-ng-2.18/mount/mount.c
char *uuid = NULL;
char *types = NULL;
char *p;
@@ -2173,7 +2182,7 @@ main(int argc, char *argv[]) {
@@ -2402,7 +2411,7 @@ main(int argc, char *argv[]) {
initproctitle(argc, argv);
#endif
@ -494,7 +495,7 @@ Index: util-linux-ng-2.18/mount/mount.c
longopts, NULL)) != -1) {
switch (c) {
case 'a': /* mount everything in fstab */
@@ -2194,6 +2203,9 @@ main(int argc, char *argv[]) {
@@ -2423,6 +2432,9 @@ main(int argc, char *argv[]) {
case 'i':
external_allowed = 0;
break;
@ -504,7 +505,7 @@ Index: util-linux-ng-2.18/mount/mount.c
case 'l':
list_with_volumelabel = 1;
break;
@@ -2341,6 +2353,9 @@ main(int argc, char *argv[]) {
@@ -2573,6 +2585,9 @@ main(int argc, char *argv[]) {
atexit(unlock_mtab);
@ -514,10 +515,10 @@ Index: util-linux-ng-2.18/mount/mount.c
switch (argc+specseen) {
case 0:
/* mount -a */
Index: util-linux-ng-2.18/mount/rmd160.c
Index: util-linux-2.19-rc1/mount/rmd160.c
===================================================================
--- /dev/null
+++ util-linux-ng-2.18/mount/rmd160.c
+++ util-linux-2.19-rc1/mount/rmd160.c
@@ -0,0 +1,532 @@
+/* rmd160.c - RIPE-MD160
+ * Copyright (C) 1998 Free Software Foundation, Inc.
@ -1051,10 +1052,10 @@ Index: util-linux-ng-2.18/mount/rmd160.c
+ rmd160_final( &hd );
+ memcpy( outbuf, hd.buf, 20 );
+}
Index: util-linux-ng-2.18/mount/rmd160.h
Index: util-linux-2.19-rc1/mount/rmd160.h
===================================================================
--- /dev/null
+++ util-linux-ng-2.18/mount/rmd160.h
+++ util-linux-2.19-rc1/mount/rmd160.h
@@ -0,0 +1,11 @@
+#ifndef RMD160_H
+#define RMD160_H
@ -1067,10 +1068,10 @@ Index: util-linux-ng-2.18/mount/rmd160.h
+#endif /*RMD160_H*/
+
+
Index: util-linux-ng-2.18/mount/sha512.c
Index: util-linux-2.19-rc1/mount/sha512.c
===================================================================
--- /dev/null
+++ util-linux-ng-2.18/mount/sha512.c
+++ util-linux-2.19-rc1/mount/sha512.c
@@ -0,0 +1,432 @@
+/*
+ * sha512.c
@ -1504,10 +1505,10 @@ Index: util-linux-ng-2.18/mount/sha512.c
+ memset(&ctx, 0, sizeof(ctx));
+}
+#endif
Index: util-linux-ng-2.18/mount/sha512.h
Index: util-linux-2.19-rc1/mount/sha512.h
===================================================================
--- /dev/null
+++ util-linux-ng-2.18/mount/sha512.h
+++ util-linux-2.19-rc1/mount/sha512.h
@@ -0,0 +1,45 @@
+/*
+ * sha512.h

View File

@ -1,24 +0,0 @@
commit 1cf4c20b198c0c6566198fd00b983d9aaf8321bc
Author: Miklos Szeredi <miklos@szeredi.hu>
Date: Thu Oct 7 16:05:12 2010 +0200
mount: don't canonicalize "spec" with --no-canonicalize option
"Spec" was still canonicalized despite --no-canonicalize. This
resulted in a hang during login with pam_encfs (Debian Bug#593336).
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
diff --git a/mount/devname.c b/mount/devname.c
index 585d259..05da092 100644
--- a/mount/devname.c
+++ b/mount/devname.c
@@ -8,7 +8,7 @@ spec_to_devname(const char *spec)
{
if (!spec)
return NULL;
- if (is_pseudo_fs(spec))
+ if (nocanonicalize || is_pseudo_fs(spec))
return xstrdup(spec);
return fsprobe_get_devname_by_spec(spec);
}

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:583c122245f301b8cdd27e37a7a1fc774fcf1a73c3d633d9eac0c165e9b573d6
size 4266321

View File

@ -1,188 +0,0 @@
git diff v2.18..HEAD login-utils/agetty.c login-utils/agetty.8
agetty: fix -s option (baud rate setup)
agetty: add -c to reuse cflags
agetty: add -s to reuse existing baud rate
diff --git a/login-utils/agetty.8 b/login-utils/agetty.8
index 8761374..084086f 100644
--- a/login-utils/agetty.8
+++ b/login-utils/agetty.8
@@ -3,7 +3,7 @@
agetty \- alternative Linux getty
.SH SYNOPSIS
-.BR "agetty " [\-8ihLmnUw]
+.BR "agetty " [\-c8ihLmnsUw]
.RI "[-f " issue_file ]
.RI "[-l " login_program ]
.RI "[-I " init ]
@@ -12,16 +12,6 @@ agetty \- alternative Linux getty
.I port
.I baud_rate,...
.RI [ term ]
-.br
-.BR "agetty " [\-8ihLmnw]
-.RI "[-f " issue_file ]
-.RI "[-l " login_program ]
-.RI "[-I " init ]
-.RI "[-t " timeout ]
-.RI "[-H " login_host ]
-.I baud_rate,...
-.I port
-.RI [ term ]
.SH DESCRIPTION
.ad
@@ -92,6 +82,10 @@ whatever init(8) may have set, and is inherited by login and the shell.
.fi
.ad
.TP
+\-c
+Don't reset terminal cflags (control modes). See \fItermios(3)\fP for more
+details.
+.TP
\-8
Assume that the tty is 8-bit clean, hence disable parity detection.
.TP
@@ -163,6 +157,10 @@ Force the line to be a local line with no need for carrier detect. This can
be useful when you have a locally attached terminal where the serial line
does not set the carrier detect signal.
.TP
+\-s
+Try to keep the existing baud rate. The baud rates from
+the command line are used when agetty receives a BREAK character.
+.TP
\-U
Turn on support for detecting an uppercase only terminal. This setting will
detect a login name containing only capitals as indicating an uppercase
diff --git a/login-utils/agetty.c b/login-utils/agetty.c
index 39a1fd3..9d463ce 100644
--- a/login-utils/agetty.c
+++ b/login-utils/agetty.c
@@ -133,6 +133,8 @@ struct options {
#define F_CUSTISSUE (1<<6) /* give alternative issue file */
#define F_NOPROMPT (1<<7) /* don't ask for login name! */
#define F_LCUC (1<<8) /* Support for *LCUC stty modes */
+#define F_KEEPSPEED (1<<9) /* Follow baud rate from kernel */
+#define F_KEEPCFLAGS (1<<10) /* Reuse c_cflags setup from kernel */
/* Storage for things detected while the login name was read. */
@@ -203,7 +205,7 @@ void parse_args P_((int argc, char **argv, struct options *op));
void parse_speeds P_((struct options *op, char *arg));
void update_utmp P_((char *line));
void open_tty P_((char *tty, struct termios *tp, int local));
-void termio_init P_((struct termios *tp, int speed, struct options *op));
+void termio_init P_((struct termios *tp, struct options *op));
void auto_baud P_((struct termios *tp));
void do_prompt P_((struct options *op, struct termios *tp));
void next_speed P_((struct termios *tp, struct options *op));
@@ -297,7 +299,7 @@ main(argc, argv)
tcsetpgrp(0, getpid());
/* Initialize the termios settings (raw mode, eight-bit, blocking i/o). */
debug("calling termio_init\n");
- termio_init(&termios, options.speeds[FIRST_SPEED], &options);
+ termio_init(&termios, &options);
/* write the modem init string and DON'T flush the buffers */
if (options.flags & F_INITSTRING) {
@@ -373,8 +375,11 @@ parse_args(argc, argv, op)
extern int optind; /* getopt */
int c;
- while (isascii(c = getopt(argc, argv, "8I:LH:f:hil:mt:wUn"))) {
+ while (isascii(c = getopt(argc, argv, "8cI:LH:f:hil:mst:wUn"))) {
switch (c) {
+ case 'c':
+ op->flags |= F_KEEPCFLAGS;
+ break;
case '8':
op->eightbits = 1;
break;
@@ -443,6 +448,9 @@ parse_args(argc, argv, op)
case 'n':
op->flags |= F_NOPROMPT;
break;
+ case 's':
+ op->flags |= F_KEEPSPEED; /* keep kernel defined speed */
+ break;
case 't': /* time out */
if ((op->timeout = atoi(optarg)) <= 0)
error(_("bad timeout value: %s"), optarg);
@@ -691,11 +699,17 @@ char gbuf[1024];
char area[1024];
void
-termio_init(tp, speed, op)
+termio_init(tp, op)
struct termios *tp;
- int speed;
struct options *op;
{
+ speed_t ispeed, ospeed;
+
+ if (op->flags & F_KEEPSPEED) {
+ ispeed = cfgetispeed(tp); /* save the original setting */
+ ospeed = cfgetospeed(tp);
+ } else
+ ospeed = ispeed = op->speeds[FIRST_SPEED];
/*
* Initial termios settings: 8-bit characters, raw-mode, blocking i/o.
@@ -706,14 +720,21 @@ termio_init(tp, speed, op)
/* flush input and output queues, important for modems! */
(void) tcflush(0, TCIOFLUSH);
- tp->c_cflag = CS8 | HUPCL | CREAD;
- cfsetispeed(tp, speed);
- cfsetospeed(tp, speed);
+ tp->c_iflag = tp->c_lflag = tp->c_oflag = 0;
+
+ if (!(op->flags & F_KEEPCFLAGS))
+ tp->c_cflag = CS8 | HUPCL | CREAD | (tp->c_cflag & CLOCAL);
+
+ /* Note that the speed is stored in the c_cflag termios field, so we have
+ * set the speed always when the cflag se reseted.
+ */
+ cfsetispeed(tp, ispeed);
+ cfsetospeed(tp, ospeed);
+
if (op->flags & F_LOCAL) {
tp->c_cflag |= CLOCAL;
}
- tp->c_iflag = tp->c_lflag = tp->c_oflag = 0;
#ifdef HAVE_STRUCT_TERMIOS_C_LINE
tp->c_line = 0;
#endif
@@ -973,9 +994,18 @@ next_speed(tp, op)
struct termios *tp;
struct options *op;
{
- static int baud_index = FIRST_SPEED;/* current speed index */
+ static int baud_index = -1;
+
+ if (baud_index == -1)
+ /*
+ * if the F_KEEPSPEED flags is set then the FIRST_SPEED is not
+ * tested yet (see termio_init()).
+ */
+ baud_index = (op->flags & F_KEEPSPEED) ? FIRST_SPEED :
+ 1 % op->numspeed;
+ else
+ baud_index = (baud_index + 1) % op->numspeed;
- baud_index = (baud_index + 1) % op->numspeed;
cfsetispeed(tp, op->speeds[baud_index]);
cfsetospeed(tp, op->speeds[baud_index]);
(void) tcsetattr(0, TCSANOW, tp);
@@ -1203,7 +1233,7 @@ bcode(s)
void
usage()
{
- fprintf(stderr, _("Usage: %s [-8hiLmUw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] baud_rate,... line [termtype]\nor\t[-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] line baud_rate,... [termtype]\n"), progname);
+ fprintf(stderr, _("Usage: %s [-8hiLmsUw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] baud_rate,... line [termtype]\nor\t[-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] line baud_rate,... [termtype]\n"), progname);
exit(1);
}

View File

@ -1,526 +0,0 @@
fsck: add support for whole-disk locking (-l option)
This feature allows to call multiple independent fsck instances rather
than use only one "fsck -A" process.
The lock uses LOCK_EX flock(2). The lock request is ignored if the
whole-disk is non-rotating disk. The verbose mode (-V) provides
information about disk locking.
Note that "fsck -l" does not care if the device is stacked, for
example if you want to call "fsck -l /dev/md0" and "fsck -l /dev/md1"
then the underlying devices will not be locked. The traditional "fsck
-A" does not run in parallel for stacked devices.
http://pkgs.fedoraproject.org/gitweb/?p=util-linux-ng.git;a=commitdiff;h=6c69926dbfca8b07bd2f93b56bc8e7c54c7b227d#patch1
diff -up util-linux-ng-2.18/fsck/fsck.8.kzak util-linux-ng-2.18/fsck/fsck.8
--- util-linux-ng-2.18/fsck/fsck.8.kzak 2010-06-30 12:51:35.000000000 +0200
+++ util-linux-ng-2.18/fsck/fsck.8 2010-10-26 23:55:30.000000000 +0200
@@ -7,7 +7,7 @@
fsck \- check and repair a Linux file system
.SH SYNOPSIS
.B fsck
-.RB [ \-sAVRTMNP ]
+.RB [ \-lsAVRTMNP ]
.RB [ \-C
.RI [ fd ]]
.RB [ \-t
@@ -80,6 +80,17 @@ variable. Please see the file system-sp
further details.
.SH OPTIONS
.TP
+.B \-l
+Lock whole-disk device by exclusive
+.BR flock (2).
+This option can be used with one device only (e.g. -A and -l are mutually
+exclusive). This option is recommended when more
+.B fsck (8)
+instances are executed in the same time. The option is ignored when used for
+multiple devices or for non-rotating disk. The fsck does not lock underlying
+devices if executed to check stacked devices (e.g. MD or DM) -- this feature is
+not implemented yet.
+.TP
.B \-s
Serialize
.B fsck
@@ -200,6 +211,11 @@ If there are multiple filesystems with t
fsck will attempt to check them in parallel, although it will avoid running
multiple filesystem checks on the same physical disk.
.sp
+.B fsck
+does not check stacked devices (RAIDs, dm-crypt, ...) in parallel with any other
+device. See below for FSCK_FORCE_ALL_PARALLEL setting. The /sys filesystem is
+used to detemine dependencies between devices.
+.sp
Hence, a very common configuration in
.I /etc/fstab
files is to set the root filesystem to have a
@@ -366,10 +382,10 @@ program's behavior is affected by the fo
.B FSCK_FORCE_ALL_PARALLEL
If this environment variable is set,
.B fsck
-will attempt to run all of the specified filesystems in parallel,
-regardless of whether the filesystems appear to be on the same
-device. (This is useful for RAID systems or high-end storage systems
-such as those sold by companies such as IBM or EMC.)
+will attempt to run all of the specified filesystems in parallel, regardless of
+whether the filesystems appear to be on the same device. (This is useful for
+RAID systems or high-end storage systems such as those sold by companies such
+as IBM or EMC.) Note that the fs_passno value is still used.
.TP
.B FSCK_MAX_INST
This environment variable will limit the maximum number of file system
diff -up util-linux-ng-2.18/fsck/fsck.c.kzak util-linux-ng-2.18/fsck/fsck.c
--- util-linux-ng-2.18/fsck/fsck.c.kzak 2010-05-19 23:36:23.000000000 +0200
+++ util-linux-ng-2.18/fsck/fsck.c 2010-10-26 23:55:30.000000000 +0200
@@ -31,6 +31,8 @@
#include <sys/wait.h>
#include <sys/signal.h>
#include <sys/stat.h>
+#include <sys/file.h>
+#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <ctype.h>
@@ -42,6 +44,8 @@
#include <errno.h>
#include <malloc.h>
#include <signal.h>
+#include <dirent.h>
+#include <blkid.h>
#include "fsprobe.h"
@@ -85,6 +89,7 @@ char *devices[MAX_DEVICES];
char *args[MAX_ARGS];
int num_devices, num_args;
+int lockdisk = 0;
int verbose = 0;
int doall = 0;
int noexecute = 0;
@@ -214,11 +219,97 @@ static void parse_escape(char *word)
*q = 0;
}
+static dev_t get_disk(const char *device)
+{
+ struct stat st;
+ dev_t disk;
+
+ if (!stat(device, &st) &&
+ !blkid_devno_to_wholedisk(st.st_rdev, NULL, 0, &disk))
+ return disk;
+
+ return 0;
+}
+
+static int is_irrotational_disk(dev_t disk)
+{
+ char path[PATH_MAX];
+ FILE *f;
+ int rc, x;
+
+ rc = snprintf(path, sizeof(path),
+ "/sys/dev/block/%d:%d/queue/rotational",
+ major(disk), minor(disk));
+
+ if (rc < 0 || rc + 1 > sizeof(path))
+ return 0;
+
+ f = fopen(path, "r");
+ if (!f)
+ return 0;
+
+ rc = fscanf(f, "%u", &x);
+ fclose(f);
+
+ return rc == 1 ? !x : 0;
+}
+
+static void lock_disk(struct fsck_instance *inst)
+{
+ dev_t disk = inst->fs->disk ? : get_disk(inst->fs->device);
+ char *diskname;
+
+ if (!disk || is_irrotational_disk(disk))
+ return;
+
+ diskname = blkid_devno_to_devname(disk);
+ if (!diskname)
+ return;
+
+ if (verbose)
+ printf(_("Locking disk %s ... "), diskname);
+
+ inst->lock = open(diskname, O_CLOEXEC | O_RDONLY);
+ if (inst->lock >= 0) {
+ int rc = -1;
+
+ /* inform users that we're waiting on the lock */
+ if (verbose &&
+ (rc = flock(inst->lock, LOCK_EX | LOCK_NB)) != 0 &&
+ errno == EWOULDBLOCK)
+ printf(_("(waiting) "));
+
+ if (rc != 0 && flock(inst->lock, LOCK_EX) != 0) {
+ close(inst->lock); /* failed */
+ inst->lock = -1;
+ }
+ }
+
+ if (verbose)
+ printf("%s.\n", inst->lock >= 0 ? _("success") : _("failed"));
+
+ free(diskname);
+ return;
+}
+
+static void unlock_disk(struct fsck_instance *inst)
+{
+ if (inst->lock >= 0) {
+ /* explicitly unlock, don't rely on close(), maybe some library
+ * (e.g. liblkid) has still open the device.
+ */
+ flock(inst->lock, LOCK_UN);
+ close(inst->lock);
+ }
+}
+
+
+
static void free_instance(struct fsck_instance *i)
{
+ if (lockdisk)
+ unlock_disk(i);
free(i->prog);
- free(i->device);
- free(i->base_device);
free(i);
return;
}
@@ -240,6 +331,8 @@ static struct fs_info *create_fs_device(
fs->passno = passno;
fs->flags = 0;
fs->next = NULL;
+ fs->disk = 0;
+ fs->stacked = 0;
if (!filesys_info)
filesys_info = fs;
@@ -414,8 +507,7 @@ static int progress_active(NOARGS)
* Execute a particular fsck program, and link it into the list of
* child processes we are waiting for.
*/
-static int execute(const char *type, const char *device, const char *mntpt,
- int interactive)
+static int execute(const char *type, struct fs_info *fs, int interactive)
{
char *s, *argv[80], prog[80];
int argc, i;
@@ -452,7 +544,7 @@ static int execute(const char *type, con
}
}
- argv[argc++] = string_copy(device);
+ argv[argc++] = string_copy(fs->device);
argv[argc] = 0;
s = find_fsck(prog);
@@ -464,12 +556,19 @@ static int execute(const char *type, con
if (verbose || noexecute) {
printf("[%s (%d) -- %s] ", s, num_running,
- mntpt ? mntpt : device);
+ fs->mountpt ? fs->mountpt : fs->device);
for (i=0; i < argc; i++)
printf("%s ", argv[i]);
printf("\n");
}
+
+ inst->fs = fs;
+ inst->lock = -1;
+
+ if (lockdisk)
+ lock_disk(inst);
+
/* Fork and execute the correct program. */
if (noexecute)
pid = -1;
@@ -492,8 +591,6 @@ static int execute(const char *type, con
inst->pid = pid;
inst->prog = string_copy(prog);
inst->type = string_copy(type);
- inst->device = string_copy(device);
- inst->base_device = base_device(device);
inst->start_time = time(0);
inst->next = NULL;
@@ -597,12 +694,12 @@ static struct fsck_instance *wait_one(in
} else {
printf(_("Warning... %s for device %s exited "
"with signal %d.\n"),
- inst->prog, inst->device, sig);
+ inst->prog, inst->fs->device, sig);
status = EXIT_ERROR;
}
} else {
printf(_("%s %s: status is %x, should never happen.\n"),
- inst->prog, inst->device, status);
+ inst->prog, inst->fs->device, status);
status = EXIT_ERROR;
}
inst->exit_status = status;
@@ -641,7 +738,7 @@ ret_inst:
instance_list = inst->next;
if (verbose > 1)
printf(_("Finished with %s (exit status %d)\n"),
- inst->device, inst->exit_status);
+ inst->fs->device, inst->exit_status);
num_running--;
return inst;
}
@@ -698,7 +795,7 @@ static void fsck_device(struct fs_info *
type = DEFAULT_FSTYPE;
num_running++;
- retval = execute(type, fs->device, fs->mountpt, interactive);
+ retval = execute(type, fs, interactive);
if (retval) {
fprintf(stderr, _("%s: Error %d while executing fsck.%s "
"for %s\n"), progname, retval, type, fs->device);
@@ -924,40 +1021,70 @@ static int ignore(struct fs_info *fs)
return 0;
}
+static int count_slaves(dev_t disk)
+{
+ DIR *dir;
+ struct dirent *dp;
+ char dirname[PATH_MAX];
+ int count = 0;
+
+ snprintf(dirname, sizeof(dirname),
+ "/sys/dev/block/%u:%u/slaves/",
+ major(disk), minor(disk));
+
+ if (!(dir = opendir(dirname)))
+ return -1;
+
+ while ((dp = readdir(dir)) != 0) {
+#ifdef _DIRENT_HAVE_D_TYPE
+ if (dp->d_type != DT_UNKNOWN && dp->d_type != DT_LNK)
+ continue;
+#endif
+ if (dp->d_name[0] == '.' &&
+ ((dp->d_name[1] == 0) ||
+ ((dp->d_name[1] == '.') && (dp->d_name[2] == 0))))
+ continue;
+
+ count++;
+ }
+ closedir(dir);
+ return count;
+}
+
/*
* Returns TRUE if a partition on the same disk is already being
* checked.
*/
-static int device_already_active(char *device)
+static int disk_already_active(struct fs_info *fs)
{
struct fsck_instance *inst;
- char *base;
if (force_all_parallel)
return 0;
-#ifdef BASE_MD
- /* Don't check a soft raid disk with any other disk */
- if (instance_list &&
- (!strncmp(instance_list->device, BASE_MD, sizeof(BASE_MD)-1) ||
- !strncmp(device, BASE_MD, sizeof(BASE_MD)-1)))
+ if (instance_list && instance_list->fs->stacked)
+ /* any instance for a stacked device is already running */
return 1;
-#endif
- base = base_device(device);
+ if (!fs->disk) {
+ fs->disk = get_disk(fs->device);
+ if (fs->disk)
+ fs->stacked = count_slaves(fs->disk);
+ }
+
/*
* If we don't know the base device, assume that the device is
* already active if there are any fsck instances running.
+ *
+ * Don't check a stacked device with any other disk too.
*/
- if (!base)
+ if (!fs->disk || fs->stacked)
return (instance_list != 0);
+
for (inst = instance_list; inst; inst = inst->next) {
- if (!inst->base_device || !strcmp(base, inst->base_device)) {
- free(base);
+ if (!inst->fs->disk || fs->disk == inst->fs->disk)
return 1;
- }
}
- free(base);
return 0;
}
@@ -1038,7 +1165,7 @@ static int check_all(NOARGS)
* already been spawned, then we need to defer
* this to another pass.
*/
- if (device_already_active(fs->device)) {
+ if (disk_already_active(fs)) {
pass_done = 0;
continue;
}
@@ -1188,6 +1315,9 @@ static void PRS(int argc, char *argv[])
}
}
break;
+ case 'l':
+ lockdisk++;
+ break;
case 'V':
verbose++;
break;
@@ -1298,6 +1428,12 @@ int main(int argc, char *argv[])
if ((num_devices == 1) || (serialize))
interactive = 1;
+ if (lockdisk && (doall || num_devices > 1)) {
+ fprintf(stderr, _("%s: the -l option can be used with one "
+ "device only -- ignore\n"), progname);
+ lockdisk = 0;
+ }
+
/* If -A was specified ("check all"), do that! */
if (doall)
return check_all();
diff -up util-linux-ng-2.18/fsck/fsck.h.kzak util-linux-ng-2.18/fsck/fsck.h
--- util-linux-ng-2.18/fsck/fsck.h.kzak 2010-03-18 23:11:23.000000000 +0100
+++ util-linux-ng-2.18/fsck/fsck.h 2010-10-26 23:55:30.000000000 +0200
@@ -44,6 +44,8 @@ struct fs_info {
int freq;
int passno;
int flags;
+ dev_t disk;
+ int stacked;
struct fs_info *next;
};
@@ -56,12 +58,12 @@ struct fs_info {
struct fsck_instance {
int pid;
int flags;
+ int lock; /* flock()ed whole disk file descriptor or -1 */
int exit_status;
time_t start_time;
char * prog;
char * type;
- char * device;
- char * base_device;
+ struct fs_info *fs;
struct fsck_instance *next;
};
diff -up util-linux-ng-2.18/fsck/Makefile.am.kzak util-linux-ng-2.18/fsck/Makefile.am
--- util-linux-ng-2.18/fsck/Makefile.am.kzak 2010-05-24 12:33:46.000000000 +0200
+++ util-linux-ng-2.18/fsck/Makefile.am 2010-10-26 23:55:30.000000000 +0200
@@ -3,7 +3,7 @@ include $(top_srcdir)/config/include-Mak
sbin_PROGRAMS = fsck
dist_man_MANS = fsck.8
-fsck_SOURCES = base_device.c fsck.c fsck.h $(top_srcdir)/lib/ismounted.c \
+fsck_SOURCES = fsck.c fsck.h $(top_srcdir)/lib/ismounted.c \
$(top_srcdir)/lib/fsprobe.c $(top_srcdir)/lib/canonicalize.c
fsck_LDADD =
fsck_CFLAGS = $(AM_CFLAGS)
diff -up util-linux-ng-2.18/fsck/Makefile.in.kzak util-linux-ng-2.18/fsck/Makefile.in
--- util-linux-ng-2.18/fsck/Makefile.in.kzak 2010-10-26 23:56:04.000000000 +0200
+++ util-linux-ng-2.18/fsck/Makefile.in 2010-10-26 23:56:15.000000000 +0200
@@ -62,9 +62,8 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
PROGRAMS = $(sbin_PROGRAMS)
-am_fsck_OBJECTS = fsck-base_device.$(OBJEXT) fsck-fsck.$(OBJEXT) \
- fsck-ismounted.$(OBJEXT) fsck-fsprobe.$(OBJEXT) \
- fsck-canonicalize.$(OBJEXT)
+am_fsck_OBJECTS = fsck-fsck.$(OBJEXT) fsck-ismounted.$(OBJEXT) \
+ fsck-fsprobe.$(OBJEXT) fsck-canonicalize.$(OBJEXT)
fsck_OBJECTS = $(am_fsck_OBJECTS)
am__DEPENDENCIES_1 =
@BUILD_LIBBLKID_FALSE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
@@ -204,6 +203,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
@@ -315,7 +315,7 @@ ul_libmount_la = $(top_builddir)/shlibs/
# mount.h is generated by ./configure script and stored in build directory
ul_libmount_incdir = $(ul_libmount_builddir)
dist_man_MANS = fsck.8
-fsck_SOURCES = base_device.c fsck.c fsck.h $(top_srcdir)/lib/ismounted.c \
+fsck_SOURCES = fsck.c fsck.h $(top_srcdir)/lib/ismounted.c \
$(top_srcdir)/lib/fsprobe.c $(top_srcdir)/lib/canonicalize.c
fsck_LDADD = $(am__append_1) $(am__append_3)
@@ -407,7 +407,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck-base_device.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck-canonicalize.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck-fsck.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsck-fsprobe.Po@am__quote@
@@ -437,22 +436,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-fsck-base_device.o: base_device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_CFLAGS) $(CFLAGS) -MT fsck-base_device.o -MD -MP -MF $(DEPDIR)/fsck-base_device.Tpo -c -o fsck-base_device.o `test -f 'base_device.c' || echo '$(srcdir)/'`base_device.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fsck-base_device.Tpo $(DEPDIR)/fsck-base_device.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='base_device.c' object='fsck-base_device.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_CFLAGS) $(CFLAGS) -c -o fsck-base_device.o `test -f 'base_device.c' || echo '$(srcdir)/'`base_device.c
-
-fsck-base_device.obj: base_device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_CFLAGS) $(CFLAGS) -MT fsck-base_device.obj -MD -MP -MF $(DEPDIR)/fsck-base_device.Tpo -c -o fsck-base_device.obj `if test -f 'base_device.c'; then $(CYGPATH_W) 'base_device.c'; else $(CYGPATH_W) '$(srcdir)/base_device.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fsck-base_device.Tpo $(DEPDIR)/fsck-base_device.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='base_device.c' object='fsck-base_device.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_CFLAGS) $(CFLAGS) -c -o fsck-base_device.obj `if test -f 'base_device.c'; then $(CYGPATH_W) 'base_device.c'; else $(CYGPATH_W) '$(srcdir)/base_device.c'; fi`
-
fsck-fsck.o: fsck.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fsck_CFLAGS) $(CFLAGS) -MT fsck-fsck.o -MD -MP -MF $(DEPDIR)/fsck-fsck.Tpo -c -o fsck-fsck.o `test -f 'fsck.c' || echo '$(srcdir)/'`fsck.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fsck-fsck.Tpo $(DEPDIR)/fsck-fsck.Po
diff -up util-linux-ng-2.18/Makefile.am.kzak util-linux-ng-2.18/Makefile.am
--- util-linux-ng-2.18/Makefile.am.kzak 2010-03-18 23:11:23.000000000 +0100
+++ util-linux-ng-2.18/Makefile.am 2010-10-26 23:55:30.000000000 +0200
@@ -30,8 +30,10 @@ SUBDIRS += mount
endif
if BUILD_FSCK
+if BUILD_LIBBLKID
SUBDIRS += fsck
endif
+endif
ACLOCAL_AMFLAGS = -I m4

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b8c5c07c763888aa712b4585393346667a00793127c54cef0470cfa456b031cc
size 7669676

View File

@ -1,42 +0,0 @@
From: Jeff Mahoney <jeffm@suse.com>
Subject: swapon: Document btrfs limitation with swapfiles
References: bnc#616617
Btrfs, as of 2.6.35, is unable to allow swapfiles to be used on its
filesystems. This is due to the swapfile implementation wanting to build
an extent map of each block in the file and expecting it to be static
for the life of the swapfile.
Btrfs can't guarantee this and refuses to return the mapping. The swapfile
implementation just makes a comment about there being holes in the file -
but that's how btrfs denies the mapping.
This patch adds a section to the swapon manpage to document it.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
mount/swapon.8 | 12 ++++++++++++
1 file changed, 12 insertions(+)
--- a/mount/swapon.8
+++ b/mount/swapon.8
@@ -167,6 +167,18 @@ automatically detects and rewrites swap
suspend data (e.g S1SUSPEND, S2SUSPEND, ...). The problem is that if we don't
do it, then we get data corruption the next time an attempt at unsuspending is
made.
+.PP
+.B swapon
+may not work correctly when using a swap file with some versions of btrfs.
+This is due to the swap file implementation in the kernel expecting to be able
+to write to the file directly, without the assistance of the file system.
+Since btrfs is a copy-on-write file system, the file location may not be
+static and corruption can result. Btrfs actively disallows the use of files
+on its file systems by refusing to map the file. This can be seen in the system
+log as "swapon: swapfile has holes." One possible workaround is to map the
+file to a loopback device. This will allow the file system to determine the
+mapping properly but may come with a performance impact.
+
.SH SEE ALSO
.BR swapon (2),
.BR swapoff (2),

View File

@ -1,41 +0,0 @@
Index: util-linux-ng-2.18/mount/swapon.c
===================================================================
--- util-linux-ng-2.18.orig/mount/swapon.c
+++ util-linux-ng-2.18/mount/swapon.c
@@ -23,6 +23,7 @@
#include "pathnames.h"
#include "swapheader.h"
#include "mangle.h"
+#include "canonicalize.h"
#define PATH_MKSWAP "/sbin/mkswap"
@@ -171,7 +172,11 @@ read_proc_swaps(void) {
break;
swapFiles = q;
- swapFiles[numSwaps++] = unmangle(line);
+ if ((p = unmangle(line)) == NULL)
+ break;
+
+ swapFiles[numSwaps++] = canonicalize_path(p);
+ free(p);
}
fclose(swaps);
}
@@ -179,10 +184,14 @@ read_proc_swaps(void) {
static int
is_in_proc_swaps(const char *fname) {
int i;
+ char *p = canonicalize_path(fname);
for (i = 0; i < numSwaps; i++)
- if (swapFiles[i] && !strcmp(fname, swapFiles[i]))
+ if (swapFiles[i] && !strcmp(p, swapFiles[i])) {
+ free(p);
return 1;
+ }
+ free(p);
return 0;
}

View File

@ -1,3 +1,56 @@
-------------------------------------------------------------------
Thu Jan 6 16:43:46 UTC 2011 - puzel@novell.com
- update to util-linux-2.19-rc1
- important changes:
* lsblk(8):
- this NEW COMMAND lists information about all or selected block
devices in tree-like format.
* partx(8):
- this command has been rewritten to use libblkid for partition
tables parsing. It supports aix, bsd, dos, gpt, mac, minix,
sgi, solaris_x86, sun, ultrix and unixware now.
- supports new command line option "--show" to list partitions in
new format
- prints UUID and name for GPT and mac partitions
* findmnt(8):
- supports new command line option "--submounts" to list all
submounts for selected mountpoint(s)
* agetty(8):
- supports new command line options "-c" and "-s" to reuse
already initialized tty cflags and existing baud rate
* mount(8), umount(8):
- could be linked with libmount (--enable-libmount-mount) to
manage userspace mount options outside /etc/mtab on systems
where the file is a symlink to /proc/mounts. (EXPERIMENTAL,
enabled in openSUSE package)
* losetup(8), mount(8):
- uses /sys/dev/block/<device>/loop/backing_file rather than
loopdev ioctls (requires kernel >= 2.6.37)
* fsck(8):
- supports new command line option "-l" to lock whole-disk device
by exclusive flock(2). This option is recommended when more
fsck(8) instances are executed in the same time.
* rtcwake(8):
- supports new mode "show" to print the current RTC alarm time
* fstrim(8):
- this NEW COMMAND allows to discard unused blocks on a mounted
filesystem (wrapper for FITRIM ioctl)
* swapon(8):
- supports new options "discard" and "nofail"
- in post, replace /etc/mtab with a symlink to /proc/mounts/self
- drop following patches (in upstream)
- util-linux-swapon-btrfs-limitations
- util-linux-agetty-s-option.patch
- util-linux-fsck-l-option.patch
- util-linux-2.18-no-canonicalize-fix.patch
- util-linux-swapon-canonicalize-swap-device.patch
- fix uuidd Summary and Description
- build with --enable-libmount-mount (new option)
- use set_permissions macros
- run spec-cleaner
-------------------------------------------------------------------
Tue Dec 14 16:11:34 UTC 2010 - puzel@novell.com

View File

@ -1,5 +1,5 @@
#
# spec file for package util-linux (Version 2.18)
# spec file for package util-linux (Version 2.19-rc1)
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -20,6 +20,8 @@
%define which_ver 2.20
%define adjtimex_ver 1.28
%define ul_tar_version 2.19-rc1
Name: util-linux
BuildRequires: audit-devel
BuildRequires: gettext-devel
@ -30,6 +32,9 @@ BuildRequires: pam-devel
BuildRequires: pkg-config
BuildRequires: readline-devel
BuildRequires: zlib-devel
# HACK: work around bnc#663684
BuildRequires: libmount1
Version: 2.18.91
Url: http://kernel.org/~kzak/util-linux/
Supplements: filesystem(minix)
Provides: fsck-with-dev-lock = %{version}
@ -39,11 +44,10 @@ PreReq: %install_info_prereq permissions
License: GPLv2+
Group: System/Base
AutoReqProv: on
Version: 2.18
Release: 7
Recommends: %name-lang = %{version}
Recommends: %{name}-lang = %{version}
Summary: A collection of basic system utilities
Source: ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/v%{version}/%name-ng-%{version}.tar.bz2
Source: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v19/%{name}-%{ul_tar_version}.tar.bz2
Source1: util-linux-rpmlintrc
# XXX: make nologin part of login package
Source2: nologin.c
@ -81,11 +85,6 @@ Patch1: util-linux-2.12r-fdisk_remove_bogus_warnings.patch
# crypto patch
Patch3: util-linux-2.17.1-mount_losetup_crypto.patch
Patch4: util-linux-2.17.1-losetup-honor-documented-c-option
Patch7: util-linux-swapon-btrfs-limitations
Patch8: util-linux-agetty-s-option.patch
Patch9: util-linux-fsck-l-option.patch
Patch10: util-linux-2.18-no-canonicalize-fix.patch
Patch11: util-linux-swapon-canonicalize-swap-device.patch
##
## adjtimex
##
@ -117,7 +116,6 @@ mount program, the fdisk configuration tool, and more.
License: GPLv2+
Summary: Filesystem detection library
Group: System/Filesystems
AutoReqProv: on
%description -n libblkid1
Library for filesystem detection.
@ -126,8 +124,7 @@ Library for filesystem detection.
License: GPLv2+
Summary: Development files for the filesystem detection library
Group: Development/Libraries/C and C++
AutoReqProv: on
Requires: libblkid1 = %version
Requires: libblkid1 = %{version}
%description -n libblkid-devel
Files needed to develop applications using the library for filesystem
@ -135,21 +132,22 @@ detection.
%package -n uuidd
License: GPLv2+
Summary: Utilities for the Second Extended File System
Summary: Helper daemon to guarantee uniqueness of time-based UUIDs
Group: System/Filesystems
AutoReqProv: on
PreReq: %fillup_prereq %insserv_prereq permissions pwdutils
PreReq: %fillup_prereq
PreReq: %insserv_prereq
PreReq: permissions
PreReq: pwdutils
%description -n uuidd
Utilities needed to create and maintain ext2 and ext3 file systems
under Linux. Included in this package are: chattr, lsattr, mke2fs,
mklost+found, tune2fs, e2fsck, resize2fs, and badblocks.
The uuidd package contains a userspace daemon (uuidd) which guarantees
uniqueness of time-based UUID generation even at very high rates on
SMP systems.
%package -n libuuid1
License: GPLv2+
Summary: Library to generate UUIDs
Group: System/Filesystems
AutoReqProv: on
%description -n libuuid1
A library to generate universally unique IDs (UUIDs).
@ -158,8 +156,7 @@ A library to generate universally unique IDs (UUIDs).
License: GPLv2+
Summary: Development files for libuuid1
Group: Development/Libraries/C and C++
AutoReqProv: on
Requires: libuuid1 = %version
Requires: libuuid1 = %{version}
%description -n libuuid-devel
Files to develop applications using the library to generate universally
@ -167,9 +164,8 @@ unique IDs (UUIDs).
%package -n libmount1
License: GPLv2+
Summary: Mount library
Summary: Device mount library
Group: System/Filesystems
AutoReqProv: on
%description -n libmount1
Library designed to be used in low-level utils like
@ -179,23 +175,17 @@ mount(8) and /sbin/mount.<type> helpers.
License: GPLv2+
Summary: Development files for libmount1
Group: Development/Libraries/C and C++
AutoReqProv: on
Requires: libmount1 = %version
Requires: libmount1 = %{version}
%description -n libmount-devel
Files to develop applications using the libmount library.
%lang_package
%prep
%setup -q -a 9 -b 11 -b 12 -b 13 -n %name-ng-%version
%setup -q -a 9 -b 11 -b 12 -b 13 -n %{name}-%ul_tar_version
%patch1 -p1
%patch3 -p1
%patch4 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
#
cd adjtimex-*
@ -208,7 +198,7 @@ cp %{S:2} %{S:3} %{S:26} %{S:30} .
cd ../klogconsole
#%#patch55 -p1 -b .quiet
%patch55 -p1
%patch56 -p1
%patch56 -p1
cd ../time-*
%patch60
cd ../which-*
@ -217,7 +207,7 @@ cd ../which-*
%build
# adjtimex build
cd adjtimex-%{adjtimex_ver}
CFLAGS="$RPM_OPT_FLAGS" ./configure
CFLAGS="%{optflags}" ./configure
make %{?_smp_mflags}
cd ..
pushd ../
@ -227,7 +217,7 @@ aclocal --force
autoconf --force
automake --force-missing --add-missing --foreign
%{?suse_update_config:%{suse_update_config}}
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr \
CFLAGS="%{optflags}" ./configure --prefix=/usr \
--mandir=%{_mandir} \
--infodir=%{_infodir} \
%{_target_cpu}-suse-linux
@ -236,7 +226,7 @@ cd ..
# time build
cd time-%{time_ver}
%{?suse_update_config:%{suse_update_config}}
CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE " INSTALL_PROGRAM='$(INSTALL)' \
CFLAGS="%{optflags} -D_GNU_SOURCE " INSTALL_PROGRAM='$(INSTALL)' \
./configure --prefix=/usr \
--mandir=%{_mandir} \
--infodir=%{_infodir} \
@ -245,19 +235,19 @@ make %{?_smp_mflags}
cd ..
# klogconsole build
cd klogconsole
make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS"
make %{?_smp_mflags} CFLAGS="%{optflags}"
cd ..
popd
# setctsid build
rm -f setctsid
make %{?_smp_mflags} setctsid CFLAGS="$RPM_OPT_FLAGS"
make %{?_smp_mflags} setctsid CFLAGS="%{optflags}"
#
# util-linux itself
#
autoreconf -fi
export SUID_CFLAGS="-fpie"
export SUID_LDFLAGS="-pie"
CFLAGS="$RPM_OPT_FLAGS" \
CFLAGS="%{optflags}" \
%configure \
--bindir=/bin \
--sbindir=/sbin \
@ -269,154 +259,163 @@ CFLAGS="$RPM_OPT_FLAGS" \
--enable-partx \
--enable-raw \
--enable-write \
--enable-libmount-mount \
--disable-use-tty-group \
--disable-static \
--disable-silent-rules
#
make %{?_smp_mflags}
#
gcc $RPM_OPT_FLAGS -o nologin nologin.c
gcc $RPM_OPT_FLAGS -o mkzimage_cmdline %{S:29}
gcc $RPM_OPT_FLAGS -o chrp-addnote %{SOURCE31}
gcc %{optflags} -o nologin nologin.c
gcc %{optflags} -o mkzimage_cmdline %{S:29}
gcc %{optflags} -o chrp-addnote %{SOURCE31}
%check
cd ../time-%{time_ver}
make check
%install
mkdir -p "$RPM_BUILD_ROOT"{/etc/init.d,%{_mandir}/man{1,8},/bin,/sbin,/usr/bin,/usr/sbin,%{_infodir}}
mkdir -p $RPM_BUILD_ROOT/var/lib/libuuid/
mkdir -p $RPM_BUILD_ROOT/var/run/uuidd/
install -m 744 %{SOURCE50} $RPM_BUILD_ROOT/etc/init.d/uuidd
install -m 644 %{SOURCE51} $RPM_BUILD_ROOT/etc/blkid.conf
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
mkdir -p %{buildroot}{/etc/init.d,%{_mandir}/man{1,8},/bin,/sbin,/usr/bin,/usr/sbin,%{_infodir}}
mkdir -p %{buildroot}%{_localstatedir}/lib/libuuid/
mkdir -p %{buildroot}%{_localstatedir}/run/uuidd/
install -m 744 %{SOURCE50} %{buildroot}%{_initddir}/uuidd
install -m 644 %{SOURCE51} %{buildroot}%{_sysconfdir}/blkid.conf
mkdir -p %{buildroot}%{_localstatedir}/adm/fillup-templates
cp adjtimex-*/adjtimex %{buildroot}/sbin/
cp adjtimex-*/adjtimex.8 %{buildroot}%{_mandir}/man8/
pushd ..
# which install
cd which-%{which_ver}
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_defaultdocdir}/which
install -m 0644 README $RPM_BUILD_ROOT%{_defaultdocdir}/which/
install -m 0644 EXAMPLES $RPM_BUILD_ROOT%{_defaultdocdir}/which/
install -m 0644 README.alias $RPM_BUILD_ROOT%{_defaultdocdir}/which/
%make_install
mkdir -p %{buildroot}%{_defaultdocdir}/which
install -m 0644 README %{buildroot}%{_defaultdocdir}/which/
install -m 0644 EXAMPLES %{buildroot}%{_defaultdocdir}/which/
install -m 0644 README.alias %{buildroot}%{_defaultdocdir}/which/
cd ..
# time install
cd time-%{time_ver}
mkdir -p $RPM_BUILD_ROOT%{_defaultdocdir}/time
make install DESTDIR=$RPM_BUILD_ROOT \
prefix=$RPM_BUILD_ROOT/usr \
infodir=$RPM_BUILD_ROOT%{_infodir} \
mandir=$RPM_BUILD_ROOT%{_mandir}
install -m 0644 README $RPM_BUILD_ROOT%{_defaultdocdir}/time/
install -m 0644 AUTHORS $RPM_BUILD_ROOT%{_defaultdocdir}/time/
install -m 0644 COPYING $RPM_BUILD_ROOT%{_defaultdocdir}/time/
install -m 0644 NEWS $RPM_BUILD_ROOT%{_defaultdocdir}/time/
mkdir -p %{buildroot}%{_defaultdocdir}/time
make install DESTDIR=%{buildroot} \
prefix=%{buildroot}/usr \
infodir=%{buildroot}%{_infodir} \
mandir=%{buildroot}%{_mandir}
install -m 0644 README %{buildroot}%{_defaultdocdir}/time/
install -m 0644 AUTHORS %{buildroot}%{_defaultdocdir}/time/
install -m 0644 COPYING %{buildroot}%{_defaultdocdir}/time/
install -m 0644 NEWS %{buildroot}%{_defaultdocdir}/time/
cd ..
# klogconsole install
cd klogconsole
make install DEST=$RPM_BUILD_ROOT
make install DEST=%{buildroot}
popd
#
# util-linux install
#
make DESTDIR=$RPM_BUILD_ROOT install
mv $RPM_BUILD_ROOT/usr/bin/logger $RPM_BUILD_ROOT/bin/logger
install -m 644 %{SOURCE6} $RPM_BUILD_ROOT/etc/filesystems
install -m 755 nologin $RPM_BUILD_ROOT/sbin
rm -f $RPM_BUILD_ROOT/%{_libdir}/libblkid.la
rm -f $RPM_BUILD_ROOT/%{_libdir}/libuuid.la
rm -f $RPM_BUILD_ROOT/%{_libdir}/libmount.la
%make_install
mv %{buildroot}%{_bindir}/logger %{buildroot}/bin/logger
install -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/filesystems
install -m 755 nologin %{buildroot}/sbin
rm -f %{buildroot}/%{_libdir}/libblkid.la
rm -f %{buildroot}/%{_libdir}/libuuid.la
rm -f %{buildroot}/%{_libdir}/libmount.la
%ifnarch ppc ppc64
install -m 755 mkzimage_cmdline $RPM_BUILD_ROOT/usr/bin
install -m 644 %{S:28} $RPM_BUILD_ROOT%{_mandir}/man8
install -m 755 chrp-addnote $RPM_BUILD_ROOT/usr/bin
install -m 755 mkzimage_cmdline %{buildroot}%{_prefix}/bin
install -m 644 %{S:28} %{buildroot}%{_mandir}/man8
install -m 755 chrp-addnote %{buildroot}%{_prefix}/bin
%endif
install -m 644 nologin.8 $RPM_BUILD_ROOT%{_mandir}/man8
install -m 644 nologin.8 %{buildroot}%{_mandir}/man8
# setctsid install
install -m 755 setctsid $RPM_BUILD_ROOT/usr/sbin
install -m 444 setctsid.8 $RPM_BUILD_ROOT%{_mandir}/man8/
echo -e "#! /bin/bash\n/sbin/blockdev --flushbufs \$1" > $RPM_BUILD_ROOT/usr/sbin/flushb
chmod 755 $RPM_BUILD_ROOT/usr/sbin/flushb
install -m 755 setctsid %{buildroot}%{_prefix}/sbin
install -m 444 setctsid.8 %{buildroot}%{_mandir}/man8/
echo -e "#! /bin/bash\n/sbin/blockdev --flushbufs \$1" > %{buildroot}%{_sbindir}/flushb
chmod 755 %{buildroot}%{_sbindir}/flushb
# Install scripts to configure raw devices at boot time
install -m 644 $RPM_SOURCE_DIR/etc.raw $RPM_BUILD_ROOT/etc/raw
install -m 755 $RPM_SOURCE_DIR/raw.init $RPM_BUILD_ROOT/etc/init.d/raw
ln -sf ../../etc/init.d/raw $RPM_BUILD_ROOT/usr/sbin/rcraw
install -m 644 $RPM_SOURCE_DIR/etc.raw %{buildroot}%{_sysconfdir}/raw
install -m 755 $RPM_SOURCE_DIR/raw.init %{buildroot}%{_initddir}/raw
ln -sf ../../etc/init.d/raw %{buildroot}%{_sbindir}/rcraw
# Stupid hack so we don't have a tcsh dependency
chmod 644 $RPM_BUILD_ROOT/usr/share/getopt/getopt*.tcsh
chmod 644 %{buildroot}%{_datadir}/getopt/getopt*.tcsh
# Following files we don't want to package, so remove them
rm -f $RPM_BUILD_ROOT/usr/bin/pg
rm -f $RPM_BUILD_ROOT/usr/share/man/man1/pg.1*
rm -f %{buildroot}%{_bindir}/pg
rm -f %{buildroot}%{_mandir}/man1/pg.1*
# Do not package these files to get rid of the perl dependency
rm -f $RPM_BUILD_ROOT/usr/bin/chkdupexe
rm -f $RPM_BUILD_ROOT/usr/share/man/man1/chkdupexe.1
rm -f %{buildroot}%{_bindir}/chkdupexe
rm -f %{buildroot}%{_mandir}/man1/chkdupexe.1
# arch dependent
%ifarch s390 s390x
rm -f $RPM_BUILD_ROOT/etc/fdprm
rm -f $RPM_BUILD_ROOT/usr/bin/cytune
rm -f $RPM_BUILD_ROOT/usr/sbin/fdformat
rm -f $RPM_BUILD_ROOT/sbin/hwclock
rm -f $RPM_BUILD_ROOT/usr/sbin/klogconsole
rm -f $RPM_BUILD_ROOT/usr/bin/setterm
rm -f $RPM_BUILD_ROOT/usr/sbin/tunelp
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/cytune.8*
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/fdformat.8*
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/hwclock.8*
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/klogconsole.8*
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/tunelp.8*
rm -f %{buildroot}%{_sysconfdir}/fdprm
rm -f %{buildroot}%{_bindir}/cytune
rm -f %{buildroot}%{_sbindir}/fdformat
rm -f %{buildroot}/sbin/hwclock
rm -f %{buildroot}%{_sbindir}/klogconsole
rm -f %{buildroot}%{_bindir}/setterm
rm -f %{buildroot}%{_sbindir}/tunelp
rm -f %{buildroot}/%{_mandir}/man8/cytune.8*
rm -f %{buildroot}/%{_mandir}/man8/fdformat.8*
rm -f %{buildroot}/%{_mandir}/man8/hwclock.8*
rm -f %{buildroot}/%{_mandir}/man8/klogconsole.8*
rm -f %{buildroot}/%{_mandir}/man8/tunelp.8*
%endif
%ifarch ia64 %sparc
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/cfdisk.8*
rm -f $RPM_BUILD_ROOT/%{_mandir}/man8/sfdisk.8*
rm -f $RPM_BUILD_ROOT/sbin/cfdisk
rm -f $RPM_BUILD_ROOT/sbin/sfdisk
rm -f %{buildroot}/%{_mandir}/man8/cfdisk.8*
rm -f %{buildroot}/%{_mandir}/man8/sfdisk.8*
rm -f %{buildroot}/sbin/cfdisk
rm -f %{buildroot}/sbin/sfdisk
%endif
%ifarch ia64
rm -f $RPM_BUILD_ROOT/sbin/fdisk
rm -f $RPM_BUILD_ROOT%{_mandir}/man8/fdisk.8*
rm -f %{buildroot}/sbin/fdisk
rm -f %{buildroot}%{_mandir}/man8/fdisk.8*
%endif
%find_lang %{name}-ng %{name}.lang
%find_lang %{name} %{name}.lang
# create list of setarch(8) symlinks
find $RPM_BUILD_ROOT%{_bindir}/ -regextype posix-egrep -type l \
find %{buildroot}%{_bindir}/ -regextype posix-egrep -type l \
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)$" \
-printf "%{_bindir}/%f\n" >> %{name}.files
find $RPM_BUILD_ROOT%{_mandir}/man8 -regextype posix-egrep \
find %{buildroot}%{_mandir}/man8 -regextype posix-egrep \
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)\.8.*" \
-printf "%{_mandir}/man8/%f*\n" >> %{name}.files
%clean
rm -rf $RPM_BUILD_ROOT
rm -rf %{buildroot}
%post
%{fillup_and_insserv raw}
%install_info --info-dir=%{_infodir} %{_infodir}/ipc.info.gz
%install_info --entry="* time: (time). summarizing used system resources" --info-dir=%{_infodir} %{_infodir}/time.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/which.info.gz
%if 0%{?suse_version} <= 1130
%run_permissions
%else
%set_permissions /usr/bin/wall /usr/bin/write /bin/mount /bin/umount
%endif
# mount option 'code=' is now called 'codepage=' so change fstab
if [ -f etc/fstab ]; then
sed -i 's:code=:codepage=:' etc/fstab
fi
# if /etc/mtab is a regular file, replace it with a symlink to /proc/self/mounts
# (regular mtab is not written/cleaned-up/supported by systemd)
if [ -f /etc/mtab ]; then
ln -sf /proc/self/mounts /etc/mtab || :
fi
%postun
%install_info_delete --info-dir=%{_infodir} %{_infodir}/ipc.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/time.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/which.info.gz
%{insserv_cleanup}
%verifyscript
%verify_permissions -e /usr/bin/wall -e /usr/bin/write
%verify_permissions -e /usr/bin/wall -e /usr/bin/write -e /bin/mount -e /bin/umount
%post -n libblkid1
/sbin/ldconfig
%post -n libblkid1 -p /sbin/ldconfig
%postun -n libblkid1
/sbin/ldconfig
%postun -n libblkid1 -p /sbin/ldconfig
%post -n libmount1
/sbin/ldconfig
%post -n libmount1 -p /sbin/ldconfig
%postun -n libmount1
/sbin/ldconfig
%postun -n libmount1 -p /sbin/ldconfig
%pre -n uuidd
/usr/sbin/groupadd -r uuidd 2>/dev/null || :
@ -428,17 +427,21 @@ fi
%post -n uuidd
%{fillup_and_insserv -n uuidd}
%if 0%{?suse_version} <= 1130
%run_permissions
%else
%set_permissions /usr/sbin/uuidd
%endif
%postun -n uuidd
%{restart_on_update uuidd}
%{insserv_cleanup}
%post -n libuuid1
/sbin/ldconfig
%post -n libuuid1 -p /sbin/ldconfig
%postun -n libuuid1
/sbin/ldconfig
%verifyscript -n uuidd
%verify_permissions -e /usr/sbin/uuidd
@ -457,15 +460,16 @@ fi
%doc hwclock/README.hwclock
%doc text-utils/README.col
%doc README.largedisk
%config %attr(744,root,root) /etc/init.d/raw
%config(noreplace) %attr(644,root,root) /etc/raw
%config(noreplace) /etc/filesystems
%config(noreplace) /etc/blkid.conf
%config %attr(744,root,root) %{_sysconfdir}/init.d/raw
%config(noreplace) %attr(644,root,root) %{_sysconfdir}/raw
%config(noreplace) %{_sysconfdir}/filesystems
%config(noreplace) %{_sysconfdir}/blkid.conf
/bin/dmesg
/bin/more
/bin/mount
/bin/umount
/bin/findmnt
/bin/lsblk
/sbin/adjtimex
/sbin/agetty
/sbin/blockdev
@ -491,62 +495,62 @@ fi
/sbin/wipefs
/sbin/fsfreeze
/sbin/swaplabel
/usr/bin/ipcmk
/sbin/fstrim
%{_bindir}/ipcmk
/bin/logger
/usr/bin/cal
/usr/bin/chrt
/usr/bin/col
/usr/bin/colcrt
/usr/bin/colrm
/usr/bin/column
/usr/bin/ddate
/usr/bin/fallocate
/usr/bin/flock
/usr/bin/getopt
/usr/bin/hexdump
/usr/bin/ionice
/usr/bin/ipcrm
/usr/bin/ipcs
/usr/bin/isosize
/usr/bin/line
/usr/bin/look
/usr/bin/lscpu
/usr/bin/mcookie
/usr/bin/mesg
/usr/bin/uuidgen
%{_bindir}/cal
%{_bindir}/chrt
%{_bindir}/col
%{_bindir}/colcrt
%{_bindir}/colrm
%{_bindir}/column
%{_bindir}/ddate
%{_bindir}/fallocate
%{_bindir}/flock
%{_bindir}/getopt
%{_bindir}/hexdump
%{_bindir}/ionice
%{_bindir}/ipcrm
%{_bindir}/ipcs
%{_bindir}/isosize
%{_bindir}/line
%{_bindir}/look
%{_bindir}/lscpu
%{_bindir}/mcookie
%{_bindir}/mesg
%{_bindir}/uuidgen
%ifnarch ppc ppc64
/usr/bin/chrp-addnote
/usr/bin/mkzimage_cmdline
%{_bindir}/chrp-addnote
%{_bindir}/mkzimage_cmdline
%endif
/usr/bin/namei
/usr/bin/rename
/usr/bin/renice
/usr/bin/rev
/usr/bin/script
/usr/bin/setarch
/usr/bin/scriptreplay
/usr/bin/setsid
/usr/bin/ul
/usr/bin/tailf
/usr/bin/taskset
/usr/bin/time
/usr/bin/unshare
/usr/bin/which
/usr/sbin/addpart
/usr/sbin/delpart
/usr/sbin/ldattach
/usr/sbin/partx
/usr/sbin/rcraw
/usr/sbin/rtcwake
/usr/sbin/setctsid
%verify(not mode) %attr(0755,root,tty) /usr/bin/wall
/usr/bin/whereis
%verify(not mode) %attr(0755,root,tty) /usr/bin/write
%{_bindir}/namei
%{_bindir}/rename
%{_bindir}/renice
%{_bindir}/rev
%{_bindir}/script
%{_bindir}/setarch
%{_bindir}/scriptreplay
%{_bindir}/setsid
%{_bindir}/ul
%{_bindir}/tailf
%{_bindir}/taskset
%{_bindir}/time
%{_bindir}/unshare
%{_bindir}/which
%{_sbindir}/addpart
%{_sbindir}/delpart
%{_sbindir}/ldattach
%{_sbindir}/partx
%{_sbindir}/rcraw
%{_sbindir}/rtcwake
%{_sbindir}/setctsid
%verify(not mode) %attr(0755,root,tty) %{_bindir}/wall
%{_bindir}/whereis
%verify(not mode) %attr(0755,root,tty) %{_bindir}/write
%dir %{_defaultdocdir}/time
%dir %{_defaultdocdir}/which
%{_defaultdocdir}/time/*
%{_defaultdocdir}/which/*
%{_infodir}/ipc.info.gz
%{_infodir}/time.info*.gz
%{_infodir}/which.info*.gz
%{_mandir}/man1/cal.1.gz
@ -628,13 +632,16 @@ fi
%{_mandir}/man8/umount.8.gz
%{_mandir}/man8/setctsid.8.gz
%{_mandir}/man8/wipefs.8.gz
/usr/sbin/flushb
/usr/sbin/readprofile
%dir /usr/share/getopt
%attr (755,root,root) /usr/share/getopt/getopt-parse.bash
%attr (755,root,root) /usr/share/getopt/getopt-parse.tcsh
%attr (755,root,root) /usr/share/getopt/getopt-test.bash
%attr (755,root,root) /usr/share/getopt/getopt-test.tcsh
%{_mandir}/man8/fstrim.8.gz
%{_mandir}/man8/lsblk.8.gz
%{_mandir}/ru
%{_sbindir}/flushb
%{_sbindir}/readprofile
%dir %{_datadir}/getopt
%attr (755,root,root) %{_datadir}/getopt/getopt-parse.bash
%attr (755,root,root) %{_datadir}/getopt/getopt-parse.tcsh
%attr (755,root,root) %{_datadir}/getopt/getopt-test.bash
%attr (755,root,root) %{_datadir}/getopt/getopt-test.tcsh
%ifnarch ia64
%doc fdisk/README.fdisk
/sbin/fdisk
@ -648,12 +655,12 @@ fi
/sbin/sfdisk
%endif
%ifnarch s390 s390x
/usr/bin/cytune
/usr/sbin/fdformat
%{_bindir}/cytune
%{_sbindir}/fdformat
/sbin/hwclock
/usr/sbin/klogconsole
/usr/bin/setterm
/usr/sbin/tunelp
%{_sbindir}/klogconsole
%{_bindir}/setterm
%{_sbindir}/tunelp
%{_mandir}/man8/cytune.8.gz
%{_mandir}/man8/fdformat.8.gz
%{_mandir}/man8/hwclock.8.gz
@ -671,7 +678,7 @@ fi
%{_libdir}/libblkid.so
%dir %{_includedir}/blkid
%{_includedir}/blkid/blkid.h
%_libdir/pkgconfig/blkid.pc
%{_libdir}/pkgconfig/blkid.pc
%{_mandir}/man3/libblkid.3.gz
%files -n libmount1
@ -684,14 +691,14 @@ fi
%{_libdir}/libmount.so
%dir %{_includedir}/mount
%{_includedir}/mount/mount.h
%_libdir/pkgconfig/mount.pc
%{_libdir}/pkgconfig/mount.pc
%files -n uuidd
%defattr(-, root, root)
%verify(not mode) %attr(0755,root,root) /usr/sbin/uuidd
%attr(-,uuidd,uuidd) %dir /var/lib/libuuid
%attr(-,uuidd,uuidd) %ghost %dir /var/run/uuidd
/etc/init.d/uuidd
%verify(not mode) %attr(0755,root,root) %{_sbindir}/uuidd
%attr(-,uuidd,uuidd) %dir %{_localstatedir}/lib/libuuid
%attr(-,uuidd,uuidd) %ghost %dir %{_localstatedir}/run/uuidd
%{_sysconfdir}/init.d/uuidd
%{_mandir}/man8/uuidd.8.gz
%files -n libuuid1
@ -704,7 +711,7 @@ fi
%{_libdir}/libuuid.so
%dir %{_includedir}/uuid
%{_includedir}/uuid/uuid.h
%_libdir/pkgconfig/uuid.pc
%{_libdir}/pkgconfig/uuid.pc
%{_mandir}/man3/uuid*
%changelog