评论系统从Disqus迁移到Valine

介绍 | Valine

如何方便的使用评论功能就是一件比较麻烦的事情,当然网上也有很多很好的解决方案,例如之前被很多人使用的Disqus,还有多说、网易云跟帖等。但是国内的网络环境下,评论成为了洪水猛兽,于是乎多说、网易云跟帖等国内的评论平台相继关闭,Disqus这样海外的优秀平台也被墙,一时间能够正常使用评论成为了一种奢侈。在这样的大环境下,终于,Valine – 一款极简的评论系统诞生了。今天顺手也把评论从Disqus迁移了过来,正式启用了Valine。

 数据迁移

首先要感谢Deserts Pan大神连夜制作了Disqus的数据迁移工具,经过测试数据迁移也非常简单。

 数据导出

登陆到Disqus后台后,选择Export,即可导出站点下面所有的评论内容。

 数据导入

由于Valine使用LeanCloud来作为评论数据存储的平台,因此首先需要去LeanCloud注册一个账户,注册后在后台创建应用。
创建完成后,需要在应用的设置中,选择“应用KEY”,找到你的APP ID和APP KEY。
然后访问Pan大的Disqus2LeanCloud的后台,输入你刚才的APP ID和APP KEY,并上传你之前在Disqus后台导出的XML文件,点击开始,即可进行数据导入,视你的数据量大小,大约2分钟左右即可完成导入
完成后在LeanCloud后台即可看到导入的Disqus的评论数据了。
另外需要注意的是,这个导入的数据会有一个安全风险,需要手动把ACL的设置里面的权限改为所有人读,否则别人可以轻易删除掉你的站点的评论,这个问题已经提交给Pan大,后续优化掉。

 安全配置

完成数据导入后,需要配置下应用的Web安全域名,限制只有你的站点的域名才能对数据进行访问。

 安装

针对大多数Hexo的博客来说,已经内置了Valine的评论系统,点击这里可以查看到绝大多数Hexo的博客的启用办法,比如对于Hexo的Next的Theme来说,只需要在主题的Config文件里面,修改这一段即可:
1
2
3
4
5
6
7
8
9
10
# Valine.
# You can get your appid and appkey from https://leancloud.cn
# more info please open https://github.com/xCss/Valine
valine:
enable: true
appid: # your leancloud application appid
appkey: # your leancloud application appkey
notify: false # mail notifier , https://github.com/xCss/Valine/wiki
verify: false # Verification code
placeholder: Comment input placeholder
 
把其中的APPID 和APP KEY修改为你对应的LeanCloud上面获取的内容即可。
对于任何第三方页面,也可以通过自己加入代码的方式来使用,样例代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Valine - A simple comment system based on Leancloud.</title>
<!--Leancloud 操作库:-->
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<!--Valine 的核心代码库:-->
<script src="./dist/Valine.min.js"></script>
</head>
<body>
<div class="comment"></div>
<script>
new Valine({
// AV 对象来自上面引入av-min.js(老司机们不要开车➳♡゛扎心了老铁)
av: AV,
el: '.comment', //
app_id: 'Your APP ID', // 这里填写上面得到的APP ID
app_key: 'Your APP KEY', // 这里填写上面得到的APP KEY
placeholder: 'ヾノ≧∀≦)o来啊,快活啊!' // [v1.0.7 new]留言框占位提示文字
});
</script>
</body>
</html>
好了,差不多了,如果你看到你的文章页面出现了如下图所示的评论框,那么恭喜你,你已装逼成功,赶紧去炫耀吧。

用微软的Hyper-V编译并安装OpenWRT

由于一些众所周知的原因,国内访问很多海外网站会出现访问速度缓慢甚至打不开的问题,其中不乏一些日常经常使用的例如搜索、邮箱等应用,虽然目前有很多解决方案来解决电脑、手机上面的网络加速问题,但是每个终端都要单独适配非常麻烦,因此直接在路由器端进行配置,让所有连入路由器的设备都可以无感加速,成为了一个相对『完美』的解决方案,因此我在家里的Gen8上面,用Hyper-V虚拟了一个OpenWRT的软路由来提供此类服务。

Hyper-V由于本身不开源,因此OpenWRT的官方编译版本在很早的时候就移除了针对Hyper-V的支持,因此为了让OpenWRT可以完美的运行在Hyper-V上,我们需要自行编译相关驱动组件。当然网上也有很多大神已经编译好的固件,但是大都加入了一些我自己不太使用的功能,作为一个洁癖,当然是自己编译一个了。
    
参考了Chiphell大神tedaz的文章非官方编译,Hyper-V的Openwrt x86和x86-64版,Chaos Calmer正式版后,修改整理如下。

 准备工作

首先你需要准备一个Linux的编译环境,建议选择Ubuntu这类比较流行的Linux发行版本,并参考OpenWRT官方的OpenWRT编译系统-安装,安装好编译所需要的一些依赖包

以Ubuntu 64bit为例,需要执行下面的命令来安装相关的依赖

1
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev

 

 修改源码

首先从OpenWRT的官网Git下载OpenWRT的源码,建议下载15.05分支的,Trunk分支下的代码通常不是非常稳定。

1
git clone git://git.openwrt.org/15.05/openwrt.git

 

更新OpenWRT所有的feeds,以便你在后续可以提前把需要的ipk(例如luci、shadowsocks的一些依赖等)打包到固件中

1
2
3
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

 

下载完成后,需要针对源码进行如下的修改。

