Linux系统软件更新的一种设计思路
前言
在Linux系统下开发软件存在一个更新的难题,一般来说,解决方法有如下几种方案:
- 将软件上传到ubuntu的APT仓库,取得官方的资格认可,然后使用
sudo apt-get install 软件名称
来下载安装以及更新 - 自行搭建APT仓库,在安装软件之前将自己的APT仓库源添加到系统中,此方法需要很精通Linux的一些操作指令,而且搭建方法也较为复杂,对于一般的新手来说比较艰难
- 使用脚本更新,通过脚本的方式,拉取远端服务器上的脚本资源实现一键更新
经过测试,发现脚本更新的方式最为简单,而且自由度高,因此本文将针对脚本更新的方式进行一个大致的说明教程
脚本更新方式描述
要想做到脚本更新的方式,需要遵循如下几个步骤:
- 编写远程更新脚本
- 在远端服务器存储软件包
- 通过Linux的
curl
指令拉取远端的服务器脚本,并执行
远程更新脚本编写
远程脚本更新需要包含如下几个内容,比如是否需要传参,固件的下载地址等,下面以软件更新脚本install.sh
作为一个简单的说明:
#! /bin/sh
set -e
case $1 in
"roboticmaster")
myurl="https://github.com/XiaoRGEEK/OpenRoboticMaster/releases/download/v0.0.3/roboticmaster-amd64.deb"
;;
"roboticmaster-zh")
myurl="https://gitee.com/xiaorgeek/open-robotic-master/attach_files/803287/download/roboticmaster-amd64.deb"
;;
"xrosmanager")
myurl="https://github.com/XiaoRGEEK/OpenXROSManager/releases/download/v1.3.4/xrosmanager-arm64.deb"
;;
"xrosmanager-zh")
myurl="https://gitee.com/xiaorgeek/open-xrosmanager/attach_files/807025/download/xrosmanager-arm64.deb"
;;
"xrosmanager-pi")
myurl="https://github.com/XiaoRGEEK/OpenXROSManagerRaspberry/releases/download/v1.3.4/xrosmanager-raspberry-arm64.deb"
;;
"xrosmanager-pi-zh")
myurl="https://gitee.com/xiaorgeek/open-xrosmanager-raspberry-pi/attach_files/819388/download/xrosmanager-raspberry-arm64.deb"
;;
*)
echo -e "\033[31mMissing or incorrect parameters, at least one parameter required such as xrosmanager\033[0m"
exit 1
;;
esac
echo -e "\033[35mDownloading...\033[0m"
wget $myurl -O xrpackage.deb
if [ ! $? -eq 0 ]
then
echo -e "\033[31m download failed, Check the network \033[0m"
rm -rf xrpackage.deb
exit 1
fi
echo -e "\033[35mUpgrade package ready, start updating...\033[0m"
sudo dpkg -i xrpackage.deb
if [ ! $? -eq 0 ]
then
echo -e "\033[31mInstallation failed, please check your system environment\033[0m"
rm -rf xrpackage.deb
exit 1
fi
rm -rf xrpackage.deb
如上方的更新脚本,case
关键字代表判断传入的参数$1
,如果存在多个软件更新内容的话可以使用这种判断方式,根据不同的参数设置不同的url,即软件下载地址。紧接着使用wget $myurl -O xrpackage.deb
这一条指令拉取需要下载的软件,最后判断指令执行情况,根据需要编写自己的脚本。
注意:上述脚本需要放置在服务器
在远端服务器存储软件包
我们最终实现的目的是远程的服务器的软件拉取到本地,首先我们就要存储软件到服务器上。这里选择的是将软件打包之后,存储到gitee
和github
上,因为这两个网站是免费的,而且方便我们进行相应的版本更新。当然,如果说有自己的需求的话,可以自行购买服务器存储,到时候连接过去就行。
curl 脚本编写
以上步骤准备完毕之后,可以进行一个curl的脚本编写,将该脚本提供给相应的用户,让他运行该指令即可,在本次实例中,更新脚本最终的写法如下:
curl -s http://xxx.com/install.sh | bash -s <软件名称>
如果不想暴露更新接口给到用户,可以写成相应的脚本形式,让用户直接运行脚本即可