找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: xl6663792

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

[复制链接]
发表于 2018-1-21 22:02:09 | 显示全部楼层
谢谢,楼主分享,顺便来赚个猫粮
& T7 F- z! Q( I  q6 c+ O+ n) Z
发表于 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等安装包8 R$ N2 M* s' Q5 b
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:1 y, C& r- \4 V5 a; I2 q
——————————华丽的分割线——————————
7 |1 k& {/ n6 ]! c- l& K run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:8 {$ {( p* S) }9 f9 u3 A
|—————–|6 B+ J) l/ U* _8 p( r' N' I0 }7 |1 v
|                       |( k. P; H1 a! K. a8 N0 H8 ?
|     安装脚本      |
  p/ l% E% |( f1 _0 y6 w|                       |
4 c7 K, Y; G1 Z& u|—————–|
* k0 F! M6 F/ y: t7 |! C" a% m|                       |
7 ?7 F$ X6 h. P9 \. P- s$ d! B3 @1 H|      程序            |6 T" m9 X# m6 L; m3 D: O
|                       |9 L1 t$ ^! h: @! `0 Q9 {- z3 E; z
|—————–|
6 z) P; r4 B) ^5 A9 k图: run安装包的结构, Y0 v0 w/ N) k- Q( B" ]
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。& r5 S8 C& T) \7 n; I
制作run安装包以下举个实际的例子:
% H% q$ C' x& ^- i# F' y6 \" d为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。" V0 r: Z( b$ f$ q
$ ls
  a1 p" F" `0 k9 y2 F& G2 Uinstall.sh helloworld$ c8 }/ L& l0 l- ^3 U; J5 t/ i$ Y. Z
$ cat install.sh
& g+ x' V6 ]0 r3 z/ y3 c! J#!/bin/bash5 D) I- Y. ?8 l  M6 Y
cp helloworld /bin
& C( j  S5 j4 B6 y1 d7 Z. P& \  y$1 i$ b  U) d4 D$ a
现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:
" C2 {! y9 a# A% {3 _. ^" l% q  n$ tar jcvf helloworld.tar.bz2 helloworld! ~# F7 \' d( W
现在修改一个安装脚本install.sh
9 n6 b" g9 X7 z) ~8 O改为:
) ]2 N6 a3 k( U, g0 U#!/bin/bash) t" |" n+ O0 d) q$ p5 q
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
3 C4 u! w- |! m- |- n; ?( W$ i# P/ Z* Gtail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
) N$ s7 M: ]. x9 ?tar jxvf /tmp/hellowrold.tar.gz# K1 G  W6 a% |+ H2 s
cp helloworld /bin2 C! S* ^! O$ @" U
exit 0
2 |/ ^9 w, @- g: z然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。% [- U/ M# N' q% `: A# Q% z$ I" R
$ cat install.sh helloworld.tar.bz2 > myinstall.run) Q$ C1 I' x) o6 f$ S: R( l
这样就得到了myinstall.run文件,它的结构如下:8 i& s8 {; U2 a+ O0 ?5 `  \
|——————| 第1行' y/ Q& c6 y! ~& f
|                         |
/ q' s7 O; }% h" t8 \' f0 J|    install.sh       |
! p2 I/ o% a5 a+ c|                         | 第6行
3 t+ N  y" e6 Y: y|——————|
- _8 U& \5 _, ?. Y5 b7 X|                         | 第7行& z$ g1 \7 K% U: ]
|helloworld.tar.bz2 |
, d  z; r& z# ~# F1 Z, x3 y4 o|                         |
0 p9 C8 d) y" S/ O3 {/ [|——————| 结尾, ?- n2 `" E4 Y& H
图: myinstall.run安装包的结构; @  ]8 T3 r% ^0 G6 ^% u, t) @
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。
' k: E9 X# r5 Urun安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
9 M  ?) Q8 n+ n& h% u——————————华丽的分割线——————————
/ y; ^% J! `* a7 Z/ z2 r8 N% nlinux 下制作二进制 .bin  的文件$ p! A' @) V6 t" ?0 l
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里
) J2 G2 \- u1 M5 q3 L这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
! Q6 L- N+ }; g( @% O例:制作安装apache、mysql的安装脚本包
) P( F' ]8 b1 v( q% s& V1.将源码包先打包
, e" O# z) w2 o9 Z& N$ F  i#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz/ A/ q% I& N( J7 ]& U
2.编写脚本如下:
1 w4 U; |' g! q0 }# cat install.sh
8 u8 j0 D( {/ b/ M#!/bin/bash
# b$ l# n, L( D# h: a$ adir_tmp=/root/installapache
# A- @$ g# b, s# S7 I* t( P6 nmkdir $dir_tmp+ V1 O, D1 k: p: P
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null" _9 C0 g6 D: Y6 k& h' U4 f% f
cd $dir_tmp; t4 c3 L) z# [! i' W, a7 v
tar zxf packages.tar.gz
0 J" X1 E' n! k( j8 ?8 n- @tar jxf httpd-2.0.63.tar.bz23 u1 I# l4 f+ D( L( y2 ?7 P: k
cd  httpd-2.0.63
! U6 d  }9 [$ v4 M, [./configure –prefix=/tmp/apache2" A9 U5 ?4 C! g1 z
make
7 m/ f7 N- y: t/ vmake install
1 }  r0 m2 v$ n; A8 ~: O; t9 ]cd $dir_tmp
% O' u5 C  \; ?4 B% z, @) V/ star zxf mysql-5.0.33.tar.gz& e% c/ i: @/ O0 U& B4 }  Y% R
cd mysql-5.0.33
  R6 n* ]" {1 {8 B+ g./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+ h& V) e! U& D3 M- S
make+ ^. a* h  _( J3 N' R
make install  L% \3 h. k5 c- C7 Y: D8 J! a) W+ L- p
exit 0
; ]3 a' B% R4 U$ A* o! M# a#cat install.sh packages.tar.gz >install.bin
1 m, I' h+ @) y8 P# X+ Y. ?这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
+ x% w, O2 ~% N/ U# L6 ]最主要的是下面这句,是将二进制文件从.bin文件里分离出来( G8 U' x2 b, r  X! n+ X
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
/ E2 N& J) {$ M: Z# Y& P' [8 ~安装的时候直接执行
2 \5 C+ T- [$ e' j/ g3 E6 dsh install.bin( z2 V% O' [3 e2 c& m# P: _
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。, w) z% ~# {% ~$ T, D4 g
——————————华丽的分割线——————————
) `% C# C) U; z上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。* j% N6 Z2 `) }6 R  i& j
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:/ ?/ f$ {3 Z1 K% R: ^6 k+ p
http://megastep.org/makeself/' B0 h5 D" G& E5 _) ?; d
?0 ?0
发表于 2018-2-14 06:26:23 | 显示全部楼层
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。下面来看看两个简单的例子:2 M: `3 Y7 \9 H) u& ~
——————————华丽的分割线——————————' ^9 Z# y& t' \: R! u- a2 c
run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:; E. h! V! ?: S- j4 U- r- s
|—————–|
6 ^5 |: E! Q9 c/ I. x, \- u|                       |- v5 ^3 \  x% P- W. _# N
|     安装脚本      |7 A. V& B3 Z& A8 s2 Y+ t  \
|                       |# b" w, u2 [+ U- s) R$ d
|—————–|+ r( l; o5 r0 ]8 r6 w& f+ _' F4 l
|                       |! R5 a2 M& `$ e( U
|      程序            |
  P0 Z2 Z6 ?" U|                       |4 T/ q4 b) B; F% k! q& |
|—————–|
* @9 l) t( z0 ]. U% K图: run安装包的结构2 e" }$ O9 V; g- w, W+ L: A; c
这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。5 O5 e( U, M+ z
制作run安装包以下举个实际的例子:
1 n7 V4 U( d7 [为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。
6 c* |0 U" e6 F& A) J$ ls& u6 \: [$ L& [+ A- Q
install.sh helloworld
: Z3 j8 k+ O9 A- M! n. x" S$ cat install.sh# S* k, Z3 M. @/ j
#!/bin/bash, t  E2 }7 g1 r. C6 N3 k' J
cp helloworld /bin( r7 n" [& {% ?( F" \$ ?
$
$ j+ i) A3 P, O6 ?" o, l& }; C. h& r; }现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:9 G- x, z, ^" A7 x9 q- h
$ tar jcvf helloworld.tar.bz2 helloworld
- z6 H. G1 C2 u+ P) z2 ~: X现在修改一个安装脚本install.sh
: e+ t5 S( ~9 |5 q改为:
. b* F$ s  m% X5 n2 |, S- |- x#!/bin/bash  c- r( c6 i( s5 `) {$ G! M
lines=7      #这个值是指这个脚本的行数加1,这个脚本共有6行
5 b0 u5 x  F4 C# G: Stail +$lines $0 >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
1 m  B3 K' B! K9 ]$ p2 D3 w7 ytar jxvf /tmp/hellowrold.tar.gz
+ y* j4 K/ L0 j! W8 Mcp helloworld /bin* m# F# Q) f7 \- g# q. y4 Q
exit 0
$ r7 B1 _* ~6 U然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。% _) e  N( k& w$ W% N
$ cat install.sh helloworld.tar.bz2 > myinstall.run
: P" F) S7 v0 }& |+ {, _( z# g这样就得到了myinstall.run文件,它的结构如下:
+ E4 w/ o5 I  U. Y$ A4 H|——————| 第1行3 d8 ^& d: |3 M4 D, J7 c2 v/ i' a- D, l
|                         |0 A* s" }) s4 d5 f0 X
|    install.sh       |
; p; m- b9 a5 Q, p7 B0 i( ]|                         | 第6行
" ~) c: S; _! \|——————|! ^5 f" q0 C! l
|                         | 第7行" w$ A3 y, h( [5 J" ^5 o3 I6 Z" B
|helloworld.tar.bz2 |5 `- R) a! M# L/ ^4 h/ q* j" M
|                         |; q' Z/ A3 L9 R* Q+ E; C
|——————| 结尾
/ I' h2 A4 x# N4 d" _5 V9 D图: myinstall.run安装包的结构3 O  }# w$ i" c4 S
运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重 新生成了一个helloworld.tar.gz文件。再执行安装。1 _6 B! l0 `8 z5 M7 M. v4 c
run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。
, g8 B+ E( Q2 ~5 W, [——————————华丽的分割线——————————' A: j. M! @; \  i+ M" ?
linux 下制作二进制 .bin  的文件4 J  x; F( K7 X  S# q$ m0 z  }
制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里* k) ^( Q; ^5 w: @5 N8 f+ B2 }+ j
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。' I2 Z3 K1 K3 |5 l/ _# {, C
例:制作安装apache、mysql的安装脚本包
: |( b% L% g% y3 v* p( l- z+ K1.将源码包先打包, f9 E7 B& N$ G! X6 I  O) r
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
/ n3 {1 B; O, H1 f, T  L" \# M2.编写脚本如下:
3 u  H9 h2 w/ B# cat install.sh
$ {5 v% |' l! K& n! U#!/bin/bash/ n! Y- i. i4 p7 v
dir_tmp=/root/installapache0 t0 v6 {. F8 y7 i% e
mkdir $dir_tmp& z; C2 s! i) S
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
/ b9 r1 @4 R. `+ ~% C3 `cd $dir_tmp/ e# @( n0 _% |8 H
tar zxf packages.tar.gz$ F* Z$ L. I9 E; z- B, M$ T) m
tar jxf httpd-2.0.63.tar.bz2. C4 I! k8 p- K: M
cd  httpd-2.0.63
% J+ w' @" c6 y% i7 I. S. I( ?1 A./configure –prefix=/tmp/apache2
0 k% T( B. E! r# O5 emake
& r, \# F4 d: j- dmake install
8 H2 C, N2 g  c5 b2 }4 S) rcd $dir_tmp
: ]0 ^; Y+ Y4 U5 Gtar zxf mysql-5.0.33.tar.gz2 J' @$ e( J5 o4 |7 b7 N; D8 y$ H
cd mysql-5.0.33
! c& q  X; v: J, a./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  [$ l+ E& W+ [
make; o. m. k9 ^; z* P3 r8 H0 m# {
make install
! g& C6 r0 ^% Eexit 0
/ J1 ^: Q0 k# x! ?" w#cat install.sh packages.tar.gz >install.bin/ W; D5 o$ W; w- @
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到/ L( s1 I' j8 c  @) r7 Y
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
2 P$ O# o" N# a9 g7 }8 @* csed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
. D" G. I. O) Z) [  U* ?安装的时候直接执行( X& x: |) @1 l& f7 l, a3 O7 [  Y
sh install.bin' q6 j9 V' ^# H9 ^, J
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
' d% B# _+ X* Q——————————华丽的分割线——————————
) `( P& m& V# a: v上面两个例子,其实不管是bin也好run也好,其实Linux下一切皆文件,而且是不管什么文件,都是一样的看法。所以这些后缀没有什么意义。上面两个 不同的地方是分离,一个是用了tail命令,一个是用了sed来实现。总之,这只是一种思路,不管用什么办法,只要能合起来然后又分开就行。% a2 B0 }3 X# F, q- V  P: R
另外,有人写出了一个脚本来实现这样的功能,感兴趣的可以自己看一下:
6 U+ _7 m" V. k% T6 Z# rhttp://megastep.org/makeself/6 p% I- B# ]& }6 E* Y0 L
?0 ?0
发表于 2018-2-19 22:23:36 | 显示全部楼层
谢谢楼主分享,顺便来赚个猫粮
发表于 2018-3-18 17:34:54 | 显示全部楼层
谢谢! 虽然我没有下载
发表于 2018-3-24 17:35:08 | 显示全部楼层
就是贵呀
, `( _: a6 M1 t: L4 O. o" R. _( Z8 o就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀就是贵呀
发表于 2018-4-22 07:35:43 | 显示全部楼层
可以用吗,,问下大家,,
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

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

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2026-2-8 19:32 , Processed in 0.023679 second(s), 2 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表