楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 |甘肃| 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
# |' @- z1 s4 T! {0 y
发表于 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等安装包2 [. P) X+ T' ?) e
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:/ T2 N: C6 p9 m, N
——————————华丽的分割线——————————4 u* Y9 [, w: m# |8 Z9 p: \7 Y
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:+ K. ]5 J, y. |
|—————–|
1 ~# z7 Z; U1 S, J4 M3 W1 @|                       |
5 H+ z, i( ~0 f! i|     安装脚本      |
1 \& c% s; S5 V4 O, Q0 k, B* r' y|                       |6 z1 m; H* \& q: P6 f2 P
|—————–|0 _  V" ]; d8 z3 W! @8 C1 Q6 j
|                       |
0 J3 n+ G  q" |% d8 K|      程序            |
8 p, r, O/ g/ Z. {, t4 ]|                       |) o; P. t$ b: c/ i/ w. b9 \
|—————–|  P6 v( b. v1 n4 p( H+ w
图: run安装包的结构/ s! a4 |; q4 x: C' R8 z
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。3 J1 E8 ]3 X% [6 m
制作run安装包以下举个实际的例子:
1 m" E' u, u0 p# R为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
7 Q, K; L2 ?, j1 x) b$ ls  ~  k, ~8 D8 P* Y- b
install.sh helloworld
+ H$ M9 _$ k- M4 b+ \$ cat install.sh1 I6 _0 s2 U. H2 }
#!/bin/bash3 K( ?1 I/ p! ]( b2 t0 r2 G7 P6 g
cp helloworld /bin
2 G% u0 f$ r4 S& \5 a* Z& T$
' D8 E. }/ b' @8 r) O3 h现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
3 D# p' V1 l# L5 ~6 `$ tar jcvf helloworld.tar.bz2 helloworld
/ ~# k( R4 a! x1 r1 W现在修改一个安装脚本install.sh. }. ^" e+ Q- p9 R
改为:7 R4 N" ~; O' c
#!/bin/bash
4 u6 o& }' x$ }8 W7 B; k+ Alines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
# x- a5 c3 d, ?1 f2 \tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
! H. l( m4 u; L) k, `tar jxvf /tmp/hellowrold.tar.gz# A" C4 L" @+ P$ _$ Z( ~
cp helloworld /bin
& s" U' A1 d( r" u9 M! n0 ?+ w4 Sexit 0
9 r7 R3 C% I6 i6 k& L( b! t5 {然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
) G" ]  z: r' ]/ H$ cat install.sh helloworld.tar.bz2 > myinstall.run
* x% |+ [, \) }这样就得到了myinstall.run文件,它的结构如下:
' x( _8 [8 |" g6 j& V: V|——————| 第1行
; u9 o0 C) p' F|                         |) j. J8 D' h: u7 y: P0 i/ i" o3 h
|    install.sh       |1 v6 R$ x/ r* O# I
|                         | 第6行
5 e3 Q* L  k# ]7 R|——————|! l$ q4 B# r; A9 D1 T
|                         | 第7行
% ^3 a" X8 r7 H0 ?: F1 T1 U- k|helloworld.tar.bz2 |
% [3 `8 o9 z- k5 H|                         |5 G; u& U3 x5 W4 B) R% }7 }
|——————| 结尾- V' t5 D+ ]4 [' T
图: myinstall.run安装包的结构
" f+ t) C3 r; t* m$ a运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。( L- g1 j% o6 o7 _( t; {8 h: m6 C' ]
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。2 m; i! o) U( z7 a# z1 q% T
——————————华丽的分割线——————————3 F, g7 `& f: O' f
linux 下制作二进制 .bin  的文件; z$ }) A! t9 X; l4 @. p4 D
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
1 v- d* w; Q0 ^9 a7 f这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。8 Q$ m. d2 P$ R$ o# S3 s1 g/ Z6 w
例:制作安装apache、mysql的安装脚本包. ]; J5 L& [$ I- X* n7 U/ B
1.将源码包先打包
( [+ t, y) r8 g* J- g6 I#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz8 x! V( r' c7 Y- ~
2.编写脚本如下:( S; B3 y8 s% w6 F: k2 O" |$ c, q: [
# cat install.sh
% z6 E0 I7 p. o#!/bin/bash0 M) r! V& y( D8 e& K5 `- n
dir_tmp=/root/installapache
( b* \. S8 i+ u$ D0 Q6 Gmkdir $dir_tmp3 i: F" w5 J! w9 q5 }9 t
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
3 g$ e0 s# X/ }- s# tcd $dir_tmp/ p5 ~7 B; {: }) t4 B+ M
tar zxf packages.tar.gz7 T+ s' r4 E2 N) f4 d8 B6 L
tar jxf httpd-2.0.63.tar.bz2- u* H& a5 Z' a* @
cd  httpd-2.0.63
# E2 V; [( @7 v2 v# a( N4 S./configure –prefix=/tmp/apache2: x/ f" P5 [. y" K' w  u" r
make
' |! l. v. x5 T8 X6 \) Q1 Mmake install
9 A& G; s* R8 g; j; Zcd $dir_tmp3 i. L. d. M8 t+ O- A2 O8 u
tar zxf mysql-5.0.33.tar.gz
, h0 y& i3 Y+ C+ D- Fcd mysql-5.0.33$ j. X- a$ ~  g( n& P% T
./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
* r% X& \  i; H8 s/ j" t; ?make
. `& j, d& F9 n+ F9 Nmake install+ i2 k1 Z2 b, M0 W
exit 0
5 K5 U, G" d5 r#cat install.sh packages.tar.gz >install.bin
$ V- R, }8 }, O; i5 B( V这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到9 N! T2 v6 |% ]* ?) Y
最主要的是下面这句,是将二进制文件从.bin文件里分离出来$ c  }% `3 t8 l1 g. o) K5 x) ~
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null8 X$ e1 I7 ^  g/ q) j
安装的时候直接执行
4 }1 g- j$ E2 Ush install.bin/ V; O2 Z7 y' D2 {! v
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
; _! e  a1 D! C* q5 U——————————华丽的分割线——————————0 ~' Z9 {( [  n% w% d
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。! d/ Y! N1 E: C/ S4 n: d4 E3 Y
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:* O9 }; a, |9 a' |! [' F8 L
http://megastep.org/makeself/
  A0 X: f* `# S$ i* w9 C3 s?0 ?0
发表于 2018-2-14 06:26:23 |中国| 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
! E& G) y" D! ^0 ^1 B& @. O8 T; r——————————华丽的分割线——————————4 |1 V  F7 q* @' l  l0 Y" w
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:9 i% N$ x' f9 m% _' V* m; Y
|—————–|
# M. R6 I# b3 N, h4 B' \|                       |& U: k: I6 ^. u: u% E
|     安装脚本      |* c& D  Q6 S3 W8 ]
|                       |
# K! c3 f3 P8 p! y|—————–|
, x: Y! z; i9 y|                       |
$ Y, y* x) e  n- u! s9 z|      程序            |
7 o' k1 W2 G+ o! l+ ?|                       |" C6 E# g% z! d7 w
|—————–|6 y) {+ q* r- a! ^5 M4 a2 }
图: run安装包的结构
. f0 m6 u& V# a, `" G; S这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
% P; b8 n' P( d: z6 G0 O/ B' @+ r3 m制作run安装包以下举个实际的例子:) I- j: _  g5 n. [+ s* R2 E- u8 C8 q
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。7 N1 ~9 I! j, B% |9 C% s. i6 \
$ ls
# {% O2 b/ N' k4 i$ e% oinstall.sh helloworld. P2 }% ?* T) ^: G
$ cat install.sh# O0 t6 K, P( S, F3 w$ s$ k
#!/bin/bash. M2 e5 a: [3 ?
cp helloworld /bin' ~3 K2 d5 N8 w* k/ z
$
4 c% o6 s3 p4 B. V& `3 M现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
6 S$ u, Q- N. G$ tar jcvf helloworld.tar.bz2 helloworld
6 A9 E) F# A) s& q6 V" ?$ T, a现在修改一个安装脚本install.sh
, z4 `: O! V# a) u0 t: q; j0 R改为:( d7 H4 |! U  \6 n
#!/bin/bash
9 n, w& j+ j6 f6 `% \lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
. x% [( H& @& _8 [' k7 W8 K+ F$ Gtail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
1 x% P" v3 u- Mtar jxvf /tmp/hellowrold.tar.gz: I+ _5 E6 W. B6 v9 `& a
cp helloworld /bin
0 G( d( ^& N7 r& i% i6 D9 u9 C4 rexit 0
; X% j3 Z5 h% m+ k然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
7 J# M% i4 p2 E' i: u* _& e$ cat install.sh helloworld.tar.bz2 > myinstall.run4 B: D* Z; p) U+ v$ S% j
这样就得到了myinstall.run文件,它的结构如下:9 C1 r( [+ y# X1 z( [
|——————| 第1行
" K* p: e& p0 c|                         |8 n# T+ F+ G* w9 `  f- w3 h& c* u
|    install.sh       |
, v' ^" }8 E: Q; k& n7 x|                         | 第6行
  e( N& ?. M0 z% ]/ q( i|——————|9 W! N1 K) {( N9 P) {- g, J
|                         | 第7行! E7 @! a4 Q# Z6 |
|helloworld.tar.bz2 |# l/ v1 D; D% d' X4 N
|                         |
# ~' o+ L. A. b/ F. `4 i6 `; O|——————| 结尾
( K" c# ~1 O% Q! n图: myinstall.run安装包的结构
# p3 w# i6 ^. i' j1 M/ t! s  i运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。; R1 q2 G' i* }  H2 {' p( q
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
  `- _3 R5 @1 M9 }+ S——————————华丽的分割线——————————. n5 |9 @9 B+ n7 [; F
linux 下制作二进制 .bin  的文件
0 L0 l  j; U1 i- W2 b+ Y8 p制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里+ V" r; ]( P# x+ W
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
# Z* K* t: I" E7 o; m7 L例:制作安装apache、mysql的安装脚本包; x3 D9 V: t* J% i
1.将源码包先打包# P$ t6 ]; i' @# S  j; J
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz6 ~; @6 p% a( z! |/ W
2.编写脚本如下:
1 z0 S( B% \$ {7 f$ K# cat install.sh" g) U' o6 \9 u' s$ e: ~7 ~
#!/bin/bash
/ i8 S8 N# m2 w1 T2 }" Z7 Tdir_tmp=/root/installapache* _9 B1 F0 H1 y% x" j4 i* D0 n
mkdir $dir_tmp$ b! p0 W( o. J+ y0 G8 `; v! \
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
0 `' S, G+ E, D5 E1 ccd $dir_tmp
& X/ ?4 z, ?$ X' x/ ktar zxf packages.tar.gz% |; Z- U& I+ P: T6 M: a/ d
tar jxf httpd-2.0.63.tar.bz2- S  f- z) i2 O7 {' F2 {
cd  httpd-2.0.636 z1 G/ @6 W& r3 J9 g
./configure –prefix=/tmp/apache2! l" T* L0 f# P0 n$ v7 o
make/ q' J! y% f9 e$ @
make install3 N# }! o: Z6 T  G1 O4 n% l; _
cd $dir_tmp
9 U. e" z& p1 v% {7 G4 Ytar zxf mysql-5.0.33.tar.gz
, `% c: N+ _2 F9 W$ N+ z8 ?cd mysql-5.0.33) l( T; _) _( r  r( C# b# I: f
./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& I" h' F+ i) F; W0 ?' I
make
) K0 U- M8 Z& D3 g! ]make install( z* E* b, G( k2 n
exit 0- s& C2 M( ?4 m; d* q* u
#cat install.sh packages.tar.gz >install.bin
, d; a8 d3 N2 H/ W: M0 @这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到: S  ]4 h! f6 a% s
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
& E8 C; v& J, j7 Xsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
$ T7 }* G+ Z. @. U, e安装的时候直接执行/ B2 y! {/ i9 n9 g/ \! Z, P# o% p
sh install.bin9 l5 s0 h& i  N* P: g- g
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。, p& v& V7 n8 d2 ~8 r( N
——————————华丽的分割线——————————
8 R) t) S, J) X8 G0 P. [4 ^; s- D上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
1 A- j6 n/ V7 T! X0 t另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
( c- v/ a' y1 U) c6 Ihttp://megastep.org/makeself// c) h0 T" \7 y7 l
?0 ?0
发表于 2018-2-19 22:23:36 |中国| 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 |印度| 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 |辽宁| 显示全部楼层
就是贵呀
; q! [0 E, Z( H" [3 W0 G2 J' l3 S! A$ ~就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 |山西| 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

相关侵权、举报、投诉及建议等,请发 E-mail:yesdong@qq.com

Powered by Discuz! X5.0 Licensed © 2001-2026 Discuz! Team.44152102000001

在本版发帖返回顶部