创建你自己的根服务器(亦称“月球”)

行星上的所有ZeroTier节点实际上都位于一个数据中心。这使得在任何地方直接连接设备变得很容易,但它的缺点是没有互联网连接就无法工作。网络连接也不一定完全可靠,有时出于安全原因,用户可能希望完全“air gap”互联网外的一组节点。

在1.2.0中,ZeroTier引入了添加用户自定义根服务器的功能。已有的数据中心是行星,用户定义的根服务器被称为月球。当节点“轨道”是月球时,它会将月球的根服务器添加到其(行星)根服务器中。绕月球运行的节点仍将使用行星根服务器,但如果它们看起来更快或没有其他东西可用,它们将使用月球的根服务器。

创建月球的第一步是部署一组根服务器。在大多数情况下,我们建议使用两个。这些是常规的ZeroTier节点,但总是打开并具有静态(物理)IP地址的节点。这些静态IP可以是全球互联网IP或只能在内部访问的物理内联网IP。在后一种情况下,你的月亮根在办公室外不起作用,但这无关紧要。漫游节点只会使用行星根服务器。

我们建议根服务器不要充当网络控制器、加入网络或执行任何其他重叠功能。他们需要良好的可靠网络连接,但在其他方面只需要很少的RAM、存储或CPU。根服务器可以是小型虚拟机、VPS或云实例,也可以是树莓派等小型设备。如果您将根服务器配置为虚拟机,请注意它们不会都驻留在同一个物理硬件上。这将违背建议两个的目的。

下一步是使用zerotier-idtool创建一个世界定义。您需要来自每个根服务器的theidentityidentity.public文件。选择一个根(无论哪个),然后运行zerotier-idtool initmoon <identity.public of one root> >>moon.json。这个zerotier-idtool命令将向您的世界定义的JSON版本输出到标准输出,因此我们将它重定向到moon.json

检查此文件。它将包含以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "deadbeef00:0:34031483094...",
"stableEndpoints": []
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}

世界ID在技术上是任意的,可以是任何随机的64位值。根据惯例,我们使用其中一个词根的地址。

世界定义的JSON文件包含secrets,因此将其保存在安全的地方很重要。signingKey_SECRET 将允许您将来自动更新世界定义。

现在添加其他根并定义它们的稳定端点。你最终会得到一些看起来像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "deadbeef00:0:34031483094...",
"stableEndpoints": [ "10.0.0.2/9993","2001:abcd:abcd::1/9993" ]
},
{
"identity": "feedbeef11:0:83588158384...",
"stableEndpoints": [ "10.0.0.3/9993","2001:abcd:abcd::3/9993" ]
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}

您使用的静态IP地址必须可以从您希望这些根服务的所有位置访问。如果您要将这些部署到物理位置使用,请使用内部IP。如果您希望它们在场外可用,请使用DMZ的公共IP或将它们托管在数据中心附近的云提供商处。提供简单静态直接IP寻址和双堆栈IPv4/IPv6支持的低成本云主机,如Digital OceanVultrLinode,是托管根的理想场所。在大多数情况下,这些提供商的最低价格案例就足够了。

第三步是使用zerotier-idtool genmoon moon.json生成实际的签名世界。在这种情况下,这将生成一个名为000000000000deadbeef00.moon的文件。这不包含密钥,但由JSON文件中的秘密签名。

现在转到您的根目录,创建(如果不存在)他们工作目录的子目录(通常在Linux上为/var/lib/zerotier-one),称为 moons.d,并在那里复制签名的 moon 文件。现在重新启动根,它们应该可以准备好了。

您可以通过以下两种方式之一将这些根添加到常规节点:将相同的世界定义文件放在它们的 moons.d 目录中或使用 zerotier-cli orbit 命令:zerotier-cli track deadbeef00 deadbeef00。第一个参数是世界 ID(我们可以通过删除两个前导零来缩短它),第二个参数是其任何根的地址。如果它在线且可访问,这将联系根并从中获取完整的世界定义。

