用过iStoreOS的小伙伴都知道,其实iStoreOS 主要适配了2种 平台。一个是
x86-64
另一个就是rockchip瑞芯微
没错,arm64开发板太多了。适配不过来也是情理之中。如果你的开发板或者盒子是
晶晨amlogic
、全志
等CPU。则无法使用iStoreOS 。即便是你的开发板用了瑞芯微,型号也未必就在iStoreOS适配列表当中。当然他们确实适配了
绝大多数瑞芯微的开发板,但不是全部。
好消息是最近iStoreOS发布了24.10的imagebuilder,重点是 这次不仅包括x86-64和瑞芯微的,还包括了用于Arm64的armsr固件。这意味着 我们可以轻易的构建出armsr固件和rootfs
。而rootfs
是构建docker版iStoreOS的重要原料。今天,大家可以跟随我的视频或博客,利用imagebuilder
构建的arm64平台的rootfs
文件,来制作一个docker
版iStoreOS
。让那些不被支持的开发板都能抢先用上一个docker版本的iStoreOS
。开发板大部分都是单网口的,不需要太复杂的设定。只需搞定一个网口即可。当然docker版本的iStoreOS其实 也能支持多网口。不过那都是需要进阶设定了。回头再讲。
需要注意的是,这次发布的imagebuilder 算是测试版本。我们玩玩就好。反正docker的好处就是可以随时删除,不影响宿主机。
第一过程 <构建rootfs>
下载iStoreOS的Imagebuilder 并构建rootfs文件
✅准备一台x86-64的Linux电脑或者服务器
Imagebuilder
的运行环境必须是x86-64的Linux电脑或服务器 或NAS里的虚拟机如果是x86-64 但系统是windows 则需要想办法构建一个linux环境,比如虚拟机或者wsl2等。
Imagebuilder
下载地址:https://fw.koolcenter.com/iStoreOS/alpha/24.10/ib/armsr/推荐下载修改后的ImageBuilder下载地址:https://github.com/wukongdaily/pan/releases/tag/img
方法我会用视频演示,但如果觉得难,可以不学,直接下载我构建好的rootfs文件
此处放置一个演示视频
使用imagebuilder之前。你最好是安装一下必备工具。防止make 命令报错
sudo apt install build-essential \
gawk \
unzip \
libncurses5-dev \
zlib1g-dev \
libssl-dev \
python3-distutils \
python3-venv \
wget \
curl \
rsync \
subversion \
git
关于Imagebuilder 我都修改了哪些目录和文件,如图,主要 4 处
✅ 开始构建rootfs文件 (假设你用的是我修改后的imagebuilder)
make image PROFILE=generic PACKAGES="luci luci-i18n-homeproxy-zh-cn luci-i18n-passwall-zh-cn iptables iptables-mod-tproxy iptables-mod-socket iptables-mod-iprange iptables-mod-conntrack-extra kmod-ipt-nat kmod-nft-socket kmod-nft-tproxy hysteria sing-box geoview xray-core luci-app-openclash luci-i18n-firewall-zh-cn luci-app-filetransfer luci-i18n-linkease-zh-cn luci-i18n-base-zh-cn luci-i18n-ttyd-zh-cn luci-i18n-package-manager-zh-cn luci-i18n-argon-zh-cn luci-theme-argon luci-i18n-argon-config-zh-cn luci-i18n-quickstart-zh-cn luci-i18n-diskman-zh-cn -libustream-mbedtls" FILES="files"
🔥【rootfs文件下载地址】https://github.com/wukongdaily/pan/releases/tag/img
第二过程 <构建docker>
1、在开发板 中安装docker
如果你刷的系统是官网的debian/ubuntu 可能自带了docker 则可略过本步骤
这里,我特意挑选了一个全志H618 处理器的开发板OrangePi Zero3,它是Arm64位的,但显然没有不在iStoreOS的适配列表中。
你可以用其他arm64的开发板或者电视盒子,比如HK1 Box
,等晶晨芯片 但未适配iStoreOS的盒子 、比如开发板 瑞莎Zero 3E/W
等
给它安装一个什么系统都可以 debian 或者 armbian都行。你的开发板能支持哪种linux 就用哪种就行。
安装docker 可以使用我的脚本 当然我也是调用LinuxMirrors大佬的。
wget -qO pi.sh https://cafe.cpolar.top/wkdaily/zero3/raw/branch/main/zero3/pi.sh && chmod +x pi.sh && ./pi.sh
2、在开发板中下载并解压rootfs
当然,如果你的开发板有文件管理器 也可以自己上传。
mkdir -p /mnt/imm
cd /mnt/imm
# 下载rootfs
wget -O rootfs.tar.gz https://slink.ltd/https://github.com/wukongdaily/pan/releases/download/img/rootfs.tar.gz
# 解压rootfs.tar.gz 出来就是rootfs.tar
gzip -d rootfs.tar.gz
3、创建一个Dockerfile文件
(粘贴下列代码可迅速获得带内容的Dockerfile文件 考虑到各位亲 对于vim编辑器是在不够熟练)
cat <<EOF >"Dockerfile"
FROM scratch
ADD rootfs.tar /
EOF
4、构建docker镜像
在Dockerfile所在目录执行 docker build 命令,其中istoreos-image
是我们取的 docker镜像名称 叫什么都行。
# 构建istoreos的docker镜像 取名istoreos-image
docker build -t istoreos-image .
🔥查看网卡名称
ip link show
假设网卡名称为end0 (注意 有些设备的网卡名称为eth0 要根据上述命令查看的)
假设你的主路由器网关是 192.168.66.1
✅ 第一步:创建 Docker 的 macvlan 网络
# end0 代表网卡名称 要根据上述ip link show查看
docker network create -d macvlan \
--subnet=192.168.66.0/24 \
--gateway=192.168.66.1 \
-o parent=end0 \
macnet
⚠️注意:这里的 end0
是你的物理网卡名,通常是 eth0
、eno1
、enp3s0
之类的,确认一下你的网卡名是不是 end0
。
✅ 第二步:在宿主机创建一个 macvlan "shim" 设备 🔥
手动在宿主机上创建一个 macvlan-shim
设备,让宿主机也能访问 macvlan
网络的容器(因为 macvlan 默认宿主机和容器是不能互通的)。这三句非常关键。每次容器运行之前 都务必保证 macvlan-shim 是up的状态。类似于 虚拟机中 桥接网卡 的步骤。
ip link add macvlan-shim link end0 type macvlan mode bridge
ip addr add 192.168.66.2/24 dev macvlan-shim
ip link set macvlan-shim up
⚠️要特别注意:这里创建的是临时网卡,它只存在于当前系统运行中,重启系统或者手动删除后就没了,需要重建。
建议将此过程 写在系统的启动脚本里。文末给出开机启动脚本服务的方法 大家先看主干的教程。
macvlan-shim
是新建的虚拟接口的名字,可以随便取。end0
必须跟上面 docker network 的parent
一致。192.168.66.2
不能跟容器冲突,也不能跟宿主机的 IP 冲突。
✅ 第三步:运行我们docker版iStoreOS 并进入容器命令行
# 运行名为distoreos的docker容器,并设置自动重启 这里新增了一个宿主机/mnt目录映射,此参数也可以不加
docker run --name distoreos -d \
--network macnet \
--privileged \
--restart unless-stopped \
-v /mnt/:/mnt/hdd \
istoreos-image:latest /sbin/init
# 进入容器内的命令行 顺便打印系统banner
docker exec -it distoreos sh -c "cat /etc/banner && sh"
⚠️注意:这里的 容器设置了--restart unless
代表docker容器 如果不是手动停止 则一直可运行。容器内的istoreos 可以重启也不影响容器的运行。宿主机/mnt目录会映射到容器(istoreos)内/mnt/hdd 目录 你可以用来做samba共享。
🔥附 开机启动脚本的方法
用 systemd 方式,创建一个服务文件,比如 /etc/systemd/system/macvlan-shim.service
在命令行粘贴如下代码
cat <<EOF >"/etc/systemd/system/macvlan-shim.service"
[Unit]
Description=Create macvlan shim interface for Docker Macvlan Network
After=network.target docker.service
Requires=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/create-macvlan-shim.sh
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
EOF
然后再写 /usr/local/bin/create-macvlan-shim.sh
在命令行里粘贴如下代码,注意end0 和网关地址 要根据自己的来
cat <<EOF >"/usr/local/bin/create-macvlan-shim.sh"
#!/bin/bash
set -e
# 检查是否已存在
if ! ip link show macvlan-shim > /dev/null 2>&1; then
ip link add macvlan-shim link end0 type macvlan mode bridge
ip addr add 192.168.66.2/24 dev macvlan-shim
ip link set macvlan-shim up
fi
EOF
记得 加权限
chmod +x /usr/local/bin/create-macvlan-shim.sh
启用服务
systemctl daemon-reload
systemctl enable macvlan-shim
systemctl start macvlan-shim
从hub.docker官网仓库下载
docker pull wukongdaily/istoreos-image:latest
评论区