第7章 OpenWrt-OPKG
本章讲解了OPKG包管理工具。
OPKG(Open/OpenWrt Package)是 IPKG(Installing Packages)衍生版本,可以用于安装应用层ipk和驱动ipk等,在安装时会自动解决安装软件时的包依赖关系,如果遇见错误,就中止安装。
- OPKG工作原理
opkg命令执行与以下三个文件有关:
/etc/opkg.config: opkg的配置文件,内容如下:
dest开头这几行是定义了安装目录,格式: dest 安装目录名称 实际安装目录
安装目录定义之后,目的地址名称就可以在安装命令中引用了。安装时目的地址名称只能引用在/etc/opkg.conf 中定义的地址名称,例如“-d ram”表示软件将安装到临时目录 /tmp 下。
/usr/lib/opkg:保存的是已经安装的软件包信息,相当于Windows 操作系统中的注册表,它包括三个部分:
status文件表示软件包的安装状态,如下所示:
lists文件夹为空,具体什么作用还需要在看一下,
info文件夹是记录的每个软件包的文件列表、控制信息和依赖文件信息,如下所示:
- 常用的opkg指令
-
软件包更新:opkg update
该命令用于更新可以安装的软件包列表。
该命令不需要参数,执行时从服务器地址下载软件包列表文件并存储在/var/opkg-lists/目录下。
OPKG在安装或升级时需要读取这个文件,这个文件代表当前仓库中所有可用的软件包。 -
软件包安装:opkg install
该命令用于安装软件包,需要一个参数,传递一个软件包名称。如果软件包之间有依赖关系,会自动下载所有被依赖的软件包,并依次将所有被依赖的软件包安装上。 -
软件包卸载:opkg remove
该命令用于卸载软件包,需要一个参数,传递一个软件包名称。
需要注意的是,在安装时自动安装的软件包并不会删除,需要自己手动删除,或者在卸载软件包的同时增加 (–autoremove)参数将不需要的依赖包也删除。 -
查询可使用的软件包:opkg list
-
查询已经安装的软件包:opkg list-installed
-
列出已修改过的配置文件:opkg list-changed-conffiles
-
列出属于某软件包中的所有文件: opkg files pkgname
-
列出依赖某个包的软件包:opkg whatdepends /[-A/] pkgname
-
查询文件属于哪个软件包:opkg search file_path
ipk包结构
我们以第三章生成的hello world ipk为例,来了解一下ipk文件的构成。
ipk文件的本质是tar.gz压缩包,解压缩完成后生成3个文件,
debian-binary:debian-binary 是一个纯文本文件,包含字符串“2.0”, 表示格式为 debian2.0 格式。
data.tar.gz包含/bin/hello_world,表示安装时需要将文件安装到什么位置。
control.tar.gz解压缩后发现包含“control”、“postinst”、“prerm”。
“control”文件内容包含软件包名称、版本、依赖关系、所属分类、状态、优先级、平台架构和软件描述等。
“postinst”、“prerm”分别是执行安装前和卸载前需要执行的shell脚本,因为我没有在Makefile中进行自定义,所以这linagg
文件中的内容都是默认值。
我们在hello world工程下的Makefile中增加如下内容,
control.tar.gz中会增加一个post-pkg文件,内容跟Makefile中一致,