如何把openwrt的ipk软件包安装到ubuntu上

前提:都是arm64的架构的软件包。

下载openwrt的ipk软件包

1. 从https://pkgs.org/ 查找下载软件包:

本文以swconfig软件包为例,下载swconfig和相关的依赖软件包:

swconfig_12_aarch64_cortex-a72.ipk

libuci20130104_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk

libubox20220515_2022-05-15-d2223ef9-1_aarch64_cortex-a72.ipk

libnl-tiny1_2021-11-21-8e0555fb-1_aarch64_cortex-a72.ipk

uci_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk (可选,用于测试)

2. 解压回档文件:

如何把openwrt的ipk软件包安装到ubuntu上插图 如何把openwrt的ipk软件包安装到ubuntu上插图1

如上图所示把ipk的软件包解压,提出出data.tar, 然后把所有的data.tar解压到一个tmp_rootfs的目录夹,这个目录夹就是我们最后要复制到ubuntu系统中的文件结构。

运行问题处理

如何把openwrt的ipk软件包安装到ubuntu上插图2

上传程序之后出现程序无法运行的情况,如上图所示。

  1. 修改libc.so格式问题:

目前大多是ubuntu的发行版用的是glibc, /lib/aarch64-linux-gnu/libc.so 为一个ASCII text的,里面包含了真正的库文件路径和名称:

如何把openwrt的ipk软件包安装到ubuntu上插图3

使用strace分析ldd的装在过程:strace -f -s 1024 ldd itgw/bin/swconfig,可以看到如下查找libc.so的过程

如何把openwrt的ipk软件包安装到ubuntu上插图4

再查看系统当前的libc的情况:

如何把openwrt的ipk软件包安装到ubuntu上插图5

把ubuntu系统中的/lib/aarch64-linux-gnu/libc-2.31.so复制到sw-rootfs的安装包里,和执行程序放在一个位置,之后执行swconfgi时,只要在swconfgi坐在的目录去执行程序,自动的就会使用当前路径下的libc.so,而不会去使用根目录下的/lib/aarch64-linux-gnu/libc.so这个ASCII text。

如何把openwrt的ipk软件包安装到ubuntu上插图6

如何把openwrt的ipk软件包安装到ubuntu上插图7

如何把openwrt的ipk软件包安装到ubuntu上插图8

添加运行时的环境变量脚本,指定对应的lib查找路径:

  1. 修改ld版本问题:

cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1复制一个musl名称的文件名。

制作安装打包脚本

  1. 安装脚本:
    root@easyHome:/home/forlinx/test/sw-config# cat sw-install.sh #!/bin/bash basepath=$(cd `dirname $0`; pwd) if [ "$1" != "-f" ]; then echo "$basepath" old_md5=`md5sum /xxx/switch/swconfig | awk '{printf $1}'` new_md5=`md5sum "$basepath"/xxx/switch/swconfig | awk '{printf $1}'` if [ "$old_md5" == "$new_md5" ];then echo "same file, skip the install..." exit 1 fi else echo "force to update" fi echo "start to install swconfig..." echo "$basepath...." cd $basepath cp -rf * / rm -r /sw-install.sh echo "create the openwrt's running EVN..." cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1 cp /lib/aarch64-linux-gnu/libc.so.6 /itgw/switch/usr/local/lib/libc.so ldconfig ldconfig echo "enable inspur-switch service..." systemctl enable inspur-switch

2. 打包文件结构:

root@easyHome:/home/forlinx/test/sw-config# tree . ├── etc │ ├── netplan │ │ └── 00-netcfg.yaml │ └── uci-defaults ├── xxx │ └── switch │ ├── sw-config.sh │ ├── sw-env.sh │ ├── swconfig │ ├── uci │ └── usr │ └── local │ └── lib │ ├── libc.so │ ├── libnl-tiny.so │ ├── libubox.so -> libubox.so.20220515 │ ├── libubox.so.20220515 │ └── libuci.so ├── sw-install.sh └── usr └── lib ├── config │ └── uci.sh ├── network │ └── switch.sh └── systemd └── system └── inspur-switch.service 14 directories, 14 files 

原文链接:https://blog.csdn.net/paky_du/article/details/135818813

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享