1.简介

https://oldwiki.archive.openwrt.org/doc/techref/opkg

Opkg 是一个基于 ipkg 的轻量级的软件包管理系统,主要用于嵌入式系统,目前应用opkg的有Open WRT 和 Open Embedded。

1Opkg的详细使用方法可以参考OpenWRT的 WIKI页面,不再赘述,本文将重点解释opkg的工作原理。OpenWRT Barrier Breaker 14.07 与 潘多拉不一样的系统(尤其注意源)root@OpenWrt:~# cat /etc/openwrt_release
DISTRIB_ID="OpenWrt"DISTRIB_RELEASE="14.07"DISTRIB_REVISION="r42625"DISTRIB_CODENAME="barrier_breaker"DISTRIB_TARGET="x86/generic"DISTRIB_DESCRIPTION="OpenWrt Barrier Breaker 14.07"DISTRIB_TAINTS=""root@OpenWrt:~# opkg --version
opkg version0.1.8root@OpenWrt:~#

2.opkg的默认值

注:由于我是在 OpenWrt Barrier Breaker 14.07上进行测试,所以在命令行上必须手动加上参数:-f /etc/opkg.confDEST LIST 目的地列表

3.opkg 各文件作用

dest 指定的目录,加到 Dest List 中,例如:包安装、删除和升级的根目录
dest root/dest ram/tmp然后,连接这个路径分别和以下几个路径连接:
(1) 和 Info Directory 连接作为该 dest 的 Info Directory;
(2) 和 Status File 连接作为该 dest 的 Status File;
(3) 和 Lists Directory 连接作为该 dest 的 Lists Directory。
以/为例://var/lib/opkg/info///var/lib/opkg/lists///var/lib/opkg/status
对比v0.1.8,这些目录是放在了 /usr/lib/opkg 下面:
root@OpenWrt:~# ls /usr/lib/opkg -l
drwxr-xr-x    2 root     root          8192 Oct  1  2014info
drwxr-xr-x    2 root     root          4096 Oct  1  2014lists-rw-r--r--    1 root     root         15932 Oct  1  2014status
root@OpenWrt:~#其中,status 文件为所有软件包的基本信息,包括名称、版本、依赖、状态、初始安装日期等,以 libc 为例:
Package: libc
Version:0.9.33.2-1Depends: libgcc
Status: install hold installed
Essential: yes
Architecture: x86
Installed-Time: 1412176159Auto-Installed: yesLists 文件夹下面是根据配置文件中的src/gz指定的URL下载下来的文件,例如:
src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/base
在执行 update 后,会使用下面的URL下载一个文件:
http://downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/base/Packages.gz文件下载后,将解压的文件放到 Lists 目录下面(索引文件),并把第二个字段(如上面的barrier_breaker_base)作为文件名,这个文件里面包含了该Package里面所有的软件包的信息,举一为例:
Package: 6in4
Version:17-1Depends: libc, kmod-ipv6, kmod-sit
Source: package/network/ipv6/6in4
Section: net
Maintainer: Jo-Philipp Wich <xm@subsignal.org>Architecture: all
Installed-Size: 1194Filename: 6in4_17-1_all.ipk
Size:1832MD5Sum: 6758bb49b2a828301bdac956481ec6c1
SHA256sum: 1ad5794959c8435c7ab4c261ab86d2974d65527f7b8ffa99eee370409993976c
Description:  Provides supportfor 6in4 tunnels in /etc/config/network.
Refer to http://wiki.openwrt.org/doc/uci/network for
configuration details.查看 Lists 目录下的内容(压缩了一些空白符):
root@OpenWrt:~# ls /var/lib/opkg/lists/ -l-rw-r--r-- 1 root root  485307 Jul 18 14:44barrier_breaker_base-rw-r--r-- 1 root root   43348 Jul 18 14:44barrier_breaker_luci-rw-r--r-- 1 root root    4634 Jul 18 14:44barrier_breaker_management-rw-r--r-- 1 root root  715082 Jul 18 14:44barrier_breaker_oldpackages-rw-r--r-- 1 root root  455216 Jul 18 14:44barrier_breaker_packages-rw-r--r-- 1 root root   34987 Jul 18 14:44barrier_breaker_routing-rw-r--r-- 1 root root  260681 Jul 18 14:44barrier_breaker_telephony
root@OpenWrt:~#

4.配置文件

默认的opkg.conf实际上包含三个目标地:

dest root /dest ram/tmp
dest mnt/ mnt

目标行的格式只是关键字dest,后跟此目标的名称(可以是任何内容),后跟文件系统位置。这样配置的任何目标都可以在opkg命令行中指定,如下所示:

opkg install somepackage -d destination_name

