diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2009-05-11 04:12:23 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2009-05-11 04:12:23 +0200 |
commit | f07996885dab45102492d7f16e7e2997e264c725 (patch) | |
tree | 6aae83cbb156a5bcd217a17b963902d2d2a7e2b9 | |
parent | 86d9bf4bece6d42d2ed91e99bf2773c6b5c30ec3 (diff) |
delete vol_id and require util-linux-ng's blkid
-rw-r--r-- | NEWS | 9 | ||||
-rw-r--r-- | extras/volume_id/Makefile.am | 27 | ||||
-rw-r--r-- | extras/volume_id/README | 66 | ||||
-rw-r--r-- | extras/volume_id/vol_id.c | 328 | ||||
-rw-r--r-- | extras/volume_id/vol_id.xml | 151 | ||||
-rw-r--r-- | rules/packages/64-md-raid.rules | 2 | ||||
-rw-r--r-- | rules/rules.d/60-persistent-storage.rules | 4 | ||||
-rw-r--r-- | rules/suse/64-device-mapper.rules | 2 |
8 files changed, 12 insertions, 577 deletions
@@ -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 4a8ba94654..e4d2e7f1f1 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 9459c880f8..0000000000 --- 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 3e44c3b069..0000000000 --- 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 <kay.sievers@vrfy.org> - * - * 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 <http://www.gnu.org/licenses/>. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <pwd.h> -#include <grp.h> -#include <getopt.h> -#include <fcntl.h> -#include <sys/stat.h> -#include <inttypes.h> -#include <sys/ioctl.h> - -#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] <device>\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=<bytes> probe at the given offset\n" - " --size=<bytes> 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 475e9bc389..0000000000 --- a/extras/volume_id/vol_id.xml +++ /dev/null @@ -1,151 +0,0 @@ -<?xml version='1.0'?> -<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> - -<article> - <section> - <title>vol_id</title> - <refentry> - <refentryinfo> - <title>vol_id</title> - <date>March 2006</date> - <productname>volume_id</productname> - </refentryinfo> - - <refmeta> - <refentrytitle>vol_id</refentrytitle> - <manvolnum>8</manvolnum> - <refmiscinfo class="version"></refmiscinfo> - </refmeta> - - <refnamediv> - <refname>vol_id</refname><refpurpose>probe filesystem type and read label and uuid</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <cmdsynopsis> - <command>vol_id</command> - <arg><option>--export</option></arg> - <arg><option>--type</option></arg> - <arg><option>--label</option></arg> - <arg><option>--label-raw</option></arg> - <arg><option>--uuid</option></arg> - <arg><option>--skip-raid</option></arg> - <arg><option>--probe-all</option></arg> - <arg><option>--offset=<replaceable>bytes</replaceable></option></arg> - <arg><option>--debug</option></arg> - <arg><option>--help</option></arg> - <arg><replaceable>device</replaceable></arg> - </cmdsynopsis> - </refsynopsisdiv> - - <refsect1><title>DESCRIPTION</title> - <para><command>vol_id</command> 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.</para> - </refsect1> - - <refsect1><title>OPTIONS</title> - <variablelist> - <varlistentry> - <term><option>--export</option></term> - <listitem> - <para>Print all values in key/value format to import them into the - environment.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--type</option></term> - <listitem> - <para>Print the filesystem type.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--label</option></term> - <listitem> - <para> - Print the safe version of volume label suitable for - use as filename. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--label-raw</option></term> - <listitem> - <para> - Print the raw volume label. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--uuid</option></term> - <listitem> - <para>Print the uuid of a volume.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--skip-raid</option></term> - <listitem> - <para>Skip detection of raid metadata.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--probe-all</option></term> - <listitem> - <para>Probe for all types and print all matches.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--offset=<replaceable>bytes</replaceable></option></term> - <listitem> - <para>Start probing at the given offset, instead of the beginning - of the volume. The offset value is specified in bytes.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--debug</option></term> - <listitem> - <para>Print debug messages to stderr.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--help</option></term> - <listitem> - <para>Print usage.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1><title>ENVIRONMENT</title> - <variablelist> - <varlistentry> - <term><option>UDEV_LOG</option></term> - <listitem> - <para>Set the syslog priority.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1><title>EXIT STATUS</title> - <para><command>vol_id</command> 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.</para> - </refsect1> - - <refsect1><title>AUTHOR</title> - <para>Written by Kay Sievers <email>kay.sievers@vrfy.org</email></para> - </refsect1> - - <refsect1> - <title>SEE ALSO</title> - <para><citerefentry> - <refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum> - </citerefentry></para> - </refsect1> - </refentry> - </section> -</article> diff --git a/rules/packages/64-md-raid.rules b/rules/packages/64-md-raid.rules index 4faf18c106..6ba93b661e 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 409548893b..fea86d9310 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 15e7ddf755..2bffe8344a 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" |