使用dpkg-deb重新打包deb

网易云音乐Linux客户端1.0版本在Ubuntu18由于缺少libqt5libqgtk2依赖无法安装,这里介绍一下解决办法,借此也来记录一下如何使用dpkg-deb命令对deb包重新打包。

解压缩deb文件

首先一个文件夹extract/DEBIAN用来放安装包解压出来的文件,其中extract是用来放实际安装的文件,子目录DEBIAN是用来放deb包的控制文件的

mkdir extract/DEBIAN

解压安装文件:

dpkg-deb -x netease-cloud-music_1.0.0_amd64_ubuntu16.04.deb ./extract

解压控制文件:

dpkg-deb -e netease-cloud-music_1.0.0_amd64_ubuntu16.04.deb ./extract/DEBIAN

这时extract目录结构如下:

extract/
├── DEBIAN
│   ├── control
│   └── md5sums
└── usr
├── bin
├── lib
└── share

修改文件

现在的extract目录下的除了DEBIAN其他的文件在安装的时候是复制到对应的目录,DEBIAN目录下的control文件用于记录一些安装包信息,其中就包括依赖信息,control文件内容如下:

Package: netease-cloud-music
Version: 1.0.0
Architecture: amd64
Maintainer: Deepin Sysdev <sysdev@linuxdeepin.com>
Installed-Size: 110526
Depends: libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.14), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.9.14), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.11.94), libfreetype6 (>= 2.4.2), libgcc1 (>= 1:4.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.37.3), libgtk2.0-0 (>= 2.24.0), libnspr4 (>= 2:4.9-2~) | libnspr4-0d (>= 1.8.0.10), libnss3 (>= 2:3.13.4-2~) | libnss3-1d (>= 3.12.4), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libqt5core5a (>= 5.5.0), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.0.2) | libqt5gui5-gles (>= 5.0.2), libqt5multimedia5 (>= 5.0.2), libqt5network5 (>= 5.0.2), libqt5widgets5 (>= 5.0.2), libqt5x11extras5 (>= 5.1.0), libqt5xml5 (>= 5.0.2), libstdc++6 (>= 5.2), libx11-6 (>= 2:1.4.99.1), libxcursor1 (>> 1.1.2), libxext6, libxfixes3, libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.2), libxrender1, libxss1, libxtst6, zlib1g (>= 1:1.2.3.3), gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, libnspr4, libnss3, libqt5multimedia5-plugins, libqt5multimediawidgets5, libqt5libqgtk2
Section: sound
Priority: optional
Homepage: http://www.deepin.org
Description: netease cloud music player.
netease cloud music player.

可以看到Dependens中记录了安装这个包需要的依赖,我们将末尾的libqt5libqgtk2删除(连同之前的)即可将该依赖删除。

重新打包

然后就可以用如下命令重新打包了:

dpkg-deb -b ./extract ./build

之后就可以在./build目录下看到打包好的文件了,再次安装就不会因为依赖问题无法安装了。