dest参数必须引用/etc/opkg.conf中定义的目的地之一,例如-d ram,以便将软件包安装到/tmp/。

默认情况下,opkg只允许包含体系结构all(=体系结构独立)和已安装目标体系结构的包。为了从一个外部但兼容的目标获取包,可以使用arch选项在opkh .conf中覆盖允许的体系结构列表:

arch all 100arch brcm4716200arch brcm47xx300

这个例子允许在brcm4716(一个特定的SoC)目标上安装brcm47xx(=系列的SoCs)包。这个数字指定了一个优先级索引,opkg使用该索引来确定在多个体系结构中可用的包时选择哪个包。优先级数值越大,执行级别越高,

5.命令

https://oldwiki.archive.openwrt.org/doc/techref/opkg

列出软件包命令list和更新upgrade稍有不同,在开始执行命令之前的准备工作,会读取lists 目录下的文件,这个文件的格式前面提到了。将所有文件内的每个软件包的信息都加载到内存中, 在读取文件的过程中,opkg会分析每个软件包的Architecture 字段,只有当该字段的值在 Arch List 中时,才会将该软件包加到 hash table 里面(opkg_config->file_hash)。下面的事情就比较简单了,list 就是将 file_hash 里面所有的软件包打印出来。
列出安装的软件包list-installed命令,并不会读取 lists 目录下的文件,而是读取 Status List 包含的每个文件,系统已安装的软件包会放到这个文件里面,然后将Status包含installed的软件包打印出来。

opkg status lua

files命令用于列出一个软件包所包含的全部文件,这些文件包括可执行文件、配置文件等。对于已安装过的软件包,则打开 $lists_dir 下面的软件包对应的 list 文件

 例如软件包 busybox,对应的list文件为/var/lib/opkg/info/busybox.list  这个文件包含了该软件包所包含的文件,每行一个。

 对于未安装的软件包,打印软件包尚未安装的错误信息:

 Search 命令则用于查找某个文件属于哪个软件包,可以使用通配符(使用fnmatch函数来进行模式匹配)。对应的函数为 opkg_search_cmd(),这个过程也比较简单:

 获取全部安装的软件包,依次查找每个软件包所包含的文件,如果包含要查找的文件,那么就打印出该软件包。

 这个函数也有一些缺陷,如果一个软件包所包含的文件,有多个可以匹配搜索的文件,那么结果该软件包就会被打印多次。以搜索ls为例,在base-files中有以下7个文件包含ls字符串:

 删除 remove

 (1) 检查Essential 标记:如果该软件包为Essential的,除非用户强制删除(使用–force-removal-of-essential-packages参数),否则opkg拒绝删除该软件;

 (2) 检查依赖:检查系统中有哪些其他的软件包依赖于要删除的软件包,如果有,那么打印出依赖于该软件包的其他软件包,然后结束删除动作;

 如果用户希望强制删除该软件以及依赖于该软件的所有其他软件,可以使用–force-removal-of-dependent-packages参数,opkg将首先删除依赖于该软件的其他软件;

 清理 clean

 清理就是删除cache文件夹下面的文件。

# 打印帮助
opkg -h# 更新资源列表
opkg update# 列出已安装的包
opkg list# 搜索包
opkg search shadowsocks# 安装软件,以安装curl和wget为例
opkg install curl
# 安装本地软件包
opkg install /tmp/wget_1.16-1_ramips_24kec.ipk # 移除软件
opkg remove wget

--force-depends    Install/remove despite failed dependencies--force-maintainer    Overwrite preexisting config files--force-reinstall    Reinstall package(s)--force-overwrite    Overwrite files fromother package(s)--force-downgrade    Allow opkg to downgrade packages--force-space    Disable free space checks--force-checksum    Ignore checksum mismatches--force-postinstall    Run postinstall scripts even inoffline mode--noaction    No action – test only--download-only    No action – download only--nodeps    Do not follow dependencies--force-removal-of-dependent-packages    Remove package and all dependencies--autoremove    Remove packages that were installed automatically to satisfy dependencies-t    --tmp-dir    Specify tmp-dir.

6.opkg配置(源一定要选对应的,可以省很多事)

pandorabox默认opkg配置

dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
src/gz r2_base http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/base
src/gz r2_management http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/management
src/gz r2_oldpackages http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/oldpackages
src/gz r2_packages http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/packages
src/gz r2_routing http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/routing
src/gz r2_telephony http://downloads.openwrt.org.cn/PandoraBox/ralink/packages/telephony

一个其他openwrt 版本的配置

