Ubuntu上的VDSM

Ubuntu上的VDSM

此页面描述了运行VDSM必须修复的Ubuntu不兼容问题。通过该解决方法,可以在Ubuntu上构建VDSM并运行一些功能测试。最后一部分提供了一个代码库,其中包含要在Ubuntu上运行的修改后的VDSM。这是具有以下变通办法的有效VDSM快照。如果您有兴趣,请选择一种解决方法并为其创建长期解决方案补丁,然后在解决方法旁边粘贴Gerrit链接。

目标Ubuntu版本:Ubuntu Server 12.10

依赖Deb软件包

  • 用于访问git repo

git git-email git-completion git-review git-man git-doc

  • 包装用

autoconf automake genisoimage gcc gdb make libtool libguestfs-tools policycoreutils sasl2-bin sysv-rc

  • 与Python相关

python-parted python-nose pep8 pyflakes python-libvirt python-dev python-ethtool python-pip python-m2crypto python-selinux python-rpm python-libguestfs

  • 安全

selinux-utils

  • 其他依赖

fence-agents ntp iproute nfs-server nfs-client lvm2 e2fsprogs open-iscsi psmisc bridge-utils dosfstools glusterfs-client glusterfs-common multipath-tools libsanlock-dev sanlock qemu-kvm-spice qemu-kvm qemu-bins utils gls rtslib

解决方法:通过apt-get手动安装它们

依赖问题

  • 缺少依赖项

妈妈sos policycoreutils-python vhostmd

解决方法:忽略或跳过相关功能。

  • python-pthreading无法通过apt-get获得

解决方法:使用pip进行安装。

  • sanlock-python无法通过apit-get或pip获得

解决方法:从源代码编译并安装sanlock。GCC 4.7要求所有链接标志都位于源文件名之后,应在sanlock git中调整Makefile以避免符号未定义错误。首先安装Ubuntu的sanlock和libsanlock-dev以获取init文件,然后从源代码编译并安装sanlock,但不安装init文件。sanlock源代码中的init文件与Ubuntu不兼容。

  • /usr/lib/libvirt/lock-driver/sanlock.so不可用

解决方法:在libvirt的qemu.conf中禁用sanlock

  • python-rtslib不够新鲜

解决方法:从pip安装python-rtslib

单元测试失败

  • SSL测试中的异常

M2Crypto API在版本之间有所不同。Ubuntu和Fedora具有不同版本的M2Crypto。

解决方法:修改SSL包装程序的M2Crypto相关VDSM代码,并添加缺少的API适配器

  • AlignmentScanTests.test_aligned_image和AlignmentScanTests.test_nonaligned_image失败,出现相同错误

libguestfs不在vdsm依赖性中,安装后,应运行update-guestfs-appliance

libguestfs-test-tool也失败,来宾设备的默认路径错误

解决方法:ln -s / usr / lib / guestfs / usr / lib / x86_64-linux-gnu / guestfs

  • AlignmentScanTests有时会导致CPU卡死

解决方法:Ubuntu应该提供具有更好的嵌套KVM支持的新内核版本。现在只需跳过测试。

  • testMethodMissingMethod

解决方法:Fedora和Ubuntu均失败,只需跳过它

打包

  • chkconfig不在12.10中。在vdsmd中称为它,在rpm中称为安装后脚本。

解决方法:使用update-rc.d或sysv-rc-conf,但它们不遵守chkconfig标头中的运行级别和启动顺序。因此,添加服务时必须手动定义启动顺序。

  • 不同的服务名称
软呢帽的Ubuntu
libvirtdlibvirt-bin
iscsid开放式
多路径多路径工具
ntpdntp
网络联网

解决方法:编辑vdsmd.init以更改服务名称

  • Ubuntu没有/etc/init.d/functions,应该在init脚本中使用/ lib / lsb / init-functions。

解决方法:编辑vdsmd.init以更改服务名称

  • /etc/init.d/functions与/ lib / lsb / init-functions

Fedora在/etc/init.d/functions中有daemon util函数定义,Ubuntu有start_daemon,这些选项是不同的,不等同于Fedora中的–user选项。

如果我们无法定义正在运行的用户,则vdsm主程序将检测到该用户并立即退出

解决方法:使用/ usr / sbin / sudo -u vdsm在初始化脚本中启动重生,而不是直接启动重生