修改/package/kernel/linux/modules/virtual.mk,在最后加入下面的内容,修改内核,添加让OpenWRT内核支持Hyper-V

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
71
72
73
74
75
76
77
78
79
80
81
#
# Hyper-V Drives depends on x86 or x86_64.
#
define KernelPackage/hyperv-balloon
SUBMENU:=$(VIRTUAL_MENU)
DEPENDS:=@(TARGET_x86||TARGET_x86_64)
TITLE:=Microsoft Hyper-V Balloon Driver
KCONFIG:= \
CONFIG_HYPERV_BALLOON \
CONFIG_HYPERVISOR_GUEST=y \
CONFIG_PARAVIRT=n \
CONFIG_HYPERV=y
FILES:=$(LINUX_DIR)/drivers/hv/hv_balloon.ko
AUTOLOAD:=$(call AutoLoad,06,hv_balloon)
endef

define KernelPackage/hyperv-balloon/description
Microsofot Hyper-V balloon driver.
endef

$(eval $(call KernelPackage,hyperv-balloon))

define KernelPackage/hyperv-net-vsc
SUBMENU:=$(VIRTUAL_MENU)
DEPENDS:=@(TARGET_x86||TARGET_x86_64)
TITLE:=Microsoft Hyper-V Network Driver
KCONFIG:= \
CONFIG_HYPERV_NET \
CONFIG_HYPERVISOR_GUEST=y \
CONFIG_PARAVIRT=n \
CONFIG_HYPERV=y
FILES:=$(LINUX_DIR)/drivers/net/hyperv/hv_netvsc.ko
AUTOLOAD:=$(call AutoLoad,35,hv_netvsc)
endef

define KernelPackage/hyperv-net-vsc/description
Microsoft Hyper-V Network Driver
endef

$(eval $(call KernelPackage,hyperv-net-vsc))

define KernelPackage/hyperv-util
SUBMENU:=$(VIRTUAL_MENU)
DEPENDS:=@(TARGET_x86||TARGET_x86_64)
TITLE:=Microsoft Hyper-V Utility Driver
KCONFIG:= \
CONFIG_HYPERV_UTILS \
CONFIG_HYPERVISOR_GUEST=y \
CONFIG_PARAVIRT=n \
CONFIG_HYPERV=y
FILES:=$(LINUX_DIR)/drivers/hv/hv_util.ko
AUTOLOAD:=$(call AutoLoad,10,hv_util)
endef

define KernelPackage/hyperv-util/description
Microsoft Hyper-V Utility Driver
endef

$(eval $(call KernelPackage,hyperv-util))

#
# Hyper-V Storage Drive needs to be in kernel rather than module to load the root fs.
#
define KernelPackage/hyperv-storage
SUBMENU:=$(VIRTUAL_MENU)
DEPENDS:=@(TARGET_x86||TARGET_x86_64) +kmod-scsi-core
TITLE:=Microsoft Hyper-V Storage Driver
KCONFIG:= \
CONFIG_HYPERV_STORAGE=y \
CONFIG_HYPERVISOR_GUEST=y \
CONFIG_PARAVIRT=n \
CONFIG_HYPERV=y
FILES:=$(LINUX_DIR)/drivers/scsi/hv_storvsc.ko
AUTOLOAD:=$(call AutoLoad,40,hv_storvsc)
endef

define KernelPackage/hyperv-storage/description
Microsoft Hyper-V Storage Driver
endef

$(eval $(call KernelPackage,hyperv-storage))</code></pre>

 

修改/target/linux/x86/64/config-default和/target/linux/x86/config-3.18,均添加以下内容(这里后面如果内核有跟心,就修改对应的config-内核版本号即可)

1
2
3
4
5
6
7
8
# CONFIG_HYPERV is not set
# CONFIG_HYPERV_BALLOON is not set
# CONFIG_HYPERV_NET is not set
# CONFIG_HYPERV_STORAGE is not set
# CONFIG_HYPERV_UTILS is not set
# CONFIG_FB_HYPERV is not set
# CONFIG_HID_HYPERV_MOUSE is not set
# CONFIG_HYPERV_KEYBOARD is not set

至此,修改完成。网上还有很多人建议修改Build相关的部分,考虑到后面我们统一使用其他工具来把img转成vhd,因此这一步我们直接生成img即可,不用修改Build相关的内容。

 配置编译参数

OpenWRT有GUI的配置工具,因此我们回到OpenWRT源码主目录,执行make menuconfig,选择Target System为x86,Subtarget有x86_64,以便支持多核心大内存的使用。但是如果你需要在OpenWRT上使用XWare这类只有32位的工具,那就只能编译32位的包了。

f:id:briteming:20180718164729p:plain

f:id:briteming:20180718164906p:plain

然后在Kernel modules里的Virtualization Support里勾选上4个Hyper-V相关的。

https://archive.is/wdj36/71dd3fa1e531c5f921b4590a12c0e8416165ccc0

 

最后取消Kernel modules里的Network Devices中其他网卡即可。
当然,如果你希望提前编译类似于shadowsocks之类的工具,可以参考Shadowsocks OpenWRT上的说明,下载相应的package并在配置编译参数时选中这个包即可,相关依赖会自动选中。

 开始编译

使用命令make可以进行编译,make V=s可以让它输出调试信息,带上-j1参数表示用1个核心编译。建议你选择一台4核心以上的机器来进行编译以免等待的时间太久,由于编译过程中需要下载很多内容,因此流畅的网络(能自动翻墙是最好的)会大大加快你的编译速度。

我之前使用了E3-1230V2的CPU,用了6个核心编译,首次编译大概花了接近1小时的事件才全部编译完成。

 转换格式,大功告成