修改安装源:vi /etc/opkg.conf
src/gz attitude_adjustment http://downloads.openwrt.org/snapshots/trunk/bcm53xx/packages/
dest root /data
dest ram /tmp
lists_dir ext /data/var/opkg-lists
option overlay_root /dataarch all 1 arch noarch 1 arch bcm53xx 10 最后一行加上二进制的兼容范围,系统默认只接受bcm4079的格式。 opkg update

注意:opkg会把包安装到/data目录而不是“/”目录。因为默认的root dest改了

目前我刷的openWrt是PandoraBox 14.09 r355,是基于openWrt Barrier Breaker的。使用的源地址是http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/

src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz barrier_breaker_management http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/management
src/gz barrier_breaker_oldpackages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages
src/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
src/gz barrier_breaker_routing http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/routing
src/gz barrier_breaker_telephony http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/telephony
dest root /data
dest ram /tmp
lists_dir ext /data/var/opkg-lists
option overlay_root /data

保存后运行opkg update。发现源是可以链接上了,但是报出类似于如下错误Package xxx version xxx has no valid architecture, ignoring.源指定的architecture和路由上刷好的系统的不一致造成的。

 在/etc/opkg.conf文件中加入对系统支持的architecture的设置,具体方法是添加如下几行

 arch all 100
 arch <arch类型1> 200
 arch <arch类型2> 300

 官网的意思是告诉opkg,arch类型2的包可以兼容的装在arch类型1的系统上。那么问题来了,现在的arch类型是什么呢?折腾了好久,我尝试过查看系统的arch,利用命令查看架构

 uname -a

 cat /proc/cpuinfo

 cat /etc/openwrt_release

 注意最后的arch为:

 arch all 100

 arch ramips_24kec 200

 arch ramips 300

 arch mips 400

如何挂载U盘,安装python https://blog.csdn.net/huyaoyu/article/details/42810383

7.ipk版本介绍:

http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_ar71xx.ipk  为ar71xx版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_arm.ipk  为arm版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_armv7.ipk  为armv7版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_ralink.ipk  为7620A(N)和7621潘多拉专用版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_ramips_24kec.ipk  为7620A(N)和7621 OPENWRT官版专用版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_x64.ipk  为X64版
http://code.taobao.org/svn/luci-app-adbyby/adbyby_2.7-7.0_x86.ipk  为X86版

8.关于ramips和mips

ramips 的 mtk7620是mipsel架构的。mips是指令集,sel和seb是内存大小端模式.
mips是big-endian的mips架构,mipsel是little-endian的mips架构。MT7620, 设计这个芯片的公司在被MTK收购前叫ralink, ramips是ralink生产的芯片系列在openwrt中的名称,mips是具体的芯片架构,rampis为厂商名

9.可用的源

即使潘多拉是openwrt的一个版本,但是它的安装源封闭,尽量不要用其他版本的

安装哪个版本的镜像就使用哪个版本的ipk(版本不通,肯定不能用啊)

https://archive.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/

https://archive.openwrt.org/

http://mirrors.ustc.edu.cn/lede/releases/17.01.1/targets/ramips/mt7620/packages/

http://downloads.openwrt.org.cn/

http://downloads.openwrt.org.cn/PandoraBox/

https://downloads.pangubox.com/pandorabox/

10.更多源设置

打印架构,直接配置(潘多拉可以使用吗?)

opkg print-architecture | awk'{print $ 2}'

http://openwrt-dist.kxrr.us/

以上源只是配置了基础的源,像openwrt-dist这种源,由于某种神秘力量导致我们无法直接使用,需要使用反代,老高发现一个不错的反代

src/gz openwrt_dist http://openwrt-dist.thankgfw.ml/releases/ramips/packages

src/gz openwrt_dist_luci http://openwrt-dist.thankgfw.ml/releases/luci/packages

把上面的代码加到opkg配置文件的后面就行!

10.常见错误

satisfy_dependencies_for: Cannot satisfy the following dependencies for curl: * libc * libc * libc * * opkg_install_cmd: Cannot install package curl.

解决办法:opkg update

错误 Unknown package 'redsocks2'.

解决方法:软件源配置错误,请选择合适的源

