同步内容到 Github

其实很早就想着做一个静态内容同步,只是一直懒着不想动。
略微折腾了一下,直接提交到 https://larryli.github.io/

树莓派+USB 摄像头家用监控

raspbian 下很简单,直接安装 motion 即可:

sudo apt-get install motion

不过需要手工打开服务配置:

sudo nano /etc/default/motion

start_motion_daemon=no 修改为:

start_motion_daemon=yes

处理一个小的权限问题:

sudo chmod 777 /var/lib/motion

sudo service motion start 启动服务。

默认会使用 /dev/video0 这个设备,请确定 USB 摄像头插上去,能否 lsusb 列出,并且设备映射成功。

在路由器开放外网端口之前可以修改 /etc/motion/motion.conf 文件中以下配置:

width 640
height 480 # 视频大小
text_right Larry Li(Shenzhen)n%Y-%m-%d %T-%q # 右下角文字
text_left CAMERA rpi1 # 左下角文字
target_dir /var/lib/motion # 文件存放位置,需要 chmod 777
picture_filename %Y%m%d/%H%M%S-%v-%q # 也可以按 %Y/%m/%d/%H%M%S-%v-%q 年月日一层一层建目录存放
movie_filename %Y%m%d/%H%M%S-%v # 其他几个 filename 配置也相同处理
stream_port 8081 # 指定实时 http 监控端口
stream_localhost off # 需要将 on 修改为 off 取消仅 localhost 访问限制
stream_limit 2 # 最好设置一个访问数限制
stream_auth_method 1 # 1 是标准的 basic auth
stream_authentication username:password # 用户名和密码
webcontrol_port 0 # 关闭控制端口,或者也设置 basic auth 的用户名和密码 

然后使用 btsync 把 /var/lib/motion 共享给手机和远程电脑,我直接使用了 rw 读写模式,手工在远程删除旧文件。

PHP 切换到 7.0

用的是 ppa:ondrej/php-7.0

sudo add-apt-repository ppa:ondrej/php-7.0
sudo apt-get update
udo apt-get install php7.0-cli php7.0-fpm php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql php7.0-readline php7.0-sqlite php-apcu

有一个坑需要注意的是,sock 文件是从 /var/run/php5-fpm.sock 变成了 /var/run/php/php7.0-fpm.sock

因为 VPS 性能所限,整体提升并不是很给力,只是一两倍而已。

Git 提交 GnuPG 自动签名

一般来说使用 git commit -S 就调用 gpg 工具自动搜索 user.name<user.email> 对应的私钥来签名提交。

git 2.0 以上版本提供了 commit.gpgsign 设置可以自动打开 gpg 签名选项。

然后配合 user.signingkey 就可以设置默认的 key 来自动签名了。

git config --global user.name "Larry Li"
git config --global user.email larryli@qq.com
git config --global user.signingkey 2D8B022C
git config --global commit.gpgsign true

密钥 2D8B022C 可以通过 gpg -K 查看可用的私钥。

WebSocket、API 与 Push 推送

WebSocket 从 2010 年出现到现在已经五六年了,目前来说主流浏览器已经对其普遍支持,但实际运行却非常之少。

一般来说,WebSocket 都是双向全双工通信的。所以很容易设计一个异步协议 WAMP,提供异步的 RPC 远程调用Publish & Subscribe 模式实现。

但是,这种设计完全无视了 WebSocket 是基于 HTTP 协议的。也就是说,HTTP 使用 url 来路由,WebSocket 也同样可以用 url 来路由。

就拿 Pub/Sub 模式来说,WebSocket 天生就可以使用不用的路由来表示不同的 Pub。

而浏览器作为 Client 去 Call 服务器不正是 RESTful API 该做的事情么?

那么,除非是服务器要去 Call 浏览器端,WAMP 的大部分设计都是不需要的。

WebSocket 真的只需要简单的使用,就如它一开始被赋予的使命一样,作为一个 Push 及时的把服务端最新的消息推送到客户端。甚至消息都不需要包含实体,而只是一个通知即可。

SSL 证书更新

一晃使用 StartSSL 免费证书已经好几年了。证书有效期只有一年,每年得提前两个星期来申请新证书更换旧的。

而且很坑的是,至今没有弄懂如何使用已有的私钥来申请新的证书。每次都是完整更新一次才罢。

据说这个月 Let’s Encrypt 就会开始提供全新的免费 SSL 证书方案。但目前为止除了月更的博客少的可怜几行文字外,都没什么可见的效果。

不过,这几年使用 SSL 的感受,其实加密的性能真的不是问题了。当然,对于 C10K 那种访问量来说,CPU 和内存开销当然不会少。

而且除开免费的 SSL 证书,一些收费证书的价格也不是那么高高在上的,

除开这些,SSL 真的很不错。

GitLab 汉化指南(安装/升级)

手工安装与升级

推荐按照 gitlab-ce 源代码中 doc/install/installation.md 的内容手工安装 GitLab 中文版本。

相关修改只需要在 Clone the Source 步骤中使用 https://gitlab.com/larryli/gitlab.git 仓库和当前版本的 7-13-zh 即可。

对于中国大陆境内的服务器用户,可以使用 https://git.coding.net/larryli/gitlab.git 镜像(镜像手工同步,比 gitlab.com 上略有延迟)。

另外也可以在 Install Gems 步骤中使用 https://gems.ruby-china.org/ 镜像加快 gems 安装。具体步骤如下:

cd /home/gitlab
sudo -u git -H bundle config mirror.https://rubygems.org https://gems.ruby-china.org/

# For PostgreSQL (note, the option says "without ... mysql")
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos

# Or if you use MySQL (note, the option says "without ... postgres")
sudo -u git -H bundle install --deployment --without development test postgres aws kerberos

对于升级操作也可以按照相应的 update.md 类似处理即可。

官方推荐的 Omnibus 安装

请先使用官方包安装或升级完成,确认当前版本。

sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

并确认当前汉化版本的 VERSION 是否相同。

如果安装版本小于当前汉化版本,请先升级。如果安装版本大于当前汉化版本,请在本项目中提交新的 issue

如果版本相同,首先在本地 clone 仓库。

# GitLab.com 仓库
git clone https://gitlab.com/larryli/gitlab.git

# 或 GitCafe.com 镜像
git clone https://git.coding.net/larryli/gitlab.git

然后比较汉化分支和原分支,导出 patch 用的 diff 文件。

# 7.13 版本的汉化补丁
git diff origin/7-13-stable..7-13-zh > ../7.13.diff

然后上传 7.13.diff 文件到服务器。

# 停止 gitlab
sudo gitlab-ctl stop
sudo patch -D /opt/gitlab/embedded/service/gitlab-rails -p1 < 7.13.diff

确定没有 .rej 文件,重启 GitLab 即可。

sudo gitlab-ctl start

如果汉化中出现问题,请重新安装 GitLab(注意备份数据)。