Category Archives: Uncategorized

docker挂载文件的更新问题

将宿主机配置文件挂载到容器,在宿主机修改配置文件,但容器内挂载的文件并未发生变化,直至docker重启。 记得不是这样的。起初以为是版本的原因。于是在最新版docker上做了测试,问题依旧。 只好Google之。最后从docker issue上找到了答案: docker挂载文件基于inode。vim等编辑工具保存文件时,并非直接保存,而是将一份新的临时文件覆盖了旧文件。对于inode而言,原文件并未被修改。 解决方案有三: 1、换用nano等直接更新文件的编辑工具 2、改为挂载目录。 3、修改vim配置,添加:set backupcopy=yes 参考: https://github.com/docker/docker/issues/15793 http://www.ruanyifeng.com/blog/2011/12/inode.html

Posted in Uncategorized | Tagged | Leave a comment

wordpress启用全站加密

最近切换到vultr的洛杉矶机房,放弃了之前的cloudflare加速,启用Let’s Encrypt加密。 Let’s Encrypt证书的获取和更新见这里,完整文档见这里。 先讲获取和更新证书。具体的命令见官方文档。我这里只讲官方没讲清楚或需要注意的地方。 1、安装certbot。 2、获取证书。因为是nginx代理,必须webroot插件。webroot使得获取和更新证书无须停掉web服务。使用webroot需要指定一个目录存放webroot的临时文件,且nginx需要配置一个模式为.well-known/acme-challenge的location指定到该目录。 3、保持更新 再配置wordpress和nginx 1、修改wordpress常规配置中的两个地址到https。这点,直接修改数据库也可以做到。 2、启用后台加密。修改wp-config.php文件,添加define(‘FORCE_SSL_ADMIN’, true);定义。 3、最后是最关键的,配置nginx,将http重定向到https,将https转发到wordpress。 下面是我的配置: server { listen 80; server_name blog.wencan.org; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name blog.wencan.org; ssl on; ssl_certificate /etc/letsencrypt/live/blog.wencan.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.wencan.org/privkey.pem; #charset koi8-r; #access_log … Continue reading

Posted in Uncategorised, Uncategorized | Tagged , | 3 Comments

在Linux Minecraft中输入中文

1、安装zenity、xdotool 2、创建下面的脚本,并赋执行权限 #!/bin/bash -e chars=$(zenity –title 中文输入 –text 中文输入 –width 500 –entry 2>/dev/null) sleep 0.1 xdotool key –delay 150 Escape t sleep 0.2 xdotool type –delay 150 “$chars” xdotool key Return 3、创建快捷键,关联到上面创建的脚本 4、如果能输入英文,而不能输入中文,检查locale,如果LANG值不是en_US.utf8,修改用户语言到English(United States),并重启会话 脚本来自依云’s Blog,只有第四条才是我的。 参考: Linux 下在 Minecraft … Continue reading

Posted in Uncategorised, Uncategorized | Tagged | 2 Comments

为blog配置CloudFlare CDN加速,并为OpenWrt配置ddns

一、配置wordpress域名 在wordpress后台配置两个域名均为https 这里的前提是blog本身已经支持https,不支持https的情况我没法尝试。推荐Redhat的Openshift。 二、配置CloudFlare 1、注册CloudFlare 2、添加根域名 3、确认域名解析信息 4、修改域名的NS服务器到CloudFlare指定的NS服务器 等待DNS服务器修改生效 三、http自动转向https 在CloudFlare后台Page Relues添加规则: 匹配模式为http://domain/* 规则为Always use https 四、下载证书 1、ssh连接OpenWrt路由器 2、opkg install curl 3、mkdir -p /etc/ssl/certs 4、curl http://secure.globalsign.net/cacert/Root-R1.crt -o /etc/ssl/certs/GlobalSign_Root_R1.pem 5、从其它linux系统复制 /etc/ssl/certs/ca-certificates.crt到/etc/ssl/certs目录,作为根证书 五、配置OpenWrt的ddns 1、安装ddns-scripts、ddns-scripts_cloudflare、luci-app-ddns 2、刷新页面,进入Service-Daynamic DNS,删掉myddns_ipv6,编辑myddns_ipv4 3、勾选Enable、IPv4-Address,DDns Service provider选CloudFlare,Hostname/Domain填完全的域名(子域名),Username填注册邮箱地址,Password可以为真实的密码或CloudFlare API token(推荐API Token。API … Continue reading

Posted in Uncategorised, Uncategorized | Tagged , | 6 Comments

mongodb用户和权限管理

mongodb官方文档已经对用户和权限管理有详细的描述,本文尝试以另一角度来对其做出说明。 由于没在集群上做过测试,集群部分就不写了。 启用用户验证: mongod添加–auth启动参数 (或) 配置文件中配置 security.authorization: enabled 角色: 一个用户可以有多个角色 read: 读 readWrite: 读写 userAdmin: 用户管理 dbAdmin: 数据库管理 dbOwner: 读写、用户管理、数据库管理 认证源: 每个数据库都可以做为认证源。不同认证源创建的用户可以同名。用户内部的名称为: “$认证源.$用户名”。 认证源内的用户可以拥有针对对其它数据库的角色。 mongo shell中,以当前使用的数据库作为认证源。 通过连接字符串连接时,可能需要通过查询参数指定认证源。 admin数据库: 当前示例的所有用户都保存在admin数据库的system.users集合内。 admin的用户可拥有四个对实例内所有数据库都有效的特殊权限: readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase userAdminAnyDatabase 超级用户: 一个拥有admin的用户管理角色的用户即为超级用户。超级用户可以为自身或其它用户赋予任何角色。 本地例外: 如果实例开启了用户验证,却还没创建管理角色用户,可以通过本地例外机制创建一个。 通过localhost连接到实例,不过验证,在admin数据库中,创建一个管理角色用户。这个新创建的用户,应当是一个超级用户。 一种更理想的方式:关闭用户认证重启实例,想干吗干吗…… … Continue reading

Posted in Uncategorised, Uncategorized | Tagged | Leave a comment

OpenWrt升级记

不为啰嗦,也不是炫耀,就是把经验记下,留给后来遇到此类问题的人看。 路由器是网件WNDR4300,之前是OpenWrt14.07。原生的系统不敢用,虽然NSA不可能对自己感兴趣。 升级过程偷了懒,直接在LuCi刷上升级包,并保留原配置——当然先备份原先的配置。升级后看起来一切正常,除了状态页面的固件版本信息改了,跟没升级一个样——内存还是10m+。 第二天晚上,也就今晚,室友遇到麻烦了,VPN连上不,报619错误。Google之后,确定为PPTP NAT穿透的问题,按官方WIKI,需要安装kmod-nf-nathelper-extra这个包。于是先opkg update再opkg install kmod-nf-nathelper-extra。 于是第二个问题来了,原本平常的opkg update操作,却因党和政府的亲切关怀,而变得无比快!再Google之,发现ustc居然有OpenWrt的镜像。果断将OpenWrt的opkg配置改为使用utsc的源,再update && install。 http://wiki.openwrt.org/doc/howto/vpn.nat.pptp http://mirrors.ustc.edu.cn/openwrt/

Posted in Uncategorized | Tagged | 1 Comment

迁移到linode东京机房

一开始就是新加坡机房,连接不稳定,延迟大。几次提交ticket,希望迁移到东京机房,都被客服以东京机房已满为由回绝。中间还迁过一次美国fremont机房,但似乎比新加坡机房更糟。于是我每隔一段时间,都提交一次ticket,内容不变,回复也不变。 今天,试着添加一个东京机房的节点,居然成功了。再提交ticket,回复居然依然是sorry。看了回复,以为东京机房空闲资源被人抢占了,于是再添加东京机房节点,还是成功。可以断定,要么就是客服按着习惯瞎回复,要么就是linode故意给东京机房保留资源——也许是留给新用户? Google了一下,发现了自助迁移机房的办法,大喜。 步骤如下: 一、创建新节点 二、停掉旧节点 三、进入旧节点(管理页面),克隆资料到新节点。克隆过程跟联系客服迁移机房后,手动重启节点的过程一样。这个慢啊…… 四、删除旧节点 因为linode是按小时记费的,还不用担心费用的问题。 网上说,日本机房很多ip都被封了。等到新节点起来,检测下,果然中奖了。 换ip可无法自助,只好提交ticket。 换了ip,一切ok。虽然延迟没法跟国内服务器比,但与新加坡、美国机房比明显强多了。

Posted in Uncategorized | Tagged , | Leave a comment

利用docker部署Hadoop单节点环境

之前早就编译好了几个hadoop镜像,含2.4.1、2.6.0、2.7.0三个版本。但一直未能成功地部署好docker hadoop环境。这个周末终于能静下心来,做成这件小事。 网络上所流传的docker hadoop部署方式,大都是一个容器一个节点(即master或slave)。我这里采用的是一个容器一个服务的方式。 必须要强调,这只是第一步。多节点部署方式还待研究。 先从镜像服务器拉取我制作的hadoop镜像。我所编译的hadoop镜像的hadoop原生库为64位,jdk为openjdk-7-jdk,Dockerfile见这里。这次我使用的版本是2.6.0。 docker pull wencan/hadoop:2.6.0 创建本地配置文件目录,和数据目录 mkdir conf mkdir data 拷贝hadoop etc/hadoop目录下的全部配置文件到conf目录下,配置几个关键项。如果本地没有hadoop包,可以创建一个hadoop容器,利用docker cp从容器拷贝出默认的配置文件。 主要配置可见这里。另外还需要需要的配置的为namenode的数据目录,和datanode的数据目录,这个可以参考这里。 格式化namenode数据目录 这里必须使用默认的桥接网络,否则会出错 docker run –rm -it -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop -v $PWD/data:/data wencan/hadoop:2.6.0 hdfs namenode -format 运行namenode,使用宿主网络,后面相同 docker run -d –name hadoop_namenode … Continue reading

Posted in Uncategorized | Tagged , | Leave a comment

JavaScript版k-means++算法实现

按照维基百科的定义,k-means为:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类。 k-means的过程为: 1、随机选取k个中心 2、将数据点依据中心归类为k个聚集 3、选择每个聚集的中心,作为新的中心 4、重复2、3步,直到聚集不再发生变化 k-means的缺陷为第一步的随机选择中心。如果数据点为[1, 5, 6, 9, 10]。k-means的结果可能为[[1], [5, 6], [9, 10]],也可能为[[1, 5, 6], [9], [10]]。从概念上看,这两个结果都是正确的,但后者很明显不是我们想要的。 k-means++改进了第一次选取中心的方法,使得第一次选取的中心之间间距够大。k-means++第一次选取中心的过程为: 1、随机选取一个数据点作为第一个中心 2、计算每个数据点到最近的中心的距离 3、选取上一步最后距离最大的数据点,作为新的中心 4、重复2、3步,直到选取到k个中心 下面是实现,包含了k-means和k-means++。 kmeans函数第三个参数为一个计算数据点权值的函数,用来计算数据点间距离和聚集平均权值。缺点是权值函数会被多次应用于同一数据点上。 exports = module.exports = kmeans; //随机取k个中心 function randomCentroids(points, k, weightFun) { var centroids = … Continue reading

Posted in Uncategorized | Tagged | Leave a comment

配置运行hadoop

接前面的。hadoop版本依然是2.4.1. 选择一个节点做主节点,运行hdfs的namenode、yarn的resourcemanager,以及jobhistoryserver。主节点的节点名称定为hadoop-master。 剩下的作为从节点,运行hdfs的datanode、yarn的nodemanager。每个从节点的节点名称定位hadoop-slave+编号。 “节点名称”这个词,好像是我发明的…… 为每个节点创建hadoop用户。配置主节点的hadoop用户可以免密码登录到各个节点(包含自身)。 su – hadoop //切换到hadoop用户 sudo mkdir /opt/hadoop //创建hadoop主目录 cd /opt/hadoop //切换到hadoop主目录 tar xzvf */hadoop-2.4.1.tar.gz //解压缩hadoop包到当前目录,即hadoop主目录 ln -s hadoop-2.4.1 current //创建current符号链接到当前版本的hadoop目录 echo “export PATH=$PATH:/opt/hadoop/current/bin” | sudo tee /etc/profile.d/hadoop.sh //添加hadoop bin目录到PATH sudo source /etc/profile //使刚才的修改立即生效 修改每个从节点的/etc/hostname,每个从节点的hostname改为hadoop-slave*。从节点的节点名称,就是主机名。 修改每个节点的/etc/hosts,将集群中所有节点的IP地址到主机名的映射添加到hosts,包含自身。 … Continue reading

Posted in Uncategorized | Tagged | Leave a comment