> Here is LVM support for OpenWRT. It introduces 3 new packages:
> - kmod-dm for the device mapper kernel module.
> - kmod-libdevmapper for the device-mapper library.
> - kmod-lvm2 for the `lvm' tool.
> Note that it currently does not create the symlinks for all the lvm
> tools, so you have to use "lvm pvs" rather than just "pvs".
Actually, the patch was incomplete (missing a hunk in
package/base-files/files/etc/hotplug2-common.rules):
Index: hotplug2-common.rules
===================================================================
--- hotplug2-common.rules (révision 14605)
+++ hotplug2-common.rules (copie de travail)
@@ -1,9 +1,14 @@
next
}
+DEVICENAME == device-mapper {
+ nothrottle
+ makedev /dev/mapper/control 0600
+}
+
DEVPATH is set {
nothrottle
makedev /dev/%DEVICENAME% 0644
Also, the order of the modules was incorrect in the autoload call.
The patch below may work better,
Stefan
Index: package/base-files/files/etc/hotplug2-common.rules
===================================================================
--- package/base-files/files/etc/hotplug2-common.rules (révision 14605)
+++ package/base-files/files/etc/hotplug2-common.rules (copie de travail)
@@ -1,9 +1,14 @@
next
}
+DEVICENAME == device-mapper {
+ nothrottle
+ makedev /dev/mapper/control 0600
+}
+
DEVPATH is set {
nothrottle
makedev /dev/%DEVICENAME% 0644
Index: package/kernel/modules/block.mk
===================================================================
--- package/kernel/modules/block.mk (révision 14586)
+++ package/kernel/modules/block.mk (copie de travail)
@@ -287,6 +289,35 @@
$(eval $(call KernelPackage,nbd))
+define KernelPackage/dm
+ SUBMENU:=$(BLOCK_MENU)
+ TITLE:=Device Mapper
+ # All the "=n" are unnecessary, they're only there
+ # to stop the config from asking the question.
+ # MIRROR is M because I've needed it for pvmove.
+ KCONFIG:= \
+ CONFIG_BLK_DEV_MD=n \
+ CONFIG_DM_DEBUG=n \
+ CONFIG_DM_CRYPT=n \
+ CONFIG_DM_UEVENT=n \
+ CONFIG_DM_DELAY=n \
+ CONFIG_DM_MULTIPATH=n \
+ CONFIG_DM_ZERO=n \
+ CONFIG_DM_SNAPSHOT=n \
+ CONFIG_MD=y \
+ CONFIG_BLK_DEV_DM \
+ CONFIG_DM_MIRROR
+ FILES:=$(LINUX_DIR)/drivers/md/dm-*.$(LINUX_KMOD_SUFFIX)
+ AUTOLOAD:=$(call AutoLoad,30,dm-mod dm-log dm-region-hash dm-mirror)
+endef
+
+define KernelPackage/dm/description
+ Kernel module necessary for LVM2 support
+endef
+
+$(eval $(call KernelPackage,dm))
+
+
define KernelPackage/pata-rb153-cf
SUBMENU:=$(BLOCK_MENU)
DEPENDS:=kmod-ata-core @TARGET_adm5120_router_le
Index: feeds/packages/utils/lvm2/files/lvm2.init
===================================================================
--- feeds/packages/utils/lvm2/files/lvm2.init (révision 0)
+++ feeds/packages/utils/lvm2/files/lvm2.init (révision 0)
@@ -0,0 +1,12 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009 Stefan Monnier
+START=15
+
+start () {
+ /sbin/lvm vgscan --ignorelockingfailure --mknodes || :
+ /sbin/lvm vgchange -aly --ignorelockingfailure || return 2
+}
+
+stop () {
+ /sbin/lvm vgchange -aln --ignorelockingfailure || return 2
+}
Index: feeds/packages/utils/lvm2/patches/100-readline-link.patch
===================================================================
--- feeds/packages/utils/lvm2/patches/100-readline-link.patch (révision 0)
+++ feeds/packages/utils/lvm2/patches/100-readline-link.patch (révision 0)
@@ -0,0 +1,38 @@
+=== modified file 'LVM2.2.02.43/make.tmpl.in'
+--- LVM2.2.02.43/make.tmpl.in 2009-01-16 15:02:27 +0000
++++ LVM2.2.02.43/make.tmpl.in 2009-01-16 15:02:45 +0000
+@@ -84,11 +84,9 @@
+ endif
+
+ LDFLAGS += -L$(top_srcdir)/libdm -L$(top_srcdir)/lib
+-CLDFLAGS += -L$(top_srcdir)/libdm -L$(top_srcdir)/lib
+
+ ifeq ("@DMEVENTD@", "yes")
+ LDFLAGS += -L$(top_srcdir)/daemons/dmeventd
+- CLDFLAGS += -L$(top_srcdir)/daemons/dmeventd
+ endif
+
+ ifeq ("@DM_COMPAT@", "yes")
+@@ -202,18 +200,18 @@
+ ifeq ("@LIB_SUFFIX@","so")
+ $(LIB_SHARED): $(OBJECTS) $(LDDEPS)
+ $(CC) -shared -Wl,-soname,$(notdir $@).$(LIB_VERSION) \
+- $(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
++ $(CFLAGS) $(CLDFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
+ endif
+
+ ifeq ("@LIB_SUFFIX@","dylib")
+ $(LIB_SHARED): $(OBJECTS) $(LDDEPS)
+ $(CC) -dynamiclib -dylib_current_version,$(LIB_VERSION) \
+- $(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
++ $(CFLAGS) $(CLDFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
+ endif
+
+ %.so: %.a
+ $(CC) -shared -Wl,-soname,$(notdir $@).$(LIB_VERSION) \
+- $(CFLAGS) $(CLDFLAGS) $(LIBS) -o $@ \
++ $(CFLAGS) $(CLDFLAGS) $(LDFLAGS) $(LIBS) -o $@ \
+ @CLDWHOLEARCHIVE@ $< @CLDNOWHOLEARCHIVE@
+
+ $(LIB_STATIC): $(OBJECTS)
+
Index: feeds/packages/utils/lvm2/Makefile
===================================================================
--- feeds/packages/utils/lvm2/Makefile (révision 0)
+++ feeds/packages/utils/lvm2/Makefile (révision 0)
@@ -0,0 +1,113 @@
+#
+# Copyright (C) 2009 Stefan Monnier
+#
+# This is free software, licensed under the GNU General Public License v3+.
+# See /LICENSE for more information.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=LVM2
+PKG_VERSION:=2.02.44
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=ftp://sources.redhat.com/pub/lvm2/
+PKG_MD5SUM:=4ed7b99903a6fc5165b7b0b8def42486
+# 2.02.43 = fc34655706a2aa116b92328b24fad619
+# 2.02.44 = 4ed7b99903a6fc5165b7b0b8def42486
+
+# OpenWRT normally expects the tarball to expand into
+# $(PKG_NAME)-$(PKG_VERSION), and this magic incantation seems to make it
+# understand that LVM2's tarball expands into $(PKG_NAME).$(PKG_VERSION).
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libdevmapper
+ SECTION:=libs
+ CATEGORY:=Libraries
+ SUBMENU:=disc
+ DEPENDS:=+kmod-dm
+ TITLE:=The Linux Kernel Device Mapper userspace library
+ URL:=http://sourceware.org/dm/
+endef
+
+define Package/libdevmapper/description
+ The Linux Kernel Device Mapper is the LVM (Linux Logical Volume Management)
+ Team\'s implementation of a minimalistic kernel-space driver that handles
+ volume management, while keeping knowledge of the underlying device layout
+ in user-space. This makes it useful for not only LVM, but EVMS, software
+ raid, and other drivers that create "virtual" block devices.
+ .
+ This package contains the (user-space) shared library for accessing the
+ device-mapper; it allows usage of the device-mapper through a clean,
+ consistent interface (as opposed to through kernel ioctls).
+endef
+
+define Package/lvm2
+ SECTION:=utils
+ CATEGORY:=Utilities
+ SUBMENU:=disc
+ TITLE:=The Linux Logical Volume Manager
+ DEPENDS:=+libdevmapper +libreadline
+ URL:=http://sourceware.org/lvm2/
+endef
+
+define Package/lvm2/description
+ This is LVM2, the rewrite of The Linux Logical Volume Manager. LVM
+ supports enterprise level volume management of disk and disk subsystems
+ by grouping arbitrary disks into volume groups. The total capacity of
+ volume groups can be allocated to logical volumes, which are accessed as
+ regular block devices.
+endef
+
+# I got problems building with readline, so I originally just disabled it.
+# I've since added patch 100-readline-link which fixes the problem instead.
+# CONFIGURE_ARGS += --disable-readline
+
+# Apparently we have problems when "read"ing using O_DIRECT, maybe because
+# of uClibc. More specifically, with O_DIRECT lvm becomes erratic, showing
+# non-deterministic behavior: `lvs', `pvs' and friends can return anything
+# from empty lists, to completely correct result, as well as checksum errors,
+# complaints about missing volume groups, ... each run of the command can
+# return something different. The "root" of the problem is (maybe among
+# other places) in the "_io" function in dev-io.c, where calls to the "read"
+# function often return garbage, although not always. There's nothing
+# obviously wrong with the dev-io.c code, so the bug may just as well be in
+# uClibc or in the kernel (it appeared on the MIPS platform and could be
+# related to cache coherency issues).
+# Debian Lenny's lvm2 also disables O_DIRECT on "arm armeb hppa mips mipsel".
+CONFIGURE_ARGS += --disable-o_direct
+
+define Build/InstallDev
+ mkdir -p $(1)/usr/include
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/include/libdevmapper.h
$(1)/usr/include/
+ mkdir -p $(1)/usr/lib
+ $(CP) $(PKG_BUILD_DIR)/libdm/ioctl/libdevmapper.{a,so} $(1)/usr/lib/
+ mkdir -p $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_BUILD_DIR)/libdm/libdevmapper.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libdevmapper/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/libdm/libdevmapper.so.* $(1)/usr/lib/
+endef
+
+# This rule only installs the `lvm' executable. Debian also installs
+# a whole bunch of symlinks so that instead of `lvm <foo>' you can directly
+# run `<foo>'.
+define Package/lvm2/install
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/lvm $(1)/sbin/
+ $(INSTALL_DIR) $(1)/etc/lvm
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/example.conf $(1)/etc/lvm/lvm.conf
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/lvm2.init $(1)/etc/init.d/lvm2
+endef
+
+define Package/lvm2/conffiles
+/etc/lvm/lvm.conf
+endef
+
+$(eval $(call BuildPackage,libdevmapper))
+$(eval $(call BuildPackage,lvm2))
_______________________________________________
openwrt-devel mailing list
[email protected]
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel