【全网独家】手把手教你制作一个Ubuntu Deb 安装包「建议收藏」

Ubuntu Deb 安装包加班到9点多了,今天本来准备整理一下Linux常用命令,没有时间了。目前还没有回家。就发一篇昨天整理的一个deb打包的教程,网上搜了很多,都是讲解命令的,没有一个比较完整的教程。如果你公司用到了deb打包,可以仔细阅读一下,如果你没有接触过deb打包,那可以简单了解一下,毕竟技多不压身。本文主要参考博文:Debconf程序员的教程 :http://www.fif…

大家好,又见面了,我是全栈君。

Ubuntu Deb 安装包

加班到9点多了,今天本来准备整理一下Linux常用命令,没有时间了。
Linux命令系列文章推荐:
1、Java开发人员必须掌握的Linux命令(一)
2、Java开发人员必须掌握的Linux命令(二)
3、Java开发人员必须掌握的Linux命令(三)
4、Java开发人员必须掌握的两个Linux魔法工具(四)
5、Java开发人员必须掌握的Linux命令-学以致用(五)

目前还没有回家。就发一篇昨天整理的一个deb打包的教程,网上搜了很多,都是讲解命令的,没有一个比较完整的教程。如果你公司用到了deb打包,可以仔细阅读一下,如果你没有接触过deb打包,那可以简单了解一下,毕竟技多不压身

本文主要参考博文:

在这里插入图片描述

一、什么是Deb包

DEB是Debian软件包格式的文件扩展名,跟Debian的命名一样,DEB也是因Debra Murdock而得名,她是Debian创始人Ian Murdock的太太。

deb包在Linux操作系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。

二、Ubuntu dpkg命令

dpkg命令是Debian Linux系统用来安装、删除、构建和管理Debian的软件包的实用工具。

如已有deb安装包(例如:object.deb) dpkg命令常用格式如下:

命令 说明
sudo dpkg -I object.deb 查看object.deb软件包的详细信息,包括软件名称、版本以及大小等(其中-I等价于–info)
sudo dpkg -c object.deb 查看object.deb软件包中包含的文件结构(其中-c等价于–contents)
sudo dpkg -i object.deb 安装object.deb软件包(其中-i等价于–install)
sudo dpkg -l object 查看object软件包的信息(软件名称可通过dpkg -I命令查看,其中-l等价于–list)
sudo dpkg -L object 查看object软件包安装的所有文件(软件名称可通过dpkg -I命令查看,其中-L等价于–listfiles)
sudo dpkg -s object 查看object软件包的详细信息(软件名称可通过dpkg -I命令查看,其中-s等价于–status)
sudo dpkg -r object 卸载object软件包(软件名称可通过dpkg -I命令查看,其中-r等价于–remove)
sudo dpkg -P object 移除object (不保留配置)

注:dpkg命令无法自动解决依赖关系。如果安装的deb包存在依赖包,则应避免使用此命令,或者按照依赖关系顺序安装依赖包。

更多命令详情可阅读 :

  • dpkg命令的用法 : https://www.cnblogs.com/TankXiao/p/3332457.html
  • Dpkg : https://blog.csdn.net/guojin08/article/details/17399535

三、手把手教你制作一个Deb包

deb是 Debian Linux 的软件包格式,打包最关键的是在DEBIAN 目录下创建一个 control 文件。

1、软件检查

deb 包打包前要确定所需要打包的运行文件及其依赖库,否则deb包安装后运行可能会出现问题。

2、deb打包案例过程

案例说明:

将一个qst_test.war包放入tomcat中,打包成deb包!并运行发布启动服务。

打包环境在192.168.0.110

服务安装后的路径为 :  /learn/qst_test/apache-tomcat-8.5.23 。

发布成功注册为系统服务运行,服务名称:**qst-tomcat-demo**。

服务的web的访问地址:  http://Ip:9088/qst_test/ ,如安装192.168.0.70 服务器!
http://192.168.0.70:9088/qst_test/ ,界面显示Hello Qst!(可配置)!