编译完成后,在BIN目录下,可以找到编译完成的img文件(一般是压缩包),解压后,我们使用下面的命令来转化为Hyper-V可用的vhd格式。

1
qemu-img convert -f raw -O vpc openwrt-x86-generic-combined-ext4.img openwrt-x86-generic-combined-ext4.vhd

 

然后直接在Hyper-V下面使用就一切OK啦。

from 

http://archive.is/wdj36

使用DNS-Forwarder提升ChinaDNS稳定性

很多人使用Openwrt的路由器配合SS来提升访问海外网站的速度和稳定性,其中ChinaDNS被很多人作为防DNS污染的利器,但是大多数人目前还是使用ss-tunnel创建一个UDP转发隧道作为ChinaDNS的上游来进行查询,这在不少地区的ISP环境下常常出现不稳定的现象,aa65535的DNS-Forwarder for OpenWrt很好的解决了这个问题,参考Wiki整理如下:

 安装DNS-Forwarder for OpenWrt

从v1.1.0版本开始,DNS-Forwarder for OpenWrt把Luci设置界面分离到了OpenWRT-Dist-Luci,因此根据你的平台不同,你需要分别下载两个程序:

下载完成后,在路由器上执行opkg install安装即可

 配置DNS-Forwarder和ChinaDNS

DNS-Forwarder配置比较简单,只需要设置监听端口和上游DNS即可,这里我设置了监听端口为5352

然后配置ChinaDNS的上游服务器,把原先使用UDP隧道转发的上游去掉,改为DNS-Forwarder的地址,这里是127.0.0.1:5352,另一个上游服务器保持不变,可以是114.114.114.114这种公共DNS,也可以是你的ISP的DNS

 完成

设置完成,如果你第一次使用ChinaDNS的话,需要在网络-DHCP/DNS中,把ChinaDNS配置为本地的DNS服务器,如下图所示,如果之前已经配置了,那这一步就可以忽略了。

在这个模式下,ChinaDNS使用DNS-Forwarder作为上游,而DNS-Forwarder又使用TCP协议直接向上游(通常是8.8.8.8)服务器进行查询,如果配合了SS,TCP查询会自动走SS线路,也同时解决了线路优化的问题.

Linux服务器的IP配置攻略

在Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等。但是网卡并不是作为裸设备出现在/dev目录下,而是存在内存中。eth0, eth1是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。本文主要讨论这类网卡。 为Linux以太网卡设定IP地址的方式非常灵活,你可以选择适合你工作情况的方法:
1. 使用ifconfig命令

ifconfig命令是最重要的Linux网络命令之一,最主要的用途是设定、修改网卡的IP地址,修改网卡ip地址:
# ifconfig eth0  192.168.149.129 netmask 255.255.255.0
默认情况下, ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它主要用于网卡状态调试。假设您要建立一个临 时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡。
查看指定网卡的接口状态:
#ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F6:9B:27
inet addr:192.168.149.129  Bcast:192.168.149.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef6:9b27/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:116 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12600 (12.3 KiB)  TX bytes:12705 (12.4 KiB)
Interrupt:10 Base address:0x1424
可以看到修改后 的ip地址生效。小贴式:ifconfig修改的ip地址,在服务器重新启动后会失效。
2. 使用ip命令
ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。 现在,绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作,但它们在Linux2.2和更高版本的内核上显得有一些落伍。使用iproute2前你应该确 认已经安装了这个工具。这个包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下载源代码安装。如果希望在以太网接口eth0上增加一个地址10.0.0.1,掩码长度为24位,标准广播地址,标签为eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias
3. 使用 netconfig命令
netconfig命令可以设置网络设备的ip地址,netconfig命令可以永久保存设置。
使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后会在命令行下弹出一个对话框进行确认,选择“是”,如图1 。
图1 是否进行联网配置对话框
这时即可进行设定见图2
图2 netconfig配置界面
设定结束后用“tab”键选择“OK”即可保存设置并且退出。然后使用命令激活即可生效:
#service network restart
或者使用等价命令组(先禁用后启用):
#ifdown eht0
#ifup eth0
小贴士:netconfig命令修改的ip地址,在服务器重新启动后不会失效。
4. 使用neat命令

