openwrt固件生成ipk的过程ipk文件到底是什么?

2022-10-07
0评论
/
800阅读
爱搜啊

如何创建ipk

要创建ipk,我们要做的第一件事是创建一个目录树,其中包含将要安装的文件(并且只有这些文件)。例如,如果我们在/usr/bin中有一个可执行的foo,在/etc中有一个文件foo.conf。我们希望有以下结构:

ipkg-temp/
|-- etc
|   `-- foo.conf
`-- usr
   `-- bin
       `-- foo

注意:你应该使用一个Linux分区来保存ipkg-temp。如果您使用msdos/fat/vfat分区,那么所得到的包中的权限将会完全混乱——这目前没有不利影响,但是如果pdaXrom支持多个用户,可能会导致问题。

openwrt固件生成ipk的过程

1.编译后安装应用程序

进行make安装时要小心。如果在zaurus上编译,可能会很容易填满/ root分区。如果你是交叉编译,你可能会把应用程序安装在你的桌面电脑上(可能会破坏一些东西)。

最好将安装的输出重定向到一个日志文件中,以确保您可以找到哪些文件放在了哪里:

make install 2>&1 > installation.log.

1.1 DESTDIR

经典创建的Makefiles”。/configure "脚本通常会考虑变量DESTDIR。如果设置了“make install ”,将在DESTDIR指向的目录下安装应用程序,而不是在/中。例如,要设置它,您可以键入(更喜欢完整路径而不是相对路径):

make DESTDIR=/home/ubuntu/links-2.1pre20/ipkg-temp/ install

但是并不是所有的makefiles都考虑DESTDIR,为了检查这一点,我通常这样做:

grep DESTDIR Makefile

If it returns something, then there is a good chance that DESTDIR is valid.

1.2另一个可能的诡计

我在zaurus上使用的一个技巧是在/usr/local上挂载一个分区(例如,在我知道我的应用程序将使用- prefix=参数进入/usr/local的情况下):

mkdir -p /mnt/card/ipkg-tmp/usr/local
mount -bind /mnt/card/ipkg-tmp/usr/local /usr/local
make install 2>&1 > installation.log
umount /usr/local

Now my application is now installed in /mnt/card/ipkg-tmp and the content of /usr/local is not modified.

2.剥离二进制文件

在发布ipk之前,最好先去掉二进制文件。这是/bin下的可执行文件,也是共享库。

arm-linux-strip myexecutable

this will reduce the size of you binaries.

去釉是一个重要的步骤,因为这一操作节省的空间可能很大。

Sometimes the Makefile provides an install-strip target, that will strip the binaries for you. You might want to try to use make install-strip instead of the classic install.

3.删除文档

通常,您的应用程序会附带文档。您可能需要从ipk中删除手册页和信息页。由您决定是否删除文档。

尽量把你认为不重要的东西去掉。并非所有的zaurus用户都有4G微硬盘。

您还可以创建两个独立的包,一个包含应用程序,一个包含文档。让您的用户决定是否安装该文档。

4.图书馆

当你编译一个库的时候,一般来说你可以把被剥离的. so.x.x文件放到你的ipk里,然后把剩下的去掉。(.海拉....).在大多数情况下,这对于使用该库的应用程序来说已经足够了。

然而,如果您花时间制作包含所有文件(头文件)的第二个ipk,这是一件好事。静态库..).

通过在包名后面加上“-devel”后缀来命名第二个ipk。这个ipk对于那些想编译依赖于你的库的应用程序的人来说会很有用。

5.在菜单中创建快捷方式

如果你想在菜单和桌面上添加一个快捷方式,你应该添加一个文件foo.desktop (foo是我们应用程序的名字)。的。桌面文件如下所示:

[Desktop Entry]
Exec=emacs -fn 8x13
Icon=emacs.png
Terminal=false
Type=Application
Categories=Application;Office;WordProcessor;X-Red-Hat-Base;
StartupNotify=false
Encoding=UTF-8
Name=Gnu Emacs

3个最重要的字段是:

  • Exec指定将要执行的命令

  • 指定将出现在图标旁边的标签的名称

  • 为图标指定图标文件的图标。如果没有指定路径,你应该把图标放在/usr/share/pixmaps中

