惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

Loong's Blog

长春之行 记录2025年的国庆 长期规划 异地组网联机游戏 对2024年的总结 使用Git进行团队合作 使用DDNS访问内网设备 开发环境管理工具 关于 博客迁移 合肥两个月生活体验 通过Jenkins自动化构建 破解光猫超级用户密码 归档 日记 工具 开发 链接 实践 搜索 随笔 团队合作 网络 折腾
黑群晖使用体验
2023-06-28 · via Loong's Blog

Featured image of post 黑群晖使用体验

黑群晖使用体验

 刚毕业想到去年在淘宝买的蜗牛星际NAS存储,直到有较充裕的时间开始折腾下;

 说明下我的NAS为四盘位的蜗牛星际,待安装的系统为7.1.0-42661,可参考该文章,由于该教程过于简陋,所以下面介绍我的安装过程,顺便补充系统使用上的问题.

制作U盘引导

 引导一定要根据系统型号与版本进行选择,一般商家会提供U盘引导,并提供了特定pat文件;后续如果升级系统,可参考该引导配置制作新的U盘引导,最好用新的U盘制作U引导,下面介绍U盘引导的制作.

  1. 准备工作

 首先需要下载必要工具,链接:https://pan.baidu.com/s/1o8v7xdCPXgh3zIocm-iPcA  提取码:adja

 先烧录7.1的镜像,再修改U盘的grub.cfg文件,待修改参数包括pid、vid、sn、mac1、mac2、netif_num、DiskIdxMap、SataPortMap和SasIdxMap;

  1. 获取pid、vid

 pid和vid参数可在插入U盘后,通过ChipEasyv1.6(pid vid读取工具).exe获取;

  1. 获取sn、mac、netif_num

 sn和mac(指mac1、mac2)可保持不变,也可以采用去某宝买全洗白的sn码;

 netif_num表示网卡数量,有1个网卡则值为1,值为网卡数;

  1. 获取DiskIdxMapSataPortMapSasIdxMap

 DiskIdxMap、SataPortMap和SasIdxMap可参考该文章,具体取值可问卖家客服或者通过tinycore工具(镜像为网盘的tinycore-redpill.v0.9.4.9.img文件,需烧录到U盘插入NAS),tinycore工具使用可参考该文章,由于没有显示屏只有物理机无法看到NAS重启的引导界面,并且nas不好拆机,所以DiskIdxMap等直接采用卖家提供引导U盘的参数;

SataPortMap: 描述各控制器的接口数,比如SataPortMap=22,表示第1个控制器有2个接口、第2个控制有2个接口,SataPortMap=345,表示第1个控制器有3个接口、第2个控制有4个接口、第3个控制有5个接口;

DiskIdxMap: 描述磁盘的顺序,用2位16进制数表示1个控制器,比如SataPortMap=22 DiskIdxMap=0002,表示第1个控制器从第0号(00)磁盘开始,第2个控制器从第2号(02)磁盘开始,又比如SataPortMap=345 DiskIdxMap=070c00,表示第1个控制器从第7号(07)磁盘开始,第2个控制器从第12号(0c)磁盘开始,第3个控制器从第0号磁盘(00)开始,假设各控制器头顺序为BCA,如果DiskIdxMap取值为00070c,则顺序为ABC;

SasIdxMap: 不清楚具体功能,文章说按照正确的顺序,默认加上;

  1. 烧录镜像与修改grub.cfg

Diskgenius(改pid vid sn mac删除硬盘).exe用于修改img镜像文件,但不建议修改,由于只要修改grub.cfg文件,可先烧录img镜像到U盘,然后在U盘中修改;

 上面提到的烧录工具为Win32DiskImager(写盘工具).exe,选择镜像和盘符,然后点击写入直到进度条满.

 最后给出我的grub.cfg文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
terminal_output console
if serial --unit=0 --speed=115200; then
    terminal_input --append serial_com0
    terminal_output --append serial_com0
fi

set default="0"
set timeout="5"
set timeout_style="menu"

if [ -s $prefix/grubenv ]; then
    load_env --file $prefix/grubenv --skip-sig
    set has_env="1"
    if [ -n "${saved_entry}" ]; then
        set default="${saved_entry}"
    fi
else
    set has_env="0"
    echo "WARN: failed to load env. Default choice will NOT be saved!"
fi

