动机

opkg是openwrt里的软件包管理器,类似mac下的brew、Ubuntu下的apt-get和centos下的yum。

但是为什么有很多同学都没办法在openwrt中使用opkg,其主要原因其实嵌入式的硬件繁多,不像我们一般PC只有i386和AMD64之分。

此方法适用于OpenWRT,Pandorabox,官方系统。

ps.工具链是什么?可以参考 http://wiki.openwrt.org/zh-cn/about/toolchain

举个例子:

老高用C语言写了一个HELLO_WORLD程序,然后使用交叉编译出适合小米路由mini的程序,然后拿到小米路由中去执行时执行不了的。因为硬件不同,程序运行的环境不同。

所以一个软件的发布是个很头大的问题,下图是chinadns的下载地址,大家数数有几个平台的编译版本:

chinadns的多平台

如何配置opkg

其实读懂了上面的例子,解决的方法其实很简单。

小米路由器mini的CPU为MTK MT7620A 单核580MHz,小米路由器的CPU为博通 BCM4709

mt7620a平台所需要的软件包,工具链等都能在这里找到:

http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/

有了以上的数据我们就可以开始配置opkg!

# 备份旧的
mv /etc/opkg.conf /etc/opkg.conf.bak

# 使用vi编辑配置文件
vi /etc/opkg.conf

此处更方便的方法是后台进入 系统->软件包->配置

openwrt软件配置

然后在输入框中输入以下内容(注意notice处,/mnt/sdb1/opkg为挂载U盘或移动硬盘的全路径)

dest root /
dest ram /tmp
lists_dir ext /etc/opkg-lists
option overlay_root /overlay
# notice
dest usb /mnt/sdb1/opkg

arch all 100
arch ramips_24kec 200
arch ramips 300
arch mips 400
arch unkown 500


src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz barrier_breaker_luci http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/luci
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

加速版本

使用了mirrors.ustc.edu.cn的反代加速

dest root /
dest ram /tmp
lists_dir ext /etc/opkg-lists
option overlay_root /overlay
# notice
dest usb /mnt/sdb1/opkg

arch all 100
arch ramips_24kec 200
arch ramips 300
arch mips 400
arch unkown 500


src/gz barrier_breaker_base http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz barrier_breaker_luci http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/luci
src/gz barrier_breaker_management http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/management
src/gz barrier_breaker_oldpackages http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages
src/gz barrier_breaker_packages http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/packages
src/gz barrier_breaker_routing http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/routing
src/gz barrier_breaker_telephony http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/telephony

更多源设置

以上源只是配置了基础的源,像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配置文件的后面就行!

如何使用opkg命令

配置完毕后我们就可以开始使用opkg工具了,下面老高简单的介绍几个常用命令。

# 打印帮助
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

使用opkg常见问题

错误 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

标签: router, xiaomi, pandorabox, opkg

