1.简介

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

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

Opkg的详细使用方法可以参考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 version 0.1.
root@OpenWrt:~#

2.opkg的默认值

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

3.opkg 各文件作用

dest 指定的目录,加到 Dest List 中,例如:
包安装、删除和升级的根目录
dest root /
dest ram /tmp 然后,连接这个路径分别和以下几个路径连接:
() 和 Info Directory 连接作为该 dest 的 Info Directory;
() 和 Status File 连接作为该 dest 的 Status File;
() 和 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 root root Oct info
drwxr-xr-x root root Oct lists
-rw-r--r-- root root Oct status
root@OpenWrt:~# 其中,status 文件为所有软件包的基本信息,包括名称、版本、依赖、状态、初始安装日期等,以 libc 为例:
Package: libc
Version: 0.9.33.2-
Depends: libgcc
Status: install hold installed
Essential: yes
Architecture: x86
Installed-Time:
Auto-Installed: yes Lists 文件夹下面是根据配置文件中的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: -
Depends: libc, kmod-ipv6, kmod-sit
Source: package/network/ipv6/6in4
Section: net
Maintainer: Jo-Philipp Wich <xm@subsignal.org>
Architecture: all
Installed-Size:
Filename: 6in4_17-1_all.ipk
Size:
MD5Sum: 6758bb49b2a828301bdac956481ec6c1
SHA256sum: 1ad5794959c8435c7ab4c261ab86d2974d65527f7b8ffa99eee370409993976c
Description: Provides support for 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-- root root Jul : barrier_breaker_base
-rw-r--r-- root root Jul : barrier_breaker_luci
-rw-r--r-- root root Jul : barrier_breaker_management
-rw-r--r-- root root Jul : barrier_breaker_oldpackages
-rw-r--r-- root root Jul : barrier_breaker_packages
-rw-r--r-- root root Jul : barrier_breaker_routing
-rw-r--r-- root root Jul : barrier_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
arch brcm4716
arch brcm47xx

这个例子允许在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 from other 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 in offline 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 /data arch 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.ipk wget 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

路由器04--OPKG的更多相关文章

  1. OpenWrt 路由器过滤广告的N种方法

    路由器已经成为每个家庭不可缺少的角色,手机.电脑.电视,凡是需要互联网的设备都要用到它.那么路由器除了给我们的网络设备分发网络外,还有其他用途吗? 现在很多人家里都用着智能路由器,智能路由器究竟怎么智 ...

  2. 搭建OpenWrt开发环境(包括编译过程)

    OpenWrt是一个高度模块化.高度自动化的嵌入式linux发行版,其编译和安装过程比普通的linux发行版而言,要简单太多了.如果您是新手,您那恐惧的心大可放到肚子里,呵呵.对于新手来说最麻烦的恐怕 ...

  3. ./scripts/feeds update -a OpenWrt大招系列

    ./scripts/feeds update -a Updating feed 'packages' from 'https://github.com/openwrt/packages.git' .. ...

  4. openwrt开发

    之前写过一篇日志,是关于如何搭建自己的OpenWRT开发环境.经过最近一段时间的开发学习和实践,对OpenWRT环境的开发有了一定的了解.在这里将我的开发心得做个整理. 1.搭建开发环境 首先,我们需 ...

  5. 如何在OpenWRT环境下做开发

    1.搭建开发环境 首先,在执行make menuconfig后,会出现下图: 其中,图中红框部分是我定制路由器的系统版本,大家可以根据不同的路由器进行不同的选择:绿框部分表示我们需要编译一个SDK开发 ...

  6. 低成本制作基于OpenWRT的渗透工具

    不知道你听说过Hak5的产品没有,它们可是黑客以及渗透测试人员的最爱.其中,有很多的PoC黑客工具都曾在热门美剧<黑客军团>中出现过.Hak5的 PACKETSQUIRREL 上架已经有好 ...

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

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

  8. openwrt<转载--openwrt框架分析 >

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

  9. 【转载】openwrt框架分析

    文章出处:http://blog.csdn.net/kingvenll/article/details/27545221 这次讲讲openwrt的结构. 1. 代码上来看有几个重要目录package, ...

  10. [转载]OpenWRT使用wifidog实现强制认证的WIFI热点 | 半个橙子

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

随机推荐

  1. [转]C++ 类中的static成员的初始化和特点

    在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同.以下测试编译环境为: ➜ g++ -v Using built-in specs. COLLECT_GCC=g++ Target: x ...

  2. scrapy 分布式爬虫- RedisSpider

    爬去当当书籍信息 多台机器同时爬取,共用一个redis记录 scrapy_redis 带爬取的request对象储存在redis中,每台机器读取request对象并删除记录,经行爬取.实现分布式爬虫 ...

  3. 齿轮 HYSBZ - 4602 (DFS实现)

    齿轮 HYSBZ - 4602 题意:很好理解就不啰嗦了. 致谢:感谢队友小明. 题解:嗯,一开始想到的是并查集,后来,就先看了另一道题,xj写dfs和暴力,就卡死了.于是来补这题了,前向星建图 题解 ...

  4. GFS中元数据的管理

    GFS 元数据(metadata)中包含三部分: GFS元数据的管理方式: 1.文件的命名空间和块的命名空间: 采用持久化的方式. 对于文件和块的命名空间以及从文件到块的映射:通过向操作日志登记修改而 ...

  5. dell如何安装Win10/Ubuntu双系统

    原文:https://www.cnblogs.com/askDing/p/10477345.html 测试环境: DELL PRECISION 7510: CPU:Intel Core i5-6300 ...

  6. c标签页面进行解析json

    JAVA代码中的后台 List<Map<String,String>> rs = new ArrayList<Map<String,String>>() ...

  7. 已安装gcc编译器,但./configure还是提示找不到编译器(分析)

    1.编译nginx前, ./configure检查提示找不到C编译器 [root@test nginx-]# ./configure checking for OS + Linux -.el7.x86 ...

  8. 深入理解JVM虚拟机5:虚拟机字节码执行引擎

    虚拟机字节码执行引擎   转自https://juejin.im/post/5abc97ff518825556a727e66 所谓的「虚拟机字节码执行引擎」其实就是 JVM 根据 Class 文件中给 ...

  9. java权限管理与用户角色权限设计

    java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...

  10. 《Glibc内存管理》笔记DAY5

    目录 分箱式内存管理 Unsorted bin Fast bins 核心结构体分析 malloc_state 内容来源 分箱式内存管理 Unsorted bin   Unsorted bin 可以看作 ...