楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
3 v9 G. a4 `  O7 V# w' 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等安装包* d8 i% d" U& R7 W; U
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
3 O7 V( Q& }, }- f1 I8 L( S: }——————————华丽的分割线——————————( N; F* e, r' R0 M
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
% d6 A( Q" ^5 x! g# b|—————–|! k4 e$ I' D  _) g8 [: k; Q7 ]. k
|                       |
& b1 A: v, R) I|     安装脚本      |6 |6 T+ c3 O1 U6 q; m) x0 ]- z1 k
|                       |
% r  k9 ~) q9 G& G# _|—————–|
' k8 i  I  h1 }$ X2 b' u2 z|                       |
8 ~7 O3 |; C: X! C7 O|      程序            |4 `% p, A" E: f: k" G: g
|                       |. E! _$ y$ N# d0 t6 D# w
|—————–|2 H2 N$ a1 t- J3 e
图: run安装包的结构. ?- G, r. L7 g' |
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
) O: Q# k; v5 O' r制作run安装包以下举个实际的例子:/ D  g1 t/ E" m2 N
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
* v1 D' a* F3 I3 u) Z3 z* M$ ls; x8 X. o6 c8 L- F( S) C. c" y
install.sh helloworld
  h: a& p0 [5 `$ cat install.sh
* \8 \9 a( V0 m3 `( }, r#!/bin/bash2 i4 V9 Q9 G6 a* j
cp helloworld /bin
' x: V- [& r4 j: a- O! w/ b$6 [, z! M5 J+ J- B
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:* S6 I; @) l- \" f- `% ^
$ tar jcvf helloworld.tar.bz2 helloworld
, {; m. ]9 k. c% R现在修改一个安装脚本install.sh
, l5 \+ G$ S3 I/ K1 m改为:$ m- \/ v; v/ N$ f+ P/ `2 ^
#!/bin/bash1 b7 ~( E, E/ p9 D" V' _
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
$ r& F: B7 t( ?8 N$ ]tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。% H0 l# B$ K$ n; ~
tar jxvf /tmp/hellowrold.tar.gz
7 c1 H  r7 w; dcp helloworld /bin" ~. p6 K/ U0 J  ^" o7 J
exit 0, H+ z  W7 P2 d. \) _
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。# y: n/ a4 \+ U! i( e+ D  |1 `. B
$ cat install.sh helloworld.tar.bz2 > myinstall.run; b8 b# Q, a; {( l& _
这样就得到了myinstall.run文件,它的结构如下:; Y% g+ f6 @5 y+ R. x0 S4 a
|——————| 第1行$ Q+ ^# k2 y- c# i5 X4 H5 t% Y& A" e7 ?
|                         |
' C/ k, v' V5 m- j|    install.sh       |
, f- i$ ^; U1 `* R9 E7 s|                         | 第6行/ e  s& T4 }4 ?! V0 L# ]* B
|——————|# r$ r# a1 l3 E$ l- z8 B
|                         | 第7行
  U* N; l1 N- o; c, j3 ~2 p  d|helloworld.tar.bz2 |, a% d* f  n7 B, m! Y
|                         |- h: v5 d* Z& [: |
|——————| 结尾
  O! Q/ p, \' i4 E- K图: myinstall.run安装包的结构$ i4 X! x8 e& s" x, j4 Y
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。
4 O$ I# G0 a+ {run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
4 h) H. O8 n3 s2 _2 v( c——————————华丽的分割线——————————
3 m$ d9 G7 s* C/ clinux 下制作二进制 .bin  的文件$ `: B* X5 B. D% B8 ^4 I. K4 K
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
2 k7 m- J& Y8 N# p! Z$ x这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
9 t6 a* S& a2 L4 |) T$ M! `例:制作安装apache、mysql的安装脚本包
# p1 R1 M6 G% S8 d  A1.将源码包先打包; ]0 t) {$ d0 x1 l: F; z# W6 t5 x
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
% Q/ x* E/ N) S5 d6 k$ P- T' b+ e2.编写脚本如下:
( Z' c- M* f0 e% A# cat install.sh9 d' a- Q9 m/ n6 f: j
#!/bin/bash
% \/ k) W3 a- h9 [& jdir_tmp=/root/installapache0 x& G1 X  [5 t: t  B3 v$ W7 N5 X0 K# U
mkdir $dir_tmp1 N6 V7 V& D; |5 W% O  |5 K
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null/ ]$ p6 S6 ^* S0 u0 @& o
cd $dir_tmp7 r( U4 e6 ]1 Y/ \0 @4 Y+ C
tar zxf packages.tar.gz
9 }0 l0 W9 i5 wtar jxf httpd-2.0.63.tar.bz2
' c0 R* c( |7 z, gcd  httpd-2.0.633 K/ _% N& Y! L# `# Z7 S6 @$ B
./configure –prefix=/tmp/apache2$ y. v# k1 u! ~- ^( }$ J
make& f( N( V. C- _. w% \
make install. j9 C4 W# P3 U! x- J
cd $dir_tmp) F) a, l+ q3 X9 @" S3 }( A
tar zxf mysql-5.0.33.tar.gz: i$ R( u: X- W. N! U+ {
cd mysql-5.0.33
4 g' U$ x& {8 r4 `7 A8 Y4 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/mysql50 l+ r/ B, ~( `/ P( D9 q4 g5 Z
make
" [) z0 P3 S) {* D9 k9 Rmake install
6 I' O2 y. x9 E1 oexit 0+ c7 j" i" N+ B0 P2 s
#cat install.sh packages.tar.gz >install.bin
2 H6 ^4 y! Z5 u- `1 m5 A( k& u0 u这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
. N% K) X0 c6 n* E最主要的是下面这句,是将二进制文件从.bin文件里分离出来
$ S: j5 w  ~' s  v; d$ U2 esed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
. m# `) u) T" s& F! [/ }安装的时候直接执行
7 O3 U* {7 e/ p- ~- ?( Ush install.bin% P8 W2 q/ k0 i) {" W/ j* A2 s
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。' e/ D7 @" N, X  Y9 z$ a
——————————华丽的分割线——————————
. W- P  [+ n. e. t# m2 `上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。! P7 b5 b6 N. u2 C" X
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
. O; t' D! w/ r6 K( nhttp://megastep.org/makeself/
6 x5 u6 K% I0 P/ z?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
7 U1 N" m, Z! U* l7 e——————————华丽的分割线——————————
7 R4 s& S$ c+ f; m& g9 c run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:) X& e; ?2 @4 ]7 |0 ?4 }9 F$ H( f' {$ h
|—————–|
, j) E0 X, R0 i8 ]  ]2 N1 q' S|                       |
* G5 A% v: z: Y; S1 P|     安装脚本      |  U; h0 L% \. D# Y( G
|                       |
, J; F, Y+ U) ?8 I& P5 v|—————–|# C/ r5 R4 Q- a0 l( k" h  h# \$ c0 ]5 T
|                       |
3 s7 b7 N! m0 z|      程序            |& d2 m$ e. g$ \7 }0 ~+ ?
|                       |
5 @' ?6 Z* O2 c$ h# d|—————–|
* T! Y( e- s. E$ }/ h图: run安装包的结构9 N" Y# j+ H: E3 g7 z* _. R
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。. R5 O$ Y% X# w3 `  I
制作run安装包以下举个实际的例子:5 Z& F& @8 q1 U0 N3 _. |& w
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
2 S1 p0 C$ s% d& j1 |$ e  C$ ?; b$ ls
$ u' J0 g! j6 Q$ x; e+ _2 J, ninstall.sh helloworld
4 X% ^8 y' d0 B' V9 s9 n$ cat install.sh" s6 c5 m0 u; Q4 q
#!/bin/bash
, c* K1 `$ e6 }' p  X4 ]cp helloworld /bin. [6 }% f3 t: ?. }$ }( h
$# K* \' I7 i1 Y2 k" \, `
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
6 x& ]/ j. {' D% d  C$ R$ tar jcvf helloworld.tar.bz2 helloworld  U# o; x2 P# q  j6 H
现在修改一个安装脚本install.sh
  q& d0 i" }" p. n改为:
% ?- u( `4 n6 P) F; I#!/bin/bash
. ?# n! j( W/ j' U" C, d  h. Olines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行' s# y% Z" {) u& x8 j1 u2 C2 _
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
3 T% B7 S( J- @0 ?6 ?tar jxvf /tmp/hellowrold.tar.gz
) t3 j" `% B( |9 ]- J( W+ G( zcp helloworld /bin1 C) W. ^0 r& H  z. S
exit 0
$ f' g: w2 b( q4 b4 Z" n* r然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
1 v4 m3 p, u" u& `7 m- i/ I$ cat install.sh helloworld.tar.bz2 > myinstall.run1 D0 i& }) ]7 \' f* T" U5 o' Z
这样就得到了myinstall.run文件,它的结构如下:* h9 V7 O2 h% T9 v
|——————| 第1行
6 |2 |9 ?2 Q$ ~3 b. r) t|                         |
# o  C7 j) z; ^) S6 N  a|    install.sh       |
" @. ^) c; S9 z$ I. c7 |3 \|                         | 第6行1 [9 b, B! d7 E# d! O; {+ g/ L9 D0 J
|——————|5 n1 i4 F& H( S
|                         | 第7行/ n/ F9 G: ]% F; u: ^3 M  l- \+ ^
|helloworld.tar.bz2 |' u$ T! |+ l$ e4 ~
|                         |
" W/ O7 Q: U$ h* Z: K9 T|——————| 结尾( f. h3 w- l3 u! E$ Q+ N
图: myinstall.run安装包的结构  H% R4 |$ Y# y
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。' _& o; H6 o% a. ~
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
4 Y3 t2 F. y; Q- ^: O——————————华丽的分割线——————————- J: y9 Y: @% e8 T1 n
linux 下制作二进制 .bin  的文件
  _! E* m4 I4 t5 F) _制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
/ A* ^8 m  |" b8 L这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
% {& v8 N) }, g例:制作安装apache、mysql的安装脚本包
" s) B1 e; [% A! s( ~  z+ S1.将源码包先打包$ c. u: P1 r# G3 W+ c  B, A
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
. M9 |- |. G- q: |' |1 s2.编写脚本如下:* x; r2 O+ w) B- |9 K, s
# cat install.sh# t6 v# A& w, k
#!/bin/bash
/ j) ?, l; J( w1 R5 E6 Wdir_tmp=/root/installapache3 x' U; N& j7 Q  ]
mkdir $dir_tmp
4 m" M9 Y1 E  X; Used -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
& l+ Y  g5 t, d" icd $dir_tmp7 [- |. K- {5 U- P
tar zxf packages.tar.gz
' p! A5 B" p) gtar jxf httpd-2.0.63.tar.bz2  o  G+ U7 H2 s5 z/ X
cd  httpd-2.0.63/ e# d& I( w; u! H: H
./configure –prefix=/tmp/apache2
1 I6 O& ?0 Z; Fmake
, D; E3 L3 V8 x* {$ [make install
- m' j& F% v9 ~. d8 Q) Bcd $dir_tmp
* n& _( c3 H) j9 ptar zxf mysql-5.0.33.tar.gz9 V7 W4 [" {- o; \9 g: G0 ]
cd mysql-5.0.339 I: h9 ^% L. E1 M9 I, L
./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
; O2 c8 E5 v: M* Y% Umake
# n# {9 z2 O2 Q9 U9 Dmake install3 [: F# W/ j4 _  ]# v" S7 ?& E
exit 0
' z6 a" L# r1 ~, P6 \) e8 v3 W#cat install.sh packages.tar.gz >install.bin
3 T4 q* R1 R. R这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到4 S* l5 a0 s# w. R' l4 g
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
1 h, {& L, w* b5 }" d, R5 Wsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null) u4 b% \; q* c" h9 h% {" q
安装的时候直接执行
/ V. f8 R, d- E4 Psh install.bin( h3 [1 _) K: V4 M! e, A
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
9 V. {* x$ n; |: k——————————华丽的分割线——————————
- Y( x& [0 _1 A: W上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。# M% U, t% N. \0 ~; [1 S
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
8 D" I, G- D! ?http://megastep.org/makeself/  e8 I3 Y* v) _3 {& s- n1 N& K5 }
?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
- @& R0 _& \& t# ?2 s就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

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

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