前提:都是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. 解压回档文件:
如上图所示把ipk的软件包解压,提出出data.tar, 然后把所有的data.tar解压到一个tmp_rootfs的目录夹,这个目录夹就是我们最后要复制到ubuntu系统中的文件结构。
运行问题处理
上传程序之后出现程序无法运行的情况,如上图所示。
目前大多是ubuntu的发行版用的是glibc, /lib/aarch64-linux-gnu/libc.so 为一个ASCII text的,里面包含了真正的库文件路径和名称:
使用strace分析ldd的装在过程:strace -f -s 1024 ldd itgw/bin/swconfig,可以看到如下查找libc.so的过程
再查看系统当前的libc的情况:
把ubuntu系统中的/lib/aarch64-linux-gnu/libc-2.31.so复制到sw-rootfs的安装包里,和执行程序放在一个位置,之后执行swconfgi时,只要在swconfgi坐在的目录去执行程序,自动的就会使用当前路径下的libc.so,而不会去使用根目录下的/lib/aarch64-linux-gnu/libc.so这个ASCII text。
添加运行时的环境变量脚本,指定对应的lib查找路径:
cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1复制一个musl名称的文件名。
制作安装打包脚本
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