家用NAS私有云飞牛FnOS系统安装教程

飞牛官网地址:https://www.fnos.com.cn/
飞牛官方教程: https://help.fnnas.com/articles/fnosV1/start/install-os.md

最近飞牛FnOS非常火,所以想自己动手装一个NAS系统, 记录一下方便准备入坑的小伙伴们参考。

准备工作

1. 硬件配置

硬件名称 详情
处理器 Intel Atom X5 - Z8350 四核处理器,主频 1.44GHz,TDP 仅 2W
内存 2GB DDR3(焊接,不可扩展)
存储 8GB/16GB eMMC(部分用户可自行升级至 32GB)
显卡 集成显卡,支持双 DisplayPort 输出(最高 2560×1600 @60Hz)36。
网络 1× 千兆以太网(RJ45)3。可选配 802.11a/b/g/n/ac Wi-Fi 和蓝牙(部分型号需额外模块)
USB 4 个 USB 端口(1× USB 3.0 + 3× USB 2.0)
显示 2× DisplayPort 接口(需注意未接显示器时可能降频,建议使用 DP 诱骗器)
音频 1× 复合音频插孔(耳机/麦克风二合一)
扩展槽 1× miniPCIe(SDIO 协议,非标准 PCIe,主要用于 Wi-Fi 模块)

Wyse 3040

  1. 准备一个16g以上用于装机的U盘, U盘将被格式化,确保里边无重要数据。

  2. 打开飞牛官网, 下载最新版FnOS镜像文件iso
    fnos_web

  3. 访问并下载rufus:https://rufus.ie/zh/
    rufus官网

  4. 插上u盘打开rufus.exe, 选择刚刚下载的iso, 点开始将镜像写入u盘, 就跟官网教程写的那样
    rufus_exe

  5. 点击开始后, 弹窗提示, 点确定就好, 以iso格式写入
    iso_write
    uefi

  6. 写入完成后关闭rufus, 弹出U盘, 插到要装系统的电脑上, 这里我插到戴尔Wyse3040的usb接口上, 接上键盘和显示器

