Otavio Salvador ha scritto: > We have two possible way to fix that. Change parted to use previous
I think we have a third possible way, merge some good work from Ubuntu. For example, attached debdiff is an attempt to fix (p) naming issue (but not fixes OOM, I must make /lib/partman/active_partition/25divider/choices 'exit 0') In my case, it works, and installation terminate successfully, but sure it needs a revision. Giuseppe.
reverted: --- parted-1.8.8.git.2008.03.24/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/.gitignore @@ -1,35 +0,0 @@ -*.o -*~ -.deps -.libs -ABOUT-NLS -ChangeLog -INSTALL -Makefile -Makefile.in -aclocal.m4 -autom4te.cache -config.cache -config.h -config.hin -config.log -config.status -configure -doc/C/po/parted.8.pot -doc/pt_BR/parted.8.pt_BR.po -gnulib/ -libparted.pc -libparted/tests/init.sh -libparted/tests/label -libtool -m4 -parted-*.tar.bz2 -parted-*.tar.bz2.sig -parted-*.tar.gz -parted-*.tar.gz.sig -parted-*.xdelta -parted-*.xdelta.sig -parted.spec -partprobe/partprobe -stamp-h1 -tests/init.sh reverted: --- parted-1.8.8.git.2008.03.24/lib/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/lib/.gitignore @@ -1,94 +0,0 @@ -*.la -*.lo -__fpending.c -__fpending.h -alloca.c -alloca.h -alloca_.h -atexit.c -basename.c -calloc.c -charset.alias -close-stream.c -close-stream.h -closeout.c -closeout.h -config.charset -config.h.in -configmake.h -dirname.c -dirname.h -error.c -error.h -exitfail.c -exitfail.h -free.c -full-write.c -full-write.h -getopt.c -getopt.h -getopt1.c -getopt_.h -getopt_int.h -gettext.h -gnulib.mk -inttypes.h -inttypes_.h -localcharset.c -localcharset.h -long-options.c -long-options.h -malloc.c -memchr.c -memcmp.c -memcpy.c -memmove.c -memset.c -quotearg.c -quotearg.h -realloc.c -ref-add.sed -ref-add.sin -ref-del.sed -ref-del.sin -regcomp.c -regex.c -regex.h -regex_internal.c -regex_internal.h -regexec.c -rename.c -rpmatch.c -safe-read.c -safe-read.h -safe-write.c -safe-write.h -stdbool.h -stdbool_.h -stdint.h -stdint_.h -stdlib.h -stdlib_.h -strcspn.c -string.h -string_.h -stripslash.c -strndup.c -strnlen.c -strtod.c -strtol.c -unistd.h -unistd_.h -utime.c -version-etc-fsf.c -version-etc.c -version-etc.h -wchar.h -wchar_.h -wctype.h -wctype_.h -xalloc-die.c -xalloc.h -xmalloc.c -xstrndup.c -xstrndup.h diff -u parted-1.8.8.git.2008.03.24/debian/changelog parted-1.8.8.git.2008.03.24/debian/changelog --- parted-1.8.8.git.2008.03.24/debian/changelog +++ parted-1.8.8.git.2008.03.24/debian/changelog @@ -1,3 +1,15 @@ +parted (1.8.8.git.2008.03.24-9.1) unstable; urgency=low + + * Non-maintainer upload. + * Merge from Ubuntu: debian/patches/parted-dmraid.dpatch: Patch to educate + libparted about dmraid arrays, which use device mapper. Libparted was + naming new partition nodes incorrectly, and not setting the UUIDs for + dmraid device nodes. (Closes: #497110) + * debian/patches/parted-dmraid.dpatch: Make sure that partition nodes for + dmraid devices are probed + + -- Giuseppe Iuculano <[EMAIL PROTECTED]> Sat, 06 Sep 2008 15:02:11 +0200 + parted (1.8.8.git.2008.03.24-9) unstable; urgency=low [ Otavio Salvador ] diff -u parted-1.8.8.git.2008.03.24/debian/patches/00list parted-1.8.8.git.2008.03.24/debian/patches/00list --- parted-1.8.8.git.2008.03.24/debian/patches/00list +++ parted-1.8.8.git.2008.03.24/debian/patches/00list @@ -5,6 +5,7 @@ # Patch susceptible to be merged upstream devfs #kfreebsd-gnu +parted-dmraid # Will also stay debian specific, but depends on some of the above :/ sparc-fix-raid reverted: --- parted-1.8.8.git.2008.03.24/build-aux/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/build-aux/.gitignore @@ -1,14 +0,0 @@ -announce-gen -compile -config.guess -config.rpath -config.sub -depcomp -gnupload -install-sh -link-warning.h -ltmain.sh -mdate-sh -missing -mkinstalldirs -texinfo.tex reverted: --- parted-1.8.8.git.2008.03.24/debug/clearfat/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/debug/clearfat/.gitignore @@ -1 +0,0 @@ -clearfat reverted: --- parted-1.8.8.git.2008.03.24/parted/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/parted/.gitignore @@ -1 +0,0 @@ -parted reverted: --- parted-1.8.8.git.2008.03.24/doc/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/doc/.gitignore @@ -1,9 +0,0 @@ -C/log -C/sync.1 -C/x.1 -C/x.pot -parted.info -pt_BR/parted.8 -pt_BR/partprobe.8 -stamp-vti -version.texi reverted: --- parted-1.8.8.git.2008.03.24/libparted/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/libparted/.gitignore @@ -1,2 +0,0 @@ -*.lo -*.la reverted: --- parted-1.8.8.git.2008.03.24/po/.gitignore +++ parted-1.8.8.git.2008.03.24.orig/po/.gitignore @@ -1,18 +0,0 @@ -*.gmo -*.po -LINGUAS -Makefile.in -Makefile.in.in -Makevars -Makevars.template -POTFILES -Rules-quot -boldquot.sed [EMAIL PROTECTED] [EMAIL PROTECTED] -insert-header.sin -parted.pot -quot.sed -remove-potcdate.sed -remove-potcdate.sin -stamp-po only in patch2: unchanged: --- parted-1.8.8.git.2008.03.24.orig/debian/patches/parted-dmraid.dpatch +++ parted-1.8.8.git.2008.03.24/debian/patches/parted-dmraid.dpatch @@ -0,0 +1,161 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## parted-dmraid.dpatch by Luke Yelavich <[EMAIL PROTECTED]> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Patch to ensure that device mapper devices for dmraid arrays do not +## DP: have extra nodes created needlessly, as well as making sure that +## DP: partition nodes for dmraid devices are not probed. + [EMAIL PROTECTED]@ +diff -urNad parted-1.8.8.git.2008.03.24~/libparted/arch/linux.c parted-1.8.8.git.2008.03.24/libparted/arch/linux.c +--- parted-1.8.8.git.2008.03.24~/libparted/arch/linux.c 2006-05-08 20:08:37.000000000 +0200 ++++ parted-1.8.8.git.2008.03.24/libparted/arch/linux.c 2008-09-06 14:59:13.000000000 +0200 +@@ -263,6 +263,10 @@ + + static char* _device_get_part_path (PedDevice* dev, int num); + static int _partition_is_mounted_by_path (const char* path); ++#ifdef ENABLE_DEVICE_MAPPER ++static int _is_dmraid_device (char* devpath); ++static int _is_dmraid_major(char* devpath); ++#endif + + static int + _is_ide_major (int major) +@@ -456,7 +460,7 @@ + continue; + + if (_is_dm_major(major(st.st_rdev))) +- _ped_device_probe (buf); ++ _ped_device_probe (buf); + } + closedir (mapper_dir); + +@@ -2056,6 +2060,11 @@ + * a pure userpace (udev) decision! */ + snprintf (result, result_len, "%s-part%d", dev->path, num); + #endif ++#ifdef ENABLE_DEVICE_MAPPER ++ } else if (dev->type == PED_DEVICE_DM && _is_dmraid_device (dev->path)) { ++ snprintf (result, result_len, "%s%d", dev->path, num); ++#endif ++ + } else if (dev->type == PED_DEVICE_DAC960 + || dev->type == PED_DEVICE_CPQARRAY + || dev->type == PED_DEVICE_ATARAID +@@ -2410,6 +2419,8 @@ + char* vol_name = NULL; + char* dev_name = NULL; + char* params = NULL; ++ char* dm_uuid = NULL; ++ int uuid_len; + + dev_name = _device_get_part_path (disk->dev, part->num); + if (!dev_name) +@@ -2440,6 +2451,12 @@ + dm_task_set_name (task, vol_name); + dm_task_add_target (task, 0, part->geom.length, + "linear", params); ++ if (_is_dmraid_device (disk->dev->path)) { ++ uuid_len = (strlen (vol_name) + 8); ++ dm_uuid = (char*) ped_malloc (uuid_len); ++ snprintf(dm_uuid, uuid_len, "DMRAID-%s", vol_name); ++ dm_task_set_uuid(task, dm_uuid); ++ } + rc = dm_task_run(task); + if (rc >= 0) { + //printf("0 %ld linear %s\n", part->geom.length, params); +@@ -2447,6 +2464,8 @@ + dm_task_destroy(task); + free(params); + free(vol_name); ++ if (dm_uuid) ++ ped_free(dm_uuid); + return 1; + } else { + _dm_remove_map_name(vol_name); +@@ -2484,6 +2503,85 @@ + } + return rc; + } ++ ++/* Checks whether the given device-mapper device is part of a dmraid array, ++ * by checking for the string "DMRAID-" at the start of the UUID. ++ */ ++static int ++_is_dmraid_device (char* devpath) ++{ ++ struct dm_task* task = NULL; ++ int rc = 0; ++ const char* dmraid_uuid; ++ char* dm_name = NULL; ++ ++ dm_name = strrchr (devpath, '/'); ++ if (dm_name && *dm_name && *(++dm_name)) ++ dm_name = strdup (dm_name); ++ else ++ dm_name = strdup (devpath); ++ if (!dm_name) ++ return 0; ++ ++ task = dm_task_create(DM_DEVICE_DEPS); ++ if (!task) ++ return 0; ++ ++ dm_task_set_name(task, dm_name); ++ rc = dm_task_run(task); ++ if (rc < 0) { ++ rc = 0; ++ goto err; ++ } ++ rc = 0; ++ ++ dmraid_uuid = dm_task_get_uuid(task); ++ if (strncmp (dmraid_uuid, "DMRAID-", 7) == 0) { ++ rc = 1; ++ } ++ ++err: ++ free (dm_name); ++ dm_task_destroy(task); ++ return rc; ++} ++ ++/* Checks whether the given dmraid device node is a partition node, or the ++ * master node. This is done by checking the /sys/block directory for the node ++ * in question, to determine whether it is a slave of another device-mapper ++ * device. The node should be confirmed as a dmraid device by calling ++ * _is_dmraid_device first. ++ */ ++static int ++_is_dmraid_major(char* devpath) ++{ ++ DIR* sysfs_dir; ++ struct dirent* dent; ++ char dmraid_devpath [32]; ++ struct stat st; ++ ++ if (stat (devpath, &st) != 0) ++ return 0; ++ ++ snprintf(dmraid_devpath, 32, "/sys/block/dm-%d/slaves", minor(st.st_rdev)); ++ ++ sysfs_dir = opendir (dmraid_devpath); ++ if (!sysfs_dir) ++ return 0; ++ ++ while ((dent = readdir (sysfs_dir))) { ++ if (strcmp (dent->d_name, ".") == 0 || ++ strcmp (dent->d_name, "..") == 0) ++ continue; ++ ++ if (strncmp(dent->d_name, "dm-", 3) == 0) ++ return 0; ++ } ++ closedir (sysfs_dir); ++ ++ return 1; ++} ++ + #endif + + static int
signature.asc
Description: OpenPGP digital signature