hwdb: use $(localstatedir)/lib/udev/hwdb.bin for the binary database

It's not configuration, so it doesn't belong in udev.

Also, remove the catalog when uninstalling udev.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2012-11-16 23:10:13 +01:00
parent 4ec24515da
commit ee623f0d0c
4 changed files with 18 additions and 11 deletions

View File

@ -65,6 +65,8 @@ sysvinitdir=$(SYSTEM_SYSVINIT_PATH)
varlogdir=$(localstatedir)/log
systemdstatedir=$(localstatedir)/lib/systemd
catalogstatedir=$(systemdstatedir)/catalog
udevstatedir=$(localstatedir)/lib/udev
hwdb_bin=$(udevstatedir)/hwdb.bin
# Our own, non-special dirs
pkgsysconfdir=$(sysconfdir)/systemd
@ -130,6 +132,7 @@ AM_CPPFLAGS = \
-DUSER_CONFIG_UNIT_PATH=\"$(pkgsysconfdir)/user\" \
-DUSER_DATA_UNIT_PATH=\"$(userunitdir)\" \
-DCATALOG_PATH=\"$(catalogstatedir)\" \
-DHWDB_BIN=\"$(hwdb_bin)\" \
-DSYSTEMD_CGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \
-DSYSTEMD_BINARY_PATH=\"$(rootlibexecdir)/systemd\" \
-DSYSTEMD_SHUTDOWN_BINARY_PATH=\"$(rootlibexecdir)/systemd-shutdown\" \
@ -1962,11 +1965,14 @@ udevadm_LDADD = \
# Update hwdb on installation. Do not bother if installing
# in DESTDIR, since this is likely for packaging purposes.
hwdb-update-hook:
-test -n "$(DESTDIR)" || udevadm hwdb --update
-test -n "$(DESTDIR)" || $(bindir)/udevadm hwdb --update
INSTALL_DATA_HOOKS += \
hwdb-update-hook
hwdb-remove-hook:
-test -n "$(DESTDIR)" || rm -f $(HWDB_BIN)
# ------------------------------------------------------------------------------
TESTS += \
test/udev-test.pl \

View File

@ -424,13 +424,13 @@
</refsect2>
<refsect2><title>udevadm hwdb <optional>options</optional></title>
<para>Maintain the hardware database index in /etc/udev/hwdb.bin.</para>
<para>Maintain the hardware database index in <filename>$(localstatedir)/lib/udev/hwdb.bin</filename>.</para>
<variablelist>
<varlistentry>
<term><option>--update</option></term>
<listitem>
<para>Compile the hardware dabase information located in /usr/lib/udev/hwdb.d/,
/etc/udev/hwdb.d/ and store it in /etc/udev/hwdb.bin. This should be done with
/etc/udev/hwdb.d/ and store it in <filename>$(localstatedir)/lib/udev/hwdb.bin</filename>. This should be done with
any update to the source files, it will not be called automatically. The running
udev daemon will detect a new database on its own and does not need to be
notified about it.</para>

View File

@ -271,30 +271,30 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
hwdb->refcount = 1;
udev_list_init(udev, &hwdb->properties_list, true);
hwdb->f = fopen("/etc/udev/hwdb.bin", "re");
hwdb->f = fopen(HWDB_BIN, "re");
if (!hwdb->f) {
log_debug("error reading /etc/udev/hwdb.bin: %m");
log_debug("error reading %s: %m", HWDB_BIN);
udev_hwdb_unref(hwdb);
return NULL;
}
if (fstat(fileno(hwdb->f), &hwdb->st) < 0 ||
(size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) {
log_debug("error reading /etc/udev/hwdb.bin: %m");
log_debug("error reading %s: %m", HWDB_BIN);
udev_hwdb_unref(hwdb);
return NULL;
}
hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0);
if (hwdb->map == MAP_FAILED) {
log_debug("error mapping /etc/udev/hwdb.bin: %m");
log_debug("error mapping %s: %m", HWDB_BIN);
udev_hwdb_unref(hwdb);
return NULL;
}
if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 ||
(size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) {
log_debug("error recognizing the format of /etc/udev/hwdb.bin");
log_debug("error recognizing the format of %s", HWDB_BIN);
udev_hwdb_unref(hwdb);
return NULL;
}

View File

@ -565,10 +565,11 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
log_debug("strings dedup'ed: %8zu bytes (%8zu)\n",
trie->strings->dedup_len, trie->strings->dedup_count);
mkdir_parents("/etc/udev/hwdb.bin", 0755);
err = trie_store(trie, "/etc/udev/hwdb.bin");
mkdir_parents(HWDB_BIN, 0755);
err = trie_store(trie, HWDB_BIN);
if (err < 0) {
log_error("Failure writing hardware database '%s': %s", "/etc/udev/hwdb.bin", strerror(-err));
log_error("Failure writing hardware database '%s': %s",
HWDB_BIN, strerror(-err));
rc = EXIT_FAILURE;
}
}