缘起
由于有需求(自己要用网络存储/家里人要看电视/家长手机存储不够&自己手机存储不够有同步照片需求/家长比较在乎其他服务提供商云存储的隐私问题),遂在今年3月左右捡垃圾创出了chiNAS(
其实家里原来还有一台i5-10400(2022年笔记本电脑没办法开机的时候买的新电脑),但是23年3月笔记本电脑被我修好之后就一直放在那边没什么用,之前是一直开着windows11+VMWare Worksation当游戏机(Parsec串流在Linux里面玩ys),然后VMWare上面直通硬盘跑的基于redpill的黑群(当时参考了白(shiroa)的文章,在此感谢!)
既然现在ys都半退坑了/有了SnapDragon 8+ Gen1的新设备/功耗65W拿来当NAS太高了,遂新组了台chiNAS&那台机器学猫猫拿来当Homelab用了,现在还在被PVE创,大概一个月后会更新年轻人的第一台PVE
此文章为布谷计划的第一篇更新!下一篇文章:宁波外国语学校、浙江省八一学校生存指南(第二版)
配置
这是chi捡来的小垃圾!不含硬盘总价200CNY都没到!
组件 | 型号 | 价格/预估价格 | 来源 |
---|---|---|---|
CPU&主板 | Intel Celeron N3150 - Colorful N3150m Motherboard | 80CNY | 闲鱼 |
内存 | Kingston DDR3 1600MHz 4GB*2 | 18*2=36CNY | 闲鱼 |
电源 | 二手拆机长城200W | 19+5=24CNY | 淘宝 |
PCIE2SATA* | PCIE转SATA卡 4口SATA线 | 26CNY | 闲鱼 |
硬盘供电扩展* | 1拖4 | 8.8CNY | 淘宝 |
机箱 | idk product name | idk how much CNY | 拆机 |
SSD硬盘 | Kingston 120GB | 28CNY | 闲鱼 |
HDD硬盘 | Sigate 500GB | 预估30CNY | 拆机 |
HDD硬盘 | Sigate 500GB | 预估30CNY | 拆机 |
HDD硬盘 | TOSHIBA P300 2TB | 90CNY(不含运费) | 二手🐴 |
总价 | 不含硬盘2盘位 | 140CNY | |
总价 | 不含硬盘 | 174.8CNY | |
总价 | 我全都要! | 352.8CNY |
*这两个东西如果是要6盘位的话是必须的,当然如果你盘不多还想省钱可以选择2盘位
开创
是时候进入开创环节啦!
拿到主板,插好运存,连接24pin电源,用螺丝刀碰下电源跳线,测试主板能不能用, 然后进入PE系统检查情况(
检查成功我们就可以用RR引导安装黑群啦!
下载RR镜像,准备一个U盘,刷入,插到机子上开启,慢慢等待RR加载完,在Web页上选择型号(RR官方建议SA6000,兼容大部分U,我当时选的是RS什么来着),编译内核,安装DSM,大功告成!
记得每次开机的时候插上你的那个刷了RR的U盘,那是启动盘,要启动用
使用黑群DSM7.2时候遇到的一些问题
- VideoStation强制要求安装AME(Advanced Media Extensions)
去RR群组问了下 说是体验卡到期了要洗白,但是这里有篇文章不需要登录就可以安装AME,绕过了登录限制
- CPU信息不准确
同样是这篇文章里面提供了修改CPU信息的方法
修改之后的结果是这样的:
- 公网IP DDNS服务
如果家里有公网IP可以考虑一下,如果不是公网IP可以考虑frp穿透出去
这里可以给大家一个sh文件(适用于CloudFlare解析,来源Acha666,在此感谢!)
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
# API key, see https://dash.cloudflare.com/profile/api-tokens,
# incorrect api-key results in E_UNAUTH error
CFKEY=[Your CF Key]
# Zone name, eg: example.com
CFZONE_NAME=host.moe
# Hostname to update, eg: homeserver.example.com
CFRECORD_NAME=the-host.host.moe
# Record type, A(IPv4)|AAAA(IPv6), default IPv4
CFRECORD_TYPE=A
# Cloudflare TTL for record, between 120 and 86400 seconds
CFTTL=120
# Ignore local file, update ip anyway
FORCE=false
WANIPSITE="http://ipv4.icanhazip.com"
# Site to retrieve WAN ip, other examples are: bot.whatismyipaddress.com, https://api.ipify.org/ ...
if [ "$CFRECORD_TYPE" = "A" ]; then
:
elif [ "$CFRECORD_TYPE" = "AAAA" ]; then
WANIPSITE="http://ipv6.icanhazip.com"
else
echo "$CFRECORD_TYPE specified is invalid, CFRECORD_TYPE can only be A(for IPv4)|AAAA(for IPv6)"
exit 2
fi
# get parameter
while getopts k:h:z:t:f: opts; do
case ${opts} in
k) CFKEY=${OPTARG} ;;
h) CFRECORD_NAME=${OPTARG} ;;
z) CFZONE_NAME=${OPTARG} ;;
t) CFRECORD_TYPE=${OPTARG} ;;
f) FORCE=${OPTARG} ;;
esac
done
# If required settings are missing just exit
if [ "$CFKEY" = "" ]; then
echo "Missing api-key, get at: https://www.cloudflare.com/a/account/my-account"
echo "and save in ${0} or using the -k flag"
exit 2
fi
if [ "$CFRECORD_NAME" = "" ]; then
echo "Missing hostname, what host do you want to update?"
echo "save in ${0} or using the -h flag"
exit 2
fi
# If the hostname is not a FQDN
if [ "$CFRECORD_NAME" != "$CFZONE_NAME" ] && ! [ -z "${CFRECORD_NAME##*$CFZONE_NAME}" ]; then
CFRECORD_NAME="$CFRECORD_NAME.$CFZONE_NAME"
echo " => Hostname is not a FQDN, assuming $CFRECORD_NAME"
fi
# Get current and old WAN ip
WAN_IP=`curl -s ${WANIPSITE}`
WAN_IP_FILE=/volume2/chiDisk1/.cf-wan_ip_$CFRECORD_NAME.txt
if [ -f $WAN_IP_FILE ]; then
OLD_WAN_IP=`cat $WAN_IP_FILE`
else
echo "No file, need IP"
OLD_WAN_IP=""
fi
# If WAN IP is unchanged an not -f flag, exit here
if [ "$WAN_IP" = "$OLD_WAN_IP" ] && [ "$FORCE" = false ]; then
echo "WAN IP Unchanged, to update anyway use flag -f true"
exit 0
fi
# Get zone_identifier & record_identifier
# 注意!这个ID_FILE地址需要改为自己所在目录($PWD)的地址
ID_FILE=($PWD)/.cf-id_$CFRECORD_NAME.txt
if [ -f $ID_FILE ] && [ $(wc -l $ID_FILE | cut -d " " -f 1) == 4 ] \
&& [ "$(sed -n '3,1p' "$ID_FILE")" == "$CFZONE_NAME" ] \
&& [ "$(sed -n '4,1p' "$ID_FILE")" == "$CFRECORD_NAME" ]; then
CFZONE_ID=$(sed -n '1,1p' "$ID_FILE")
CFRECORD_ID=$(sed -n '2,1p' "$ID_FILE")
else
echo "Updating zone_identifier & record_identifier"
CFZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$CFZONE_NAME" -H "Authorization: Bearer $CFKEY" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
CFRECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records?name=$CFRECORD_NAME" -H "Authorization: Bearer $CFKEY" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 )
echo "$CFZONE_ID" > $ID_FILE
echo "$CFRECORD_ID" >> $ID_FILE
echo "$CFZONE_NAME" >> $ID_FILE
echo "$CFRECORD_NAME" >> $ID_FILE
fi
# If WAN is changed, update cloudflare
echo "Updating DNS to $WAN_IP"
RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records/$CFRECORD_ID" \
-H "Authorization: Bearer $CFKEY" \
-H "Content-Type: application/json" \
--data "{\"id\":\"$CFZONE_ID\",\"type\":\"$CFRECORD_TYPE\",\"name\":\"$CFRECORD_NAME\",\"content\":\"$WAN_IP\", \"ttl\":$CFTTL}")
if [ "$RESPONSE" != "${RESPONSE%success*}" ] && [ "$(echo $RESPONSE | grep "\"success\":true")" != "" ]; then
echo "Updated succesfuly!"
echo $WAN_IP > $WAN_IP_FILE
exit
else
echo 'Something went wrong :('
echo "Response: $RESPONSE"
exit 1
fi
然后把bash /path/to/ddns.sh
添加到DSM的定期任务就行啦!
/dev/dri
为空
没核显驱动,现在还在排查问题,TO BE CONTINUED
个人怀疑是插上HDMI/VGA口显示输出核显才可能工作
用途
现在这台NAS上面在跑的服务:
- Audio Station: 听歌
- Video Station: 机顶盒连着/自己这里也有,因为缺核显驱动JellyFin没法正常安装遂作罢
- Virtual Machine Services: 里面装了一个ArchLinux虚拟机,xfce桌面环境,开了杜叔叔和小猫咪verge,nbfls机房里面聊子兰用,可惜nas最近太创。
- RAID1存储了一些自己的珍贵数据和资料
- 可能还会跑些小服务
感觉DSM体验还是挺不错的,N3150转码速度也看得过去(Video Station MKV/DTS),这台机器目前放在了客厅(路由器旁边,和路由器共用一个插线板),有线网络直连路由器,靠近家长的房间,有点小小的吵(可能是硬盘声,因为这台机子没有CPU风扇,只有散热片,TDP6W还要什么自行车(x),但是基本上是可以忍受的(如果是那种对噪音很敏感的当我没说((),最大的遗憾是机箱有点太大了加上自己的房间只有一根6类线接入问过猫猫老旧路由器不插电又当不了交换机遂作罢扔外面去了。还有可能电网也不太稳定,后期可能会考虑加购个UPS,突然断电很伤HDD(
以上。
Preview: