0%

问题

使用 brew升级 openssl 后打开 zsh shell 后遇到下面报错:

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
ERROR:root:code for hash md5 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type md5
ERROR:root:code for hash sha1 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha1
ERROR:root:code for hash sha224 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha224
ERROR:root:code for hash sha256 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha256
ERROR:root:code for hash sha384 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha384
ERROR:root:code for hash sha512 was not found.
Traceback (most recent call last):
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha512

解决方案

1
$ brew reinstall python@2

如果其他版本的 Python 也出现无法使用的情况请重新安装一次。例如使用 pyenv 安装的 python 需要使用下列命令重新安装:

1
pyenv install -f 3.6.3

参考

  1. hash md5 error on Mac · Issue #540 · wting/autojump · GitHub
  2. python - ERROR:root:code for hash md5 was not found - not able to use any hg mercurial commands - Stack Overflow

安装依赖

  • Ubuntu/Debian:
    1
    2
    3
    $ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
    libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
    xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
  • Fedora/CentOS/RHEL(aws ec2):
    1
    2
    $ sudo yum install @development zlib-devel bzip2 bzip2-devel readline-devel sqlite \
    sqlite-devel openssl-devel xz xz-devel libffi-devel findutils

下载 Python3.8 源码包

1
$ curl -O https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz

编译安装 Python3.8

首先解压源码包

1
$ tar -Jxvf Python-3.8.1.tar.xz

编译安装

1
2
3
$ ./configure --prefix=/usr/local/python3 --enable-optimizations
$ make
$ make install

注:--enable-optimizations 配置项用于提高 Python 安装后的性能,使用会导致编译速度稍慢

添加软连接

1
2
$ ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
$ ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

命令行输入 python3 -V 查看是否安装成功。

注意

  1. 本文是以 Python3.8.1 为例,如果安装其他版本可参考更改文中的 Python 下载地址,相关命令也需按需更改。
  2. 文中使用的命令如果出现权限不够请自行加上 sudo

参考

  1. Common build problems · pyenv/pyenv Wiki · GitHub
  2. CentOS 7 下 安装 Python3.7 - 个人文章 - SegmentFault 思否

光猫

光网络终端(英语:Optical Network Terminals,俗称光猫或光 modem),是指通过光纤介质进行传输,将光信号调制解调为其他协议信号的网络设备。光猫设备作为大型局域网、城域网和广域网的中继传输设备。

光猫的主要功能为信号转换,它的后端接口除了连接电脑,还可以连接电视或电话。

路由器

路由器(英语:Router,又称路径器)是一种电讯网络设备,提供路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host 到 host 之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在 OSI 模型的第三层——即网络层,例如网际协议(IP)。

阅读全文 »

  1. 下载 libsynophoto-plugin-detection.so 文件
  2. SSH 登录群晖,并登录 root 账号
  3. 备份原文件
    1
    $ mv /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so.bak
  4. 将刚刚下载的文件放到 /var/packages/SynologyMoments/target/usr/lib/ 路径下
  5. 重启 Moments 并重新创建索引。

注: 修复 bug 的 libsynophoto-plugin-detection.so 文件来源于 1.2.1-0646 版本的 Moments

参考

  1. Fix the problem of moments 1.3.x face recognition NOT work - Synology Packages - XPEnology Community

前言

在公司科学上网使用谷歌经常出现很长一段时间访问不了,严重影响工作效率,没办法只能自己搭建一个镜像网站。

正文

环境

  • 机房:搬瓦工
  • 系统:Ubuntu 18.04

安装 nginx

1
$ sudo apt install nginx

增加 nginx 配置

/etc/nginx/sites-enabled 文件夹内新增 google.conf 配置文件,配置文件内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
server_name www.example.com;

location / {
proxy_pass https://www.google.com/;

proxy_redirect https://www.google.com/ /;
proxy_cookie_domain google.com www.example.com;

proxy_set_header User-Agent $http_user_agent;
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
# 这里设置cookie,这里是别人给出的一段,必要时请放上适合你自己的cookie
# 设置这个可以避免一些情况下的302跳转,如果google服务器返回302 redirect,那么浏览器被跳转到google自己的域名,那就没的玩了

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

subs_filter http://www.google.com http://www.example.com;
subs_filter https://www.google.com http://www.example.com;
# 这里替换网页中的链接,因为我们的镜像站是http的,所以上面顺便把协议也一起替换了
}
}

注:请手动更改配置中的 www.example.com 为自己的域名地址

载入配置

使用下列命令重新载入配置

1
$ nginx -s reload

添加 DNS 解析记录

将自己的域名添加一条指向该台服务器 IP 的 DNS 解析记录,访问域名即可实现访问谷歌。

增加 Basic Auth 认证

如果不想自己的谷歌镜像被别人乱用,可以增加 Basic Auth 来限制其他人使用。

生成密码

使用下列命令生成密码:

1
$ printf "your_username:$(openssl passwd -crypt your_password)\n" >> /etc/nginx/conf.d/passwd

配置 Nginx

用 vim 修改刚刚的配置文件

1
$ vim /etc/nginx/sites-enabled/google.conf

增加下列内容

