Quantcast
Channel: network - 一个伪linux粉丝的blog
Viewing all 82 articles
Browse latest View live

Moving from Shared to VPS

$
0
0

话说最近几年dreamhost访问越来越慢,各个商家的廉价VPS促销活动也越来越给力,价格对比后VPS优势明显,2013年初就打算从虚拟主机搬家到VPS来着,而且已经做好了迁移,后来发现dreamhost的钱已经交到了2014年,就没研究是否能退款,于是干脆用到2014年吧。

于是网站搬家就搁到了今年,基于鸡蛋和篮子的原理,不将网站风险放在同1台机器上,于是新买了2台VPS,虽然目前在用的有1台VPS机器已经有用了2年多没问题的。相互做好数据备份就好。本博客目前所在VPS是个有些争议的商家时隔几年重新开张,看态度似乎很诚恳,而且促销力度很大,经不住诱惑啊,总之,定期做好数据备份最重要。

网上搜了下,Dreamhost网站上没有保留账户,停止服务的做法,只能是关闭删除帐号,删除前,Dreamhost的账户上个截图吧,Member since April 2009,一晃5年的用户。目前的套餐是 $214.80 every two years ($8.95 per month),与廉价VPS一对比,价格实在太高,不值。

《Moving from Shared to VPS》本来还想来一张曾经做过的站的截图,近2页的各种站,截图自己保留吧,哈哈,原来自己折腾了那么多网站,一看吓一跳啊。

删除DH帐号过程提示,稍后有兴趣再截图吧。再见共享虚拟主机,你好VPS.

 


Amazon EC2

$
0
0

话说之前小站3w的2级域名启用了google cdn,当时感觉速度很爽,然后进入了6月,这个大家都懂的月份,网站开始频频reset , 发现这次的封锁非常的厉害。别的不说,连主题中google开源字体地址神马的都封了,于是这几天小折腾了一把,准备把3w的2级域名移到亚马逊云Amazon EC2上, 别说速度还真有提升。

申请过程略,网上有,需要绑定一个在有效期内的信用卡,验证1美元。我申请时填错了卡的月份,等了1天还是验证中,才发现自己搞错了。在这里

https://console.aws.amazon.com/billing/home#/paymentmethods 重新提交一下即可。

老规矩,先参考自己之前的帖子centos vps优化一下内存,然后开始lighttpd mysql 之类。

安装phpmyadmin时遇到提示

No package phpmyadmin available.

搜了一下,运行下这个命令可以安装phpmyadmin了, 注意后面的版本号,可以进目录选一个新一点的。

rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

方法2,未测试  yum --enablerepo=epel install whateveryouwant ,随意安装找不到的包

然后lighttpd配置文件加了一句 alias.url += ( “/phpmyadmin” => “/usr/share/phpmyadmin”),好像没啥效果,现在的lighttpd版本是1.4.35, conf文件和以前配置方法不一样了,没看懂,模块加载似乎都是单独的conf文件,如access_log.conf、access_log.conf、compress.conf等,参考mod.template补了一个alias.conf还是提示404,无法访问phpmyadmin ,于是就放弃了:( 选择了lnmp一键包。另外一个amh一键包4.2版不支持Amazon ec2的环境,据说即将发布amh 5,支持更多环境)

顺便记录一下lighttpd运行检查环境的命令 ,语法ok

lighttpd -tp -f /etc/lighttpd/lighttpd.conf | less

后来又试了ubuntu 服务版,实在不习惯,最终还是安装了debian ,这里比较搞笑的是由于英文不好,在amazon 市场看到有收费,起初不舍得安装,毕竟是试用期,后来仔细看了才发现本来就写了试用期免费。 另外发现东京机房的使用费比美国要高。

 

《Amazon EC2》

aws debian

折腾的时候发现了一超级简单的phpmyadmin的替代品,adminer,居然才300K的一个php文件,似乎也能满足我导数据改数据的需要,phpmyadmin看来可以退役了。

《Amazon EC2》

adminer

 

 

 

 

 

debian Shadowsocks-libev

$
0
0

话说20112年的时候折腾过shadowsocks-nodejs爬墙,这2天手上闲置的1台vps折腾pptp和l2tp vpn失败,然后又想起了shadowsocks这个工具,没想到shadowsocks-nodejs 已经停止开发,作者主攻python版了,被 v2ex 的无聊程序员当作了试验田,于是 nodejs,libev,libuv,go,erlang,csharp,ruby 等各种语言的 fork都有了,介绍戳这里 https://zh.opensuse.org/SDB:Shadowsocks

从vps小内存的角度上考虑Shadowsocks-libev,据说是c语言写的,于是又找到了这个帖子 http://teddysun.com/358.html

Debian下shadowsocks-libev一键安装脚本

这里转贴一下:)

安装方法3步:
使用root用户登录,运行以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh
chmod +x shadowsocks-libev-debian.sh
./shadowsocks-libev-debian.sh 2>&1 | tee shadowsocks-libev-debian.log

安装完成后,脚本提示如下:

Congratulations, shadowsocks-libev install completed!
Your Server IP:your_server_ip
Your Server Port:8989
Your Password:your_password
Your Local IP:127.0.0.1
Your Local Port:1080
Your Encryption Method:aes-256-cfb

Welcome to visit:http://teddysun.com/358.html
Enjoy it!

卸载方法:
使用 root 用户登录,运行以下命令:

./shadowsocks-libev-debian.sh uninstall

其他事项:
客户端配置的参考链接:http://teddysun.com/339.html

安装完成后即已后台启动 shadowsocks ,运行:

ps -ef | grep ss-server | grep -v ps | grep -v grep

可以查看进程是否存在。
本脚本安装完成后,会将 shadowsocks-libev 加入开机自启动。

使用命令:
启动:运行以下命令

nohup /usr/local/bin/ss-server -c /etc/shadowsocks/config.json > /dev/null 2>&1 &

停止:运行以下命令查看进程的 PID

ps -ef | grep -v grep | grep -v ps | grep -i '/usr/local/bin/ss-server' | awk '{print $2}'

kill该 PID 即可:

kill -9 上述命令得到的结果

首选测试客户端当然是android,市场中搜 shadowsocks,即可,填上前面的服务器ip以及本地和远程2个端口,加密方法与前面一致,就可以上外网了,手机上用speedtest试了几次,同一台vps机器,似乎shadowsocks的速度比ssh 下行要快一些,上行是差不多的,不过不排除现在3G网络不稳定所致。

其他系统客户端见 http://sourceforge.net/projects/shadowsocksgui/files/dist/

最后再补1个shadowsocks-libev常规安装方法,各种系统都有。

https://github.com/madeye/shadowsocks-libev

Pisen.Cloud.Easy.Power

$
0
0

#我帮品胜玩路由# 这篇是品胜 云座·易充折腾的软文哦,不喜就当路过吧。

厂商都出路由器啦,发烧点的小米路由、360路由,极路由,还有最近发布的联想和百度合作的newifi.  大家都想占领家庭智能设备,占领移动充电宝,占领云存储。没错,品胜这个我传统认知领域的手机相机电池厂商也加入了这个领域,出手了一个N合1的产品,野心可见一斑。话说今天才知道它还搞了快递1日达和1小时达(阿里巴巴合作),依托的就是门店多吧。

品胜 云座·易充5000mAh 价值210元  分享虽然是要求含3组关键字,其实pisen官网在买228,天猫也有210.209.208好几种价格,功能上 品胜 云座·易充 无线中继(路由)+云存储+充电宝+app扩展,价值几何,大家自己判断吧.

上周看到品胜这个活动,毫不犹豫的参加了,因为以前买过品胜的充电套装,手机,相机都买过,质量可靠,不怕它跑路,顺带还推荐了2个同事报名,1个也到手了,1个居然还没有通过:)下次努力。