已有 72 条评论

  1. 客气,外贸做啥的啊?

  2. Ali Ali

    * make_directory: Cannot create directory `//usr/lib/opkg': Read-only file system.

    1. 哪一步出现的?

    2. 二混子 二混子

      我也遇到了,我觉得是不同批次生产的mini参数并不相同,像我查到的处理器就是BCM4709C Cortex-A9双核1.4GHz,必须下载libc_0.9.33.2-1_brcm47xx.ipk版本的libc,但是也同样遇到了你的问题,我有点想放弃了

    3. 我执行 opkg install ***的时候都会这么提示

  3. Collected errors: * opkg_conf_load: Could not lock /var/lock/opkg.lock: Resource temporarily unavailable. 这个是什么原因

  4. 白小白 白小白

    高老师,请问还有别的软件源配置吗?Google了几个配置还是一直“Unknown package 'redsocks2'”

    1. 该网站受攻击了

    2. 原来是这样 后来我不改了 直接用自带那个更新 才正常 汗

    3. 用普通版本的代码就没有提示了..

    4. 但是已安装软件包里面会提示 500 内部服务器错误 对不起,服务器遇到未知错误。 Failed to execute call dispatcher target for entry '/admin/system/packages'. The called action terminated with an exception: Failed to execute template 'admin_system/packages'. A runtime error occured: [string "/usr/lib/lua/luci/view/admin_system/package..."]:38: table index is nil stack traceback: [C]: in function 'assert' ?: in function 'dispatch' ?: in function

    5. 我把你那段使用了mirrors.ustc.edu.cn的反代加速的代码复制系统->软件包->配置 然后到动作-刷新列表 然后弹出一个列表 Package kmod-ledtrig-netdev version 3.10.70-1 has no valid architecture, ignoring. Package dnsmasq-full version 2.71-4 has no valid architecture, ignoring. Package kmod-usb-cm109 version 3.10.70-1 has no valid architecture, ignoring. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/base/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/luci/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/management/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/packages/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/routing/Packages.gz. Downloading http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/telephony/Packages.gz. Collected errors: * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/base/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/luci/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/management/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/packages/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/routing/Packages.gz, wget returned 4. * opkg_download: Failed to download http://mirrors.ustc.edu.cn/openwrt/barrier_breaker/14.07/ramips/mt7620a/packages/telephony/Packages.gz, wget returned 4.

    6. 重启机器

    7. 高老师 那现在修复好了吗Collected errors: * opkg_conf_load: Could not lock /var/lock/opkg.lock: Resource temporarily unavailable. 我也是提示这个错误

    8. 我的反代出问题了

    9. 在我没修好前,是的

    10. 白小白 白小白

      也就是说您现在也没软件源用了?#_#

  5. 无名 无名

    500 内部服务器错误 对不起,服务器遇到未知错误。 Failed to execute call dispatcher target for entry '/admin/system/packages'. The called action terminated with an exception: Failed to execute template 'admin_system/packages'. A runtime error occured: [string "/usr/lib/lua/luci/view/admin_system/package..."]:38: table index is nil stack traceback: [C]: in function 'assert' ?: in function 'dispatch' ?: in function 老高,这是什么情况?

    1. 你也是小米路由吗?

    2. 你都做了啥操作?

    3. 无名 无名

      - -当然啊。小米路由mini

    4. 路径是 /etc/opkg.conf

    5. 无名 无名

      就是把你给的配置复制到系统->软件包->配置

  6. 请问 2015-05-09 01:06:24 (149 KB/s) - 'libc_0.9.33.2-1_ramips_24kec.ipk.2' saved [224073/224073] 提示这个,应该是libc下载完毕了 然后执行opkg install libc_0.9.33.2-1_ramips_24kec.ipk 提示 Installing libc (0.9.33.2-1) to ram... Installing libgcc (4.8-linaro-1) to ram... Downloading http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/libgcc_4.8-linaro-1_ramips_24kec.ipk. Configuring libgcc. Configuring libc. Collected errors: * opkg_conf_parse_file: /etc/opkg.conf:1: Ignoring invalid line: `t root /' 还是安装不上

  7. Yacyin Yacyin

    请问下面是什么情况 Installing curl (7.38.0-1) to root... Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for curl: * libc * libc * libc * * opkg_install_cmd: Cannot install package curl.

    1. 先执行一次
      opkg update

    2. Yacyin Yacyin

      老哥,全部搞好了,谢谢,我是外贸圈的朋友

  8. 是的

  9. 小米用户 小米用户

    我家的小米路由mini 已op 成pandorabox, 內核為3.4.103。現想安裝声卡,但只找到內核為3.3.8的kmod-sound-core 和 kmod-usb-audio 的內核模組。請問那裏有合適小米路由mini 和 內核為3.4.103 的內核模組下载? 我下载的image檔: http://downloads.openwrt.org.cn/ ... x-r583-20140827.bin openwrt_version : 12.09.1 target : ralink/mt7620 package 下载地址: http://downloads.openwrt.org.cn/ ... nk/mt7620/packages/ 谢谢!

  10. .小米用户 .小米用户

    請問有沒有教程參考?

  11. 模组的下载地址不好找,编译系统的时候应该会自动下载,参考以下 http://blog.csdn.net/manfeel/article/details/38302077

  12. 这个搞起来很麻烦,你可以Google一下 openwrt compile

  13. 请看文末

  14. Yacyin Yacyin

    #opkg install curl Unknown package 'curl'. Collected errors: * opkg_install_cmd: Cannot install package curl.

添加新评论