1
2
3
4
5
6
7
8
...

location / {
auth_basic "Hello World";
auth_basic_user_file conf.d/passwd;

proxy_pass https://www.google.com/;
...

然后 nginx -s reload 重启 Nginx 生效。

参考

  1. Nginx 搭建 Google 镜像站
  2. 为 Nginx 添加 HTTP 基本认证(HTTP Basic Authentication)

前言

家里用蜗牛星际组装了一个黑群晖,之前用 Zerotier-one 做内网穿透从外网连接到群晖,后来发现 Zertier-one 的 P2P 的成功率很低,速度很慢,看了一下光猫发现宽带有公网 IP,于是更换光猫为桥接模式,使用路由器拨号上网,路由器做端口转发,直接通过公网 IP 连接群晖,在此记录一下 中兴 ZXHN F677V2 光猫改桥接的方法。Ps: 淘宝要几十块,穷就自己动手啦 : )

教程

  1. 连接路由器的网络,访问 http://192.168.1.1/cu.html

  2. 输入超级管理员密码进入超级管理员后台,密码默认为:CUAdmin(Ps: 我是打装宽带的师傅电话要的,不对的话可以问师傅要);

  3. 在基本配置中选择上行线路配置,记录名为 x_INTERNET_R_VID_y 原本 PPPoE 模式中的配置信息,特别是 VLAN ID 值(Ps: x和y的值每个人可能不一样)

  4. 添加一个新的 Bridge 模式的连接,除了模式之前其他的配置设置为和之前 PPPoE 模式相同,切记 VLAN ID 值一定要相同;

  5. 删除原来的两个连接,一个是 x_TR069_R_VID_y,一个是 x_INTERNET_R_VID_y

  6. 路由器使用原本的宽带账号密码拨号上网即可;

  7. 如果拨号后连接不成功,可以关闭光猫几分钟再开启进行尝试。

参考

  1. [求助] 联通光猫 ZXHN F477V2 桥接问题

本文转载于:Python的Buffer机制

环境准备

Python版本: 3.7.1(3.7以上版本)
清空 PYTHONUNBUFFERED 环境变量(默认是空的,不过以防万一还是清空下)

cmd 清空

1
set PYTHONUNBUFFERED=""

powershell 清空

1
$env:PYTHONUNBUFFERED=""

bash 清空

1
export PYTHONUNBUFFERED=""

将下面内容保存到 test.py,执行下面的语句

1
2
3
4
5
import sys
sys.stdout.write("stdout1 ")
sys.stderr.write("stderr1 ")
sys.stdout.write("stdout2 ")
sys.stderr.write("stderr2 ")

执行 python test.py, 输出 stderr1 stderr2 stdout1 stdout2
执行 python -u test.py, 输出 stdout1 stderr1 stdout2 stderr2

阅读全文 »

新脚本已支持 DSM 6.2.4-25556 VideoStation 2.4.10 - 1632 不需要卸载Moments 和Advanced Media Extensions,请先用卸载命令卸载老的再重新安装一次就可以了,试过的同学请反馈一下!

前言

蜗牛星际装了黑群晖,下了几部蓝光电影,播放的时候确显示“不支持当前所选音频的文件格式,因此无法播放视频。请尝试其它音轨,确定其是否支持”。经过查询得知这两个音轨是需要授权使用的,群晖应该没有给授权费,所以在后续的 Video Station 版本中禁用了这些音轨。

阅读全文 »

输入 URL

以访问”baidu.com”为例,当你按下“b”键,浏览器接收到这个消息之后,会触发自动完成机制。浏览器根据自己的算法,以及你是否处于隐私浏览模式,会在浏览器的地址框下方给出输入建议。大部分算法会优先考虑根据你的搜索历史和书签等内容给出建议。

检测 URL

  • 第一步是浏览器对用户输入的网址做初步的格式化检查。
    如果输入的 URL 是 bai du.com 或者 bai@du.com 这些为不正确的 URL,当协议或主机名不合法时,浏览器会将地址栏中输入的文字传给默认的搜索引擎。

转换非 ASCII 的 Unicode 字符

  • 浏览器检查输入是否含有不是 a-z, A-Z,0-9, - 或者 . 的字符
  • 这里 URL 是 baidu.com ,所以没有非ASCII的字符;如果有的话,浏览器会对主机名部分使用 Punycode 编码

检查 HSTS 列表

  • 浏览器检查自带的“预加载 HSTS(HTTP严格传输安全)”列表,这个列表里包含了哪些请求浏览器只使用HTTPS进行连接的网站
  • 如果网站在这个列表里,浏览器会使用 HTTPS 而不是 HTTP 协议,否则,最初的请求会使用HTTP协议发送
  • 注意,一个网站哪怕不在 HSTS 列表里,也可以要求浏览器对自己使用 HSTS 政策进行访问。浏览器向网站发出第一个 HTTP 请求之后,网站会返回浏览器一个响应,请求浏览器只使用 HTTPS 发送请求。然而,就是这第一个 HTTP 请求,却可能会使用户受到 downgrade attack 的威胁(参考:HTTPS 协议降级攻击原理),这也是为什么现代浏览器都预置了 HSTS 列表。
阅读全文 »