找回密码
 注册

QQ登录

只需一步,快速开始

楼主: xl6663792

[工具] 华为光猫重打包工具

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮# r# n9 K$ o, [5 W, g% @6 d  u
发表于 2018-1-23 16:31:53 | 显示全部楼层
赚取猫粮啊啊啊
发表于 2018-1-25 17:16:59 | 显示全部楼层
很好                                                
发表于 2018-2-14 06:12:24 | 显示全部楼层
不会使用啊
发表于 2018-2-14 06:24:59 | 显示全部楼层
制作Linux下程序安装包——使用脚本打包bin、run等安装包% y9 ~; K+ f, d: d
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
+ }% V; F8 @9 E) g2 G——————————华丽的分割线——————————
; v9 K, O; L7 z* Q3 ?8 X! ~/ M. c run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:  S- M. y# F# t9 t1 d- h
|—————–|
3 {0 ^2 l; ~! @1 P. U- {7 k" ]8 k" f|                       |# U$ R6 }3 Q7 W. w% X
|     安装脚本      |3 I) c* M5 R  C
|                       |2 l* x- y$ U# p3 q
|—————–|
9 {2 z+ {2 s7 U! M2 E|                       |2 N! [+ e; K7 m# P8 N) d
|      程序            |
8 W8 V8 I" S' U; D& i/ u0 t|                       |
# \" L6 A( u# i+ d$ N: G7 ~2 S, B1 C|—————–|0 g# K- M- \) L
图: run安装包的结构+ y( c3 w& B8 D2 j: k( I% A% E
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。, l8 O" ?( @) f  c  e# F
制作run安装包以下举个实际的例子:. a4 ^. X3 S6 Z% z
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
4 }; Q* \6 D( g- y) ^! B2 B$ ls
$ `* U9 _: U( S2 x+ |install.sh helloworld- j/ `2 {, g( v4 M% p
$ cat install.sh* i, w- _2 L# u1 P& x" k# J
#!/bin/bash
, l0 x) P  ~, j: n/ j5 |cp helloworld /bin& o' P# f- v. i# D/ G1 @3 ^
$' \$ @$ p$ g* L$ @
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
# u+ j" h" z2 B6 ^6 b8 y4 [$ tar jcvf helloworld.tar.bz2 helloworld; W8 C9 _$ L( Q# C) f( g
现在修改一个安装脚本install.sh
" [  D; A* ^/ l( k改为:, O' D6 v$ u* n$ Q: o, m
#!/bin/bash& @( W& {4 g. z* z, Z
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
6 @. m+ p$ F5 J$ R- V7 U& `6 Ttail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。4 V, X6 E0 n$ ]3 O' P+ y
tar jxvf /tmp/hellowrold.tar.gz" A# L- `& S0 H, f
cp helloworld /bin
& ]5 I. B0 O: dexit 0
: Z! N5 x, L& q8 a然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。$ _! p+ s0 f3 G  S0 X% ~1 @8 e
$ cat install.sh helloworld.tar.bz2 > myinstall.run' [. z; P' S* P/ `( m' `9 t
这样就得到了myinstall.run文件,它的结构如下:1 F8 [7 R& D# Z% {
|——————| 第1行
' a4 p- `+ p' ~% E5 D/ K: m|                         |6 d# l- Q/ U4 j* H7 ]0 I
|    install.sh       |6 I- n$ g6 k) m8 |" f6 ^  j
|                         | 第6行
) O  T: F7 O' i$ ]|——————|7 V7 M6 @: ]- M( @3 i  x! D
|                         | 第7行
5 t2 ^. Z0 i: t3 N|helloworld.tar.bz2 |
/ p* V* `% E0 f, R|                         |
; K7 y; L$ L! V" K" ?: d6 E|——————| 结尾
  \: t# q( x, E4 i. y. M图: myinstall.run安装包的结构
& q+ l' i$ L, v$ v运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。  m8 r: Z: W5 H1 H0 ^" e
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
6 u. ~' W. h- o9 b* A1 g——————————华丽的分割线——————————
( L" P! h0 S! U% tlinux 下制作二进制 .bin  的文件" b/ r  v0 C& ]
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里" m% ~2 q! T! i
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
- E' L5 m* v' ~* n4 t+ R5 y例:制作安装apache、mysql的安装脚本包
, T: ]9 v6 F7 K0 k1.将源码包先打包
1 Y& k9 X% q$ P% U* N6 {; G#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
2 X: b, S  L: P2 l9 U0 \2.编写脚本如下:
+ x* ~8 @5 ?2 }# cat install.sh  ^& O* ^( q& I! ?. e
#!/bin/bash
( X1 Z' o0 f- S9 w; K# N+ wdir_tmp=/root/installapache% i) i4 F; @' y2 a: T; i/ O& ^
mkdir $dir_tmp# H; B& C* `1 L
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null1 D7 }; X: i8 m" [- F; z% c
cd $dir_tmp2 {" ]+ r: g9 P; z
tar zxf packages.tar.gz
+ n5 O& }8 z: |/ Z0 \- Ntar jxf httpd-2.0.63.tar.bz28 b1 Y$ p3 [5 N8 x, j- G
cd  httpd-2.0.63
9 R* {  J% ~' a2 q5 y( Y/ E3 A./configure –prefix=/tmp/apache2
- W, P0 j/ g/ Qmake
, M& @8 s7 T8 D7 i1 ?( u' qmake install
. X6 I4 \. Y6 K( Rcd $dir_tmp
; G" N$ y# r$ t  Q0 ztar zxf mysql-5.0.33.tar.gz
0 u& a# v7 k2 l, |2 o1 u$ \cd mysql-5.0.33
* C$ e* Z+ R# [; v./configure –with-charset=gbk –with-extra-charsets=binary,latin1,gb2312 –localstatedir=/home/db –with-mysqld-ldflags=-all-static -enable-assembler –with-innodb –prefix=/tmp/mysql5
: k' n; d+ q" L, }5 ?; imake% h3 E: y8 `' r, [, B
make install
3 B* F, g9 o* }) @, K' Pexit 0
3 p, Z7 m+ n" K# x/ N#cat install.sh packages.tar.gz >install.bin
3 V% r; a. A& P+ l- g, P% g1 m这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到3 o5 k+ @* j  a
最主要的是下面这句,是将二进制文件从.bin文件里分离出来) u; p+ x: p+ F  x5 \! K9 [
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null1 A6 M! c1 z# {$ n4 E5 x" n
安装的时候直接执行
/ y+ r1 g) W# L7 T5 v7 e* ]sh install.bin* H' ^( a) N) m+ O$ w
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
  `  v. J* g& ~4 R——————————华丽的分割线——————————
( h2 p" |( r+ H% z/ z. l上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。" H' a; @& P% X
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
$ `" r% F4 a( U8 N7 ohttp://megastep.org/makeself/! u8 x2 `: ~" g. k4 @# l9 T
?0 ?0

点评

请问一下华为光猫固件怎么解包打包  详情 回复 发表于 2018-5-16 20:31
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:2 I* C% n$ z! S/ k% w- c+ b5 X
——————————华丽的分割线——————————; l# S  i' W- s1 d0 }
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:6 D$ R5 w+ ^% C# a) I) r- E3 l
|—————–|( A  ]; O9 X$ R% D
|                       |" f9 a. t0 r. K
|     安装脚本      |* A, z9 x- e  ?
|                       |. w2 [* a- q( s5 T
|—————–|
$ ?( h9 z! I) Y' j  ~5 z- k1 p) P|                       |2 F5 O3 @% K" j9 m, p
|      程序            |
; @1 o( F8 J) A4 Z$ ^8 p  V|                       |( v$ X. G# y6 g3 W4 a3 r9 v6 d
|—————–|
8 X# C  T- L% e图: run安装包的结构1 C: ?& ~8 `& h* a5 |1 {. @( a
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。" k4 g! k: H0 ?: z3 K! x
制作run安装包以下举个实际的例子:5 Y4 s9 h; f0 ]. b* H
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。. |- |5 a/ ^' j9 |6 B* ]) H5 J
$ ls  D4 k! k9 j! ]# V: `
install.sh helloworld
( K3 ]7 w: R: z4 i0 t3 y, I$ cat install.sh7 O; r# {, {: i) i- F1 @; U# J
#!/bin/bash0 Q* a1 b2 Z* r5 O( ]) n: m* o; S
cp helloworld /bin( T/ j( l8 z7 m: F
$
6 ]$ t( c. w2 a4 f0 _0 f现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:$ Y$ B  m) L& }( Y' I+ P
$ tar jcvf helloworld.tar.bz2 helloworld+ k: e8 |9 Q; A8 c& ?! g5 d
现在修改一个安装脚本install.sh
7 {( H3 ]' T. r+ O% {8 Y! a# I改为:
  ^9 S$ F1 n- P#!/bin/bash
) v8 j5 G3 @3 _lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
$ x. q+ F. Z; w5 l# {- |tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。  Z/ g  x- F: i) Y; i/ ^) b
tar jxvf /tmp/hellowrold.tar.gz; \$ D  X" Y) W) Z7 f/ P" d4 u
cp helloworld /bin
( v0 N2 g$ K- }8 Dexit 0' K# [2 W/ ^2 ^
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
5 n1 R. D% @; |$ cat install.sh helloworld.tar.bz2 > myinstall.run
5 z, G* Y0 s; h这样就得到了myinstall.run文件,它的结构如下:
, J% O- h+ u; P5 `|——————| 第1行! S9 B. M. b1 u  K9 O. y
|                         |0 o3 o( W6 P) D3 `8 I
|    install.sh       |% N, s8 M  Q0 S3 V# z
|                         | 第6行/ A' s6 r7 D5 M5 T$ P
|——————|) [" }6 Q6 S5 {" `
|                         | 第7行
9 e7 Y+ M2 {. Q. R, C- X" A|helloworld.tar.bz2 |5 ?( [# m7 ]# B. q; [
|                         |4 X% j/ X7 f* L- ~. z, a
|——————| 结尾
0 Y# A& @' y# T9 @图: myinstall.run安装包的结构$ q' O6 X) G; b  A1 D
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。
2 V5 x+ {; ^6 V+ Drun安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。& ]7 u7 J- U- o5 h8 @! Z# H" L
——————————华丽的分割线——————————
# c- t! D* L  r: S% m, Xlinux 下制作二进制 .bin  的文件0 d" C0 r* h) D1 v
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里1 k  M) q' k% g9 b
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。% A4 K* h3 `0 J
例:制作安装apache、mysql的安装脚本包
. d2 W7 P, N. L  D, s* i1.将源码包先打包# {) V1 Z4 Y% J% s- N
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz, u, F2 H5 d1 V) R; j* |/ K! ~. j
2.编写脚本如下:. z1 I0 |+ k9 J) C
# cat install.sh
6 J  Y, g7 ]' F  L#!/bin/bash
3 D- w! w+ d: Y# w. ]! ~* Cdir_tmp=/root/installapache6 p9 x$ ^4 G) S4 z, }; Q
mkdir $dir_tmp: o; `4 a  M* q* P2 ^, Y  Z
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null* L; Z2 _. B" e; T& ^# k/ Q
cd $dir_tmp2 N9 @4 x+ z1 e" R) [
tar zxf packages.tar.gz
2 \# T) c1 p) L+ [! `tar jxf httpd-2.0.63.tar.bz26 x* b7 ~& c: U
cd  httpd-2.0.638 G7 Q, j* ?% l( x' A  D
./configure –prefix=/tmp/apache2! |, _/ a. ]. q. Q% N
make
% y0 z, W* u( P( [: Z) Imake install
/ S- f9 I4 e+ Z2 N6 ucd $dir_tmp
  D& u) I5 m7 k. j) t: M8 t+ }tar zxf mysql-5.0.33.tar.gz" w8 f4 ]7 B' z# C- i
cd mysql-5.0.33% Y, G) Q0 D) N* R
./configure –with-charset=gbk –with-extra-charsets=binary,latin1,gb2312 –localstatedir=/home/db –with-mysqld-ldflags=-all-static -enable-assembler –with-innodb –prefix=/tmp/mysql58 ~% O' O+ d8 }& _0 s# P
make( b; o% Y& G) c% C( Z' _
make install# O2 l- c  z1 J: I1 W7 n( d4 F
exit 0
! G6 W* f, ?: r- d$ d5 D- e% A#cat install.sh packages.tar.gz >install.bin
/ o. g: d3 K, ~  I9 E( J这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
; c/ Z$ p7 k# ?4 F7 m* d最主要的是下面这句,是将二进制文件从.bin文件里分离出来6 u8 o$ n: M: u; G6 U; e
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
7 v8 C! d7 d- C  j( f安装的时候直接执行
: L8 @( V$ o2 \0 lsh install.bin
) Y- O# L8 v6 u" _  p( h9 R安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。0 ]2 ~2 _1 j, }* {0 t) T2 L
——————————华丽的分割线——————————! P& S+ L+ E1 Z, w+ K
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。% f6 z4 a- C; w$ v
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:9 [" D" @0 A* o4 {- {
http://megastep.org/makeself/; E5 K7 E9 B$ N# Q7 t6 e& y/ ?
?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
! C5 I+ a+ a8 C" Z3 E就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-4-27 20:24 , Processed in 0.032658 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表