为啥要玩品胜路由,最近正在折腾路由器,新入了360路由,刷了openwrt,正好看到品胜已经可以刷openwrt了,而且这个玩意还带移动电源的和云存储,可玩性太高了。 其实已经算不上是 #我帮品胜玩路由# ,只不过大家折腾好了后,我们继续享受体验罢了。

openwrt折腾见这里

品胜云路由免拆机TTL编程器免刷过渡固件刷不死UBOOT     品胜云座易充也是9331,8/64M的配置,一样可以刷tplink703n的openWRT的8M固件哦

宽带联网就不测试了,试了下无线中继的效果。手机开了个热点,然后品胜 云座·易充做中继,在办公的地方,隔墙也就比以前远了不到5米吧。到了2楼楼梯一般的样子。

重点测试和吐槽一下手机app吧,我是安卓,扫描后下载的是20140904版,安卓1.2版,体积17M,鉴于这个月流量还剩1G左右,当然是猛用手机流量。

安装过程突然就觉得卡了,运行了2分钟,手机发烫,某大师提示cpu占用高。

另外试了下云存储,手机拍照后直接就上传到品胜 云座·易充上插好的U盘上了,这个还不错。

能解决下app卡顿的问题,基本也就可以继续了,暂时就这么多。有机会再玩。上图吧。

《Pisen.Cloud.Easy.Power》

ss-panel+shadowsocks-note

$
0
0

大概是去年开始,发现网上有不少免费或者收费shadowsocks服务,一般都有啥邀请码,版权的地方发现用了ss-panel,原来是开源的shadowsocks前台面板,于是我也来搭一套,虽然是参考,非原创,也要记录一下,免得自己下次折腾继续在网上瞎搜:)
步骤流水如下
1,安装lnmp包,懒人直接去lnmp.org下载、安装
安装LNMP执行:wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp
当然也可以一行命令搞定 apt-get install nginx php5-cgi php5-gd php5-xcache php5-mysql mysql-server phpmyadmin

2,安装shadowsocks支持
apt-get install python-pip python-m2crypto
pip install cymysql

3,后端安装配置
git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
cd ./shadowsocks/shadowsocks
vi Config.py
修改数据库配置,这里需要前面安装lnmp时自行新建一个数据库
如:在mysql数据库中新建数据库shadowsocks,并添加用户abc,导入manyuser中的sql文件,然后执行python server.py
python server.py & 后台运行

4,前端安装,
如果前面使用的是lnmp一键包
执行lnmp vhost add
添加虚拟主机,然后进入虚拟主机目录

