清理kubernetes中未正常退出的pod
长时间运行的k8s节点可能会存在某些pod不自动退出,一直处于Terminating
的状态
于是我们可以用这个脚本定时进行清理
1 | #!/bin/bash |
长时间运行的k8s节点可能会存在某些pod不自动退出,一直处于Terminating
的状态
于是我们可以用这个脚本定时进行清理
1 | #!/bin/bash |
[TOC]
故事太长,可以直接看这里 解决
昨天下午,突然有同事说OA打不开了,打开页面一看出现如下错误:
1 | 500 Servlet Exception |
内心中第一反应是证书的问题,于是赶紧上cas服务器查看日志,一切正常😵
然后上OA的服务器,将证书导入,重启服务,该是什么错还是什么错。。。
上谷歌一查,应该是匹配不到证书里的DNS名,但是确实是有的呀。
由于还有其他java系统接入了CAS登录,都是正常的,于是开始怀疑是OA那台的有问题,开始查看是不是有人最近改动过什么
然鹅并没有。。。
然后查看OA的日志(用的Resin中间件。。。
发现如下错误:
1 | [17:00:15.288] {http--8080-6$1533061820} java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching auth.corp.flamingo-inc.com found. |
开始怀疑是我写的AuthenticationFilter的锅,于是用了个新版本的cas-client-core,依然不行
开始升级jdk,由于是windows,直接安装的exe,然后改了启动脚本里面的JAVA_HOME,重启依然发现不行。。。 (((φ(◎ロ◎;)φ)))
于是暂时回退到了没有用CAS接入的版本,下班了。。。
今天回来不甘心啊,继续尝试解决
既然证书找不到xxx.com,那我换台nginx直接写host试试?
更新了一下测服nginx的证书,OA主机指定测服nginx ip
然后!!!! 可以了!!!! 😭
然后跟同事调试了一会,发现他昨天下午添加了一个域名abc.com,然后导致了default_server不是adc.com了。。。
更新一下jdk就可以了(摊手),OA用的是jdk1.6,jdk1.6旧版本不支持SNI,至于什么是SNI等,看这里 https://github.com/ditunes/blog/issues/13
之前没成功是因为windows的服务里面写死了jdk的路径。。。
这里用的 https://github.com/solusipse/fiche 的pastebin服务端,功能不多但是贴一些代码或者日志足够了
fiche将贴的内容保存为文件,然后用nginx显示,如下:1
2
3
4
5
6
7
8
9
10server {
listen 80;
server_name mysite.com www.mysite.com;
charset utf-8;
location / {
root /home/www/code/;
index index.txt index.html;
}
}
这样显示出来的文本在行数多的时候就看瞎眼了 @_@
我们可以用openresty将要显示的文本提前拼凑成html,html中用google的code prettify格式化处理。
对于用curl请求的我们不做处理,直接返回纯文本。
lua代码如下:
1 | local headers = ngx.req.get_headers() |
nginx 配置如下:1
2
3
4
5
6
7
8
9server {
listen 80;
server_name mysite.com www.mysite.com;
charset utf-8;
location / {
default_type text/html;
content_by_lua_file "/usr/local/openresty/scripts/fiche.lua";
}
}
代码还不完善,可能存在一些bug,欢迎提出
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
Openresty解决了nginx不能很好的添加一些逻辑判断的痛点,而且又不失性能。
代码简单到不能再简单了,就三行
1 | local ip = ngx.var.remote_addr |
1 | ... |
1 | server |
接上一篇 https://birdzhang.xyz/2018/05/15/Java%E6%94%B9%E5%86%99HttpServletRequest%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0/ ,这里说一下cas的坑(这里的cas是3.5版本)
虽然cas有CAS Authentication Filter,但是这个只是根据请求的uri过滤的,那么这里就出现了一个奇怪的bug
即使我在excludePaths
里面添加了/test1/
,但是当请求地址为/test1/123?ticket=123
的时候,还是会去cas服务器验证!!!
我们来看代码:
1 | package com.birdzhang.demo.check; |
可以看到在uri匹配到excludepath之后会走filterChain.doFilter(request, response);
,由于我们并没有对filterChain做什么修改,所以最终还是跑到cas那里去了
修改后的代码如下:
1 | package com.birdzhang.plugin; |
为什么会有这个需求呢? 因为被 cas 的AuthenticationFilter
坑了
下一篇再说一下AuthenticationFilter
的坑,这里主要说修改请求的参数
代码是从网上找的,找不到具体来源了,直接贴代码吧
1 | package com.birdzhang.plugin; |
使用:
1 | Map<String, String[]> extraParams = new HashMap<String, String[]>(); |
完美的将ticket
参数替换为token
参数
https://blog.yoitsu.moe/category/sailfish.html
需要先配置一下hadk的环境变量,一共三个文件,可以参考这里: https://github.com/CancroSailors/sailfish-build-environment
然后source ~/.hadk.env
一下
sudo apt-get install git
1 | git config --global user.name "Your Name" |
1 | sudo mkdir -p $ANDROID_ROOT |
1 | mkdir $ANDROID_ROOT/.repo/local_manifests |
repo sync --fetch-submodules
如果你要求快,可以用 repo sync --fetch-submodules -c --no-tags --no-clone-bundle
,这样只会拉取当前要用的代码,但是不方便后面的修改提交
出错就多同步几次
参见官方教程: https://sailfishos.org/wiki/Platform_SDK_Installation
安装Platform SDK
1 | export PLATFORM_SDK_ROOT=/srv/mer |
另开一个终端,输入sfossdk
,进入mer下
安装targets,官方教程:https://sailfishos.org/wiki/Platform_SDK_Target_Installation
其实就是执行下面的命令,要下载这两个包,过程有些慢
(2019-06-13更新,修复链接地址为最新的)
1 | sdk-assistant create xiaomi-vince-latest http://releases.sailfishos.org/sdk/targets/Sailfish_OS-latest-Sailfish_SDK_Tooling-i486.tar.7z |
更新到最新(Update to latest)1
2
3sudo ssu re x.y.z.ab
sudo zypper ref
sudo zypper dup
安装打包的工具
1 | sudo zypper in android-tools createrepo_c |
文件在hybris/hybris-boot/fixup-mountpoints
,添加你的设备的,这里是vince。
adb到手机上,输入ls -l /dev/block/platform/*/by-name/
, 获取分区信息,或者其他路径的,HADK里面有写
1 | cd $ANDROID_ROOT/external/droidmedia |
1 | cd $ANDROID_ROOT |
期间可能会报错,谷歌搜一下
1 | cd $ANDROID_ROOT |
出现WARNING或者ERROR,将提示的加入到你的defconfig中,我的在kernel/xiaomi/vince/arch/arm64/configs/vince_defconfig
中
然后执行make hybris-root
后重新验证。没有出现ERROR
后可以执行make hybris-recovery
再开一个终端(我们这里称终端2),输入sfossdk
,进入mer打包环境下
1 | cd $ANDROID_ROOT |
> 如果你的机器是32位的话那么下面的命令去掉_32
,下面的也一样
在终端1中1
make -j$(nproc --all) $(external/droidmedia/detect_build_targets.sh $PORT_ARCH $(gettargetarch))
在终端2中
1 | DROIDMEDIA_VERSION=$(git --git-dir external/droidmedia/.git describe --tags | sed \ |
在终端1中
1 | make -j$(nproc --all) $(external/audioflingerglue/detect_build_targets.sh $PORT_ARCH $(gettargetarch)) |
在终端2中1
2
3
4
5
6
7
8
9
10AUDIOFLINGERGLUE_VERSION=$(git --git-dir external/audioflingerglue/.git describe --tags | sed \
-r "s/\-/\+/g")
rpm/dhd/helpers/pack_source_audioflingerglue-localbuild.sh $AUDIOFLINGERGLUE_VERSION
mkdir -p hybris/mw/audioflingerglue-localbuild/rpm
cp rpm/dhd/helpers/audioflingerglue-localbuild.spec \
hybris/mw/audioflingerglue-localbuild/rpm/audioflingerglue.spec
sed -ie "s/0.0.0/$AUDIOFLINGERGLUE_VERSION/" \
hybris/mw/audioflingerglue-localbuild/rpm/audioflingerglue.spec
mv hybris/mw/audioflingerglue-$AUDIOFLINGERGLUE_VERSION.tgz hybris/mw/audioflingerglue-localbuild
rpm/dhd/helpers/build_packages.sh --build=hybris/mw/audioflingerglue-localbuild
然后重新打包dhd1
rpm/dhd/helpers/build_packages.sh --droid-hal
注意到 https://wiki.merproject.org/wiki/Adaptations/faq-hadk 搜索当前版本需要对应的mw版本号,不一定用最新的
执行 rpm/dhd/helpers/build_packages.sh --mw
,然后选择 all
即可
将droid-local-repo/vince下 droid-hal-vince/.rpm 跟audioflingerglue.rpm 、 droidmedia*.rpm 上传到obs的droid-hal-vince下
例如这些包:https://build.merproject.org/package/show/nemo:devel:hw:xiaomi:vince/droid-hal-vince
obs打包还需要dhc,dhv等等几个包,此处不详细说明了,可以到 https://github.com/mer-hybris 看其他机型的
也就是 droid-hal-$DEVICE-version
rpm/dhd/helpers/build_packages.sh -v
如果提示 droid-configs 之类的找不到,需要手动安装
1 | sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -msdk-install zypper -n install droid-config-$DEVICE |
~obs打包完之后,将droid-config-vince-kickstart-configuration-0.2.4*.armv7hl.rpm 下载下来,解压获得Jolla-@RELEASE@-$DEVICE-@[email protected]放到$ANDROID_ROOT下面~
1 | cd $ANDROID_ROOT |
1 | cd $ANDROID_ROOT |
在当前目录下会有一个 sfe-$DEVICE-$RELEASE$EXTRA_NAME
目录,下面的 sailfishos-$DEVICE-$RELEASE$EXTRA_NAME.zip
就是要使用的刷机包
刷入 lineageos-14.1的包,刷入上面的sailfishos-$DEVICE-$RELEASE$EXTRA_NAME.zip
的包,重启
可以参考 https://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_Vince
欢迎加入 IRC #jolla-cn #sailfishos-porters (只限英文交流) 或 https://t.me/joinchat/GTqoL1HLIYXWNf-JeijTAg 讨论
相关文档
openssl s_client -connect qyapi.weixin.qq.com:443 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > weixin.crt
使用SSLPoke.class确认是否还有上层证书,如果存在也导入
java -Djavax.net.debug=ssl SSLPoke qyapi.weixin.qq.com 443
看到有类似下面的则表明有上层证书:
1 | AuthorityInfoAccess [ |
将http://gn.symcb.com/gn.crt下载下来,并导入sudo keytool -import -v -trustcacerts -alias gnsymcb -keystore $JAVA_HOME/jre/lib/security/jssecacerts -file gn.crt
sudo keytool -import -v -trustcacerts -alias qyapiweixin -keystore $JAVA_HOME/jre/lib/security/jssecacerts -file weixin.crt
需要先删除再导入新的1
2sudo keytool -delete -keystore $JAVA_HOME/jre/lib/security/cacerts -alias qyapiweixin
sudo keytool -import -v -trustcacerts -alias qyapiweixin -keystore $JAVA_HOME/jre/lib/security/cacerts -file weixin.crt
1 | vim /usr/local/apache-tomcat-8.5.6/bin/setenv.sh |
或者在 /usr/local/apache-tomcat-8.5.6/conf/server.xml的ssl配置部分指定keystore,如下
1 | <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" |
部分内容来自 https://github.com/Ci-Jie/OpenSIPS ,其他的很多教程都是坑!!!
sudo yum -y install mysql mysql-server mysql-devel git make bison libdbi-dbd-mysql
(具体还有什么忘记了,不能重现当时安装的了,后面缺什么再装吧)
cd ~/ && git clone https://github.com/OpenSIPS/opensips.git -b 2.1 opensips_2_1
vim ~/opensips_2_1/Makefile.conf.tmplate
,移除exclude_modules
中db_mysql
1 | cd ~/opensips_2_1 |
sudo vim /usr/local/etc/opensips/opensipsctlrc
将DB开头的修改为自己的mysql连接情况(事先创建好opensips用户,或者偷懒用root,但是一定要注意安全),SIP_DOMAIN修改为主机ip1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23## your SIP domain
SIP_DOMAIN=yourip
## chrooted directory
# $CHROOT_DIR="/path/to/chrooted/directory"
## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, or DBTEXT,
## by default none is loaded
# If you want to setup a database with opensipsdbctl, you must at least specify
# this parameter.
DBENGINE=MYSQL
## database host
DBHOST=localhost
## database name (for ORACLE this is TNS name)
DBNAME=opensips
# database path used by dbtext or db_berkeley
DB_PATH="/usr/local/etc/opensips/dbtext"
## database read/write user
DBRWUSER=opensips
## password for database read/write user
DBRWPW="opensipsrw"
## database super user (for ORACLE this is 'scheme-creator' user)
DBROOTUSER="root"
# user name column
USERCOL="username"
sudo /usr/local/sbin/opensipsdbctl create
,会提示输入root密码,然后会出现下面的提示1
2
3
4
5
6
7
8
9
10MySQL password for root:
INFO: test server charset
INFO: creating database opensips ...
INFO: Core OpenSIPS tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into opensips ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute userblacklist? (y/n): y
INFO: creating extra tables into opensips ...
INFO: Extra tables succesfully created.
如果出现
ERROR: database engine not specified, please setup one in the config script
,看看是否有执行权限
可以通过修改/usr/local/etc/opensips/opensips.cfg
文件,修改listen=
,注意这里的ip要用外网ip,udp改为tcp可以使用keepalive,让手机长时间在线。我的配置如下:1
2
3
4
5
6
7
8
9
10advertised_address=myip
alias=myip
...
listen=tcp:myip:5060 # CUSTOMIZE ME
tcp_connection_lifetime=3600
tcp_connect_timeout=5000
tcp_keepalive=1
tcp_keepcount=30
tcp_keepidle=60
tcp_keepinterval = 60
这个domain就是上面填写的ip地址,创建用户的时候也要用到。
用root连接mysql,选择opensips库,插入一条记录INSERT INTO opensips.domain(domain) VALUES('your ip');
(注意修改为自己的ip)
启动 /usr/local/sbin/opensipsctl start
停止 /usr/local/sbin/opensipsctl stop
重启 /usr/local/sbin/opensipsctl restart
/usr/local/sbin/opensipsctl add user@myourip password
这里的user就是号码,尽量用数字(键盘上没有字母啊)
其他未测试,可以到 http://www.voip-info.org/wiki/view/Open+Source+VOIP+Software 查找
如图所示:
如上所示,如果你浏览器的广告拦截插件正常的话。
具体使用见:https://coinhive.com/documentation ,有四种模式,静默加载的基本上被adblock掉了,建议用simple ui