For our foo package our directory tree will look like this:

ipkg-temp/
|-- etc
|   `-- foo.conf
`-- usr
   |-- bin
   |   `-- foo
   `-- share
       |-- applications
       |   `-- foo.desktop
       `-- pixmaps
           `-- foo.png

如果想给rox加个快捷方式,可以在/usr/apps/里面找。

6.控制文件

接下来,我们需要编写一个名为control的文件。这个文件将描述我们的应用程序。该文件的每一行都包含以下形式的条目:

field : value

您应该将该文件与其他文件一起放在目录控件中。像这样:

ipkg-temp/
|-- CONTROL
|   `-- control
|-- etc
|   `-- foo.conf
`-- usr
   |-- bin
   |   `-- foo
   `-- share
       |-- applications
       |   `-- foo.desktop
       `-- pixmaps
           `-- foo.png

一个非常简单的控制文件如下所示:

make install 2>&1 > installation.log.0

6.1包装

该字段是您的包的名称,通常是您的应用程序的名称。它应该只包含字母数字字符或'-'。

不要在包名中加下划线,下划线是用来分隔ipk文件名的不同部分的。例如,如果你想让一个文件包使用foo-doc这样的名字,而不是foo_doc

6.2版本

您的包的版本。通常反映应用程序的版本。不要把a _放在里面。

6.3架构

对xscale使用armvtel,否则使用arm。如果你是为pxa270编译的,可能会有类似armvetil的东西,尽管目前似乎还没有约定...

6.4维护者

请输入您的电子邮件地址,而不是应用程序创建者的电子邮件地址。你的地址可能更有趣,因为如果有人想编译应用程序的新版本,你可能比最初的开发者更有帮助。

6.5描述

描述应用程序的一些词语。请记住,描述应该停留在以“描述:”开头的那一行。它可以是很长的一行,但必须是一行。写的时候不要按回车键。

6.6看情况

这个字段应该是一个由包名空格分隔的列表。ipkg将在安装您的应用程序之前检查这里列出的包是否已经安装,并自动安装缺少的包。

检查依赖关系的一种方法是使用“ldd”来查看应用程序使用的共享库列表。然后,您可以使用“ipkg search libfile.so”来查找包含libfile.so的包

例如,如果我想找到mc的依赖项,我可以:

make install 2>&1 > installation.log.1

and I will add :

make install 2>&1 > installation.log.2

And so on.

6.6其他领域

您可以向控制文件添加其他字段,例如“Source: http://foo.org”

7.前一天,后一天,前一天,后一天

您可以向包中添加四个脚本:

  • preinst:这个脚本将在安装之前执行,即在文件被复制之前。

  • 注意:这个将在安装完成后ipkg-link之前执行,即文件将出现在目标目录中,而不是/

  • prerm:这个将在文件被删除之前执行,但是在ipkg-link ie之后,文件将出现在目标目录中,但是/中的符号链接将不再存在

  • postrm:这个在文件被删除后执行

Place these scripts in the CONTROL directory, together with the control file.

您可以在这些脚本中使用PKG根变量来获取软件包现在/曾经/将要安装的目标目录。

8.最后:ipk

8.1创建包

不要尝试手工制作ipk。使用mkipkg提供的这里。该脚本也在cross和native sdk中提供,但是它与tar的一些最新版本不兼容。

mkipkg将发现您的控制文件或其他地方可能存在的错误。如果mkipkg失败,请仔细检查您的控制文件。

当你有一个像这样的树形结构时:

ipkg-temp/
|-- CONTROL
|   `-- control
|-- etc
|   `-- foo.conf
`-- usr
   |-- bin
   |   `-- foo
   `-- share
       |-- applications
       |   `-- foo.desktop
       `-- pixmaps
           `-- foo.png

just do:

make install 2>&1 > installation.log.4

and the ipk will be created for you.

8.2包装

ipk包是tar.gz文件,名为:

make install 2>&1 > installation.log.5

it contains three files:

  • 包含控制文件和前置后处理脚本的control.tar.gz

  • 包含应用程序文件的data.tar.gz

  • debian-binary是一个包含2.0的文本文件


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件


于2022-10-07发布