使用neat命令需要配置好X window系统,在命令行下运行“neat”命令后添加IP地址和其他相关参数后保存设置,从新启动网络和网络服务或计算机,见图3。
图3 图形界面添加IP地址
另外neat命令还有一个同价命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存设置。
5. 修改TCP/IP网络配置文件
除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的TCP/IP网络配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x从0开 始,第一个以太网配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件,也可 以修改网卡IP地址。比如文件:ifcfg-eth0  代表是以太网实际网卡0的配置文件,比如文件:ifcfg-eth0:1  代表是以太网实际网卡0的配置文件。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0        #设定网卡的名称,要跟文件名称对应 #
ONBOOT=yes        #是否在开机的的时候启动网卡#
BOOTPROTO=static      #启动的时候的 IP 取得的协议,这里是固定的,
如果是动态主机的话,要改成 dhcp 才行#
IPADDR=192.168.1.2     #IP 地址#
NETMASK=255.255.255.0   #子网掩吗#
NETWORK=192.168.1.0    #该网段的第一个 IP#
BROADCAST=192.168.1.255  #最后一个同网段的广播地址#
GATEWAY=192.168.1.2    #网关地址#
#GATEWAYDEV=eth0
存盘后使用命令:“service network restart “激活即可生效。这个方法同样可以永久保存设置。
6. 在一个网卡上配置多个ip地址
有时候想要在网卡上配置多个ip地址,同样可以使用ifconfig命令完成:
ifconfig eth0:1 192.168.149.122 netmask 255.255.255.0
ifconfig eth0:2 192.168.149.123 netmask 255.255.255.0
以上是对网卡eth0修改了2个IP地址的方法,重新使用ipconfig命令查看,可以看到一个网卡上已经配置多个ip地址。如图4。
图4在一个网卡上配置多个ip地址
7. 无线网卡在Linux下的ip配置全攻略
随着Linux网络技术的快速增长,硬件厂商大大加速对硬件产品对Linux的技术支持。使得Linux 支持的无线网卡的数量在过去的一两年里增长显著。对于有些设备,配置无线连接非常简单:只要在您使用的 Linux 发行版本,插入无线网卡,在设置过程中单击鼠标,并输入正确的联网参数就可以了。设置无线网络相关步骤如下:
(1)用“iwconfig”命令来显示无线网卡(eth0、eth1)的信息。在以下的步骤中,用ethX表示无线网卡的名称。
(2)设置无线网卡的操作模式为Managed:
#iwconfig ethX mode Managed
(3)如果采用了WEP加密,需要设置WEP密码:
#iwconfig ethX key password XXXXXX
对应40位和128位加密,password分别为6位和10位的十六进制数字。
(4)设置SSID,其中ESSID为无线接入(Access Point)的SSID。
# iwconfig ethX essid ESSID
(5)启动无线网卡:
#ifconfig ethX up
总结:
可以看到Linux 下网卡的ip设置的方法比较灵活,不同的命令可以完成相同的任务。注意由于ip地址是Linux服务器的关键参数所以完成以上操作要有管理员权限。
from archive.is/13svf
--------------------------
 
Linux服务器如何一个网卡绑定多个IP
 

系统:Redhat9
目的:为一个以太网卡配置多个ip地址

    linux操作系统中配置网络接口,一般是通过网络配置工具实现,但实质是修改与网络相关的配置文件起作用,故可直接修改文件达到目的。
   由于发行版本不同,其有自己专用的配置工具,但也有一些通用的配置工具,如ifconfig,ifup,ifdown
查看
#ifconfig      //当前网络接口情况
#ifconfig -a   //主机所有网络接口情况
#ifconfig eth0 //eth0接口情况

配置
1.ifconfig
格式:ifconfig 网络设备 ip地址 hw MAC地址 netwask broadcase地址 … …
(详见ifconfig –help)
例如:#ifconfig eth0 192.168.1.41 broadcase 192.168.1.255 netmask 255.255.255.0
注:用ifconfig为网卡指定ip只是用来调试网络用,并不会更改系统网卡相关的配置文件。

2.rh9网络配置工具netconfig
格式:netconfig -d 网络设备 –ip –hwaddr –netmask ……
(详见netconfig –help)
例如:#netconfig -d eht0 –ip=192.168.1.41 –netmask=255.255.255.0
注:直接修改网络接口相关的配置文件

3.修改网络配置文件
rh中与以太网相关的配置文件位于:/etc/sysconfig/network-scripts目录下,如ifcfg-eth0。可以增加配置文件如ifcfg-eth1来增加新的网络接口。
激活和终止
格式:ifconfig 网络设备 up/down
     或ifup/ifdown 网络设备
例如:#ifconfig eth0 up
虚拟网络接口
即:为一个网卡配置多个ip
与一般配置基本相同,只是一般网络接口是eth0,eth1,…,而虚拟网络接口为:(以eth0为例)eth0:0,eth0:1,eth0:2,…
另外需要注意的是在设置虚拟接口时,每个接口都有不同的物理地址
例如:#netconfig -d eth0:0 –ip=192.168.1.42 –hwaddr=00:11:00:00:B1:05 –netmask=255.255.255.0 –broadcase=192.168.1.255
(eth0:hw是00:11:00:00:B1:04)

在Linux服务器上开启安全的SNMP代理

我们已经介绍了监控宝的服务器监控,http://blog.jiankongbao.com/?p=133,那么如何在监控宝中创建和使用它呢?这篇文章中会有详细的介绍。

我们知道,监控宝使用标准的SNMP协议来为用户提供服务器监控功能,这意味着被监控的服务器上必须运行SNMP代理程序(snmpd),接下来我们将详细介绍如何在Linux服务器上安装、开启Snmp代理,并且进行必要的安全配置,随后我们会在其它文章中介绍Windows服务器的配置方法。

关于SNMP协议的定义和描述,可以浏览RFC1157,这里还描述了SNMP的设计动机和原理,到目前为止,SNMP已经被无数的设备用来作为监控协议,并且工作得非常可靠,至于安全性和必要的安全配置,我们在随后会详细介绍,你完全可以让SNMP代理程序在你的服务器上安全的运行。

在各种Linux分发版中,大多数都已经默认集成了snmpd,比如在suse10中,你可以这样开启snmpd:

suse10:~ # /etc/init.d/snmpd start

如果没有默认安装,你要做的就是自己来编译snmpd,按照下边的步骤,非常简单。

编译、安装以及安全设置

对于Linux平台,我们推荐使用Net-SNMP,它实现了标准的SNMP协议,并且包括了代理程序以及各种SNMP工具。

http://net-snmp.sourceforge.net/

关于Net-SNMP编译、安装、安全设置以及授权IP地址等的详细介绍,请参考我们的Wiki,如下:

http://wiki.jiankongbao.com/doku.php/文档:安全指引#linux_snmp

