楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
  j  S4 N$ U3 ^. U& G3 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等安装包
  C% L& c2 k* x* F制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:+ ?& k( {+ V" C7 n/ N
——————————华丽的分割线——————————
$ Q  n2 y& A4 B2 T run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
* s, Z3 S; U. Q7 x5 v- k|—————–|3 O7 J8 |" ^* |6 _5 _8 ]% o
|                       |. W1 v2 U5 u7 C' E" v: F
|     安装脚本      |) \' V. D$ {" M2 _  W
|                       |0 \8 ?  t9 }5 K' m. v+ T6 F! M
|—————–|  \8 O2 T$ t7 L% Z% V
|                       |$ \& a5 s& U& Q3 u
|      程序            |* e; `4 ~% N- Y
|                       |: u% I* X6 N# i% n* _
|—————–|  O4 ?$ G) l' G$ {/ q9 y8 o: F
图: run安装包的结构; i/ V+ r% E' Q
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
" X: R' C( o) J7 i2 Z6 @$ f制作run安装包以下举个实际的例子:* L# L  c0 ?4 F  h0 z9 a
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。3 y; G- H5 _+ g3 V: u5 ^
$ ls
' |# y: `$ g. O) M8 iinstall.sh helloworld1 O- ?2 k  c8 `7 u' ^& Q
$ cat install.sh
3 R' Z. W4 l( T  I#!/bin/bash( o) I8 i5 Y9 ?$ t- m, q
cp helloworld /bin, q8 w! h+ Y- G7 L3 b( W0 H
$
" Z+ D' G' B) D0 p( e2 ?) f现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:3 B8 q/ E2 C2 ]# v
$ tar jcvf helloworld.tar.bz2 helloworld) x. d$ _; h5 w( j
现在修改一个安装脚本install.sh6 _9 q+ D/ f9 }- `
改为:
. g+ W5 y+ R: t. ~#!/bin/bash
' y6 h0 j- E* ^" ?) j8 x1 r+ Alines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
) p5 A, ]+ e0 ]% P- m' S& ?4 a4 ctail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。5 V" u8 `5 w: i
tar jxvf /tmp/hellowrold.tar.gz* J/ N6 I& T1 T8 A( n1 C6 ~. W
cp helloworld /bin
, g1 O2 \% r9 j7 e. _exit 0' ]9 k5 ]/ x0 W! H
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
/ X  ]- q! t0 Y' k6 K) C! R$ cat install.sh helloworld.tar.bz2 > myinstall.run
/ \% W8 v( M% d" f/ j这样就得到了myinstall.run文件,它的结构如下:
* O$ @) @# t( t|——————| 第1行; `, d- R* v% H  q( `' I
|                         |
2 F9 a, h& I+ t# B' c+ z& w) r: D4 B|    install.sh       |
* d2 w( X! X  y|                         | 第6行  Z; c# v& G- {4 Y/ \0 g6 [
|——————|, U& W, V+ K3 X8 J4 ~1 ?" X! j
|                         | 第7行# z9 |. C  N, @. r/ Z2 m, d% v3 x
|helloworld.tar.bz2 |, x2 G1 e# H* F5 N& p
|                         |
2 c, B' L8 a0 F) z2 g9 I" B' S|——————| 结尾
7 Z: y0 _3 C, z7 r& k$ z8 ?' Q图: myinstall.run安装包的结构
# D9 j' V7 d( k0 y/ h运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。$ J, G: T( j- h, E' o9 E- Y4 L
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
) s# O' }4 i& ~2 r; U——————————华丽的分割线——————————" T3 \) g  b9 Y0 u; t" Y
linux 下制作二进制 .bin  的文件
7 P- i# a: i6 w9 |# j制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里6 x! Y3 u9 j5 \. N& n0 k9 H
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。. o# p* O) U3 W$ C0 e8 v
例:制作安装apache、mysql的安装脚本包/ Y7 p; C( M: k( V
1.将源码包先打包  t1 y. z/ Z: N. ^+ C4 D/ j+ y( j
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
& z% B6 \$ r) s+ y( ?2.编写脚本如下:
7 e- }1 Y$ u; x3 t# cat install.sh% [6 ^3 F  A0 }& r
#!/bin/bash4 b! y) I3 E* c6 i& {/ F- ]
dir_tmp=/root/installapache
- \  q, Z3 R5 e3 j  g$ v0 Q# _mkdir $dir_tmp3 x0 t+ |$ r: _' T& y1 O4 v
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null$ n& J2 |9 S7 o# A- x- X
cd $dir_tmp
5 k; k+ x8 L$ N9 |+ \$ i+ j1 m. U+ Htar zxf packages.tar.gz
1 A9 q' n' _5 L2 u0 c  Gtar jxf httpd-2.0.63.tar.bz2
) `8 Q# T. ~2 F4 l) E! Lcd  httpd-2.0.63- Z! H* J6 i  D6 W. S
./configure –prefix=/tmp/apache21 N3 d: S" p$ M1 L5 E* ~' E" ?
make
% N) m1 S' H$ J' c% d0 r1 ^; b% Hmake install8 Q" B6 X3 l5 a- J/ ]4 Z
cd $dir_tmp/ s4 p* m3 q) g% w+ m' h
tar zxf mysql-5.0.33.tar.gz
, R/ R+ h3 ~7 x# jcd mysql-5.0.33
+ M. S% @* k& Y2 K3 b3 I; A0 x9 K./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& T) `& R4 ?/ @; b% n" M' }- L
make; r0 Z/ \4 ?8 r
make install
5 a5 p- h0 M# ~) {) f8 v4 S) Uexit 0
# u  Y, _& i+ X5 A- x#cat install.sh packages.tar.gz >install.bin
% r! b. a. ]: {9 X0 Z( O$ m这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到; A% B0 `8 c7 N- H$ V! H
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
7 H9 e/ F: `' q9 `8 @sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null" ]* `: l% G, N" W  H0 {
安装的时候直接执行2 y9 L+ |+ y+ i
sh install.bin
  ^0 a0 a1 t( o0 q. k安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。+ u( u$ d& n' {% O2 E3 E9 j; ~1 R8 x
——————————华丽的分割线——————————# u0 l) [0 J5 i1 [5 @3 A
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。$ ?6 e  X; w$ s% F# h; J. |
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:( J8 W' U0 r5 l& @* g
http://megastep.org/makeself/0 f3 o& I, P- i$ F
?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
, [8 l  [$ Z9 }) ]1 _) I, n——————————华丽的分割线——————————
' z% K+ \7 \3 Y run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:- ~1 c& y7 ?1 H6 ~' {2 I
|—————–|
% l8 e7 a, X) }! E# d|                       |  ?, i% a8 E) c  [: A7 i
|     安装脚本      |, o! Q  y$ r' C$ A9 t) Q
|                       |4 o( f4 q" f- m' W: [. B8 M/ S$ X# \
|—————–|
) S' C+ O$ J# }5 }; o' Q. P|                       |; [- a1 A2 A* `+ z
|      程序            |
  j6 j" [; a9 r+ ~|                       |
0 S. S. \) u" T% `  Y|—————–|2 t( i, f) [* U: o2 }5 w% x# M
图: run安装包的结构
6 I7 U9 m+ l" x, D% W5 |这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
* v4 [; Z4 x; C制作run安装包以下举个实际的例子:
6 @& Z' Z6 ~1 v: l为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
* E& A4 V, y  j7 p- `: {' T5 z: [' {$ ls
4 ^- q/ c; g" Y) L5 u7 z4 K. finstall.sh helloworld
, M( V" n7 x& U- G, Q' w$ cat install.sh3 m' Q# S  v7 x: `9 \% I1 h
#!/bin/bash& o3 J- V/ N+ t0 T* O
cp helloworld /bin
. p7 A- L7 C; U+ r- q$
  G. }; ]) Z# b* j% W; E; X9 \+ b. a现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:8 b5 d0 g: u9 Z5 w
$ tar jcvf helloworld.tar.bz2 helloworld% ]# [$ `( z/ {
现在修改一个安装脚本install.sh
# }! L+ H( R! M2 _3 I改为:1 p  E- |; [. o# z, K- v( W
#!/bin/bash
2 l# a2 U7 p' {) zlines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
/ B2 z0 ^  {6 c9 S% s% n+ p' Wtail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
1 d) Q4 ^- C8 j" T# S5 j6 Ntar jxvf /tmp/hellowrold.tar.gz! R. e+ ]% j! h6 B6 r( W
cp helloworld /bin
  C' m1 a  \; v3 {. |exit 0