安装系统

  1. 插电! 开机! (电流轻松跑上去 [#bushi]) 开机后狂按f12键
    alt text

  2. 选择UEFI: [u盘品牌, 这里是金士顿的u盘] 从u盘引导
    alt text

  3. 这里选择Graphical Install , 图形化安装

  4. 进去一路点击下一步, 确定, 到硬盘这个页面
    硬盘

  5. 这里可以看到我的硬盘是16g的, 实际大小14.68 GB, 下一步
    设置硬盘分区

  6. 设置硬盘分区, 我这里只有14GB多一些, 所以就保守选择11GB系统分区了, 实际测试32GB以上是比较好的选择, 有条件的可以多给点空间, 64GB甚至128GB都可以, 因为即使给16GB也会导致空间不足而无法更新, 我这里只是为了演示就随便填了。
    安装
    完成

  7. 经过漫长的17分钟的等待时间,进度条终于撑不住了!我都坚持不了这么久。
    设置ip

  8. 设置一下静态IP,这里必须要跟拨号设备同一个网段,比如家里的设备都是192.168.1.*的, 那你就设置192.168.1.【随便填一个没有被占用的数字,范围2-254】

  9. 然后保存,重启电脑,黑屏后迅速拔出u盘不要犹豫,然后等待进系统。
    alt text

  10. 屏幕上会显示飞牛的地址:http://ip:端口
    回到电脑浏览器中登录飞牛的地址,我这里是http://192.168.1.88:5666
    alt text

设置系统

进入欢迎界面
alt text
设置一下系统名称, 管理员用户名密码什么的
alt text
NAS就叫DSM吧, DSM是公认的好用的系统, FnOS同样优秀!

alt text
完结撒花~

飞牛FnOS中的远程访问nas服务的方案

什么是远程访问?

远程访问是指在本地计算机上通过网络访问远程计算机上的资源或服务。这里在NAS中主要是用户外出时,通过网络访问NAS中的服务,比如访问NAS中的文件,访问NAS中的飞牛影视、相册,观看影片、照片等等。内网指的是在同一个局域网内的访问,外网指的是在不同局域网内的访问。所谓局域网,可以简单理解为路由器生成的192.168.*.*的ip网段, 家中的设备一般就是这个网段的。而如果连接了同一个WIFI,或者通过网线连接到同一个路由器,那么这些设备就是在同一个局域网内。而外网,就是指在不同局域网内的访问,比如在公司内网访问家中的NAS,或者在外出时在奶茶店咖啡厅宾馆等场所的WIFI或者网线连接的情况下访问家中的NAS。
外网与内网的区别总结如图
外网和内网的区别

值得注意的是外网无法直接访问内网ip地址,因此需要通过一些手段来实现外网访问内网的设备和资源。常见的方法有:

  1. 使用公网IP
  2. 使用IPv6
  3. 使用内网穿透

公网IP实现远程访问

公网IP是指在互联网上具有唯一地址的IP地址。一般比较难获取到,只能跟运营商申请,而不同地区的运营商能提供的公网ip的能力各不相同,并且普遍不愿意给普通用户提供公网ip,因此这种方法不太可行。

IPv6实现远程访问

IPv6大大扩展了IP地址的数量,地球上几乎每一台设备都可以获得一个唯一的IPv6地址。因此,可以简单认为IPv6全部都是公网IP地址, 目前三大运营商已经全面支持并默认开通了IPv6,因此IPv6是一个简单和低成本的远程方案。

  • 优点:完全免费,配置简单易上手,对新手友好
  • 缺点:对客户端有要求,客户端必须支持IPv6,并且能够访问到IPv6网络。比如,手机5G流量支持IPv6,使用5G移动数据连接就可以远程访问NAS,而如果奶茶店的WIFI不支持IPv6则无法访问。其次是运营商有可能会以PCDN为由封禁用户的IPv6,也就是直接不下发IPv6,NAS上直接检测不到IPv6地址,也就无法使用IPv6远程访问了。

内网穿透实现远程访问

内网穿透一般是指通过拥有公网IP的服务器做中转,实现内网设备的远程访问。内网穿透的原理是:
用户的手机->访问->公网服务器->访问->用户的NAS->NAS上的服务(端口号)
相当于把 用户NAS上的服务的端口号暴露\映射到公网服务器上,用户可以通过访问公网服务器的指定的端口号来访问NAS上的服务。

  • 优点:对客户端友好, 只要能连接上网络就能访问。
  • 缺点:自建内网穿透如Frp需要公网服务器(即VPS)做中转,需要一定的费用。VPS一般由云服务商提供,按月或者年收费,购买和配置部署需要学习和维护成本。而免费的内网穿透服务如Tailscale、ZeroTier等,穿透的带宽和速度都不理想,且不稳定。只能用于带宽友好的场景:比如访问NAS管理界面、访问NAS上的小文件、图片、音乐服务等,对于jellyfin、飞牛影视等服务需要大带宽的场景,不适合。基本上只能够360P最多480P的清晰度转码播放视频,画面比较糊,体验感稍差。

简而言之,公网的IPv4申请不到,IPv6是个不错的选择,如果IPv6被封禁或者客户端没有IPv6,又希望能远程访问,那么可以考虑内网穿透。内网穿透中,Tailscale免费,易上手但是带宽小,Frp需要租赁公网服务器(VPS),折腾但是好用。

如何获取和使用IPV6实现飞牛FnOS NAS的远程访问

在hexo中使用图片

在hexo中使用图片

第一步:安装 hexo-asset-image :

1
cnpm install --save hexo-asset-image

直接安装即可,如没有报错,就直接进行第二步。

1
2
3
4
5
6
cnpm install hexo-asset-image --save
✔ Installed 1 packages
✔ Linked 17 latest versions
✔ Run 0 scripts
Recently updated (since 2021-03-28): 1 packages (detail see file /home/user/blog/node_modules/.recently_updates.txt)
✔ All packages installed (23 packages installed from npm registry, used 3s(network 3s), speed 123.09kB/s, json 18(42.74kB), tarball 378.36kB)

楼主在执行后无法hexo -d,我明明装了deployer,但是还是报错,因此重新安装hexo-deployer-git:

1
cnpm install --save hexo-deployer-git

提示找不到git

1
2
3
user@user-W65KJ1-KK1:~/blog$ hexo d
INFO Validating config
ERROR Deployer not found: git

重新安装 deploy 模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
user@user-W65KJ1-KK1:~/blog$ cnpm install --save hexo-deployer-git
⠹ [0/1] Installing domelementtype@^2.0.1platform unsupported hexo-deployer-git@2.1.0 › hexo-fs@2.0.1 › chokidar@3.5.1 › fsevents@~2.3.1 Package require os(darwin) not compatible with your platform(linux)
[fsevents@~2.3.1] optional install error: Package require os(darwin) not compatible with your platform(linux)
✔ Installed 1 packages
✔ Linked 77 latest versions
[1/1] scripts.postinstall hexo-deployer-git@2.1.0 › hexo-util@1.9.1 › highlight.js@^9.13.1 run "node deprecated.js", root: "/home/user/blog/node_modules/_highlight.js@9.18.5@highlight.js"
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Verion 9 of Highlight.js has reached EOL. It will no longer
be supported or receive security updates in the future.
Please upgrade to version 10 or encourage your indirect
dependencies to do so.

For more info:

https://github.com/highlightjs/highlight.js/issues/2877
https://github.com/highlightjs/highlight.js/blob/master/VERSION_10_UPGRADE.md

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
[1/1] scripts.postinstall hexo-deployer-git@2.1.0 › hexo-util@1.9.1 › highlight.js@^9.13.1 finished in 377ms
✔ Run 1 scripts
deprecate hexo-deployer-git@2.1.0 › hexo-util@1.9.1 › highlight.js@^9.13.1 Support has ended for 9.x series. Upgrade to @latest
Recently updated (since 2021-03-28): 3 packages (detail see file /home/user/blog/node_modules/.recently_updates.txt)
✔ All packages installed (80 packages installed from npm registry, used 2s(network 2s), speed 924.7kB/s, json 78(211.08kB), tarball 1.66MB)

估计是因为deploy模块的版本过低,太久没更新了。

第二步:修改node_modules/hexo-asset-image/index.js中的内容

全部替换成下列内容(摘自Ericam_ 大神:[https://blog.csdn.net/xjm850552586])

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
'use strict';
var cheerio = require('cheerio');

// http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string
function getPosition(str, m, i) {
return str.split(m, i).join(m).length;
}

var version = String(hexo.version).split('.');
hexo.extend.filter.register('after_post_render', function(data){
var config = hexo.config;
if(config.post_asset_folder){
var link = data.permalink;
if(version.length > 0 && Number(version[0]) == 3)
var beginPos = getPosition(link, '/', 1) + 1;
else
var beginPos = getPosition(link, '/', 3) + 1;
// In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html".
var endPos = link.lastIndexOf('/') + 1;
link = link.substring(beginPos, endPos);

var toprocess = ['excerpt', 'more', 'content'];
for(var i = 0; i < toprocess.length; i++){
var key = toprocess[i];

var $ = cheerio.load(data[key], {
ignoreWhitespace: false,
xmlMode: false,
lowerCaseTags: false,
decodeEntities: false
});

$('img').each(function(){
if ($(this).attr('src')){
// For windows style path, we replace '\' to '/'.
var src = $(this).attr('src').replace('\\', '/');
if(!/http[s]*.*|\/\/.*/.test(src) &&
!/^\s*\//.test(src)) {
// For "about" page, the first part of "src" can't be removed.
// In addition, to support multi-level local directory.
var linkArray = link.split('/').filter(function(elem){
return elem != '';
});
var srcArray = src.split('/').filter(function(elem){
return elem != '' && elem != '.';
});
if(srcArray.length > 1)
srcArray.shift();
src = srcArray.join('/');
$(this).attr('src', config.root + link + src);
console.info&&console.info("update link as:-->"+config.root + link + src);
}
}else{
console.info&&console.info("no src attr, skipped...");
console.info&&console.info($(this));
}
});
data[key] = $.html();
}
}
});

操作到此,配置已经结束了。可以愉快地使用图片了惹~

下面介绍下使用方法:

1
hexo new post 测试

可以看到_post目录下不仅创建了测试.md,还多出了与该文件同名的目录。

这个目录是用来存储该篇文章的图片资源的,直接将图片扔里边,在文章中用markdown插入图片的方法写。

也就是:

1
![图片的description,可任意填](ai.png)

可还行?

1

关于github的ssh密钥复制移植导入的问题

关于github的ssh密钥复制移植导入的问题

问题:

user@user-W65KJ1-KK1:~/blog$ ssh -T git@github.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for '/home/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/user/.ssh/id_rsa": bad permissions
git@github.com: Permission denied (publickey).

之前用旧电脑生成了ssh密钥,并将公钥配置到github中。现在换了电脑,因为懒得生成新的密钥再配置一遍,因此我把旧电脑中的密钥文件,也就是 /.ssh/* 拷贝到新电脑的/.ssh文件中,并git init了一个仓库,然后git remote add https://…git 设置了远程仓库,但是我执行命令

ssh -T git@github.com

验证ssh是否通过的时候总是报错,令我百思不得其解。我以为是我的密钥copy有问题,我甚至以为ssh是根机器相关的,不允许copy的。

其实原因在错误提示中已经说的很明白了:

Permissions 0664 for ‘/home/user/.ssh/id_rsa’ are too open.

密钥的权限太过于开放了,因此无法完成ssh认证。

。。厄

好吧。我承认自己太年轻了。。。

chmod 600 /home/user/.ssh/id_rsa

将私钥权限修改为只读就好了。修改之后记得将密钥添加到ssh-agent中,首先得保证ssh-agent是运行着的,启动命令:

eval "$(ssh-agent -s)"

接着直接执行

ssh-add

最后通过命令验证是否能够链接上github,不用修改直接运行该命令:

ssh -T git@github.com

image-20210404171112792

大功告成!

玩转hexo博客

玩转hexo博客


第一章 搭建hexo博客


第一节 下载安装hexo

  1. install node
    $ sudo apt-get install node.js
    $ node -v
  2. install npm
    $ sudo apt-get install npm
    $ npm -v
  3. install cnpm
    $ sudo npm install -g cnpm
    $ cnpm -v
  4. install hexo
    $ sudo cnpm install -g hexo-cli
    $ hexo -v

第二节 hexo基本命令

  1. hexo的初始化
  • 新建一个目录
    mkdir blog
  • 进入到该目录
    cd blog
  • 执行hexo初始化命令
    hexo init
  1. 新建hexo博文
    hexo new “博文的名字”
    博文将会创建到目录blog/source/_posts/下

  2. 编辑博文
    vim blog/source/_posts/博文的名字.md

  3. 清理hexo生成的文件
    hexo clean

  4. 生成文件
    hexo generate

  5. 运行hexo服务器
    hexo server

  6. 访问hexo
    浏览器输入URL: http://localhost:4000/
    可以看到默认的hexo主题风格的博客,页面中包含了刚刚写的那篇博文。

  7. 部署远程hexo

  • 打开Github,登陆账号。创建一个新的仓库 YourGithubName.github.io
    ps:仓库名格式必须是“你的github账户名称.github.io”

  • 命令行blog目录下安装git部署插件
    cnpm install –save hexo-deployer-git

  • 部署hexo
    hexo deploy
    提示需要输入github的用户名和密码,如果是第一次使用,还可能会给出如下提示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    已初始化空的 Git 仓库于 /home/uxdb/blog/.deploy_git/.git/

    *** 请告诉我你是谁。

    运行

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"

    来设置您账号的缺省身份标识。
    如果仅在本仓库设置身份标识,则省略 --global 参数。

    fatal: 无法自动探测邮件地址(得到 'uxdb@uxdb-W65KJ1-KK1.(none)')
    FATAL { err:
    { Error: Spawn failed
    at ChildProcess.task.on.code (/home/uxdb/blog/node_modules/_hexo-util@1.9.1@hexo-util/lib/spawn.js:51:21)
    at ChildProcess.emit (events.js:198:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12) code: 128 } } 'Something\'s wrong. Maybe you can find the solution here: %s' '\u001b[4mhttps://hexo.io/docs/troubleshooting.html\u001b[24m'

    按提示设置用户名和邮箱,邮箱可以随意输入。

  1. 访问你的hexo
    打开浏览器,地址栏输入https://你的github用户名.github.io/,回车,刷新页面,就可以看到和本地hexo一样的页面了。

postgreSQL使用(一)

一、postgres用户

postgres用户是pg自带的默认的root用户,要操作pg数据库,必须先切换到该用户。

切换到postgres用户的方法

$ sudo -i -u postgres


二、命令psql的使用

psql命令可以在命令行模式下直接使用。键入psql,按下回车键,可以登入postgre数据库。

psql -version # 查看已安装的pg版本号

psql -d [DATABASE] # -d参数指定连接的数据库

psql -l # 查看所有数据库

三、pg SQL的使用

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
CREATE DATABASE [DATABASE_NAME];			# 创建数据库

DROP DATABASE [DATABASE_NAME]; # 删除数据库

\d # 查看当前数据库存在的表

\d [TABLE_NAME] # 查看指定的表的结构

\c [DATABASE_NAME] # 连接到指定的数据库

\l # 查看所有的数据库信息

\x # 启用Expanded display , 使每一列数据作为一个数据项显示

\? # 查看所有\命令的使用方法和介绍

\i [.sql文件的路径] # 通过.sql文件批量执行sql



CREATE TABLE [TABLE_NAME] ([COLUMN1 TYPE CONSTRAINT, COLUMN2 TYPE CONSTRAINT, ...]); # 创建表
例如:
CREATE TABLE students (name text, age smallint, class_num bigint, gender char(1), student_id serial);

INSERT INTO [TABLE_NAME](COLUMN1,COLUMN2,...) VALUES ('COLUMN1_DATE','COLUMN2_DATE',...); # 插入数据
例如:
INSERT INTO students(name,age,class_num,gender,student_id) VALUES ('张三','23','1601051','男','0');

SELECT * FROM students; # 查询表students中所有的数据