function savedefault {
    saved_entry="${chosen}"
    save_env --file $prefix/grubenv saved_entry
}

insmod usb_keyboard
insmod part_msdos
insmod ext2
insmod fat
insmod linux
insmod gzio

set gfxmode=auto
insmod vbe
insmod vga

# UEFI
insmod efi_gop
insmod efi_uga

insmod font
if loadfont ${prefix}/unicode.pf2
then
    insmod gfxterm
    set gfxmode=auto
    set gfxpayload=keep
    terminal_output gfxterm
fi

menuentry 'RedPill DS918+ v7.1.0-42661 (USB, Verbose)' {
	savedefault
	set root=(hd0,msdos1)
	echo Loading Linux...
	linux /zImage HddHotplug=0 withefi console=ttyS0,115200n8 netif_num=2 syno_hdd_detect=0 syno_port_thaw=1 vender_format_version=2 sn=xxx mac1=xxx mac2=xxx earlyprintk syno_hdd_powerup_seq=1 pid=0x5678 log_buf_len=32M syno_hw_version=DS918+ vid=0xffff earlycon=uart8250,io,0x3f8,115200n8 elevator=elevator root=/dev/md0 loglevel=15 DiskIdxMap=0002 SataPortMap=22 SasIdxMap=0
	echo Loading initramfs...
	initrd /rd.gz /custom.gz
	echo Starting kernel with USB boot
}

menuentry 'RedPill DS918+ v7.1.0-42661 (SATA, Verbose)' {
	savedefault
	set root=(hd0,msdos1)
	echo Loading Linux...
	linux /zImage HddHotplug=0 withefi console=ttyS0,115200n8 synoboot_satadom=2 DiskIdxMap=00 netif_num=1 syno_hdd_detect=0 syno_port_thaw=1 SasIdxMap=0 vender_format_version=2 earlyprintk mac1=xxx syno_hdd_powerup_seq=1 pid=0x5678 log_buf_len=32M syno_hw_version=DS918+ vid=0xffff earlycon=uart8250,io,0x3f8,115200n8 sn=xxx elevator=elevator root=/dev/md0 loglevel=15 SataPortMap=1
	echo Loading initramfs...
	initrd /rd.gz /custom.gz
	echo Starting kernel with SATA boot
	echo WARNING: SATA boot support on this platform is experimental!
}

系统安装

 在安装之前,需要运行synology-assistant-7.win系统版.exe安装程序,在网盘已提供,用于扫描局域网中存在的NAS;

 在制作完成U盘引导后,插入到NAS中,然后启动NAS,运行Synology Assistant,安装过程略;

注意

  1. 对于黑群晖,在安装过程中最好断网,即便是全洗白的(有时成功、但也有失败),最后导致系统被锁,无限还原,在出现10分钟倒计时开始就断开与互联网的连接;

  2. 对于初学者,提前准备1个硬盘盒(3.5寸)、多个引导U盘,当系统无限还原,那么就格式化磁盘吧,过程略;

  3. 系统如果需要升级,需做好备份,然后找到对应的img镜像和pat文件,再尝试新U盘制作引导,由于没亲历过(只重装系统),可参考该文章

系统使用

 在装完系统后,可以体验群晖简单实用的功能了,但其中有些注意点,可参考该系列文章:

登录Synology账户

 由于许多功能依赖于群晖账户,比如QuickConnect、ActiveInsight、DDNS等,此外还有其他的一些功能;

 群晖账户尽量在全球站注册,可参考该文章,具体原因也在其中说明;

 注册完账户后,可在群晖控制面板中登录群晖账户,然后可体验部分功能,QuickConnect需绑定电话(但不建议绑定,会导致群晖变黑),DDNS可直接采用官方提供的域名(证书支持泛域名,较简单,但时常会失败);

