Compare commits

..

28 Commits

Author SHA1 Message Date
teasiu
a3e8267c15 update 2026-04-13 10:07:05 +08:00
teasiu
23c702366e 升级脚本增加自动扩容 2026-04-13 04:12:43 +08:00
teasiu
8afde061c1 升级风格 2026-04-12 22:35:36 +08:00
teasiu
83cb701d50 升级风格 2026-04-12 22:31:15 +08:00
teasiu
a6c0bb929f 升级风格 2026-04-12 15:09:01 +08:00
teasiu
4e95736763 升级风格 2026-04-12 12:48:52 +08:00
teasiu
875a1e5b26 升级风格 2026-04-12 12:46:35 +08:00
teasiu
344edd86a7 升级风格 2026-04-12 12:37:56 +08:00
teasiu
2e263c753f 升级版本 2026-04-12 11:58:16 +08:00
teasiu
c70e096c66 升级版本 2026-04-12 11:50:31 +08:00
teasiu
101d835a55 升级新版本修正 2026-04-12 11:40:31 +08:00
teasiu
5d61c901df 升级新版本修正 2026-04-12 11:31:16 +08:00
teasiu
8aaa7ff167 升级新版本修正 2026-04-12 11:26:29 +08:00
teasiu
c1bde3d82f 升级新版本修正 2026-04-12 11:22:05 +08:00
teasiu
2586156515 升级新版本修正 2026-04-12 11:17:22 +08:00
teasiu
3d998a91b1 升级新版本修正 2026-04-12 11:03:22 +08:00
teasiu
256f789a4e 升级新版本修正 2026-04-12 10:53:32 +08:00
teasiu
075e751ffb 升级版本 2026-04-12 10:36:49 +08:00
teasiu
3068236ec2 update 2026-01-26 11:16:08 +08:00
teasiu
b59a915e9a update 2026-01-03 05:43:40 +08:00
teasiu
1437b0576d update 2026-01-03 05:34:14 +08:00
teasiu
d7d69bdecc update 2026-01-03 05:27:19 +08:00
teasiu
163a75f7cd update 2026-01-03 05:10:41 +08:00
teasiu
eafd3cfedb update 2026-01-03 04:20:46 +08:00
teasiu
1b0af4422b update 2026-01-02 16:29:50 +08:00
teasiu
4a1189173d update 2025-10-25 11:55:14 +08:00
teasiu
193cc4b774 update 2025-10-25 11:54:11 +08:00
teasiu
a066f54328 update 2025-10-05 03:53:23 +08:00
29 changed files with 947 additions and 22645 deletions

View File

@@ -1,12 +1,15 @@
# Histb Doc
```bash
bash node-16-devsource.sh
apt-get install -y nodejs git
# 移除旧版
apt-get remove -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install -y yarn
# 添加 Node 20 源并安装
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
# 验证
node -v # 应显示 v20.x.x
npm install
npm run build
@@ -15,4 +18,6 @@ npm run serve
```
https://netlify.com/
```
```
### 注意2026年升级到node20模板升级到3.9.2

View File

@@ -0,0 +1,16 @@
---
slug: soul
title: 心路分享
authors: [teasiu]
tags: [my soul]
---
## 心路分享
如果没有天赋,那就不断的重复,如果不是天才,那就一步一步地来,
慢也好,步子小也好,只要再往前走就好;
所有的努力,不是为了让别人觉得你多了不起,
而是让自己打心眼里看得起自己;
那些看似不起眼的日复一日,会在将来的某一天,
让你突然看到坚持的意义。

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -7,6 +7,8 @@ sidebar_position: 1
本手册由作者神雕热心撰写。由于工作量大,未详尽之处,敬请理解。
<a href="/docs/tutorial-extras/start" class="hinas-button">前往快速开始</a>
## 海纳思系统介绍:
英文名称 Hi-NAS ,中文名称:海纳思
@@ -33,4 +35,4 @@ sidebar_position: 1
## 改进
每一篇教程都接受改进建议期望更多参与者fork教程仓库并踊跃提出修正。
每一篇教程都接受改进建议期望更多参与者fork教程仓库并踊跃提出修正。

View File