注: 要运行tomcat 首先要安装JDK jdk的安装及不讲解了!
2.1、创建演示demo目录

在110环境打包的目录在创建本次演示的demo deb目录。

# 进入打包目录
cd /home/learn_dabao/deb_1.0/installdeb/
# mkdir -p :递归创建目录
sudo mkdir -p qst_apache_tomcat_deb/qst_apache_tomcat/learn/qst_test/
# 拷贝一个tomcat安装包
sudo cp /home/learn/apache-tomcat-8.5.23.tar.gz .
# 解压 tomcat
sudo tar -zxvf apache-tomcat-8.5.23.tar.gz
# 上传 war包到,进入 tomcat webapp下,并进行解压,然后上传 qst_test.war
cd apache-tomcat-8.5.23/webapps
sudo mv /home/learn/qst_test.war .
sudo unzip qst_test.war
sudo rm -f qst_test.war

2.2、创建DEBIAN 目录

在 上面创建 qst_apache_tomcat 目录下,创建DEBIAN 目录 并创建 preinst, postinst, prerm, 和 postrm文件等,如下:

# 进入 qst_apache_tomcat 目录
cd /home/learn_dabao/deb_1.0/installdeb/qst_apache_tomcat_deb/qst_apache_tomcat
# 创建 DEBIAN 
sudo mkdir DEBIAN 
sudo touch control conffiles md5sums config preinst preinst postinst prerm postrm templates
# 赋予可以执行权限
udo chmod 755 control conffiles md5sums config preinst preinst postinst prerm postrm templates

##----------------------------------------##
control : 用了记录软件标识,版本号,平台,依赖信息等数据
conffiles : 当软件包升级的时候,你将会被询问是否要保留你的旧配置文件。
md5sums : md5校验

preinst : Debian软件包(".deb")解压前执行的脚本, 为正在被升级的包停止相关服务,直到升级或安装完成.(成功后执行 'postinst' 脚本).
postinst : 在解包后运行的脚本,主要完成软件包(".deb")安装完成后所需的配置工作. 通常, postinst 脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件. 一个软件包安装或升级完成后。
config : 启动配置 
templates : 定制模板
prerm : 卸载时,在删除文件之前运行的脚本(停止一个软件包的相关进程, 要卸载软件包的相关文件前执行。)
postrm : 在删除文件之后运行的脚本(修改相关文件或连接, 和/或卸载软件包所创建的文件) 

##----------------------------------------##
其中 preinst, postinst, prerm, 和 postrm 脚本,是软件包安装前后自动运行的可执行脚本. 统称为控制文件, 是 Deian 软件包的"控制"部分.

**注:**DEBIAN 目录中的这些脚本文件,可以阅读 Debian 的包管理系统

2.3、control脚本文件

·control,字段介绍 : 6.4 Debian 的控制文件是什么?

Package: qst-tomcat-demo
Version: 1.0.0
Architecture: amd64
Maintainer: dufy@1000video.com.cn
Installed-Size: 
Pre-Depends: 
Depends: 
Recommends: 
Conflicts: 
Replaces: 
Provides: 
Section: 
Priority: extra
Description: test deb package 
字段 描述
包名(Packahe) 包名(Packahe)字段给出软件包的名称, 这是软件包工具用以识别这个包的名称, 通常(单不是必须)和这个 Debian 软件包的名称的第一个字符串相似.
版本(Version) 版本(Version)字段给出上游开发者的版本号和修正版本号,详见为什么 Debian 软件包名字这么长?, 第 6.3 节.
平台(Architecture) 平台(Architecture)字段指定这个二进制包的编译硬件平台.
依赖(Depends) 依赖(Depends)字段给出所依赖的包的列表.
安装大小(Installed-Size) 安装大小(Installed-Size)字段说明安装这个包所需磁盘空间, 用于安装前端显示是否有足够的空间安装此程序…
类别(Section) 类别(Section)行给出此包在Debian FTP上的存储位置,上存储此包的目录名(详见Debian 的 FTP 上有哪些目录?, 第 5.1 节).
优先级(Priority) 优先级(Priority), 对应安装来说的重要程度, 象 dselect 和 console-apt 一类的半智能软件可以据此对软件安装分类,详见 包的优先级?, 第 6.7 节.
维护者(Maintainer) 维护者(Maintainer)字段给出当前维护此包负责人的电子信箱…
描述(Description) 描述(Description)字段此软件包的简要说明
2.4 conffiles 和 md5sums 脚本文件

