楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 |甘肃| 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
3 ^! V( V9 ~" h7 F* b" C1 R
发表于 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等安装包( `: L& Y' `- ~1 y
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:% e2 p0 U# s; u% ^4 B
——————————华丽的分割线——————————
# ]# @# \  g+ O5 ? run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
3 I6 M1 k8 H) t) g, m6 S3 f|—————–|; q7 t0 j1 }; o9 K* H- N
|                       |9 V, ^) z/ v: w: O" Q
|     安装脚本      |
5 B! z- b" o) v|                       |3 e9 f& N0 S  K
|—————–|  s0 ]& h; K! j
|                       |
$ s( I. a  z6 r3 j+ y|      程序            |
+ l8 s! x$ K6 I' U* X|                       |
& t6 {: Y; q: s|—————–|4 @, G9 l# A* Q- w: r1 r
图: run安装包的结构5 q5 Q3 W# Y6 v
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。0 t) i# m. y; U; |
制作run安装包以下举个实际的例子:: r- }6 ?$ i! ?% j
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
7 O* s! R. H* y4 C; v2 E2 `$ ls6 U+ n) \4 t+ o  s7 l
install.sh helloworld
) E) i) P. h. F* a$ cat install.sh
  s5 D- e) J. S6 j#!/bin/bash% o8 u2 y) h7 g
cp helloworld /bin
8 |6 q2 U& P3 E3 }# \; T" Y; }/ K$" Y3 M+ s0 N/ T) m! D- S
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:1 y* W* l3 m! Q. C; W
$ tar jcvf helloworld.tar.bz2 helloworld
0 R1 J' ]- H) t4 m/ E7 T8 D5 K现在修改一个安装脚本install.sh( h" S$ m9 H; E
改为:: y* j8 Y" D9 q- o% B7 L; Y/ @* I+ m
#!/bin/bash  Y2 V! v  R% W; U, C
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行. R- n& [; g: W! X. K: L
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。6 L- V# D$ ?5 Z1 i  s
tar jxvf /tmp/hellowrold.tar.gz
6 l# k, G4 _8 K2 Acp helloworld /bin
) J1 H' C9 T  lexit 0
$ t8 r$ Y: }/ P; L1 o然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
( r. r* B2 r7 G/ I$ cat install.sh helloworld.tar.bz2 > myinstall.run
1 U: `/ U! F# w这样就得到了myinstall.run文件,它的结构如下:
% F2 B$ x6 s/ a' b' D|——————| 第1行
2 l' A4 d% P5 A+ A7 k  g8 ^8 Q|                         |
6 B* L/ H2 U) a|    install.sh       |; Y) i" {$ ^( \) Q$ J! j
|                         | 第6行
0 G) E4 T/ a# |8 W- e8 J4 b+ n|——————|
' e8 G( T& X& q  A|                         | 第7行
+ D8 ?4 m1 ~! T* J1 C2 V|helloworld.tar.bz2 |
# l7 a7 G+ C1 U, z% S6 z|                         |
# d( A2 B8 H0 ^& Z2 K$ x|——————| 结尾
* f0 I6 l% d5 X+ G9 V1 k- c图: myinstall.run安装包的结构
# O$ T  J5 _2 I9 L0 u- Z! \运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。+ T8 v) ~' r: S
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
! p6 e; ]* M& V——————————华丽的分割线——————————
) F5 [6 p8 _; U* rlinux 下制作二进制 .bin  的文件
( N! Q' g! A+ l制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
8 w* v" F% b5 t& N' i% |( B这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。6 E$ _6 A1 K/ _6 x
例:制作安装apache、mysql的安装脚本包* {: o' E7 a/ T6 |0 e( w: M" @
1.将源码包先打包- v# @) d$ d0 p% ]( m3 Z# s* g- X
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
  _' d6 h; s" V2.编写脚本如下:
6 ^8 U4 n0 B& E2 g& u( K1 R# cat install.sh: T# _5 J3 y4 H& w( R; r# w3 y
#!/bin/bash! x- ?8 N6 C) B, l! x
dir_tmp=/root/installapache
! `8 f. U/ l3 K/ X1 Y* amkdir $dir_tmp( r9 j' P  `' e+ T# y" c
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null1 K' y& }$ r5 a; T6 D5 Z2 f
cd $dir_tmp) J2 i' }2 p! s
tar zxf packages.tar.gz9 |" r' C0 X% @4 }- s3 P" R: X
tar jxf httpd-2.0.63.tar.bz2% l4 \' l  E. U! n
cd  httpd-2.0.63
6 F1 t) k8 t& g8 K* A; H9 i. c./configure –prefix=/tmp/apache2% R8 G, H& S9 C7 ^: U. q/ C
make$ M0 A  j  U6 h3 r' v
make install, I8 ~+ }, U! g$ P
cd $dir_tmp
& w/ I4 T$ `: Star zxf mysql-5.0.33.tar.gz0 z! [5 W# R% ]) V
cd mysql-5.0.33( B) }! B8 _3 o/ j
./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
2 F. i: f% j. }make
$ q- ]% h9 w9 a7 I% Cmake install- v# @0 g" K" k9 [
exit 0# K; A" j/ D8 E$ `9 b% K" Q
#cat install.sh packages.tar.gz >install.bin" L4 N) Y/ h5 d( J" e2 C2 F8 ]
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到- O  w* m9 W5 q- V
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
; D1 z* Q3 D  X1 k, Hsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
' U: I9 v# G' j6 G! A, B安装的时候直接执行+ ^+ O; Q% Q$ _3 z# a0 |% t
sh install.bin
; v" ]; }/ }, r* t5 g" ^" D安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
0 Q$ A( B' y2 H( d/ d' M——————————华丽的分割线——————————
$ z5 l) l- b5 n" f: x上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
) {$ m4 d2 }3 q3 _* v. U另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:- u4 B/ \* o% V5 `) f
http://megastep.org/makeself/
* J! L& P7 L) Y. e9 x# B- U?0 ?0
发表于 2018-2-14 06:26:23 |中国| 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
+ T% Z0 ?3 `4 E/ F——————————华丽的分割线——————————5 H* E1 E" Q: u, _5 r
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
1 o) F5 J/ H! H8 R|—————–|" ?0 z3 {. @* s- u  a+ a2 x7 `7 ]
|                       |
  r+ `: u7 J' c' r|     安装脚本      |
$ _+ W/ ]5 ~4 @6 z) L6 X' k% p|                       |
9 V$ f/ [/ ~1 }3 `0 y* |4 ^- K|—————–|7 F7 f$ t4 g9 d0 w- A; p7 }7 j
|                       |
" ]# k! B1 V3 s" A|      程序            |& |$ u3 L  Q; Q. z3 C% }: p* p3 k
|                       |
9 S% |; }0 H! f1 A8 R|—————–|
: w$ s: }. y& m图: run安装包的结构: J- `; t9 e" r
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。: q5 F! b, Y; H1 T, G4 U
制作run安装包以下举个实际的例子:5 A9 l1 ?3 n( S
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
2 Z; P8 i" I3 a/ ]- D& A' a, V% l$ ls
3 ?% |/ |! ]/ P, q  V1 s5 Winstall.sh helloworld
; u: ?$ @0 e" E; E& W7 C$ cat install.sh
/ T( i3 b- s) z; {7 T#!/bin/bash
* ^/ t7 n; w) f" G- k3 pcp helloworld /bin" E( Z% }" i( S5 H$ N/ x
$1 @9 |. ?# l; ^7 D
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:3 v+ ]9 m  \0 `5 g* {
$ tar jcvf helloworld.tar.bz2 helloworld
, i) {9 R, }8 i8 k8 c( |& ]现在修改一个安装脚本install.sh
1 c# p0 s# J* M  V( ^: j! A改为:# w# n% R/ _& T  k
#!/bin/bash: g6 a; S! H$ K9 T7 T, o5 u" a
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
$ _% s2 X* H1 X# a0 Ptail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
) D# r8 X; `$ N' E* v! ntar jxvf /tmp/hellowrold.tar.gz$ R0 \$ E. P2 B( r; T' t5 E
cp helloworld /bin) \* Q7 G9 p  U7 ^
exit 0
7 C$ y1 H/ S1 `4 A: p; T2 @/ ~然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。5 R1 M* t& Q& ^
$ cat install.sh helloworld.tar.bz2 > myinstall.run
2 A+ w/ G7 \0 L  i1 h这样就得到了myinstall.run文件,它的结构如下:
, e$ H$ r8 @; n3 l3 C|——————| 第1行( k6 k  |. M5 w$ U2 i; a; H- F
|                         |
9 G7 F8 q7 K6 m3 X' e|    install.sh       |
8 S# L  S: y% \|                         | 第6行2 k; K- `" L( {: j7 Q
|——————|; j: l" q& y7 Y& ]- Q" G! M: G1 ~
|                         | 第7行1 n% j- l0 p; e4 c5 L, b
|helloworld.tar.bz2 |
( h, }$ w' C% d|                         |" o2 v: x- r% f& b( }& T( d! L
|——————| 结尾
% q  P% x, Q; _- y9 ~4 p图: myinstall.run安装包的结构
+ |% L  J. h' @: x7 G7 m7 }+ I运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。# u: S! k5 u' d3 |, A
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。4 F  N3 n4 _3 Y) Y0 S1 E4 H2 z; e/ s
——————————华丽的分割线——————————( x9 Z9 K5 c& s* B% ^% G. [! B
linux 下制作二进制 .bin  的文件! N6 r: P; z- |
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里2 O5 x0 c  X% V# ?! ^
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。* J- ~+ @% L; @8 q1 n2 n) g6 R& y
例:制作安装apache、mysql的安装脚本包: f6 J8 V, I/ ^9 k8 A, z
1.将源码包先打包
8 b; Z* I" \% [# i# C#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
% W1 [  X/ t# H2 I( G. N6 C2.编写脚本如下:
2 [' F$ x( \! o/ M; a9 E# cat install.sh8 g: g8 x9 G% |, y' W' R1 i
#!/bin/bash7 `& ?' e' v- {- f" ~% z- {% V  P
dir_tmp=/root/installapache
* s5 v' f' ?  [mkdir $dir_tmp
2 T. L- g0 O5 T% Wsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null6 T3 i0 L$ {) Z* X% T5 v
cd $dir_tmp% ^/ Z5 u$ m+ A( @+ c0 r' `3 H4 {
tar zxf packages.tar.gz
# ^! e, I2 a% Z- i- e6 u1 e* Ptar jxf httpd-2.0.63.tar.bz2
: X+ \- G' |* G" H* dcd  httpd-2.0.63
. `& x9 @  v8 z  H./configure –prefix=/tmp/apache2* S3 L2 _6 e4 I: Z! v
make7 }! H6 s$ k1 o- x2 O
make install
9 S* G7 p7 ]. k2 W0 u! ~cd $dir_tmp
9 S; J( n$ @: @8 ?tar zxf mysql-5.0.33.tar.gz  f# K" [: i4 n  z. W$ i0 M
cd mysql-5.0.33; S5 p+ A0 Y( t0 `5 S8 i
./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
$ j2 K* h, T" }0 ]; o' ], ]make
4 c, _* e4 @) `) m2 a% Dmake install+ t+ U# T; m% P; Y& W6 T
exit 0
  \1 ]$ `6 k2 ^+ t3 u#cat install.sh packages.tar.gz >install.bin# i# w- r7 z0 _2 C" C7 U
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
% g# h3 u) c* u  P  u3 ~最主要的是下面这句,是将二进制文件从.bin文件里分离出来
) t* m; X! d/ |$ c( v: a3 J% v" A0 `sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null4 K1 L: x& J, s$ u- l6 K9 e* E
安装的时候直接执行
. L8 }4 w$ v" F- n9 W  |/ Ish install.bin
, P0 R# t% f  c- d- q安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
" ?% q9 ]8 U' u- |  C——————————华丽的分割线——————————$ w8 O' Z1 u+ t
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
3 N" w5 @) h8 [$ K另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:" o2 t6 p1 i* ~' T* d" E
http://megastep.org/makeself/. B2 w- g3 s3 C3 @" O7 o7 `
?0 ?0
发表于 2018-2-19 22:23:36 |中国| 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 |印度| 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 |辽宁| 显示全部楼层
就是贵呀. ~' f: N) n4 W0 Z* G
就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 |山西| 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

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

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