Ubuntu Deb 安装包
加班到9点多了,今天本来准备整理一下Linux常用命令,没有时间了。目前还没有回家。就发一篇昨天整理的一个deb打包的教程,网上搜了很多,都是讲解命令的,没有一个比较完整的教程。如果你公司用到了deb打包,可以仔细阅读一下,如果你没有接触过deb打包,那可以简单了解一下,毕竟技多不压身。
本文主要参考博文:
- Debconf程序员的教程 :http://www.fifi.org/doc/debconf-doc/tutorial.html#AEN113
- Debian 的包管理系统 : https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.zh-cn.html
一、什么是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: [email protected]
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本身的文件名
- -n 添加到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、行对应的脚本进行卸载!查看服务器访问不了,并且 对应的安装目录删除。
五、脚本执行流程说明
整个过程每个脚本执行的情况和各脚本功能说明,如下图:
我自己的体会 : 眼过千遍不如手过一遍!
本篇教程的安装包已经上传到百度网盘:
百度网盘:https://pan.baidu.com/s/17X5vrhlkzpW9aW9W31BNXQ
密码:x2de
谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!
不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!
博客首页 : http://blog.csdn.net/u010648555
愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人
© 每天都在变得更好的阿飞云