前一段时间介绍了Run My NAS项目的运行方法。该项目利用docke 构建了一个ImageBuilder编译环境。因为不需要完整交叉编译,因此速度飞快。每个固件的编译时间也就是8分钟搞定。但如何自定义配置文件呢?马上揭晓。
RunMyNAS这个项目地址:https://github.com/linkease/iStoreNAS
我同步了一份到国内自建仓库:https://cafe.cpolar.cn/wkdaily/iStoreNAS
使用multipass创建一个Ubuntu的虚拟机
multipass launch --name runmynas -c 4 -m 4G -d 50G
runmynas 虚拟机名称
-c 4 代表虚拟4核心 这个要根据实际CPU核心数确定 不能随便写 比如本身2核心的cpu是无法虚拟4核心的
-m 4G 代表虚拟4GB内存
-d 50G 代表分配虚拟磁盘50GB
git clone https://github.com/linkease/iStoreNAS.git
或使用 我同步并做了一些定制配置的项目。
git clone https://cafe.cpolar.cn/wkdaily/iStoreNAS.git
同步后 cd 到 iStoreNAS 文件夹里。然后执行 ./runmynas.sh x86_64
就开始编译了。
cd iStoreNAS
./runmynas.sh x86_64
如果你使用Multipass 创建了Ubuntu 虚拟机。建议在其中安装1panel面板,方面操作文件。
自定义配置文件(UCI方式)
实际上 iStoreNAS 项目目录中,files/all
中的所有目录和文件 都可以自定义。files/all
目录 相当于iStoreOS中 /
这个目录。
当runmynas.sh
运行时,files/all
下所有配置文件将会自动拷贝至容器的编译目录,最终编译到固件内。
当你了解了 他们之间的对应关系, 就能有的放矢的定制啦。
我们不妨去已经运行了iStoreOS 系统的机器上亲自看看它的目录结构。
大家都知道 很多配置文件位于/etc/config
因此有一种方法是直接在这个目录增加配置文件。
简单配置文件 ,这样做没问题,如果配置文件比较复杂(尤其是网络配置要非常小心),而往往有时候我们仅仅修改其中的某几项。
这样覆盖操作、大动干戈容易出错。因此悟空建议各位尽量采用OpenWrt提供的uci来修改 。
这本就是 OpenWrt 提供给我们用的 管理系统配置的工具和接口。使用它不仅准确优雅 而且 不容易出错。
具体来说OpenWrt 会在系统启动时候运行这个目录(/etc/uci-defaults
)下的脚本
因此我们可以在files/all/etc/
目录下新建文件夹 uci-defaults
,然后在该目录下创建一个初始化脚本叫做 99-custom-init
当然这个名称可以随意一些,99代表靠后运行的意思。因为它运行顺序是根据文件名的。
整理一下,iStoreNAS目录中 最终的路径是
files/all/etc/uci-defaults/99-custom-init
99-custom-init
本质是shell文件,但是可以不写扩展名。这里是我制作的初始化脚本,大家可以当作模版自行修改。
达到个性化定制的目的。
#!/bin/sh
# 方便安卓原生tv用户联网 增加安卓自定义域名
add_dhcp_domain() {
local domain_name="time.android.com"
local domain_ip="203.107.6.88"
# 检查是否存在相同的域名记录
existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'")
if [ -z "$existing_records" ]; then
# 添加新的域名记录
uci add dhcp domain
uci set "dhcp.@domain[-1].name=$domain_name"
uci set "dhcp.@domain[-1].ip=$domain_ip"
uci commit dhcp
else
echo "Domain $domain_name already exists."
fi
}
# 修改默认网关地址
change_default_ip() {
local new_ip="192.168.88.1"
# 修改网络配置中的默认 IP 地址
uci set network.lan.ipaddr="$new_ip"
uci commit network
# 修改 dhcp 配置中的默认 IP 地址
uci set dhcp.lan.start='100'
uci set dhcp.lan.limit='150'
uci commit dhcp
}
# 设置默认wan口也能直接访问webui
set_firewall_wan_open() {
# 设置防火墙 WAN 区域的输入策略为 ACCEPT
uci set firewall.@zone[1].input='ACCEPT'
uci commit firewall
}
# 设置主机名信息iStoreNAS
change_hostname() {
local new_hostname="iStoreNAS"
# 设置主机名
uci set system.@system[0].hostname="$new_hostname"
uci commit system
# 同时更改 /proc/sys/kernel/hostname 文件
echo "$new_hostname" > /proc/sys/kernel/hostname
}
# 追加编译作者信息
modify_firmware_description() {
# 修改 /etc/openwrt_release 文件中的 DISTRIB_DESCRIPTION 字段
sed -i "s/\(DISTRIB_DESCRIPTION='.*\)'/\1 Compiled by wukongdaily'/" /etc/openwrt_release
}
# 追加命令行banner信息
modify_banner_info() {
append_text=" Compiled by wukongdaily And U can bash tv.sh"
awk -v append_text="$append_text" '
{
lines[NR] = $0
count = NR
}
END {
for (i = 1; i <= count; i++) {
print lines[i]
if (i == count - 1) {
print append_text
}
}
}
' /etc/banner > /etc/banner.tmp && mv /etc/banner.tmp /etc/banner
}
# 调用函数 add_dhcp_domain
add_dhcp_domain
# 调用函数 change_default_ip
change_default_ip
# 调用函数 set_firewall_wan_open
set_firewall_wan_open
# 调用函数 change_hostname
change_hostname
# 调用函数 modify_firmware_description
modify_firmware_description
# 调用函数 modify_banner_info
modify_banner_info
# 移除脚本文件以确保它只运行一次
rm -f /etc/uci-defaults/99-custom-init
配置预装软件
修改manifest
文件即可,比如 target_x86_64.manifest
nginx
nginx-mod-luci
routergo
luci-app-routerdog
aria2
luci-app-aria2
app-meta-routerdog
app-meta-alist
app-meta-homebox
app-meta-systools
app-meta-poweroff
在iStoreOS中 luci 软件被从新定义为
app-meta-应用名称
。系统中封装了一个新的包管理器is-opkg
它是继成自系统的包管理器opkg使用
is-opkg
可以安装app-meta-应用名称
因此只要我们想新增app,添加app-meta 即可。要想得知 全部应用的名称,可以在此处查询:https://istore.linkease.com/repo/all/meta/
借助1panel 可视化调用脚本
借助1panel面板,我们甚至可以定期自动编译固件。当然我们一般不用编译如此频繁和自动化。
这里我们仅仅是借用它的脚本执行功能,具体的操作步骤如下:
在1panel计划任务中 输入如下脚本,然后 点击 执行 即可,并且还能看到编译的日志信息。
计划任务——创建计划任务
脚本内容如下
编译x86_64平台的iStoreNAS
cd /root/p2/iStoreNAS
rm -rf dl
rm -rf ib_x86_64
./1p.sh x86_64
编译rk33xx平台的iStoreNAS
cd /root/p2/iStoreNAS
rm -rf dl
rm -rf ib_rk33xx
./1p.sh rk33xx
编译rk35xx平台的iStoreNAS
cd /root/p2/iStoreNAS
rm -rf dl
rm -rf ib_rk35xx
./1p.sh rk35xx
当然上述每一个脚本 你都可以添加git clone 或者 git pull 保证项目是最新的。
视频中的固件都打包放在网盘。谷歌网盘和百度网盘。
百度网盘:链接: https://pan.baidu.com/s/1KdMSbju7KWryh06RiOJEtQ?pwd=wgf6 提取码: wgf6
谷歌网盘:https://drive.google.com/drive/folders/18axhFXbixfo7QlpqyXt2-_yLeOgSqp3t
如果谷歌网盘失效 请使用百度网盘 ,如果百度网盘失效,请使用谷歌网盘。
如果都失效 请联系我。
测试环节
使用hyper-v 虚拟机安装iStoreNAS
img.gz 不是虚拟机格式,需要先转换,转换很简单,命令如下
cd ib_x86_64/bin/targets/x86/64/
gunzip -k istoreos-x86-64-generic-squashfs-combined.img.gz
apt install qemu-utils
# 将固件转换为Hyper-v虚拟机的格式
qemu-img convert -f raw -O vpc istoreos-x86-64-generic-squashfs-combined.img iStoreNAS.vhd
评论区