楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 |甘肃| 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮6 o  R9 X4 X) @
发表于 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等安装包
; _/ M8 o( [) h+ d5 S! ]' a0 X1 C, k0 p制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:& I0 B; b' S2 i# [" z, x! P0 e
——————————华丽的分割线——————————8 y- Q& c4 I# b0 M
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:2 B; R, s8 z7 O% k! D
|—————–|1 j- n; q9 i" ?. V
|                       |
$ V8 V. X2 K+ j7 n; F- e|     安装脚本      |; \0 `8 c! q, T
|                       |
6 c9 t0 ^0 [3 v; \! h, i# b|—————–|
) I" M4 L- b/ g9 l4 y|                       |
) T! W6 [  \; i$ y|      程序            |
7 {3 p! L* O, ]' R- I0 ]! P. x|                       |
( z6 n$ P+ ?( S; a|—————–|# }8 k/ f# k& ~/ g
图: run安装包的结构
, x" |* f) d$ C' u这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。
7 w/ E9 Z1 N* @* F9 W; k" H, H" b制作run安装包以下举个实际的例子:
1 N6 f! P7 J9 Q' y9 t$ |$ S) C为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
7 {9 K. y1 ?% m( {3 K0 P  z. A8 w$ ls
. ~* m1 \# h% `' D% V& E) @* ^install.sh helloworld
" F2 k9 y$ e+ b$ cat install.sh% R6 B8 f. n1 }3 B7 ]( J
#!/bin/bash+ m0 _8 V" H5 S' g8 o! s
cp helloworld /bin0 R; x. t' n* x! d- b+ ]
$3 t4 h+ ~: }/ Y0 Z: x6 L( y) v
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:0 C5 X* W3 c5 H" @. I* R7 ?- G
$ tar jcvf helloworld.tar.bz2 helloworld
5 E3 K( w2 l& n& H3 t1 e: s1 _现在修改一个安装脚本install.sh* j& Z- r' C& G. ?1 J
改为:
9 R- a; W7 b: J# ^' ?3 n2 @0 ^' ^#!/bin/bash* \4 j6 M( z/ U: U
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
" q9 i( ^6 e2 I; u/ [" X: \  ztail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。  p! E* y& Y/ U
tar jxvf /tmp/hellowrold.tar.gz
( k- S) `- i, pcp helloworld /bin- l7 K8 ^, T/ i0 Y% s& s$ k! V
exit 0! x9 c. F0 @& }& x+ J7 M
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
- c$ ^8 g9 b& X8 q, z& @$ cat install.sh helloworld.tar.bz2 > myinstall.run  _8 i: a" f+ I2 r7 v: c+ N7 `
这样就得到了myinstall.run文件,它的结构如下:+ A& R) D2 ~; Q. C
|——————| 第1行& O5 I* v5 y$ u5 g
|                         |
4 n# q. T' Y; h$ J5 I- C|    install.sh       |- o$ t, d5 J9 Z9 A$ [
|                         | 第6行
1 E7 y+ y& |) J. f' p3 w' R, J. K|——————|
2 o& u! r: O# [/ ~5 k' M( y|                         | 第7行: q" y9 R' f0 U3 U0 ], W3 ~
|helloworld.tar.bz2 |
4 Z" M7 G* d1 d|                         |
% O8 ~8 Z! Z& i7 J4 {7 D0 T: ?% [. E|——————| 结尾
+ ~. W0 ^8 @. f图: myinstall.run安装包的结构
" f# |% R  ?5 ]% ^6 p# G运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。  d' R8 r  z; P. r  a
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。! v. Y) q7 F( }: }1 c* f- a
——————————华丽的分割线——————————
% _! n7 h8 h6 K( H6 Elinux 下制作二进制 .bin  的文件
. G6 A$ t8 u" ?# e9 f2 E4 L9 H制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
6 f. I9 W3 B5 x& l  k- {这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
9 N, u, p; I* x6 H! K例:制作安装apache、mysql的安装脚本包
0 w  F) h" I: r6 Y1.将源码包先打包; a& t7 ?( m: s1 W+ s4 A3 T
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
1 u) R7 \8 f+ C: \8 s* Q$ m5 u  m2.编写脚本如下:) u6 j; q7 K8 N" y9 `& {) N
# cat install.sh
7 s# i% z0 t. |2 q#!/bin/bash- ?# I& ^6 g% T  M7 L' b) k' U& }
dir_tmp=/root/installapache
$ q7 m( [* F" \( [8 {) tmkdir $dir_tmp
, Q. k+ P# g2 }# Xsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
# ^. L1 \$ x/ [9 [cd $dir_tmp6 _5 H# y, i% d
tar zxf packages.tar.gz* R9 F" Q5 g2 [! c: `
tar jxf httpd-2.0.63.tar.bz2
" {/ E7 [  g* m* |1 ncd  httpd-2.0.63- S! t1 E* Z- o) G4 i  w9 C7 x% m
./configure –prefix=/tmp/apache2' O) J/ x6 W  n/ o. r3 }& g7 u
make
3 y6 u+ i8 H8 b- o  r5 V' i  \& Tmake install0 F, D6 v1 z" l$ b+ U+ v
cd $dir_tmp
+ E% j9 k# c, O5 t" c& ]# b, ~tar zxf mysql-5.0.33.tar.gz9 B4 z$ b2 q! q' E
cd mysql-5.0.33
9 B' A) c' T+ c2 \2 ~./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, G& s& e  b% h7 W4 a
make
+ }1 y3 d, M/ i8 w* P4 [make install
! _: M, R" A; Pexit 0
" `; a5 O; d9 o4 a  o( ?#cat install.sh packages.tar.gz >install.bin* w6 f) Z, f# R0 Z
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
9 U* l$ y; v; l* [最主要的是下面这句,是将二进制文件从.bin文件里分离出来
' U$ a, S) f, u4 f1 O% R6 psed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null/ U! t0 r2 u! s* c# M* V$ I4 [- |
安装的时候直接执行
1 X9 S; A: X$ p2 P5 osh install.bin
9 L, f5 Q3 {, I: C安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
0 x+ C: y1 m# a3 N——————————华丽的分割线——————————
: K' @; a) W, d上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。2 O$ w  o* s( R8 L* [8 Q5 @
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:5 q4 t3 \( H" _$ u
http://megastep.org/makeself/
+ ~# q. _+ I; J- }% @: P?0 ?0
发表于 2018-2-14 06:26:23 |中国| 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:/ E- ~) @4 Y8 p* A% |/ n+ x
——————————华丽的分割线——————————' }1 E& Z# p# @, u; t
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:2 s+ s" D9 j3 e- }% y
|—————–|8 F& m7 t. a6 u7 C# y
|                       |
# y/ s; E3 q) K$ s! M' p3 D5 Q$ M|     安装脚本      |# _9 L# j* g3 P! Z4 g
|                       |
8 X8 b& j2 T) W  R|—————–|/ Q) Z7 F: ]) O' E. B  S
|                       |
& _; O4 b) C. Y! s$ @# d1 _% v|      程序            |* ^3 S. U2 i4 [$ b
|                       |
4 V$ P( v* @% n9 B: m, X|—————–|
- p9 g* ]3 y# F3 H3 S图: run安装包的结构
; {* C! R4 i! r" k/ \这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。% E& W* e3 c/ p) o5 i
制作run安装包以下举个实际的例子:& l: ?! K# l$ c( z, \7 G7 {/ e
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
+ N- S2 S5 d9 D# g1 b1 A  o, I$ N$ ls
7 t8 c0 Y' P3 y1 A' Jinstall.sh helloworld  k& n  e0 N& s, X
$ cat install.sh; h) J  Y" U  V6 A  F! A
#!/bin/bash
, _; o6 [( N1 Q- v' f& \  D- e3 ucp helloworld /bin- d; _3 b/ O! c) n- W, n
$
+ T+ U' ?& G/ a- W/ |, `现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:  G: ]8 x8 N' y# c7 O& ?
$ tar jcvf helloworld.tar.bz2 helloworld
3 V8 s( L' ^( e0 \) B$ b现在修改一个安装脚本install.sh
, ]" E0 T. {& ?- r) Q  I8 F2 W  Q改为:
8 T/ t5 q. U5 h! z1 V#!/bin/bash. b. \1 u* i, `4 t) g+ I8 e- x( T
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行" P6 x) E& h( r1 K1 g
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
0 p: q  a, s/ n/ ptar jxvf /tmp/hellowrold.tar.gz
% A4 o" m  o( ^; V, u5 S! y5 X/ Zcp helloworld /bin
& D5 A+ {; j& `$ Y& ^" E$ bexit 0$ B2 h) i6 _: i/ w, m5 H" H
然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。: O5 K$ n7 r3 b
$ cat install.sh helloworld.tar.bz2 > myinstall.run
& |" t$ b+ x) i+ E: y这样就得到了myinstall.run文件,它的结构如下:
  x  B4 ~" T2 M1 [. q! {, x|——————| 第1行
: w+ l  V3 f7 b( E) B; U|                         |/ e- n2 o" p; B% _
|    install.sh       |
/ f2 J2 S% S$ n, \( ^( V|                         | 第6行# K) I( W+ j' [/ W) p; R! L
|——————|
) T0 N$ ^" c" [- g( |- v4 Q! V$ S|                         | 第7行
% V! ?6 `  A( h- @|helloworld.tar.bz2 |
! u% Z' S* l! @: o! w6 q, g) U|                         |
& g6 N1 e. |5 G- U8 f|——————| 结尾
8 E5 A% ~3 Z$ a图: myinstall.run安装包的结构9 v) l" r) `! W0 c
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。! n4 D" ~- ?; ~
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。( N) o& @0 ]8 Y# @% Z8 J8 m
——————————华丽的分割线——————————. K: A) ~& v4 W3 j# n% w5 n
linux 下制作二进制 .bin  的文件7 p7 x- f4 l5 x. A- v6 K  B# `
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
3 Y) N$ T) @! B' O4 l3 w4 S这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
8 F- n- g, `1 d+ _( V5 \' f2 ^例:制作安装apache、mysql的安装脚本包; T$ t. [- {8 Y/ j0 |
1.将源码包先打包
) s/ Q8 i& f# [. `' R#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
' q8 W* _7 u; n$ ?2.编写脚本如下:
7 Y( g% G1 j6 H, s# cat install.sh/ j/ f! _$ a! q' I1 z8 U3 B1 B  A
#!/bin/bash
4 w- M' e/ k% X) V2 w1 \dir_tmp=/root/installapache* h% z2 y" w  C+ X0 p+ u0 `
mkdir $dir_tmp& h2 Z: _1 h5 \3 M8 p
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null+ s$ I& e8 q8 g4 F9 f' E8 Q
cd $dir_tmp
/ B0 s8 c- O( n" m& \- F( Ztar zxf packages.tar.gz
0 I8 a: f: F$ z; X% U/ f6 |, m, Atar jxf httpd-2.0.63.tar.bz2, L* \' O) Z7 g$ w* _
cd  httpd-2.0.63
- N. \8 \& u  i' Y5 z8 S, ?: F./configure –prefix=/tmp/apache2
! _. w5 A5 e1 o5 fmake( ~  K/ d7 P$ v0 M
make install, V1 F9 m! [, N* k) X0 ~
cd $dir_tmp% w0 `! K( B: w' e6 J8 B9 k
tar zxf mysql-5.0.33.tar.gz# M* _% ^/ x" h* k6 R
cd mysql-5.0.33, _+ K, p8 l# P% C
./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
' U. A$ w" Q' R& |3 `6 qmake
- F2 v9 l- e  E& mmake install
& `0 Q7 I) K7 [0 d; f8 ^# t! texit 0
6 q! f" K0 F; ^: G& b#cat install.sh packages.tar.gz >install.bin
4 ^# H+ L$ P+ G( |/ P这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到, h/ k& O3 B* C$ U; k) v9 M1 E( a
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
. [' h  u* o4 l' a1 N4 lsed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null, r* A5 X4 y( t7 g
安装的时候直接执行5 o2 G+ ~; i* M: A+ L3 \
sh install.bin* C" n4 r" k$ O! J% U8 K0 N$ S4 D5 s% z
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
0 \7 U# w" j1 U1 e7 b——————————华丽的分割线——————————3 R" D7 o! Y1 a7 _
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。8 e/ ^3 @. W3 c9 H
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:# _# l) u* D1 l! y6 |
http://megastep.org/makeself/
% ^% P0 r" [6 \& f: m' [?0 ?0
发表于 2018-2-19 22:23:36 |中国| 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 |印度| 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 |辽宁| 显示全部楼层
就是贵呀
7 V! }# Y) R$ H2 _+ J- O就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 |山西| 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

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

在本版发帖返回顶部