0%

字体链接

M$的字体是专有的,有版权的,因此应该使用开源字体。

Windows支持字体链接:当一种字体中不存在某个字时,可以尝试从另一个字体文件中寻找相应的字形。所以只要把当前系统中的中文字体设为”fallback”字体,汉字通常就能正确显示了。方法也很简单,只需创建一个文本文件,如chn_font.reg如下:

1
2
3
4
5
6
7
8
9
10
11
REGEDIT4

\[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink\]
"Lucida Sans Unicode"="wqy-microhei.ttc"
"Microsoft Sans Serif"="wqy-microhei.ttc"
"MS Sans Serif"="wqy-microhei.ttc"
"Tahoma"="wqy-microhei.ttc"
"Tahoma Bold"="wqy-microhei.ttc"
"SimSun"="wqy-microhei.ttc"
"Arial"="wqy-microhei.ttc"
"Arial Black"="wqy-microhei.ttc"

注意请将wqy-microhei.ttc替换为你系统中的字体文件名,如文泉驿正黑是wqy-zenhei.ttc(请在/usr/share/fonts及其子文件夹中寻找相应字体文件)。
MacOSX上可以使用PingFang.ttc。

如果想使用其它字体,也可直接将相应的ttf或ttc文件复制到~/.wine/drive_c/windows/Fonts/,再用其文件名替换上面的wqy-zenhei.ttc即可。

最后,打开注册表wine regedit,导入上面的注册表文件即可。中文应该都能完美显示了(包括Picasa中文显示为方框、软件安装程序汉字无法显示等问题均可被解决)。

1
$ wine regedit chn_font.reg

注意上面的注册表键值只能使用字体的文件名,而不能使用字体名,这是由“字体链接”本身的特性决定的。

References:
[1]Wine的中文显示与字体设置

模板单元文件和实例单元文件

使用模板,一个模板单元(unit)文件可以创建多个实例化的单元文件,从而简化系统配置。

模板单元文件的文件名中包含一个@符号,@位于单元基本文件名和扩展名之间,比如:

1
example@.service

当从模板单元文件创建实例单元文件时,在@符号和单元扩展名(包括符号.)之前加入实例名,比如:

1
example@instance1.service

表明实例单元文件example@instance1.service实例化自模板单元文件example@.service,其实例名为instance1

实例单元文件一般是模板单元文件的一个符号链接,符号链接命中包含实例名,systemd就会传递实例名给模板单元文件。

在相应的target中创建实例单元文件符号链接之后,需要运行一下命令将其装载:

1
$ sudo systemctl daemon-reload

模板标识符/参数

模板单元文件中可以使用一些标识符,当被实例化为实例单元文件并运行时,systemd会将标识符的实际值传递给对应的标识符,比如在模板单元文件中是用%i,实际运行实例单元文件时,会将实例名传递给%i标识符。

有以下可用的标识符:

%n: Anywhere where this appears in a template file, the full resulting unit name will be inserted.
%N: This is the same as the above, but any escaping, such as those present in file path patterns, will be reversed.
%p: This references the unit name prefix. This is the portion of the unit name that comes before the @ symbol.
%P: This is the same as above, but with any escaping reversed.
%i: This references the instance name, which is the identifier following the @ in the instance unit. This is one of the most commonly used specifiers because it will be guaranteed to be dynamic. The use of this identifier encourages the use of configuration significant identifiers. For example, the port that the service will be run at can be used as the instance identifier and the template can use this specifier to set up the port specification.
%I: This specifier is the same as the above, but with any escaping reversed.
%f: This will be replaced with the unescaped instance name or the prefix name, prepended with a /.
%c: This will indicate the control group of the unit, with the standard parent hierarchy of /sys/fs/cgroup/ssytemd/ removed.
%u: The name of the user configured to run the unit.
%U: The same as above, but as a numeric UID instead of name.
%H: The host name of the system that is running the unit.
%%: This is used to insert a literal percentage sign.

References:
[1] Understanding Systemd Units and Unit Files

1
2
3
4
5
6
7
$ git clone https://github.com/shadowsocksrr/shadowsocksr-libev
$ cd shadowsocksr-libev
$ sudo apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev \\
gawk debhelper dh-systemd init-system-helpers pkg-config asciidoc xmlto apg libpcre3-dev
$ dpkg-buildpackage -b -us -uc -i
$ cd ..
$ sudo dpkg -i shadowsocks-libev*.deb

可以单独阻止个别软件包在执行update和dist-update命令时进行更新,也就是不让这些包从源里更新。

dpkg维护软件包的状态,分别有以下几种状态:

unknown – 用户并没描述他想对软件包进行什么操作。
install – 用户希望对软件包进行安装或升级。
remove – 用户希望删除软件包,但不想删除任何配置文件。
purge – 用户希望完全删除软件包,包括配置文件。
hold – 用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。

