楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 |甘肃| 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
9 _  A% m4 Q' @, }3 G# w8 [" t
发表于 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等安装包' R0 G, C  n5 B1 p
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
( v  E, w& w; [* l8 X  b——————————华丽的分割线——————————3 i* L" Z9 l0 u3 L
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
$ V5 S% |) ?4 j1 `, E|—————–|2 E, q3 I. B! S/ o; u7 F7 |
|                       |
1 a' P% ^5 h7 _8 g& ^/ g& F2 q' G|     安装脚本      |6 I6 Q0 d1 u; ]) p, r5 O
|                       |
$ |9 A! Q- k) x+ C1 t+ B|—————–|
  N, k( g$ F5 u0 G  `2 V+ W|                       |4 e6 J# q$ D0 v* B$ U7 w
|      程序            |) g5 ^4 e; s  z
|                       |
9 ^: b4 {& o: g6 M8 m, D5 k|—————–|
2 [" O6 Z1 {) w& P. }/ L图: run安装包的结构
8 B  M7 d4 q& X) |- {3 Q这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。$ t. P4 }3 n( _+ O, w( s
制作run安装包以下举个实际的例子:. u# C6 v2 t7 k9 A) ]. j
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。8 m, R8 ?* Y' T& ~; V4 U, z/ m
$ ls
7 E* a, d1 d" _5 U; Sinstall.sh helloworld
; }) r% m4 u( A8 g. v$ cat install.sh) ]* [7 t) U, y  H! d
#!/bin/bash( u# z0 |5 \3 L1 Z, X1 |
cp helloworld /bin2 I" [$ y" F* z7 i! Q7 R3 m" ]+ A
$; E5 t: c& B/ ?
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:  [- M8 G2 B8 N$ X' T
$ tar jcvf helloworld.tar.bz2 helloworld9 i7 I2 ^; ]* m  f* {8 n& |
现在修改一个安装脚本install.sh5 ~; t1 p/ Z" H8 W
改为:* U. Y2 h2 y. I
#!/bin/bash
3 W) t5 w. G, V1 ^# q9 klines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行  R+ R. I9 Z2 m7 G1 m- ?2 c4 Z
tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。) a) }( ~3 K8 X( o- M+ _( V
tar jxvf /tmp/hellowrold.tar.gz
/ o3 S0 A# Q6 N2 f  C" h# Ncp helloworld /bin
4 F5 {' A9 B8 V3 texit 0
5 @" d- p7 J; A9 x然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。( ]) m0 k$ k& ~. X/ G
$ cat install.sh helloworld.tar.bz2 > myinstall.run; Y0 ~+ M3 I; S3 {, g5 |5 U
这样就得到了myinstall.run文件,它的结构如下:
/ w/ {+ J/ d! W|——————| 第1行
# {' I  y1 e. e/ X1 |! A7 \1 G|                         |0 s' x* i% b  z+ V9 D. |
|    install.sh       |
+ i0 c" v9 K, x" m|                         | 第6行
+ p$ @+ r) A9 G  N9 Z  P! [|——————|
# e' B# i- }, q. e1 `|                         | 第7行
$ R9 b+ y1 I5 C% K7 l/ R* w6 C|helloworld.tar.bz2 |
" b: F: ^( \2 j( t# H: p9 j|                         |6 V" D. @8 `: N& a- h2 h
|——————| 结尾
9 t, r- U% x3 ~0 \$ t0 L, ]( W图: myinstall.run安装包的结构
0 y& I: {: _$ z# h! {运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。/ Z2 @1 f5 k) p, I% ]6 z
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
: d$ j8 A. Z6 O2 J4 o& N——————————华丽的分割线——————————
; H7 F4 W3 A5 c/ b0 j' Wlinux 下制作二进制 .bin  的文件
& _8 [8 U9 u; `3 K3 a: X制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
: r0 O2 b7 D7 W3 I3 [8 s5 {7 ^这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
$ i( _8 Z8 x' q. F' w5 P2 w2 O% M$ L9 s例:制作安装apache、mysql的安装脚本包! h. u& b# L9 U- B" l
1.将源码包先打包
. t# {6 K# M. z( ~. N' K( D#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz1 b3 v! g. z! i
2.编写脚本如下:. W: f/ m7 i! m. D* u! j- [% U6 q( M1 f
# cat install.sh& \. w! u+ Z% }- V5 L( T  w
#!/bin/bash
: l$ O5 i, M- T$ Q! C3 o3 sdir_tmp=/root/installapache
' M* n9 j: A5 v+ I' p' i7 O& h% Amkdir $dir_tmp
- d7 E: _2 A7 K) `7 _& r* y# \sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
" v! X$ l' H0 K, g7 j5 H: Xcd $dir_tmp
* i5 F' Q1 n  L* xtar zxf packages.tar.gz
- a8 t( G$ U$ `$ Q6 J  `+ S7 ztar jxf httpd-2.0.63.tar.bz2
: V. p  U/ D& Q- s' O9 m1 v" D( [1 ucd  httpd-2.0.630 |9 Y) w. |; {
./configure –prefix=/tmp/apache2
& B0 N& X0 |  q# f+ Ymake
8 m1 U" o# Z' j4 {+ P' R/ Imake install# ~. ^7 E/ L+ `
cd $dir_tmp, L9 }( Z) ~) g0 F
tar zxf mysql-5.0.33.tar.gz& @' J% @5 X9 W% i4 |
cd mysql-5.0.33
* ]* E' J, ~: E./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: R7 x/ ~) [( `0 S1 k% o1 ~/ Z
make7 u! ]6 F/ H, ^! _. H  L! f* C
make install
- h9 C1 h6 h/ N0 `& B, d, G: Iexit 0. M8 ]. {7 v5 o, A
#cat install.sh packages.tar.gz >install.bin2 D9 Y0 X8 W& j/ [9 N
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
0 T. n7 u" z, h1 C最主要的是下面这句,是将二进制文件从.bin文件里分离出来) J0 l# y' o$ M+ U7 }
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null* V6 w- A/ }; u0 z( A& u/ S
安装的时候直接执行
" `. M) j- d& {- n/ bsh install.bin5 O; _' F- K. R- y/ Z
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。" U+ U7 H$ j* R
——————————华丽的分割线——————————
! q+ Y% C  a$ q上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。9 R( _( H+ y# s, ]5 d2 [$ f
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:4 v8 r0 w8 {, [; w& R6 X) S
http://megastep.org/makeself/) b1 u. b- S, R
?0 ?0
发表于 2018-2-14 06:26:23 |中国| 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:
( _* p3 [/ v! _" S$ m5 c——————————华丽的分割线——————————/ t. {0 M; K) k" v. [$ ~
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:
- ]& q, @. F5 b! ^; ^|—————–|
+ |/ k% o9 Z9 X/ S1 x  ?! S|                       |3 A( K# d7 }# e9 r0 _
|     安装脚本      |& y% y4 M; ^/ _- F- ~
|                       |+ i8 j3 W+ ]$ y
|—————–|
, ]7 O7 k  Z$ l|                       |
8 z9 w4 ?" {5 w5 k( s|      程序            |. ]% D8 q! e, M- h$ g( h  u
|                       |
9 n- X: ~6 s* D; A7 \2 U4 y( S|—————–|: @3 G( r/ }1 |* q( g; |- }0 P; ]5 D! k
图: run安装包的结构
& q) d/ B$ d" C# `* U, k这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。0 ^7 w/ g' ^2 v+ J' j: N# H
制作run安装包以下举个实际的例子:4 e. ^0 C" m2 r  B( x& @, q
为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。7 e8 S) ?0 W! u! K: U3 n
$ ls
5 U. t9 ^% o# |, v# y  }install.sh helloworld# e5 K4 D3 n+ s! E9 @6 B9 M* ?
$ cat install.sh
0 T. |3 L) \# n- |  _' P: |#!/bin/bash  I% Z; ?6 E1 g$ U' ~& R4 e
cp helloworld /bin# d8 e/ r& t/ O9 j% o% |
$
! x* y% l& k8 T; o4 ]现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
" w) @; z5 ~, L2 S$ tar jcvf helloworld.tar.bz2 helloworld" x) l( D* F) t
现在修改一个安装脚本install.sh
1 w$ T8 V5 x4 m: C' v$ Q: u改为:
" x: E; G+ S' p# U# i#!/bin/bash' ^" h5 ~' g3 S
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
7 T% v  X. b7 K/ f# L0 d; vtail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。* A& h! [; X: E" j  A$ l; _/ K* z% D
tar jxvf /tmp/hellowrold.tar.gz
- \' N! I8 S7 `: d& v+ a3 qcp helloworld /bin
& u8 Q6 l, L0 ?1 w0 \  R, {exit 0
& `. B  o# k- C  L' T然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。' W0 Q$ T9 ^' u/ \  Q
$ cat install.sh helloworld.tar.bz2 > myinstall.run. l; p6 r! j" Y$ n3 \7 Y
这样就得到了myinstall.run文件,它的结构如下:; F' T, l$ G( G; f
|——————| 第1行
% b9 F7 [* R, ], C5 g  M. }|                         |
8 U; }4 A9 E1 D" F|    install.sh       |
: @3 r" O; p8 x% Z$ `: `* z|                         | 第6行3 Y& W0 l2 @" x, A9 |$ S
|——————|! q* p: f1 E! N7 [
|                         | 第7行
7 n6 ]( U8 q. P% J5 l! v+ t4 o7 z+ A|helloworld.tar.bz2 |
3 z2 X. j8 m: N. n* }' Y|                         |2 Q1 V& G% `0 n) A: \
|——————| 结尾
+ E2 e# W! f/ f  Z0 p4 m图: myinstall.run安装包的结构
! w* o' B5 V: V1 C% s运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。& q9 m% _! C) m: D% e
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
8 T9 X. G5 [4 \——————————华丽的分割线——————————& f4 s$ m" j1 a# \
linux 下制作二进制 .bin  的文件/ _5 \7 Q4 h6 K# ~! k2 Y  K& T
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
3 S2 q1 w: l0 I( u这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
0 b3 A" A% I) t! ?/ `例:制作安装apache、mysql的安装脚本包3 y; M' n+ u4 q4 l4 m+ ^
1.将源码包先打包; \3 {& X" k/ J' p+ G$ s" m
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz" d* B+ z* g* Y0 ?( C" b! H( H" d# O
2.编写脚本如下:+ r+ H$ i5 \3 V, \+ i* u
# cat install.sh0 c$ R: i! a% B8 p7 y
#!/bin/bash' |5 m8 B; Z9 ^( M7 I
dir_tmp=/root/installapache# M  a- Y/ Q, Y( B, l5 R4 n
mkdir $dir_tmp5 G$ a8 j* W, m' F: m! q. Q
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
+ f' s( {3 W6 ncd $dir_tmp& H1 B& j2 j, x" c( P$ o
tar zxf packages.tar.gz2 G# j1 K, n% w8 i4 u5 g. }
tar jxf httpd-2.0.63.tar.bz2
/ n. @  S( y0 r  {0 A' |4 Lcd  httpd-2.0.63
( Y) ~- Q* m* [./configure –prefix=/tmp/apache2" _( a- v8 L) K; y0 }+ Y/ n  C2 U
make- a% M) b* Y+ t1 h  i
make install
  T5 Q& f5 F& c5 zcd $dir_tmp9 _+ ]% m' y/ m2 v
tar zxf mysql-5.0.33.tar.gz+ f- }; y  w: C7 Q3 \
cd mysql-5.0.33) _% e4 [7 C1 w9 r/ 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( B$ \& p1 u0 v! Z: P
make
& H+ x' P! V9 k9 s! m: O3 Q; Y% cmake install
; W9 j1 U! m3 O; C3 ^' n8 p; j3 R. Iexit 0
' o5 m! n4 H3 v9 x8 X8 N#cat install.sh packages.tar.gz >install.bin( N" Y$ ^4 u3 z
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
  T3 s& J+ U1 T3 y! K4 v最主要的是下面这句,是将二进制文件从.bin文件里分离出来& H! c) _6 y' n0 u( j5 @
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
5 c4 J- f9 X3 o% X6 p安装的时候直接执行! M1 F4 D* O8 M8 F  q+ s) N
sh install.bin% K# J! Q8 i, s3 c2 ?: f
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
7 L6 u3 p' c: G, I9 h$ ~——————————华丽的分割线——————————* M  S: T( W/ c' d1 Q& o) s
上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。9 U5 |5 n2 L" v, R
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
; @8 B- C1 _# b8 R3 }( Ghttp://megastep.org/makeself/
. L! |* @4 d  ^) B) b+ M?0 ?0
发表于 2018-2-19 22:23:36 |中国| 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 |印度| 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 |辽宁| 显示全部楼层
就是贵呀1 c+ O' |1 B/ n/ ^# g8 C9 W. 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客服返回顶部