动机

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. EAI EAI

    我想为小米路由器HD配置opkg,CPU为IPQ8064

    求问这几条怎么改成IPQ8064用的

    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

    求老高大大指点

  2. rederry rederry

    配置后网页顶部出现
    This page contains the following errors:
    error on line 223 at column 23: colons are forbidden from PI names ':194'
    error on line 235 at column 1: ParsePI: PI :194 never end ...
    Below is a rendering of the page up to the first error.

    状态内显示
    500 内部服务器错误
    对不起,服务器遇到未知错误。

  3. kevin kevin

    亲自在Pandorabox 16.10上测试,新的软件源破坏了系统的内建命令,好吧,已成砖。

    1. 版本不通,肯定不能用啊

      1. kevin kevin

        我看你说的“此方法适用于OpenWRT,Pandorabox,官方系统”,然后Pandorabox 16.10也是基于openwrt 14.07 barrier breaker以为没问题。。。

  4. [...]小米路由器mini折腾之自动opkg篇 [...]

  5. Kxrr Kxrr

    反代了一下openwrt-dist, http://openwrt-dist.kxrr.us

  6. Jianwei Jianwei

    ustc的地址已经失效。。。(貌似更新无法自动跳转

    建议更替为 http://downloads.openwrt.org.cn/ 相关的.....
    替换一下

    1. Kxrr Kxrr

      不是失效了, 是该版本的wget不支持https, ustc的强制跳转到https了

    2. 某人_ 某人_

      太感谢了,正好需要

  7. lethland lethland

    Collected errors:

    * satisfy_dependencies_for: Cannot satisfy the following dependencies for libc:

    * libgcc *

    * opkg_install_cmd: Cannot install package libc.
    请问这是什么情况?

  8. 执行 opkg 的任何可能会修改文件的动作,都会报

    * make_directory: Cannot create directory `//usr/lib/opkg': Read-only file system.
    的错误,不知道为何

    已经尝试过将可设置的目录转移到 u 盘

    dest root /

    dest ram /tmp

    lists_dir ext /extdisks/sda1/etc/opkg-lists

    option overlay_root /extdisks/sda1/overlay

    # notice

    dest usb /extdisks/sda1

  9. 小林 小林

    Downloading http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages/vim_7.3-1_ramips_24kec.ipk.

    Collected errors:

    * satisfy_dependencies_for: Cannot satisfy the following dependencies for vim:

    * libc * libc * libc *

    * opkg_install_cmd: Cannot install package vim.

    刷的 潘多拉,小米mini

    修改
    删除 arch unkown 500这行就可以了

  10. Yacyin Yacyin

    建材类的,苦逼行业,东西都是傻大憨粗

  11. .小米用户 .小米用户

    高大哥,你的意思是自己重新编译一個新固件內核是3.3.8?

  12. Steven Steven

    请问当前的配置是否要给小米路由mini插一个U盘才能使用?dest usb /mnt/sdb1/opkg的意思是所有的程序会撞到U盘里?

    1. 不是 安装的时候可以加上-d 参数指定安装路径,比如 opkg -d usb install xxx 如果直接安装 opkg install xxx会安装到默认路径

  13. 二混子 二混子

    确实,最后图省事儿,刷了潘多拉,弄了好一周的好多问题,都没了

  14. SAVE SAVE

    高大哥 知道 raspberry pi 2 的openwrt在哪里有下载的嘛。。 我国内外找了好几天都未果

    1. https://dev.openwrt.org/browser/trunk/target/linux/brcm2708/bcm2709/profiles/RaspberryPi2.mk?rev=44403

  15. 老高,我看网上有人说r355这个固件PandoraBox是14.09的,看你的源是14.07 ,这个也能用?

  16. zhengnanlee zhengnanlee

    老高,Read-only file system. 一直出现。。原版系统

    1. 原版系统不适用

      1. leslie leslie

        原系统不适用怎么版,你那有可以用的系统么?我现在可以开启了ssh,但是,所有文件夹都是只读,根本没法用啊,有没有解决的方法呢!

    2. zhengnanlee zhengnanlee

      我是使用的原版系统,在opkg update时出现的错误是/usr等等的目录是只读的

    3. 二混子 二混子

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

  17. 老高,你好。这里的源,潘多拉那个固件也是通用的吗

    1. 是的,只要cpu不变

  18. 老高。能不能麻烦你写一个包含shadowsocks,Chinadns这几个软件包都编译在一起的openwrt-15.05的固件教程呢,我自个儿琢磨的很久,总是不得法,iptables也是要改的吗?

    1. 感谢你的辛劳,让小白学到了很多,另外冒昧地请求你补充一下iptables的一些常用设置,网上有很多,都是英文,看得头都炸了

    2. 等吧,前天入手了R6300V2,哈哈

  19. Collected errors: * opkg_conf_load: Could not lock /var/lock/opkg.lock: Resource temporarily unavailable. 请问老高怎么解决啊~ 重启无果。我手贱把刷好的shadowsocks删除了,我以为必须要删除了才能更新。结果。。。删除了再看不到了。

    1. 居然奇迹般好了~ - - 多刷新了几次就不报错了,囧

  20. 弱弱地问下,命令是在什么地方输入的?用PuTTY连接上路由器吗? ``` # 备份旧的 mv /etc/opkg.conf /etc/opkg.conf.bak # 使用vi编辑配置文件 vi /etc/opkg.conf ```

添加新评论