这个文件主要描述软件包的名称(Package),突然

作者: 编程  发布:2019-12-10

转自:

一、deb包管理

在k/ubuntu 17.10及以后版本,建议安装1.1版本,运行后不出现界面的,要把 /usr/share/applications/netease-cloud-music.desktop 中的命令改为 netease-cloud-music --disable-seccomp-filter-sandbox %U 才行。
17.04及以前版本建议安装1.0版本的,托图图标出现问题的,可以把命令改为
“env XDG_CURRENT_DESKTOP=Unity netease-cloud-music %U”

 

1.deb包结构

好好的 网易云音乐 for linux 版本,突然因为依赖关系不能安装了,提示 libqt5libqgtk2 不能安装,因为源里没这个包了。
  原来此包被 qt5-style-plugins 代替了。既然知道原因了,就好办了,重新打包,更改依赖就好了。下面开始打包
一、下载网易云音乐的deb备用。
二、安装一些编译需要的程序

deb是Debian Linux的软件包格式。一般来说是需要通过编译源码然后制作deb包,今天由于工作需要,想将一些现有的文件打包成deb包,苦苦寻找和研究如何处理,终于在下午3点时分成功制作出一个包。并自己亲手实践以保证每个步骤和最终结果的正确性。详情如下:

分为2个部分:

sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg

我是在Ubuntu 7.10上操作的,欲将/usr/src/soft目录下的文件打包,解包时这些文件也释放到/usr/src/soft目录下。

软件具体安装目录(如etc, usr,等)

三、解包
建立使用的目录

首先建立一个工作目录,比如在用户lionel目录下建立work目录:

DEBIAN 控制信息文件夹,最起码有control文件,其次还可能具有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和conffiles等

mkdir -P netease/DEBIAN
mkdir fix

#cd /home/lionel
#mkdir work
#cd work

control文件: 这个文件主要描述软件包的名称(Package),版本(Version)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。同时为了能将软件包进行充分的管理,可能还具有以下字段:

解包

因为安装软件包的时候默认是将文件释放到根目录下,所以可以设定好它的路径,同时我们还需建立一个DEBIAN目录:

Section: 这个字段申明软件的类别,常见的有`utils’, `net’, `mail’, `text’, `x11′ 等;

Priority: 这个字段申明软件对于系统的重要程度,如`required’, `standard’, `optional’, `extra’ 等;

Essential: 这个字段申明是否是系统最基本的软件包(选项为yes/no),如果是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的卸载(除非进行强制性的卸载)

Architecture:申明软件包结构,如基于`i386′, ‘amd64’,`m68k’, `sparc’, `alpha’, `powerpc’ 等;

Source: 软件包的源代码名称;

Depends: 软件所依赖的其他软件包和库文件。如果是依赖多个软件包和库文件,彼此之间采用逗号隔开;

Pre-Depends: 软件安装前必须安装、配置依赖性的软件包和库文件,它常常用于必须的预运行脚本需求;

Recommends: 这个字段表明推荐的安装的其他软件包和库文件;

Suggests: 建议安装的其他软件包和库文件。

dpkg -x netease-cloud-music_1.0.0_i386_ubuntu16.04.deb ./netease

#mkdir -p usr/src
#cp -a /usr/src/soft usr/src
#mkdir DEBIAN

postinst:这个文件包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。

解出控制文件

比较关键的一步,用如下的方法在DEBIAN目录下创建一个control文件,并加入以下内容,内容可自定义:

preinst:在Deb包文件解包之前,将会运行该脚本。主要任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。

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

#cat >DEBIAN/control< Package: soft
Version: 1.0.1
Section: utils
Priority: optional
Architecture: i386
Depends:
Installed-Size: 512
Maintainer: Linuxidc@126l.com
Description: soft package
EOF

prerm :软件卸载前需要执行的脚本

修改控制文件

然后就可以使用dpkg命令构建deb包了:

postrm: 软件卸载后需要执行的脚本

gedit netease/DEBIAN/control

#dpkg -b . /home/lionel/soft_1.0.1_i386.deb

2.deb包解压

找到 libqt5libqgtk2 ,替换为 qt5-style-plugins 即可,超简单!

生成的包在/home/lionel目录下。

1.创建解压放置目录

mkdir -p /tmp/deb

mkdir -p /tmp/deb/DEBIAN

2.解压包中的文件到/tmp/deb

dpkg -X some.deb /tmp/deb

3.解压包的控制信息到/tmp/deb/DEBIAN

deb -e some.deb /tmp/deb/DEBIAN

2017-03-21 13-49-29 的屏幕截图.png

从整个过程来看,control文件是比较重要的,因此需要保证它的正确性。至于这些元数据的具体含义,以及为什么需要这些数据,稍后会再认真看一下。并且请注意每条命令前都是“#”,需要使用root权限执行这些操作。

3.deb包的制作

保存退出
四、重新打包

这里我会举例说明,我们要制作一个名为kellan-1,0-alpha.deb的安装包

dpkg-deb -b netease/ fix/

1.首先创建相关文件夹

等运行完,fix目录中就会多出一个deb文件.
五、安装

