问题背景
环境:CentOS 7.5
本打算使用checkinstall来打包spice-server,奈何CentOS7.5下没法yum install checkinstall
遂去网上找rpm包安装,然后总是报error:
/xx/xx/libxxx.so is not a directory
怀疑是版本问题,然后去 git clone http://checkinstall.izto.org/checkinstall.git
手动装最新版本,结果还是报error:
Building file list… FAILED!
cat: /var/tmp/tmp.wHtVtWP0YZ/newfiles: No such file or directory
自带的log显示:
error: line 11: Unknown tag: Recommends:
查了半天也没解决,没办法了只能想别的办法
rpmbuild 和 dpkg-buildpackage的操作太麻烦,暂不考虑
查到个新玩意儿,FPM
看起来很好吃很好用的样子,哈哈
安装FPM
#安装rugy、gem:
yum -y install ruby rubygems ruby-devel
gem source -l
#添加国内aliyun的源:
gem sources -a http://mirrors.aliyun.com/rubygems/
#移除原生官方源:
gem sources --remove https://rubygems.org/
#更新源:
gem source -u
#安装fpm:
gem install fpm
编译spice-server并打包
获取、修改源码
wget https://www.spice-space.org/download/releases/spice-server/spice-0.14.1.tar.bz2
install deps && config && make,缺啥包你们自己补吧
yum install spice-protocol
yum install glib2 glib2-devel
yum install pixman pixman-devel
yum install celt051 celt051-devel
yum install openssl openssl-devel
yum install libjpeg-turbo libjpeg-turbo-devel
yum install opus opus-devel
yum install cyrus-sasl cyrus-sasl-devel lz4 lz4-devel usbredir*
./configure --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib64 --enable-gtk-doc-pdf=no --enable-gtk-doc-html=no --enable-celt051 --enable-manual=no --enable-gstreamer=no
make -j8
打包
先让它安装到某个临时目录:
make install DESTDIR=/root/tmpdir
然后用fpm打包:
fpm -s dir -t rpm -n spice-server -v 0.14.1 -C /root/tmpdir
这时候有个spice-0.14.1-1.x86_64.rpm的rpm包出来了
安装测试与debug
yum install spice-0.14.1-1.x86_64.rpm
yum install centos-release-qemu-ev
上面这两步都没啥问题
yum install qemu-kvm-ev
这时候会提示:
–> Processing Dependency: libspice-server.so.1()(64bit) for package: 10:qemu-kvm-ev-2.12.0-33.1.el7.x86_64
–> Finished Dependency Resolution
Error: Package: 10:qemu-kvm-ev-2.12.0-33.1.el7.x86_64 (centos-qemu-ev)
Requires: libspice-server.so.1(SPICE_SERVER_0.6.0)(64bit)
Available: spice-server-0.14.0-7.el7.x86_64 (base)
libspice-server.so.1(SPICE_SERVER_0.6.0)(64bit)
Installed: spice-server-0.14.1-1.x86_64 (@/spice-server-0.14.1-1.x86_64)
Not found
Error: Package: 10:qemu-kvm-ev-2.12.0-33.1.el7.x86_64 (centos-qemu-ev)
Requires: libspice-server.so.1(SPICE_SERVER_0.8.3)(64bit)
Available: spice-server-0.14.0-7.el7.x86_64 (base)
libspice-server.so.1(SPICE_SERVER_0.8.3)(64bit)
Installed: spice-server-0.14.1-1.x86_64(@/spice-server-0.14.1-1.x86_64)
Not found
…
提示了一堆东西,从libspice-server.so的0.6一直到0.13版本全部都要。
但是这个时候用qemu跑spice协议虚拟机还是能跑的,这说明什么?
说明打出来的包没配置好,或者qemu-kvm-ev对版本有要求。
yum deplist qemu-kvm-ev
里面有一段:
- dependency: libspice-server.so.1()(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.10.0)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.10.1)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.10.2)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.10.3)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.10.4)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.11.2)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.12.2)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.12.3)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.12.4)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.12.5)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.12.6)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.13.1)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.6.0)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.8.1)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.8.2)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
- dependency: libspice-server.so.1(SPICE_SERVER_0.8.3)(64bit)
- provider: spice-server.x86_64 0.14.0-7.el7
尼玛一个spice-server.x86_64 0.14.0-7.el7怎么就能提供这么多版本的lib?
问题发现与解决
- 先用yumdownloader把这货下载下来看看,然后用rpmdev-diff和自己用FPM打的包对比半天,也没发现有啥问题,更没有发现上面说的这么多的lib.so文件。
- 那问题可能出现在哪儿?
大概率就是安装rpm的时候,配置文件不一样
顺着这个思路,我们去看看rpm包里面的打包的spec文件:
yum install rpm-build rpmrebuild rpm cpio
rpmrebuild -e -p --notest-install spice-server-0.14.0-7.el7.x86_64.rpm
- 这时候自动打开一个vim窗口,把里面文件保存下来, official.spec
- 再去打开自己打包的rpm包,把里面文件保存下来, mine.spec
两相对比,发现最大的区别就是官方的rpm包内容详尽、关键是多了这么几行:
- Provides: libspice-server.so.1()(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.10.0)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.10.1)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.10.2)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.10.3)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.10.4)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.11.2)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.11.4)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.12.2)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.12.3)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.12.4)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.12.5)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.12.6)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.13.1)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.13.2)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.6.0)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.6.1)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.8.0)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.8.1)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.8.2)(64bit)
- Provides: libspice-server.so.1(SPICE_SERVER_0.8.3)(64bit)
copy下来,加到mine.spec里面
下面咋办呢,rpm拆包再打包。
1, 先用rpmbuild帮咱建立打包所需的目录结构:
cd
rpmbuild …/
2, 再解开自己的rpm包,用修改后的mine.spec重新打:
解包到临时目录:
mkdir tmp-unzip-rpm
cd tmp-unzip-rpm/
rpm2cpio spice-server-0.14.1-1.x86_64.rpm | cpio -div
3, 再到rpmbuild的目录结构下折腾:
cd /root/rpmbuild/BUILDROOT/
mkdir spice-server-0.14.1-1.x86_64
cd spice-server-0.14.1-1.x86_64
cp -r /root/tmp-unzip-rpm/usr ./
- 开搞:
- cd
rpmbuild -bb mine.spec
ls /root/rpmbuild/RPMS/x86_64/
- 于是有了spice-server-0.14.1-1.x86_64.rpm
- 安装测试一下:
yum install /root/rpmbuild/RPMS/x86_64/spice-server-0.14.1-1.x86_64.rpm
yum install qemu-kvm-ev
- 这个时候提示信息就比较正常了:
[root@ip12163 ~]# yum install qemu-kvm-ev
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
- base: ftp.sjtu.edu.cn
- centos-qemu-ev: ftp.sjtu.edu.cn
- epel: mirrors.aliyun.com
- extras: mirrors.huaweicloud.com
- nux-dextop: mirror.li.nux.ro
- rpmfusion-free-updates: mirrors.ustc.edu.cn
- rpmfusion-nonfree-updates: mirrors.ustc.edu.cn
- updates: mirrors.cn99.com
Resolving Dependencies
–> Running transaction check
—> Package qemu-kvm-ev.x86_64 10:2.12.0-33.1.el7 will be installed
–> Finished Dependency ResolutionDependencies Resolved
=====================================================================
Package Arch Version Repository SizeInstalling:
qemu-kvm-ev x86_64 10:2.12.0-33.1.el centos-qemu-ev 3.5 MTransaction Summary
==========================
Install 1 PackageTotal download size: 3.5 M
Installed size: 15 M
Is this ok [y/d/N]:
ok,that’s all !
来源:CSDN
作者:benjamin_xu
链接:https://blog.csdn.net/Benjamin_Xu/article/details/103246605