只要将软件包foobar的状态修改为hold就可以阻止更新:

1
echo foobar hold sudo dpkg --set-selections

如果要恢复软件包foobar的更新,只要将状态修改为install就可以了:

1
echo foobar install sudo dpkg --set-selections

===
[erq]

因为种种原因,自备机房联通和移动双物理链路接入互联网访问,联通线路经常挂掉,影响互联网访问,使用NQA(network quality analyzer)+track可以根据物理链路是否有效来自动选择静态默认路由。

两条默认路由的preference是不同的,网通链路优先,当两条链路都有效时,默认路由走联通链路,当联通链路失效时,联通默认路由自动被禁止,从而默认路由走移动链路。

配置步骤
启用nqa,默认是启动状态

1
nqa agent enable

1、配置nqa自动侦测两条物理链路
网通链路nqa侦测组(test group):

1
2
3
4
5
6
7
8
9
#
nqa entry admin wangtong #添加nqa侦测项目
type icmp-echo #配置测试例类型为ICMP-echo并进入测试类型视图
  destination ip 网通网关ip #配置测试操作的目的IP地址,如果网关开启了防ping功能,是ping不通的,必须设置其他一个可以ping通的地址
  next-hop 网通网关ip #配置IP报文的下一跳IP地址,即网关的ip,若destination设的是网关ip,可以不配置,若destination不是网关ip,则必须配置
  probe count 3 #配置一次NQA测试中进行探测的次数,默认为1,此处也可以不设置
  probe timeout 1000 #配置NQA探测超时时间,默认为3000ms,可以不设置,用默认的
  frequency 1000 #测试频率为1000ms既测试组连续两次测试开始时间的时间间隔为1秒,最好设置下
  reaction 2 checked-element probe-fail threshold-type consecutive 3 action-type trigger-only #建立联动项2,既如果连续测试3次失败则触发相关动作。每个测试组可以有多条reaction,分别指定不同的编号即可。

移动链路nqa侦测组(test group):

1
2
3
4
5
6
7
8
9
#
nqa entry admin yidong #添加nqa侦测项目
type icmp-echo #配置测试例类型为ICMP-echo并进入测试类型视图
  destination ip 移动网关ip #配置测试操作的目的IP地址,如果网关开启了防ping功能,是ping不通的,必须设置其他一个可以ping通的地址
  next-hop 移动网关ip #配置IP报文的下一跳IP地址,即网关的ip,若destination设的是网关ip,可以不配置,若destination不是网关ip,则必须配置
  probe count 3 #配置一次NQA测试中进行探测的次数,默认为1,此处也可以不设置
  probe timeout 1000 #配置NQA探测超时时间,默认为3000ms,可以不设置,用默认的
  frequency 1000 #测试频率为1000ms既测试组连续两次测试开始时间的时间间隔为1秒,最好设置下
  reaction 1 checked-element probe-fail threshold-type consecutive 3 action-type trigger-only #建立联动项1,既如果连续测试3次失败则触发相关动作

每个nqa侦测可以绑定多个reaction动作,比如reaction 1, reaction 2, reaction 3,…

2、创建侦测项目中reaction关联的track

1
2
track 1 nqa entry admin yidong reaction 1
track 2 nqa entry admin wangtong reaction 2

3、启动nqa侦测组

1
2
nqa schedule admin wangtong start-time now lifetime forever #启动网通链路探测组
nqa schedule admin yidong start-time now lifetime forever #启动移动链路探测组

可以用undo来停止侦测组

1
2
undo nqa schedule admin wangtong #停止网通链路侦测组
undo nqa schedule admin yidong #停止移动链路侦测组

4、设置track联动的静态默认路由

1
2
ip route-static 0.0.0.0 0.0.0.0 222.132.*.* track 2 #联通链路,默认preferece为60,低于80,所以优先使用联通链路
ip route-static 0.0.0.0 0.0.0.0 218.201.*.* track 1 preference 80 #移动链路,备份线路

查看状态

查看track

1
2
3
4
5
6
7
8
9
10
11
12
13
display track all #或者查看指定的track: display track 1
Track ID: 1
Status: Positive
Notification delay: Positive 0, Negative 0 (in seconds)
Reference object:
NQA entry: admin yidong
Reaction: 1
Track ID: 2
Status: Negative
Notification delay: Positive 0, Negative 0 (in seconds)
Reference object:
NQA entry: admin wangtong
Reaction: 2

可以看到网通链路挂了,移动链路是有效的。