/etc/init.d/functions中的killproc()函数支持“ -d delay”选项,/ lib / lsb / init-functions不支持。

解决办法:从vdsmd.init.in中的killproc()的所有调用中删除“ -d”选项。

  • / lib / lsb / init-functions中不存在某些功能,例如“成功”和“失败”

解决方法:在vdsmd.init中写入空的“成功”和“失败”功能。

文件系统层次结构

软呢帽的Ubuntu解决方法
/ sbin / nologin/ usr / sbin / nologin更改代码和脚本中的路径
/ sbin /服务/ usr / sbin /服务更改代码和脚本中的路径
/ var / lock / subsys // var / lock /更改代码和脚本中的路径
/ etc / sysconfig / libvirtd/ etc / default / libvirt-bin更改代码和脚本中的路径
/ usr / lib / udev / scsi_id/ lib / udev / scsi_id更改代码和脚本补丁中的路径
/ sys / class / cpuid /找不到等效更改代码以使用os.sysconf('SC_NPROCESSORS_ONLN')补丁
/etc/iscsi/initiatorname.iscsi 644同一文件,但许可权是600,vdsm无法读取它安装脚本中的chmod
/boot/initramfs-kernelVer.img/boot/initrd.img-kernelVer更改代码和脚本中的路径
/ var / lib / libvirt / qemu / channels vdsm:kvm所有者是root:root安装脚本中的chmod
  • 用户和组

libvirt启动的Fedora qemu进程是qemu:qemu

由libvirt启动的Ubuntu qemu进程是libvirt-qemu:kvm,没有组名qemu,只有组kvm

解决方法:某些代码和脚本已更改为使用Ubuntu中的路径和组。

补丁

  • Ubuntu默认不挂载configfs。

解决方法:LIO目标使用configfs,iSCSI功能测试使用LIO目标,用户应手动挂载文件系统mount -t configfs configfs / sys / kernel / config /现在,我对proc的iscsi目标模块进行探测并在run_tests中挂载configfs .sh.in

基础工具的差异

  • Ubuntu默认情况下使用的是apparmor而不是selinux,apparmor可以防止qemu绑定unix套接字,并可以防止影响vdsm的其他事​​情。

解决方法:在安装脚本中禁用apparmor

  • Ubuntu sed中没有复制选项

解决方法:在脚本中删除此选项

  • Ubuntu kill中的错误,解析kill -9 -xxx会出错

解决方法:必须使用kill -9 – -xxx

补丁

  • udev问题

Ubuntu /lib/udev/rules.d/下有一个85-lvm2.rules,它将LV的所有者组设置为“ disk”,从而防止VDSM产生,读取和写入LV。VDSM会将LV插入代码中,而12-vdsm-lvm.rules也会这样做。但是85-lvm2.rules在12-vdsm-lvm.rules之后运行,因此最终总是总是由85-lvm2.rules“ root:disk”设置所有者。在Fedora中,没有这样的85-lvm2.rules,因此没有这样的问题。

解决方法:将12-vdsm-lvm.rules重命名为86-vdsm-lvm.rules,以使VDSM udev规则在默认的lvm规则之后运行。

补丁

新贵vs.systemd

正如https://wiki.ubuntu.com/systemd所说,systemd与upstart非常不兼容,我们应该为vdsm创建upstart作业。我们不应该在新贵之内或之内运行systemd。由于upstat可以运行传统的sysv服务,因此我们可以直接使用vdsdm.init,仅需进行一些必要的修改

DK:强烈建议您将讨厌的SysV服务分解为更小的东西,从而调用vdsm-tool命令。这样一来,向新贵发起的移植就可以变得更加简单。

现有努力

大多数解决方法都需要修改源代码和脚本。修改后的VDSM源代码如下。按照本WIKI第一部分中的说明手动解决依赖关系后,可以克隆代码,然后运行./ubuntuInstall.sh来构建,运行单元测试和安装VDSM。安装后,您可以使用“ service vdsmd start”启动VDSM守护程序。

要运行功能测试,请CD到/ usr / share / vdsm / tests和./run_tests.shfunctional/xmlrpcTests.py。当前,我们可以使用iSCSI和LOCALFS存储运行VM创建测试。

https://github.com/edwardbadboy/vdsm-ubuntu

联系人:zhshzhou AT linux DOT vnet DOT ibm DOT com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值