Python3 logging用法

1
2
3
4
5
6
7
8
9
10
11
12
13
import logging


log = logging.getLogger()
log.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('[%(threadName)s] %(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log.addHandler(handler)

log.info("Hello %s", "world)

PostGIS快速入门

安装

1
CREATE EXTENSION postgis

添加列

1
2
ALTER TABLE your_table ADD COLUMN geom geometry(Point, 4326);
UPDATE your_table SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326);

半径查找

1
2
3
4
5
6
7
8
9
10
11
12
SELECT lat,
lon,
location,
cnt
FROM ggg
WHERE 1 = 1
AND cnt > 1
AND ST_DWithin(
ggg.geom,
ST_MakePoint(42.9764, 47.5024)::GEOGRAPHY,
200000
);

参考:

https://live.osgeo.org/en/quickstart/postgis_quickstart.html
https://gis.stackexchange.com/questions/145007/creating-geometry-from-lat-lon-in-table-using-postgis

Openwrt环境下某2ray `too many open files`问题解决

too many open files大部分情况下是由于配置错误引起的。如果配置没有问题,可以在某2ray的启动脚本里加上这一句:

1
2
ulimit -SHn 65535
/usr/bin/2ray -config config.json

启动后可以用这个命令来看是否生效:

1
cat /proc/{2AY进程id}/limits

参考:

Kubernetes Create User

Create User

kubectl apply -f eks-admin-service-account.yaml

1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
name: eks-admin
namespace: kube-system

kubectl apply -f eks-admin-cluster-role-binding.yaml

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: eks-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: eks-admin
namespace: kube-system

Get certificate

1
kubectl get secret default-token-cvn2d -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

Get Token

1
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

Test If the role works

Setup credential

1
2
3
4
kubectl config set-cluster kubernetes --certificate-authority=ca.crt --server=$K8S_SERVER_URL
kubectl config set-credentials $K8S_USERNAME --token=$K8S_USER_TOKEN
kubectl config set-context aws --cluster=kubernetes --namespace=$K8S_NAMESPACE --user=$K8S_USERNAME
kubectl config use-context aws --user=$K8S_USERNAME

Test command

1
kubectl get pod

Ref

Openwrt下dnsmasq配置

配置文件

dnsmasq.conf

1
2
3
4
5
6
7
conf-dir=/root/dnsmasq.d/
//设置DNS缓存时间
min-cache-ttl=3600
//缓存数量
cache-size=1024
//重新加载后清空缓存
clear-on-reload

配置说明

转发域名解析

解析海外域名需要将dns解析请求转发到上游的无污染的dns服务器,配置文件 /root/dnsmas.d/not_china.conf

1
2
server=/google.com/127.0.0.1#5353
...

国内域名直接用国内的dns服务器,china.conf

1
2
server=/baidu.com/221.6.4.66
...

缓存域名解析

海外域名的解析时间一般会比较长,频繁的去请求上游DNS服务器既浪费时间又无意义,可以通过设置dnsmasq缓存来加快解析,减少请求上游DNS服务器的频率。

1
2
3
4
//设置DNS缓存时间
min-cache-ttl=3600
//缓存数量,最多10000
cache-size=9999

如果你不知道缓存数量应该设置为多少,可以通过下面命令查看dnsmasq的域名请求数作为参考:

killall -s USR1 dnsmasq

关于 no-resolv 配置

在不打开no-resolv的情况下,dnsmasq会使用ISP提供的dns服务器作为默认的服务器,比如 xx.com域名既不在 not_china.conf又不在china.conf中,dnsmasq就会用ISP的dns服务器来解析这个域名。

如果打开了no-resolv,同时又不设置resolv-file的话,dnsmasq就会找不到默认的dns服务器来解析xx.com域名,如果你的代理服务器正好属于这类域名,将导致你无法连接到你的服务器。

Openwrt下无法访问medium.com的解决办法

家里路由器刷了Openwrt系统,在访问medium.com ,nytimes.com等网站时,会时不时出现连接重置错误,今天花时间研究了下,终于解决了这个困扰我很久的问题,在此记录下。

问题描述

  • Chrome访问这些网站是会提示ERR_CONNECTION_RESET错误,反复刷新多次后又能打开网站。
  • wget -v命令显示返回了ipv6地址并且会提示无法创建SSL连接错误。

问题原因

问题就出在ipv6上,openwrt默认会打开ipv6地址分配,这会导致电脑被分配到了一个ipv6地址,而chrome,safari在本机有ipv6的情况下,会优先访问这些网站的ipv6的地址,而路由器上的iptables只会对ipv4包进行转发,故访问这些网站的ipv6地址是无法被代理的。

解决办法

方法1

关闭路由器ipv6地址分配,这样在没有ipv6地址的情况下会访问这些网站的ipv4地址,这样就可以被代理到了。

方法2:

添加ip6tables规则,对ipv6也进行转发(没有尝试过)

参考

Bitbucket pipeline传递文件内容变量

Bitbucket pipeline可以通过Repository variables来传递变量,但是如果变量包含一些特殊字符比如换行符,bitbucket就不能很好的处理,对于这种情况我们可以将变量用base64编码一下,在pipeline中再解码就可以解决这问题了。

1
2
3
4
cat file.txt | base64

// in pipeline file
echo ${YOUR_ENV} | base64 -d > file.txt