查看nqa统计

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
display nqa statistics
NQA entry(admin admin, tag yidong) test statistics:
NO. : 1
Destination IP address: 218.201.*.*
Start time: 2000-10-16 15:00:37.9
Life time: 3520
Send operation times: 33633 Receive response times: 33628
Min/Max/Average round trip time: 1/5/1
Square-Sum of round trip time: 33773
Extended results:
Packet lost in test: 0%
Failures due to timeout: 5
Failures due to disconnect: 0
Failures due to no connection: 0
Failures due to sequence error: 0
Failures due to internal error: 0
Failures due to other errors: 0
Packet(s) arrived late: 0
NQA entry(admin admin, tag wangtong) test statistics:
NO. : 1
Destination IP address: 222.132.*.*
Start time: 2000-10-16 15:00:07.6
Life time: 3549
Send operation times: 1099 Receive response times: 0
Min/Max/Average round trip time: 0/0/0
Square-Sum of round trip time: 0
Extended results:
Packet lost in test: 100%
Failures due to timeout: 1099
Failures due to disconnect: 0
Failures due to no connection: 0
Failures due to sequence error: 0
Failures due to internal error: 0
Failures due to other errors: 0
Packet(s) arrived late: 0

可以看到网通链路是无效的。

查看当前路由表

1
2
3
4
5
6
7
8
9
display ip routing-table
Routing Tables: Public
Destinations : 419 Routes : 419

Destination/Mask Proto Pre Cost NextHop Interface

0.0.0.0/0 Static 80 0 218.201.*.* Vlan200
2.0.0.0/8 Direct 0 0 2.0.0.59 Vlan300

可以看到当前默认路由走的是移动链路。

References:
[1]H3C防火墙/路由器通过Track实现双线接入的链路备份
[2]H3C NQA Configuration

从头顺序播放:

1
$ mplayer -cdrom-device /dev/sr0 cdda:// -cache 5000

播放指定音轨:

1
$ mplayer -cdrom-device /dev/sr0 cdda://5 -cache 5000

播放部分音轨:

1
$ mplayer -cdrom-device /dev/sr0 cdda://6-13 -cache 5000

一定要加cache参数,因为读取CDROM是很慢的,不缓存会爆音。

References:
[1] Mplayer: Play Audio CD Using Linux Command Line

安装certbot

stretch源里的版本太低,因此需要配置stretch backports源,然后用以下命令安装

1
$ sudo apt-get install certbot -t stretch-backports

或者直接去官方下载安装使用:

1
2
3
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x ./certbot-auto
$ ./certbot-auto --help

申请统配证书

1
2
3
4
$ sudo certbot certonly \\
--server https://acme-v02.api.letsencrypt.org/directory \\
--manual --preferred-challenges dns \\
-d *.openwares.net

或者如果手工安装certbot的话请用certbot-auto命令
这里只是申请证书,并不会自动安装,需要手工配置应用服务器,那些自动部署证书的插件并不是很好用。

要申请wildcard子域统配证书,certbot必须为0.22.0或以上版本,而且要使用ACMEv2服务器申请证书。

然后会有一通问题,看清楚回答即可,后面会要求为申请证书的域名配置TXT记录,类似如下:

1
2
3
4
5
6
Please deploy a DNS TXT record under the name
_acme-challenge.openwares.net with the following value:

ZvjRBkEYcMVZSEslsuj*******************

Before continuing, verify the record is deployed.

按照要求配置域名TXT记录,确认TXT记录生效

1
2
$ host -t TXT _acme-challenge.openwares.net
_acme-challenge.openwares.net descriptive text "ZvjRBkEYcMVZSEslsu************"

TXT记录生效可能稍微会需要一些时间,确认生效后继续,如果通过验证则会生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/openwares.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/openwares.net/privkey.pem
Your cert will expire on 2018-08-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

现在已经有了wildcard证书了,将证书配置到你的web服务器中就ok了。

证书的有效期只有三个月,距离失效期30日内,可以简单的执行以下命令来更新证书:

1
$ sudo certbot renew

===
[erq]

ubuntu 16.04.4
amdgpu-pro 17.40-492261

before install amdgpu-pro
UEFI:
peg0 -> gen2
peg1 -> gen2
pci latency time -> 96
above 4G memory -> disable
hd audio controller -> disable
intel serial i/o -> disable
legacy usb support -> enable
fastboot -> disable
boot mode -> legacy + uefi
comm port -> disable
LPT port -> disable

install amdgpu-pro
$> sudo update-pciids

reboot

UEFI:
above 4G memory -> enable

CPPFLAGS是C/C++ PreProcessor预处理器选项,适用于C和C++语言。CFLAGS是适用于C语言的编译器选项,而CXXFLAGS是适用于C++的编译器选项。

因为MacOS安全与权限的问题,运行gdb需要用证书签名gdb,好麻烦。所以使用docker运行debian stretch容器,执行gdb时出现类似错误:

1
warning: Error disabling address space randomization: Operation not permitted

那么在运行容器的时候添如下参数就可以了:

1
--security-opt seccomp=unconfined

如果需要ptrace,可以添加如下参数:

1
--cap-add=SYS_PTRACE