大家都知道openwrt的软件包是ipk格式的,使用opkg命令来安装软件包

那么请问ipk是如何生成的?ipk文件本质是什么?

不过不知道也无妨,因为我们一般开发的无需知道这个,只要知道怎么使用即可!但是。。。我蛋疼,必须追根究底的看下!

linux下生成ipk

用百度搜索基本都是没用的,没有人点到问题上!于是谷歌。。

标题为:How to create an ipk,着太有用了,虽然不是说openwrt上如何实现的,但是会有很多提示,也讲解了ipk如何生成的。

重要的东西在最后

8. Finally: the ipk

8.1 Creating the package

Don’t try to make the ipk by hand. Use the mkipkg provided here. The script is also provided in both the cross and native sdk but it is not compatible some recent versions of tar.

mkipkg will uncover the possible errors in your control file or elsewhere. If mkipkg fails double-check your control file.

When you have a tree structure like:

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

ipkg

-

temp

/

|

--

CONTROL

|

`

--

control

|

--

etc

|

`

--

foo

.conf

`

--

usr

|

--

bin

|

`

--

foo

`

--

share

|

--

applications

|

`

--

foo

.desktop

`

--

pixmaps

`

--

foo

.png

just do:

Shell

1

mkipkg

ipkg

-

temp

and the ipk will be created for you.

ok!从上面可以看出生成ipk需要的文件和文件夹,以及需要的命令mkipkg,有兴趣的同学可以在linux试试!

openwrt上ipkg的实现

那么在openwrt的sdk里面怎么实现的呢,顺着上面的思路,find搜索下ipkg相关的文件

Shell

1

2

3

4

5

6

7

8

9

10

jack

@

openwrtdl

:

~

/

10G

/

cc

$

find

-

name

"*ipkg*"

.

/

feeds

/

luci

/

modules

/

luci

-

base

/

luasrc

/

model

/

ipkg

.lua

.

/

feeds

/

luci

/

modules

/

luci

-

base

/

luasrc

/

model

/

ipkg

.luadoc

.

/

feeds

/

luci

/

modules

/

luci

-

mod

-

admin

-

full

/

luasrc

/

model

/

cbi

/

admin_system

/

ipkg

.lua

.

/

feeds

/

luci

/

modules

/

luci

-

mod

-

admin

-

full

/

luasrc

/

view

/

admin_system

/

ipkg

.htm

.

/

include

/

package

-

ipkg

.mk

.

/

scripts

/

ipkg

-

build

.

/

scripts

/

ipkg

-

make

-

index

.sh

.

/

scripts

/

make

-

ipkg

-

dir

.sh

.

/

scripts

/

.ipkg

-

build

.swp

从上面一部分的搜索结果看到一个特殊的,./scripts/ipkg-build这个文件,查看下这个文件的内容,发现正是这个bash脚本文件生成相关的ipk

文件内容太长,我就不贴出来了,仅仅贴出最后几行重要的命令,里面echo中带有jack:的都是自己加入的打印,更好的了解点ipk生成过程

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

tmp_dir

=

$dest_dir

/

IPKG_BUILD

.

$

$

mkdir

$tmp_dir

#加入自己的打印,确定一些变量值

echo

"jack:tmpdir=$tmp_dir"

echo

$CONTROL

>

$tmp_dir

/

tarX

# Preserve permissions (-p) when creating data.tar.gz as non-root user

#生成data.tar.gz的压缩包

(

cd

$pkg_dir

&&

$TAR

$ogargs

-

X

$tmp_dir

/

tarX

--

format

=

gnu

-

czpf

$tmp_dir

/

data

.tar

.gz

.

)

installed_size

=

`

stat

-

c

"%s"

$tmp_dir

/

data

.tar

.gz

`

sed

-

i

-

e

"s/^Installed-Size: .*/Installed-Size: $installed_size/"

\

$pkg_dir

/

$CONTROL

/

control

#生成control.tar.gz压缩包

(

cd

$pkg_dir

/

$CONTROL

&&

$TAR

$ogargs

--

format

=

gnu

-

czf

$tmp_dir

/

control

.tar

.gz

.

)

rm

$tmp_dir

/

tarX

#生成debian-binary

echo

"2.0"

>

$tmp_dir

/

debian

-

binary

pkg_file

=

$dest_dir

/

$

{

pkg

}

_

$

{

version

}

_

$

{

arch

}

.ipk

echo

"jack:pkg_file=$pkg_file,pwd=$PWD"

rm

-

f

$pkg_file

#重要的命令:生成最后的ipk文件

(

cd

$tmp_dir

&&

$TAR

--

format

=

gnu

-

zcf

$pkg_file

.

/

debian

-

binary

.

/

data

.tar

.gz

.

/

control

.tar

.gz

)

[

-

f

$pkg_file

]

&&

echo

"jack:${pkg}_${version}_${arch}.ipk is ok!!"

#删除中间文件

rm

$tmp_dir

/

debian

-

binary

$tmp_dir

/

data

.tar

.gz

$tmp_dir

/

control

.tar

.gz

