Category Archives: 开发

Could not create lock at /var/run/yum.pid: [Errno 28] 问题修复

环境:
Linux VM_185_189_centos 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
执行 yum update -y ,发生报错
Could not create lock at /var/run/yum.pid: [Errno 28]
执行 ps aux | grep yum 查看是否有进程冲突,发现没有。
查 google 发现是 centos 的 bug ,需要重启修复问题。
reference:
https://www.davidvandertuijn.nl/could-not-create-lock-at-varrunyumpid-errno-28-no-space-left-on-device
https://bugs.centos.org/view.php?id=14278

debian 9 安装 docker 教程

环境
Debian Stretch 9
uname -a => Linux VM-1-242-debian 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2 (2017-06-12) x86_64 GNU/Linux
1、卸载老版本:sudo apt-get remove docker docker-engine docker.io
2、更新仓库: sudo apt-get update
3、安装可以使 apt 运行在 https 协议上的依赖:sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
4、添加 docker 官方 GPG key:curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -。简单介绍下,这里的 GPG key 是公钥,用来解密加密的 docker 安装包。这是在网上安全传播发布的软件的一种方式。
5、验证 GPG key 正确安装:sudo apt-key fingerprint 0EBFCD88,看输出中 Key fingerprint 是否为 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
6、添加 docker 仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable",如果想安装 edge 或者 测试版,可以在 stable 后面加 edge 和 test
7、再次执行 sudo apt-get update 更新新添加仓库里的信息。
8、sudo apt-get install docker-ce 安装 docker,如果第六步中添加了 edge 版本,那这个命令安装的是最新版本,而不是稳定版本。在生产环境里建议安装最新的稳定版本。可以通过 sudo apt-get install docker-ce=版本号 进行安装。版本号可以通过 apt-cache madison docker-ce 命令获取。
9、验证安装成功 sudo docker run hello-world。
10、卸载 sudo apt-get purge docker-ce && sudo rm -rf /var/lib/docker
reference:
https://docs.docker.com/install/linux/docker-ce/debian/

小米手机 adb 调试无法识别问题解决

今天开发的一个页面在公司 App 安卓版本中测试发现有些问题。页面使用一种叫 xcore 的技术实现,在公司 App 中使用公司定制的内核渲染。定制的内核基于腾讯的 x5 浏览器内核。本来公司有自己开发的一套真机页面测试软件,但是疏于维护,已经废弃停止使用了。App 团队的同学推荐使用腾讯的 TBS_Studio 来测试。调试工具有了,还缺少一台安卓机子,从测试团队借来一只超级大的小米手机,不记得什么型号了。
1、需要在手机上调试,先要开启调试模式吧,手机上找系统版本号,点击 6 下开启开发者模式。
2、开启开发者模式后还需要开启 USB 调试模式:“设置”-“其他高级设置”-“开发者选项”-“USB调试”
一般情况下这样子就可以了,至少前几年是这样子,好几年没开发 H5 页面,没想到发生了这么多变化。
设置完上面两步之后,发现 TBS_Studio 还是无法识别这个小米手机。继续往上查找解决方案。
3、发现新的小米系统里,开启USB调试模式后还要开启调试端口:保持手机连接在电脑上,然后在拨号界面输入 ##717717## ,输入完成之后会看到 “Diag USB port enable” 的弹出提示,表示端口已经成功开启。
4、在电脑命令窗口中 adb kill-server,然后 adb start-server,重启 adb 服务,最后 adb devices,就可以看到设备啦
TBS_Studio 底层的连接肯定也是使用 adb 啊,adb devices 里看到了设备,TBS_Studio 自然是成功的连上了

服务器 ssh 自动断开问题

有好几种解决方案
1、最不好的一种,设置终端超时自动输入字符。对 iTerm 而言 Profile 的 Session tab 里面可以设置。缺点很明显,超时时会自动输入字符影响使用。
2、客户端 ssh 配置定时保持连接,方法是修改 ~/.ssh/config 文件,加入
Host *
ServerAliveInterval=60
这样每 60 秒给服务器发送一个 no-op 包用来保持连接。
3、对单次连接可以使用 ssh -o ServerAliveInterval=30 user@host 命令来传递 ServerAliveInterval 参数
4、服务端 ssh 配置,方法是修改 /etc/ssh/sshd_config 文件,取消
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 3
5、行代码的注释开启定时发包保持连接的功能。记得重启 ssh 服务激活配置。
6、当然还有更高级的技术。可以试试 mosh,除了保持连接外,还可以实现自动连接。需要分别在服务器和客户端安装软件。
2018-03-08 15:31:14
既然讲到了 mosh,讲下怎么安装吧。三行命令,以 debian 服务器,mac 客户机为例:
1、服务端安装 apt-get install mosh
2、配置语言 vim ~/.bashrc 添加 export LC_ALL="en_US.UTF-8",source ~/.bashrc
3、客户端 brew install mosh
下面就可以使用了
mosh user@host

wordpress 不建议给has_cap传入一个参数问题修复