配置文件(Conffiles)是一个配置文件列表(通常在 /etc 下), 软件升级时不会被覆盖, 以确保所含文件的本地配置不会被破坏, 使得可以在系统运行状态下升级.

md5sums 不知道怎么弄!没去研究!

这两个没有特殊情况,可以不配内容。

2.5 config 脚本文件

config ,启动配置 The Config Script 【非必须配置】

config 里面的 配置。确定应该询问问题的顺序以及应该显示给用户的消息,找出在提出问题和显示消息之前要做的测试,然后开始编写debian / config文件来询问和显示它们。问题名称通常对应于模板文件(templates)中模板的名称

注意:这些问题由单独的配置脚本提出,而不是由postinst提出,因此可以在安装包之前配置包,也可以在安装包后重新配置包。不要让你的postinst使用debconf来提问。

下面例子为安装的时候,自定义首页欢迎语内容!

**注:**可以使用/usr/share/debconf/confmodule,里面许多shell函数。每个shell函数对应于协议中的命令(小写,并且“db_”前缀为其名称)。可以将参数传递给它并在$RET变量中返回结果。

#!/bin/sh

set -e
# Source debconf library.
. /usr/share/debconf/confmodule


if [ "$1" = "configure" ] && [ -z "$2" ];
then
        set -e
               db_input high qst/tomcat-test || true
                db_go
        set +e
fi

 db_stop

再次强调:问题名称通常对应于模板文件中模板的名称。qst/tomcat-test

2.6、templates脚本文件

templates 模板, The Templates file【非必须配置】,和config 结合使用。

Template: qst/tomcat-test
Type: string
Default: Hello Qst
Description: 欢迎语修改
2.7、 preinst 脚本文件

解压前执行的脚本,验证服务是否在运行或者其他的一些业务功能。

#!/bin/sh
set -e

# Automatically added by dh_installudev
if [ -f "/etc/init.d/qst-tomcat-demo" ]; then
	echo "qst-tomcat-demo had been installed. Please use \\033[41;30m'sudo dpkg -P qst-tomcat-demo'\\033[0m command to uninstall first."
	exit 1
fi
# End automatically added section

exit 0

注: /etc/init.d/qst-tomcat-demo 后面会说明如何创建!

2.8、postinst脚本文件

在解包后运行的脚本,如需要弹框,就是这里面做的操作,db_get qst/tomcat-test ,qst/tomcat-test为config中配置的。

#!/bin/sh
# postinst script for #PACKAGE#
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

index_file="/learn/qst_test/apache-tomcat-8.5.23/webapps/qst_test/index.jsp"
set -e
. /usr/share/debconf/confmodule
case "${1}" in
	configure)
                db_get qst/tomcat-test
                HELLO_W="${RET:-Hello Qst}"

                db_stop
		if [ -f "$index_file" ]; then
			echo ${HELLO_W} > $index_file
		fi


	;;

	abort-upgrade|abort-remove|abort-deconfigure)

	;;

	*)
		echo "postinst called with unknown argument \`${1}'" >&2
		exit 1
	;;
esac

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then
	if [ -x "/etc/init.d/qst-tomcat-demo" ]; then
		update-rc.d qst-tomcat-demo defaults >/dev/null
	fi
	if [ -x "/etc/init.d/qst-tomcat-demo" ]; then
		invoke-rc.d qst-tomcat-demo start || true
	fi
fi

exit 0

注:添加到Shell的参数个数

  • $0 Shell本身的文件名
  • 1 ~ 1~ 1n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

update-rc.d命令 说明

此命令用于安装或移除System-V风格的初始化脚本连接。脚本是存放在 /etc/init.d/目录下的,当然可以在此目录创建连接文件连接到存放在其他地方的脚本文件。

