当前位置:   article > 正文

【笔记】openwrt - opkg (资料整理)_opkg配置软件源

opkg配置软件源

在这里插入图片描述

介绍

OPKG(Open/OpenWrt Package)IPKG(Installing Packages,为嵌入式系统重新实现了 Debian 工具 dpkg、apt 和 apt-get 的功能) 的克隆,可以在独立的目录安装软件,还可以用于安装内核模块和驱动等,在安装时会自动解决安装软件时的包依赖关系,如果遇见错误,就中止安装。

OPKG 尽可能保持与 ipkg 的向后兼容性,并符合 debian 关于控制文件的策略手册的子集

OPKG 基本操作

# (从软件源)更新软件信息
opkg update

# 安装指定的软件包(<pkg>)
opkg install <app>
# (同时安装依赖)
# (若内核版本不对会报错)

# 查看软件包信息
opkg info [pkg|regexp]

opkg remove

# 列出所有可使用的软件包
opkg list
# 格式:
# 软件包名称 – 版本 – 描述

# 用于列出提供文件名的软件包
opkg search <file|regexp>
# 查询某个文件属于哪个软件包
# 如 opkg search /usr/bin/netcat 

# 用于列出软件包名称和<regexp>匹配的软件包
find <regexp>

# 列出系统中已经安装的软件包
opkg list-installed

# 列出用户修改过的配置文件
opkg list-changed-conffiles

# 列出属于这个软件包(<pkg>)中的所有文件
opkg files <pkg>

# 列出这个软件包的依赖
opkg whatdepends [-A] [pkg]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

例子:安装svn客户端

svn工具介绍:我们想要安装一个 svn 工具,可以将路由器中的内容直接提交到代码库中。

$ opkg update

# 搜索
$ opkg list |grep svn
# svn找不到找全称subversion
$ opkg find *subversion*
subversion-client - 1.14.1-1 - Subversion is a free/open-source version control system. 
...
subversion-libs - 1.14.1-1 - Subversion is a free/open-source version control system. 
...
subversion-server - 1.14.1-1 - Subversion is a free/open-source version control system. 
...

# 下载
$ opkg install subversion-client

# 检察安装的文件
$ opkg files subversion-client
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

OPKG 目录

OPKG 一般放在 /bin/opkg /usr/lib/opkg /etc/opkg 这几个目录下

$ whereis opkg
opkg: /bin/opkg /usr/lib/opkg /etc/opkg
  • 1
  • 2

其中 /bin/opkg 是可执行文件

$ cd /bin
/bin$ ll | grep opkg
-rwxr-xr-x    1 root     root        155139 Apr  3  2022 opkg*
  • 1
  • 2
  • 3

/etc/opkg 下存放配置文件

/etc$ ll | grep opkg
drwxr-xr-x    1 root     root          4096 Apr  8  2022 opkg/
-rw-r--r--    1 root     root           108 Apr  3  2022 opkg.conf

/etc$ tree opkg
opkg
├── customfeeds.conf
├── distfeeds.conf
└── keys
    ├── xxxxx
    └── xxxxx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

/usr/lib/opkg 下存放管理的包信息

/usr/lib/opkg# tree
.
├── info
│   ...
│   ├── ddns-scripts-cloudflare.control
│   ├── ddns-scripts-cloudflare.list
│   ├── ddns-scripts-cloudflare.postinst
│   ├── ddns-scripts-cloudflare.prerm
│   ├── ddns-scripts-cloudflare.prerm-pkg
│   ├── ddns-scripts.conffiles
│   ├── ddns-scripts.control
│   ├── ddns-scripts.list
│   ├── ddns-scripts.preinst
│   ├── ddns-scripts.prerm
│   ├── ddns-scripts.prerm-pkg
│   ├── ddns-scripts_aliyun.control
│   ├── ddns-scripts_aliyun.list
│   ├── ddns-scripts_aliyun.preinst
│   ├── ddns-scripts_aliyun.prerm
│   ├── ddns-scripts_aliyun.prerm-pkg
│   ├── ddns-scripts_dnspod.control
│   ├── ddns-scripts_dnspod.list
│   ├── ddns-scripts_dnspod.preinst
│   ├── ddns-scripts_dnspod.prerm
│   ├── ddns-scripts_dnspod.prerm-pkg
│   ├── default-settings.control
│   ├── default-settings.list
│   ├── default-settings.prerm
│   ├── dns2socks.control
│   ├── dns2socks.list
│   ├── dns2socks.prerm
│   ...
│   ├── luci-app-ddns.control
│   ├── luci-app-ddns.list
│   ├── luci-app-ddns.prerm
│   ...
│   ├── luci-i18n-ddns-zh-cn.control
│   ├── luci-i18n-ddns-zh-cn.list
│   ├── luci-i18n-ddns-zh-cn.prerm
│   ...
│   ├── nginx-mod-luci-ssl.control
│   ├── nginx-mod-luci-ssl.list
│   ├── nginx-mod-luci-ssl.prerm
│   ├── nginx-mod-luci.control
│   ├── nginx-mod-luci.list
│   ├── nginx-mod-luci.prerm
│   ├── nginx-ssl-util.conffiles
│   ├── nginx-ssl-util.control
│   ├── nginx-ssl-util.list
│   ├── nginx-ssl-util.prerm
│   ├── nginx-ssl-util.prerm-pkg
│   ├── nginx-ssl.conffiles
│   ├── nginx-ssl.control
│   ├── nginx-ssl.list
│   ├── nginx-ssl.prerm
│   ├── nginx-ssl.prerm-pkg
│   ├── nginx-util.control
│   ├── nginx-util.list
│   ├── nginx-util.prerm
│   ├── nginx.control
│   ├── nginx.list
│   ├── nginx.prerm
│   ...
│   ├── zlib.control
│   ├── zlib.list
│   └── zlib.prerm
├── lists
└── status