mkdir -p /tmp/kellan/etc/kellan     配置文件目录

mkdir -p /tmp/kellan/usr/share/kellan-1.0   说明目录

mkdir -p /tmp/kellan/usr/sbin/    启动脚本目录

mkdir -p /tmp/kellan/DEBIAN    包控制信息目录

sudo dpkg -i fix/netease-cloud-music_1.0.0_i386_ubuntu16.04.deb
sudo apt install -f

2.创建控制信息和包文件

测试,完美运行!

/tmp/kellan/DEBIAN# cat control

Package: kellan

Version: 1.0

Section: utils

Priority: optional

Essential: no

Depends: g++(>=4.2),fio(>=2.1)

Suggests: cron

Recommends: bash

Install-size: 512

Architecture: amd64

Maintainer: kellan@163.com

Description: This is a test deb

/tmp/kellan/DEBIAN# cat postinst  ( 软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst)

#!/bin/sh

echo "my first deb" > /root/mydeb.log

/tmp/kellan/DEBIAN# cat postrm   (软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm)

#!/bin/sh

rm -rf /root/mydeb.log

rm -rf /etc/kellan

rm -rf /usr/sbin/kellan

rm -rf /usr/share/doc/kellan-1.0

/tmp/kellan/etc/kellan# cat kellan.conf

PATH=$PATH:/root/bin

kelan=god

/tmp/kellan/usr/share/kellan-1.0# cat README

this is a test deb

/tmp/kellan/usr/sbin# cat kellan

#!/bin/sh

touch /root/kellan.txt

要有执行权限

chmod +x /tmp/kellan/usr/sbin/kellan

chmod +x /tmp/kellan/DEBIAN/postinst

chmod +x /tmp/kellan/DEBIAN/postrm

2017-03-21 13-54-01 的屏幕截图.png

3.打包

dpkg -b kellan kellan-1.0-alpha.deb   kellan是文件夹

4.安装

dpkg -i kellan-1.0-alpha.deb

5.检查

查看包是否安装成功

此时可以看到/etc/kellan /usr/sbin/kellan /usr/share/kellan-1.0都全部拷贝好了,而且/root下有mydeb.log文件,说明postinst执行了

# dpkg -l|grep kellan

ii  kellan                              1.0                                  amd64        This is a test deb

# dpkg -s kellan   

Package: kellan

Status: install ok installed

Priority: optional

Section: utils

Maintainer: kellan@163.com

Architecture: amd64

Version: 1.0

Depends: g++ (>= 4.2), fio (>= 2.1)

Recommends: bash

Suggests: cron

Description: This is a test deb

Install-size: 512

查看deb包文件内容

/tmp# dpkg -c kellan-1.0-alpha.deb

drwxr-xr-x root/root        0 2017-05-16 09:49 ./

drwxr-xr-x root/root        0 2017-05-16 09:49 ./etc/

drwxr-xr-x root/root        0 2017-05-16 10:06 ./etc/kellan/

-rw-r--r-- root/root        32 2017-05-16 10:06 ./etc/kellan/kellan.conf

drwxr-xr-x root/root        0 2017-05-16 09:49 ./usr/

drwxr-xr-x root/root        0 2017-05-16 10:07 ./usr/sbin/

-rwxr-xr-x root/root        34 2017-05-16 10:07 ./usr/sbin/kellan

drwxr-xr-x root/root        0 2017-05-16 09:49 ./usr/share/

drwxr-xr-x root/root        0 2017-05-16 10:06 ./usr/share/kellan-1.0/

-rw-r--r-- root/root        19 2017-05-16 10:06 ./usr/share/kellan-1.0/README

查看当前目录deb包的信息

/tmp# dpkg --info kellan-1.0-alpha.deb

new debian package, version 2.0.

size 1030 bytes: control archive=449 bytes.

238 bytes,    13 lines      control

48 bytes,    2 lines  *  postinst            #!/bin/sh

109 bytes,    5 lines  *  postrm              #!/bin/sh

Package: kellan

Version: 1.0

Section: utils

Priority: optional

Essential: no

Depends: g++(>=4.2),fio(>=2.1)

Suggests: cron

Recommends: bash

Install-size: 512

Architecture: amd64

Maintainer: kellan@163.com

Description: This is a test deb

6.删除deb包

dpkg -r kellan

因为执行postrm,此时相关文件都已删除

7.创建repo源

使用iso做apt源是很简单的,但是如果自己制作了一些deb包等,或者不需要那么多包,只需要自己使用的包,那么可以制作repo源,即将需要的deb包拷贝到执行文件夹下,可以安装deb是缓存到/var/cache下的包。

制作repo源很简单

dpkg-scanpackages /soft  /dev/null > /soft/Packages.gz

此命令就将/soft下的包进行的进行制作。等待系统扫描完所有的软件包后,会返回命令行,并且在software文件夹中生成一个名为Packages.gz的压缩文件,存有这个文件夹中的软件包信息及其依赖关系。

如此,本地repo源制作成功。

可以修改/etc/apt/source.list文件进行更新,apt-get进行安装

本文由9159.com发布于编程,转载请注明出处:这个文件主要描述软件包的名称(Package),突然

关键词: