使用 flexget 实现下载更新自动化

FlexGet 官网是这样描述自己的,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。

FlexGet 一大被称道的就是可以实现 PT 或者 BT 的自动下载,并且直接传给 Deluge, transmission, uTorrent, rTorrent, SABnzb 等等客户端进行下载。FlexGet 也集成了 trakt, thetvdb.com, imdb.com 等等网站可以用来追踪剧集。

FlexGet 可以自定义任务,自定义运行时间,有一个友好的 Web 界面,然后还有很多很多有待发现的功能。

在没有了解到 FlexGet 之前,我都是手动将 torrent 文件下载到 ~/Downloads 目录中,然后在 crontab 中将下载目录中的所有 torrent 文件 rsync 到 Transmission 或者 ruTorrent 的 watch 文件夹中的。

*/1 * * * * rsync -avz -e "ssh -p xxxx" --remove-source-files /home/einverne/Downloads/*.torrent xxx@ip:/share/Transmission/watch/

但是自从有了 Flexget 我发现借助 Flexget 可以实现很多自动化工作,以前手工执行的工作完全可以解放出来。比如将 PT 中收藏的内容自动下载到硬盘中,比如自动下载 PT 中最近更新的 Free 。

docker install

使用 Docker 进行安装,我这里用的是 wiserain/flexget 镜像:

docker create \
    --name=flexget \
    -e PUID=1000 \
    -e PGID=1000 \
    -e FG_WEBUI_PASSWD=yourhorriblesecret \
    -e FG_LOG_LEVEL=info \
    -e TZ=Asia/Shanghai \
    -p 3539:3539 \
    -v /Documents/flexget/config:/config \
    -v /Documents/flexget/downloads:/downloads \
    wiserain/flexget

说明:

  • config 目录中是 flexget 的配置文件
  • /data 目录可以保存 Flexget 下载的文件

Plugins

flexget 更多的插件可以在这里 查到。

template

templates:
  freespace:
    free_space:
      path: /home/down
      space: 10240
  qb:
    qbittorrent:
      path: /home/down
      host: localhost
      port: 8080
      username: admin
      password: password
  de:
    deluge:
      password: "deluge"
      path: /home/down
  tr:
    transmission:
      host: localhost
      port: 9091
      username: admin
      password: "password"
tasks:
  BTSchool:
    rss: https://pt.btschool.net/torrentrss.php?rows=10&tea1=1&tea2=1&tea3=1&tea4=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    template:
      - de
  HDChina:
    rss: https://hdchina.org/torrentrss.php?rows=10&tea15=1&tea16=1&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    template:
      - qb
    qbittorrent:
      label: HDChina
  CHDBits:
    rss: https://chdbits.co/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    if:
      - "'CHDPAD' in title": reject
      - "'CHDPad' in title": reject
      - "'CHD' in title": accept
    template:
      - tr
  U2:
    rss: https://u2.dmhy.org/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&passkey=1111111111111111111111&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    regexp:
      accept_excluding:
        - DVD
        - ADC
        - TTG
        - TSDM
      from: title
    download: /home/torrent/
  Mteam-sweety:
    rss: https://tp.m-team.cc/torrentrss.php?https=1&rows=10&cat410=1&cat429=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    regexp:
      accept:
        - sweety
      from: title
    download: /home/torrent/
  GZtown:
    rss: https://pt.gztown.net/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    if:
      - "'GZtown' in title": accept
    download: /home/torrent/
  HDSky:
    rss: https://hdsky.me/torrentrss.php?rows=10&tea6=1&tea1=1&tea28=1&tea9=1&tea31=1&tea18=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    download: /home/torrent/
  Ourbits:
    rss: https://ourbits.club/torrentrss.php?rows=10&tea1=1&tea2=1&tea3=1&tea12=1&tea42=1&tea31=1&tea46=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    download: /home/torrent/

定义 Schedules

schedules:
  - tasks: '*'
    interval:
      minutes: 1

tasks:
  ezrss:
    rss: http://eztv.ag/ezrss.xml
    accept_all: yes
    content_size:
      min: 200
      max: 4444
      strict: no
    download: /data
  ptschool:
    rss: https://pt.btschool.club/torrentrss.php
    accept_all: yes
    download: /data

2020-02-18 flexget , docker , python , linux

自架的服务整理

这篇文章主要整理比较流行的可以自建的服务,按照功能分类,我并没有每一个服务都尝试,但基本上每个功能下都有一个服务在跑着。

很多搭建教程都已经在之前的文章中有提到,所以这篇文章不会具体展开搭建过程,主要用来记录一下,并在各个服务之间做一个简单的比较,以及我选择的理由。

本文不可能囊括很多内容,GitHub 上有一个 awesome-selfhosted repo, 里面详细记录着开源的许许多多的优秀自建项目,本文为涉及到的内容可以自行参考该项目。另外这个项目也是一个学习的好地方,每一个开源项目都标注着实现语言,如果想要系统的学习某一个实现这里也是不错的选择。

有很多自建成本比较高,比如自建 SMTP 邮件服务,虽然也有比较成熟的方案,MailCow,Mailu 等等,但本文不再展开。

DNS

Pi-hole, A black hole for Internet advertisements

博客类

具体来说,是 CMS,内容管理平台

WordPress

WordPress 自然不用多说,PHP 编写。

Jekyll

Jekyll 算是静态页面生成器,不过也能用来当作博客系统。

Typecho

Php 站的又一个选择,比较轻量小巧,但是功能强大。

RSS 阅读器

自从 Google Reader 关闭后,就一直用的 InoReader,完全没有任何问题,不过因为买了 NAS,就索性把 RSS 也自建了一个。数据在自己的数据库里面还是很安心的。我选用的是时间最久,功能比较稳定的 Tiny Tiny RSS. 当然也还有 FreshRSS,miniflux,NewsBlur 等可以选择。

Tiny Tiny RSS 和 FreshRSS 都是 PHP 编写的,miniflux 比较新是 Go 写的,NewsBlur 则是 Python.

代码托管

代码托管除了非常著名的 GitLab,其实还有很多选择,比如 Go 编写的 Gogs,以及它的 fork, Gitea。个人在 NAS 上用的 Gogs,不过要我现在再选,我可能会用 Gitea.

文件管理

文件管理及同步,我使用 NextCloud,没使用 NextCloud 之前,我使用 Dropbox 作为同步工具。

和 NextCloud(ownCloud) 类似的也还有 FileRun, seaFile 等

和 NextCloud 中心化不同的另一个文件同步 SyncThing 也要强烈推荐,自己架设都比较简单。

下载类

下面这些工具都因为可以下载种子而被人所知,不过也可以用来分享文件的。

  • Transmission
  • qTorrent
  • ruTorrent

上面这几个都能找到对应的 Docker image.

ruTorrent

YouTube 视频下载

youtube-dl

稍后阅读

开源版本的稍后阅读,wallabag .

电子书管理

Calibre-web

Calibre-web

LazyLibrarian

图片管理类

主要是对图片的管理,比较著名的是 Chevereto。

其他图床

Lychee

官网地址:

备份

Duplicati

通过 FTP, SSH, WebDAV 协议备份,或者将文件备份到云端 Backblaze B2, Microsoft OneDrive, Amazon S3, Google Drive, box.com, Mega, hubiC 等。

Translate tool

Weblate

Docker composte 安装

搜索导航类

anyi 导航、聚合搜索、webstack

geek-navigation

服务器监控

雅黑探针、云探针、netdata


2020-02-14 collection , self-hosting , self-hosted , file-manager , rss , rss-reader

关于 BitTorrent 和 PT 你需要知道的一切

几个 bt 中经常见到的词汇

bt 其实是 BitTorrent 的缩写,后文为了描述简单统一简称为 bt.

peer

peer 可以理解成节点,或者等同于 client 客户端。只要你在本地打开了 bt 软件,连接了 swarm,有数据传输,就可以认为是一个 peer. 严格的来说,peer 指的是还未下载完成的节点。但通俗的就认为所有连接到 swarm 的客户端都叫做 peer,这个意义上, peer 和 client 有着相同的含义,并不区分是否完成了整个 torrent 的下载。

用英文来解释 peer 是,a person who has the same social status as you,地位同等的人,相互平等的人,同辈。

Swarm

swarm 是一个用来描述当前分享的 torrent 的所有可连接的 peers 的术语,换句话说,一个 swarm 也就是当前对同一个种子文件正在交换数据的 peers. 在 bt 最初的协议中 peers 需要请求 tracker 来获取 swarm,也就是当前可连接的 peers 列表。

Tracker

当一个 peer 想要加入某一个特定的 torrent 时,需要有几个初始化的操作。首先需要知道有哪些 peers 正在分享着改 torrent,以便于开始连接和传输数据。根据 BitTorrent 最初的协议,初始化过程由 Tracker 提供。后来演化过的 BT 协议又加入了其他的方法,比如说 DHT.

BitTorrent Tracker 是一个 http/https 服务,通过 BitTorrent 协议间接的和 peers 连接,它可以追踪哪些 seeds 和 peers 在一个 swarm 中。为了初始化下载,客户端首先要和 Tracker 通信,获取一个当前可连接的 peers 列表,这些 peers 都在同一个 torrent 的 swarm。Tracker 实际上并不参与任何数据的传输,并且也没有 torrents 数据的备份。一旦 peers 列表获取成功,peer 通信就可以不依赖 Tracker 进行。但是 clients 会周期性地向 Tracker 发送数据报告,并换取新节点的信息。

基本上,Tracker 就是一台回应 HTTP GET 请求的服务器,请求中包含客户端整体传输的数据。回应信息包括一个 peers 列表,让 peers 参与 torrent 传输。URL 包含在 torrent 文件的 metadata 的 announce URL 中。其他参数被附加到该 URL 后。

Tracker 服务器不能和 BitTorrent Index server 混为一谈。BitTorrent Index 是一个用来存放 torrent 文件的服务器,通常包含了种子文件的基本信息及描述等等。

Seeds and Seeding

A seed is a peer that has a complete copy of the torrent’s contents and keeps uploading it.

Super-seeding(initial seeding)

Super-seeding, 或者又被叫做,初始做种 (initial seeding) 是一种为了节省带宽而设计的技术。试想一下,当你是种子发布者,并且第一将种子发布到网上时,种子的复制可能会很慢,因为初始的作种者会将同一块数据发送给不同的 peers,而其他块可能还没有被上传。为了防止这种情况,一些客户端可以开启 super-seeding 模式,这时会优先发送还没有被上传的数据块,通过算法来保证上传一个种子尽可能的节省带宽。1

当你是种子的发布人,并且没有其他做种者时,开启初始做种就会将自己伪装成下载者并检测其他下载已经完成的部分,仅传输所有人都缺少的部分,一般出种所需流量与资源大小差不多,普通做种可能需要两倍流量。一般在 PT 中不需要开启初始做种,因为,开启后上传速率和上传量和未开启前比较会显著下降,很多人会因为其中一个人带宽不好而无法尽快出种。因此初始做种通常用于公网 BT。

DHT

DHT(Distributed Hash Table) 网络用来寻找在 swarm 中的 peers 的 IP 地址,用来取代了 Tracker 的功能。DHT 允许通过 info hash 来查询 peers,而不需要通过 Trackers.

DHT 是分布式系统的一种,它通过一个类似 hash table(key,value) 的查询服务。任何参与的节点都能迅速的获取到 key 关联的信息。维护从键到值的映射的责任分布在 DHT 网络的各个节点中,以这样一种方式,这样的更改将导致最小程度的中断。这使 DHT 网络可以扩展到非常多的节点,并处理连续的节点到达,离开和故障。2

在原始的 BitTorrent 设计中,Tracker 是初始化时必须要经过的步骤,并且 Tracker 被部署在网络的单一节点上。这就意味着,BitTorrent 会有单点故障,这也是 BitTorrent swarm 的阿喀琉斯之踵,如果 Tracker 故障,那么 peers 就无法相互知道,结果就是 torrent 死掉。而在 DHT 网络中,这个问题就不存在。二者的差别在于,不像 Tracker,DHT 不依赖于一个单一机器来初始化 peers 的连接,而是将 DHT 网络中所有的节点都认为是潜在的节点,因此提供了容错机制。在 DHT 网络中初始化机制包括了一些冗余的机制:

  • 使用一些著名的或者广泛熟知的 DHT 节点
  • 使用一组 BitTorrent 客户端退出时缓存的节点
  • 使用一组 torrent 文件中的 bootstrap 节点
  • 从 swarm 中下载至少包含一个 peer 的 torrent,然后交换 UDP 端口

一旦获取到一个节点,客户端可以使用该节点在 DHT 网络中找到更多的节点,然后就可以用 DHT 节点来获取 peers 完成下载。3

Peer Exchange (PEX)

在 BitTorrent 文件共享网络中,Peer Exchange 用来维持共享同一个 torrent 的一组 peers. 在原始的 BitTorrent 协议中, 所有的 peer 都需要依赖 Tracker 来获取一组 peers. Peer Exchange 允许一组 peers 中的成员自己在 swarm 中交换群组成员信息,也就意味着可以减少对 Tracker 的依赖,减少对 Tracker 的轮询,也就减少了 Tracker 的负载。

Peer Exchange 并没有完全的消除对 Tracker 的依赖,一个 peers 第一次要加入给定 torrent 的 swarm,它必须联系 Tracker 来找到该 torrent 的一组 peers.

根据原始的 BitTorrent 网络协议,.torrent 文件是从 torrent 网站(通常是索引网站)下载的。下载文件后,BitTorrent 客户端会从.torrent 文件中计算信息密钥的 20 字节 SHA-1 哈希,它会在对跟踪器(或 DHT​​网络)的查询中使用该 ID 来唯一地识别种子并找出共享该 torrent 的其他对等方的 IP 地址,随后它将连接并下载.torrent 文件中的内容。

Magnet Links 更进一步,info-hash 值已经被计算得到。因此当使用一个 Magnet Link, BT 客户端可以得到 info-hash。然后 BT 客户端可以通过该 hash,在 DHT 网络中查询,找到网络中同样共享着这个 torrent 的 peers。然后客户端会从其他 peers 那边下载这个 torrent 文件。一旦获取到 torrent 文件,后面就是熟悉的流程了。

可以看到客户端依然需要依赖 .torrent 文件来完成初始化过程,因为 torrent 包含着下载需要的必不可少的信息,但是可以看到,不再需要依赖一个 Tracker 服务器,你甚至可以不需要从网站上下载一个 .torrent 文件,在 DHT 网络中就存在。

然而,请注意,Magnet Links 不能消除对 torrent 文件的依赖。 然而,他们可以减少种子索引网站的负载,也可能有更好的机会让一个种子活着,因为一旦 .torrent 文件在 DHT 网络上,它理论上不需要在网站上下载;, 你所需要的只是一个 Magnet Lins, 并且,如果原始站点上的 torrent 下载中断或不再提供它,Magnet Links 更有可能在 Internet 上传播的。 在更大范围内,Magnet Lins 的优势在于其开放性和平台独立性带来的多功能性;几乎在任何操作系统上,都可以使用为不同网络和协议设计的完全不同的客户端应用程序来下载资源相同的磁链接(前提是该资源在那些网络上可用)。可以同时从多个网络中搜索和检索相同资源的多网络客户端也是如此,所有这些都具有单个磁链。

另外,由于 Magnet Lins 是纯文本的,因此可以简单地将链接复制并粘贴到:电子邮件,即时消息,博客或其他社交网络媒体中,以实现非常快速的分发;

Magnet Links 由一系列一个或多个参数组成,其顺序并不重要,其格式与许多 HTTP URL 末尾的查询字符串相同。最常见的参数是“ xt”,表示“确切主题”,通常是由特定文件的内容哈希形成的

比如:

magnet:?xt=urn:btih:b0a8dbd866c5f6d2b619f17e1988f46bdace72ba&dn=Absolute+OpenBSD+-+UNIX+For+The+Practical+Paranoid

这个例子中,xt 参数是资源的十六进制 SHA-1 ,dn (display name) 是一个可读的名字。

Magnet Links 实现的第一版需要 BitTorrent hash 值包括一个 Base32 的编码,后来改成了 hex encoding ,这也是目前官方的 BitTorrent specifications 建议的格式。4

Peer DL

Peer DL.

Peer Download Rate is an estimated rate at which the peer is downloading based on the peer’s reported change in pieces obtained. This estimation is very crude and is most likely inaccurate, so it should only be lightly relied upon.

几个 PT 站相关的概念

分享率

分享率是几个概念中比较好理解的一个,顾名思义就是上传量 / 下载量的比率。因为 BitTorrent 鼓励分享,所以这个比率反映着每一个用户的分享比例。

一般的站点会有如下的要求:

当以下情况时将被自动降至本级:

  1. 如果你已经下载了超过 50GB,你应该有大于 0.6 的分享率。
  2. 如果你已经下载了超过 100GB,你应该有大于 0.7 的分享率。
  3. 如果你已经下载了超过 200GB,你应该有大于 0.8 的分享率。
  4. 如果你已经下载了超过 500GB,你应该有大于 0.9 的分享率。
  5. 如果你已经下载了超过 1000GB,你应该有大于 1.0 的分享率。

如果没有达到要求就会被 BAN 掉,因分享率不达标而收到系统自动警告的情况下,默认的警告的期限是一周,一周结束后警告标志才会消失。

H&R

H&R 是 Hit and Run 的缩写,表示下载完资源后在规定时间内没有完成最少做种时间的行为,简单说就是“下完就跑” 实行 H&R 考核是为了提高资源保种率,使老资源不断种。

HR 未达标数 >= 10, 将被 BAN.

H&R:0/0 解析为,(要做种的种子数『显示数字为黑色』)/ 未达标(在规定时间内没完成做种时间的种子数『红色数字显示』)

魔力值

按照作种时间和数量计算得到,魔力值的计算有一个非常复杂的公式,在这里研究这个公式也并不显示,要提升魔力值最好的方法就是作种,并且需要一定量地作种,然后经常在论坛中交流就行,没多久就会发现魔力值会平稳增长。

下面是有人总结出来的一些可控的增长魔力值的方法,不同站点可能并不相同,所以参考一下即可,不必太认真。

  • 发布新种子 = 30 个魔力值
  • 上传一个字幕 = 15 个魔力值
  • 发布新主题 = 2 个魔力值
  • 回复帖子 = 1 个魔力值
  • 发布种子、候选的评论 = 1 个魔力值
  • 参与一次调查投票 = 1 个魔力值
  • 参与一次候选投票 = 1 个魔力值
  • 参与一次趣味盒投票 = 1 个魔力值
  • 说谢谢 = 1 个魔力值 (有的站是 0.5 个魔力值)
  • 收到感谢 = 1 个魔力值发布的趣味盒内容获得用户较高的评价

PT 站生存指南

PT, 也就是 Private BitTorrent, 私有的 Tracker,只有特定人群可以连接的 BitTorrent Network.

如何提高分享率

顾名思义,就是上传量 / 下载量的比率,规则中对分享率是有要求的。在保持网络畅通的情况下,达成下载是可控的,只有找几个非免费的,并且作种人数比较多的种子,基本下载就可以达到,但是上传量并不是那么容易完成。

首先要大致知道 bt 的基本原理,简单的来说 BitTorrent 是一个 peer-to-peer file sharing,点对点文件共享的协议。知道这个后,就很容易的理解,上传,下载,分享了。

要提高分享率,也就是要增大分子,上传量,在下载量(分母)可控的情况下,如何提高上传呢?下面就是几个技巧。

Free&2x 种子不要错过

Free 优惠的种子千万不要错过。

主动分享

制作种子,主动分享的内容,所有人都会从分享者这边获取,也就意味着能够控制上传量。但制作种子对新手来说有一些难度,所以新手可以继续往下看。

下载热门新种

对于没有人下载的种子,那么下载的时候只有一个人,那么你的本地文件也就没人连过来下载,自然也就没有上传量。而对于刚发布的种子,因为作种的人相对较少,而下载的人多,所以只要连上 peers,你本地的部分自然就会有人从你的本地获取,自然就有了上传。

为了攒上传,所以在选择种子时记得找免费的,上传人数少(新种),下载人数多(热门)的。

下载冷门好种

当热门种子被大不分人下载并作种后,如果还下载热门种子,那基本上只有下载速度,并且可能跑满带宽,但是上传可能就不多了,因为同时在下载的人有非常多已经完成的节点可以连接,而并没有多少人连到你的机器下载,所以你的上传就没了。

在硬盘空间足够的情况下下载大种子

种子越大下载的时间越多,通常能有不错的上传。

保持作种

提高分子的另外做法就是 24h 保持作种,可能本地的作种目前没有人在下载, 但是无法保证之后没有人来下载,所以为一些冷门的好种作种不时的就可能有人能连过来给增加上传。

Extend

一款用來輔助 PT 的 Chrome 插件:

一键生成媒体信息:

reference


2020-02-14 bt , pt , bittorrent , torrent , dht , distribute-system , magnet-link , file-sharing

NAS 上的音乐管理

NAS 上的文件已经有足够多的管理系统12,而电影也有 Kodi, Emby, Plex 等等工具,图片同样 Chevereto,Lychee,电子书有 Calibre-web,但就是音乐管理工具没有找到一个比较合适的。

构想

我想的应该这个管理系统可以直接通过 Docker 安装,提供一个比较美观的 Web 页面。

  • Docker
  • 映射本地音乐文件夹
  • Web 管理界面
  • 可以根据文件的 metadata 自动归类,如果可以手工进行编辑就更好了
  • 能在线播放

于是乎我带着这样的目的在 awesome-selfhosted Audio streaming 专区寻找,从编程语言,到 Demo,一个个看,然后就发现了 Funkwhale 点开项目主页介绍,界面非常漂亮,Demo 这各个功能也都非常贴心,立即看安装说明,Docker 搞起。并且 Funkwhale 还自带 pot,新建立的站点可以和网络上的站点连接起来相互分享,像极了之前的 SNS Mastodon.

Funkwhale 用 Python,Django 编写,遇到 bug 倒时候也能看懂代码了。

Install

export FUNKWHALE_VERSION="0.20.1"
touch .env
chmod 600 .env  # reduce permissions on the .env file since it contains sensitive data
cat > .env <<EOD
# Replace 'your.funkwhale.example' with your actual domain
FUNKWHALE_HOSTNAME=your.funkwhale.example
# Protocol may also be: http
FUNKWHALE_PROTOCOL=https
# This limits the upload size
NGINX_MAX_BODY_SIZE=100M
# Bind to localhost
FUNKWHALE_API_IP=127.0.0.1
# Container port you want to expose on the host
FUNKWHALE_API_PORT=5000
# Generate and store a secure secret key for your instance
DJANGO_SECRET_KEY=$(openssl rand -hex 45)
# Remove this if you expose the container directly on ports 80/443
NESTED_PROXY=1
EOD

运行:

docker run \
	--name=funkwhale \
	--restart=unless-stopped \
	--env-file=/share/Container/funkwhale/.env \
	-v /share/Container/funkwhale/data:/data \
	-v /share/Music:/music:ro \
	-e PUID=1000 \
	-e PGID=1000 \
	-p 6000:80 \
	-d \
	funkwhale/all-in-one:latest

或者使用 docker-compose:

version: "3"

services:
  funkwhale:
	container_name: funkwhale
	restart: unless-stopped
	# add the version number in your .env file, or hardcode it
	image: funkwhale/all-in-one:0.20.1
	env_file: /share/Container/funkwhale/.env
	environment:
	  # adapt to the pid/gid that own /srv/funkwhale/data
	  - PUID=1000
	  - PGID=1000
	volumes:
	  - /share/Container/funkwhale/data:/data
	  - /share/Music/:/music:ro
	ports:
	  - "6000:80"

koel

Koozic

reference


2020-02-12 nas , qnap , music , file-manager , docker

几个常见的 NAS 系统整理

看文章老有几个 NAS 系统被翻来覆去的提到,这里就一起看看 Wiki,看看有什么区别吧。

FreeNAS

NAS 系统中最著名也最强大的一个系统,基于安全和稳定著称的 FreeBSD,集成了 Sun 公司的 ZFS 文件系统,ZFS 拥有很多文件管理的特性,非常适合管理大量可扩展的数据系统。1 目前由 ixsystems 公司维护。

硬件依赖

FreeNAS 对硬件有一定的要求,至少需要 8G 内存,如果要安装插件或者启用虚拟机可能需要更多。FreeNAS 的 ZFS 需要一个基本的内存量来维持基本的运行。2

安装

安装教程:

NAS4Free

基于 FreeNAS 0.7 开发的一个分支,由原 FreeNAS 系统开发者发起创建。

官网:

OpenMediaVault

OpenMediaVault 是一款基于 Linux 的 NAS 操作系统,项目领导人是 Volker Theile,具体来说 OpenMediaVault 是基于 Debian 的,并且于 GUN GPLv3 下开源。OpenMediaVault 和 FreeNAS 有个很深的缘源,他们都基于 FreeNAS,不过在 2009 主要的两位项目负责人产生分歧,所以 Volker Theile 基于 Linux 重写了 FreeNAS 于是成就了 OpenMediaVault,而另一位 FreeNAS 的创始人 Olivier Cochard-Labbé 则基于 FreeBSD 重写了 FreeNAS,于是成就了今天的 FreeNAS。3

OpenMediaVault 主要面向小型办公环境和家庭,所以体积非常小,并且还有树莓派版本。

其他参考链接

ESXi

由 VMware 开发,一听名字就知道,这家以虚拟机著称的公司,开发的一款为企业设计的虚拟机。ESXi 可以方便的安装在服务器中,然后就可以虚拟化安装其他系统。

Unraid

Unraid 是另一款 NAS 操作系统,实现的功能都大同小异 4,Unraid 不通过组 RAID 方式来存储数据,但是可以和 RAID 一样做到冗余备份,Unraid 另外比较亮眼的就是虚拟化技术,可以在此基础上虚拟化安装各个操作系统。

reference


2020-02-11 freenas , unraid , esxi , docker , linux , freebsd , openmediavault , nas

使用 tinyMediaManager 整理影视资源

tinyMediaManager (后文简写成 tmm) 可以用来批量处理本地的影视资源,处理后就可以非常漂亮用海报墙的方式展示出来。

下载安装

tinyMediaManager 是 Java 编写的,所以天然的具有跨平台的属性,三大桌面平台全都支持,并且还是开源的。

功能

特色功能 1

  • 支持从 themoviedb.org, imdb.com, ofdb.de, moviemeter.nl 等等站点抓取电影元信息,海报,图片等等
  • 支持从 opensubtitles.org 自动获取字幕,当然这个站中文的比较少
  • 支持批量重命名

使用

使用过程是比较简单的,添加媒体库,然后 tmm 就能通过文件名在左侧边栏展示出来,然后指定元数据从 themoviedb.org 获取,如果媒体文件命名足够清晰的话,可以直接一键自动匹配所有的影片。

媒体文件的管理

绝大部分影片用 bt 下载后可能的文件名是这样的:

利刃出鞘(中英双字幕).Knives.Out.2019.WEB-1080p.X264.AAC.CHS.ENG-UUMp4.mp4

对于这样的文件名本身就已经告诉了我们很多信息,比如中文片名,英文片名,发行日期,文件格式,编码格式,音频编码格式,中英文字幕情况,以及出处,如果想要在 Kodi,Emby,Plex, 或者 Jellyfin 这些媒体播放器中展示出海报,剧情介绍,演员表等等 metadata,还缺少两样东西:

  • xxx-poster.jpg
  • xxx.nfo

poster.jpg 顾名思义就是电影的海报,而 nfo 文件就是存放该媒体文件 metadata 信息的地方,用 less 或者直接用 vi 查看的话就一目了然了。其中包含着这部电影需要展示的完整的信息,有了这两个文件,不管在那个媒体管理软件中打开存放的目录就能比较漂亮的显示媒体海报墙了。

Extended

安装 tinymediamanager 过程中发现 themoviedb 这个非常棒的网站,不仅完美的代替了豆瓣,界面美观,而且还提供了 API 接口,豆瓣恶心的把 API 关闭后,又频繁删贴,早有点看不下去了。

等那天有空,把我的豆瓣评分同步 过去。2


2020-02-10 media , movie , poster , emby , qnap , tv-serial

自建 RSS Reader

Tiny Tiny RSS

Php 5.6, Postgresql or MySQL

Docker 安装,虽然 ttrss 官方给了自己的解决方案,但似乎刚刚起步,而 linuxserver/tt-rss 的镜像因为拿不到 tt-rss tarball 所以也停止更新了。所以最后折中的方案就是用了 这个镜像

QNAP 下的 PostgreSQL

App store 中可以直接安装,但实际上 QNAP 只是帮用户默认用 docker-compose 安装好了,不过也还行了,连 phpPgAdmin 也安装了。

查看下文件内容:

version: '3'

services:
  db:
	image: postgres:11.4
	restart: on-failure
	ports:
	  - 5432:5432
	volumes:
	  - ./data:/var/lib/postgresql/data
	environment:
	  - POSTGRES_PASSWORD=postgres

  web:
	image: edhongcy/phppgadmin:latest
	restart: on-failure
	ports:
	  - 7070:80
	  - 7443:443
	depends_on:
	  - db
	environment:
	  - PHP_PG_ADMIN_SERVER_DESC=PostgreSQL
	  - PHP_PG_ADMIN_SERVER_HOST=db
	  - PHP_PG_ADMIN_SERVER_PORT=5432
	  - PHP_PG_ADMIN_SERVER_SSL_MODE=allow
	  - PHP_PG_ADMIN_SERVER_DEFAULT_DB=template1
	  - PHP_PG_ADMIN_SERVER_PG_DUMP_PATH=/usr/bin/pg_dump
	  - PHP_PG_ADMIN_SERVER_PG_DUMPALL_PATH=/usr/bin/pg_dumpall

	  - PHP_PG_ADMIN_DEFAULT_LANG=auto
	  - PHP_PG_ADMIN_AUTO_COMPLETE=default on
	  - PHP_PG_ADMIN_EXTRA_LOGIN_SECURITY=false
	  - PHP_PG_ADMIN_OWNED_ONLY=false
	  - PHP_PG_ADMIN_SHOW_COMMENTS=true
	  - PHP_PG_ADMIN_SHOW_ADVANCED=false
	  - PHP_PG_ADMIN_SHOW_SYSTEM=false
	  - PHP_PG_ADMIN_MIN_PASSWORD_LENGTH=1
	  - PHP_PG_ADMIN_LEFT_WIDTH=200
	  - PHP_PG_ADMIN_THEME=default
	  - PHP_PG_ADMIN_SHOW_OIDS=false
	  - PHP_PG_ADMIN_MAX_ROWS=30
	  - PHP_PG_ADMIN_MAX_CHARS=50
	  - PHP_PG_ADMIN_USE_XHTML_STRICT=false
	  - PHP_PG_ADMIN_HELP_BASE=http://www.postgresql.org/docs/%s/interactive/
	  - PHP_PG_ADMIN_AJAX_REFRESH=3

看到了默认密码了吧,QNAP 官方的页面都不写一下,让别人一键安装的去哪里找,还不如直接贴这个让用户自己到 Container 里面自己建呢。

如果安装后发现用默认的用户名:postgres 和默认密码:postgres 登录不了,尝试重启一下服务,然后 netstat -tupln 看看服务 5432 端口有没有启动。

/etc/init.d/postgresql.sh restart

然后就开始安装 ttrss:

docker run -d --name ttrss --restart=unless-stopped \
-e SELF_URL_PATH=http://<your-nas-ip>:181 \
-e DB_HOST=<your-nas-postgresql-host> \
-e DB_PORT=5432 \
-e DB_NAME=ttrss \
-p 181:80 \
wangqiru/ttrss

安装的时候有个坑,启用时遇到如下错误:

PHP Fatal error: Uncaught PDOException: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "ttrss_version" does not exist LINE 1

我一般习惯 MySQL 的做法,先到数据库中新建了一个 DB,新建一个用户,然后再用 -e DB_USER=user -e DB_PASS=password 来创建 Docker 容器,没想到遇到了 Bug,首次初始化的时候脚本里有着判断,如果 db 已经存在了就不初始化 sql 了,所以到数据库中把新建的数据库删掉,然后再来一次就好了。

其他说明:

  • --restart 参数可以换成 --restart=always,这样系统重启容器也能重启
  • SELF_URL_PATH 这里需要和启动时的 URL 配置完全一致,否则 ttrss 启动时会出错

其他插件安装可以参考这里,比如全文输出,主题之类,我只想用 ttrss 来订阅几个我日常关注的博主,其他的订阅源还是 InoReader 所以也就不折腾全文不全文了,不全文输出的也就没有订阅的必要了。不过如果你想要实现全文输出也还是有办法的。

Mercury Parser api

docker run -d --name=mercury-parser-api \
--restart=unless-stopped \
-p 3000:3000 -d wangqiru/mercury-parser-api

FreshRSS

FreshRSS 也是 PHP 编写,基本依赖也就是 PHP 和数据库,MySQL 5.5.3+ MariaDb, SQLite, PostgreSQL 9.5+. 界面也比较简洁大方。

在线预览:https://freshrss.org/

用 Docker 安装也比较方便,可以参考这里

安装

docker run -d \
  --name=freshrss \
  -e PUID=1000 \
  -e PGID=100 \
  -e TZ=Asia/Shanghai \
  -p 6080:80 \
  -v /share/Container/freshrss:/config \
  --restart unless-stopped \
  linuxserver/freshrss

NewsBlur

Python, Django, Celery etc

NewsBlur 的在线预览可以点击这里,界面也还是很不错的。

Selfoss

另一款 PHP 编写的 RSS 阅读器,Selfoss 比较简单,依赖也比较简单,PHP,WebServer,Database(sqlite, mysql, PostgreSQL) 就可以,所以安装起来也比较简单,甚至有环境的基础下,下载 zip, 解压,然后修改一下配置即可。

需要注意的是,config.ini 配置文件中的 password 字段,需要访问 http://ip-selfoss-service/password,然后输入密码生成一个 hashcode,然后将该密码 hash 配置到 config.ini 文件中。

然后访问 http://ip-selfoss-service/opml,可以导入 opml 文件。

Android Reader

总结

Selfoss 相对比较简单,定时抓取也要手工 crontab 来触发,但功能一点也不弱,日常用完全没有问题,并且依赖非常少。

排错

在我配置使用 SQLite 作为数据库时,Selfoss 没出现问题,但是当我配置 MySQL 作为数据库时,在日志中给我报了:

[2020-02-10 16:04:21] selfoss.ERROR: PDOStatement: You do not have the SUPER privilege and binary logging
 is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

网上一查似乎是 MySQL 权限问题,但想想我已经给了 Selfoss 的用户整个 selfoss 数据库的权限了,后来一查看到有人和我相同的情况 1,定位到应该就是 MySQL 中创建 Tigger 的权限不足导致。

[2020-02-10 16:09:03] selfoss.ERROR: PDOStatement: Trigger does not exist

结合这个错误,所以我的解决方法就是在安装时临时给 selfoss 这个数据库用户超级权限,安装好后把权限取消。

  • Selfoss 安装好后会在 phpMyAdmin 中能看到 Selfoss 创建了两个 Trigger,insert_updatetime_triggerupdate_updatetime_trigger, 备份时记得备份,mysqldump --triggers --no-create-info --no-data --no-create-db --skip-opt selfoss > selfoss.trigger
  • 删除 triggers from the selfoss database: drop trigger insert_updatetime_trigger; and drop trigger update_updatetime_trigger;
  • replaced the selfoss user in the exported selfoss.trigger file with root (DEFINER=root@localhost)
  • 导入 mysql selfoss < selfoss.trigger

miniflux

Go 编写,依赖 Postgresql

stringer

Ruby 编写

Leed

Php/MySQL

更多自建的 RSS 可以参考这里 大概还有几十种,不同语言,不同实现。

reference

  1. https://selfoss.aditu.de/forum/index.php?mode=thread&id=895 


2020-02-09 rss , reader , self-hosted , linux , docker , qnap , qnap-tutorial , 威联通

威联通折腾篇二十一:Virtualiztion Station 安装 Windows10

平时不会想起用 Windows,因为没有要用的场景,但有的时候不得不用到,所以安装一个以防万一。

导入虚拟机

支持导入的虚拟机格式有:

  • ova
  • ovf
  • vmx
  • qvm

全新安装虚拟机

如果选择新建虚拟机可以用镜像全新安装。

VNC 链接

安装后可以设置 VNC 连接,设置端口 5900,然后就可以通过客户端连接了。

Linux 下可以使用 Remmina:


2020-02-09 qnap , windows , qnap-tutorial

自建邮件服务器可选项

Mail-in-a-Box

maillu

搭建介绍:

mailcow

Open source email server

mailcow 使用介绍:

搭建视频教程:

docker-mailserver

文档不是很全

salmon

一个 Python 写的 smtp 服务

inbucket

Disposable webmail server (similar to Mailinator) with built in SMTP, POP3, RESTful servers; no DB required.

A great tool for email testing.

reference


2020-02-08 mail , linux , docker , smtp , mail-server

威联通折腾篇十九:Calibre-web

借助 QNAP(威联通)的 Container Station 功能,可以展开无限想象,之前也已经分享 过很多的使用 Docker 镜像来安装的教程了。所以今天不展开讲,主要就是来分享一下,最近安装的 calibre-web。因为之前七零八落的收集了很多电子书,文件分散在磁盘的各个地方,一直没有好好整理,正好趁着这个机会把所有的文件都放到一个地方了。

docker

主要是用的镜像是 technosoft2000 制作的 calibre-web:

我尝试了 linuxserver 发布的 calibre-web,也不错,不过缺少了在线预览功能。然后还看到有几个中文的镜像,还没来得及尝试。

源码主要在 https://github.com/janeczku/calibre-web 这里。

docker create --name=calibre-web --restart=always \
-v <your Calibre books folder>:/books \
[-v <your Calibre Web application folder>:/calibre-web/app] \
[-v <your Calibre Web kindlegen folder>:/calibre-web/kindlegen`]
[-v <your Calibre Web config folder>:/calibre-web/config \]
[-e USE_CONFIG_DIR=true \]
[-e APP_REPO=https://github.com/janeczku/calibre-web.git \]
[-e APP_BRANCH=master \]
[-e SET_CONTAINER_TIMEZONE=true \]
[-e CONTAINER_TIMEZONE=<container timezone value> \]
[-e PGID=<group ID (gid)> -e PUID=<user ID (uid)> \]
-p <HTTP PORT>:8083 \
technosoft2000/calibre-web

批量导入书籍

注意下方命令中的 --library-path 需要指定 Calibre 库的位置。

calibredb add --library-path=/books -r /path/to/your/book_dir_you_want_to_add

使用该方法添加的书籍会在原始位置,而 metainfo 则会添加到 Calibre 库中,也就是上面一行的 /books 目录中。

更多关于 calibredb 命令的使用可以参考官网

Goodreads API

获取 Goodreads API

批量导入 Calibre

在 Calibre 界面中可以快速的导入一个目录,但是在 Web UI 里面暂时不能做到,所以借用 Bash 命令 1

if [ "$(ls -A /[autoaddfolder])" ]; then
	 calibredb add -r "/[autoaddfolder]" --library-path="/[calibrelibraryfolder]"
	 rm /[autoaddfolder]/*
fi

Others

talebook

亮点是支持从豆瓣获取数据,不过我使用的 technosoft2000 的镜像也是支持的。

talebook-calibre-web

gshang2017

  1. https://github.com/janeczku/calibre-web/issues/412 


2020-02-08 qnap , calibre , calibre-web , linux , docker , qnap-tutorial

电子书

最近文章

  • 使用 flexget 实现下载更新自动化 FlexGet 官网是这样描述自己的,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。
  • 自架的服务整理 这篇文章主要整理比较流行的可以自建的服务,按照功能分类,我并没有每一个服务都尝试,但基本上每个功能下都有一个服务在跑着。
  • 关于 BitTorrent 和 PT 你需要知道的一切 几个 bt 中经常见到的词汇 bt 其实是 BitTorrent 的缩写,后文为了描述简单统一简称为 bt.
  • NAS 上的音乐管理 NAS 上的文件已经有足够多的管理系统 了 12,而电影也有 Kodi, Emby, Plex 等等工具,图片同样 Chevereto,Lychee,电子书有 Calibre-web,但就是音乐管理工具没有找到一个比较合适的。 FileRun ↩ NextCloud ↩
  • 几个常见的 NAS 系统整理 看文章老有几个 NAS 系统被翻来覆去的提到,这里就一起看看 Wiki,看看有什么区别吧。