openwrt固件生成ipk的过程ipk文件到底是什么?
如何创建ipk
要创建ipk,我们要做的第一件事是创建一个目录树,其中包含将要安装的文件(并且只有这些文件)。例如,如果我们在/usr/bin中有一个可执行的foo,在/etc中有一个文件foo.conf。我们希望有以下结构:
ipkg-temp/ |-- etc | `-- foo.conf `-- usr `-- bin `-- foo
注意:你应该使用一个Linux分区来保存ipkg-temp。如果您使用msdos/fat/vfat分区,那么所得到的包中的权限将会完全混乱——这目前没有不利影响,但是如果pdaXrom支持多个用户,可能会导致问题。
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的文本文件
点击链接加入群聊三群:751529538
点击链接加入群聊二群:376877156
点击链接加入群聊【路由器交流群:622891808已满】
本站附件分享,如果附件失效,可以去找找看
饿了么红包