也不知道是因为另外安装了什么软件,群晖Drive的图标覆盖突然就没有了,对于强迫症来说,实在是看不下去。

1. 首先确认配置打开

首先,确认下Synology Drive的图标覆盖配置设置正确。

在“全局设置”的“显示”页签中,勾选“显示文件状态的图标覆盖”。

2. 确认没有其它更高优先级的图标覆盖注册表项

Windows运行中执行“regedit”打开注册表。

找到注册表目录“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers”:

确保该目录下没有其它的项在如上图红框所示的项前面。如有,则删之。

3. 比对并修改如下注册表脚本内容

将如下内容保存为“fix.reg”文件。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\CloudStation.SyncFolderContextMenu]
@="{2C4A5D61-009C-4561-9A33-6AFD542FD237}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2C4A5D61-009C-4561-9A33-6AFD542FD237}]
@="SynoFolderContextMenu Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2C4A5D61-009C-4561-9A33-6AFD542FD237}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\ContextMenu.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2C4A5D61-009C-4561-9A33-6AFD542FD237}\InprocServer32]
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{AEB16659-2125-4ADA-A4AB-45EE21E86469}]
@="UnsuppModule Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{AEB16659-2125-4ADA-A4AB-45EE21E86469}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{AEB16659-2125-4ADA-A4AB-45EE21E86469}\InprocServer32]
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{48AB5ADA-36B1-4137-99C9-2BD97F8788AB}]
@="SyncingModule Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{48AB5ADA-36B1-4137-99C9-2BD97F8788AB}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{48AB5ADA-36B1-4137-99C9-2BD97F8788AB}\InprocServer32]
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{472CE1AD-5D53-4BCF-A1FB-3982A5F55138}]
@="SyncedModule Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{472CE1AD-5D53-4BCF-A1FB-3982A5F55138}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{472CE1AD-5D53-4BCF-A1FB-3982A5F55138}\InprocServer32]
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{A433C3E0-8B24-40EB-93C3-4B10D9959F58}]
@="ReadOnlyModule Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{A433C3E0-8B24-40EB-93C3-4B10D9959F58}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{A433C3E0-8B24-40EB-93C3-4B10D9959F58}\InprocServer32]
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C701AD67-3DF0-47C9-89CB-DFA6207BE229}]
@="NoPermModule Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C701AD67-3DF0-47C9-89CB-DFA6207BE229}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C701AD67-3DF0-47C9-89CB-DFA6207BE229}\InprocServer32]
"ThreadingModel"="Apartment"

注意修改如下行的内容:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{2C4A5D61-009C-4561-9A33-6AFD542FD237}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\ContextMenu.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{AEB16659-2125-4ADA-A4AB-45EE21E86469}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{48AB5ADA-36B1-4137-99C9-2BD97F8788AB}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{472CE1AD-5D53-4BCF-A1FB-3982A5F55138}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{A433C3E0-8B24-40EB-93C3-4B10D9959F58}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{C701AD67-3DF0-47C9-89CB-DFA6207BE229}\InprocServer32]
@="C:\\Users\\Administrator\\AppData\\Local\\SynologyDrive\\SynologyDrive.app\\icon-overlay\\23\\x64\\iconOverlay.dll"

即其中包含DLL文件路径的内容,需要准确,可以打开资源管理器,按如上路径逐个打开,看是否存在,路径是否正确,尤其注意路径中的用户名与数字文件夹。如我的上一次路径中的数字文件夹是“22”,这一次变成了“23”。最终确定这些路径都是正确的。

4. 执行注册表脚本

修改完成后,正常双击该“fix.reg”,即将合适注册表编辑器来打开该文件,导入注册表。若文件的默认打开方式不是注册表编辑器,则右键“打开方式”,主动选择注册表编辑器来打开。

5. 重启计算机

导入完成后,重启计算机,这个时候图标覆盖就回来了。

1. SSH登录群晖NAS

打开群晖NAS SSH,然后执行sudo -i切换到root账户。

2. 安装pip

执行:

wget https://bootstrap.pypa.io/get-pip.py

然后执行安装:

python3.9 get-pip.py

注意:想安装在Python 3.9版本下面则使用python3.9来执行安装。

安装完成后,正常就可以执行pip3.9了。

3. 配置国内镜像源

使用pip执行如下命令:

pip3.9 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

4. 安装第三方库

