VirtualBox

Changeset 43715 in vbox


Ignore:
Timestamp:
Oct 24, 2012 8:32:14 AM (12 years ago)
Author:
vboxsync
Message:

Main/Metrics: devmapper support in Linux (#6345)

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Config.kmk

    r43683 r43715  
    458458# Enable performance API.
    459459VBOX_WITH_RESOURCE_USAGE_API = 1
     460# Use VBoxVolInfo for getting FS dependecies.
     461if1of ($(KBUILD_TARGET), linux)
     462 VBOX_WITH_DEVMAPPER = 1
     463endif
    460464# Enable BusLogic SCSI host adapter
    461465VBOX_WITH_BUSLOGIC = 1
  • trunk/configure

    r43674 r43715  
    8787WITH_PULSE=1
    8888WITH_DBUS=1
     89WITH_DEVMAPPER=1
    8990WITH_KMODS=1
    9091WITH_OPENGL=1
     
    128129INCVNCSERVER=""
    129130LIBVNCSERVER="-lvncserver"
     131INCDEVMAPPER=""
     132LIBDEVMAPPER="-ldevmapper"
    130133CXX_FLAGS=""
    131134if [ "$OS" = "freebsd" ]; then
     
    748751
    749752#
     753# Check for libdevmapper, needed by the VBoxVolInfo
     754#
     755check_libdevmapper()
     756{
     757  test_header libdevmapper
     758  cat > $ODIR.tmp_src.cc << EOF
     759#include <cstdio>
     760extern "C" {
     761#define private
     762#include <libdevmapper.h>
     763int main()
     764{
     765  char version[80];
     766
     767  if (!dm_get_library_version(version, sizeof(version)))
     768  {
     769    printf("dm_get_library_version() failed.\n");
     770    return 1;
     771  }
     772
     773  const char* v=version;
     774  unsigned int major = 0, minor = 0, micro = 0;
     775
     776  for (; *v !='.' && *v != '\0'; v++) major = major*10 + *v-'0';
     777  if (*v == '.') v++;
     778  for (; *v !='.' && *v != '\0'; v++) minor = minor*10 + *v-'0';
     779  if (*v == '.') v++;
     780  for (; *v !='.' && *v != '\0'; v++) micro = micro*10 + *v-'0';
     781
     782  printf("found version %s", version);
     783  if (major*10000 + minor*100 + micro >= 10200)
     784  {
     785    printf(", OK.\n");
     786    return 0;
     787  }
     788  else
     789  {
     790    printf(", expected version 1.02 or higher\n");
     791    return 1;
     792  }
     793}
     794}
     795EOF
     796  if test_compile "$LIBDEVMAPPER $INCDEVMAPPER" libdevmapper libdevmapper; then
     797    if test_execute; then
     798      cnf_append "VBOX_WITH_DEVMAPPER" "1"
     799    fi
     800  fi
     801}
     802
     803
     804#
    750805# Check for openssl, needed for RDP and S3
    751806#
     
    21302185cat << EOF
    21312186  --disable-udptunnel      disable UDP tunnel networking
     2187  --disable-devmapper      disable device mapper library access
    21322188  --disable-hardening      don't be strict about /dev/vboxdrv access
    21332189  --build-libxml2          build libxml2 from sources
     
    23342390      WITH_VDE=1
    23352391      ;;
     2392    --disable-devmapper)
     2393      WITH_DEVMAPPER=0
     2394      ;;
    23362395    --build-debug|-d)
    23372396      BUILD_TYPE=debug
     
    25692628  if [ $WITH_DBUS -eq 0 ]; then
    25702629    cnf_append "VBOX_WITH_DBUS" ""
     2630  fi
     2631  if [ $WITH_DEVMAPPER -eq 1 ]; then
     2632    check_libdevmapper
     2633  else
     2634    cnf_append "VBOX_WITH_DEVMAPPER" ""
    25712635  fi
    25722636  check_libcap
  • trunk/debian/postinst.in

    r43316 r43715  
    6969  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxNetAdpCtl > /dev/null 2>&1; then
    7070    chmod 4511 /usr/lib/virtualbox/VBoxNetAdpCtl
     71  fi
     72  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxVolInfo > /dev/null 2>&1; then
     73    chmod 4511 /usr/lib/virtualbox/VBoxVolInfo
    7174  fi
    7275
  • trunk/debian/rules

    r43613 r43715  
    222222        mv $(archdir)/VBoxNetDHCP $(prefix)/usr/lib/$(package)
    223223        mv $(archdir)/VBoxNetAdpCtl $(prefix)/usr/lib/$(package)
     224        mv $(archdir)/VBoxVolInfo $(prefix)/usr/lib/$(package)
    224225        mv $(archdir)/VBoxXPCOMIPCD $(prefix)/usr/lib/$(package)
    225226        mv $(archdir)/components $(prefix)/usr/lib/$(package)/components
  • trunk/src/VBox/Installer/linux/Makefile.kmk

    r43580 r43715  
    150150                VBoxNetDHCP $(if $(VBOX_WITH_HARDENING),VBoxNetDHCP.so,) \
    151151                VBoxNetAdpCtl \
     152                VBoxVolInfo \
    152153                VBoxSVC \
    153154                VBoxXPCOM.so \
  • trunk/src/VBox/Installer/linux/debian/postinst.in

    r43122 r43715  
    6969  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxNetAdpCtl > /dev/null 2>&1; then
    7070    chmod 4511 /usr/lib/virtualbox/VBoxNetAdpCtl
     71  fi
     72  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxVolInfo > /dev/null 2>&1; then
     73    chmod 4511 /usr/lib/virtualbox/VBoxVolInfo
    7174  fi
    7275
  • trunk/src/VBox/Installer/linux/debian/rules

    r43365 r43715  
    246246        mv $(archdir)/VBoxNetDHCP $(prefix)/usr/lib/$(package)
    247247        mv $(archdir)/VBoxNetAdpCtl $(prefix)/usr/lib/$(package)
     248        mv $(archdir)/VBoxVolInfo $(prefix)/usr/lib/$(package)
    248249        mv $(archdir)/VBoxXPCOMIPCD $(prefix)/usr/lib/$(package)
    249250        mv $(archdir)/components $(prefix)/usr/lib/$(package)/components
  • trunk/src/VBox/Installer/linux/install.sh

    r43268 r43715  
    370370    fi
    371371
    372     # This binary needs to be suid root in any case, even if not hardened
     372    # This binaries need to be suid root in any case, even if not hardened
    373373    test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
     374    test -e $INSTALLATION_DIR/VBoxVolInfo && chmod 4511 $INSTALLATION_DIR/VBoxVolInfo
    374375
    375376    # Install runlevel scripts
  • trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec

    r43122 r43715  
    8181mv VBoxNetDHCP $RPM_BUILD_ROOT/usr/lib/virtualbox
    8282mv VBoxNetAdpCtl $RPM_BUILD_ROOT/usr/lib/virtualbox
     83mv VBoxVolInfo $RPM_BUILD_ROOT/usr/lib/virtualbox
    8384mv VBoxXPCOMIPCD $RPM_BUILD_ROOT/usr/lib/virtualbox
    8485mv components $RPM_BUILD_ROOT/usr/lib/virtualbox/components
     
    117118    mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done
    118119fi
    119 for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do
     120for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl VBoxVolInfo; do
    120121  chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
    121122if [ -d ExtensionPacks/VNC ]; then
  • trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp

    r43629 r43715  
    2828#include <iprt/err.h>
    2929#include <iprt/param.h>
     30#include <iprt/path.h>
    3031#include <iprt/string.h>
    3132#include <iprt/mp.h>
     
    3637#include "Logging.h"
    3738#include "Performance.h"
     39
     40#define VBOXVOLINFO_NAME "VBoxVolInfo"
    3841
    3942namespace pm {
     
    365368}
    366369
     370static void addVolumeDependencies(const char *pcszVolume, DiskList& listDisks)
     371{
     372    char szVolInfo[RTPATH_MAX];
     373    int rc = RTPathExecDir(szVolInfo, sizeof(szVolInfo) - sizeof("/" VBOXVOLINFO_NAME " ") - strlen(pcszVolume));
     374    if (RT_FAILURE(rc))
     375    {
     376        LogRel(("VolInfo: Failed to get program path, rc=%Rrc\n", rc));
     377        return VERR_INVALID_PARAMETER;
     378    }
     379    strcat(szVolInfo, "/" VBOXVOLINFO_NAME " ");
     380    strcat(szVolInfo, pcszVolume);
     381
     382    FILE *fp = popen(szVolInfo, "r");
     383    if (fp)
     384    {
     385        char szBuf[128];
     386
     387        while (fgets(szBuf, sizeof(szBuf), fp))
     388            listDisks.push_back(RTCString(szBuf));
     389
     390        pclose(fp);
     391    }
     392    else
     393        listDisks.push_back(RTCString(pcszVolume));
     394}
    367395
    368396int getDiskListByFs(const char *pszPath, DiskList& listDisks)
     
    376404            if (strcmp(pszPath, mntent->mnt_dir) == 0)
    377405            {
    378                 char szDevName[32];
    379                 listDisks.push_back(RTCString(getDiskName(szDevName, sizeof(szDevName), mntent->mnt_fsname)));
     406                char szDevName[128];
     407                getDiskName(szDevName, sizeof(szDevName), mntent->mnt_fsname);
     408                if (strncmp(mntent->mnt_fsname, "/dev/mapper", 11))
     409                    listDisks.push_back(RTCString(szDevName));
     410                else
     411                    addVolumeDependencies(szDevName, listDisks);
    380412                break;
    381413            }
  • trunk/src/apps/Makefile.kmk

    r41477 r43715  
    3434 endif
    3535endif
     36ifdef VBOX_WITH_DEVMAPPER
     37 ifneq ($(wildcard $(PATH_SUB_CURRENT)/volinfo),)
     38  include $(PATH_SUB_CURRENT)/volinfo/Makefile.kmk
     39 endif
     40endif
    3641
    3742include $(FILE_KBUILD_SUB_FOOTER)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette