WordPress极简博客 WordPress极简博客
  • 新鲜事
  • 战疫情
  • UI素材
    • UI素材
    • 电商/节日
    • PPT
      • 节日庆典
      • 工作汇报
      • 商业计划书
    • word
      • 简历竞聘
      • 合同/公文
  • 创客头条
    • 音乐分享
    • 初创文章
    • 极客头条
    • 生活趣事
    • 生活日记
    • 防骗指南
  • 编程教学
    • API日记
    • Linux安全栏目
      • Linux运维安全汇总
      • DDOS攻击防护
      • XSS攻击防护
      • SQL安全防护
    • Python技术栏目
      • Python基础入门
      • Python基础结构
    • WordPress技术栏目
      • WP主题
      • WordPress技术教程
      • RIPRO主题美化
    • WordPress漏洞发布
    • 技术教程汇总
    • 严选源码
  • 专题
  • 基友
  • 隐私
  • 注册
    登录
立即登录
  • 首页
  • 云优化
  • 新疫情
  • 新鲜事
    • 热文
    • 极客
    • 生活
  • 技术篇
    • WP主题
    • 技术教程
    • Python入门
    • Python基础
  • 专题篇
  • 友链君
首页 技术教程(干货) shell文件嵌入使用方法

shell文件嵌入使用方法

夏柔 7月 11, 2020

linux版的jdk安装包是一个.bin后缀文件,下载后给执行权限就能解压安装,即简单又方便,Nvidia的闭源驱动(.run)也是一样。一直以为这两个安装包是编译好的二进制文件,可安装过程怎么看都像shell脚本,用sh -x 看了下执行过程,果然就是一个shell脚本,只不过脚本最后嵌入了二进制文件。
JDK安装的大致流程:检查磁盘空间 --> 提取包含的二进制文件(UnZipSFX自解压文件)--> 检查checksum --> 解压 -->结束
Nvidia的脚本稍复杂一点,但大致流程也是一样的,照着写了一个例子,可以用来制作包含二进制文件的shell安装包:

#!/bin/sh
PATH=/usr/bin:/bin
umask 022
md5=0ee8c59a12d99fdfd1e95bfda6938e86
pre_install()
{
echo "准备安装环境(略)..."
mkdir ./install.tmp.$$
}
check_sum()
{
if [ -x /usr/bin/md5sum ]&&[ -f "install.tmp.$$/extract.$$" ]; then
echo "正在检查md5......"
sum_tmp=($(/usr/bin/md5sum install.tmp.$$/extract.$$))
if [ $sum_tmp != $md5 ]; then
    echo "文件md5不一致,请检查文件完整性,退出!"
    exit 1
fi
else
        echo "找不到md5sum命令或文件未提取,退出"
    exit 1
fi
}
extract()
{
echo "从脚本中提取文件"
line_number=`awk '/^__BIN_FILE_BEGIN__/ {print NR + 1; exit 0; }' "$0"`    
tail -n +$line_number "$0" >./install.tmp.$$/extract.$$
#tail -n +$line_number "$0" >./install.tmp.$$/extract_tmp.$$
#base64 -d ./install.tmp.$$/extract_tmp.$$ >./install.tmp.$$/extract.$$
}
install()
{
    echo "安装中(略)..."
}
post_install()
{
    echo "配置中(略)..." 
    echo "清理临时文件"
    rm -rf install.tmp.$$
}

main()
{
    pre_install
    extract
    check_sum
    install
    post_install
    exit 0
}

main
#这行下面接二进制文件
__BIN_FILE_BEGIN__

二进制文件可以是zip/tar/可执行文件等等,将文件追加到脚本里,例如追加zip文件到脚本里:

cat binary.zip >>shell.sh

这种方法提取后会改变binary.zip的md5值,校检的时候要用提取后文件的md5(./install.tmp.$$/extract.$$)
还有一种方法可以不改变binary.zip的md5,就是使用base64将文件加密成文本:

base64 binary.zip >>shell.sh

在脚本extract()中,使用注释里的命令,网上有很多教程是用uuencode加密的,这个也行,不过很多系统默认是没有安装uuencode,通用性会下降,还是用base64好

#.run#jdk#linux#nvidia#shell#二进制
0
J2dcg1.png
猜你喜欢
  • Nginx添加跨域限制规则
  • 使用测速脚本对国内Linux服务器进行测速
  • 域名爆破之自动化信息收集脚本
  • 利用免费接口实现国家开放大学刷网课脚本
  • RiProV2定制导航条
  • 判断是否在微信浏览器打开
  • 微信内自动播放音频非百度方案
  • 利用veImageX加速您的网站,想不快都难!
  • SWAPIDC减少注册信息及防刷注册量教学
  • Python实现定时发送每日早报及生活指数
11 7月, 2020
云服务器优化SWAP
夏柔
站长
夏山如碧 - 怀柔天下
1688
文章
25
评论
58145K
获赞
版权声明

文章采用创作共用版权 CC BY-NC-ND/2.5/CN 许可协议,与本站观点无关。

如果您认为本文侵犯了您的版权信息,请与我们联系修正或删除。
投诉邮箱wpsite@aliyun.com

栏目推荐
Python基础入门33
WordPress技术教程267
前沿技术情报所22
城市创新——新消费11
最近有哪些不可错过的热文23
程序员的养生之道0
节
春
  • 新鲜事
  • 疫情实况
  • UI素材
  • 技术教程
  • 音乐分享
  • 专题
  • 友情
  • 隐私
  • 云优化
Copyright © 2019-2025 WordPress极简博客. Designed by 夏柔. 辽公网安备21010502000474号 辽ICP备19017037号-2