在监控宝中添加服务器

现在我们来看看如何在监控宝中添加服务器监控,通过新增的导航,你会很容易进入添加服务器的页面,这里分为两部分,首先是填写服务器信息,包括服务器名称和IP地址,以及操作系统类型。
这些都非常简单,之所以要选择操作系统类型,是因为Linux和Windows的机制存在一些差异,所以它们的SNMP信息库会有一些不同,我们需要根据不同的系统来提供相应的监控项目。
72
接下来是SNMP设置,主要是选择不同的SNMP协议,以及填写身份验证信息,前边已经有过详细的介绍,这里你只需要将前边配置的信息如实填写即可。
74
73
填写完后,点击提交按钮,这时候监控宝会使用这些信息来尝试连接你的SNMP监控代理,需要一些时间,这一步非常重要。
76
不妙,如果你填写的信息无法连接到服务器的SNMP代理程序,监控宝会提示你,这时候,请你仔细检查之前介绍的那些配置,以及防火墙策略,也许你没有开放udp161端口。
75
找到问题后再次提交,如果连接成功,则会看到成功页面,如下:
78
然后点击“添加监控项目”,便可以为这台服务器选择监控项目,对于Linux服务器,监控宝目前提供了以下的监控项目,你可以全部勾选,然后提交。
77
然后就等待数据和图表吧,一切就这么简单,如果有疑问或需要帮助,请发邮件到 help (at) jiankongbao.com
 

玩转 Windows 10 中的 Linux 子系统

在今年的 Build 2016 上,微软向全世界介绍了他们还处于 Beta 阶段的 Windows 下的 Linux 子系统(Windows Subsystem for Linux)(WSL),它可以让开发者们在 Windows 10 下通过 Bash shell 运行原生的 Ubuntu 用户态二进制程序。如果你参与了 Windows Insider 计划,你就可以在最新的 Windows 10 年度升级版的 Insider 构建版中体验这个功能了。
Web 开发人员们不用再苦恼所用的 Windows 开发平台上没有合适的 Linux 工具和库了。WSL 是由 Windows 内核团队与 Canonical 合作设计和开发的,可以让 Windows 10 下的开发者们在拥有 Windows 中那些强力支持之外,还能使用 Linux 下丰富的开发环境与工具,而不用启动到另外的操作系统或者使用虚拟机。这绝对是一个“来自开发者,服务开发者”的 Windows 10 特色,它的目的是让开发者们每天的开发工作都变得顺畅而便捷。
在本文中,我会展示给你一些我认为非常有趣的功能,以及告诉你一些可以让你找到更多信息的资源。首先,我会展示 WSL 所集成的那些主要命令(比如 ssh)是如何操作服务器和设备的。其次,我会演示使用 Bash 脚本是如何以简明的方式来自动化执行任务的。其三,我会利用极棒的命令行编译器、一些其它工具以及对 *nix 兼容的能力来玩一个轻量级的古典黑客级游戏: NetHack。最后,我会展示如何使用已有的 Python 脚本和其它来自网上的脚本。
从我的第一台 286 上运行的 Windows 3.0 开始,Windows 就一直是我的主要操作系统和开发环境。不过,我身边也有很多 Linux 服务器和设备。从树莓派和路由器/网关设备这样的物联网设备,到 Minecraft 服务器,它们堆满了我的办公室的每个角落。而我经常要从我的主工作站中去管理和配置这些 Linux 计算机。

管理服务器和设备

我在我的家中运行着一台无显示器的 Ubuntu Minecraft 服务器,这是我去年给我十岁大的儿子的圣诞礼物,但是它已经变成了我的玩具而不是他的(好吧,主要是我的玩具)。我以前在我的 Windows 10 电脑上使用几个客户端来管理它,不过我现在想使用 Windows 中的 Bash 里面的 ssh 命令行来管理它。使用类似 PuTTY 或来自 Cygwin 的 Tera Term 这样的应用当然也可以,但是我想试试真正原生而自然的体验也是一种不错的选择。Cygwin 就像是在披萨店订购的披萨一样,好吃,但是没有那种氛围。
我已经使用 WSL 中的 ssh-keygen 和 ssh-copy-id 设置好了公私密钥对,所以使用 ssh 只需要如下简单输入即可:
$ ssh <username>@<server>
我还为此创建了一个别名,以便更快一些。这是一个标准的 Linux/Bash 功能:
$ alias mc='ssh <user>@<server>'
现在,我要访问我的 Minecraft 服务器只需要在 Windows 10 下的 Bash 中输入“mc”即可。
当然,同样的方法你也可以用于任何 Linux 上的 Web 或数据库服务器上,甚至树莓派或其它的物联网设备也可以。
在终端里面进行 ssh 只是为了方便而已,不过当你在 shell 中工作时,如果还有类似 apt、node、Ruby、Python 等等工具时,你就有了自动化各种工作的可能。

远程脚本

