楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮" D) \$ U! c) |# Q/ w
发表于 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等安装包
+ }9 {0 ~' j' C) Z$ B制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
& S5 y+ J- D! y5 S——————————华丽的分割线——————————
9 B3 O! P0 o' g; ~* d0 y) \* ? run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
+ B: l' U* M# ^, O+ }|—————–|3 @, r8 s9 `: V3 ]$ B) M
|                       |
0 S1 O# b# ^/ w5 d* H9 x|     安装脚本      |
, e% c5 Q+ u  H) A! s* V, d/ @|                       |
$ d- m) _3 C  V0 ^; ^0 @& r8 T% L3 C; {|—————–|) X% z& b& \# i% T: N
|                       |6 G9 |  ~* g1 a/ `7 E& _( Z3 i1 K/ c
|      程序            |
$ U/ t) P) R& W/ o" z|                       |4 `" x: `6 h- X/ s
|—————–|
% O, c1 Y5 X9 J8 T5 [图: run安装包的结构( U* n( j3 P* ^( t1 l3 s
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。4 s+ ?* _' P( I: y
制作run安装包以下举个实际的例子:
5 p; u. ]6 C# C# l! m1 C% `为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。0 Q" n8 `+ S) c6 V
$ ls
5 b8 G: l- x# `6 \install.sh helloworld* Y8 m0 N# d! ]
$ cat install.sh' B2 B4 F3 \3 |$ y6 b
#!/bin/bash
/ h. X+ }/ @3 R* ~cp helloworld /bin' f8 ~- u. H1 |& a5 ~: n& M
$0 A: v4 n$ C1 G& k0 B0 ?3 W: r
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
' i# d9 ?6 L; Z, I, z$ tar jcvf helloworld.tar.bz2 helloworld. V+ h% G6 W, |! I$ R
现在修改一个安装脚本install.sh
' U( R9 z/ f6 b+ Q6 u改为:+ N! Q+ s5 L, F) S9 Q! f
#!/bin/bash% `6 N1 S+ r! v
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行4 s' R8 o4 J5 C
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。9 r& W# S0 k+ Q  W
tar jxvf /tmp/hellowrold.tar.gz
- @( Z3 M1 i: p  ccp helloworld /bin' H' F- i7 }2 r
exit 0
2 ?! W8 Z& d- {然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
/ M: t5 g1 f4 f" L( {$ cat install.sh helloworld.tar.bz2 > myinstall.run' R6 t, ?/ c3 x) C6 N: n- s
这样就得到了myinstall.run文件,它的结构如下:3 o) _' Y0 p6 j6 a+ ]3 F- a, N+ n
|——————| 第1行! v. b- o9 T3 m, l1 x/ H8 r5 z/ }, }
|                         |
7 t! c$ n8 d, S# u1 s" @  r|    install.sh       |
  }$ n6 o& U: J|                         | 第6行) {- W: o9 F! o( I9 W  R' n& r
|——————|
! o4 ^( e  X/ r|                         | 第7行
. V, y+ O- O7 w& g& Y|helloworld.tar.bz2 |% g  b$ j9 M+ B0 A
|                         |
8 S5 U$ V4 t* h# z# q5 F3 X( u+ f; ~6 r|——————| 结尾
5 C' k, n: Q6 K9 d图: myinstall.run安装包的结构7 N0 n" a% U2 R2 I& P3 C* D$ [9 f
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。
1 }4 v! J* @- K3 yrun安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。# C+ \5 P; X/ ]
——————————华丽的分割线——————————' f* i  V9 m/ R8 J! N" P7 b  p
linux 下制作二进制 .bin  的文件! Y' g& X& S$ w0 }8 B: l
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
% g! {2 S2 U0 @4 V$ _1 S/ ]- o这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。- l- `- o( j& p
例:制作安装apache、mysql的安装脚本包3 x$ [4 a8 b" o+ k
1.将源码包先打包
5 M* S* v' ^$ }  k; a#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
# O7 Z" D/ Q* A. F, ~, [/ o2.编写脚本如下:
' T- V/ E" X9 d; g# cat install.sh
: b' j& E2 N& M; C4 B7 v5 n6 \#!/bin/bash: _, S: a% O0 E7 ~
dir_tmp=/root/installapache" r; f* o( }5 t$ @% {- F
mkdir $dir_tmp. [1 s$ i8 G6 B  q1 Y+ J* [/ K0 j
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null  g: J- i9 [1 E
cd $dir_tmp2 @" ^6 P! M4 p9 C6 s; F/ T& r
tar zxf packages.tar.gz( y; f) a1 g( ~4 O: `8 G
tar jxf httpd-2.0.63.tar.bz25 k4 ]  e2 k0 J+ h: ?% p" O
cd  httpd-2.0.63  w( ?1 a5 Z: C
./configure –prefix=/tmp/apache2* @3 v4 D6 @; B. Z& M" u8 m+ W
make
, E: P( `% Z: }5 B. ^make install
% d5 ?1 U% d3 Z/ T$ e$ _4 ncd $dir_tmp
0 d4 ]7 |: T$ _tar zxf mysql-5.0.33.tar.gz
5 O4 B7 n) t5 t3 D' ?( Y; \cd mysql-5.0.33
1 ~7 p! L& p6 N. I" @9 A: y./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
! x: A3 S  L# o% i: m' kmake( i+ ~1 X# n  ^* \
make install' c$ `2 Q. u+ O
exit 09 Q2 m9 g, T  ?7 ?* E
#cat install.sh packages.tar.gz >install.bin) ^5 Y" T# f% o9 H& [
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到( C' H3 {) m1 y& ^4 P2 ^
最主要的是下面这句,是将二进制文件从.bin文件里分离出来5 o$ G8 Z1 P8 Y4 _* H, S
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null/ ^% r3 b; v1 z: l4 b( ~# J! k, j4 R
安装的时候直接执行8 W5 U! g- e* X: B1 ]6 @
sh install.bin4 |! A; }( j4 G9 A7 m( D
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。1 t2 e: N8 X: I" g* ~
——————————华丽的分割线——————————
; S7 S+ n. j6 W上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。2 n6 r) \1 e$ X( D* A, V  y
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
4 m" p* x! c3 J( i) t" ]http://megastep.org/makeself/
* Y# D! o& T+ _+ V7 a?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
' {! T3 [! q; g5 V( l; H# [——————————华丽的分割线——————————
6 ]* S$ h6 B8 U7 C run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
: `- |( I8 M' _|—————–|7 t: @( H4 j- N. Q. H4 I
|                       |
" p1 @3 f7 i1 v9 E0 f" f|     安装脚本      |
2 u! z/ [3 h- U3 {, \|                       |' a) O5 G( N8 A$ b8 }4 K
|—————–|* ~0 a5 a% ]  d+ H
|                       |, l' a* M, o6 L7 T
|      程序            |2 c( S+ [* |" K: q
|                       |# y: k$ A2 x& w- f
|—————–|
7 M8 D8 T" Z% j. U  g7 ~, [图: run安装包的结构. T# C- G9 `  G" S
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。; x9 Y. ^6 F+ p
制作run安装包以下举个实际的例子:# O9 l5 A6 Q) x, j) W  I! k$ \
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
, p6 F4 I4 q8 u0 G4 r7 k* ?* ~1 [+ Z$ ls% G# s- }; z2 N* D/ v$ O
install.sh helloworld
$ B$ I) u0 O' \$ cat install.sh. r4 K! Z. q' [
#!/bin/bash6 H$ W7 ~. o4 o6 c- i; D7 p( O2 ~
cp helloworld /bin
+ ]" d( Q, i7 P4 b8 I) ~/ {; E$8 G) V1 z" U4 z' _5 @  E0 ?
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
5 ]& c  P% X4 a: L: g7 C) }5 ]' z/ D$ tar jcvf helloworld.tar.bz2 helloworld/ P  A) E+ e( ~& `, n
现在修改一个安装脚本install.sh
) S: i0 B; E( Z7 B0 H# o$ W& b改为:  O0 o% s3 o: I% `7 h0 Z# z/ f
#!/bin/bash- i& ]" ~, b. F) `2 o6 y
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行+ O/ G( W, v) W1 ]9 K6 }/ Z
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
* @' o' h0 `7 B2 l% b* r! D. [tar jxvf /tmp/hellowrold.tar.gz
, O! q: w3 e0 _  [3 Vcp helloworld /bin
$ A7 ~& N, W" A' q; g, v* T+ C3 Jexit 0
  l) F( @- o' F# T) \然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。2 P' I; ]6 r# `, }( t
$ cat install.sh helloworld.tar.bz2 > myinstall.run
7 v* O4 U+ g0 S9 @- m: ^5 S4 J+ c这样就得到了myinstall.run文件,它的结构如下:
6 Z: W/ T, H  r$ v|——————| 第1行
0 \8 {+ K# `# D. H& o, T|                         |
& a& z# l8 z8 k& G( |( @! p|    install.sh       |$ \* f) f6 L1 q4 D
|                         | 第6行! O0 N* X2 a. z3 v7 W) s# t" E& o
|——————|
1 ~7 U5 c, H- m  N# H|                         | 第7行6 I, W' l/ I* [5 S/ J0 u- k+ X/ q
|helloworld.tar.bz2 |+ W4 G; i- W  R* c* M
|                         |5 O; A! R5 }6 E) W: W( K
|——————| 结尾( Q3 W4 d8 B8 J7 {. p( ^
图: myinstall.run安装包的结构
, m# q  B  a  g运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。' e  D8 i* ]% z3 X4 V
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。# ?' n7 s& N5 n7 b
——————————华丽的分割线——————————4 Y' H- x* K8 H' n. K. z
linux 下制作二进制 .bin  的文件( V( i( |, Q/ J- u
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
+ }" A1 m* [6 n, ]1 u9 w这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。. k: J7 l, e0 O
例:制作安装apache、mysql的安装脚本包
* t/ D; C, i7 W, u- n3 r1.将源码包先打包! l: J2 t8 T0 C/ L' y% t/ G
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
# }( Y  O# g6 K8 s' a2.编写脚本如下:
& k  ?0 R3 \" W5 f4 N# cat install.sh/ d: ~* O" A% z4 Z6 f" E
#!/bin/bash5 d+ Z' V) ]2 _
dir_tmp=/root/installapache2 E# K$ L$ ?9 t2 H
mkdir $dir_tmp
. O: t! D3 g8 X/ z( ~1 W: Y/ psed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
8 O% H/ T9 A/ i6 ]' Q# [cd $dir_tmp
- P7 n4 S: U5 ~- ?4 P" b( Ltar zxf packages.tar.gz
6 K0 M; U1 K" b6 A1 j9 {) Mtar jxf httpd-2.0.63.tar.bz2- s3 ?; O, T+ I! a* f+ B# _( x
cd  httpd-2.0.63: D( i, V6 k  i# G" H
./configure –prefix=/tmp/apache20 O  r8 X1 r6 u% G& F! g
make8 F+ j) P+ e. \7 @
make install/ p9 G! T+ n3 F$ N' a6 [+ o
cd $dir_tmp9 _" i: M& x6 Y: G. Y2 e' U
tar zxf mysql-5.0.33.tar.gz
$ s) j) ^* R- S" X, U* W% E  }" C$ Jcd mysql-5.0.33* n  A4 ?- V0 }1 H6 L3 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/mysql5
6 p) M0 t  S( A; M0 Xmake$ X& ]5 _8 ]! p% x$ s$ p: \5 F
make install
. Y- z& h3 K1 x6 e0 a( gexit 0$ E4 k; l3 K% G( V& z( C$ j
#cat install.sh packages.tar.gz >install.bin2 I- [5 e' ~1 F% D3 f9 x" r. B
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
% `1 l3 l! K4 l" h/ u最主要的是下面这句,是将二进制文件从.bin文件里分离出来! u8 k. W) @# L  k. M/ h) Z
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null1 N; `8 P1 f  L& U: E: P& ]
安装的时候直接执行
- c+ V" T% ?5 Fsh install.bin
& n% Z( Y) |& l安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。! I  M  ]' ^6 t7 H- l! c
——————————华丽的分割线——————————
' S& a; V0 ?  ?0 z上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
/ I% p. v/ s7 i' Z+ S4 G$ {8 r" m另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
: a  H  y; D% D) bhttp://megastep.org/makeself/
7 F' r" V1 D7 I: F0 ]7 e# h" G?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
  n4 E+ j; ~' X2 H( W" \) U就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

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

在本版发帖QQ客服返回顶部