以requests为例,依旧在root用户下执行:

pip3.9 install bs4

5. 解决三方库在普通用户下无法导入问题

群晖下通过任务计划功能执行自定义的Python脚本是以普通用户来执行的。上述方式安装的三方库在普通用户下会无法导入,这是因为安装的三方库普通用户没有可执行权限。

如执行如下导入:

from bs4 import BeautifulSoup

报错:

ImportError: cannot import name 'BeautifulSoup' from 'bs4' (unknown location)

进入如下目录:

/var/packages/Python3.9/target/usr/lib/python3.9/site-packages

发现该三方库目录下的各三方库权限为700,这样普通用户自然无法执行。

执行如下命令对site-packages目录下的所有文件赋予普通用户可读取权限。

chmod 755 -R ./*

至此,则普通用户可以在任务计划中执行Python自定义脚本中的三方库了。

1. 下载Chrome-novnc Image

2. 部署Chrome-novnc容器

  1. 在“映像”中选中对应的镜像,点击“启动”;

  1. 网络使用默认配置,下一步;在常规设置中勾选“启用自动重新启动”,然后下一步;

  1. 进入“端口设置”,其中容器端口5900和8083可以不改,本地端口中8083对应的端口,建议修改为一个NAS上未占用的端口,后续需要在路由器上开启此端口的NAT映射;然后下一步;

  1. 进入”存储空间设置“,直接下一步;

  1. 然后进入”摘要“页面,可以看到之前的设置详情;点击”完成“;

  2. 进入”容器“菜单,就可以看到运行的容器了;

3. 为Chrome-novnc容器配置反向代理

  1. 打开控制面板,进入”登录门户“,切换到”高级“页签;

  1. 进入”反向代理服务器“设置,”新增“一条反向代理服务器规则;常规配置中其中来源侧的协议需要使用HTTPS,主机名为外部访问的域名,端口为外部访问的NAS本机端口(此端口将反向代理Chrome-novnc容器的前面配置的本机端口8083);目的地协议为HTTP,主机名为localhost,端口为前面容器配置的本机端口8083;

4. 路由器设置外部访问的NAT规则

以华为路由器为例,添加如下NAT规则配置:

至此,则应可以从外部访问Chrome了,访问URL为: https://{上面反向代理设置的主机名}:18083/vnc.html

5. 为Chrome访问设置密码

完成上述设置后,即可以从外部网络访问Chrome了,不过只要知道URL即可访问,没有任何权限或访问控制,最好为其设置下访问密码。

  1. 群晖开启SSH登录;

  1. 使用XSHELL通过SSH登录DSM后台;

  1. 进入Chrome-novnc的docker容器;
sudo docker exec -it Chrome-novnc1 /bin/bash

其中“Chrome-novnc1”为创建容器时设置的容器名称,可在群晖Docker套件中查看。

  1. 更新容器内操作系统的所有组件;
apt update
  1. 设置密码;
x11vnc -storepasswd

  1. 让容器启动时自动加载密码配置, 先安装VIM工具;

    apt install vim -y
  2. 然后执行如下修改设置默认加载;

vi /etc/supervisor/conf.d/supervisord.conf

修改前:

修改后:

  1. 修改完成后,重启容器;再访问即需要输入密码了;

  1. 最后记得撤销群晖的SSH登录。

1. 安装Docker套件

2. 下载VaultWarden镜像

  1. 打开Docker套件,切换到注册表,搜索“vaultwarden”镜像,找到如下镜像:

  1. 选择"latest"标签的版本下载:

  1. 切换到“映像”菜单,等待镜像下载完成。

3. 安装VaultWarden容器

  1. 在“映像”中选中对应的镜像,点击“启动”;

  1. 网络使用默认配置,下一步;在常规设置中勾选“启用自动重新启动”,然后下一步;

  1. 进入“端口设置”,其中容器端口3012和80可以不改,本地端口中80对应的端口,建议修改为一个NAS上未占用的端口,后续需要在路由器上开启此端口的NAT映射;然后下一步;

  1. 进入”存储空间设置“,点击”添加文件夹“,选择一个用于存储数据文件的目录;

  1. 其中”装载路径“固定填为"/data";然后下一步;

  1. 然后进入”摘要“页面,可以看到之前的设置详情;点击”完成“;

  2. 进入”容器“菜单,就可以看到运行的容器了;

注意:如果第5步中选择的文件夹”/docker/VaultWarden“原来已经运行过VaultWarden服务已经有数据,则至此,新的容器服务会复用原来的数据文件。

4. 为VaultWarden容器配置反向代理

  1. 打开控制面板,进入”登录门户“,切换到”高级“页签;

  1. 进入”反向代理服务器“设置,”新增“一条反向代理服务器规则;常规配置中其中来源侧的协议需要使用HTTPS,主机名为外部访问的域名,端口为外部访问的NAS本机端口(此端口将反向代理VaultWarden容器的前面配置的本机端口8057);目的地协议为HTTP,主机名为localhost,端口为前面VaultWarden容器配置的本机端口8057;

5. 路由器设置外部访问的NAT规则

以华为路由器为例,添加如下NAT规则配置:

6. 访问设置

完成上述配置后,从Web应该就可以访问ValutWarden服务了。

1. 获取兰空图床Token

1.1. 获取兰空图床接口URL

1.2. 模拟请求生成Token

参考生成Token接口,找一个在线模拟请求的网站,如https://www.bejson.com/network/profession_request_tools/,构造请求,获取Token。

Header中需要添加一行Accept,其值固定为application/json

POST参数中需要2个参数,分别为emailpassword,其值为兰空图床用户的用户名与密码。

点击模拟请求,将返回包含token的json串。

2. 配置PicGo

Server填写https://{域名}:18081,不要带『/』。

Auth Token填写Bearer {Token},其中{Token}为刚刚获取到的Token,与固定词Bearer之间有一个空格。

打开Ignore certificate error,按确定保存即可。

3. 配置Typora

在『图像』配置中,插入图时...选项,选择上传图片,上传服务设定选择PicGo.app,点击验证图片上传选项可以验证是否能成功上传。

至此,则大功告成啦,尽情享受自动上传服务吧。

1. 下载MySQL镜像

在Docker应用的『映像』中,下载『MySQL』:

2. 创建MySQL容器

  1. 在『高级设置』的环境变量设置中,注意添加『MYSQL_ROOT_PASSWORD』这个环境变量,其它不用动。

  1. 端口设置面板,注意映射2个宿主机端口:

  1. 存储空间设置一个存储数据的挂载点:

  1. 然后完成就可以了。

3. MySQL环境变量说明

下面引用该镜像官方对一些关键环境变量的说明,按需使用。『https://registry.hub.docker.com/_/mysql/

When you start the mysql image, you can adjust the configuration of the MySQL instance by passing one or more environment variables on the docker run command line. Do note that none of the variables below will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup.

See also https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html for documentation of environment variables which MySQL itself respects (especially variables like MYSQL_HOST, which is known to cause issues when used with this image).

3.1. MYSQL_ROOT_PASSWORD

This variable is mandatory and specifies the password that will be set for the MySQL root superuser account. In the above example, it was set to my-secret-pw.

3.2. MYSQL_DATABASE

This variable is optional and allows you to specify the name of a database to be created on image startup. If a user/password was supplied (see below) then that user will be granted superuser access (corresponding to GRANT ALL) to this database.

3.3. MYSQL_USER, MYSQL_PASSWORD

These variables are optional, used in conjunction to create a new user and to set that user's password. This user will be granted superuser permissions (see above) for the database specified by the MYSQL_DATABASE variable. Both variables are required for a user to be created.

Do note that there is no need to use this mechanism to create the root superuser, that user gets created by default with the password specified by the MYSQL_ROOT_PASSWORD variable.

3.4. MYSQL_ALLOW_EMPTY_PASSWORD

This is an optional variable. Set to a non-empty value, like yes, to allow the container to be started with a blank password for the root user. NOTE: Setting this variable to yes is not recommended unless you really know what you are doing, since this will leave your MySQL instance completely unprotected, allowing anyone to gain complete superuser access.

3.5. MYSQL_RANDOM_ROOT_PASSWORD

This is an optional variable. Set to a non-empty value, like yes, to generate a random initial password for the root user (using pwgen). The generated root password will be printed to stdout (GENERATED ROOT PASSWORD: .....).

3.6. MYSQL_ONETIME_PASSWORD

Sets root (not the user specified in MYSQL_USER!) user as expired once init is complete, forcing a password change on first login. Any non-empty value will activate this setting. NOTE: This feature is supported on MySQL 5.6+ only. Using this option on MySQL 5.5 will throw an appropriate error during initialization.

3.7. MYSQL_INITDB_SKIP_TZINFO

By default, the entrypoint script automatically loads the timezone data needed for the CONVERT_TZ() function. If it is not needed, any non-empty value disables timezone loading.

1. 申请百度智能云免费SSL证书

百度搜索ssl证书申请或者直接通过传送门进入免费申请入口:

百度智能云缺省使用DNS验证方式验证域名,生成如下信息:

接下来在去域名服务提供商处进行DNS设置:

解析设置完成后,返回百度智能云页面点击“域名解析校验”的“刷新”链接进行刷新,不出意外,则下面的域名校验结果将通过校验。此后,百度智能云将在后台进行证书创建与签发。

然后等待10至15分钟左右,将收到百度智能云的SSL证书签发成功短信通知。

签发成功后,进入“查看证书”证书详情页,下载PEM格式证书:

得到如下文件:

2. Synology证书部署

进入“控制面板”-> "安全性" -> "证书"页签:

新增证书,添加新证书,导入证书:

导入证书时,三个文件分别对应如下:

类别 文件 说明
私钥 域名.key 私钥文件
证书 域名.cer 证书文件
中间证书 域名_ca.crt CA证书

提交后,将出现对应证书的列表:

最后,进入“设置”,应用新添加的证书,将自动重启DSM服务,重启后就可以了:

1. 查看是否已经有Git

git --versoin

如图所示,我的Mac上已经有git。

2. 配置Git

设置username和email:

git config --global user.name "Harid"
git config --global user.email "kailash@126.com"

3. 创建ssh key

ssh-keygen -t rsa -C "kailash@126.com"

将在/Users/harid/.ssh/目录下生成公私钥对:

4. 配置Gitea

在个人Gitea的『设置』,『SSH/GPG密钥』中的『管理SSH密钥』Tab中,点击『增加密钥』:

将上一步创建的公私钥对中的公钥内容,填入密钥内容中:

点击『增加密钥』完成密钥添加。

5. 验证连接

点击『验证』按扭:

拷贝生成签名的命令:

在Macbook终端中执行:

echo -n '此处省略' | ssh-keygen -Y sign -n gitea -f {私钥路径}

拷贝后进行验证:

验证完后,将不再有『验证』按扭。

6. Clone工程到本地测试

在Gitea上拷贝SSH地址:

在Macbook终端中切换到目标目录,执行:

git clone {SSH地址}

至此,项目工程已经克隆到本地。

7. 提交修改

在本地修改工程后,在Mac终端切换到工程目录,执行:

# 文件添加到仓库(.代表提交所有文件)
git add .
# 把文件提交到仓库
git commit -m "Test Commit."
# 上传到github
git push

在Gitea上就能看到新修改的内容了。

8. 拉取修改

如果在Gitea上直接修改了文件内容,执行如下命令从远程仓库拉取最新的代码:

git pull

1. 创建专用的TimeMachine共享文件夹

通过控制面板的『共享文件夹』创建一个专门给TimeMachine用的共享文件夹。

在『配置高级设置』中,针对该共享文件夹启用『文件压缩』,并且『启用共享文件夹空间配额』,设置10TB左右大小,这样既可以容纳较久时间范围内的备份,也限定了上限,在达到上限时,Time Machine将自动删除旧的备份。

2. 创建专用的用户

创建一个『TimeMachine』的用户,设置该用户仅有上述共享文件夹的访问权限。

空间配额一样限定在10TB:

应用程序仅允许SMB协议。

3. 启用SMB协议

在控制面板的『文件服务』配置中启用SMB协议。

4. 启用Bonjour服务发现并设置TimeMachine文件夹

还是在控制面板的『文件服务』配置中,切换到『高级设置』,勾选『启用Bonjour服务发现以查找Synology NAS』,同时勾选『启用通过SMB进行Bonjour Time Machine播送』。3.
并通过『设置Time Machine文件夹』指定刚刚创建的专用共享文件夹为Time Machine所用的文件夹。

设置完后,应用修改使之生效。

5. 启用Time Machine

通过MacBook的『System Preferences』打开Time Machine应用。

通过『Select Backup Disk』选择刚刚在群晖上设置的Time Machine共享文件夹。

可以选择『Encrypt backups』对备份进行加密。