黑群晖使用体验
刚毕业想到去年在淘宝买的蜗牛星际NAS存储
,直到有较充裕的时间开始折腾下;
说明下我的NAS为四盘位的蜗牛星际,待安装的系统为7.1.0-42661,可参考该文章,由于该教程过于简陋,所以下面介绍我的安装过程,顺便补充系统使用上的问题.
制作U盘引导
引导一定要根据系统型号与版本进行选择,一般商家会提供U盘引导,并提供了特定pat文件;后续如果升级系统,可参考该引导配置制作新的U盘引导,最好用新的U盘制作U引导,下面介绍U盘引导的制作.
- 准备工作
首先需要下载必要工具,链接:https://pan.baidu.com/s/1o8v7xdCPXgh3zIocm-iPcA
提取码:adja
先烧录7.1的镜像,再修改U盘的grub.cfg文件,待修改参数包括pid、vid、sn、mac1、mac2、netif_num、DiskIdxMap、SataPortMap和SasIdxMap;
- 获取pid、vid
pid和vid参数可在插入U盘后,通过ChipEasyv1.6(pid vid读取工具).exe
获取;
- 获取sn、mac、netif_num
sn和mac(指mac1、mac2)可保持不变,也可以采用去某宝买全洗白的sn码;
netif_num表示网卡数量,有1个网卡则值为1,值为网卡数;
- 获取DiskIdxMap、SataPortMap和SasIdxMap
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: 不清楚具体功能,文章说按照正确的顺序,默认加上;
- 烧录镜像与修改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
,安装过程略;
注意
对于黑群晖,在安装过程中最好断网,即便是全洗白的(有时成功、但也有失败),最后导致系统被锁,无限还原,在出现10分钟倒计时开始就断开与互联网的连接;
对于初学者,提前准备1个硬盘盒(3.5寸)、多个引导U盘,当系统无限还原,那么就格式化磁盘吧,过程略;
系统如果需要升级,需做好备份,然后找到对应的img镜像和pat文件,再尝试新U盘制作引导,由于没亲历过(只重装系统),可参考该文章
系统使用
在装完系统后,可以体验群晖简单实用的功能了,但其中有些注意点,可参考该系列文章:
登录Synology账户
由于许多功能依赖于群晖账户,比如QuickConnect、ActiveInsight、DDNS等,此外还有其他的一些功能;
群晖账户尽量在全球站注册,可参考该文章,具体原因也在其中说明;
注册完账户后,可在群晖控制面板中登录群晖账户,然后可体验部分功能,QuickConnect需绑定电话(但不建议绑定,会导致群晖变黑),DDNS可直接采用官方提供的域名(证书支持泛域名,较简单,但时常会失败);
DDNS与证书续期
DDNS可查看先前我记录的DDNS踩坑经历
文章,DDNS服务提供商建议采用Cloudflare,将域名的DNS服务器设为Cloudflare(CF)的,主要是为了方便之后通过acme.sh自动申请证书,经过测试采用dns_dp即腾讯的域名解析,申请不知为何原因失败,到了第二天换成dns_cf一次便成功,下面介绍整个过程;
- 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
可直接查看,略;
- 证书申请
需要注意几个问题,证书是否需要泛域名,证书是否频繁更新,根据需求选择采用ZeroSSL还是Letsencrypt证书提供商;
关于泛域名,如果没有相关需求,建议采用ZeroSSL,优势是不限制申请次数;
群晖支持采用Letsencrypt申请泛域名证书,但只为群晖提供的域名后缀提供服务,因此若不采用群晖的DDNS,且考虑到便利性,那么需要借助类似acme.sh
的工具来自动申请证书,可参考该文章,具体过程如下:
首先,需要申请证书,这里acme.sh
采用dns_cf的方式,需要借助上文提到的Global API Key
的Global 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单点登录
琢磨良久,没成功,暂时略,后续补充.
参考
http://k.8x6x.com/thread-72641-1-1.html
https://www.openos.org/threads/diskidxmap-sataportmap-sasidxmap.3675/
https://blog.csdn.net/qq_35379989/article/details/129287254
https://post.smzdm.com/p/a0q4zgx9/p4/?sort_tab=hot/#comments
https://www.ainas.cc:88/?page_id=8
https://www.ainas.cc:88/?p=572
https://post.smzdm.com/p/a6d5dl6e/
2023-06-28 首次更新