用法

update-rc.d [-n] [-f] name remove 用于移除脚本。
update-rc.d [-n] name default [NN | SS KK],NN表示执行序号(0-99),SS表示启动时的执行序号,KK表示结束时的执行序号,SS、KK主要用于在脚本之间的执行顺序上有依赖关系的情况下。

例如:A启动后B才能启动,B关闭后A才关闭

update-rc.d A defaults 80 20
update-rc.d B defaults 90 10

脚本解释:

update-rc.d qst-tomcat-demo defaults 添加启动项!因为是测试demo,没有依赖,所以不填序号。

invoke-rc.d qst-tomcat-demo start,service qst-tomcat-demo start与invoke-rc.d qst-tomcat-demo start有相同的作用(启动qst-tomcat-demo服务,相应的停止服务的命令为invoke-rc.d qst-tomcat-demo stop)

2.9、prerm 脚本文件

卸载时,在删除文件之前运行的脚本!这里停止对应的服务!

#! /bin/sh
# prerm script for #PACKAGE#
#
# see: dh_installdeb(1)

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

# Automatically added by dh_installinit
# End automatically added section

if [ -x "/etc/init.d/qst-tomcat-demo" ]; then
	systemctl kill qst-tomcat-demo || true
	invoke-rc.d qst-tomcat-demo stop || true
fi

exit 0

2.10、postrm 脚本文件

服务停止后,删除服务对应的文件数据。

/learn/qst_test/apache-tomcat-8.5.23

#!/bin/sh
# postrm script for #PACKAGE#
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
# * <postrm> `remove'
# * <postrm> `purge'
# * <old-postrm> `upgrade' <new-version>
# * <new-postrm> `failed-upgrade' <old-version>
# * <new-postrm> `abort-install'
# * <new-postrm> `abort-install' <old-version>
# * <new-postrm> `abort-upgrade' <old-version>
# * <disappearer's-postrm> `disappear' <overwriter>
# <overwriter-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

if [ -d "/learn/qst_test/apache-tomcat-8.5.23" ]; then
	rm -rf "/learn/qst_test/apache-tomcat-8.5.23"
fi

if [ "$1" = "purge" ] ; then
	update-rc.d qst-tomcat-demo remove >/dev/null
fi


# In case this system is running systemd, we make systemd reload the unit files
# to pick up changes.
if [ -d /run/systemd/system ] ; then
	systemctl --system daemon-reload >/dev/null || true
fi

# Automatically added by dh_installdebconf
if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then
        . /usr/share/debconf/confmodule
        db_purge
fi
# End automatically added section


exit 0

3、添加启动服务

在 /etc/init.d/添加qst-tomcat-demo ,在qst_apache_tomcat 目录下面创建 etc/init.d 目录!并创建qst-tomcat-demo 文件

# 进入目录
cd /home/learn_dabao/deb_1.0/installdeb/qst_apache_tomcat_deb/qst_apache_tomcat
# 创建目录
sudo mkdir -p etc/init.d
# 创建文件
cd  etc/init.d/
sudo touch qst-tomcat-demo 
# 添加可执行权限
sudo chmod 755 qst-tomcat-demo 

qst-tomcat-demo 就是服务的名称,脚本信息如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides: qst-tomcat-demo 
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6
# Short-Description: qst-tomcat-demo Server
# Description: qst-tomcat-demo Server
### END INIT INFO

do_start()
{ 
   
	echo "start qst-tomcat-demo ..."
	sh /learn/qst_test/apache-tomcat-8.5.23/bin/startup.sh & 

	return 0
}

do_stop()
{ 
   
	echo "stop qst-tomcat-demo ..."
    sh /learn/qst_test/apache-tomcat-8.5.23/bin/stop.sh
    
	return 0
}

case "$1" in
	start)
		do_start
		;;
	stop)
		do_stop
		;;
	restart)
		do_stop
		do_start
		;;
esac

exit 0

4、打包deb脚本

在这个目录qst_apache_tomcat_deb 下面创建打包脚本! run.sh 内容如下。