装了几个插件发现 wordpress 后台报了下面的错误:
不建议给has_cap传入一个参数!用户级别已被废弃,请改用能力。 in /usr/share/wordpress/wp-includes/functions.php on line 4031
检查发现是 baidu sitemap 插件引起的,将
add_options_page("Baidu-Sitemap","Baidu-Sitemap", 8, FILE, ‘baidu_sitemap_optionpage’);
里的 8 改成 ‘manage_options’ 就可以修复问题
add_options_page("Baidu-Sitemap","Baidu-Sitemap", ‘manage_options’, FILE, ‘baidu_sitemap_optionpage’);

h5py FutureWarning 问题修复

h5py/init.py:36: FutureWarning: Conversion of the second argument of issubdtype from float to np.floating is deprecated. In future, it will be treated as np.float64 == np.dtype(float).type.
from ._conv import register_converters as _register_converters
h5py 和 numpy 版本冲突,h5py 官方已修复合并到 master 分支,但是还没发新版,在发版之前可以用降级 numpy 的方法跳过这个问题。降级命令如下:
pip install numpy==1.13.0
referece:
https://stackoverflow.com/questions/48340392/futurewarning-conversion-of-the-second-argument-of-issubdtype-from-float-to

sklearn cross_validation 过时问题解决

网上看的有些教程比较老,有跑起来报如下错误的:
/usr/local/Cellar/python/3.6.4_3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
"This module will be removed in 0.20.", DeprecationWarning)
问题修复
将 from sklearn.cross_validation import train_test_split
改成 from sklearn.model_selection import train_test_split
即可

matplotlib python is not installed as a framework 问题修复

python import matplotlib.pyplot as plt 的时候报如下错误
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of ‘python’ with ‘pythonw’. See ‘Working with Matplotlib on OSX’ in the Matplotlib FAQ for more information.
解决方法是 在 ~/.matplotlib/matplotlibrc 中加入 backend: TkAgg
reference:
https://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

mac 安装 tensorflow

1、打开终端
2、sudo easy_install pip,有可能会报错 ImportError: cannot import name ContextualZipFile,原因大概是 setuptools 有问题。需要调整 setuptools 版本。我的机子装过 pip,通过 sudo python -m pip install –upgrade –force pip 命令强制升级到最新版。
3、pip install –upgrade virtualenv 安装虚拟环境
4、创建虚拟环境,mac 下默认 python 为2.x 版本,创建2.x 虚拟环境用 virtualenv –system-site-packages targetDirectory 命令。如果想安装 3.x 虚拟环境,需要先安装 python3。可以使用 brew install python 安装 python3.然后再执行 virtualenv –system-site-packages -p python3 targetDirectory 创建 python3 的虚拟环境。targetDirectory 可以使用官方推荐的 ~/tensorflow ,也可以自己定义。
5、进入 targetDirectory 目录 cd targetDirectory,执行 source ./bin/activate 激活虚拟目录。如果用的是 csh or tcsh ,命令为 source ./bin/activate.csh。
6、虚拟环境里安装和升级 pip easy_install -U pip,保证 pip 版本大于8.1。
7、安装和升级 tensorflow 。pip install –upgrade tensorflow,如果创建的是 python3虚拟环境,pip 和 pip3其实都是指向 pip3 的,所以不需要像官方文档里一样执行 pip3 install –upgrade tensorflow。
8、如果上面安装 tensorflow 执行失败,可以通过 pip3 install –upgrade tensorflow path 安装。tensorflow path 通过 https://www.tensorflow.org/install/install_mac#the_url_of_the_tensorflow_python_package 查找。
9、到这里已经安装完成啦,开始愉快的使用 tensorflow 吧
10、使用完后 执行 deactivate 退出虚拟环境。
11、如果想卸载的话可以使用 rm -r ~/tensorflow 。
看上面的过程是不是有点繁琐。所以建议使用 docker 来使用 tensorflow。比较简单,只有一个步骤。
1、docker run -it -p 8888:8888 tensorflow/tensorflow bash
不过为了保证这行命令的执行。还需要一波的操作来安装 docker,并配置好加速服务等。好在都是值得的,学会用 docker 好处多多。

nginx 代理超时时间设置

在公司维护的一个系统内部有提供接口代理转发功能。今天有使用方找过来说自己有个接口,由于依赖的服务有问题,且暂时性的无法修复,返回数据非常慢,要一两分钟才能返回。现在这个接口在我的系统里做转发,每次请求超过一分钟就会提示接口超时。
首先先了下转发逻辑,转发逻辑底层使用 Nodejs 的 http.request,默认没有超时时间。
再看了下 Nodejs Server 的默认超时时间是 120 秒。
加断点看了下,服务内部已经拿到了转发数据,但是在拿到转发数据之前,浏览器中就显示了超时。这样子看起来不是应用逻辑的问题。
上网搜了下 nginx 的默认超时,发现 nignx 好多不同的超时设置,并且默认都是 1 分钟。
看起来问题就在这里。找公司运维重新配置了下超时时间。在对应 nginx 代理设置中加入

proxy_connect_timeout 120s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;

问题完美解决。