opkg_conf_parse_file: /etc/opkg.conf:1: Ignoring invalid line: `t root /'satisfy_dependencies_for: Cannot satisfy the following dependencies for redsocks2:
libc libc
opkg_install_cmd: Cannot install package redsocks2.

解决方法:libc需要手动安装

cd /tmp
# wget http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/libc_0.9.33.2-1_ramips_24kec.ipkwget http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/base/libc_0.9.33.2-1_ramips_24kec.ipk## 安装libc
opkg install libc_0.9.33.2-1_ramips_24kec.ipk

转载于:https://www.cnblogs.com/BlueFire-py/p/10846513.html

路由器04--OPKG相关推荐

  1. 小米路由器3 opkg安装

    小米路由器3 opkg安装 1.复制opkg到小米路由的/data路径下. 下载地址:http://sangbo.pub/soft/opkg/opkg 2.修改/etc/opkg.conf文件,替换为 ...

  2. openwrt php 吃内存,ipkg, opkg 与 openWrt

    ipkg 是 Itsy Package Management System 的缩写, 是类似与 Debian 的 dpkg 一样的, 专门用在嵌入式设备的轻量级包管理工具, 层被用在 OpenWrt, ...

  3. OPENWRT路由器设置

    几年前买了华硕RT-AC66U B1,刷了openwrt luci版,具体怎么刷的已经忘了,网上教程应该有的是,以后如果再刷再补充记录吧. 这次捣鼓到进不去openwrt管理界面,就从reset 路由 ...

  4. OpenWrt的一些心得

    OpenWrt的一些心得 https://blog.csdn.net/byb123/article/details/77921486/ 2017年09月10日 12:37:51 王三三 阅读数:181 ...

  5. openwrt转载--openwrt框架分析

    这次讲讲openwrt的结构. 1. 代码上来看有几个重要目录package, target, build_root, bin, dl.... ---build_dir/host目录是建立工具链时的临 ...

  6. 异构网络互联(计算机网络)

    目录 一.异构网络互连的复杂性 二.异构网络互连 三.网络互相连接的中间设备 四.路由器互连异构网络 五.网际层的 IP 协议及配套协议 一.异构网络互连的复杂性 1.不同的寻址方案 2.不同的最大分 ...

  7. OpenWRT使用Wifidog实现强制认证的WIFI热点

    首先安装wifidog到OpenWRT的路由器: opkg update opkg install wifidog wifidog依赖下面这些模块: iptables-mod-extra iptabl ...

  8. Buffalo G450h 变砖刷机

    G450刷openwrt的时候,采用mtd刷,发现变砖.红色diag灯一直闪烁,无法开机进入系统. 遇到这种情况有两种处理办法:1.采用tftp刷机:2.采用ttl线刷 建议采用tftp刷,该方法最简 ...

  9. OPENWRT 文本(shell) 配置支持oray的花生壳DDNS,Web也可以配置

    原作者是采用shell的方式进行配置,本人尝试了在web下面配置也可以成功.感谢原作者 首先SSH到自己的OpenWRT路由器上面 opkg update ##更新源 opkg install ddn ...

  10. Newifi Mini安装PandoraBox

    首先Newifi mini是一款很小巧美观的路由器,颜值即是正义嘛.再加上性价比高,易于刷写第三方系统,所以嘛,值得一买. 规格参数: WAN(10/100Mbps) LAN(10/100Mbps)* ...

最新文章

  1. 爬虫之lxml模块中etree.tostring函数的使用
  2. CF A. DZY Loves Hash
  3. [Apple开发者帐户帮助]二、管理你的团队(3)删除团队成员
  4. 用Veritas制作MSI文件,Active Directory系列之二十四
  5. python中read() readline()以及readlines()用法
  6. 查找算法---二分查找(递归方式)
  7. CNN 卷积神经网络结构转载
  8. 如何获取CSDN积分?
  9. 如何在msdn下载纯净文件
  10. oracle 10g 各版本下载地址
  11. wd移动硬盘插电脑没反应_西数移动硬盘-急急急!!!!!西部数据移动硬盘插在电脑上不显示盘符了,有人知道? 爱问知识人...
  12. 使用Connectify让电脑变为WIFI
  13. 电话簿简单实现(JAVA,带图形界面文件读取)
  14. 【狂神说Java】SpringBoot最新教程IDEA版通俗易懂
  15. Reveal Effect(揭露效果)低版本兼容
  16. 算法案例分析—字符串模式匹配算法
  17. iomega ix2 Android,Iomega Storcenter Ix2
  18. Flask学习推荐站
  19. linux sort排序及取前几条数据
  20. Python爬虫6:使用API及实例

热门文章

  1. flac怎样转换成mp3格式
  2. 计算机网络管理员二级考试题,计算机网络管理员(二级)操作鉴定试题A
  3. Python绘图——RGB颜色对照表
  4. Android 静默安装
  5. Android 应用开发---TextView(文本框)详解
  6. 在Linux下用sopcast/qsopcast收看网络电视
  7. 打印机服务器没有响应是怎么回事啊,打印机后台程序没有运行?(打印机后台服务无法启动怎么办?)...
  8. 浏览器与WEB服务器的网络协议
  9. GetClientRect、ScreenToClient、GetWindowRect、ClientToScreen、MoveWindow用法总结
  10. 数据结构与算法之图的深度优先遍历(DFS)