一旦你“轨道”了月球,试试zerotier-cli listpeers。您应该看到您创建的根被列为MOON而不是LEAF。它们现在将用作替代根服务器。

很早就过想在github仓库下载指定分支下的某个文件(夹),特别是对于一些资源收集归档的仓库只是想去下载自己关心的部分,要整个仓库clone的话会有不必要的时间和网络资源的浪费。当时查到可以使用git1.7.0开始支持的sparse-checkout的方式解决此问题,但是对于只是想下载一个文件(夹)资源的需求来说略有麻烦。

最近又有小伙伴询问此类问题的解决方式,在交流中发现git-svn可以用来github克隆指定文件夹,这说明github已经支持svn1,那么通过svn实现在github下载单文件(夹)也就比较简单了,现将目前的常用解决方案整理如下:


git-svn

1
2
3
4
5
6
7
# 此方法只可实现对文件夹的下载
# 下载 master 文件夹
$ git svn clone <rul>/trunk/<dir> <localdir>
# 下载 指定brach文件夹
$ git svn clone <rul>/branches/<branchname>/<dir> <localdir>
# 下载 指定tag文件夹
$ git svn clone <rul>/tags/<tagname>/<dir> <localdir>

svn

1
2
3
4
5
6
7
8
9
10
# 查看仓库trunk、branch及tag信息
$ svn list <url>
# 下载 master 文件夹
$ svn checkout <rul>/trunk/<dir> <localdir>
# 下载 指定brach文件夹
$ svn checkout <rul>/branches/<branchname>/<dir> <localdir>
# 下载 指定tag文件夹
$ svn checkout <rul>/tags/<tagname>/<dir> <localdir>
# 下载 单个文件
$ svn cat <rul>/trunk/<tagname>/<dir>/<file> > <file>

other tools

  • DownGit 直接键入对应分支文件目录即可下载文件

参考文档

工作快三年了,一直以来都是关注自身在技术方向的成长,却忽视了在其他方向的进步,正好这是一本真正从“人”(而非技术也非管理)的角度关注软件开发人员自身发展的书。


这里说的『优秀的软件开发人员』是那些能够把控自己职业生涯、达成目标、享受生活的人。

职业

工作是属于公司的,而职业生涯却是属于你自己的。

​ ——厄尔·南丁格尔

从非同凡响开始:绝不要做他人都在做的事

拥有商业心态,把自己当作一个企业去思考时,你才能做出良好的商业决策。把雇主当作是你软件开发企业的一个客户,想想你有什么可以卖?你的产品或服务是什么?

  • 专注于你正在提供怎样的服务,以及如何营销这项服务;
  • 想方设法提升你的服务;
  • 思考你可以专注为哪一特定类型的客户或行业提供特定的服务;
  • 集中精力成为一位专家,专门为某一特定类型的客户提供专业的整体服务(记住,作为一个软件开发人员,你只有真正专注于一类客户,才能找到非常好的工作)。
采取行动
  • 想象一下:有一家企业,拥有某个产品或服务。他们将如何推广这一产品或服务从而可以做到卓尔不凡?
  • 如果只用一句话来描述你能为潜在雇主或客户提供怎样的特定服务,这句话是什么?
  • 把你的职业当作是一个企业,将会影响你的:
    • 工作的方式;
    • 处理自己的财务的方式;
    • 寻求新工作或新客户的方式。

思考未来:你的目标是什么

大目标并不需要那么具体,但是必须足够清晰,能够让你知道自己是在向它前进还是离他越来越远。一旦你想通了自己长远的大目标是什么,下一步就是设定路线,制定通往大目标的小目标。同时你应该定期追踪并更新自己设定的目标,必要时还要调整。

采取行动
  • 坐下来,为你的职业生涯设置至少一个大目标。
  • 将大目标分解成相应的若干小目标,例如:
    • 月度目标;
    • 周目标;
    • 每日目标。
  • 把你的大目标写在自己每天的必经之地,每日三省吾身——我在追求什么。

