楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
' r8 |7 G" f' T- z/ J0 ^- M
发表于 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等安装包
6 |( j& w1 \) k$ r. e制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
; V0 |8 ]  L) ~7 J3 Q: E——————————华丽的分割线——————————3 B9 u" g* [9 h
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
8 t' m( N5 c0 ~. S|—————–|. W3 }  q9 V  \2 w# r& P1 d
|                       |8 j  i4 a* i* s6 T, {; M3 a
|     安装脚本      |
8 d2 x: d  a. r0 D, Y7 e2 r1 ]7 |$ w9 W# ~2 E|                       |) Y2 ]7 z7 N$ P
|—————–|1 a0 p# r6 i! _. ~7 Z/ m1 A) h
|                       |
/ n8 ^: o  D+ r; a! R! u|      程序            |. j0 g* s5 n/ w! _  J
|                       |
; G: j; J8 B% ?0 C( o/ D1 x8 }( Y|—————–|
. h1 \' @- M& A. b3 q图: run安装包的结构
3 r! q. b& m' ^3 \" Z2 r这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。( ^* B6 V6 P+ h* f
制作run安装包以下举个实际的例子:* @' x6 P& D6 |
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
+ Z& P3 t* j1 g( k6 U5 T# \$ ls
& \1 r) ^- z3 Xinstall.sh helloworld9 k6 K2 q  M% b& M8 V9 d
$ cat install.sh
  t* ^( `7 A' z& X9 @1 M#!/bin/bash
" U0 P- X+ `+ u+ I% i# J5 vcp helloworld /bin
0 M- ^1 a9 T- E# p2 K* ?  z$
, C1 n$ X! U7 r7 ^# q; O现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
6 ?' K# E6 W) I5 Z9 v$ tar jcvf helloworld.tar.bz2 helloworld  L0 f. b# F! x; K
现在修改一个安装脚本install.sh
2 y. \' p' e3 \$ R改为:2 ^2 l6 Z2 a7 L. `6 {3 H, G
#!/bin/bash# a6 s% [: W* ~3 h" i8 j
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
8 J  ]- q6 d  J8 @7 Wtail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
; z& W. s+ L# U8 Y- l$ v0 `( u7 {tar jxvf /tmp/hellowrold.tar.gz7 x/ z0 I! j" E- Y! u! C
cp helloworld /bin
9 R( y& D2 J' s- J7 b/ c  Fexit 0
0 y- A  N1 o/ o; |. y1 U然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。2 c- A$ g2 I4 K4 ]( ~
$ cat install.sh helloworld.tar.bz2 > myinstall.run
0 t8 H9 h  O6 E这样就得到了myinstall.run文件,它的结构如下:& C. @8 [5 {( {' f4 e8 u! n2 t( x3 v
|——————| 第1行% M* m% S+ m( ]4 ~
|                         |& i: j# _# |* q7 J) H4 n) K! _7 ?
|    install.sh       |
/ q% O. m# {* z. E# @9 v" ?7 j, x|                         | 第6行' f, k) k/ R; S! \7 w
|——————|2 z5 d. Y  Z5 S" i+ a, A' I
|                         | 第7行
3 I* U$ I! O" [" |+ F" j|helloworld.tar.bz2 |- `( E: j5 g  o- O/ l! ?: A
|                         |5 A7 I! e4 M* l& }7 B" w
|——————| 结尾  C9 ~0 F+ B/ b2 f' I' b+ c8 B
图: myinstall.run安装包的结构
- h5 B: ^- {5 X5 I: z& W2 n4 H运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。
, C$ v0 D$ c# C/ U3 s0 U* e- {run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
# Q2 x1 h. s. B2 o——————————华丽的分割线——————————
% O/ Y( M$ w! llinux 下制作二进制 .bin  的文件
3 q. d% J* m% m; e# s2 e7 z制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
) x) A# X8 X5 _) Q$ D2 c6 A  |这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。2 @& _: X% \- E' G/ _: j! A/ Z- p
例:制作安装apache、mysql的安装脚本包! @( ?: m6 `7 a* E9 c' f& x& S
1.将源码包先打包
- Z7 x  ~2 H- ^#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
; i/ A' V$ q: U/ K& t6 b! ?/ C# @2.编写脚本如下:
, ~: y$ Y. D$ M7 |$ w& U# cat install.sh
/ Q# }+ U9 N' x! x' N#!/bin/bash
& ~" j, s+ Z0 R2 [, Xdir_tmp=/root/installapache
1 ^3 [9 _: C" U, z$ N0 vmkdir $dir_tmp3 k* D8 o" \* q
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
7 i: E2 f( N; k% B2 @; K7 qcd $dir_tmp
( s" H- s0 H( I1 ]3 @, {& ?tar zxf packages.tar.gz
( X9 c4 T% F# P7 |! N2 T, ~6 Ttar jxf httpd-2.0.63.tar.bz2
) W0 t5 v! _; I0 p0 w6 Xcd  httpd-2.0.63
* ], y3 x! \1 ^. q* s./configure –prefix=/tmp/apache2+ z* K: C  V& f6 {2 C6 q
make
& U5 c2 T$ ^' b7 Q, h1 hmake install
" k& v  v! X6 C" _, ~5 a# i/ bcd $dir_tmp
  S6 U7 r* m+ z2 g! b! d9 s/ Ttar zxf mysql-5.0.33.tar.gz7 W2 c) k6 j$ C: O! ^# Q
cd mysql-5.0.334 P: R0 M3 W6 v" y! D3 M# F( R
./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
0 d: }! i* E0 h9 [' qmake+ M$ ?. g( u( V3 D2 b6 e
make install
( o' V7 s4 G$ S* S2 {exit 0# c; G: `; m, c6 ^" s/ d  s
#cat install.sh packages.tar.gz >install.bin$ j8 @6 p6 ~2 t; S2 i0 ^( V$ N, o
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
9 K2 ?* G; G) c$ J0 W& A最主要的是下面这句,是将二进制文件从.bin文件里分离出来
1 E+ `% X* @% V" ^. s4 P3 ?sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null# P" L0 K7 s/ T, U# R
安装的时候直接执行
- o; [; c  W* ?sh install.bin% i1 l( F* Y4 u
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。% B$ i$ U! K$ B# X1 m7 }* k
——————————华丽的分割线——————————
8 v. s$ o, L  L4 d7 ~1 G6 r8 [* _上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。
/ ?/ i$ n; n9 m/ I另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
* e$ i: t2 ?0 V) fhttp://megastep.org/makeself/% M" Q( o, r; _2 c
?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:5 f7 _9 |& ^5 Y0 N! {+ [4 v
——————————华丽的分割线——————————! P3 G' G, h# R4 `. O
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:* `" r2 k- T: Q7 p( E. g
|—————–|
! k* r% M9 s  E|                       |* Q% h7 O8 f) T) s
|     安装脚本      |6 O, `( O3 p8 n
|                       |( H6 n4 e- Y! j& c9 c/ Q$ Q
|—————–|
- \4 D: O* l& ~$ p6 }# A0 U6 O|                       |
7 u0 b* [: n7 M|      程序            |
+ D: ?' n1 A/ O( R) G  G: z( B9 i' [- \/ Z|                       |
0 V, o9 G6 U: M- b, I8 A# a" w|—————–|6 c# w6 `8 m! K! L
图: run安装包的结构
8 }  e: Z: g' j" N这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。8 o& L" W" B8 p( D7 F3 e5 `  w
制作run安装包以下举个实际的例子:0 C  k/ k; D; S2 n
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
( C% u! X5 A- l  {' ~$ ls+ ^: _' l5 v; S0 [6 s$ p% q% |4 P
install.sh helloworld
/ J1 L! p* V9 D$ cat install.sh/ u, b  M2 W8 D& |2 E/ x
#!/bin/bash: _9 O1 E2 A7 T* r8 \1 U' I
cp helloworld /bin; A% _% e, H- H1 f. N, `5 u
$- O9 K% W2 A0 K
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:' {- R5 v$ ]# \1 }
$ tar jcvf helloworld.tar.bz2 helloworld6 _4 I! X2 S4 I$ L0 C$ J
现在修改一个安装脚本install.sh* V# r4 }" z8 _+ ^
改为:. ]( d7 z1 p, o1 q2 B" o
#!/bin/bash
' u6 r7 Q5 s; j: M4 r* c" xlines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行; r/ c! o6 n+ A
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。  Q/ i" e0 R. S6 l: f: m
tar jxvf /tmp/hellowrold.tar.gz
. \9 \) ^) z! I! U4 ]" z% \cp helloworld /bin
- u4 |$ J3 _: N9 U/ _) J9 l' {. u' ?exit 0
8 q( W& w( W* o) G. L+ g然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。
8 y; S$ }6 Z, }' `3 T2 A& b$ cat install.sh helloworld.tar.bz2 > myinstall.run
5 h% M: h2 `" m' l7 T* m4 z这样就得到了myinstall.run文件,它的结构如下:
3 @% }* T: C3 g! r|——————| 第1行1 V8 d0 h( O+ T7 ?
|                         |7 I" I% u. A, B9 x" ~- s
|    install.sh       |
/ l: x- ^  I/ E, E|                         | 第6行/ X! q( h* _, W3 U. F
|——————|6 C( y" s- y0 g' V
|                         | 第7行) v+ o8 s5 k) I$ y3 L/ f3 I
|helloworld.tar.bz2 |
8 j6 A+ @( _( m3 q|                         |, T/ p, Q' G7 M6 ~" {
|——————| 结尾0 E4 a9 O" m* ?' _: i. O
图: myinstall.run安装包的结构
: y$ ]* n" t6 I; G+ p+ _运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。/ h; F+ J2 w3 b3 Q/ z& _
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。" o7 f' v3 G0 q# t  S: _' P; }
——————————华丽的分割线——————————3 c, ^3 H. d) Y% U) a
linux 下制作二进制 .bin  的文件
, i- `5 O. E) N: J& M制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
9 N( T# p* s7 Z! f; P这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。  Y' d; t- P: Z8 S* Y0 i
例:制作安装apache、mysql的安装脚本包7 [& G  l7 u0 a( A; {9 _% Q; s
1.将源码包先打包
% p" n8 J4 x! k( v1 |#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
9 {/ w) g: i. F2.编写脚本如下:
4 A/ F0 w' E3 y% f2 j; R8 R# cat install.sh
& O# q* f3 S" p* c2 B: p#!/bin/bash
0 Z7 P: I2 ]  V; L7 Zdir_tmp=/root/installapache
* i- ~* h" {* a5 b$ gmkdir $dir_tmp3 J! z; X/ f" z  K/ G" F+ d* D8 d
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
% Z3 N7 a4 U7 l$ vcd $dir_tmp* C9 v) Q& t! X% n
tar zxf packages.tar.gz' {! l7 A0 X) N3 i; D
tar jxf httpd-2.0.63.tar.bz2" s5 Q' {/ m5 p0 v7 U
cd  httpd-2.0.63
, }, x6 s* c) N0 G2 e% b: c4 D./configure –prefix=/tmp/apache26 ~9 A1 F& f" {; P
make, A; Q: f. F3 k
make install2 N' \% n& P  N4 F8 S$ B
cd $dir_tmp
& s- B, {" M1 Q( l+ ^8 M" W1 O/ Star zxf mysql-5.0.33.tar.gz' k4 G3 O8 r$ G
cd mysql-5.0.33- Q6 u& ^7 |1 B, D5 z
./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/ e% ~8 C( z9 G& ^
make+ `$ U* l5 m3 S% k- k" Q
make install. q; |! o( |: c- [# O
exit 0
& s  p# ^9 Y. c' t2 Z) V. E#cat install.sh packages.tar.gz >install.bin
* z, j5 n, W8 m# [3 @这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到) g; q, X- r( u1 ~/ Y' b5 O4 X9 S& l
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
! {8 a4 u- J0 v( j( Ysed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null1 j6 O" H1 L& D
安装的时候直接执行
7 ^) M/ q) F, S# P7 n7 ]sh install.bin
+ R9 R: S: y/ f/ Y安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。' l/ ?0 [! Y7 R  g8 K* o
——————————华丽的分割线——————————
5 I$ @  U' X! Q4 U4 e: e上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。4 }1 O' O* p: x2 y) N4 T
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:6 t( f6 d+ N+ ?8 [7 `3 F
http://megastep.org/makeself/
; k# p$ D( v; g# W4 r?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
; q; |" Z# ~) x8 U% h就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

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

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

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