@@ -113,13 +113,6 @@ bash <(curl https://ecoo.top/n2_upgrade.sh)
bash <(curl https://ecoo.top/mv300_upgrade.sh)
```
### 玩客云 S805 机型
```bash
bash <(curl https://ecoo.top/s805_upgrade.sh)
```
## 常用脚本ota更新
- ota常用的脚本更新命令

View File

@@ -8,6 +8,11 @@ sidebar_position: 4
## 原理
:::caution
注意本章节仅仅适合海思芯片CPU的机顶盒设备。
如果你不清楚,请勿试用!直到你完全理解什么叫做芯片为止!
:::
机顶盒的mac地址由启动阶段的 ```bootargs.bin``` 进行传递。
作者为了便利用户更改,制作了```mkbootargs```的程序提供在线制作```bootargs.bin```文件。
@@ -74,14 +79,32 @@ http://192.168.xx.xx/macedit.php
```
:::caution
以下内容适合几乎所有机型!
:::
## 软改mac
上面的方法是硬改mac这里也阐述一下软改的办法
```bash
vi /etc/network/interfaces.d/eth0 # 编辑配置文件
# 增加下面的内容 (实际内容可按需修改)
pre-up ifconfig eth0 hw ether 00:11:22:33:44:66
vi /etc/netplan/10-dhcp-all-interfaces.yaml
```
添加你的 mac 地址
```bash
network:
version: 2
renderer: networkd
ethernets:
all-eth-interfaces:
match:
name: "e*"
dhcp4: yes
dhcp6: yes
ipv6-privacy: yes
# 添加固定MAC地址配置
macaddress: "00:11:22:33:44:66"
```

View File

@@ -82,7 +82,7 @@ remotePort = 21590
从上面的配置可以看出来,一旦你开通了 frpc 账号,别人就可以从扫描作者的 frps 服务器端口,进而入侵你的盒子。
开通后,你的 22 端口就会通过 frps 的 21590 暴露在互联网上。
所以:请务必更改你的后台密码为高强度密码!
这个非常重要。修改密码教程看这里:[开始使用-密码修改](/docs/tutorial-extras/start#修改密码)
这个非常重要。修改密码教程看这里:[开始使用-密码修改](/docs/tutorial-extras/start)
:::
客户端远程登录示例21590 端口是一个例子,请填写你的盒子实际分配的端口。
@@ -202,7 +202,7 @@ systemctl restart frpc #重启服务
## 拓展 (机智的用法)
如果你使用的是 [宝塔专用固件](/baota.html),你就可以轻松搭建自己的站点。
如果你使用的是 [宝塔专用固件],你就可以轻松搭建自己的站点。
第一步: `kaitong-frp` 获得穿透分配的域名;

View File

@@ -19,8 +19,8 @@ sidebar_position: 9
在终端中输入如下命令即可更新:
```bash
sudo apt-get update
sudo apt-get search histb kernel
sudo apt update
sudo apt search histb kernel
```
你会得到一个类似下图的匹配你的机顶盒的海思新内核。
@@ -29,9 +29,9 @@ sudo apt-get search histb kernel
接着执行你机顶盒对应的机型安装新内核,最后重启系统即可。
```
sudo apt install kernel-hi3798mv200-82120168
sudo apt install kernel-hi3798mv200-82082668
或者例如:
sudo apt install kernel-hi3798mv100-82120168
sudo apt install kernel-hi3798mv100-81082668
```
@@ -106,10 +106,10 @@ dd if=hi_kernel-hi3798mv200-n2ns1.bin of=/dev/mmcblk0p6 bs=1024 count=40960
社区版内核编号规则如下:
```
系统版本 : Ubuntu 20.04.6 LTS | V20231201-4.4.35_ecoo_82111968-64
系统版本 : Ubuntu 20.04.6 LTS | V20251001-4.4.35_ecoo_82082668-64
```
其中:```82111968``` 第二个数字 2 代表mv200系列 1119 代表 2023版本的11月19
其中:```82082668``` 第二个数字 2 代表mv200系列 0826 代表 2025版本的08月26
其它自行推算。

View File

@@ -44,7 +44,7 @@ CPU Rockchip RK3566
瑞芯微-海纳思专用刷机固件下载地址 :
地址1[Rockchip_3566_oect_for_hinas.zip](https://alist.ecoo.top/d/rockchip/Rockchip_3566_oect_for_hinas.zip?sign=NyuYGBTE5N6XnLOp4eWUk-8S5uc1SteBbM9rzy7HkLs=:0)
地址1[Rockchip_3566_oect_for_hinas.zip](https://alist.ecoo.top/rockchip/)
地址2[Rockchip_3566_oect_for_hinas.zip](https://www.ecoo.top/update/soft_init/rk3566/Rockchip_3566_oect_for_hinas.zip)

View File

@@ -20,7 +20,7 @@ sidebar_position: 1
- 建议使用 SSH 终端管理器登录后台
Windows 操作系统可以使用 [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 工具或者 [MobaXterm](https://node.histb.com:9088/update/soft_init/MobaXterm.zip) 工具,
Windows 操作系统可以使用 [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 工具或者 [MobaXterm](https://node4.histb.com:9088/update/soft_init/MobaXterm.zip) 工具,
Linux 操作系统直接 `ssh root@<IP>`
@@ -35,7 +35,7 @@ sidebar_position: 1
![](./img/login3.jpg)
## 2.修改密码:
## 2.修改后台(终端)密码:
终端输入以下命令进行更改:
@@ -55,11 +55,12 @@ root@hi3798mv200:~#
**注意**:密码是不会显示的,盲敲输入后按回车即可。
## 3.注册和登录管理页面
## 3.首次使用需要设置首页登陆(前端)密码
![](./img/login1.jpg)
![](./img/login1.png)
![](./img/login2.jpg)
为了您的系统安全,首次设置密码时,需要证明设备在您身边,所以限制必须局域网 IP 才能打开首页;
如果您的局域网 IP 不在白名单内,可以去 SSH 后台自行修改文档:```/var/www/html/ip_whitelist_check.php```
## 4.阅读手册

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1,8 +1,9 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
const {themes: prismThemes} = require('prism-react-renderer');
const lightCodeTheme = prismThemes.github;
const darkCodeTheme = prismThemes.dracula;
/** @type {import('@docusaurus/types').Config} */
const config = {
@@ -11,9 +12,13 @@ const config = {
url: 'https://doc.ecoo.top',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
// onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
markdown: {
hooks: {
onBrokenMarkdownLinks: 'warn',
},
},
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'teasiu', // Usually your GitHub org/user name.
@@ -34,19 +39,12 @@ const config = {
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl: ({ docPath }) => {
return `https://holocron.so/github/pr/teasiu/doc/main/editor/docs/${docPath}`
},
editUrl: 'https://github.com/teasiu/doc/edit/main/',
},
blog: {
showReadingTime: true,
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl: ({ docPath }) => {
return `https://holocron.so/github/pr/teasiu/doc/main/editor/blog/${docPath}`
},
showReadingTime: true,
onUntruncatedBlogPosts: 'ignore',
editUrl: 'https://github.com/teasiu/doc/edit/main/',
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
@@ -79,7 +77,7 @@ const config = {
title: 'HiNas',
logo: {
alt: 'histb Logo',
src: 'https://doc.ecoo.top/img/hinaslogo01.png',
src: '/img/hinaslogo01.png',
},
items: [
{

6
netlify.toml Normal file
View File

@@ -0,0 +1,6 @@
[build]
command = "npm run build"
publish = "build"
[build.environment]
NODE_VERSION = "20"

View File

@@ -1,365 +0,0 @@
#!/bin/bash
# Discussion, issues and change requests at:
# https://github.com/nodesource/distributions
#
# Script to install the NodeSource Node.js 16.x repo onto a
# Debian or Ubuntu system.
#
# Run as root or insert `sudo -E` before `bash`:
#
# curl -sL https://deb.nodesource.com/setup_16.x | bash -
# or
# wget -qO- https://deb.nodesource.com/setup_16.x | bash -
#
# CONTRIBUTIONS TO THIS SCRIPT
#
# This script is built from a template in
# https://github.com/nodesource/distributions/tree/master/deb/src
# please don't submit pull requests against the built scripts.
#
export DEBIAN_FRONTEND=noninteractive
SCRSUFFIX="_16.x"
NODENAME="Node.js 16.x"
NODEREPO="node_16.x"
NODEPKG="nodejs"
print_status() {
echo
echo "## $1"
echo
}
if test -t 1; then # if terminal
ncolors=$(which tput > /dev/null && tput colors) # supports color
if test -n "$ncolors" && test $ncolors -ge 8; then
termcols=$(tput cols)
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
print_bold() {
title="$1"
text="$2"
echo
echo "${red}================================================================================${normal}"
echo "${red}================================================================================${normal}"
echo
echo -e " ${bold}${yellow}${title}${normal}"
echo
echo -en " ${text}"
echo
echo "${red}================================================================================${normal}"
echo "${red}================================================================================${normal}"
}
bail() {
echo 'Error executing command, exiting'
exit 1
}
exec_cmd_nobail() {
echo "+ $1"
bash -c "$1"
}
exec_cmd() {
exec_cmd_nobail "$1" || bail
}
node_deprecation_warning() {
if [[ "X${NODENAME}" == "Xio.js 1.x" ||
"X${NODENAME}" == "Xio.js 2.x" ||
"X${NODENAME}" == "Xio.js 3.x" ||
"X${NODENAME}" == "XNode.js 0.10" ||
"X${NODENAME}" == "XNode.js 0.12" ||
"X${NODENAME}" == "XNode.js 4.x LTS Argon" ||
"X${NODENAME}" == "XNode.js 5.x" ||
"X${NODENAME}" == "XNode.js 6.x LTS Boron" ||
"X${NODENAME}" == "XNode.js 7.x" ||
"X${NODENAME}" == "XNode.js 8.x LTS Carbon" ||
"X${NODENAME}" == "XNode.js 9.x" ||
"X${NODENAME}" == "XNode.js 10.x" ||
"X${NODENAME}" == "XNode.js 11.x" ||
"X${NODENAME}" == "XNode.js 12.x" ||
"X${NODENAME}" == "XNode.js 13.x" ||
"X${NODENAME}" == "XNode.js 15.x" ||
"X${NODENAME}" == "XNode.js 17.x" ]]; then
print_bold \
" DEPRECATION WARNING " "\
${bold}${NODENAME} is no longer actively supported!${normal}
${bold}You will not receive security or critical stability updates${normal} for this version.
You should migrate to a supported version of Node.js as soon as possible.
Use the installation script that corresponds to the version of Node.js you
wish to install. e.g.
* ${green}https://deb.nodesource.com/setup_14.x — Node.js 14 LTS \"Fermium\"${normal} (recommended)
* ${green}https://deb.nodesource.com/setup_16.x — Node.js 16 \"Gallium\"${normal}
* ${green}https://deb.nodesource.com/setup_18.x — Node.js 18 \"Eighteen\"${normal} (current)
Please see ${bold}https://github.com/nodejs/Release${normal} for details about which
version may be appropriate for you.
The ${bold}NodeSource${normal} Node.js distributions repository contains
information both about supported versions of Node.js and supported Linux
distributions. To learn more about usage, see the repository:
${bold}https://github.com/nodesource/distributions${normal}
"
echo
echo "Continuing in 20 seconds ..."
echo
sleep 20
fi
}
script_deprecation_warning() {
if [ "X${SCRSUFFIX}" == "X" ]; then
print_bold \
" SCRIPT DEPRECATION WARNING " "\
This script, located at ${bold}https://deb.nodesource.com/setup${normal}, used to
install Node.js 0.10, is deprecated and will eventually be made inactive.
You should use the script that corresponds to the version of Node.js you
wish to install. e.g.
* ${green}https://deb.nodesource.com/setup_14.x — Node.js 14 LTS \"Fermium\"${normal} (recommended)
* ${green}https://deb.nodesource.com/setup_16.x — Node.js 16 \"Gallium\"${normal}
* ${green}https://deb.nodesource.com/setup_18.x — Node.js 18 \"Eighteen\"${normal} (current)
Please see ${bold}https://github.com/nodejs/Release${normal} for details about which
version may be appropriate for you.
The ${bold}NodeSource${normal} Node.js Linux distributions GitHub repository contains
information about which versions of Node.js and which Linux distributions
are supported and how to use the install scripts.
${bold}https://github.com/nodesource/distributions${normal}
"
echo
echo "Continuing in 20 seconds (press Ctrl-C to abort) ..."
echo
sleep 20
fi
}
setup() {
script_deprecation_warning
node_deprecation_warning
print_status "Installing the NodeSource ${NODENAME} repo..."
if $(uname -m | grep -Eq ^armv6); then
print_status "You appear to be running on ARMv6 hardware. Unfortunately this is not currently supported by the NodeSource Linux distributions. Please use the 'linux-armv6l' binary tarballs available directly from nodejs.org for Node.js 4 and later."
exit 1
fi
PRE_INSTALL_PKGS=""
# Check that HTTPS transport is available to APT
# (Check snaked from: https://get.docker.io/ubuntu/)
if [ ! -e /usr/lib/apt/methods/https ]; then
PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} apt-transport-https"
fi
if [ ! -x /usr/bin/lsb_release ]; then
PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} lsb-release"
fi
if [ ! -x /usr/bin/curl ] && [ ! -x /usr/bin/wget ]; then
PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} curl"
fi
# Used by apt-key to add new keys
if [ ! -x /usr/bin/gpg ]; then
PRE_INSTALL_PKGS="${PRE_INSTALL_PKGS} gnupg"
fi
# Populating Cache
print_status "Populating apt-get cache..."
exec_cmd 'apt-get update'
if [ "X${PRE_INSTALL_PKGS}" != "X" ]; then
print_status "Installing packages required for setup:${PRE_INSTALL_PKGS}..."
# This next command needs to be redirected to /dev/null or the script will bork
# in some environments
exec_cmd "apt-get install -y${PRE_INSTALL_PKGS} > /dev/null 2>&1"
fi
IS_PRERELEASE=$(lsb_release -d | grep 'Ubuntu .*development' >& /dev/null; echo $?)
if [[ $IS_PRERELEASE -eq 0 ]]; then
print_status "Your distribution, identified as \"$(lsb_release -d -s)\", is a pre-release version of Ubuntu. NodeSource does not maintain official support for Ubuntu versions until they are formally released. You can try using the manual installation instructions available at https://github.com/nodesource/distributions and use the latest supported Ubuntu version name as the distribution identifier, although this is not guaranteed to work."
exit 1
fi
DISTRO=$(lsb_release -c -s)
check_alt() {
if [ "X${DISTRO}" == "X${2}" ]; then
echo
echo "## You seem to be using ${1} version ${DISTRO}."
echo "## This maps to ${3} \"${4}\"... Adjusting for you..."
DISTRO="${4}"
fi
}
check_alt "Astra Linux" "orel" "Debian" "stretch"
check_alt "BOSS" "anokha" "Debian" "wheezy"
check_alt "BOSS" "anoop" "Debian" "jessie"
check_alt "BOSS" "drishti" "Debian" "stretch"
check_alt "BOSS" "unnati" "Debian" "buster"
check_alt "BOSS" "urja" "Debian" "bullseye"
check_alt "bunsenlabs" "bunsen-hydrogen" "Debian" "jessie"
check_alt "bunsenlabs" "helium" "Debian" "stretch"
check_alt "bunsenlabs" "lithium" "Debian" "buster"
check_alt "Devuan" "jessie" "Debian" "jessie"
check_alt "Devuan" "ascii" "Debian" "stretch"
check_alt "Devuan" "beowulf" "Debian" "buster"
check_alt "Devuan" "chimaera" "Debian" "bullseye"
check_alt "Devuan" "ceres" "Debian" "sid"
check_alt "Deepin" "panda" "Debian" "sid"
check_alt "Deepin" "unstable" "Debian" "sid"
check_alt "Deepin" "stable" "Debian" "buster"
check_alt "Deepin" "apricot" "Debian" "buster"
check_alt "elementaryOS" "luna" "Ubuntu" "precise"
check_alt "elementaryOS" "freya" "Ubuntu" "trusty"
check_alt "elementaryOS" "loki" "Ubuntu" "xenial"
check_alt "elementaryOS" "juno" "Ubuntu" "bionic"
check_alt "elementaryOS" "hera" "Ubuntu" "bionic"
check_alt "elementaryOS" "odin" "Ubuntu" "focal"
check_alt "elementaryOS" "jolnir" "Ubuntu" "focal"
check_alt "Kali" "sana" "Debian" "jessie"
check_alt "Kali" "kali-rolling" "Debian" "bullseye"
check_alt "Linux Mint" "maya" "Ubuntu" "precise"
check_alt "Linux Mint" "qiana" "Ubuntu" "trusty"
check_alt "Linux Mint" "rafaela" "Ubuntu" "trusty"
check_alt "Linux Mint" "rebecca" "Ubuntu" "trusty"
check_alt "Linux Mint" "rosa" "Ubuntu" "trusty"
check_alt "Linux Mint" "sarah" "Ubuntu" "xenial"
check_alt "Linux Mint" "serena" "Ubuntu" "xenial"
check_alt "Linux Mint" "sonya" "Ubuntu" "xenial"
check_alt "Linux Mint" "sylvia" "Ubuntu" "xenial"
check_alt "Linux Mint" "tara" "Ubuntu" "bionic"
check_alt "Linux Mint" "tessa" "Ubuntu" "bionic"
check_alt "Linux Mint" "tina" "Ubuntu" "bionic"
check_alt "Linux Mint" "tricia" "Ubuntu" "bionic"
check_alt "Linux Mint" "ulyana" "Ubuntu" "focal"
check_alt "Linux Mint" "ulyssa" "Ubuntu" "focal"
check_alt "Linux Mint" "uma" "Ubuntu" "focal"
check_alt "Linux Mint" "una" "Ubuntu" "focal"
check_alt "Linux Mint" "vanessa" "Ubuntu" "jammy"
check_alt "Liquid Lemur" "lemur-3" "Debian" "stretch"
check_alt "LMDE" "betsy" "Debian" "jessie"
check_alt "LMDE" "cindy" "Debian" "stretch"
check_alt "LMDE" "debbie" "Debian" "buster"
check_alt "LMDE" "elsie" "Debian" "bullseye"
check_alt "MX Linux 17" "Horizon" "Debian" "stretch"
check_alt "MX Linux 18" "Continuum" "Debian" "stretch"
check_alt "MX Linux 19" "patito feo" "Debian" "buster"
check_alt "MX Linux 21" "wildflower" "Debian" "bullseye"
check_alt "Pardus" "onyedi" "Debian" "stretch"
check_alt "Parrot" "ara" "Debian" "bullseye"
check_alt "PureOS" "green" "Debian" "sid"
check_alt "PureOS" "amber" "Debian" "buster"
check_alt "PureOS" "byzantium" "Debian" "bullseye"
check_alt "SolydXK" "solydxk-9" "Debian" "stretch"
check_alt "Sparky Linux" "Tyche" "Debian" "stretch"
check_alt "Sparky Linux" "Nibiru" "Debian" "buster"
check_alt "Sparky Linux" "Po-Tolo" "Debian" "bullseye"
check_alt "Tanglu" "chromodoris" "Debian" "jessie"
check_alt "Trisquel" "toutatis" "Ubuntu" "precise"
check_alt "Trisquel" "belenos" "Ubuntu" "trusty"
check_alt "Trisquel" "flidas" "Ubuntu" "xenial"
check_alt "Trisquel" "etiona" "Ubuntu" "bionic"
check_alt "Ubilinux" "dolcetto" "Debian" "stretch"
check_alt "Uruk GNU/Linux" "lugalbanda" "Ubuntu" "xenial"
if [ "X${DISTRO}" == "Xdebian" ]; then
print_status "Unknown Debian-based distribution, checking /etc/debian_version..."
NEWDISTRO=$([ -e /etc/debian_version ] && cut -d/ -f1 < /etc/debian_version)
if [ "X${NEWDISTRO}" == "X" ]; then
print_status "Could not determine distribution from /etc/debian_version..."
else
DISTRO=$NEWDISTRO
print_status "Found \"${DISTRO}\" in /etc/debian_version..."
fi
fi
print_status "Confirming \"${DISTRO}\" is supported..."
if [ -x /usr/bin/curl ]; then
exec_cmd_nobail "curl -sLf -o /dev/null 'https://deb.nodesource.com/${NODEREPO}/dists/${DISTRO}/Release'"
RC=$?
else
exec_cmd_nobail "wget -qO /dev/null -o /dev/null 'https://deb.nodesource.com/${NODEREPO}/dists/${DISTRO}/Release'"
RC=$?
fi
if [[ $RC != 0 ]]; then
print_status "Your distribution, identified as \"${DISTRO}\", is not currently supported, please contact NodeSource at https://github.com/nodesource/distributions/issues if you think this is incorrect or would like your distribution to be considered for support"
exit 1
fi
if [ -f "/etc/apt/sources.list.d/chris-lea-node_js-$DISTRO.list" ]; then
print_status 'Removing Launchpad PPA Repository for NodeJS...'
exec_cmd_nobail 'add-apt-repository -y -r ppa:chris-lea/node.js'
exec_cmd "rm -f /etc/apt/sources.list.d/chris-lea-node_js-${DISTRO}.list"
fi
print_status 'Adding the NodeSource signing key to your keyring...'
keyring='/usr/share/keyrings'
node_key_url="https://deb.nodesource.com/gpgkey/nodesource.gpg.key"
local_node_key="$keyring/nodesource.gpg"
if [ -x /usr/bin/curl ]; then
exec_cmd "curl -s $node_key_url | gpg --dearmor | tee $local_node_key >/dev/null"
else
exec_cmd "wget -q -O - $node_key_url | gpg --dearmor | tee $local_node_key >/dev/null"
fi
print_status "Creating apt sources list file for the NodeSource ${NODENAME} repo..."
exec_cmd "echo 'deb [signed-by=$local_node_key] https://deb.nodesource.com/${NODEREPO} ${DISTRO} main' > /etc/apt/sources.list.d/nodesource.list"
exec_cmd "echo 'deb-src [signed-by=$local_node_key] https://deb.nodesource.com/${NODEREPO} ${DISTRO} main' >> /etc/apt/sources.list.d/nodesource.list"
print_status 'Running `apt-get update` for you...'
exec_cmd 'apt-get update'
yarn_site='https://dl.yarnpkg.com/debian'
yarn_key_url="$yarn_site/pubkey.gpg"
local_yarn_key="$keyring/yarnkey.gpg"
print_status """Run \`${bold}sudo apt-get install -y ${NODEPKG}${normal}\` to install ${NODENAME} and npm
## You may also need development tools to build native addons:
sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
curl -sL $yarn_key_url | gpg --dearmor | sudo tee $local_yarn_key >/dev/null
echo \"deb [signed-by=$local_yarn_key] $yarn_site stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
"""
}
## Defer setup until we have the complete script
setup

22026
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,18 +14,21 @@
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "^2.4.3",
"@docusaurus/plugin-sitemap": "^2.4.3",
"@docusaurus/preset-classic": "^2.4.3",
"@easyops-cn/docusaurus-search-local": "^0.40.1",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2"
"@docusaurus/core": "3.9.2",
"@docusaurus/plugin-sitemap": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@easyops-cn/docusaurus-search-local": "^0.52.3",
"clsx": "^2.1.1",
"prism-react-renderer": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^2.4.3"
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/types": "3.9.2"
},
"overrides": {
"webpack": "5.88.2"
},
"browserslist": {
"production": [
@@ -40,6 +43,6 @@
]
},
"engines": {
"node": ">=16.14"
"node": ">=18.0"
}
}

View File

@@ -28,3 +28,23 @@
--ifm-color-primary-lightest: #4fddbf;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}
/* 自定义按钮样式 - 适配Docusaurus Classic主题 */
.hinas-button {
display: inline-block;
background-color: #165DFF;
color: #fff !important;
padding: 10px 24px;
border-radius: 4px;
text-decoration: none !important;
font-size: 14px;
font-weight: 500;
transition: background-color 0.2s ease;
border: none;
cursor: pointer;
margin: 24px 0;
}
.hinas-button:hover {
background-color: #0F4BD8;
color: #fff !important;
}

View File

@@ -6,95 +6,170 @@ import Layout from '@theme/Layout';
import useBaseUrl from "@docusaurus/useBaseUrl";
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import Amlogic from '@site/src/components/Amlogic';
import styles from './index.module.css';
const stats = [
{ value: '~3W', label: '满载功耗' },
{ value: '4核', label: 'ARM CPU' },
{ value: '1.6GHz', label: '最高主频' },
// { value: '一杯奶茶', label: '全年电费' },
];
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<header className={styles.heroBanner}>
<div className={styles.heroGrid} />
<div className={styles.heroGlow} />
<div className={styles.heroGlowRight} />
<div className="container">
<img src="https://doc.ecoo.top/img/hinas01.svg" alt="Logo" />
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link className="button button--secondary button--lg" style={{marginTop: "1rem", marginRight: ".5rem", marginLeft: ".5rem", display: "flex"}} to={useBaseUrl("docs/category/机顶盒刷机教程")}>保姆级刷机教程</Link>
<Link className="button button--secondary button--lg" style={{marginTop: "1rem", marginRight: ".5rem", marginLeft: ".5rem", display: "flex"}} to="download">最新固件下载</Link>
<Link className="button button--secondary button--lg" style={{marginTop: "1rem", marginRight: ".5rem", marginLeft: ".5rem", display: "flex"}} to={useBaseUrl("devices")}>设备支持适配表</Link>
</div>
<br></br>
<div className={styles.buttons}>
<Link
className="button button--success button--lg" style={{marginTop: "1rem", marginRight: ".5rem", marginLeft: ".5rem", display: "flex"}}
to={useBaseUrl("news")}>
系统最新升级公告
</Link>
<Link
className="button button--success button--lg" style={{marginTop: "1rem", marginRight: ".5rem", marginLeft: ".5rem", display: "flex"}}
to={useBaseUrl("docs/intro")}>
海纳思系统使用手册
</Link>
<div className={styles.heroContent}>
<img
src="/img/hinas01.svg"
alt="HiNas Logo"
className={styles.heroLogo}
/>
<h1 className={styles.heroTitle}>{siteConfig.title}</h1>
<p className={styles.heroSubtitle}>{siteConfig.tagline}</p>
<div className={styles.statsRow}>
{stats.map((s) => (
<div key={s.label} className={styles.statItem}>
<span className={styles.statValue}>{s.value}</span>
<span className={styles.statLabel}>{s.label}</span>
</div>
))}
</div>
<div className={styles.buttonGroup}>
<Link className={clsx(styles.btn, styles.btnPrimary)} to={useBaseUrl('docs/category/机顶盒刷机教程')}>
📖 保姆级刷机教程
</Link>
<Link className={clsx(styles.btn, styles.btnPrimary)} to="download">
最新固件下载
</Link>
<Link className={clsx(styles.btn, styles.btnPrimary)} to={useBaseUrl('devices')}>
📋 设备适配表
</Link>
</div>
<div className={styles.buttonGroup}>
<Link className={clsx(styles.btn, styles.btnSecondary)} to={useBaseUrl('news')}>
📣 系统升级公告
</Link>
<Link className={clsx(styles.btn, styles.btnSecondary)} to={useBaseUrl('docs/intro')}>
📚 海纳思使用手册
</Link>
</div>
</div>
</div>
<div className={styles.heroWave}>
<svg viewBox="0 0 1440 80" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0,40 C360,80 1080,0 1440,40 L1440,80 L0,80 Z" fill="var(--ifm-background-color)" />
</svg>
</div>
</header>
);
}
function PolicyPersistence() {
const {siteConfig} = useDocusaurusContext();
function SectionPersistence() {
return (
<div className={styles.policypersistence}>
<div className="container text--center">
<div className="row">
<div className="col" style={{marginBlock: "auto"}}>
<h2>开源免费易用的家用 Linux 服务器系统</h2>
<p>
海纳思系统一个基于开源 Linux Ubuntu 20.04 LTS 打造的 NAS 系统<br />
开发者精心打造开发内置丰富的程序和功能内网穿透网盘共享<br />
远程下载Docker安装个人博客网络建站socks5服务ftp上传下载<br />
webdav接口终端控制一键还原计划任务等等<br />
<section className={styles.section}>
<div className="container">
<div className={styles.sectionInner}>
<div className={styles.sectionText}>
<span className={styles.sectionBadge}> 开源 · 免费 · 易用</span>
<h2 className={styles.sectionTitle}>家用 Linux 服务器系统</h2>
<p className={styles.sectionDesc}>
海纳思系统基于 Ubuntu 20.04 LTS 打造的 NAS 系统开发者精心内置丰富功能
</p>
<div className={styles.tagCloud}>
{['内网穿透','网盘共享','远程下载','Docker','个人博客','网络建站','Socks5','FTP','WebDAV','终端控制','一键还原','计划任务'].map(tag => (
<span key={tag} className={styles.tag}>{tag}</span>
))}
</div>
</div>
<div style={{marginInline: "auto"}}>
<img src="img/about.png" alt="Policy Persistence" width="400" height="466" />
<div className={styles.sectionImageWrap}>
<div className={styles.imageGlow} />
<img src="img/about.png" alt="系统功能概览" className={styles.sectionImg} width="400" height="466" />
</div>
</div>
</div>
</div>
</section>
);
}
function PolicyEnforcement() {
const {siteConfig} = useDocusaurusContext();
function SectionEnforcement() {
return (
<div className={styles.policyenforcement}>
<div className="container text--center">
<div className="row">
<div style={{marginInline: "auto"}}>
<img height="250" width="400" src="img/huawei.png" alt="homepage" />
<section className={clsx(styles.section, styles.sectionAlt)}>
<div className="container">
<div className={clsx(styles.sectionInner, styles.sectionReverse)}>
<div className={styles.sectionImageWrap}>
<div className={styles.imageGlow} />
<img src="img/huawei.png" alt="海思机顶盒" className={styles.sectionImg} height="250" width="400" />
</div>
<div className="col" style={{marginBlock: "auto"}}>
<h2>将千家万户的机顶盒打造成一台超低功耗的 Linux 服务器</h2>
<p>实测功耗约 3 全年无休18/一杯奶茶钱养活它一年<br />
盒子4核心CPU内核频率达1.4GHz-1.6GHz流畅运行各项 NAS 程序<br />
作为家用存储Linux 学习学生技术孵化网络下载组网跳板均可<br />
网页建站内网穿越公网映射科学上网跑脚本定时任务等更佳<br />
我是小盒子也是大世界千家万户都有一个机顶盒开启您的探索之旅</p>
<div className={styles.sectionText}>
<span className={styles.sectionBadge}> 变废为宝</span>
<h2 className={styles.sectionTitle}>将机顶盒变成超低功耗服务器</h2>
<p className={styles.sectionDesc}>
实测功耗约 3 全年无休电费 18 /一杯奶茶钱养活它一年
盒子 4 CPU主频达 1.4~1.6GHz流畅运行各类 NAS 程序
</p>
<ul className={styles.featureList}>
<li>家用存储 / Linux 学习 / 学生技术孵化</li>
<li>网页建站 / 内网穿透 / 公网映射</li>
<li>科学上网 / 跑脚本 / 定时任务</li>
</ul>
<blockquote className={styles.sectionQuote}>
"我是小盒子,也是大世界!千家万户都有一个机顶盒,开启您的探索之旅!"
</blockquote>
</div>
</div>
</div>
</div>
</section>
);
}
function OpenCollective() {
return (
<iframe title="Sponsors" src="juanzhu.html" style={{width: "100%", height: "900px", display: "block"}}></iframe>
);
return (
<section className={styles.donateSection}>
<div className="container">
<div className={styles.donateTitleWrap}>
<h2 className={styles.donateTitle}>捐助作者持续开发</h2>
<p className={styles.donateSubtitle}>您的支持是项目持续进步的动力</p>
</div>
<div className={styles.donateRow}>
<div className={clsx(styles.donateCard, styles.donateCardBlue)}>
<div className={styles.donateCardAccent} />
<div className={styles.donateQrWrap}>
<img src="img/danote.png" alt="作者赞赏码" className={styles.donateQr} />
</div>
<div className={styles.donateCardBody}>
<h3 className={styles.donateCardTitle}>作者赞赏码</h3>
<p className={styles.donateCaption}>
作者"神雕"开发的固件和提供的个人网站为了持续维护和进步呼吁有能力的网友支持本站持续运作和固件持续开发更新不胜感激! 您的捐助将用于本站的服务器架设和固件升级维护
</p>
</div>
</div>
<div className={clsx(styles.donateCard, styles.donateCardCyan)}>
<div className={styles.donateCardAccent} />
<div className={styles.donateQrWrap}>
<img src="img/alipay.png" alt="支付宝" className={styles.donateQr} />
</div>
<div className={styles.donateCardBody}>
<h3 className={styles.donateCardTitle}>支付宝 / 远程协助</h3>
<p className={styles.donateCaption}>
可以抽出时间为小白网友提供付费远程协助包括刷机运维疑难解决等需求已组建微信群加微信注明入群将定期邀请加入
</p>
</div>
</div>
</div>
</div>
</section>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`e酷网 ${siteConfig.title}`}
@@ -103,8 +178,8 @@ export default function Home() {
<main>
<HomepageFeatures />
<Amlogic />
<PolicyPersistence />
<PolicyEnforcement />
<SectionPersistence />
<SectionEnforcement />
<OpenCollective />
</main>
</Layout>

View File

@@ -1,40 +1,485 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
/* ===== Hero ===== */
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
padding: 5rem 0 6rem;
text-align: center;
background: linear-gradient(160deg, #071525 0%, #0d2137 45%, #071525 100%);
color: #fff;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
.heroGrid {
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(6, 182, 212, 0.07) 1px, transparent 1px),
linear-gradient(90deg, rgba(6, 182, 212, 0.07) 1px, transparent 1px);
background-size: 48px 48px;
pointer-events: none;
}
.heroGlow {
position: absolute;
top: -200px;
left: 30%;
width: 600px;
height: 600px;
background: radial-gradient(circle, rgba(6, 182, 212, 0.16) 0%, transparent 65%);
pointer-events: none;
}
.heroGlowRight {
position: absolute;
bottom: -150px;
right: 20%;
width: 400px;
height: 400px;
background: radial-gradient(circle, rgba(56, 189, 248, 0.1) 0%, transparent 65%);
pointer-events: none;
}
.heroContent {
position: relative;
z-index: 1;
}
.heroLogo {
height: 120px;
margin-bottom: 1.5rem;
filter: drop-shadow(0 0 32px rgba(6, 182, 212, 0.5));
animation: floatLogo 4s ease-in-out infinite;
}
@keyframes floatLogo {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-8px); }
}
.heroTitle {
font-size: 3rem;
font-weight: 700;
margin-bottom: 0.75rem;
background: linear-gradient(90deg, #38bdf8, #06b6d4, #67e8f9);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heroSubtitle {
font-size: 1.15rem;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 2.5rem;
letter-spacing: 0.05em;
}
/* Wave bottom of hero */
.heroWave {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
line-height: 0;
}
.heroWave svg {
display: block;
width: 100%;
height: 80px;
}
/* ===== Stats ===== */
.statsRow {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 1rem;
margin-bottom: 2.5rem;
}
.statItem {
display: flex;
flex-direction: column;
align-items: center;
padding: 0.75rem 1.5rem;
border: 1px solid rgba(6, 182, 212, 0.2);
border-radius: 12px;
background: rgba(6, 182, 212, 0.07);
min-width: 90px;
transition: all 0.25s ease;
}
.statItem:hover {
border-color: rgba(6, 182, 212, 0.55);
background: rgba(6, 182, 212, 0.12);
transform: translateY(-3px);
}
.statValue {
font-size: 1.5rem;
font-weight: 700;
color: #38bdf8;
line-height: 1.2;
}
.statLabel {
font-size: 0.78rem;
color: rgba(255, 255, 255, 0.5);
margin-top: 0.25rem;
}
/* ===== Buttons ===== */
.buttonGroup {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 0.75rem;
margin-bottom: 0.75rem;
}
.btn {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.6rem 1.4rem;
border-radius: 8px;
font-size: 0.95rem;
font-weight: 500;
text-decoration: none !important;
transition: all 0.22s ease;
white-space: nowrap;
cursor: pointer;
}
.btnPrimary {
background: #0891b2;
color: #fff !important;
border: 1px solid transparent;
}
.btnPrimary:hover {
background: #0e7490;
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(6, 182, 212, 0.38);
color: #fff !important;
}
.btnSecondary {
background: rgba(255,255,255,0.05);
color: #7dd3fc !important;
border: 1px solid rgba(6, 182, 212, 0.32);
}
.btnSecondary:hover {
background: rgba(6, 182, 212, 0.12);
border-color: #06b6d4;
color: #bae6fd !important;
transform: translateY(-2px);
}
/* ===== Sections ===== */
.section {
padding: 5rem 0;
}
.sectionAlt {
background: var(--ifm-color-emphasis-100);
}
.sectionInner {
display: flex;
align-items: center;
gap: 4rem;
}
.sectionReverse {
flex-direction: row-reverse;
}
.sectionText {
flex: 1;
}
.sectionImageWrap {
flex: 1;
display: flex;
justify-content: center;
position: relative;
}
.imageGlow {
position: absolute;
inset: -20px;
background: radial-gradient(ellipse at center, rgba(6, 182, 212, 0.12) 0%, transparent 70%);
border-radius: 24px;
pointer-events: none;
}
.sectionImg {
max-width: 100%;
border-radius: 16px;
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.14);
transition: transform 0.35s ease, box-shadow 0.35s ease;
position: relative;
z-index: 1;
}
.sectionImg:hover {
transform: translateY(-6px) scale(1.01);
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.2);
}
.sectionBadge {
display: inline-block;
padding: 0.3rem 1rem;
background: rgba(8, 145, 178, 0.1);
color: #0891b2;
border: 1px solid rgba(6, 182, 212, 0.25);
border-radius: 100px;
font-size: 0.8rem;
font-weight: 600;
margin-bottom: 1rem;
letter-spacing: 0.04em;
}
:global([data-theme='dark']) .sectionBadge {
background: rgba(6, 182, 212, 0.12);
color: #38bdf8;
border-color: rgba(6, 182, 212, 0.28);
}
.sectionTitle {
font-size: 1.9rem;
font-weight: 700;
margin-bottom: 1rem;
line-height: 1.35;
}
.sectionDesc {
color: var(--ifm-color-emphasis-700);
line-height: 1.85;
font-size: 1rem;
margin-bottom: 1rem;
}
/* Tag cloud */
.tagCloud {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 1rem;
}
.tag {
display: inline-block;
padding: 0.25rem 0.75rem;
background: var(--ifm-color-emphasis-100);
border: 1px solid var(--ifm-color-emphasis-300);
border-radius: 6px;
font-size: 0.82rem;
color: var(--ifm-color-emphasis-700);
transition: all 0.2s;
}
.tag:hover {
border-color: #06b6d4;
color: #0891b2;
background: rgba(6, 182, 212, 0.06);
}
:global([data-theme='dark']) .tag:hover {
color: #38bdf8;
}
/* Feature list */
.featureList {
list-style: none;
padding: 0;
margin-top: 1.25rem;
margin-bottom: 1.5rem;
}
.featureList li {
padding: 0.45rem 0 0.45rem 1.5rem;
position: relative;
color: var(--ifm-color-emphasis-700);
font-size: 0.95rem;
border-bottom: 1px solid var(--ifm-color-emphasis-200);
}
.featureList li:last-child {
border-bottom: none;
}
.featureList li::before {
content: '▸';
position: absolute;
left: 0;
color: #06b6d4;
font-size: 0.9rem;
}
/* Quote */
.sectionQuote {
margin: 0;
padding: 1rem 1.25rem;
border-left: 3px solid #06b6d4;
background: rgba(6, 182, 212, 0.05);
border-radius: 0 8px 8px 0;
font-style: italic;
color: var(--ifm-color-emphasis-600);
font-size: 0.92rem;
line-height: 1.7;
}
:global([data-theme='dark']) .sectionQuote {
background: rgba(6, 182, 212, 0.08);
}
/* ===== Donate Section ===== */
.donateSection {
padding: 5rem 0;
background: linear-gradient(180deg, var(--ifm-color-emphasis-100) 0%, var(--ifm-background-color) 100%);
}
.donateTitleWrap {
text-align: center;
margin-bottom: 2.5rem;
}
.donateTitle {
font-size: 1.75rem;
font-weight: 700;
margin-bottom: 0.5rem;
}
.donateSubtitle {
color: var(--ifm-color-emphasis-600);
font-size: 0.95rem;
margin: 0;
}
.donateRow {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 2rem;
}
.donateCard {
flex: 1;
max-width: 320px;
min-width: 260px;
background: var(--ifm-background-color);
border-radius: 16px;
border: 1px solid var(--ifm-color-emphasis-200);
overflow: hidden;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.07);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.donateCard:hover {
transform: translateY(-8px);
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.13);
}
.donateCardAccent {
height: 4px;
width: 100%;
}
.donateCardBlue .donateCardAccent {
background: linear-gradient(90deg, #0ea5e9, #38bdf8);
}
.donateCardCyan .donateCardAccent {
background: linear-gradient(90deg, #06b6d4, #22d3ee);
}
.donateQrWrap {
display: flex;
justify-content: center;
padding: 1.5rem 1.5rem 1rem;
background: var(--ifm-color-emphasis-100);
}
.donateQr {
width: 160px;
height: 160px;
object-fit: contain;
border-radius: 12px;
box-shadow: 0 4px 16px rgba(0,0,0,0.1);
}
.donateCardBody {
padding: 1.25rem 1.5rem 1.5rem;
}
.donateCardTitle {
font-size: 1rem;
font-weight: 700;
margin-bottom: 0.75rem;
color: var(--ifm-color-emphasis-900);
}
.donateCaption {
font-size: 0.875rem;
color: var(--ifm-color-emphasis-600);
line-height: 1.75;
margin: 0;
}
/* ===== Responsive ===== */
@media (max-width: 996px) {
.sectionInner,
.sectionReverse {
flex-direction: column !important;
gap: 2.5rem;
}
.sectionImageWrap {
width: 100%;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
margin-top: 5px;
}
@media (max-width: 768px) {
.heroBanner {
padding: 3.5rem 0 5rem;
}
.policypersistence {
padding: 60px 0;
font-size: 1.3rem;
justify-content: center;
line-height: 40px;
background-color: var(--ifm-color-emphasis-100);
}
.heroTitle {
font-size: 2.2rem;
}
.policyenforcement {
padding: 60px 0;
font-size: 1.3rem;
justify-content: center;
line-height: 40px;
}
.heroLogo {
height: 90px;
}
.heroSubtitle {
font-size: 1rem;
}
.statsRow {
gap: 0.75rem;
}
.statItem {
padding: 0.6rem 1rem;
min-width: 76px;
}
.statValue {
font-size: 1.25rem;
}
.sectionTitle {
font-size: 1.5rem;
}
.section {
padding: 3rem 0;
}
.donateSection {
padding: 3rem 0;
}
}

View File

@@ -3,47 +3,50 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>海纳思系统官方通告</title>
<meta name="description" content="海纳思系统官方通告页面,提供广告位招租信息及系统使用统计。">
<title>每晚8点直播使用教程</title>
<meta name="description" content="每晚8点直播使用教程详细讲解各类使用方法">
<style>
body {
max-width: 40em;
max-width: 800px; /* 扩大页面最大宽度,适配图片显示 */
margin: 0 auto;
padding: 20px;
font-family: Tahoma, Verdana, Arial, sans-serif;
text-align: center; /* 全局文本居中,方便主题文字和图片对齐 */
}
#cookieConsent {
background: #f1f1f1;
padding: 10px;
margin: 10px 0;
border-radius: 4px;
/* 图片样式:居中、自适应宽度、不超出容器 */
.ad-image {
display: block;
margin: 20px auto; /* 上下间距,左右自动居中 */
max-width: 100%; /* 响应式,不超出容器宽度 */
height: auto; /* 保持图片宽高比 */
border: none; /* 去除默认边框 */
}
h1 {
color: #333; /* 标题颜色更舒适 */
margin-bottom: 30px;
}
footer {
margin-top: 30px;
color: #666;
}
</style>
</head>
<body>
<header>
<h1>海纳思系统官方广告位招租</h1>
<h1>每晚8点直播使用教程</h1>
</header>
<h2>42000+装机数</h2>
<h2>日活8000+</h2>
<h2>日增约100台</h2>
<h2>要求:符合海纳思服务器的环境需求</h2>
<h2>捐助并投放,与作者共赢!请联系:<a href="mailto:teasiu@163.com">teasiu@163.com</a></h2>
<div id="visitCounter"></div>
<!-- 居中显示ad.jpg图片 -->
<img src="ad.jpg" alt="直播使用教程相关图片" class="ad-image">
<footer>
版权 © <span id="currentYear"></span> <a href="https://www.ecoo.top/">www.ecoo.top</a>
</footer>
<script>
// 动态年份
document.getElementById('currentYear').textContent = new Date().getFullYear();
</script>
</body>
</html>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 232 KiB

BIN
static/ad1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -1,14 +1,12 @@
#!/bin/bash
dlfile="mv100-99.flash.gz"
echo "
+----------------------------------------------------------------------
| 海纳思系统hi3798mv100升级系统专用脚本温馨提示
+----------------------------------------------------------------------
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20251001,
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20260101,
+----------------------------------------------------------------------
| 升级20251001版专用原系统将完全清除请注意保存资料。
| 升级20260101版专用原系统将完全清除请注意保存资料。
+----------------------------------------------------------------------
| 如果不确定请按CTRL+C结束此脚本.
+----------------------------------------------------------------------
@@ -19,47 +17,86 @@ read -p "继续执行?[y/n]: " result
temp_file=$(mktemp)
curl -sSL https://hi.ecoo.top/mirror-utils.sh > $temp_file
if [ ! -f /etc/public-download.sh ] || [ "$(cat $temp_file|md5sum|awk '{print $1}')" != "$(cat /etc/public-download.sh|md5sum|awk '{print $1}')" ]; then
cp $temp_file /etc/public-download.sh
cp $temp_file /etc/public-download.sh
fi
rm -f $temp_file
source /etc/public-download.sh
if [ $(whoami) != "root" ];then
_exit 1 "请使用root权限切换用户"
if [ $(whoami) != "root" ]; then
_exit 1 "请使用root权限切换用户"
fi
model=$(cpuid)
platform=hi3798mv100
if [ "$(echo ${model})" != "$platform" ];then
_exit 1 "本升级程序仅支持${platform}机型!"
if [ "$(echo ${model})" != "$platform" ]; then
_exit 1 "本升级程序仅支持${platform}机型!"
fi
promode=$(uname -r|cut -c 13-)
if [ $promode = 16010066 ];then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
if [ $promode = 16010066 ]; then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
fi
space_left=$(df -hT|grep /dev/root|awk '{print $4}')
if [ "$(expr $(echo ${space_left%%G}) \> 1)" != 1 ];then
_exit 1 "请确保剩余空间大于1G"
# ---------------------------------------------------------------
# 检测 /tmp 剩余空间,不足 400M 时尝试扩容或清理
# ---------------------------------------------------------------
printStr yellow "检测 /tmp 可用空间..."
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}') # 单位KB
if [ "${TMP_AVAIL}" -lt 409600 ]; then # 409600 KB = 400M
printStr yellow "/tmp 剩余空间不足 400M当前 ${TMP_AVAIL} KB尝试 remount 扩容..."
mount -o remount,size=500M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "/tmp 已扩容至 500M"
else
printStr yellow "remount 失败,尝试清理 /tmp 旧文件..."
# 删除超过 1 天的普通文件
find /tmp -type f -mtime +1 -delete 2>/dev/null
# 删除同名残留包(防止上次下载中断)
rm -f /tmp/${dlfile}
# 清理后再次尝试扩容
mount -o remount,size=400M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "清理后 remount 成功,/tmp 已扩容至 400M"
else
# 最后兜底:检查清理后实际剩余空间是否已满足要求
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}')
if [ "${TMP_AVAIL}" -lt 409600 ]; then
_exit 1 "/tmp 空间不足且无法扩容(当前 ${TMP_AVAIL} KB请手动清理后重试"
else
printStr green "清理后 /tmp 剩余空间已满足要求(${TMP_AVAIL} KB"
fi
fi
fi
else
printStr green "/tmp 剩余空间充足(${TMP_AVAIL} KB继续..."
fi
# ---------------------------------------------------------------
printStr yellow "检测并选定下载节点..."
get_mirror_url
printStr yellow "下载刷机包..."
dl_get update/system/${dlfile} /${dlfile}
dl_get update/system/${dlfile} /tmp/${dlfile}
printStr yellow "校验刷机包..."
echo "${NODE_URL}/update/system/${dlfile}.md5sum"
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /${dlfile})" ] && _exit 1 "文件校验失败,请重试"
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /tmp/${dlfile})" ] && \
_exit 1 "文件校验失败,请重试"
printStr green "下载完成!"
printStr yellow "刷机中,请勿断电..."
gunzip -c /${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
gunzip -c /tmp/${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
[[ $? == 0 ]] && printStr yellow "
if [[ $? == 0 ]]; then
rm -f /tmp/${dlfile} # 刷机成功后清理临时文件
printStr yellow "
==============================================================
恭喜刷机已完成系统重启中待初始化5-8分钟结束后即可登录。
==============================================================" && reboot || \
_exit 1 "刷机失败"
=============================================================="
reboot
else
_exit 1 "刷机失败"
fi

View File

@@ -1,21 +1,20 @@
#!/bin/bash
if [ -f /sys/firmware/devicetree/base/my_board_info/custom_id ];then
custom_id=$(tr -d '\0' < /sys/firmware/devicetree/base/my_board_info/custom_id)
if [ "${custom_id}" = "n2ns1" ];then
dlfile="n2-99.flash.gz"
fi
else
dlfile="mv200-99.flash.gz"
dlfile="mv200-99.flash.gz"
fi
echo "
+----------------------------------------------------------------------
| 海纳思系统hi3798mv200升级系统专用脚本温馨提示
+----------------------------------------------------------------------
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20251001,
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20260101,
+----------------------------------------------------------------------
| 升级20251001版专用原系统将完全清除请注意保存资料。
| 升级20260101版专用原系统将完全清除请注意保存资料。
+----------------------------------------------------------------------
| 如果不确定请按CTRL+C结束此脚本.
+----------------------------------------------------------------------
@@ -26,55 +25,90 @@ read -p "继续执行?[y/n]: " result
temp_file=$(mktemp)
curl -sSL https://hi.ecoo.top/mirror-utils.sh > $temp_file
if [ ! -f /etc/public-download.sh ] || [ "$(cat $temp_file|md5sum|awk '{print $1}')" != "$(cat /etc/public-download.sh|md5sum|awk '{print $1}')" ]; then
cp $temp_file /etc/public-download.sh
cp $temp_file /etc/public-download.sh
fi
rm -f $temp_file
source /etc/public-download.sh
model=$(cpuid)
platform=hi3798mv200
if [ "$(echo ${model})" != "$platform" ];then
_exit 1 "本升级程序仅支持${platform}机型!"
if [ "$(echo ${model})" != "$platform" ]; then
_exit 1 "本升级程序仅支持${platform}机型!"
fi
if [ $(whoami) != "root" ];then
_exit 1 "请使用root权限切换系统命令"
if [ $(whoami) != "root" ]; then
_exit 1 "请使用root权限切换系统命令"
fi
is64bit=$(getconf LONG_BIT)
if [ "${is64bit}" != '64' ];then
_exit 1 "抱歉, 当前系统切换版本不支持32位系统, 请使用64位系统!";
if [ "${is64bit}" != '64' ]; then
_exit 1 "抱歉, 当前系统切换版本不支持32位系统, 请使用64位系统!"
fi
promode=$(uname -r|cut -c 13-)
if [ $promode = 26010066 ];then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
fi
#nasversion=`cat /etc/nasversion`
#if [ $nasversion = "20230101" ];then
# _exit 1 "已经是20230101最新版无需升级系统"
#fi
space_left=$(df -hT|grep /dev/root|awk '{print $4}')
if [ "$(expr $(echo ${space_left%%G}) \> 1)" != 1 ];then
_exit 1 "请确保剩余空间大于1G"
promode=$(uname -r|cut -c 13-)
if [ $promode = 26010066 ]; then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
fi
# ---------------------------------------------------------------
# 检测 /tmp 剩余空间,不足 400M 时尝试扩容或清理
# ---------------------------------------------------------------
printStr yellow "检测 /tmp 可用空间..."
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}') # 单位KB
if [ "${TMP_AVAIL}" -lt 409600 ]; then # 409600 KB = 400M
printStr yellow "/tmp 剩余空间不足 400M当前 ${TMP_AVAIL} KB尝试 remount 扩容..."
mount -o remount,size=500M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "/tmp 已扩容至 500M"
else
printStr yellow "remount 失败,尝试清理 /tmp 旧文件..."
# 删除超过 1 天的普通文件
find /tmp -type f -mtime +1 -delete 2>/dev/null
# 删除同名残留包(防止上次下载中断)
rm -f /tmp/${dlfile}
# 清理后再次尝试扩容
mount -o remount,size=400M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "清理后 remount 成功,/tmp 已扩容至 400M"
else
# 最后兜底:检查清理后实际剩余空间是否已满足要求
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}')
if [ "${TMP_AVAIL}" -lt 409600 ]; then
_exit 1 "/tmp 空间不足且无法扩容(当前 ${TMP_AVAIL} KB请手动清理后重试"
else
printStr green "清理后 /tmp 剩余空间已满足要求(${TMP_AVAIL} KB"
fi
fi
fi
else
printStr green "/tmp 剩余空间充足(${TMP_AVAIL} KB继续..."
fi
# ---------------------------------------------------------------
printStr yellow "检测并选定下载节点..."
get_mirror_url
printStr yellow "下载刷机包..."
dl_get update/system/${dlfile} /${dlfile}
dl_get update/system/${dlfile} /tmp/${dlfile}
printStr yellow "校验刷机包..."
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /${dlfile})" ] && _exit 1 "文件校验失败,请重试"
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /tmp/${dlfile})" ] && \
_exit 1 "文件校验失败,请重试"
printStr green "下载完成!"
printStr yellow "刷机中,请勿断电..."
gunzip -c /${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
gunzip -c /tmp/${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
[[ $? == 0 ]] && printStr yellow "
if [[ $? == 0 ]]; then
rm -f /tmp/${dlfile} # 刷机成功后清理临时文件
printStr yellow "
==============================================================
刷机已完成请手工关闭电源并再次开启等待初始化5-8分钟即可。
==============================================================" && reboot || \
_exit 1 "刷机失败"
=============================================================="
reboot
else
_exit 1 "刷机失败"
fi

View File

@@ -1,14 +1,12 @@
#!/bin/bash
dlfile="mv300-99.flash.gz" # 文件路径
echo "
+----------------------------------------------------------------------
| 海纳思系统hi3798mv300升级系统专用脚本温馨提示
+----------------------------------------------------------------------
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20251001,
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20260101,
+----------------------------------------------------------------------
| 升级20251001版专用原系统将完全清除请注意保存资料。
| 升级20260101版专用原系统将完全清除请注意保存资料。
+----------------------------------------------------------------------
| 如果不确定请按CTRL+C结束此脚本.
+----------------------------------------------------------------------
@@ -19,56 +17,90 @@ read -p "继续执行?[y/n]: " result
temp_file=$(mktemp)
curl -sSL https://hi.ecoo.top/mirror-utils.sh > $temp_file
if [ ! -f /etc/public-download.sh ] || [ "$(cat $temp_file|md5sum|awk '{print $1}')" != "$(cat /etc/public-download.sh|md5sum|awk '{print $1}')" ]; then
cp $temp_file /etc/public-download.sh
cp $temp_file /etc/public-download.sh
fi
rm -f $temp_file
source /etc/public-download.sh
model=$(cpuid)
platform=hi3798mv300
if [ "$(echo ${model})" != "$platform" ];then
_exit 1 "本升级程序仅支持${platform}机型!"
if [ "$(echo ${model})" != "$platform" ]; then
_exit 1 "本升级程序仅支持${platform}机型!"
fi
if [ $(whoami) != "root" ];then
_exit 1 "请使用root权限切换系统命令"
if [ $(whoami) != "root" ]; then
_exit 1 "请使用root权限切换系统命令"
fi
is64bit=$(getconf LONG_BIT)
if [ "${is64bit}" != '64' ];then
_exit 1 "抱歉, 当前系统切换版本不支持32位系统, 请使用64位系统!";
if [ "${is64bit}" != '64' ]; then
_exit 1 "抱歉, 当前系统切换版本不支持32位系统, 请使用64位系统!"
fi
promode=$(uname -r|cut -c 13-)
if [ $promode = 36010066 ];then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
if [ $promode = 36010066 ]; then
_exit 1 "专业版用户请使用vipupgrade命令进行升级"
fi
#nasversion=`cat /etc/nasversion`
#if [ $nasversion = "20230101" ];then
# _exit 1 "已经是20230101最新版无需升级系统"
#fi
space_left=$(df -hT|grep /dev/root|awk '{print $4}')
if [ "$(expr $(echo ${space_left%%G}) \> 1)" != 1 ];then
_exit 1 "请确保剩余空间大于1G"
# ---------------------------------------------------------------
# 检测 /tmp 剩余空间,不足 500M 时尝试扩容或清理
# ---------------------------------------------------------------
printStr yellow "检测 /tmp 可用空间..."
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}') # 单位KB
if [ "${TMP_AVAIL}" -lt 512000 ]; then # 512000 KB ≈ 500M
printStr yellow "/tmp 剩余空间不足 500M当前 ${TMP_AVAIL} KB尝试 remount 扩容..."
mount -o remount,size=500M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "/tmp 已扩容至 500M"
else
printStr yellow "remount 失败,尝试清理 /tmp 旧文件..."
# 删除超过 1 天的普通文件
find /tmp -type f -mtime +1 -delete 2>/dev/null
# 删除同名残留包(防止上次下载中断)
rm -f /tmp/${dlfile}
# 清理后再次尝试扩容
mount -o remount,size=450M /tmp 2>/dev/null
if [ $? -eq 0 ]; then
printStr green "清理后 remount 成功,/tmp 已扩容至 450M"
else
# 最后再检查一次实际剩余空间,也许清理后已经够用
TMP_AVAIL=$(df -T | grep '/tmp' | awk '{print int($5)}')
if [ "${TMP_AVAIL}" -lt 498000 ]; then
_exit 1 "/tmp 空间不足且无法扩容(当前 ${TMP_AVAIL} KB请手动清理后重试"
else
printStr green "清理后 /tmp 剩余空间已满足要求(${TMP_AVAIL} KB"
fi
fi
fi
else
printStr green "/tmp 剩余空间充足(${TMP_AVAIL} KB继续..."
fi
# ---------------------------------------------------------------
printStr yellow "检测并选定下载节点..."
get_mirror_url
printStr yellow "下载刷机包..."
dl_get update/system/${dlfile} /${dlfile}
dl_get update/system/${dlfile} /tmp/${dlfile}
printStr yellow "校验刷机包..."
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /${dlfile})" ] && _exit 1 "文件校验失败,请重试"
[ "$(get_md5 -c ${NODE_URL}/update/system/${dlfile}.md5sum ${dlfile})" != "$(get_md5 -l /tmp/${dlfile})" ] && \
_exit 1 "文件校验失败,请重试"
printStr green "下载完成!"
printStr yellow "刷机中,请勿断电..."
gunzip -c /${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
gunzip -c /tmp/${dlfile} | dd of=/dev/mmcblk0 bs=1024 seek=1024 status=progress conv=sync
[[ $? == 0 ]] && printStr yellow "
if [[ $? == 0 ]]; then
rm -f /tmp/${dlfile} # 刷机成功后清理临时文件
printStr yellow "
==============================================================
刷机已完成请手工关闭电源并再次开启等待初始化5-8分钟即可。
==============================================================" && reboot || \
_exit 1 "刷机失败"
=============================================================="
reboot
else
_exit 1 "刷机失败"
fi

View File

@@ -50,9 +50,9 @@ echo "
+----------------------------------------------------------------------
| 海纳思系统hi3798mv200升级系统 N2 恩兔 专用脚本温馨提示:
+----------------------------------------------------------------------
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20251001,
| 此专用脚本可以让你在任意版本的NAS系统下一键升级到20260101,
+----------------------------------------------------------------------
| 升级20251001版专用原系统将完全清除请注意保存资料。
| 升级20260101版专用原系统将完全清除请注意保存资料。
+----------------------------------------------------------------------
| 如果不确定请按CTRL+C结束此脚本.
+----------------------------------------------------------------------

View File

@@ -170,12 +170,12 @@ if [ ! -s /etc/xiaoya/docker_address.txt ]; then
fi
docker stop xiaoya
docker rm xiaoya
docker rmi registry.cn-hangzhou.aliyuncs.com/histb/xiaoya:latest
docker pull registry.cn-hangzhou.aliyuncs.com/histb/xiaoya:latest
docker rmi registry.cn-hangzhou.aliyuncs.com/ecoo/xiaoya:latest
docker pull registry.cn-hangzhou.aliyuncs.com/ecoo/xiaoya:latest
if [[ -f /etc/xiaoya/proxy.txt ]] && [[ -s /etc/xiaoya/proxy.txt ]]; then
proxy_url=$(head -n1 /etc/xiaoya/proxy.txt)
docker run -d -p 5678:80 -p 2345:2345 -p 2346:2346 --env HTTP_PROXY="$proxy_url" --env HTTPS_PROXY="$proxy_url" --env no_proxy="*.aliyundrive.com" -v /etc/xiaoya:/data --restart=always --name=xiaoya registry.cn-hangzhou.aliyuncs.com/histb/xiaoya:latest
docker run -d -p 5678:80 -p 2345:2345 -p 2346:2346 --env HTTP_PROXY="$proxy_url" --env HTTPS_PROXY="$proxy_url" --env no_proxy="*.aliyundrive.com" -v /etc/xiaoya:/data --restart=always --name=xiaoya registry.cn-hangzhou.aliyuncs.com/ecoo/xiaoya:latest
else
docker run -d -p 5678:80 -p 2345:2345 -p 2346:2346 -v /etc/xiaoya:/data --restart=always --name=xiaoya registry.cn-hangzhou.aliyuncs.com/histb/xiaoya:latest
docker run -d -p 5678:80 -p 2345:2345 -p 2346:2346 -v /etc/xiaoya:/data --restart=always --name=xiaoya registry.cn-hangzhou.aliyuncs.com/ecoo/xiaoya:latest
fi