假如说你有一大堆 Linux 服务器和设备,而你要在它们上面执行一个远程命令的话,如果已经配置好公私密钥对,你就可以在 Bash 中直接远程执行命令。
举个例子说,想知道远程服务器自从上次重启后已经运行了多长时间了,你只需要输入:
$ ssh <user>@<server> 'last -x|grep reboot'
ssh 会连接到该服务器并执行 last -x 命令,然后搜索包含“reboot”的一行。我在我的 Ubuntu Minecraft 服务器上运行的结果如下:
reboot   system boot  4.4.0-28-generic Thu Jul  7 08:14   still running
这只是一台服务器,如果你有许多服务器的话,你可以自动化这个过程。我在 WSL 里我的主目录下创建了一个名为 servers.txt 的文件,它包含了一系列 Linux 服务器/设备的名称,每个一行。然后我就可以创建一个脚本来读取这个文件。
在使用了很多年像树莓派这样的设备之后,我已经变成了一个 nano 人(在 VMS 上我是一个 LSEdit 人),下面是我用我喜爱的 nano 编辑器打开的脚本。
当然,你也可以使用 vim 、 emacs 或者其它可以用在 Ubuntu 终端上的编辑器。
该脚本是 Bash 脚本,要执行该脚本,输入:
$ ./foreachserver.sh 'last -x|grep reboot'
它将迭代输出文件中的每个服务器/设备,然后通过 ssh 远程执行该命令。当然,这个例子非常简单,但是你可以像这样把你的本地脚本或其它命令变成远程的。Bash 脚本语言足够丰富,所以你可以使用它来完成你的大多数远程管理任务。你可以用你下载到 WSL 或远程系统中的其它应用来扩展它的使用。
你是否需要在工作中把本地的 Windows 文件或资源用于其它的 Linux 计算机吗?或者,你根本不使用 Linux ?Bash 可以操作本地的 Windows 文件或资源,还是说它就是一个完全独立的环境?

使用 Windows 文件

WSL 系统可以通过 /mnt// 目录(挂载点)来访问你计算机上的文件系统。举个例子,你的 Windows 上的 C: 和 D: 根目录可以在 WSL 中相应地通过 /mnt/c 和 /mnt/d 访问。当你要把你的 Windows 下的项目文件、下载的内容和其它文件用到 Linux/Bash 之中时这很有用。
上图显示的两个目录分别对应于我的计算机上的 SSD 和硬盘:
这是逻辑挂载,所以当你在 shell 中使用类似 mount 这样的命令时它们不会显示。但是它们可以如你预期的那样工作。举个例子,在 Windows 中,我在我的 C 盘根目录下放了一个名为 test.txt 的文件,我可以在 WSL 中如下访问它:
在 Build  Tour 大会期间,我们要确保所有的演示都可以在没有互联网时也能正常工作(你绝不会知道会场的网络是什么样子的) ,所以为了让 Bash/WSL 可以演示 Git 操作,该演示访问的是本地计算机上的 Windows 文件,我在 Windows 上的 C:gitNetHack 下设置一个本地仓库。 要在 WSL 中进行 clone 操作,我执行了如下命令:
$ git –clone file:///mnt/c/git/NetHack
该命令告诉 git 使用 file:// 协议,并 clone 了位于 /mnt/c/git/NetHack 下的仓库。你可以以类似的方式来访问你的 Windows 下的所有文件。
警示:就像在其它终端中一样,如果你不小心的话,你可以在 Bash 中修改/删除 Windows 文件系统中的文件。举个例子,你可以像下面这样来干掉你的 Windows ,假如你有合适的权限的话。
$ rm -rf /mnt/c/  [千万别试!][千万别试!][千万别试!]
我之所以郑重提醒是因为我们很多人都是刚刚接触 Linux 命令,它们不是 Windows 命令。
这种可以让文件系统集成到一起的魔法来自 DrvFs。如果你希望了解该文件系统的更多细节,以及它是如何工作在 WSL 中的,WSL 团队为此写了一篇详细的文章
当然, 文件系统访问只是 WSL 其中的一部分功能而已,许多开发任务还需要通过 HTTP 或其它网络协议访问远程资源。

发起 HTTP 请求

从脚本或命令行而不是从一个编译好的程序或 Web 页面上发起 REST 或其它 HTTP(或 FTP)请求是很有用的。就像在大多数 Linux 发行版一样,WSL 也包括了类似 curl 或 wget 获取资源这样的标准功能,它们可以用来发起 HTTP 或者其它网络请求。举个例子,下面是使用 curl 对 Github 发起 REST 请求来获取我个人的属性信息:
$ curl -i https://api.github.com/users/Psychlist1972
HTTP/1.1 200 OK
Server: GitHub.com
Date: Wed, 13 Jul 2016 02:38:08 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1319
Status: 200 OK
...
{
  "login": "Psychlist1972",
  "avatar_url": "https://avatars.githubusercontent.com/u/1421146?v=3",
  "url": "https://api.github.com/users/Psychlist1972",
  "name": "Pete Brown",
  "company": "Microsoft",
   ...
}
$
你可以用它和 Bash 脚本来创建一个 REST API 的快速测试客户端,也可以用来探测一个 Web 页面或服务器并报告其返回的状态。它用来从网上下载文件也很棒,你可以简单地重定向输出到一个文件而不是在屏幕上显示它:
$ curl -i https://api.github.com/users/Psychlist1972 > pete.json
我也是一个 PowerShell 用户,甚至还使用 Windows 10 MIDI in PowerShell 创建了一些有趣的扩展,也修复过出现在特定的录音硬件设备上的一些文件问题。作为长时间的 .NET 开发者和爱好者,我经常使用和扩展 PowerShell 以满足我的项目需求。但是  PowerShell 并不是一个可以运行所有的那些 Bash 脚本和针对 Linux 的开源工具的地方。我希望以一种最简单、最舒服的方式来完成这些任务,在某种意义上,这意味着我们需要在 Bash 中完成它们。
我已经一掠而过的介绍了 Bash、Bash 脚本以及你可以在 shell 中完成的任务。到目前为止,我谈论的都是有助于开发工作的那些功能。但是在 WSL 中实际的开发和编译工作是怎样的?我在 Build Tour 大会上演示了下面这个部分。

