linux平台制作deb包

1 deb包简介

  • deb是Debian软件包格式的文件扩展名。我们比较常用的ubuntu系统下的安装包就是deb格式。本篇文章就简单介绍下如何制作一个deb格式的安装包。

2 制作deb包

目录结构

  • 首先要创建如下图所示的目录结构
debPackTemp/
├── DEBIAN
│   ├── control
│   ├── postinst
│   └── prerm
├── opt
│   └── xiaohuihui
│       └── bin
│           ├── libaudio.so.2
│           ├── libQtCore.so.4
│           ├── libQtGui.so.4
│           ├── loginUI
│           └── startLogin.sh
└── usr
    └── share
        ├── applications
        │   └── xiaohuihui.desktop
        └── icons
            └── xiaohuihui
                └── xiaohuihui.ico

DEBIAN目录

  • 首先创建一个DEBIAN目录,这个目录必须要有
  • 然后在DEBIAN目录下创建一个control文件,该文件中主要记录软件包的一些信息,这个文件必须要有。control文件内容介绍:
    • Package : 包名
    • Version : 版本号
    • Architecture : 该程序可运行的CPU架构
    • Section : 你的软件属于的类别,utils表示实用工具。
    • Priority : 声明这个包的优先级
    • Maintainer : 提供者。可以写你的名字和邮箱地址
    • Description : 描述信息
  • eg
Package:xiaohuihui
Version:1.0.0
Architecture:amd64
Section:utils
Maintainer: xiaohuihui <[email protected]>
Priority:optional
Description: csdn test codeopt/csdnPackTest/bin
  • preinst : 安装包解包前运行的脚本
  • postinst : 安装包解包后运行的脚本
#! /bin/sh

chmod -R 755 /opt/xiaohuihui/bin

# 如果程序已经在运行,先杀掉程序,可解决覆盖安装问题
processLogin=$(ps aux | grep 'loginUI' | grep -v grep)
if [ "$processLogin" != "" ]; then
	    pkill loginUI
fi

# 下面主要是把启动程序拷贝到桌面
NAME_USER=`who | awk '{print $1}' | sort | uniq`
for name in $NAME_USER;

do
	if [ "$name" != "root" ];then
		CURRENT_HOME_DIR="/home/$name"
	else
		CURRENT_HOME_DIR="/$name"
	fi
	DESKTOP_DIR_CH=$CURRENT_HOME_DIR/Desktop
	XIAOHUIHUIPATH="/opt/xiaohuihui/bin"

	if [ -d $DESKTOP_DIR_CH ]; 
	then
		cp /usr/share/applications/xiaohuihui.desktop $DESKTOP_DIR_CH
		chmod +w $DESKTOP_DIR_CH/xiaohuihui.desktop
		chown $name:$name $DESKTOP_DIR_CH/xiaohuihui.desktop
		chown $name:$name $XIAOHUIHUIPATH
	fi

done
  • prerm:卸载时,在删除文件之前运行的脚本
#! /bin/sh

# 如果程序在运行,先杀掉程序
processLogin=$(ps aux | grep 'loginUI' | grep -v grep)
if [ "$processLogin" != "" ]; then
	    pkill loginUI
fi

# 清理文件
rm -rf /opt/xiaohuihui/*

# 移除桌面启动程序
NAME_USER=`who | awk '{print $1}' | sort | uniq`
for name in $NAME_USER
do
	if [ "$name" != "root" ]; then
		CURRENT_HOME_DIR="/home/$name"
	else
		CURRENT_HOME_DIR="/$name"
	fi

	DESKTOP_CH=$CURRENT_HOME_DIR/Desktop/xiaohuihui.desktop

	echo $DESKTOP_CH
	if [ -f $DESKTOP_CH ]; then
		rm -rf $DESKTOP_CH
	fi
done
  • postrm:卸载时,删除文件之后运行的脚本
  • 这四个文件都是shell脚本,不是必须的,我们可以只创建其中两个文件。

opt目录

  • 这个目录主要存放你的程序
  • 不一定要创建opt目录,也可以是usr目录或者其他目录。这里创建的是哪个目录,安装后,就会把你的程序拷贝到根目录下的对应目录中。opt目录下的目录结构也可以根据你的需求随意创建。

usr目录

  • 存放桌面启动程序和桌面图标
  • xiaohuihui.desktop
[Desktop Entry]
Version=1.0.0
Name=xiaohuihui
Comment=xiaohuihui application
Name[zh_CN]=小灰灰
Comment[zh_CN]=小灰灰启动程序
Exec=/opt/xiaohuihui/bin/startLogin.sh
Icon=/usr/share/icons/xiaohuihui/xiaohuihui.ico
Terminal=false
Type=Application
Categories=Qt;desktop
StartupNotify=true
MimeType=application/x-desktop;
Keywords=CSDN;xiaohuihui;

3 打包

  • 完成上面的准备工作,就可以打deb包了,打包命令
dpkg-deb -b debPackTemp/ xiaohuihui.deb

4 安装与卸载

  • 安装
dpkg -i xiaohuihui.deb
  • 卸载(卸载的软件名就是control文件中Package对应的名字)
dpkg -r xiaohuihui

5 效果

  • 安装完成后,就在/opt/xiaohuihui/bin目录下生成了对应的程序文件
root@ubuntu:/opt/xiaohuihui/bin# ls
libaudio.so.2  libQtCore.so.4  libQtGui.so.4  loginUI  startLogin.sh
root@ubuntu:/opt/xiaohuihui/bin#

6 解包

  • 如果我们有一个deb包,也可以解开查看其中内容
  • 解出包中文件
dpkg -X xiaohuihui.deb debPackTemp/
  • 解出包中控制信息
dpkg -e xiaohuihui.deb debPackTemp/DEBIAN/

猜你喜欢

转载自blog.csdn.net/new9232/article/details/127700713