From: Kay Sievers Date: Mon, 11 May 2009 02:12:23 +0000 (+0200) Subject: delete vol_id and require util-linux-ng's blkid X-Git-Tag: 174~1051 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=f07996885dab45102492d7f16e7e2997e264c725;ds=sidebyside delete vol_id and require util-linux-ng's blkid --- diff --git a/NEWS b/NEWS index 91698d538..e743b1184 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ udev 142 ======== Bugfixes. +The program vol_id is removed from the repository and blkid from the +latest util-linux-ng package replaces it. Persisten disk links for +label and uuid depend on the util-linux-ng version of blkid now. Older +versions can not be used with udev. + Libudev allows to subscribe to udev events. To prevent unwanted messages to be delivered, and waking up the subscribing process, a filter can be installed, to drop messages inside a kernel socket filter. The filters @@ -15,7 +20,9 @@ are expected anymore, and a first stable release should happen soon. A too old kernel (2.6.21) or a kernel with CONFIG_SYSFS_DEPRECATED is not supported since while and udevd will log an error message at -startup. +startup. It should still be able to boot-up, but advanced rules and system +services which depend on the information not available in the old sysfs +format will fail to work correctly. DVB device naming is supplied by the kernel now. In case older kernels need to be supported, the old shell script should be added to a compat diff --git a/extras/volume_id/Makefile.am b/extras/volume_id/Makefile.am index 4a8ba9465..e4d2e7f1f 100644 --- a/extras/volume_id/Makefile.am +++ b/extras/volume_id/Makefile.am @@ -2,30 +2,3 @@ include $(top_srcdir)/Makefile.am.inc SUBDIRS = \ lib - -udevhomedir = $(udev_prefix)/lib/udev -udevhome_PROGRAMS = \ - vol_id - -vol_id_SOURCES = \ - vol_id.c \ - ../../udev/lib/libudev.h \ - ../../udev/lib/libudev.c \ - ../../udev/lib/libudev-list.c \ - ../../udev/lib/libudev-util.c - -vol_id_LDADD = \ - lib/libvolume_id.la - -dist_man_MANS = \ - vol_id.8 - -EXTRA_DIST = \ - vol_id.xml - -%.7 %.8 : %.xml - $(XSLTPROC) -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< - -MAINTAINERCLEANFILES= \ - $(dist_man_MANS) - diff --git a/extras/volume_id/README b/extras/volume_id/README deleted file mode 100644 index 9459c880f..000000000 --- a/extras/volume_id/README +++ /dev/null @@ -1,66 +0,0 @@ -vol_id - probe filesystem and read label and uuid - -vol_id will only return with a non-zero exit code if the string asked for, -is not empty. All trailing whitespace will be removed, spaces replaced by -underscore and slashes ignored. -Unmangled values are available in the --export mode as hex-encoded strings -in *_ENC= keys. - - $ extras/volume_id/vol_id --export /dev/sda6 - ID_FS_USAGE=filesystem - ID_FS_TYPE=ext3 - ID_FS_VERSION=1.0 - ID_FS_UUID=3e999973-00c9-4917-9442-b7633bd95b9e - ID_FS_UUID_ENC=3e999973-00c9-4917-9442-b7633bd95b9e - ID_FS_LABEL=devel - ID_FS_LABEL_ENC=devel - - $ extras/volume_id/vol_id --label /dev/sda6 - devel - - $ extras/volume_id/vol_id --type /dev/sda6 - ext3 - - -fstype probe label uuid version --------------------------------------------------- -linux swap * * * * -btrfs * * * - -ext * * * * -reiserfs jr/3.5/3.6/4 * * * * -fat (12, 16, 32) * * * * -ntfs * * * * -jfs * * * - -xfs * * * - -hfs (plus, wrapped) * * * - -udf * * - - -iso9660 * * - - -ufs * - - - -cramfs * * - - -sysv * * - * -luks * - * - -hpfs * * - - -romfs * * - - -squashfs * - - - -minix * - - * -ocfs (1, 2) * * * * -vxfs * - - * -nss (netware) * - * * -gfs, gfs2 * * * - -oracleasm * * - - - -Raid members are detected to prevent the probing for a filesystem ------------------------------------------------------------------ -linux raid (md) * * * * -LVM 1 * - - - -LVM 2 * - - * -ddf * - * * -highpoint * - - - -isw_raid * - - - -lsi_raid * - - - -nvidia_raid * - - - -promise_raid * - - - -silicon_raid * - - - -via_raid * - - - -jmicron * - - - -adaptec * - - - diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c deleted file mode 100644 index 3e44c3b06..000000000 --- a/extras/volume_id/vol_id.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * vol_id - read filesystem label and uuid - * - * Copyright (C) 2005-2008 Kay Sievers - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../../udev/udev.h" -#include "lib/libvolume_id.h" - -#define BLKGETSIZE64 _IOR(0x12,114,size_t) - -static int debug; -struct udev *udev_ctx; - -static void log_fn(struct udev *udev, int priority, - const char *file, int line, const char *fn, - const char *format, va_list args) -{ - if (debug) { - fprintf(stderr, "%s: ", fn != NULL ? fn : file); - vfprintf(stderr, format, args); - } else { - vsyslog(priority, format, args); - } -} - -static void vid_log(int priority, const char *file, int line, const char *format, ...) -{ - va_list args; - - if (priority > udev_get_log_priority(udev_ctx)) - return; - va_start(args, format); - log_fn(udev_ctx, priority, file, line, NULL, format, args); - va_end(args); - return; -} - -static int all_probers(volume_id_probe_fn_t probe_fn, - struct volume_id *id, uint64_t off, uint64_t size, - void *data) -{ - const char *type; - - if (probe_fn(id, off, size) == 0) - if (volume_id_get_type(id, &type)) - printf("%s\n", type); - - return 0; -} - -int main(int argc, char *argv[]) -{ - static const struct option options[] = { - { "label", no_argument, NULL, 'l' }, - { "label-raw", no_argument, NULL, 'L' }, - { "uuid", no_argument, NULL, 'u' }, - { "type", no_argument, NULL, 't' }, - { "export", no_argument, NULL, 'x' }, - { "skip-raid", no_argument, NULL, 's' }, - { "size", required_argument, NULL, 'S' }, - { "probe-all", no_argument, NULL, 'a' }, - { "offset", optional_argument, NULL, 'o' }, - { "debug", no_argument, NULL, 'd' }, - { "help", no_argument, NULL, 'h' }, - {} - }; - - enum print_type { - PRINT_EXPORT, - PRINT_TYPE, - PRINT_LABEL, - PRINT_UUID, - PRINT_LABEL_RAW, - } print = PRINT_EXPORT; - - struct volume_id *vid = NULL; - char label_safe[256]; - char label_enc[256]; - char uuid_safe[256]; - char uuid_enc[256]; - char uuid_sub_enc[256]; - char type_enc[256]; - char type_version_enc[256]; - uint64_t size = 0; - int skip_raid = 0; - int probe_all = 0; - uint64_t offset = 0; - const char *node; - int fd; - const char *label, *uuid, *uuid_sub, *type, *type_version, *usage; - int retval; - int rc = 0; - - udev_ctx = udev_new(); - if (udev_ctx == NULL) - goto exit; - logging_init("vol_id"); - udev_set_log_fn(udev_ctx, log_fn); - - /* hook in our debug into libvolume_id */ - volume_id_log_fn = vid_log; - - while (1) { - int option; - - option = getopt_long(argc, argv, "lLutxsS:aodh", options, NULL); - if (option == -1) - break; - - switch (option) { - case 'd': - debug = 1; - if (udev_get_log_priority(udev_ctx) < LOG_INFO) - udev_set_log_priority(udev_ctx, LOG_INFO); - break; - case 'l': - print = PRINT_LABEL; - break; - case 'L': - print = PRINT_LABEL_RAW; - break; - case 'u': - print = PRINT_UUID; - break; - case 't': - print = PRINT_TYPE; - break; - case 'x': - print = PRINT_EXPORT; - break; - case 's': - skip_raid = 1; - break; - case 'a': - probe_all = 1; - break; - case 'S': - if (optarg[0] != '\0') - size = strtoull(optarg, NULL, 0); - break; - case 'o': - if (optarg[0] != '\0') - offset = strtoull(optarg, NULL, 0); - break; - case 'h': - printf("Usage: vol_id [options] \n" - " --export export key/value pairs\n" - " --type filesystem type\n" - " --label filesystem label\n" - " --label-raw raw label\n" - " --uuid filesystem uuid\n" - " --skip-raid don't probe for raid\n" - " --probe-all find possibly conflicting signatures\n" - " --offset= probe at the given offset\n" - " --size= overwrite device size\n" - " --debug print debug output to stderr\n" - " --help\n\n"); - goto exit; - default: - retval = 1; - goto exit; - } - } - - node = argv[optind]; - if (!node) { - err(udev_ctx, "no device\n"); - fprintf(stderr, "no device\n"); - rc = 1; - goto exit; - } - - fd = open(node, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "%s: error opening volume\n", node); - rc = 2; - goto exit; - } - - vid = volume_id_open_fd(fd); - if (vid == NULL) { - rc = 2; - goto exit; - } - - if (size == 0) { - if (ioctl(fd, BLKGETSIZE64, &size) == 0) { - info(udev_ctx, "BLKGETSIZE64=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); - } else { - struct stat statbuf; - - if (fstat(fd, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) - size = statbuf.st_size; - else - size = 0; - info(udev_ctx, "stat=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); - } - } - - /* try to drop all privileges before reading disk content */ - if (getuid() == 0) { - struct passwd *pw; - - pw = getpwnam("nobody"); - if (pw != NULL && pw->pw_uid > 0 && pw->pw_gid > 0) { - if (setgroups(0, NULL) != 0 || - setgid(pw->pw_gid) != 0 || - setuid(pw->pw_uid) != 0) - info(udev_ctx, "unable to drop privileges: %s\n\n", strerror(errno)); - } - } - - if (probe_all) { - volume_id_all_probers(all_probers, vid, offset, size, NULL); - goto exit; - } - - if (skip_raid) - retval = volume_id_probe_filesystem(vid, offset, size); - else - retval = volume_id_probe_all(vid, offset, size); - if (retval != 0) { - fprintf(stderr, "unknown or non-unique volume type " - "(--probe-all lists possibly conflicting types)\n"); - rc = 4; - goto exit; - } - - if (!volume_id_get_label(vid, &label) || - !volume_id_get_usage(vid, &usage) || - !volume_id_get_type(vid, &type) || - !volume_id_get_type_version(vid, &type_version) || - !volume_id_get_uuid(vid, &uuid) || - !volume_id_get_uuid_sub(vid, &uuid_sub)) { - rc = 4; - goto exit; - } - - udev_util_replace_whitespace(label, label_safe, sizeof(label_safe)); - udev_util_replace_chars(label_safe, UDEV_ALLOWED_CHARS_INPUT); - volume_id_encode_string(label, label_enc, sizeof(label_enc)); - - udev_util_replace_whitespace(uuid, uuid_safe, sizeof(uuid_safe)); - udev_util_replace_chars(uuid_safe, UDEV_ALLOWED_CHARS_INPUT); - volume_id_encode_string(uuid, uuid_enc, sizeof(uuid_enc)); - - volume_id_encode_string(uuid_sub, uuid_sub_enc, sizeof(uuid_sub_enc)); - - volume_id_encode_string(type, type_enc, sizeof(type_enc)); - volume_id_encode_string(type_version, type_version_enc, sizeof(type_version_enc)); - - switch (print) { - case PRINT_EXPORT: - printf("ID_FS_USAGE=%s\n", usage); - printf("ID_FS_TYPE=%s\n", type_enc); - printf("ID_FS_VERSION=%s\n", type_version_enc); - printf("ID_FS_UUID=%s\n", uuid_safe); - printf("ID_FS_UUID_ENC=%s\n", uuid_enc); - if (uuid_sub_enc[0] != '\0') - printf("ID_FS_UUID_SUB_ENC=%s\n", uuid_sub_enc); - printf("ID_FS_LABEL=%s\n", label_safe); - printf("ID_FS_LABEL_ENC=%s\n", label_enc); - break; - case PRINT_TYPE: - printf("%s\n", type); - break; - case PRINT_LABEL: - if (label_safe[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 3; - goto exit; - } - printf("%s\n", label_safe); - break; - case PRINT_UUID: - if (uuid_enc[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 4; - goto exit; - } - printf("%s\n", uuid_enc); - break; - case PRINT_LABEL_RAW: - if (label[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 3; - goto exit; - } - printf("%s\n", label); - break; - } - -exit: - if (vid != NULL) - volume_id_close(vid); - udev_unref(udev_ctx); - logging_close(); - return rc; -} diff --git a/extras/volume_id/vol_id.xml b/extras/volume_id/vol_id.xml deleted file mode 100644 index 475e9bc38..000000000 --- a/extras/volume_id/vol_id.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - -
-
- vol_id - - - vol_id - March 2006 - volume_id - - - - vol_id - 8 - - - - - vol_idprobe filesystem type and read label and uuid - - - - - vol_id - - - - - - - - - - - device - - - - DESCRIPTION - vol_id is usually called from a udev rule, to - provide udev with the filesystem type, the label and the uuid of a - volume. It supports most of the common filesystem formats and detects - various raid setups to prevent the recognition of raid members - as a volume with a filesystem. - - - OPTIONS - - - - - Print all values in key/value format to import them into the - environment. - - - - - - Print the filesystem type. - - - - - - - Print the safe version of volume label suitable for - use as filename. - - - - - - - - Print the raw volume label. - - - - - - - Print the uuid of a volume. - - - - - - Skip detection of raid metadata. - - - - - - Probe for all types and print all matches. - - - - - - Start probing at the given offset, instead of the beginning - of the volume. The offset value is specified in bytes. - - - - - - Print debug messages to stderr. - - - - - - Print usage. - - - - - - ENVIRONMENT - - - - - Set the syslog priority. - - - - - - EXIT STATUS - vol_id will only return successful if the - value asked for is not empty. All trailing whitespace will be removed, - spaces replaced by underscore and slashes ignored. - - - AUTHOR - Written by Kay Sievers kay.sievers@vrfy.org - - - - SEE ALSO - - udev7 - - - -
-
diff --git a/rules/packages/64-md-raid.rules b/rules/packages/64-md-raid.rules index 4faf18c10..6ba93b661 100644 --- a/rules/packages/64-md-raid.rules +++ b/rules/packages/64-md-raid.rules @@ -27,7 +27,7 @@ ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" -IMPORT{program}="vol_id --export $tempnode" +IMPORT{program}="/sbin/blkid -o udev -p $tempnode" OPTIONS+="link_priority=100" OPTIONS+="watch" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" diff --git a/rules/rules.d/60-persistent-storage.rules b/rules/rules.d/60-persistent-storage.rules index 409548893..fea86d931 100644 --- a/rules/rules.d/60-persistent-storage.rules +++ b/rules/rules.d/60-persistent-storage.rules @@ -55,10 +55,10 @@ ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PA ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end" # probe filesystem metadata of optical drives which have a media inserted -KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", IMPORT{program}="vol_id --export --skip-raid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" +KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", IMPORT{program}="/sbin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" # probe filesystem metadata of disks -KERNEL!="sr*", IMPORT{program}="vol_id --export $tempnode" +KERNEL!="sr*", IMPORT{program}="/sbin/blkid -o udev -p $tempnode" # watch for future changes KERNEL!="sr*", OPTIONS+="watch" diff --git a/rules/suse/64-device-mapper.rules b/rules/suse/64-device-mapper.rules index 15e7ddf75..2bffe8344 100644 --- a/rules/suse/64-device-mapper.rules +++ b/rules/suse/64-device-mapper.rules @@ -14,7 +14,7 @@ ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}", OPTIONS+="strin ENV{DM_STATE}=="SUSPENDED", GOTO="device_mapper_end" ENV{DM_TARGET_TYPES}=="|*error*", GOTO="device_mapper_end" -IMPORT{program}="vol_id --export $tempnode" +IMPORT{program}="/sbin/blkid -o udev -p $tempnode" OPTIONS+="link_priority=-100" OPTIONS+="watch" ENV{DM_TARGET_TYPES}=="*snapshot-origin*", OPTIONS+="link_priority=-90"