linux ipk,openwrt下ipk生成过程及原理

大家都知道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格式,只是改了个名字而已!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenWrt是一个基于Linux的嵌入式操作系统,用于路由器和其他网络设备。IPKOpenWrt系统使用的软件包格式,类似于Debian系统的DEB包。在OpenWrt中,我们可以通过多种方法下载和安装IPK软件包。 首先,我们可以使用OpenWrt系统自带的包管理器opkg来下载和安装IPK软件包。在终端中输入以下命令可以更新软件包列表: ``` opkg update ``` 然后,使用以下命令来搜索特定的IPK软件包: ``` opkg list | grep keyword ``` 将"keyword"替换为您要搜索的软件包关键字。然后,可以使用以下命令来安装特定的IPK软件包: ``` opkg install package_name ``` 将"package_name"替换为您要安装的软件包名称。 此外,您还可以通过OpenWrt官方网站或其他第三方软件源下载IPK软件包。访问OpenWrt官方网站(https://openwrt.org/packages/start)的软件包页面,可以通过搜索或浏览不同的软件包类别来找到所需的软件包。选择所需的软件包后,下载相应的IPK文件即可。 下载完成后,将IPK文件传输到OpenWrt设备上。可以使用SSH或SCP等工具将文件传输到设备的/tmp目录下。然后,在设备上使用以下命令来安装IPK软件包: ``` opkg install /tmp/package_file.ipk ``` 将"package_file.ipk"替换为您下载的IPK软件包的文件名。 综上所述,要下载OpenWrtIPK软件包,您可以使用系统自带的opkg包管理器,或者从OpenWrt官方网站或其他第三方软件源下载IPK文件。然后,将IPK文件传输到设备上,并使用opkg命令进行安装。 ### 回答2: OpenWrt是一个基于Linux的操作系统,用于嵌入式设备,如路由器。它提供了许多功能和插件来增强路由器的性能和功能。IPKOpenWrt中用于安装软件包的一种文件格式。 在OpenWrt中,您可以通过几种方式下载IPK文件。首先,您可以直接从OpenWrt官方软件仓库下载IPK文件。通过访问OpenWrt的官方网站,您可以找到软件包列表,并从中选择所需软件包。找到所需软件包后,您可以点击下载链接,并将其保存到您的计算机中。 另一种下载IPK文件的方式是使用opkg命令。opkg是OpenWrt中的软件包管理工具之一。通过SSH登录到您的OpenWrt设备,然后使用opkg命令来搜索和下载软件包。例如,您可以使用"opkg update"命令来更新软件包列表,然后使用"opkg install <package_name>"命令来安装所需的软件包。 此外,您还可以使用第三方软件进行IPK文件的下载。有一些软件,如Wget和Curl,可以在OpenWrt设备上使用,并通过指定下载链接来下载IPK文件。 无论您使用哪种方式进行IPK文件的下载,确保您从可信赖的来源获取IPK文件。此外,还要确保所下载的IPK文件与您正在使用的OpenWrt版本兼容,以避免任何兼容性问题。最后,记得在下载和安装IPK文件之前备份您的设备数据,以防万一出现问题。 ### 回答3: OpenWRT是一个开源的路由器固件,它提供了更多高级的功能和定制选项。在OpenWRT上安装软件包可以扩展该固件的功能。 为了下载和安装OpenWRT软件包(.ipk文件),你可以按照以下步骤进行操作: 1. 首先,确定使用的OpenWRT版本。可以在OpenWRT官方网站或OpenWRT支持论坛上找到相关信息。选择与你的设备兼容的版本。 2. 找到OpenWRT软件包的官方源。官方源是存储OpenWRT软件包的服务器,其中包含了各种可用的软件包。可以在OpenWRT官方网站上找到官方源的链接或者通过搜索引擎搜索。 3. 打开命令行终端或SSH连接到OpenWRT设备。确保设备已经连接到互联网。 4. 使用wget命令下载所需软件包的.ipk文件。例如,假设要下载名为"package_name"的软件包,可以使用以下命令:wget http://官方源的链接/package_name.ipk 5. 下载完成后,可以使用命令opkg install package_name.ipk进行安装。在安装过程中,自动解决软件包的依赖关系并完成安装。 请注意,下载和安装OpenWRT软件包需要一定的技术知识和操作经验。在进行任何操作之前,请仔细阅读OpenWRT官方文档以确保正确操作,并确保软件包的来源可信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值