猫言猫语

严以律己·宽以待人·自强不息·知行合一

OS X EI Capitan 安装 CH341 串口驱动

| OS X EI Capitan 安装 CH341 串口驱动已关闭评论

之前使用 Yosemite 的时候,使用 CH341 的串口驱动是需要打开 kext 的调试模式的,有点麻烦但更令人感到些许不安:

sudo nvram boot-args="kext-dev-mode=1"

这次升级 EI Capitan 后,把 kext-dev-mode 给关闭掉了,没想到 CH341 的串口驱动也可以直接使用,看来已经认证过了。

$ nvram -p
......
boot-args	kext-dev-mode=0
......

驱动下载地址:http://www.wch.cn/download/CH341SER_MAC_ZIP.html

homebrew 安装最新版 composer

| homebrew 安装最新版 composer已关闭评论

使用 brew 安装稳定版的 composer 版本是 1.2.0 的,可是一运行 composer 就提示:

PHP Fatal error:  Uncaught PharException: phar "/Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar" SHA1 signature could not be verified: broken signature in /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar:23
Stack trace:
#0 /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar(23): Phar::mapPhar('composer.phar')
#1 {main}
  thrown in /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar on line 23

Fatal error: Uncaught PharException: phar "/Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar" SHA1 signature could not be verified: broken signature in /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar on line 23

PharException: phar "/Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar" SHA1 signature could not be verified: broken signature in /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar on line 23

Call Stack:
    0.0063     359032   1. {main}() /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar:0
    0.0064     359032   2. Phar::mapPhar() /Users/wwx/Developer/Cellar/composer/1.2.0/libexec/composer.phar:23

就想直接安装 master 版看看,搜了一下 homebrew 还真有真有这个参数,安装后 composer 就又可以正常运行了。

brew install composer --HEAD

ubuntu 软件包更新公钥错误

| ubuntu 软件包更新公钥错误已关闭评论

今天在 ubuntu 机器上执行:sudo apt-get update 的时候,提示错误如下:

.......
Fetched 3,192 B in 3s (848 B/s)
Reading package lists... Done
W: GPG error: http://archive.ubuntukylin.com:10006 xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8D5A09DC9B929006

看上去是某个公钥找不到,解决方法就是导入这个公钥

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 8D5A09DC9B929006

移除 OpenSSH key 中的 Passphrase

| 移除 OpenSSH key 中的 Passphrase已关闭评论

原先生成的私钥是带密码保护的,现在 git 提交代码的时候不想那么麻烦总输入密码了,就需要把那个密码移除掉,具体命令:

ssh-keygen -f ~/.ssh/id_dsa -p

提示你输入新密码的时候,直接回车就可以了,或者使用 openssl 来生成一个新的

openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new

解决 Eloquent MassAssignment 异常

| 解决 Eloquent MassAssignment 异常已关闭评论

在 Laraevl 中偶尔需要在命令行直接灌点测试数据进去,结果却被提示:

Illuminate\Database\Eloquent\MassAssignmentException with message 'key'

应该是 key 字段无法直接 create 导致的,可临时禁用掉 MassAssignment 功能以解决这个问题

Eloquent::unguard();

理解 iptables REDIRECT

| 理解 iptables REDIRECT已关闭评论

iptables 里有一个 REDIRECT 目标,用于把路过服务器的某些流量重定向到服务器上某个端口进行处理,非常容易让人误以为是重定向到 loopback 的端口进行处理的。

其实这个流量是被重定向到数据包入网卡的那个的那个主地址进行处理,也就是说你的处理程序如果监听在 127.0.0.1 的话,路过服务器的流量可能就无法正常处理了。

因此在某些时候,还是需要监听在 0.0.0.0 才能按照你希望的结果进行处理。

使用命令行为树莓派 3 配置无线网络

| 使用命令行为树莓派 3 配置无线网络已关闭评论

首先打开无线客户端的配置文件:

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

然后在末尾添加 wifi SSID 与密码的配置,把下面大写的 SSID 与 PASSWORD 替换为你自己的网络信息,然后保存

network={
    ssid="SSID"
    psk="PASSWORD"
}

最后重新启动树莓派,树莓派就可以通过 wifi 联网了

为 Ubuntu 增加新 TrueType字体

| 为 Ubuntu 增加新 TrueType字体已关闭评论

在 Ubuntu 下增加新 TrueType 字体可以有两种有效范围,一种是在全局有效,还有一种是只对当前用户有效。

如果需要在全局添加字体,让所有用户都可以使用这个字体,则按以下操作步骤:

(1) 在 /usr/share/fonts 下新建一个子目录存放你下载的 .ttf 文件
(2) 然后再执行一下:fc-cache -fv

如果仅仅想为当前用户添加一个新字体体验一下效果,则可以按照这样的操作步骤:

(1) 把你下载的 .ttf 文件存放在 ~/.fonts 目录下
(2) 然后再执行一下:fc-cache -fv

CentOS 7 更改 GRUB 超时时间

| CentOS 7 更改 GRUB 超时时间已关闭评论

打开配置文件:/etc/default/grub

vi /etc/default

更改 GRUB_TIMEOUT 值为 0

GRUB_TIMEOUT=0

再执行命令:

grub2-mkconfig -o /boot/grub2/grub.cfg

CentOS 6 使用 Supervisor 进行进程管理

| CentOS 6 使用 Supervisor 进行进程管理已关闭评论

supervisor 是用 Python 开发的一套通用进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。

yum install epel-release
yum install supervisor

然后打开 /etc/supervisord.conf 在末尾添加一个需要持续运行的进程

[program:test1234]
command=/tmp/test1234

完成后启动 supervisord 服务,即可发现 test1234 进程也被启动起来了

root     14351     1  0 21:39 ?        00:00:00 /usr/bin/python /usr/bin/supervisord
root     14353 14351  0 21:39 ?        00:00:00 /tmp/test1234

当我们把 14353 进程 kill 掉,随后,会发现 test1234 进程又立即被启动起来了

root     14351     1  0 21:39 ?        00:00:00 /usr/bin/python /usr/bin/supervisord
root     15276 14351  0 21:43 ?        00:00:00 /tmp/test1234

同样使用 supervisorctl 命令也可以看到进程状态

[root@centos etc]# supervisorctl status
test1234       RUNNING    pid 19047, uptime 0:01:56