Build Tour 大会上的演示:NetHack

这个夏初,来自微软的讲演者们向大家演示了一些来自 Windows 和微软云上的很酷的开发者新功能。作为其中的一部分,我以一种好玩的方式来演示了 WSL,而且这是一种和开发者们相关的方式。
我个人想要展示使用 git 和一些传统的终端开发工具,我已经写好了 Bash 的演示程序,包括了这些基础的东西(用 Python 和 Ruby 写的“Hello World”),不过我还是想要更有冲击力一些。
我回想起我在大学的时光,那时我们在 Unix(DEC Ultrix 及 SunOS)和 VAX/VMS 之间折腾,Unix 几乎全是命令行环境。在我们学校,绝大多数使用图形工作站的用户只是为了在不同的窗口打开多个终端会话而已,当然,会在桌面背景放上一张超酷的月相图。大部分学生都是使用 VT-220 终端来打开他们的会话(学校离波士顿不远,所以我们有很多 DEC 设备)。
那时,计算机系的学生们主要玩两大游戏:MUD (主要是 lpMUD 和当时刚出的 DikuMUD)和 NetHack。NetHack 和其它的 Roguelikes 类游戏被视为历史上最有影响力的游戏之一,它们是许多现在流行的地牢冒险和角色扮演类游戏的鼻祖。
NetHack 有很长的历史,现在的它包含了来自几十年前的几十万行 *nix 代码,以及后来补充的一些代码。该游戏使用 curses (及其替代品)作为终端交互方式,需要通过 lex、 yacc(或 flex 和 bison)和 cc(或 gcc),以及一堆其它的开发工具构建。
它是由 C 语言编写的,并包括了一些用 Bourne shell 编写的复杂的脚本配置功能。我觉得它是一个体现 WSL 和 Bash on Windows 10 的开发者能力的不错而有趣的方式。由于使用了 curses(在 Linux 和 WSL 中是 libncurses 库),它也可以用来展示 Windows 10 中命令行窗口中的终端模拟能力。
以前,在我们的分时 Ultrix 服务器上从源代码构建 NetHack 要花费掉我们很多时间,而现在我的个人计算机上只需要几分钟就可以搞定。我喜欢这种技术进步。在 Linux 或 WSL 上配置和编译 NetHack 有容易和复杂两种方式。为了节省时间,我们会以容易的方式来进行。

前置需求

首先,更新你的 WSL 环境,确保你的软件是最新的。在安装新的软件包之前,这是一个好的做法。
$ sudo apt update
$ sudo apt upgrade
然后,安装必须的开发工具。最简单的办法就是使用 build-essential 软件包,它包括了 Linux 开发者构建以 C/C++ 开发的软件时所需的绝大部分程序。
$ sudo apt install build-essential
这要花几分钟。如果你想更加深入地了解,你可以分别安装 gcc、gdb、make、flex、bison 以及 NetHack 文档中提到的其它工具。不过如果你是一位开发者,有时候你可能还需要一些其它工具。 build-essential 基本上提供了你所需的工具集。
然后,安装 git。如你所想,很容易:
$ sudo apt install git
就像在 Linux 中一样,你可以添加一个 git 的 PPA 来获取较新的版本,不过这里我们有一个就行了。
最后,我们需要安装 curses(实际上是 ncurses)来进行终端屏幕交互。
$ sudo apt install libncurses-dev
当我们完成这些步骤之后,就可以开始构建 NetHack 了。

构建 NetHack

官方的 NetHack 仓库放在 GitHub 上,首先我们需要把它抓取下来放到我们的主目录里面。
$ cd ~$ git clone http://github.com/NetHack/NetHack
因为 NetHack 支持很多种操作系统,所以我们需要做一些基础配置来告诉它我们使用的是 Linux,并且用开源的 gcc 代替了了 Unix 上 cc 的作用。
如我所提到的,这有好几种办法可以实现。有些人想很周到,将这些配置信息放到了 hints 文件中。相信我,使用 hints 文件会避免遇到该 GitHub 仓库中提到的很多麻烦。在 README 文件和其它文档中并没有着重提到如何使用 hints 文件,我们可以这样做:
$ cd NetHack/sys/unix
$ ./setup.sh hints/linux
这将会设置 Makefile 正确的使用 Linux 下的工具、库及其路径。这个设置脚本很强大,它做了大量的配置工作,很高兴它在 WSL 中工作的也很好。如果你很好奇这个脚本是如何写的,你可以使用你的编辑器打开它一窥究竟。
然后,开始最终的构建:
$ cd ~/NetHack
$ make all
构建完成之后,你需要安装它。这其实就是将可执行文件复制到目标位置:
$ make install
它会安装到你的 ~/nh 文件夹下, NetHack 放在 ~/nh/install/games 目录,名为 nethack。要运行它,切换到该目录(或输入完整路径)并输入:
$ cd ~/nh/install/games
$ nethack
然后,屏幕会清屏并显示你可以玩 NetHack 了。注意,所有的东西都是在这个 Ubuntu Linux 环境中完成的,根本不需要任何 Windows 特有的东西。

玩 NetHack

