summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Jones <pjones@redhat.com>2005-11-14 23:43:43 +0000
committerPeter Jones <pjones@redhat.com>2005-11-14 23:43:43 +0000
commitbf3ae1575e4b008a3ea52d8efcc6485738210118 (patch)
tree75bc0c4e3fc879346391b6c7b19e82ee72357691
parent6a057bf235a0e2d66f42bddeb54a6c68d40da510 (diff)
downloadanaconda-bf3ae1575e4b008a3ea52d8efcc6485738210118.tar.gz
anaconda-bf3ae1575e4b008a3ea52d8efcc6485738210118.tar.xz
anaconda-bf3ae1575e4b008a3ea52d8efcc6485738210118.zip
add support to isys for device-mapper nodes
-rw-r--r--ChangeLog6
-rw-r--r--anaconda.spec3
-rw-r--r--isys/Makefile2
-rw-r--r--isys/devnodes.c41
4 files changed, 44 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 9739fafd2..469798ccd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-14 Peter Jones <pjones@redhat.com>
+
+ * anaconda.spec: add requirements for device-mapper
+ * isys/Makefile: link against libdevmapper
+ * isys/devnodes.c: add support for making device-mapper nodes
+
2005-11-14 Jeremy Katz <katzj@redhat.com>
* loader2/net.c (wait_for_link): Log warning if no network link detected
diff --git a/anaconda.spec b/anaconda.spec
index 4ebbca784..65e761a86 100644
--- a/anaconda.spec
+++ b/anaconda.spec
@@ -5,10 +5,11 @@ License: GPL
Summary: Graphical system installer
Group: Applications/System
Source: anaconda-%{PACKAGE_VERSION}.tar.bz2
-BuildPreReq: pump-devel >= 0.8.20, kudzu-devel >= 1.2.0, pciutils-devel, bzip2-devel, e2fsprogs-devel, python-devel gtk2-devel rpm-python >= 4.2-0.61, newt-devel, rpm-devel, gettext >= 0.11, rhpl, booty, libxml2-python, zlib-devel, bogl-devel >= 0:0.1.9-17, bogl-bterm >= 0:0.1.9-17, elfutils-devel, beecrypt-devel, libselinux-devel >= 1.6, xorg-x11-devel, intltool >= 0.31.2-3, python-urlgrabber, pykickstart, yum
+BuildPreReq: pump-devel >= 0.8.20, kudzu-devel >= 1.2.0, pciutils-devel, bzip2-devel, e2fsprogs-devel, python-devel gtk2-devel rpm-python >= 4.2-0.61, newt-devel, rpm-devel, gettext >= 0.11, rhpl, booty, libxml2-python, zlib-devel, bogl-devel >= 0:0.1.9-17, bogl-bterm >= 0:0.1.9-17, elfutils-devel, beecrypt-devel, libselinux-devel >= 1.6, xorg-x11-devel, intltool >= 0.31.2-3, python-urlgrabber, pykickstart, yum, device-mapper
Requires: rpm-python >= 4.2-0.61, rhpl >= 0.170, parted >= 1.6.3-7, booty, kudzu > 1.2.0, yum >= 2.4.0
Requires: pyparted, libxml2-python, python-urlgrabber
Requires: anaconda-help, system-logos, pykickstart
+Requires: device-mapper
%ifnarch s390 s390x ppc64
Requires: rhpxl
%endif
diff --git a/isys/Makefile b/isys/Makefile
index 4f305f3b8..d179c8969 100644
--- a/isys/Makefile
+++ b/isys/Makefile
@@ -8,7 +8,7 @@ OBJECTS = nfsmount.o nfsmount_clnt.o nfsmount_xdr.o imount.o getmacaddr.o \
ethtool.o getipaddr.o wireless.o eddsupport.o
SOBJECTS = $(patsubst %.o,%.lo,$(OBJECTS))
SOURCES = $(patsubst %.o,%.c,$(OBJECTS)) isys.c
-LOADLIBES = -lresolv -lpci -lpopt -lpump -lext2fs -lz -lbterm -lbogl -lwlite -lkudzu -lpci -lselinux
+LOADLIBES = -lresolv -lpci -lpopt -lpump -lext2fs -lz -lbterm -lbogl -lwlite -lkudzu -lpci -lselinux -ldevmapper
PYMODULES = _isys.so
SUBDIRS = gzlib
DIET = diet
diff --git a/isys/devnodes.c b/isys/devnodes.c
index 7e268157e..8409fe907 100644
--- a/isys/devnodes.c
+++ b/isys/devnodes.c
@@ -3,8 +3,9 @@
*
* Erik Troan <ewt@redhat.com>
* Matt Wilson <msw@redhat.com>
+ * Peter Jones <pjones@redhat.com>
*
- * Copyright 1998-2001 Red Hat, Inc.
+ * Copyright 1998-2005 Red Hat, Inc.
* Copyright 1996-1998 Red Hat Software, Inc.
*
* This software may be freely redistributed under the terms of the GNU
@@ -25,6 +26,7 @@
#include <unistd.h>
#include <ctype.h>
#include <string.h>
+#include <libdevmapper.h>
struct devnum {
char * name;
@@ -92,11 +94,38 @@ int devMakeInode(char * devName, char * path) {
char *ptr;
char *dir;
- /* scsi devices sda - sdp: major 8, minor 0 - 255 */
- /* scsi devices sdq - sdaf: major 65, minor 0 - 255 */
- /* scsi devices sdqg - sdav: major 66, minor 0 - 255 */
- /* etc... */
- if (devName[0] == 's' && devName[1] == 'd') {
+ if (!strncmp(devName, "mapper/", 7)) {
+ struct dm_task *task;
+ struct dm_info *info = alloca(sizeof *info);
+ char *realName = devName + 7;
+
+ if (!info || !*realName)
+ return -3;
+ memset(info, '\0', sizeof (*info));
+ task = dm_task_create(DM_DEVICE_INFO);
+ if (!task)
+ return -3;
+
+ dm_task_set_name(task, realName);
+ i = dm_task_run(task);
+ if (i < 0) {
+ dm_task_destroy(task);
+ return -3;
+ }
+ i = dm_task_get_info(task, info);
+ dm_task_destroy(task);
+ if (i < 0) {
+ return -3;
+ }
+
+ type = S_IFBLK;
+ major = info->major;
+ minor = info->minor;
+ } else if (devName[0] == 's' && devName[1] == 'd') {
+ /* scsi devices sda - sdp: major 8, minor 0 - 255 */
+ /* scsi devices sdq - sdaf: major 65, minor 0 - 255 */
+ /* scsi devices sdqg - sdav: major 66, minor 0 - 255 */
+ /* etc... */
int drive = 0;
char *num = NULL;
type = S_IFBLK;