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 首次更新

Licensed under CC BY-NC-SA 4.0
最后更新于 Jul 08, 2024 23:30 +0800