rmdir

$tmp_dir

echo

"Packaged contents of $pkg_dir into $pkg_file"

从上面的脚本可以看出,生成ipk之前先生成了几个重要的文件debian-binary data.tar.gz control.tar.gz,分别保存版本信息、数据内容、ipk的信息,安装方法等

从最后的生成ipk的过程看,其实ipk格式就是tar.gz格式,只是改了个名字而已!

linux ipk,openwrt下ipk生成过程及原理相关推荐

  1. 第3章 OpenWrt应用层ipk编写及编译

    第3章 OpenWrt应用层ipk编写及编译 3.1 代码的编写 在package目录下新建hello_world文件夹,最终目录结构如下图所示: 编写c文件,文件为src/hello_world.c ...

  2. linux shell 原理,linux下shell的工作原理

    linux下shell的工作原理 2009-12-8 10:19:53   出处:https://www.yqdown.com shell是用户和Linux操作系统之间的接口.Linux中有多种she ...

  3. linux下文件删除的原理精华讲解(考试题答案系列)

    说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息.http://oldboy.blog.51cto.com/2561410 ...

  4. Linux下调试器工作原理

    Linux下调试器工作原理之一-基础篇 介绍关于Linux下的调试器实现的主要组成部分--ptrace系统调用.本文中出现的代码都在32位的Ubuntu系统上开发.请注意,这里出现的代码是同平台紧密相 ...

  5. unantu下的tmp文件夹_tmp是什么文件?Linux系统清理/tmp/文件夹的原理

    .tmp 文件大部分都是因为不正常关机.或死机后所留下的文件,这些临时的暂存盘,在你重新开机后,已经没有任何的用途,可以放心删除.大家在使用Windows操作系统的时候,可能会经常在C盘根目录发现一些 ...

  6. 路由器 刷 linux系统版本,一个小型的无线路由器 Linux 系统OpenWRT[转]

    一个小型的无线路由器 Linux 系统OpenWRT分类:电脑技术 » linux应用    出处:网络   OpenWRT - (http://www.openwrt.org) 开发板: 十几种市面 ...

  7. Linux 2.6 下通过 ptrace 和 plt 实现用户态 API Hook

    (转载兼整理)Linux 2.6 下通过 ptrace 和 plt 实现用户态 API Hook 这厮此文写的相当实用,不知道为啥不好好整理一下,得,我代劳了吧.作者:l04m33@gmail.com ...

  8. linux查找日期目录,详解Linux查找目录下的按时间过滤的文件

    在维护项目中,有时会指定都一些条件进行过滤文件,并对该批文件进行操作:这时我们将使用shell命令进行操作:直接上代码 #!/bin/sh #BEGIN #`find ./ ! -name " ...

  9. (转载兼整理)Linux 2.6 下通过 ptrace 和 plt 实现用户态 API Hook

    这厮此文写的相当实用,不知道为啥不好好整理一下,得,我代劳了吧.作者:l04m33@gmail.com,原文.去看一眼就知道我干嘛干这个脏活儿了... 感觉这篇文章有上首页的素质,可惜不是我自己写的, ...

  10. linux依据时间过滤文件,详解Linux查找目录下的按时间过滤的文件

    在维护项目中,有时会指定都一些条件进行过滤文件,并对该批文件进行操作:这时我们将使用shell命令进行操作:直接上代码 #!/bin/sh #BEGIN #`find ./ ! -name " ...

最新文章

  1. 基于Pygame写的翻译方法
  2. 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
  3. unexpected symbol、unexpected end of input
  4. oracle em 乱码问题
  5. 第6章 数组----复制数组
  6. 四川航空签约神策数据,航司沉淀数据价值
  7. 为什么我的理论和实践之间的差距相对较大
  8. 如何在word文档中添加附件
  9. 设计和实现一个 Chrome 插件提升登录效率
  10. 机器学习算法总结--朴素贝叶斯
  11. ~~Bellman-Ford算法
  12. html军事学校模板,军事训练学校网站模板
  13. Cookie-Session机制
  14. CentOS6.4 X86_64 kvm+PXE备忘
  15. html指南针绘制,Fireworks绘制指南针详解
  16. 纬创软件本社对日JAVA开发
  17. Openerp部分学习资料
  18. 复变函数与积分变换matlab,MATLAB软件在《复变函数与积分变换》教学中的几点应用...
  19. python随机生成小写字母表_用小写字母生成大随机字符串的最快方法
  20. 阿里副总裁人设翻车:30岁成AI顶尖科学家,但我很懒

热门文章

  1. 出租车计费程序php,出租车计价器VHDL程序
  2. 51单片机SG90舵机控制原理
  3. 使用BoundsChecker
  4. Android对话框处理
  5. FFmpeg如何设置编码器私有参数
  6. QGC调试px4固件飞控
  7. ftp服务器连接不了文件路径,Serv-U和CuteFTP无法连接FTP服务器问题解答
  8. couchbase使用
  9. 变速精灵试用 目前唯一支持Vista加速
  10. 良心安利东方 rpg游戏制作大师素材网站