楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
. z% K* v$ E) j8 |/ n. a" q7 K
发表于 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等安装包' q  ^3 y+ P3 ^8 t* }0 M; y
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
: m" y7 H* e) v* m) c' y4 Z# }——————————华丽的分割线——————————
$ s- Q, N9 l3 K7 r2 Y- o8 C5 W- H run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:- l- G8 q  `( t: W7 j4 Y
|—————–|7 y4 P( l) J9 b# w$ w2 \
|                       |
  t# s9 n$ H- M6 a) p, {|     安装脚本      |
. K. M% v" @& U: P: u% n3 V|                       |* i7 {4 e3 G1 D. ?
|—————–|
  ?- u* W) X/ z; E6 J8 ||                       |& T; I; N$ V6 j' U- ?2 o  v
|      程序            |
% ]! {  M, ^) }  p|                       |  k3 q1 R9 r1 k
|—————–|
6 c# R" u6 J/ [! n% N( R% w图: run安装包的结构
5 w1 \8 Z0 l# S这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
8 s/ D8 E7 {# q* Q5 n制作run安装包以下举个实际的例子:
9 w/ W/ }0 @" J为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
1 W( g0 e- g/ o  R6 ?% g/ V# e$ ls
# s* S) N0 d+ b, |install.sh helloworld
7 U* j: R0 g* t$ cat install.sh
. `2 Q" z( ?, Q5 I6 l3 `6 h* ?4 u#!/bin/bash+ W7 m! v5 N5 k/ |/ J) n8 z' A+ c2 u8 E
cp helloworld /bin! A+ a! u7 z) l  I. x4 U
$' n& |/ I6 j( {
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:; w2 x+ V5 C* [1 J1 n
$ tar jcvf helloworld.tar.bz2 helloworld
5 H' s" c% Z9 E9 b现在修改一个安装脚本install.sh$ N( T! G: x8 n+ Y
改为:
4 |4 w1 X5 T7 X$ Z, P2 N% B#!/bin/bash
6 F( K% P& U9 U% I3 Hlines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行( Y1 i( v7 c# r7 i; z
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
  e% t6 z/ K! itar jxvf /tmp/hellowrold.tar.gz
, V4 M/ B2 E" C- E1 T; tcp helloworld /bin( t1 T$ h/ f/ Z# F  f
exit 0% c7 K% ~% o" o# L5 @- o* Y" L7 e
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。1 l7 A) z# X; |) K! p
$ cat install.sh helloworld.tar.bz2 > myinstall.run0 X2 O1 `' \) Y# [/ r, s
这样就得到了myinstall.run文件,它的结构如下:! g) ]3 B5 }+ I' F% z6 o* V/ z
|——————| 第1行" ?7 t6 g8 T4 d" d9 p# ^1 ?
|                         |! Y" ?. |" w  @+ V  |4 b7 t2 {9 `
|    install.sh       |# B& e3 r- W" c8 `' u5 W
|                         | 第6行  l! Y0 D( ]9 _' C+ ]
|——————|& C: F1 O1 j8 R% j
|                         | 第7行7 ~8 r$ q! t/ M) O8 L/ O8 Z; E
|helloworld.tar.bz2 |+ [5 t% c7 L" H7 ?0 S6 @2 C) W
|                         |4 [% i" ^* r' c) [' p6 ]& @7 B
|——————| 结尾
  W0 s) ]: H9 u7 J4 r) Q; u/ p图: myinstall.run安装包的结构
, R5 c0 y& F' u7 J8 C运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。* c2 p4 v5 g: ]  r$ C6 [& y0 R
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
& ]2 C/ {  \& b# `) ]9 X——————————华丽的分割线——————————
6 h1 z8 i$ B; z8 |% `" qlinux 下制作二进制 .bin  的文件5 S9 O% \: O- c9 D
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里% y9 G* d  h$ M3 \. V' E, {
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。- H( d9 `% ?% Q4 U
例:制作安装apache、mysql的安装脚本包
( k% Z% N. f) L8 k" J; R1.将源码包先打包. E$ ?7 M/ C/ {1 n; A4 m
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
2 i- j1 p' A8 N$ h2.编写脚本如下:# I! w5 [- j  O5 v4 R" N, n
# cat install.sh% C/ c% d& |0 ^+ e5 ^! V3 ?+ u
#!/bin/bash
- |, Z" a+ s, j* w. K% Bdir_tmp=/root/installapache$ ]' y2 R. w; e2 f0 {- E
mkdir $dir_tmp
  q2 ]+ I, e1 P) }sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null4 C) R" d! x/ r" @