5 g+ \2 Q. s+ v3 Q! L# j然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
. k  U4 \9 B( B4 d. C; `9 E+ Z' c$ cat install.sh helloworld.tar.bz2 > myinstall.run
0 _; n1 c+ J( Y( H8 h9 P这样就得到了myinstall.run文件,它的结构如下:
/ S# X+ ^1 t3 E8 P. d: H|——————| 第1行: f, j7 l" z( y
|                         |: }% Q+ T( V9 y$ j/ r
|    install.sh       |
6 ~$ U% j" ^4 i3 D3 L|                         | 第6行  E! m; |/ x& I
|——————|; h" a# J+ b. y+ S) F* Z: ]+ e
|                         | 第7行0 `/ V: V/ U  B) f' t
|helloworld.tar.bz2 |
0 B9 v9 Y" X8 S1 P# q5 T& X* ~# _) }|                         |( l9 c& y3 }  A0 ~; v( h
|——————| 结尾
5 F8 a4 q4 Y% B# @' p图: myinstall.run安装包的结构, M8 V% i8 Z$ h% S; \
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。! R+ b; A8 |# y( q- X+ i( u  B
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。2 c( |' U" ~$ N2 x- @/ x. m- K
——————————华丽的分割线——————————
; U4 V! C2 T; ^! k" O, H6 j  olinux 下制作二进制 .bin  的文件0 I5 M3 U3 ?# [# Q
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里" @. N+ C) r- n7 M& ]; ?
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。" G6 t' R/ Z- V7 R
例:制作安装apache、mysql的安装脚本包
5 s) c4 u( Y4 c2 [' g, B1.将源码包先打包7 x+ T, i# ?' F' _* u
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
# Z, e# r* S8 u  f3 H) C/ V2.编写脚本如下:
/ P' C$ O$ z; M" x5 `; m% R4 u# cat install.sh
2 ?8 j' b# c4 |# N#!/bin/bash
  y8 S( e( @0 O( x. c  Ydir_tmp=/root/installapache2 L' E# H  c8 U+ b$ G- u) ~8 L
mkdir $dir_tmp
5 g2 c- ^' r/ C1 hsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null% M4 V9 f9 m# \% ]
cd $dir_tmp
. A) h5 Y0 }6 K7 Y8 ttar zxf packages.tar.gz5 D3 @9 M/ Q3 l
tar jxf httpd-2.0.63.tar.bz2
' {2 r* w6 z, f9 d9 v" e+ K/ tcd  httpd-2.0.63
) o. Q1 }& R' P0 l! I1 R0 d./configure –prefix=/tmp/apache2
3 n. k7 j7 J  }, ~* S: gmake! ?7 f7 T& m; i, G  Y
make install& p2 \" ]! O( M% E+ p
cd $dir_tmp
1 u' t& y6 X4 Q: d4 _( e0 H( W' Etar zxf mysql-5.0.33.tar.gz$ C" R, D, E; L. @, C4 W
cd mysql-5.0.33+ B9 |! l, D* q0 K& u' n
./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. h; \, j) L$ u! ^/ @5 Pmake) P: C: i% H) Z; o; L
make install
! K4 K: U3 I6 _$ M# B8 Xexit 04 [( r  c0 B$ h: c8 z+ Z- v
#cat install.sh packages.tar.gz >install.bin3 u" i4 u+ i9 S" E- g
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到6 Y2 u$ @/ ~7 _0 g
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
- N3 U% X0 u. u. O2 E* Wsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null, X0 V5 o/ l; P- C4 h
安装的时候直接执行
* A3 B: o* B9 _# m% f( m4 ksh install.bin
* y) d9 X" z' A# @+ A$ b安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。3 C, _" A, S3 ^
——————————华丽的分割线——————————6 k) ]0 D) p; z4 C$ F! w
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
- ]3 x- ]6 \( s( S7 P( g另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
2 {, V7 j+ E8 q9 G' shttp://megastep.org/makeself/1 Q6 N: w* A6 J- n
?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
& F0 _; Y; G7 J( J7 G2 t' u: ]  e就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

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

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

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