人际交往能力:远比你想象的重要

  • 每个人都希望感到自己很重要 请谨记当你和别人打交道的时候,你应该知道的最重要的一个概念就是:以自己为核心,每个人都希望自己很重要。这是人类最深邃、最致命的欲望之一,也是社会和生活中取得伟大成就的主要动机。

    不要轻率地否决同事的想法,以便于可以提出自己的想法,这样很可能会导致他们对你的想法充耳不闻,仅仅是因为你让他们感觉自己是无足轻重的。

  • 永远不要批评 如果你想去激励团队鼓舞士气,那么就用表扬代替批评吧。

  • 换位思考 思考对他人而言什么才最重要,什么是他们需要的。

  • 避免争吵 当你被拖入一场争吵之前,想想办法看看能不能逆转。做个有趣的小测试,试着认输。事实上,不仅仅要认输,更要果断站在对手一边,结果能让你大吃一惊。

破解面试之道

  • 大多数面试官决定雇佣某个人是基于各种各样的非技术因素;
  • 通过面试最快捷的方式是让面试官对你怀有好感。达成该目标有很多方法,其中大多数可以在面试之前完成;
  • 即使你现在不需要努力找工作,也要整理一份清单,列出你想去工作的公司,以及你认识的这些公司的人。

你是哪类软件开发人员

  • 专业化很重要 专业化程度越深,潜在的机会就越少,但获得这些机会的可能性就越大。
  • 选择你的专业 可以是公司项目的主要痛点,某一缺乏经验丰富的特定工作,各种会议上和用户组中常出现的话题。
采取行动
  • 列出你能想到的所有软件开发的专业领域。从广义的范畴将它们逐一细化,看看你能细化到多具体。
  • 你当前的专业领域是什么?如果没有的话,想想你会选择专攻哪个领域。
  • 去主流的招聘网站上看看自己的专业领域市场行情如何。确定一下,专业化道路是会让自己受益,还是过度限制了自己的选择。

攀登晋升阶梯

承担责任
  • 有一个不受重视的项目,你能去负责它吗?
  • 你能帮助团队里的新人快速成长吗?
  • 你能负责文档制作流程,并保证及时更新这些文档吗?
  • 哪些工作是没有人愿意去做,你愿意承担起来,并将其简化或者自动化的?
引人注目
  • 每天都记录自己的活动日志——把这个日志以周报的形式发送给你的经理。
  • 提供演讲或培训——选择一个对你的团队有用的话题。
  • 发表意见——只要在会议上就这么做,或者只要你能得到机会就这么做。
  • 保证“曝光度“——定期与老板会面,确保你经常被注意到。
自学
  • 你应该不断学习新东西,提升自己的技能。另外,不要只学软件开发。如果你把目标设定为更高级别的岗位甚至是行政岗位,你还需要学习领导力、管理和商科的相关知识。
  • 不要玩完估计分享自己学到的东西。
成为问题的解决者
  • 成为永远能为各种问题找到解决方案的人,成为勇于执行这些解决方案以获得成果的人。
关于政治
  • 脚踏实地成为一个真正有价值的员工要比弄虚作假好得多
  • 至少应该知道会发生什么,哪种人需要避开,哪种人永远不要有交集

成为专业人士

成为专业人士是一种心态。如果我们总是与恐惧、自毁、拖延和自我怀疑作斗争,那么问题就是:我们正在像外行那样思考问题。外行毫不起眼,外行废话连篇,外行屈从于逆境。专业人士可不这么想。不管怎样,他引人注目,他恪尽职守,他始终如一。

专业人士的品质
  • 遵守自己的原则;
  • 专注于正确完成工作;
  • 不惧怕承认自己错了;
  • 持续稳定;
  • 用于承担责任;
  • 养成良好习惯;
  • 追求品质,完善自我。

书单

  • Dale Carnegie的《人性的弱点》
  • Charles Duhigg的《习惯的力量》
0%