#!/bin/sh

version=1.0.0

module_name="qst_apache_tomcat"

out_deb="objext-${module_name}_8.5.23_${version}_amd64_ubuntu16.04.deb"

echo -e "#!/bin/sh\n\ndir=\`cd \$(dirname \$0) && pwd\`\n\ndpkg -i \${dir}/${out_deb}" > objext-${module_name}_install.sh
echo "dpkg --purge qst-tomcat-demo" > objext-${module_name}_uninstall.sh

sed -i "s/Version:.*/Version: ${version}/" ${module_name}/DEBIAN/control

dpkg-deb -b ${module_name} ${out_deb}

四、安装、卸载及验证

1、在110环境上执行run.sh ,然后生成:

objext-qst_apache_tomcat_8.5.23_1.0.0_amd64_ubuntu16.04.deb
objext-qst_apache_tomcat_install.sh
objext-qst_apache_tomcat_uninstall.sh

2、拷贝安装和脚本到 70服务器,

3、执行对应的脚本进行安装!

安装后服务安装到 /learn/qst_test/apache-tomcat-8.5.23目录下。

访问http://192.168.0.70:9088/qst_test/访问首页。成功!(欢迎语可自定义)

在这里插入图片描述

4、行对应的脚本进行卸载!查看服务器访问不了,并且 对应的安装目录删除。

五、脚本执行流程说明

整个过程每个脚本执行的情况和各脚本功能说明,如下图:
在这里插入图片描述

我自己的体会 : 眼过千遍不如手过一遍!


最后分享一位老师的人工智能教程。零基础!通俗易懂!风趣幽默!
大家可以看看是否对自己有帮助,点击这里查看


谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!


不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人

© 每天都在变得更好的阿飞云

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121024.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月28日 上午11:00
下一篇 2022年2月28日 下午12:00


相关推荐

  • 等价类划分法设计测试用例例题_有效等价类测试用例

    等价类划分法设计测试用例例题_有效等价类测试用例等价类划分法设计测试用例

    2022年10月18日
    6
  • OPC 协议一点点总结

    OPC 协议一点点总结目录一 OPC 协议规范二 OPC 服务器三 OPC 服务器之间的通信四 OPC 三类对象 OPC 基于微软的 COM DCOM 技术来进行数据交换 只能安装在 Windows 系统 采用的是客户端 服务器模式 通信的发起端是客户端 可以读写服务器数据 硬件厂商只需要提供硬件设备的驱动程序 并且提供标准的 OPC 协议规范的 OPC 服务器让客户端来通过软件的方式来访问硬件 实现软件和硬件的通信 一 OPC 协议规范 DA DataAccess 规范 实时数据 访问数据主要采用的协议规范 A amp

    2026年3月17日
    2
  • 卡尔曼滤波原理详解及系统模型建立(simulink)

    卡尔曼滤波原理详解及系统模型建立(simulink)卡尔曼滤波原理详解及系统模型建立(simulink)卡尔曼滤波器卡尔曼滤波器是在上个世界五六十年代的时候提出的,到今天已经有六十年左右的时间,但卡尔曼滤波算法不管在控制、制导、导航或者通讯方面对数据的预测能力依然处在一个不可撼动的位置上,但是很多人对于其算法内部的工作原理究竟是怎么运作的依然不理解,所以在工程上很多人都只是把卡尔曼滤波当成是一种“黑箱”预测算法,并不清楚内部原理。但实际上没有任…

    2022年6月16日
    29
  • Linux使用之一安装安装scim中文输入法

    Linux使用之一安装安装scim中文输入法简单快速安装和配置中文输入法

    2026年3月19日
    3
  • 2015 多校联赛 ——HDU5373(模拟)

    2015 多校联赛 ——HDU5373(模拟)

    2021年9月8日
    58
  • Thinkphp5学习笔记

    Thinkphp5学习笔记架构Thinkphp5目录架构thinkphp应用部署目录├─application应用目录(可设置)│├─common公共模块目录(可更改)│├─in

    2021年12月13日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号