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 |
---|---|
libvirtd | libvirt-bin |
iscsid | 开放式 |
多路径 | 多路径工具 |
ntpd | ntp |
网络 | 联网 |
解决方法:编辑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