DDNS与证书续期

 DDNS可查看先前我记录的DDNS踩坑经历文章,DDNS服务提供商建议采用Cloudflare,将域名的DNS服务器设为Cloudflare(CF)的,主要是为了方便之后通过acme.sh自动申请证书,经过测试采用dns_dp即腾讯的域名解析,申请不知为何原因失败,到了第二天换成dns_cf一次便成功,下面介绍整个过程;

  1. DDNS配置

 前提条件,具备公网IPv4或IPv6,家庭的话IPv6应该都有,没的话需咨询宽带提供商,如果因为光猫配置问题,可致电询问光猫超级用户账号密码(用于将路由桥接修改为路由模式),或者参考网上教程去破解(需注意型号问题);

 对于DDNS,首先需购买域名,然后将其DNS服务器设置为CF的,接着在系统中可以通过docker或套件中心来安装DDNS-GO;

 然后在CF中添加该域名,并在My Profile中的API Tokens分别添加API Token(用于DDNS-GO服务)和Global API Key(用于自动申请证书)

 其中,API Token中选择Create Token,模板选择Edit zone DNS,在Zone Resources中选择包含的可作用域名;Global API Key可直接查看,略;

  1. 证书申请

 需要注意几个问题,证书是否需要泛域名,证书是否频繁更新,根据需求选择采用ZeroSSL还是Letsencrypt证书提供商;

 关于泛域名,如果没有相关需求,建议采用ZeroSSL,优势是不限制申请次数;

 群晖支持采用Letsencrypt申请泛域名证书,但只为群晖提供的域名后缀提供服务,因此若不采用群晖的DDNS,且考虑到便利性,那么需要借助类似acme.sh的工具来自动申请证书,可参考该文章,具体过程如下:

 首先,需要申请证书,这里acme.sh采用dns_cf的方式,需要借助上文提到的Global API KeyGlobal API Key和该账户的邮箱,然后在ssh终端执行以下指令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 你的域名
DOMAIN='xxx.xxx'
# DNS供应商 可选 dns_dp(腾讯云) dns_ali(阿里云)  dns_cf  其他可查https://github.com/acmesh-official/acme.sh/wiki/dnsapi
DNS="dns_cf"
#证书供应商
CERT_SERVER="letsencrypt"
CF_Key='xxx'
CF_Email='xxx'
docker run --rm \
  -v "/volume1/docker/acme:/acme.sh" \
  -e "CF_Key=${CF_Key}" -e "CF_Email=${CF_Email}" \
  neilpang/acme.sh \
  acme.sh --dns "${DNS}" \
  --server "${CERT_SERVER}" \
  --issue -d "${DOMAIN}" -d "*.${DOMAIN}"

 可能由于网络或脚本版本问题,Letsencrypt证书不一定一次成功,需注意申请次数不能短时间太多,当出现Success,至此已经申请到带泛域名的证书,然后需要将证书通过acme.sh提供的群晖部署方式部署,脚本如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#群晖账号密码
SYNO_Username='xxx'
SYNO_Password='xxx'
#如果开启了双重验证请在浏览器登录时选中保存此设备,然后从COOKIE中获取did cookie
SYNO_TOTP_SECRET=""
#以下群晖配置非必要不要更改
SYNO_Hostname="localhost" # Specify if not using on localhost
SYNO_Scheme="http"
SYNO_Port="5000"
# 经测试发现localhost不行,而通过网卡的IPv4可以
ipv4="$(ifconfig eth0 | grep -E 'inet addr' | cut -d: -f2 | awk '{print $1}'
)"
SYNO_Hostname="${ipv4}" # Specify if not using on localhost
#要添加的证书的名字,空字符串("")的话就是替代默认证书,一般建议使用空字符串,除非你有多个证书
SYNO_Certificate='xxx'  # 建议和域名保持一致
# 以下为acme.sh通过dsm_deploy部署到系统的必要参数
c="SYNO_Username=${SYNO_Username}"
d="SYNO_Password=${SYNO_Password}"
e="SYNO_TOTP_SECRET=${SYNO_TOTP_SECRET}"
f="SYNO_Hostname=${SYNO_Hostname}"
g="SYNO_Scheme=${SYNO_Scheme}"
h="SYNO_Port=${SYNO_Port}"
i="SYNO_Certificate=${SYNO_Certificate}"
j="SYNO_DID=${SYNO_TOTP_SECRET}"
docker run --rm \
  -v "/volume1/docker/acme:/acme.sh" \
  -e ${c} -e ${d} -e ${e} -e ${f} -e ${g} -e ${h} -e ${i} -e ${j} \
  neilpang/acme.sh \
  acme.sh --dns "${DNS}" \
  --issue -d "${DOMAIN}" -d "*.${DOMAIN}" \
  --deploy --deploy-hook synology_dsm

 至此,通过acme.sh的docker容器申请证书与部署到群晖已完成,脚本参考该仓库,修改后的脚本如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