cd $dir_tmp
3 e! {8 r, h- v% r( Gtar zxf packages.tar.gz
# I1 R4 X, d. t8 `$ C+ T! `tar jxf httpd-2.0.63.tar.bz2
6 J2 B: P- k4 z, H; Z4 y; Gcd  httpd-2.0.63
$ A+ W  }! @$ G5 }./configure –prefix=/tmp/apache2* s$ n$ l# `$ p
make: R, j8 Y6 h% L" J5 c/ K
make install* }3 i7 M9 ~8 a5 E% C2 i! R
cd $dir_tmp
  C, ~9 Q5 R, a% N& H" Ftar zxf mysql-5.0.33.tar.gz. J( _- e3 H; x8 \0 O5 R
cd mysql-5.0.330 @$ \& m2 S' ?
./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/ ]# L8 N3 j0 p# }. C, B
make: y8 y0 t7 f9 D! G7 G; U1 X" ~/ R. ]
make install' k5 A( R! `0 Q1 D& }' ]$ m3 [/ a
exit 0
: {6 B: I  ^- C#cat install.sh packages.tar.gz >install.bin
0 o6 ^! r& B  T. r. e* n* K这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
0 i1 G0 |- o* c+ H最主要的是下面这句,是将二进制文件从.bin文件里分离出来" N8 n4 @* Y1 w
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
3 W0 v: N$ `( A1 ?安装的时候直接执行
/ e% ~% g, C5 O7 z  i! w% o: W- q/ Gsh install.bin
' h7 u4 z0 V: p% y安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。! g8 F) Z/ }3 ]1 x  j+ H
——————————华丽的分割线——————————
9 ?6 [- y: ?; W9 b+ K1 V) E上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。8 k6 ~6 o1 _8 ?+ v( C2 i
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:+ M  r" M! p- _
http://megastep.org/makeself/
: N/ V: v" j% w4 x: M?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
) F8 S. S/ E3 L( N8 P2 ]5 }——————————华丽的分割线——————————
/ D7 k% ~* }! A$ n) G run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:4 K  f  t" `4 \' [
|—————–|
! n% f1 u; L% ~5 e" U|                       |1 a$ s/ v! H/ j  A6 Q
|     安装脚本      |$ P- }- U5 f: w* n8 v- M5 l; N
|                       |
8 X0 u; X) p( e& C1 U& I+ r|—————–|
' R5 y1 F6 Y4 ~( @4 l; Q: |: N|                       |
& f. W$ @1 J* }5 q+ ~9 Z|      程序            |
1 W" N' {" ]8 z0 e) T$ R* f+ r|                       |
3 S4 r" s5 O+ c|—————–|
0 u; G/ B6 _" ]8 P1 j图: run安装包的结构5 f% j- I9 t6 ]9 q" X1 V
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。1 u9 d. G  B" P6 J0 o' j& B- T% f2 Q
制作run安装包以下举个实际的例子:
$ d: o% r8 {$ }5 B( g+ I& Z为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。0 D1 F1 S. P% m5 @0 H
$ ls
2 T/ L3 S  r. W: C$ Z  ~) ^) z; b/ ?install.sh helloworld
* }, ]& X7 I- s* u& f5 ~  V" d$ cat install.sh
9 o/ D* Q$ m; c$ e1 q2 Z' |#!/bin/bash
% L/ J( k: u/ Z' S) F/ \" ucp helloworld /bin" _) D1 K) R. e& s/ |( j1 `) K/ p
$# ?! g( T4 t+ _( R
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:; u* K# V5 s* W9 @9 b2 e
$ tar jcvf helloworld.tar.bz2 helloworld
" n5 N4 B( R" l; d现在修改一个安装脚本install.sh9 I4 k3 ~7 X9 y" N) L' Q3 P0 o. Z
改为:
2 c, I. P# Y  v: H  |5 t#!/bin/bash
+ _3 q) j, t5 R* K6 r: b9 W) o7 U- Clines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
8 [. [! t+ O- p. A$ y9 @tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
$ C6 P+ u9 B0 X0 D! V3 Utar jxvf /tmp/hellowrold.tar.gz0 t& c' t3 [5 r; ^7 l1 H. ?
cp helloworld /bin
/ L  n, v$ Y) `/ |$ w/ U4 aexit 0
0 g. m! h& Y" l* u. F5 E. Y8 d然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。+ d9 ~/ `# `( g- L: j
$ cat install.sh helloworld.tar.bz2 > myinstall.run6 H9 \  p( |8 X& X& Z
这样就得到了myinstall.run文件,它的结构如下:- G7 l9 t) v3 s& H3 D" a
|——————| 第1行
" h- }4 @/ l) X9 u- a3 A; J|                         |+ z3 a7 l0 C' ?, g# D1 {; J
|    install.sh       |
- t$ M9 w5 u1 m4 K" W* I|                         | 第6行
0 p. y4 c7 A& I|——————|6 ~/ ^7 S# B$ [
|                         | 第7行
9 Z% E" i& s; h; [|helloworld.tar.bz2 |9 ?: s+ C& \" \9 |, `
|                         |
  Q& z, x4 a) L' P) x, s|——————| 结尾