然后
wget https://github.com/orvice/ss-panel/archive/master.zip
(这一步我下载到的似乎是3.0版 ss-panel) ,最后配置虚拟主机和数据失败,所以最后使用的是2.4.6版
wget https://github.com/orvice/ss-panel/archive/v2.4.6.zip
unzip master.zip ~替换为~ unzip v2.4.6.zip
rm master.zip ~替换为~ rm v2.4.6.zip
mv -f ss-panel-master/* ./ ~替换为~ rm ss-panel-2.4.6/ -rf
mv lib/config-simple.php lib/config.php
vi lib/config.php (配置站点名称,数据库等信息)

几个教程都有下面这一步,我没用上,反正服务器运转正常。
添加守护进程supervisor:
apt-get install supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim /etc/supervisor/supervisord.conf

后续,还有邮箱发信没有测试,以及多节点服务器怎么玩。

最后上一个测试站点,不嫌弃速度慢的朋友可以自己注册玩了,里面丢了邀请码,还可以相互邀请,反正上海电信自打封外网后,我出国速度就没正常过。
ss.free4u.tk 请低调

参考文章
1,http://www.nenew.net/ubuntu-shadowsocks-manyuser-sspanel-configuration.html 主要看了第1和第2篇
2,https://prinzeugen.net/build-shadowsocks-sharing-site-with-ss-panel/
3,https://joway.wang/blog/2015/05/20/VPS%E6%90%AD%E5%BB%BAShadowsocks.html
(这一篇虽然没用上,但是里面的mysql命令值得收藏,毕竟我是使用phpmyadmin导数据的,不够直接)
4,https://github.com/orvice/ss-panel/wiki 应该是这里下载的,v3版没搞定,最后退回2.4.6版:)
5,http://10.gg/?p=87

近期杂事

$
0
0

话说上次偶然查了一下自己的博客,居然几乎没有被收录了,看来长期不更新已经被拉黑降权成垃圾站了,想想当年秒收录,文章排名还高的日子过去了。

所谓近期杂事,1是折腾vps+路由器爬墙,原本还期待今年有go语言版的finalspeed出现,结果作者连这个也不维护了,直接出了收费版另一个软件,于是路由器端finalspeed泡汤了。只好想办法提高vps端的性能,买了一台超便宜kvm的vps,比手上的openvz架构的vps还便宜,结果果然便宜没好货,第一次遇到无辜离线的vps,全世界都访问不了,管理界面居然提示在线:),发个ticket过去等上2天,鸡同鸭讲,客服说他访问正常,只能凑合用了。

然后看自己的其他几台vps,发现一个奇葩vps,硬盘5G,月流量75G,内存128M,原本是正常配置,结果管理界面一看,内存8T,没看错,登陆后台 cat /proc/meminfo
MemTotal:       8589934588 kB
MemFree:        8589805164 kB
Cached:            98744 kB
Buffers:               0 kB
Active:            37192 kB
Inactive:          74828 kB
Active(anon):       3528 kB

居然是真的,内存8T,用测试bench工具,跑分相当高。改天要想想干点啥,不过这个流量太小了。

另一件杂事更加奇葩了,发生在这个周末2天,帮人刷路由器,极路由3 Hc5861, 折腾了2天,崩溃,话说极路由现在的后台界面现在只是漂亮,提示的东西很多,大概是在线多少台设备,总共可以连66台,近期服务了多少台设备等等,可是guest ssid同时最多只能连5台限制死了,而且上一个版本的后台只能在 手机app上开启guest ssid,网页无法管理,wtf. 这2周的最新版界面变了,网页也可以开启guest ssid了。 于是刷机Padavan 华硕固件,特点稳定,功能越来越多,没想到这次刷路由器让我奔溃了。

本来挺简单,先拿root权限,登陆后台 mtd -r write abc.bin u-boot 刷 不死boot或者breed 这个bootloader.

然后这里刷华硕固件修改版 padavan,结果刷好后,电脑和手机要么是看不到信号,要么是连不上,改了无数次信道,区域什么的,依然只能网线连接成功,刷了N个版本,奇葩事接连发生,放固件的百度网盘被封,历史版本一时半会没有,路由器挂了,不能wifi上网,手机没电,只好带回家继续折腾。

整个上午换了4~5个固件版本,刷了几次breed,wifi都没戏,中间还刷回去2次极路由官方固件,居然正常连接wifi,然后开始谷歌,还好找到答案了,第一次遇到这么奇葩的问题,刷完其他固件后,必须要修改2.4G和5G的mac地址,rf1和rf2下的wanlan mac mac1 mac2 改成和极路由官方固件下提示的mac地址一样,就这一步也遇到奇葩事了,火狐浏览器不能提交修改,n次失败后,怀疑人生了,最后改用edge浏览器,居然秒搞定。

这次痛苦的刷路由器经历必须得记下来。

明天补图,1个是奇葩vps大内存图,还有1个就是这次breed下修改mac地址的图。

图1-vps大内存图

 

《近期杂事》

图2,breed下修改mac地址的图

 

《近期杂事》

Openwrt+Lede Image Builder

$
0
0

16年底12月的最后一周又开始折腾路由器了,折腾的原由是有个地方需要打印,电脑直接接Usb打印机桌子太小放不下,打印机放地上又被我踩到。
正考虑怎么折腾时,借给朋友出门度假拷照片的云座易充(tp-link wr703n马甲)在24号还给我了,差不多借走1年半的样子吧,一看,有USB口,哈哈,有机器了,不折腾都不好意思了,当然马上刷机。
先刷U-boot,然后网上找了好几个关于ar71xx版本的固件,都不是很合适,而且奇怪的是直接安装P910d等打印文件要么失败,要么overlay空间异常,所以只能是自己动手定制了。
参考了以下3篇文章,2篇官方说明,一篇网友的文章
1,https://lede-project.org/docs/user-guide/imagebuilder
2,https://wiki.openwrt.org/doc/howto/obtain.firmware.generate
3,http://www.cnblogs.com/noright/p/4938433.html
4,http://www.dreamxu.com/compile-your-own-openwrt/ 这篇编译方式我失败了

一、配置编译环境
Debian/Ubuntu
apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc wget

二、下载Image Generator for ar71xx
https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/OpenWrt-ImageBuilder-15.05-ar71xx-generic.Linux-x86_64.tar.bz2
除了1505版外,还试了Snapshot版,内核好像是4.X了
https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/OpenWrt-ImageBuilder-ar71xx-generic.Linux-x86_64.tar.bz2
Lede下的imagebuilder-ar71xx
https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar.xz

三、配置
根据需要修改repositories.conf,我反正是没改过,就是替换包地址之类。

四、把需要替换固件中的文件放到files目录中,官方固件无线默认是关闭的,为了默认打开无线功能,把无线的配置文件放到files中,在生成固件时就会替换掉默认的文件。

方法是这样的:路由器刷好官方固件,把无线打开,从网页把配置文件备份出来,把需要的文件按固件中的目录结构放到files目录中。

无线配置的文件是wireless,在固件中的路径是 /etc/config/wireless,所以在编译环境中把它放到
files/etc/config/wireless 这个目录文件地址自己建,稍后要用到,其他类似文件调用也是相同的方法

这是我的wireless配置文件,只是打开了无线功能

$ cat files/etc/config/wireless
config wifi-device radio0
option type mac80211
option channel 11
option hwmode 11g
option path ‘platform/ar933x_wmac’
option htmode HT20
# REMOVE THIS LINE TO ENABLE WIFI:
option disabled 0

config wifi-iface
option device radio0
option network lan
option mode ap
option ssid OpenWrt-703N
option encryption none

五、生成镜像
用这个命令查看支持的profile
make info
Openwrt下703N对应的配置是TLWR703,Lede下对应配置是 tl-wr703n-v1。

make image PROFILE=tl-wr703n-v1 PACKAGES=”libiwinfo libiwinfo-lua liblua lua libuci-lua libubus libubus-lua uhttpd rpcd luci-base luci-lib-ip luci-lib-nixio luci-theme-bootstrap luci-mod-admin-full luci-lib-jsonc kmod-usb-printer p910nd luci-app-p910nd kmod-usb-core ” FILES=files/

PROFILE 是从支持列表中找出的路由器型号
PACKAGES 是添加到固件中的包名,如果要从固件中删除包,可以在包名前加 –
FILES 是指定用files目录中的文件替换掉固件中的文件

运行make image PROFILE=TLWR703生成的固件,比官方固件少很多包,比如没有luci,后面自己加需要的包,例如我的重点是 kmod-usb-printer p910nd luci-app-p910nd 这3个包,然后还有luci界面

生成的固件在 bin 目录中
如我需要的 lede-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

编译过程中,还遇到了这1错误,
[mktplinkfw] kernel length aligned to 1397604
[mktplinkfw] *** error: images are too big by 119478 bytes

其实就是你装的包太多了,精简一些就可以通过了。

对了,win10下的Ubuntu编译一直出故障,后来是在vps上编译的:)

BaiduPCS

$
0
0

话说前2周找人要了一个圣诞晚会的视频,在百度云上,接收后一看14G,在线倒是能预览,可惜渣画质。

后来用了几个windows下破解版百度云和官方最新版,结果下载速度大概是10~50k之间,直接奔溃,这得下到那一天啊。

网上查了下有说是限制ip或者账号下载速度的,心想难道只能买会员了么,晚上陪老婆看电视时边备份自己网站数据,看到multcloud.com这个网站,支持多个网盘之间同步,其中有百度盘,结果还是10来k的速度,其他国外盘之间数据同步飞快。

然后翻到了这几个地址

https://github.com/Mrs4s/BaiduPanDownload

https://github.com/GangZhuo/BaiduPCS

前者BaiduPanDownload被和谐了,后者BaiduPCS在win10下的ubuntu试了一下,下载百度云网盘上的文件,居然能用,有几兆的速度,虽然是终端命令模式,能用就行,截图一下:)

《BaiduPCS》

pcs-baidu

 

然后还看到这个 (下次备用)

https://zhuanlan.zhihu.com/p/24816898

https://github.com/tiancaihb/BaiduOldDriver

 

BaiduPCS步骤如下

1. 安装依赖

apt-get install build-essential libcurl4-openssl-dev libssl-dev

2. 获取源代码

git clone https://github.com/GangZhuo/BaiduPCS.git

3. 编译源代码

cd BaiduPCS
make clean
make
make install #将安装到/usr/local/bin下

4. 手动安装到其他目录,例如 /usr/bin 下

cp ./bin/pcs /usr/bin/

下载方法

pcs download “/movie/2.mpg” “./2.mpg”

暂时先这么用着,有其他好方法再更新

2017.1.21更新来了,批量下载方法,其实就是同步,暂时用不上上传,只下载

pcs synch [-cdenru] <local path> <remote path>

实际使用列子如下:,把需要下载的文件批量扔到 movie目录,然后本地也建一个movie目录,这样就可以一次搞定n个文件下载了:)

pcs synch -cdu ./movie /movie

Scanning local file system...
Scanned 3
Completed
Fetching net disk file list...
Fetch 88
Completed
Comparing...
Compared 88
Completed

Download: on, Upload: on, Confuse: on, Equal: off
Printing|Synching...

Local File OP Net Disk File
----------------------------------
[ing...]            <- 20150101.mov
[ ok ]            <- 20150101.mov
[ ok ]            <- 2016-10-01.MP4
[ ok ]            <- 2016-10-08.MP4
[ ok ]            <- 2016-10-09.MP4
[ing...]            <- 2016-10-15.MP4
6.69MB/610.39MB         5.49MB/s         00:06:44


2017-01-31更新自己打包编译的2个openwrt路由器上用的baidu-pcs,下载后改名pcs直接扔/usr/bin/目录下即可,分别是mt7620和mt7621,最近流行的几款路由器(如:小米路由、优酷路由宝、极路由、k1、 k2、newifi) 均可以使用,直接下载到U盘,移动硬盘上.
http://www.wanjie.info/app/pcs-7620
http://www.wanjie.info/app/pcs-7621


flashplayer 29 offline installer

$
0
0
《flashplayer 29 offline installer》

flashplayer29 离线包

1年不更新了,没想到回归的第一篇是在2020年底结束使命的adobe 的 flashplayer,不吐不快,国内下载居然和2144勾搭在一起,而2144下载页偶尔证书问题还打不开,起初还以为自己dns被劫持了,没想到大家早在讨论了(吐槽了)。

 

废话不说,直接上flashplayer离线包地址, 是20兆的离线包,不是1兆多的捆绑在线安装包,如果还是跳转到2144下载,那么只能改解析了,走海外ip可以下载正常离线包:)

https://labs.adobe.com/downloads/flashplayer.html  貌似这个页面长期有效。

Windows

Mac

Linux

cwRsync windows to linux

$
0
0

最近折腾了一个小需求,将一台windwos下的文件定时同步到linux机器上,这样内外网访问基本一致,记录一下,参考了几篇文章,地址见文末。

1、Windows 客户端配置:

cwRsync是基于cygwin平台的rsync软件包,支持windows对windows、windows对Linux、Linux对windows高效文件同步。Cwrsync还集成了OpenSSH for windows,可以实现Linux 下Rsync一模一样的操作。使用 cwRsync 来同步文件后,只需要对一台主服务器进行文件修改,其他镜像服务器可以自动同步,包括文件的更新、删除、重命名等。

  • cwRsync分为付费版和免费版两种,我们只需要使用免费版即可,在官方网站上面下载 cwRsync Free Edition 版本。

https://www.itefix.net/content/cwrsync-free-edition

《cwRsync windows to linux》

cwrsync_5.7.2_x86_free.zip

  •  解压 cwRsync_5.7.2_x86_Free.zip 到  C:\cwRsync目录中
  • 双击 cwrsync.cmd 运行,会在当前生成 home\%USERNAME%\.ssh 目录,供 ssh 认证方式使用。
  • 为系统新建一个环境变量,目录为cwrsync的bin目录下,例:path: C:\cwRsync\bin。这样 cmd 命令行下可以直接运行 rsync 这个命令
    C:\Users\Administrator>rsync –version
    rsync version 3.1.3 protocol version 31

2、linux客户端

Linux 一般自带  rsync 工具,没有的话,安装也很简单  apt-get install rsync 搞定

    •  配置文件
    • vim /etc/rsyncd.conf
      # configuration example:
      pid file = /var/run/rsync.pid
      port = 873
      log file = /var/log/rsyncd.log
      lock file = /var/run/rsync.lock# create new
      # any name you like
      [resources]
      # destination directory to copy
      path = /home/wwwroot/你的域名目录/wiki/data/
      # hosts you allow to access
      hosts allow = *
      hosts deny = *
      secrets file = /etc/rsyncd.pass
      # 表示该节点是否可被发现。
      list = true
      # 指定传输到这里文件所属的用户。
      uid = www
      # 指定传输到这里的文件所属的组。
      gid = www
      # rsync连接时的用户名,要和客户端rsync的命令一致
      auth users = www
      # 该目录是否只读
      read only = no
      transfer logging = yes
      log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
      timeout = 600
      # 创建密码文件
      touch /etc/rsyncd.pass
      #权限修改
      chown root:root /etc/rsyncd.pass
      chmod 600 /etc/rsyncd.pass
      vim /etc/rsyncd.pass
      内容为:www:passwd # 用户名:密码   如我的  www:3660wiki

3、 windows下配置文件设置
C:\cwRsync\ 目录下新建 rsync.pass
密码和前面linux下相同,3660wiki ,这里有坑,不需要用户名,只有纯密码!

否则后面会遇到类似这样的错误

auth failed on module resources from unknown (ip省略): missing secret for user "www"

同步测试
同步命令如下

rsync -acrtzv --password-file=/cygdrive/c/cwRsync/rsync.pass /cygdrive/d/DokuWikiStick/dokuwiki/data/ www@服务器ip::resources
因为这里有了用户名www, 所以前面rsync.pass文件不需要用户名了

测试通过后,设置定时处理文件

dynamicres_sync.bat

@echo off
rsync -acrtzv --password-file=/cygdrive/c/cwRsync/rsync.pass /cygdrive/d/DokuWikiStick/dokuwiki/data/ www@服务器ip::resources

每15分钟执行一次 dynamicres_sync.bat 这个同步脚本,够用了。

查看日志

tail -10f /var/log/rsyncd.log
2018/05/17 01:45:01 [10078] connect from UNKNOWN (*.*.*.*)
2018/05/16 17:45:02 [10078] rsync to resources/ from www@unknown (*.*.*.*)
2018/05/16 17:45:02 [10078] receiving file list
2018/05/16 17:46:10 [10078] sent 1907 bytes received 581652 bytes total size 200818115

 

参考如下

https://www.liurongxing.com/use-rsync-crontab-windows-system-file-to-linux-system.html

http://happyqing.iteye.com/blog/2218153

https://www.itefix.net/content/how-can-i-secure-connections-between-windows-rsync-clients-and-cwrsync-servers (这篇代后续折腾)

4pda registration

$
0
0

第n次找软件的时候来到了4pda.ru网站,无奈完全不认识俄文,及时借助谷歌翻译也只能看一个大概。对于注册账号一头雾水,所以之前放弃了,今天再次遇到一个软件下载,尝试注册成功,归功于这个帖子4pdaru-loginregister-captcha-tutorial

下面直接大段引用了,免得前面那个网页挂掉。

Read the guide below if you want to register a new account on 4pda, because captcha is still needed there.

The captcha codes are just numbers written in Russian with no spaces, they are made from 4 digits, ex: 2450 – written like this “twothousand andforty fivehundreds”.

How to translate the Russian captcha

First thing you need is to know how the numbers are written in Russian:
0 – ноль
1 – один
2 – два
3 – три
4 – четыре
5 – пять
6 – шесть
7 – семь
8 – восемь
9 – девять
10 – десять
11 – одинадцать
12 – двенадцать
13 – тринадцать
14 – четырнадцать
15 – пятнадцать
16 – шестнадцать
17 – семнадцать
18 – восемнадцать
19 – девятнадцать
20 – двадцать
10 – десять
20 – двадцать
30 – тридцать
40 – сорок
50 – пятьдесят
60 – шестьдесят
70 – семьдесят
80 – восемьдесят
90 – девяносто
100 – сто
100 – сто
200 – двести
300 – триста
400 – четыреста
500 – пятьсот
600 – шестьсот
700 – семьсот
800 – восемьсот
900 – девятсот
1000 – тысяча
1000 – тысяча
2000 – две тысячи
3000 – три тысячи
4000 – четыре тысячи
5000 – пять тысяч
6000 – шесть тысяч
7000 – семь тысяч
8000 – восемь тысяч
9000 – девять тысяч
10000 – десять тысяч

Now you need to look for this characters in your security code, start with the thousands, than hundred, tens and finally the single digits.

Here’s a example

《4pda registration》
The number in the image above is 8691
Red – восемь тысяч (8000)
Yellow – шестьсот (600)
Blue – девяносто (90)
Purple – один (1)
注册登陆后,终于可以下载论坛里的附件了。不再是404了。 然并卵,刚才下的软件需要越狱,现在估计没几个用户越狱了。
《4pda registration》

printcentral

open source video conference

$
0
0

应该是6月最后一周的时候,工作和生活上几乎同时了有了一个小需求,多人间的小型视频会议,能同时看ppt材料,于是上网搜了一下,关键字如标题“open source video conference” ,试了几个系统后,最满意Jitsi 这一款,界面比较友好,操作比较简洁,同时也有安卓版和苹果版(需要改区域安装)。当然电脑端浏览器直接访问网址就可以用了。

官方网址测试https://meet.jit.si/满意后,下一步就是自建服务器了,介绍地址见官网 https://jitsi.org/downloads/

安装过程中有几个要注意的地方,第一步,需要添加 “apt-transport-https” 这个包,安装过程有提示

  • 第一步添加repository key
    wget -qO – https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add –
  • 第2步,添加源地址
    sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”
  • 第3步,更新
    sudo apt-get -y update

第3步这里可能过不去,有提示,检查是否安装了 apt-transport-https 软件包,那么先安装一下这个包即可。

  • 第4步,安装jitsi-meetsudo apt-get -y install jitsi-meet

安装过程中设定自己的域名或服务器ip。

然后创建ssl证书

然后访问你服务器的ip或者域名即可

其他还有一个chrome浏览器插件需要自己定制,请参考 Jidesha, 主要是修改 manifest.json 配置文件,其他参考readme, 如我的

{
"manifest_version": 2,
"name": "WV视频会议",
"description": "WV视频会议.",
"version": "0.01",
"minimum_chrome_version": "34",
"icons": {
"16": "watermark16.png",
"48": "watermark48.png",
"128": "watermark128.png"
},
"background": {
"scripts": [ "background.js" ],
"persistent": true
},
"permissions": [
"desktopCapture"
],
"externally_connectable": {
"matches": [
"*://10.17.34.126/*"
]
}
}

然后在chrome里加载自己的插件,同时修改服务器配置

《open source video conference》

还要修改服务器的这个对应位置

### Enter your extension’s hash ID into your Jitsi Meet installation

You have to write the hash ID into the `desktopSharingChromeExtId`
property of your `/etc/jitsi/meet/<your.server.com>-config.js`.
This way, Jitsi Meet knows what to look for when the user clicks
the “Share screen” button.

差不多就这些了,隔了3个月,自己虚拟机换了3轮,配置文件早不全了:)

evolution-host

$
0
0

这是一篇中英文混排的广告软文,我只是为了得到一个免费的vps。
地址https://evolution-host.com/free-vps.php

Want a VPS free-of-charge with 8GB of DDR4 RAM, 4 Powerful CPU cores & DDoS Protection? 来自 evolution-host.com 的免费vps

 

https://evolution-host.com/vps-hosting.php

在我眼中竟然比gcp还诱惑:)当然有时间我还是会备折腾一下gcp的。
话说前几天买的俄罗斯vps,到手竟然是被墙的,哎,无语中。还说想体验一下最近出国距离的vps。

This is a Chinese and English advertising soft article, I just want to get a free vps.
Address https://evolution-host.com/free-vps.php
In my eyes, it's even more tempting than gcp :) Of course, I still have time to toss gcp.
Saying that the Russian vps I bought a few days ago, it was actually blocked by the wall, hey, speechless. Also said that I want to experience the recent VPS distance abroad.

浪费感情,只是免费1个月,想继续用要发广告,还1次6条,免6个月,算了,放弃。

Openldap normal user change password by using Phpldapadmin

$
0
0

客户使用云平台时采用了openldap 容器方式对接账号,同时希望密码有一定的有效期,想了解普通用户如何修改密码,这里简单几个步骤介绍一下Phpldapadmin上如何修改密码。

本文适用人群,普通用户,非管理员。

准备信息

管理员需要先准备2个信息(页面地址和用户名格式),提供给普通用户使用。

2.1.1. 页面地址

图形法

管理员:获得phpLdapAdmin管理页面地址,如下图,我们通过系统上的负载均衡,查看到phpldapadmin管理页面的地址是  http://10.10.150.100:30060/

命令法

拼接笨办法(肯定有比下面简单的方法,以后想到了更新)

通过查询svc和node信息,分别获得node ip及服务端口,得到节点ip,10.10.150.100,以及对外暴露的端口30060,拼接一下,同样得到phpldapadmin管理页面的地址是  http://10.10.150.100:30060/


    • [root@dcs ~]# kubectl get svc phpldapadmin
      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      phpldapadmin NodePort 10.88.1.61 80:30060/TCP 10d
    • [root@dcs ~]# kubectl describe po phpldapadmin-d45c477d5-m5cqj|grep Node
      Node: dcs-s1/10.10.150.100

2.1.2. 用户名格式

 管理员:ldap登录的用户名格式,如下图,得到用户名格式为" cn=admin,dc=yuming,dc=io"

2.2. 开始登录

普通用户: 从管理员处拿到登录地址,访问网页,点击下图页面左边login位置登录

 

普通用户将前面管理员给到的  " cn=admin,dc=yuming,dc=io" 格式替换为自己的用户名格式

如下图箭头位置" cn=jie.wan,dc=yuming,dc=io",普通用户密码登录,Authenticate即可。

 

普通用户登录后,如下图,依次选择自己的账号,更新密码即可。

支持普通用户通过phpldapadmin图形界面,更新自己密码完成。

 

Docker_Jira

$
0
0

1. 背景

临时接到一个任务,某测试环境搭建一套 Jira 项目与事务跟踪工具,决定采用容器方式来部署,数据库对接时遇到好几个坑点,先按避坑的操作步骤介绍,最后部分补充报错及解决方法。

2. 步骤

Jira与Confluence一样,都需要用到独立的数据库,数据库部分上次的文章 Docker_Conflunce已经有了,我们接着多建一个库就好,今天主要介绍如何用Docker部署Jira以及对Jira进行破解的操作。

2.1. 数据库部分

2.1.1. mysql服务器部分

关于数据库官方文档说明:https://confluence.atlassian.com/adminjiraserver/connecting-jira-applications-to-mysql-5-7-966063305.html

官方介绍一定要看,不然就会遇到我遇到的报错:persevering:  我这边参考官方文档修改了  /etc/mysql/conf.d/mysql.cnf文件,增加的字段如下:
[mysqld]
default-storage-engine=INNODB
character_set_server=utf8mb4
innodb_default_row_format=DYNAMIC
innodb_large_prefix=ON
innodb_file_format=Barracuda
innodb_log_file_size=2G

然后重启mysql生效

2.1.2. jira数据库准备

## 创建jira数据库及授权
CREATE DATABASE jiradb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
GRANT ALL on jiradb.* TO 'jira'@'%' IDENTIFIED BY 'Jirapassword';
flush privileges;

注意:我昨天使用的数据库版本为 mysql5.7.29,请认真阅读官方文档中给出的不同版本不同的mysql授权命令,以及对应的参数修改,否则下面安装时会失败。

2.2. Jira安装

2.2.1. 制作jira镜像包

一个比较流行的第三方Jira 镜像地址:cptactionhank/atlassian-jira-software:8.10.0

这里基于该版本 dockefile 做了一些修改,重点是中文注释部分。
FROM openjdk:8-alpine
# Configuration variables.
ENV JIRA_HOME     /var/atlassian/jira
ENV JIRA_INSTALL  /opt/atlassian/jira
# 采用最新版 8.10.0
ENV JIRA_VERSION  8.10.0
# 加了一个环境时区
ENV JIRA_TYPE=software JAVA_OPTS='-Duser.timezone=GMT+08'
# Install Atlassian JIRA and helper tools and setup initial home
# directory structure.
RUN set -x \
&& apk add --no-cache curl tzdata xmlstarlet bash ttf-dejavu libc6-compat \
&& cp -rfv  /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo ${TIMEZONE} > /etc/timezone \
&& mkdir -p                "${JIRA_HOME}" \
&& mkdir -p                "${JIRA_HOME}/caches/indexes" \
&& chmod -R 700            "${JIRA_HOME}" \
&& chown -R daemon:daemon  "${JIRA_HOME}" \
&& mkdir -p                "${JIRA_INSTALL}/conf/Catalina" \
&& curl -Ls                "https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-8.10.0.tar.gz" | tar -xz --directory "${JIRA_INSTALL}" --strip-components=1 --no-same-owner \
&& curl -Ls                "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz" | tar -xz --directory "${JIRA_INSTALL}/lib" --strip-components=1 --no-same-owner "mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar" \
&& rm -f                   "${JIRA_INSTALL}/lib/postgresql-9.1-903.jdbc4-atlassian-hosted.jar" \
&& curl -Ls                "https://jdbc.postgresql.org/download/postgresql-42.2.1.jar" -o "${JIRA_INSTALL}/lib/postgresql-42.2.1.jar" \
&& chmod -R 700            "${JIRA_INSTALL}/conf" \
&& chmod -R 700            "${JIRA_INSTALL}/logs" \
&& chmod -R 700            "${JIRA_INSTALL}/temp" \
&& chmod -R 700            "${JIRA_INSTALL}/work" \
&& chown -R daemon:daemon  "${JIRA_INSTALL}/conf" \
&& chown -R daemon:daemon  "${JIRA_INSTALL}/logs" \
&& chown -R daemon:daemon  "${JIRA_INSTALL}/temp" \
&& chown -R daemon:daemon  "${JIRA_INSTALL}/work" \
&& sed --in-place          "s/java version/openjdk version/g" "${JIRA_INSTALL}/bin/check-java.sh" \
&& echo -e                 "\njira.home=$JIRA_HOME" >> "${JIRA_INSTALL}/atlassian-jira/WEB-INF/classes/jira-application.properties" \
&& touch -d "@0"           "${JIRA_INSTALL}/conf/server.xml"
# Use the default unprivileged account. This could be considered bad practice
# on systems where multiple processes end up being executed by 'daemon' but
# here we only ever run one process anyway.
USER daemon:daemon
# Expose default HTTP connector port.
EXPOSE 8080
# Set volume mount points for installation and home directory. Changes to the
# home directory needs to be persisted as well as parts of the installation
# directory due to eg. logs.
VOLUME ["/var/atlassian/jira", "/opt/atlassian/jira/logs"]
# Set the default working directory as the installation directory.
WORKDIR /var/atlassian/jira
COPY "docker-entrypoint.sh" "/"
# 许可证的破解atlassian-extras-3.2.jar文件
COPY "atlassian-extras-3.2.jar" /opt/atlassian/jira/atlassian-jira/WEB-INF/lib
ENTRYPOINT ["/docker-entrypoint.sh"]
# Run Atlassian JIRA as a foreground process by default.
CMD ["/opt/atlassian/jira/bin/start-jira.sh", "-fg"]

2.2.2. 下载破解文件

下载atlassian-extras-3.2.jar文件,放置在Dockerfile同目录下,例如

- JIRA

--Dockerfile

--atlassian-extras-3.2.jar

2.2.3. 构建镜像

构建镜像,执行命令:

docker build -t 10.10.150.105/myapp/jira:latest .

2.3. 启动容器

执行如下命令,因为主机的80端口已经被conflunce占用了,这里jira暂时使用8080端口,/var/atlassian/jira 映射到本地,数据持久化

docker run -d --restart=always --link confluence:confluence --link mysql:mysql  -p 8080:8080 -v /var/atlassian/jira:/var/atlassian/jira --name jira 10.10.150.105/myapp/jira

2.4. 配置Jira

2.4.1. 初始化界面

开始访问jira界面 http://10.10.10.10:8080/

a) 选择语言(选择适合自己的语言)

  b) 配置数据库信息(信息填好,点击下面的测试连接,显示成功即可,否则根据提示去官网文档查看是否修改对mysql应参数)

2.4.2. 生成dbconfig.xml

     :lol:  实际上我差不多一天都卡在前面一个下一步,数据库连接各种报错,翻了官方文档和网上的一些帖子,最终手动按官方的配置,手动生成了一个dbconfig.xml文件才通过。

bash-4.4#cat /opt/atlassian/jira/bin
bash-4.4# ./config.sh
Loading application properties from /opt/atlassian/jira/atlassian-jira/WEB-INF/classes/jira-application.properties
Reading database configuration from /var/atlassian/jira/dbconfig.xml
2020-06-30 02:55:42,693+0000 main INFO      [c.a.j.config.database.DatabaseConfigHandler] Trying to get encrypted password from xml and decrypt it
2020-06-30 02:55:42,754+0000 main INFO      [c.a.j.config.database.DatabaseConfigHandler] Database password decryption success!
No graphics display available; using console.
----------------------
JIRA Configurator v1.1
----------------------
--- Main Menu ---
[H] Configure JIRA Home
[D] Database Selection
[W] Web Server (incl. HTTP/HTTPs configuration)
[A] Advanced Settings
[S] Save and Exit
[X] Exit without Saving

     配置范例如下:

  • 注意第8行最后数据库 jira?之后应该是 useUnicode=true&amp;characterEncoding=UTF8&amp;sessionVariables=default_storage_engine=InnoDB&amp;useSSL=false 这样的形式,特别是 &amp;useSSL=false,而不是&
  • 第10行,11行,需要是加密后的密码形式  atlassian-password-cipher-provider,加密说明见官网 https://confluence.atlassian.com/adminjiraserver084/basic-encryption-979404294.html

   cat /var/atlassian/jira/dbconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>mysql</database-type>
<schema-name>public</schema-name>
<jdbc-datasource>
<url>jdbc:mysql://address=(protocol=tcp)(host=mysql)(port=3306)/jira?useUnicode=true&characterEncoding=UTF8&sessionVariables=default_storage_engine=InnoDB&useSSL=false</url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<username>jirauser</username>
<atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.base64.Base64Cipher</atlassian-password-cipher-provider>
<password>VEZqaXJhcG****=</password>
<pool-min-size>20</pool-min-size>
<pool-max-size>20</pool-max-size>
<pool-max-wait>30000</pool-max-wait>
<pool-max-idle>20</pool-max-idle>
<pool-remove-abandoned>true</pool-remove-abandoned>
<pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
<validation-query>select 1</validation-query>
<min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
<time-between-eviction-runs-millis>300000</time-between-eviction-runs-millis>
<pool-test-on-borrow>false</pool-test-on-borrow>
<pool-test-while-idle>true</pool-test-while-idle>
</jdbc-datasource>
</jira-database-config>

得到正确的dbconfig.xml 后,连接数据库成功,进入下一个界面。

c) 获取授权码

这里破解跟confluence略有不同,jira破解需要先按照提示去官方获取试用授权码,这样才可以进入系统,然后进行破解包的替换,重启服务即可。

2.4.3. 许可证相关

生成试用许可证,这几个图是网上的,自己没来的及截图:)听说授权不贵,这里的破解步骤仅玩票研究用,切记!

选择 Jira software服务器版

生成许可证

生成的许可证填到下一步文本框

c) 查看破解

登陆jira>>右上角设置按钮>>应用程序,即可看到许可证已经到了2033年。

 COPY "atlassian-extras-3.2.jar" /opt/atlassian/jira/atlassian-jira/WEB-INF/lib

2.5. 报错 faq

2.5.1. 报错1

  • Q1,界面提示 database setup is not supporting utf8mb4...
Database: We've found an error in MySQL supported version!
The database setup is not supporting utf8mb4
See our documentation for more information on setting up MySQL 5.7.
  • A1,参考前面的 /etc/mysql/conf.d/mysql.cnf 部分,在 [mysqld] 下 增加 character_set_server=utf8mb4  字段即可, 详见

https://community.atlassian.com/t5/Jira-Software-questions/The-database-setup-is-not-supporting-utf8mb4-but-it-is/qaq-p/1037415

2.5.2. 报错2

  • Q2,日志报错  WARN: Establishing SSL connection without server's identity verification is not recommended....
Attempting to connect to mysql:3306/jira
Mon Jun 29 00:49:07 GMT 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Connection successful!
  • A2,参考在dbconfig.xml 文件中最末尾 </url> 结束前,添加&amp;useSSL=false 字段。

2.5.3. 报错3

  • Q3,密码加密问题Database password decryption not performed.

2020-06-28 23:52:08,685+0800 JIRA-Bootstrap INFO      [c.a.j.config.database.DatabaseConfigHandler] Trying to get encrypted password from xml and decrypt it
2020-06-28 23:52:08,686+0800 JIRA-Bootstrap INFO      [c.a.j.config.database.DatabaseConfigHandler] Database password decryption not performed.

如本例子

/opt/atlassian/jira/bin $ java -cp "./*" com.atlassian.db.config.password.tools.CipherTool
Enter password:
2020-06-28 15:58:42,255 main DEBUG [db.config.password.DefaultCipherProvider] Initiate cipher provider class: com.atlassian.db.config.password.ciphers.base64.Base64Cipher
2020-06-28 15:58:42,255 main DEBUG [password.ciphers.base64.Base64Cipher] Initiate Base64Cipher
2020-06-28 15:58:42,314 main DEBUG [password.ciphers.base64.Base64Cipher] Encrypting data...
2020-06-28 15:58:42,315 main DEBUG [password.ciphers.base64.Base64Cipher] Encryption done.
Success! Put those lines in database config xml file:

<atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.base64.Base64Cipher</atlassian-password-cipher-provider>
<password>VEZqaXJh*******=</password>

and restart the instance.

2.5.4. 报错4

    • Q4,日志提示 Startup check failed. Jira will be locked.
    • A4,删除 $JIRA_HOME/.jira-home.lock(本例中为/var/atlassian/jira/.jira-home.lock)

3. 参考链接


k8s multi cluster management with kubeconfig

$
0
0

1. 背景

有客户咨询如何在集群外通过kubectl命令行访问 公司平台产品集群(ps. 有特殊端口),正好有同事写过一篇《配置集群外访问某产品集群》,我这边测试后,参考了k8s官网文档《配置对多集群的访问》,2者做了一些结合,于是有此实践文档。

2. 步骤

2.1. 准备kubectl命令

下载kubectl 并保存至 /usr/local/bin, 以下命令在终端中执行
# curl 下载 kubectl ,以下3行 分别是 linux、mac 、windows版本
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl /usr/local/bin
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl /usr/local/bin
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
# chmod 更改文件权限
chmod 755 /usr/local/bin/kubectl

2.2. 准备 config 文件

vi ~/.kube/config,输入以下内容并保存

apiVersion: v1
clusters:
- cluster:
server: 10.10.*.*:28081
name: hd1
- cluster:
server: 172.16.*.*:48081
name: hl0
- cluster:
server: 10.22.*.*:38081
name: l0
contexts:
- context:
cluster: hd1
user: ""
name: hd1
- context:
cluster: hl0
user: ""
name: hl0
- context:
cluster: l0
user: ""
name: l0
current-context: hd1
kind: Config
preferences: {}
users: []

可以看到,我分别添加了3个集群:

10.10.*.* 网段的产品版本  3.0.8,对应名字为  hd1, 对应上下文相同hd1

172.16.*.* 网段的 产品版本3.1.4,对应名字为  hl0, 对应上下文相同hl0

以及10.22.*.* 网段的 产品版本 4.0.1,对应名字为 l0, 对应上下文相同 l0

2.3. 开放主机端口

在对应的3个机器上分别执行

iptables -t nat -I PREROUTING -d 10.10.*.* -p tcp --dport 28081 -j DNAT --to 127.0.0.1:18081
iptables -t nat -I PREROUTING -d 172.16.*.* -p tcp --dport 48081 -j DNAT --to 127.0.0.1:18081
iptables -t nat -I PREROUTING -d 10.22.*.* -p tcp --dport 38081 -j DNAT --to 127.0.0.1:18081

  • iptables -t nat -I OUTPUT -d 10.10.*.* -p tcp --dport 28081 -j DNAT --to 127.0.0.1:18081  命令 备用,
    PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
    OUTPUT链:改变本地产生的包的目的地址
    POSTROUTING链:在包就要离开防火墙之前改变其源地址

2.4. 检查集群上下文

kubectl config get-contexts

2.5. 切换集群

我们来使用 kubectl 本地直连各种 产品版本 集群看看效果吧

2.5.1. 切换集群hd1

切换集群hd1,简单查看 default下的 pod
kubectl config use-context hd1
kubectl get po -n default

2.5.2. 切换集群hl0

切换集群hl0,同样简单查看 default下的 pod

2.5.3. 切换集群l0

切换集群l0,同样简单查看 default下的 pod

3个集群切换测试成功

3. 参考链接

https://kubernetes.io/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/

 

ps,前面写了一个月后,居然一直是草稿未发布状态,今天正好看到一个管理工具 https://github.com/lensapp/lens,这里新增一张图吧,管理起来也挺有意思。

docker pull error 504 fix

$
0
0

记录一次客户私有镜像下载遭遇504的排障记录,简单脱敏。

1. 缘起

客户反馈:新构建的镜像都无法部署,拉取镜像时会出现 502 或者 504现象,无法更新应用。

我这边通过多轮测试,发现国内线路正常,日本、美国、 香港均异常,报错如下:

docker pull...

error pulling image configuration: received unexpected HTTP status: 504 Gateway Timeout(偶尔502)

2. 排查

2.1. 排查第一波

几个环境 通过 curl 命令发现海外指向的ip是A252 ,  通过同事D 沟通,这些服务对某云上名字registry-outer ,也就是某云的负载均衡机器上,国内指向 A224,名字 registry-inner。

2.2. 排查第二波

登录某云前端页面和服务器终端

海外流量访问公网IP A252, 有一个80端口 ,它后面是 某云 内网A230 里面的5000端口

2.2.1. compose部分

A230里面有一个docker-compose启动的nginx和registry,compose.yml配置如下:

root@A230:~ #cat registry_china_prod/docker-compose.yml
version: '2'
services:
registry:
container_name: hub_registry
restart: always
image: xyz/registry:v1.1
network_mode: host
volumes:
- "./key-pair:/key-pair"
- "./registry-china.yml:/etc/docker/registry/config.yml"
logging:
driver: gelf
options:
gelf-address: udp://A172:12202
nginx:
container_name: hub_nginx
restart: always
image: xyz/nginx:1.11-alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
network_mode: host
logging:
driver: gelf
options:
gelf-address: udp://A172:12202

2.2.2. registry部分

root@A230:~# cat registry_china_prod/registry-china.yml

registry使用了6000端口,主要是指向一个某云的镜像存放文件地址 file对应的bucket

version: 0.1
log:
level: info
formatter: text
storage:
maintenance:
uploadpurging:
enabled: false
delete:
enabled: false
file:
driver: file
publickey: 略
privatekey: 略
bucket: 略
uploadendpoint: 略
redirect:
disable: false
cache:
blobdescriptor: inmemory
reporting:
newrelic:
licensekey: 略
name: Hub-Registry
http:
addr: :6000
host: https://xyz
secret: thesecrethahah
headers:
X-Content-Type-Options: [nosniff]
compatibility:
schema1:
signingkeyfile: /etc/docker/registry/key.json
auth:
token:
realm: https://xyz/auth
service: xyz
issuer: hub
rootcertbundle: /key-pair/public.cert
notifications:
endpoints:
- name: A_notify
url: http://A239:4000/event
timeout: 5s
backoff: 1s
ignoredmediatypes:
- application/octet-stream

2.2.3. nginx.conf配置部分

nginx使用了 5000 端口,这个自身A230 的 5000端口 与前面 A252 的 80 对应上了。

里面还有一个 location v2对应的  proxy_pass http://A.15:9002 代理设置,也就是说下一步指向 A.15

root@A230:~# cat registry_china_prod/nginx.conf


worker_processes auto;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 900;
gzip on;
upstream registry {
server 127.0.0.1:6000;
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $request_time $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
access_log /var/log/nginx/access.log main;
server {
listen 5000;
server_name xyz;
chunked_transfer_encoding on;
client_max_body_size 0;
client_body_timeout 9000;
client_header_timeout 9000;
location ~ /v2/(.*)/(.*)/tags/list {
rewrite /v2/(.*)/(.*)/tags/list /wrapper/$1/$2/tags/list break;
proxy_pass http://A15:9002;
}
location ~ /v2/ {
proxy_pass http://registry;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 9000;
proxy_connect_timeout 9000;
proxy_send_timeout 9000;
send_timeout 9000;
}
location ^~ /v1/ {
proxy_pass http://registry;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 9000;
proxy_connect_timeout 9000;
proxy_send_timeout 9000;
send_timeout 9000;
}
location /ping {
add_header Content-Type "text/plain;charset=utf-8";
return 200 "OK";
}
location / {
rewrite ^/(.*) https://xyz/$1 permanent;
}
}
}

2.2.4. lb部分

前面找到的A15 是某云的 lb, 它 9002 端口后面是  2 台机器 的 6000 端口 A.97 和 A.165

诡异的事情,某云界面提示 “由于全部节点健康检查失败,*已停止服务。。“

看着是健康检查失效,一度怀疑是这里,和 同事H 看上下游服务器日志看了很久,没找到异常日志。

这些服务跑了好几年了,最近一次容器重启还是15个月前,配置肯定没问题的,陷在这里很久,

某云工程师后来回复 健康检查失败这个是 某服务未配置造成的,需要改系统参数,暂时搁置,这是后话。

2.3. 曙光

接着从头看配置文件,找到nginx 配置有 graylog 的日志部分,请教了同事F 如何查看,F发现 graylog 有组件挂了一阵,启动临时文件被锁定,F顺手修复了。

接着查看 graylog ,边做测试,没有 504 日志,说明这个504不是我们沿途服务器打出来的。

F开始使用 神器  tcpdump 抓包,果然有发现,504是某云 cdn这边给出的。

 

3. 解决方法

定位问题在某云这边后,继续联系 某云 工程师,给出多个测试地址和截图,他们海外环境也复现了。

他们一番后台调整,给我留言,“原因是后端 dns 服务器的问题,已经修复了。”

今天早上和下午多轮测试,顺利打包,问题解决。

4. 测试地址

测试方法除开 直接拖包外,拖解析的层或直接从cdn取其 cdn加速地址的 静态文件也行。

5. 后续改进

  • 了解镜像存取服务逻辑
  • 抓包解决疑难问题
  • 联系供应商排障

Android Flash Tool

$
0
0

前面看到pixel 3xl 的新版rom RP1A.201005.004, Oct 2020   https://developers.google.com/android/images

看到日期够新鲜啊,一查 2020.10.06发布的,1.69G 都下载好了,点了一下flash ,原来还能在线刷机,体验一下。

11.0.0 (RP1A.201005.004, Oct 2020) Flash Link c7b477a72ed36047dafb103d9612b8b3c8b4e12707fd073c95c117d68fee3b0b

截了几个图,在线刷机,提示设备使用中,断开其它软件即可


提示连接正常

现有设备版本11.0.0 (RP1A.200720.009, Sep 2020),新版 11.0.0 (RP1A.201005.004, Oct 2020)

同意,准备刷机

继续同意条款

再次选择设备pixel 3xl

在线下载中

竟然没用多久,更新完毕

The software has been successfully updated.
It is now safe to unplug your phone.

k8s-set-capabilities-for-a-container

$
0
0

1. 问题描述

某客户咨询如何更改某一个容器的系统时间,沟通了一番后才知道不是修改时区,是开发需要固定机器时间,设置时提示没权限,于是我这边做了复现,得到解决方法如下文。

 

2. 原因分析

简单来说,k8s默认不给容器修改时间权限,如果执行类似 "date -s 2020-10-10" 时间修改命令,会提示 “date: can't set date: Operation not permitted“

 

3. 解决方法

 

3.1. 为容器单独添加内核功能

即修改部署Deployment,在containers 字段里面加几行参数

securityContext:
        capabilities:    //该参数用于pod添加或者禁用某项内核功能
          add:
          - SYS_TIME      //添加修改系统时间参数

修改部署文件重启后,容器可以随意修改时间了。

 

4.  参考链接

gitlab webhook 403

$
0
0

先说重点:

  • gitlab默认是全保护模式,开发人员无法推送,这就需要更改项目的保护模式,在开发人也可以推送项打上勾;或者一开始就将gitlab的默认模式改为部分保护模式。
  • 有时用户(开发者角色)能看到 gitlab 代码,无法绑定项目,会提示 类似 hook 403 forbidden ,无法跑流水线时,需要设置为 维护者和所有者权限才行。
Action Guest Reporter Developer Maintainer Owner 行动 客人 记者 开发人员 维护者 所有者
Create new issue ✓ 1 创建新问题 ✓ 1
Create confidential issue ✓ 1 创建机密问题 ✓ 1
View confidential issues (✓) 2 查看机密问题 (✓)2
Leave comments ✓ 1 留下意见 ✓ 1
See related issues 查看相关问题
See a list of jobs ✓ 3 查看作业列表 ✓ 3
See a job log ✓ 3 查看工作日志 ✓ 3
Download and browse job artifacts ✓ 3 下载并浏览作业工件 ✓ 3
View wiki pages ✓ 1 查看wiki页面 ✓ 1
Pull project code 1 拉项目代码 1
Download project 1 下载项目 1
Assign issues 分配问题
Assign merge requests 分配合并请求
Label issues and merge requests 标签问题和合并请求
Create code snippets 创建代码片段
Manage issue tracker 管理问题跟踪器
Manage labels 管理标签
See a commit status 查看提交状态
See a container registry 查看容器注册表
See environments 看环境
See a list of merge requests 查看合并请求列表
Manage related issues 管理相关问题
Lock issue discussions 锁定问题讨论
Lock merge request discussions 锁定合并请求讨论
Create new environments 创建新的环境
Stop environments 停止环境
Manage/Accept merge requests 管理/接受合并请求
Create new merge request 创建新的合并请求
Create new branches 创建新的分支
Push to non-protected branches 推送到不受保护的分支机构
Force push to non-protected branches 强制推送到未受保护的分支
Remove non-protected branches 删除不受保护的分支
Add tags 添加标签
Write a wiki 写一个维基
Cancel and retry jobs 取消并重试作业
Create or update commit status 创建或更新提交状态
Update a container registry 更新容器注册表
Remove a container registry image 删除容器注册表映像
Create/edit/delete project milestones 创建/编辑/删除项目里程碑
Use environment terminals 使用环境终端
Add new team members 添加新的团队成员
Push to protected branches 推送到受保护的分支
Enable/disable branch protection 启用/禁用分支保护
Turn on/off protected branch push for devs 打开/关闭受保护的分支机构
Enable/disable tag protections 启用/禁用标签保护
Rewrite/remove Git tags 重写/删除Git标签
Edit project 编辑项目
Add deploy keys to project 将部署密钥添加到项目
Configure project hooks 配置项目挂钩
Manage Runners 管理跑步者
Manage job triggers 管理工作触发器
Manage variables 管理变量
Manage GitLab Pages 管理GitLab页面
Manage GitLab Pages domains and certificates 管理GitLab页面域和证书
Remove GitLab Pages 删除GitLab页面
Manage clusters 管理群集
Edit comments (posted by any user) 编辑评论(由任何用户发布)
Switch visibility level 切换可见性级别
Transfer project to another namespace 将项目转移到另一个名称空间
Remove project 删除项目
Delete issues 删除问题
Remove pages 删除页面
Force push to protected branches 4 强制推动受保护的分支机构4
Remove protected branches 4 删除受保护的分支4
View project Audit Events 查看项目审计事件

转自:http://doc.gitlab.com/ee/permissions/permissions.html

Viewing all 82 articles
Browse latest View live


Latest Images