# 你的域名
DOMAIN='xxx'
#证书供应商
CERT_SERVER='letsencrypt'
#DNS供应商 可选 dns_dp(腾讯云) dns_ali(阿里云)  dns_cf  其他可查https://github.com/acmesh-official/acme.sh/wiki/dnsapi
DNS="dns_cf"
#群晖账号密码
SYNO_Username='xxx'
SYNO_Password='xxx'
#如果开启了双重验证请在浏览器登录时选中保存此设备,然后从COOKIE中获取did cookie
SYNO_TOTP_SECRET=""
#以下群晖配置非必要不要更改
SYNO_Hostname="localhost" # Specify if not using on localhost
SYNO_Scheme="http"
SYNO_Port="5000"
ipv4="$(ifconfig eth0 | grep -E 'inet addr' | cut -d: -f2 | awk '{print $1}'
)"
SYNO_Hostname="${ipv4}" # Specify if not using on localhost
#要添加的证书的名字,空字符串("")的话就是替代默认证书,一般建议使用空字符串,除非你有多个证书
SYNO_Certificate='xxx'
#以下三选一
#DNSPOD.CN 腾讯云
DP_Id=''
DP_Key=''
#阿里云
Ali_Key=''
Ali_Secret=''
#CF
CF_Key='xxx'
CF_Email='xxx'
case $DNS in
    "dns_dp")
    a="DP_Id=${DP_Id}"&&b="DP_Key=${DP_Key}"
    ;;
    "dns_ali")
    a="Ali_Key=${Ali_Key}"&&b="Ali_Secret=${Ali_Secret}"
    ;;
    "dns_cf")
    a="CF_Key=${CF_Key}"&&b="CF_Email=${CF_Email}"
    ;;
esac
c="SYNO_Username=${SYNO_Username}"
d="SYNO_Password=${SYNO_Password}"
e="SYNO_TOTP_SECRET=${SYNO_TOTP_SECRET}"
f="SYNO_Hostname=${SYNO_Hostname}"
g="SYNO_Scheme=${SYNO_Scheme}"
h="SYNO_Port=${SYNO_Port}"
i="SYNO_Certificate=${SYNO_Certificate}"
j="SYNO_DID=${SYNO_TOTP_SECRET}"
# 申请证书
docker run --rm \
  -v "/volume1/docker/acme:/acme.sh" \
  -e ${a} -e ${b} \
  neilpang/acme.sh \
  acme.sh --dns "${DNS}" \
  --server "${CERT_SERVER}" \
  --renew -d "${DOMAIN}" -d "*.${DOMAIN}"
#  --issue -d "${DOMAIN}" -d "*.${DOMAIN}"
# 部署证书到群晖
docker run --rm \
  -v "/volume1/docker/acme:/acme.sh" \
  -e ${c} -e ${d} -e ${e} -e ${f} -e ${g} -e ${h} -e ${i} -e ${j} \
  neilpang/acme.sh \
  acme.sh --dns "${DNS}" \
  --issue -d "${DOMAIN}" -d "*.${DOMAIN}" \
  --deploy --deploy-hook synology_dsm

 如果想要定时更新证书,可在控制面板中的任务计划添加任务,由于有些指令与目录访问需要高权限,比如docker指令和某些路径,以root身份执行,每月执行一次;

 但仍存在些小问题,比如两步验证,开启了两步验证,但没有配置SYNO_TOTP_SECRET参数,执行脚本仍可以成功;采用腾讯云的api-id和api-key方式申请Letsencrypt证书始终不成功,在相关Issue中说明需更新acme.sh或换网络等,具体没尝试过.

SSO单点登录

 琢磨良久,没成功,暂时略,后续补充.

参考

  1. http://k.8x6x.com/thread-72641-1-1.html

  2. https://www.openos.org/threads/diskidxmap-sataportmap-sasidxmap.3675/

  3. https://blog.csdn.net/qq_35379989/article/details/129287254

  4. https://post.smzdm.com/p/a0q4zgx9/p4/?sort_tab=hot/#comments

  5. https://www.ainas.cc:88/?page_id=8

  6. https://www.ainas.cc:88/?p=572

  7. https://post.smzdm.com/p/a6d5dl6e/


2023-06-28 首次更新