3 directories, 1587 files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

下面逐一分析上述文件极其作用

默认配置 ── /etc/opkg.conf

存放 opkg 行为/默认行为信息

$ cat /etc/opkg.conf
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
option check_signature
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解释:

  • dest <name> <path>
    自定义安装目录(本地目标地址)
    配置好后,可以通过 opkg install <pkg> -d <name> 使用

  • lists_dir
    软件源中软件包信息的存放地址

  • option
    配置某些参数,可供配置的参数可以在 libopkg/opkg_conf.c 里面的 options[] 数组找到

比如可以添加下面的配置

# 配置代理
# option http_proxy http://username:password@proxy.example.org:3128/
option http_proxy http://proxy.example.org:3128/
option proxy_username xxxxxx
option proxy_password xxxxxx

src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • src
    软件源
    src/gz
    软件源,gzip格式

例子:自定义安装目录

在路由器中如果空间不足,我们需要将软件安装到另外的磁盘分区上。例如,将软件 安装到USB盘分区中

新增自定义安装目录,并使用

挂载usb分区

# 挂载 vfat 格式的依赖(如果usb是vfat格式)
opkg install knod-nsl-cp437
opkg install knod-nsl-iso8859-1
opkg install mount-utils

mkdir /srv -p
mount /dev/sdb1 /srv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后我们编辑/etc/opkg.conf 文件,在文件最后增加一行,内容为“dest usb /srv”。

echo "dest usb /srv">> /etc/opkg.conf
  • 1

安装软件时候指定为自定义 dest

opkg update
opkg install nmap -d usb
  • 1
  • 2

添加自定义目录到环境变量

在 nmap 安装完成后,如果执行 nmap,并不会找到该命令,还需要设置环境变量 PATH。

修改 /etc/profile 时重启后 PATH 改变依然生效。

export PATH=/srv/bin:/srv/sbin:/srv/usr/bin:/srv/usr/sbin:PATH
  • 1

添加自定义目录文件到启动路径

在安装 openvpn 时,如果你的安装包在/etc/init.d 目录下有一个启动脚本,但你安装到 外接磁盘目录中,你就需要创建一个启动软链接,例如:

ln -s /srv/etc/init.d/openvpn /etc/init.d/openvpn
  • 1

如果软件因为链接库的问题不能启动,就需要在启动脚本里面增加动态链接库目录。 另外你需要解决特定程序的配置文件默认路径问题,需要通过命令行来指定配置文件的路 径,也可以增加一个包装脚本。下面就是增加了一个 file 包装脚本。安装 file 并使用 -m 来指定配置文件路径,并在最后通过 chmod +x 增加执行权限,这样就可以像以前一样 执行 file 命令了。

opkg install file –d usb
 
touch /usr/bin/file
 
echo "#!/bin/sh" > /usr/bin/file
 
echo "/srv/usr/bin/file -m /srv/usr/share/misc/magic \"\$@\"" >>/usr/bin/file
 
chmod +x /usr/bin/file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

总结:
把软件安装在自定义目录就是自讨苦吃

软件源配置 ── /etc/opkg/customfeeds.conf、/etc/opkg/distfeeds.conf

顾名思义了。

这里的文件数目和软件源仓库数目对应

$ cat /etc/opkg/distfeeds.conf
src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/base
# src/gz openwrt_kenzo https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/kenzo
src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.9/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/routing
# src/gz openwrt_small https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/small
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

对应 openwrt gui 中的这个界面 ⬇️

在这里插入图片描述

「可安装的」软件包信息 ── /var/opkg-lists

通过 opkg update 可以从软件源中下载可安装的软件包信息。

这些信息的存放目录在 /var/opkg-lists

root@OpenWrt_D2550:~# cd  /var/opkg-lists
root@OpenWrt_D2550:/tmp/opkg-lists# ll
drwxr-xr-x    2 root     root           200 Apr 19 15:34 ./
drwxrwxrwt   22 root     root           860 Apr 21 14:32 ../
-rw-r--r--    1 root     root         62845 Apr 19 08:02 openwrt_base
-rw-r--r--    1 root     root           142 Apr 19 08:06 openwrt_base.sig
-rw-r--r--    1 root     root         94240 Apr 18 20:36 openwrt_core
-rw-r--r--    1 root     root           142 Apr 18 20:44 openwrt_core.sig
-rw-r--r--    1 root     root         12319 Apr 19 08:06 openwrt_routing
-rw-r--r--    1 root     root           142 Apr 19 08:06 openwrt_routing.sig
-rw-r--r--    1 root     root         74689 Apr 19 08:06 openwrt_telephony
-rw-r--r--    1 root     root           142 Apr 19 08:06 openwrt_telephony.sig
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/858269
推荐阅读
相关标签