( ^5 q0 s2 l* I# `0 {% s: z图: myinstall.run安装包的结构
+ V0 J+ J3 |$ z& s  I/ M$ ~# m运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。+ {" |6 L! v  N0 W  c
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。7 t# z2 h; O" [/ s, x
——————————华丽的分割线——————————& H' ~3 z! q+ s9 F5 D2 o- a% I
linux 下制作二进制 .bin  的文件
1 |3 z. n* }2 e; X" b' n制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
& O: b7 b* o3 l2 ~$ j( p8 c  B8 \这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。' Z2 J3 [+ J. u
例:制作安装apache、mysql的安装脚本包4 x0 V( g1 e7 F
1.将源码包先打包' L, a4 ]% f! u& }: \* v2 X  r- L
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz  z7 R+ |- M- d0 A0 d. c7 e% S0 M
2.编写脚本如下:  M; s5 X0 K! h' t7 b7 v5 Q
# cat install.sh- D4 n" s4 d8 ]" c0 Y
#!/bin/bash: S" @' k1 s; F% G
dir_tmp=/root/installapache+ t" |% Q, ?. F: `, o: \
mkdir $dir_tmp
' H' c% I; E- Rsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
& U! h: \) X5 Q. P) R8 gcd $dir_tmp
$ E3 y. x* x, @0 M& G/ y! _tar zxf packages.tar.gz
1 \+ v0 r4 }$ ztar jxf httpd-2.0.63.tar.bz2: m3 J. I4 A; @4 A# T4 p
cd  httpd-2.0.63& j3 y% g. c6 S0 Q
./configure –prefix=/tmp/apache2
3 Y9 C# m. e; U0 C8 u+ X1 S  \( U& imake
0 w# T' ~  X" ~; b3 r* S; mmake install
/ ?4 G8 F  K, K: {; Gcd $dir_tmp+ A+ A9 b7 {% ?, h5 Y
tar zxf mysql-5.0.33.tar.gz1 l, g. y( P4 ~* s$ q! @* F
cd mysql-5.0.338 d% B  E- n) u
./configure –with-charset=gbk –with-extra-charsets=binary,latin1,gb2312 –localstatedir=/home/db –with-mysqld-ldflags=-all-static -enable-assembler –with-innodb –prefix=/tmp/mysql51 v! D0 n# N  N& k6 @' F
make
- k4 m; O* g- ~" M/ f; B% Umake install
( y4 H) `& s' [% j) Aexit 0
4 S& S4 b& y3 t  W% S1 |8 N#cat install.sh packages.tar.gz >install.bin  N( L. v; D7 z" [
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到6 W  Z3 [1 l$ P$ ]
最主要的是下面这句,是将二进制文件从.bin文件里分离出来4 m9 K* Y- i4 z7 g& h
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
, p$ p" D0 [3 q! L安装的时候直接执行
' _0 Z" h6 V! _  `: w, Fsh install.bin+ }. [/ w5 G( B' R( y, R! I6 d2 _
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。  C4 R% \# L3 ~2 Q+ \2 w- @
——————————华丽的分割线——————————
1 G9 i9 q0 E6 V1 v6 P上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。; T  T4 f* m" G/ m' E
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
5 S% l6 L6 j' t  E8 n& x4 z$ Nhttp://megastep.org/makeself/! A7 D/ \- e3 }. h7 c5 u
?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
2 _" G. l5 ?$ w就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

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

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