由于终端游戏的局限性和 NetHack 的复杂性,这里只能一带而过。对于初次接触它的人来说,还有一些神秘的地方,不过我觉得我们程序员们从来不怕挑战未知。
方向键和 vi(vim)中的一样,HJKL 是左、下、上、右。要退出游戏,你可以在地下城顶层找到楼梯出口然后使用它就可以,或者直接按下 CTRL-C 强制退出。
在 NetHack 中, @ 符号代表你自己,每一层都由房间、走廊、门,和向上及向下的楼梯组成。怪物宝箱和物品以各种 ASCII  字符组成,你慢慢就会熟悉它们。为了符合 Roguelikes 游戏规范,并没有存盘功能,你只有一条命。如果你死了就只能重玩,地下城环境是随机生成的,各种物品也是打乱放置的。
NetHack 游戏的目的是在地下城生存,收集金子和物品,尽可能的干掉各种怪物。除了这些目的之外,你就是不断在其中玩来找它们。规则大致遵循“龙与地下城(DnD)”的武器、技能等规则。
下面的 NetHack 截屏上可以看到有三个房间和两个走廊。向上的楼梯在左上角的房间里,我现在在右上角的房间,还有一些宝箱和其它物品。
如果在你的游戏中没有显示颜色,可以创建一个名为 ~/.nethackrc 的文件,并放入如下内容:
OPTIONS=color:true,dark_room:true,menucolors:true
注:如果 ASCII 字符图形不是你的菜,但是你喜欢这种类型的游戏,你可以在微软商店搜索“roguelike”来找到视觉上更好看的这种游戏。
当然,NetHack 很古老了,可能只有特定年龄段的人们喜欢它。不过,构建它用到了大量重要的开发工具和 *nix 操作系统功能,也包括终端模拟功能。从这里可以看到,从 gcc、gdb、make、bison 和 flex 到更现代一些的 git,都在 WSL 里面工作的很好。
如果你想看看 Build Tour 大会上的演示,你可以在 Build Tour 加拿大大会上看到这个讲演。WSL 的这部分演示在 6:20 开始。
希望你能喜欢在 NetHack 地下城中的探险。
C 和 C++ 都很伟大,就像其他的那些经典的开发工具一样。你甚至还可以用普通的 Bash 脚本做到很多。不过,也有很多开发者喜欢用 Python 做为他们的脚本语言。

Python

你可以在网上找到很多 Python 脚本的例子,这意味着 Python 越来越流行,也越来越有用了。当然,大多数情况下这些例子都是运行在 Linux 下的。在过去,这就需要我们有另外一台安装着 Linux 的机器来运行它们,或者使用虚拟机和多引导,否则就需要修改一些东西才能让他们运行在 Windows 下的 Python 环境中。
这是都不是无法解决的问题,但是它会日渐消磨开发人员每天的生活。通过 WSL,不用折腾你就拥有了一个兼容的、具有 Python 功能和 shell 变量的子系统。
要安装最新的 Python 开发版本和 Python 包安装器 pip,在 Bash 中执行如下命令:
$ sudo apt install python-pip python-dev
$ sudo pip install --upgrade pip
现在 Python 安装好了,我要展示给你如何从网上获取一个典型的 Linux 下的 Python 例子并让它直接工作起来。我去 Activestate Python 菜谱站找一个排名第一的 Python 例子。好吧,我走眼了,排名第一的是打印出整数名称的脚本,这看起来没啥意思,所以我选择了第二名:俄罗斯方块。我们每天都能看到 Python 出现在各种地方,所以这次让我们去玩另外一个游戏。
我打开了 nano 编辑器,从 Windows 上的浏览器中打开的页面上复制了这 275 行 Python 代码,然后粘贴到我的 WSL 终端窗口终端中的 nano 中,并保存为 tetris.py ,然后执行它:
$ python tetris.py
它马上就清屏并出现了俄罗斯方块的游戏。同 NetHack 一样,你可以使用同样的 vi 标准的方向键来移动(以前是使用鼠标和 WSAD 键来移动,而右手使用 HJKL 键更方便)。
如我所提到的,你当然可以不用 WSL 就在 Windows 中运行 Python。然而,要想快速简便,不用修改 Linux 下的 Python 代码,只需要简单的复制粘贴代码即可运行,则可以极大的提高开发者的效率。
这是真的。这并不是要替代 Windows 原生的工具,比如 Python、PowerShell、C# 等等,而是当你需要在现代的开发工作流程中快速而有效地完成一些事情时,可以避免种种折腾。
包括 Bash、Python 以及其它所有的 Linux 原生的命令行开发工具,WSL 为我的开发工作提供了所有需要的工具。这不是一个 Linux 服务器,甚至也不是一个完整的客户端,相反,它就是一个可以让我避免每天折腾,让我在 Windows 上开发更有效率、更有快感的一个东西!

重置你的 WSL 环境

随便去试吧,如果你搞坏了你的 WSL 环境,它很容易重新安装。在进行之前,请确保做好了任何重要内容的备份。
C:> lxrun.exe /uninstall /full
C:> lxrun.exe /install

你使用 Bash 和 WSL 的感觉如何?

我们希望 WSL ,特别是 Bash 可以在 Windows 10 中帮你带来更高的效率,减少每天的开发中的折腾。
你对 Windows 10 上的 WSL 怎么看?你喜欢使用它吗?
开发团队做了大量的工作希望让 WSL 成为一个为开发者提供的强大的终端工具。如果你有任何反馈或运行出现问题,我们推荐你查看一下 GitHub 反馈页面,以及 用户之声的反馈和投票站点。我们真的希望听到你的声音。

更多参考与延伸阅读

Linux Shell 编程是一个庞大的话题,在网上有很多这方面的内容。如果你还不够熟悉它们,想要了解更多,可以看看各种 Bash 教程。可以从这一份开始
还有一些其他的参考资料也许对你有用:
哦,当然,要更多的了解 NetHack,请访问 NetHack 主站