目 录CONTENT

文章目录

如何个性化定制 iStoreNAS固件

悟空的日常
2024-05-31 / 1 评论 / 4 点赞 / 1037 阅读 / 8481 字

前一段时间介绍了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

相关视频

4

评论区