当前位置: 首页 > news >正文

opkg 安装包管理

1 ipk安装包说明

IPK 是 OpenWrt/LEDE 系统的软件包格式,类似于 Debian 的.deb或 Red Hat 的.rpm。它用于嵌入式设备上安装、升级或卸载软件。

1.1 ipk 文件架构

一个标准的 .ipk 文件包含以下部分(tar 解压查看):

control.tar.gz # 包的控制信息(依赖、版本、描述等)
data.tar.gz # 实际要安装的文件(二进制、脚本、配置文件等)
debian-binary # 包格式版本(通常是 "2.0")

1.2 IPK 包的控制信息

control.tar.gz解压后通常包含:

  • control​(包的基本信息)

  • preinst​(安装前执行的脚本)

  • postinst​(安装后执行的脚本)

  • prerm​(卸载前执行的脚本)

  • postrm​(卸载后执行的脚本)

control文件示例
Package: iperf3
Version: 3.17-1
Source: package/iperf3
License: GPL-2.0
Section: net
Maintainer: wangkai <lihe.Hex@org>
Architecture: all
Installed-Size: 574342
Description: Provides support for iperf3

字段

说明

Package

【必须】包名(必须唯一)

Version

【必须】版本号

Depends

依赖的包(如libc, librt

Source

源代码来源(通常是下载链接或代码仓库地址)

License

【推荐填写,避免法律风险】许可证类型(开源协议)

Section

分类(如net,utils

Architecture

【必须】支持的架构(如all(通用包),x86_64,arm

Maintainer

【必须】维护者信息

Installed-Size

【自动生成】包安装后占用的磁盘空间(单位:​KB​​)。

Description

【必须】包的描述

Installed-Size 通常由 OpenWrt 编译系统自动计算,无需手动填写,

计算逻辑:统计data.tar.gz中所有文件的总大小。

如果手动编写control文件,需自行计算并填写,实际安装大小可能略高于该值(因为文件系统开销)

2 opkg使用

2.1 常见命令行

命令行

说明

opkg update

从配置的软件源下载最新的软件包列表(类似apt update)。

opkg install <包名>

安装软件包

opkg remove <包名>

卸载安装包

opkg list-installed

显示所有已安装的软件包。

opkg list | grep <关键词>

搜索可用软件包

opkg info <包名>

显示包的版本、依赖、描述等信息。

opkg upgrade

升级所有的安装包

opkg download <包名>

将软件包下载到当前目录(不安装)

opkg clean

清除下载的临时包文件

opkg print_architecture

显示系统支持的架构列表

2.2 安装强制选项

命令行

说明

--force-reinstall

强制重新安装

--force-overwrite

强制覆盖冲突文件

--force-depends

忽略依赖检查

--force-space

忽略可用空间检查

--force-downgrade

允许降级安装

--force-postinstall

强制运行postinstall脚本

3、ipk打包脚本

#!/bin/sh # 验证参数个数 if [ $# -lt 3 ]; then echo "参数错误: <程序名称> <版本号> <架构类型>" exit 1 fi PKG_NAME="$1" # 程序名称 VERSION="$2" # 版本号 ARCH="$3" # 架构类型 # 显示参数值(调试用) echo "程序名称: $PKG_NAME" echo "版本号: $VERSION" echo "架构类型: $ARCH" # 当前脚本路径 cur_dir=$(dirname "$(readlink -f "$0")") data_dir="data" ctrl_dir="control" ctrl_file="control/control" # 切换到当前目录 cd ${cur_dir} # 清理旧文件 rm -f ${PKG_NAME}_*.ipk rm -f ${data_dir}.tar.gz ${ctrl_dir}.tar.gz debian-binary # 检查data目录是否存在 if [ ! -d "$data_dir" ]; then echo "错误:$data_dir 目录不存在" exit 1 fi # 检查control目录是否存在 if [ ! -d "$ctrl_dir" ]; then echo "错误:$ctrl_dir 目录不存在" exit 1 fi # 检查control文件是否存在 if [ ! -f "$ctrl_file" ]; then echo "错误:$ctrl_file 文件不存在" exit 1 fi # 打包数据 if ! tar -czf ${data_dir}.tar.gz -C ${data_dir} .; then echo "错误:$data_dir 打包失败!" exit 1 fi # 计算安装包占用空间 installed_size=$(du -sk $data_dir | awk '{print $1}') # 修改control文件信息 sed -i \ -e "s/^Package:.*/Package: $PKG_NAME/" \ -e "s/^Version:.*/Version: $VERSION/" \ -e "s/^Architecture:.*/Architecture: $ARCH/" \ -e "s/^Installed-Size:.*/Installed-Size: $installed_size/" \ $ctrl_file # 打包信息 if ! tar -czf "${ctrl_dir}.tar.gz" -C ${ctrl_dir} .; then echo "错误:$ctrl_dir打包失败!" exit 1 fi # 创建 debian-binary echo "2.0" > debian-binary # 生成IPK包(关键修复:检查ar命令) if ! tar -czf ${PKG_NAME}_${VERSION}_${ARCH}.ipk debian-binary ${ctrl_dir}.tar.gz ${data_dir}.tar.gz ; then echo "错误:生成ipk失败"; exit 1; fi # 清理临时文件 rm -f ${ctrl_dir}.tar.gz ${data_dir}.tar.gz debian-binary echo "成功: 生成安装包${PKG_NAME}_${VERSION}_${ARCH}.ipk"
http://www.jsqmd.com/news/1198243/

相关文章:

  • 【关注可白嫖源码】--课程设计--毕业设计--springboot3中医养生药膳推荐系统[编号:project11931](案件分析)
  • 【软考设计模式】桥接模式:抽象与实现分离,避免“类爆炸“与代码填空精讲
  • 华为OD机试高频题:简易内存池设计与实现详解
  • JavaScript的原型链-JS实现继承的底层机制
  • 大语言模型复读机问题:成因剖析与工程实践解决方案
  • HarmonyOS7股票组合看板实战:持仓汇总与盈亏计算
  • 【软考设计模式】享元模式:共享技术支撑海量细粒度对象与代码填空精讲
  • Windows系统Anaconda安装与环境配置避坑指南(2025版)
  • Wireshark实战:从网络协议分析到安全威胁检测
  • C++构造函数与析构函数:对象生命周期管理与RAII编程实践
  • C++高性能日志系统设计:从异步架构到无锁队列实现
  • 2026 年更新:濠江专业的沸石滤料公司怎么联系,打破水处理迷思:它如何让你的水质实现质的飞跃? - 企业推荐管【认证】
  • C++ union联合体详解:内存复用、类型安全与std::variant对比
  • Home Assistant实战1-1:使用Raspberry Pi Imager一键部署官方系统
  • 中国信通院”可信数据库”揭晓:TDengine 斩获 AI 大模型时序数据等三项专项
  • C++面向对象编程核心:封装、继承、多态实战解析与图形编辑器设计
  • C++轻量级Web框架Crow:快速构建高性能REST API与微服务
  • 全流程git操作命令
  • C++ Qt计算器开发实战:信号槽、状态机与MVC架构详解
  • Python毫秒级抢票系统:从网络请求到异步编程的实战解析
  • 2026年同城短视频与GEO优化结合,引流秘诀大揭秘!
  • C++实现LU分解:从数学原理到高性能代码的工程实践
  • C++实现醉汉随机行走:从蒙特卡洛模拟到工程实践
  • 从零实现C++矩阵变换库:深入理解仿射变换与齐次坐标
  • 华为交换机Web网管VLAN配置实战:从入门到精通
  • RimWorld开局大师的终极指南:如何用EdB Prepare Carefully完全掌控殖民者
  • 从听力答案到沟通艺术:解码《新视野大学英语》Unit 6中的现代生活与媒体素养
  • 亲身到店探访成都劳力士官方售后服务中心|完整网点地址及售后热线(2026年7月最新) - 劳力士官方服务中心
  • AI编程工具如何重构开发范式:从补全插件到代码工厂
  • 构建企业级NFS高可用集群:Keepalived+Sersync实战部署与调优