QUSIR


  • Startseite

  • Archiv

linux 系统下将pyqt打包成可执行文件

Veröffentlicht am 2017-06-27

##1.解压源码包,前提安装了setuptools

官网http://www.pyinstaller.org/

unzip pyinstaller-python3.zip

##2.安装
cd pyinstaller-python3
python setup.py build
python setup.py install
安装完之后在/usr/local/bin 生成pyinstaller可执行文件

##3.编译.py文件生成可执行文件
pyinstaller test.py
在目录下生成 build和dist文件夹 可执行文件在dist目录下

clipboard

mantisbt 2.5.0在nginx服务器上安装

Veröffentlicht am 2017-06-15

##说明
由于安装2.5.0.版本失败,检测配置没有错,但是无法生成config_inc.php文件所以考虑安装2.0.0版本然后再覆盖安装。

##环境
ubuntu14.04 nginx mysql

##安装mantisbt-2.0.0

wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.0.0/mantisbt-2.0.0.tar.gz/download -O mantisbt.tar.gz

tar xzvf mantisbt.tar.gz

cp mantisbt /var/www/

http://你的网址/admin/install.php

msm8909_gpio5.png

##安装过程视频教程

How to Install Mantis Bug Tracker v2 with Nginx and PHP 7

##参考
http://www.cnblogs.com/snooper/archive/2009/09/07/1561715.html

https://tjosm.com/6226/install-mantisbt-v2-ubuntu-php7-nginx-virtualmin/

##安装mantisbt-2.5.0

直接覆盖2.0.0版本

tar xzvf mantisbt2.5.0.tar.gz
cp -r mantisbt2.5.0 /var/www/mantisbt

高通MSM8909的gpio驱动编程

Veröffentlicht am 2017-06-09

#接收gpio信号输入

##1. 平台相关配置文件msm8909-mtp.dtsi文件中找到gpio_keys节,增加蓝字相关内容
msm8909_gpio5.png

##2. 引脚相关配置文件msm8909-pinctrl.dtsi文件中找到tlmm_gpio_key节,增加或更改红字相关内容
msm8909_gpio6.png

##3. device\qcom\msm8909\gpio-keys.kl中增加键盘扫描码对应的键盘码
键盘码是Android系统收到底层驱动提交的扫描码后,向App发送的键盘码,比如本例

key 77    F7  

扫描码对应给App的键盘码是F7,F7对应的值在frameworks\base\core\java\android\view\KeyEvent.java有现成定义:
public static final int KEYCODE_F7 =137;
另外,在root过的Android设备上直接更改system\usr\keylayout\gpio-keys.kl文件,可以为设备的按键直接更改功能。

议将整个源代码重新编译一下,在进行烧写。

##gpio口对应关系
msm8909-mtp.dtsi文件
msm8909_gpio1
msm8909-pinctrl.dtsi文件
msm8909_gpio2.png
原理图上对应管脚
msm8909_gpio3.png
硬件手册对应gpio口
msm8909_gpio4.png

##说明
配置好gpio后,重新编译源代码烧写系统,短接该gpio口就可以在java侧收到F7键盘消息,通过该消息监听该gpio口输入。

监听键盘消息参照
http://www.cnblogs.com/QUSIR/p/6245848.html

nginx反向代理

Veröffentlicht am 2017-06-08

反向代理

什么是反向代理

反向代理(Reverse Proxy)方式是指用代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

举个例子,一个用户访问 http://www.example.com/readme,但是 www.example.com 上并不存在 readme 页面,它是偷偷从另外一台服务器上取回来,然后作为自己的内容返回给用户。但是用户并不知情这个过程。对用户来说,就像是直接从 www.example.com 获取 readme 页面一样。这里所提到的 www.example.com 这个域名对应的服务器就设置了反向代理功能。

反向代理服务器,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。如下图所示:

proxy

反向代理典型应用场景

反向代理的典型用途是将防火墙后面的服务器提供给 Internet 用户访问,加强安全防护。反向代理还可以为后端的多台服务器提供负载均衡,或为后端较慢的服务器提供 缓冲 服务。另外,反向代理还可以启用高级 URL 策略和管理技术,从而使处于不同 web 服务器系统的 web 页面同时存在于同一个 URL 空间下。

Nginx 的其中一个用途是做 HTTP 反向代理,下面简单介绍 Nginx 作为反向代理服务器的方法。

场景描述:访问本地服务器上的 README.md 文件 http://localhost/README.md,本地服务器进行反向代理,从 https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md 获取页面内容。

nginx.conf 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
worker_processes 1;
pid logs/nginx.pid;
error_log logs/error.log warn;
events {
worker_connections 3000;
}
http {
include mime.types;
server_tokens off;
## 下面配置反向代理的参数
server {
listen 80;
## 1. 用户访问 http://ip:port,则反向代理到 https://github.com
location / {
proxy_pass https://github.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
## 2.用户访问 http://ip:port/README.md,则反向代理到
## https://github.com/.../README.md
location /README.md {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md;
}
}
}

成功启动 Nginx 后,我们打开浏览器,验证下反向代理的效果。在浏览器地址栏中输入 localhost/README.md,返回的结果是我们 GitHub 源代码的 README 页面。如下图:

proxy_example

我们只需要配置一下 nginx.conf 文件,不用写任何 web 页面,就可以偷偷地从别的服务器上读取一个页面返回给用户。

下面我们来看一下 nginx.conf 里用到的配置项:

(1) location

location 项对请求 URI 进行匹配,location 后面配置了匹配规则。例如上面的例子中,如果请求的 URI 是 localhost/,则会匹配 location / 这一项;如果请求的 URI 是 localhost/README.md,则会匹配 location /README.md 这项。

上面这个例子只是针对一个确定的 URI 做了反向代理,有的读者会有疑惑:如果对每个页面都进行这样的配置,那将会大量重复,能否做 批量 配置呢?此时需要配合使用 location 的正则匹配功能。具体实现方法可参考本书的 URL 匹配章节。

(2) proxy_pass

proxy_pass 后面跟着一个 URL,用来将请求反向代理到 URL 参数指定的服务器上。例如我们上面例子中的 proxy_pass https://github.com,则将匹配的请求反向代理到 https://github.com。

(3) proxy_set_header

默认情况下,反向代理不会转发原始请求中的 Host 头部,如果需要转发,就需要加上这句:proxy_set_header Host $host;

除了上面提到的常用配置项,还有 proxy_redirect、proxy_set_body、proxy_limit_rate 等参数,具体用法可以到Nginx 官网查看。

正向代理

既然有反向代理,自然也有正向代理。简单来说,正向代理就像一个跳板,例如一个用户访问不了某网站(例如 www.google.com),但是他能访问一个代理服务器,这个代理服务器能访问 www.google.com,于是用户可以先连上代理服务器,告诉它需要访问的内容,代理服务器去取回来返回给用户。例如一些常见的翻墙工具、游戏代理就是利用正向代理的原理工作的,我们需要在这些正向代理工具上配置服务器的 IP 地址等信息。

haproxy代理搭建

Veröffentlicht am 2017-06-08

##1.编译安装
cd /usr/local/src
tar zxf haproxy-1.7.5.tar.gz
cd haproxy-1.7.5
make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

##2.设置haproxy

mkdir -p /usr/local/haproxy/conf  #创建配置文件目录
mkdir -p /etc/haproxy #创建配置文件目录
touch /usr/local/haproxy/conf/haproxy.cfg  #创建配置文件
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg

###2.1添加配置语言的软链接
cp -r /usr/local/src/haproxy-1.7.2/examples/errorfiles /usr/local/haproxy/errorfiles

###2.2拷错误页面
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles

###2.3添加软连接
mkdir -p /usr/local/haproxy/log

###2.4创建日志文件目录
touch /usr/local/haproxy/log/haprosy.log

####2.5创建日志文
ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log

###2.6添加软连接
cp -r /usr/local/src/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy

###2.7复制开机启动脚本文件
chmod +x /etc/init.d/haproxy

###2.8添加脚本执行权限
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin

##3.配置haproxy.cfg参数
vim /usr/local/haproxy/conf/haproxy.cfg

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log    127.0.0.1 local3          ###[err warning info debug] 
    chroot  /usr/local/haproxy
    pidfile  /var/run/haproxy.pid   ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 
    maxconn  4000                   ###最大连接数,默认4000
    user   haproxy
    group   haproxy
    daemon                          ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode   http             ###默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    log    global           ###采用全局定义的日志
    option  dontlognull     ###不记录健康检查的日志信息
    option  httpclose       ###每次请求完毕后主动关闭http通道 
    option  httplog         ###日志类别http日志格式 
    option  forwardfor      ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
    option  redispatch      ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    timeout connect 10000   #default 10 second timeout if a backend is not found
    timeout client 300000   ###客户端连接超时
    timeout server 300000   ###服务器连接超时
    maxconn     60000       ###最大连接数
    retries     3           ###3次连接失败就认为服务不可用,也可以通过后面设置 
####################################################################
listen stats
        bind 0.0.0.0:7766           #监听端口  
        stats refresh 30s           #统计页面自动刷新时间  
        stats uri /stats            #统计页面url  
        stats realm Haproxy Manager #统计页面密码框上提示文本  
        stats auth admin:admin      #统计页面用户名和密码设置  
        #stats hide-version         #隐藏统计页面上HAProxy的版本信息
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
    bind 0.0.0.0:80
    acl url_static path_beg    -i /static /images /javascript /stylesheets
    acl url_static path_end    -i .jpg .gif .png .css .js

    use_backend static if url_static     ###满足策略要求,则响应策略定义的backend页面
    default_backend   dynamic            ###不满足则响应backend的默认页面

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------

backend static
    balance     roundrobin                 ###负载均衡模式轮询
    server      static 127.0.0.1:80 check ###后端服务器定义

backend dynamic
    balance    roundrobin
    server         websrv1 10.252.97.106:80 check maxconn 2000
    server         websrv2 10.117.8.20:80 check maxconn 2000

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#errorloc  503  http://www.osyunwei.com/404.html
errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http

##4.启动haproxy
sudo /usr/local/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

##5.设置haproxy日志
vim /etc/rsyslog.conf
添加

local7.*        /var/log/boot.log

local3.*       /var/log/haproxy.log

保存后重启服务
service rsyslog restart

##6.浏览器打开haproxy的监控页面
输入http://192.168.141.188:7766/stats

说明:1080是haproxy配置文件中监听的端口,stats是配置文件中的监听名称
用户名密码是admin:admin也是配置文件中定义的

##7.关闭haproxy

sudo ps -ef|grep haproxy
sudo kill 进程pid

查看端口

sudo netstat  -tnl 

##8.用到源码和配置文件
haproxy-1.7.5.tar.gz

haproxy.cfg

espeak编译安装

Veröffentlicht am 2017-06-07

##说明
 eSpeak是用于Linux和Windows的英文和其他语言的紧凑型开源软件语音合成器。eSpeak使用“共振峰综合”方法。这允许以小尺寸提供许多语言。讲话清晰,可以高速使用,但并不像基于人类语音记录的较大合成器那样自然或平滑。

注意:在安装espeak之前必须安装portaudio框架,用于驱动声卡。

espeak官网

##编译portaudio
7z x portaudio.7z
cd portaudio
./configure
make
sudo make install

##编译espeak
7z x espeak-1.48.01-source.7z
cd espeak-1.48.01-source/
cd src/
make
sudo make install

##安装中文和粤语支持
在安装中文支持前,保证espeak编译安装成功

进入/espeak-1.48.01-source/dictsource$目录
安装中文

espeak --compile=zh

安装粤语

espeak --compile=zh-yue

##测试

默认

espeak  hello -w hello.wav

粤语

espeak -vzhy 你好 -w test.wav

中文

espeak -vzh 你好 -w test.wav

##编译需要的源码

zhy_list.zip

zh_listx.zip

portaudio.7z

espeak-1.48.01-source.7z

##遇到问题

###问题1
wavegen.o: In function WavegenOpenSound() [clone .part.2]': wavegen.cpp:(.text+0x26c): undefined reference toPa_StreamActive’
wavegen.o: In function WavegenCloseSound()': wavegen.cpp:(.text+0x58e): undefined reference toPa_StreamActive’
collect2: error: ld returned 1 exit status
Makefile:105: recipe for target ‘speak’ failed
make: * [speak] Error 1

###解决
cp portaudio19.h portaudio.h
make clean
make

使用docker搭建android源码编译环境

Veröffentlicht am 2017-06-07

##说明
 由于工作原因要对android源码进行编译,用于修改底层驱动,对系统进行定制。但是编译过程中要使用特定ubuntu版本和gcc版本,所以会比较麻烦。当时第一反映是安装VMware虚拟机,装一个指定版本然后将源码拷贝进去再编译,该方法是可行的。后来才发现很麻烦,虚拟机很占用空间,于是决定使用docker试试,实验了一番,还真可以,方便占用存储小,启动起来快。

##环境
主机:Ubuntu 16.04.2 LTS 64位 16G内存 500G硬盘 16个内核

docker版本: 17.03.0-ce

docke镜像:ubuntu12.04 64位

##同步镜像

sudo docker pull registry.cn-shenzhen.aliyuncs.com/qusir/ubuntu12.04_msm8909:0.1

以上镜像我已经定制好了的版本ubuntu12.04 64位,安装好了依赖项和gcc,可以直接使用msm8909高通平台编译。

##修改后保存镜像

###docker提交镜像
先查看运行镜像的ID,不要将镜像停止运行,然后用以下命令

速冻docker commit 61412230ae46 registry.cn-hangzhou.aliyuncs.com/qusir/liang

###添加镜像
sudo docker tag 70838701e83a registry.cn-hangzhou.aliyuncs.com/qusir/liang:0.1

###推送镜像
sudo docker push registry.cn-hangzhou.aliyuncs.com/qusir/liang:0.1

##编译源码

###启动镜像,映射目录

docker run -it --rm -v /home/liang/data:/data registry.cn-shenzhen.aliyuncs.com/qusir/ubuntu12.04_msm8909 bash

将主机上的/home/liang/data的目录映射到docke的/data目录下

###编译源码
初始化环境变量

source ./build/envsetup.sh 

选择编译选项

lunch

选择

34. msm8909-userdebug

开始编译

make -j8

###关闭镜像
Ctrl+D退出镜像

xposed各种机型安装方法

Veröffentlicht am 2017-05-27

##说明
之前我一直以为xpose框架是针对特殊机型,现在才发现其实针对不同的android版本装xpose版本,跟机型没有关系。前提是是手机已root和安装了第三方recovery,比如TWRP。

##刷入recovery方法

参照我的另一篇博客

Android手机刷recovery

##刷入recovery后就可以很方便root

一种通用root方法,不针对机型。

各种Android手机Root方法

##以recovery方式刷入下xposed framework
Xposed Framework下载地址
其中,sdk21,sdk22,sdk23,分别对应Android 5.0,5.1, 6.0.
根据,手机ROM版本和处理器类型选择Xposed Framework刷机包。

比如,中兴Blade a1移动版(5.1, arm64),我选择了刷机包xposed-v86-sdk22-arm64.zip 和卸载包xposed-uninstaller-20150831-arm64.zip
下载之后,将这两个压缩包,拷贝到SD卡根目录下。

###安装
1.重启手机,进入Recovery界面。(adb reboot recovery)
view
2.选择【安装刷机包】进入下级页面,选择【从SD卡选择ZIP文件】

3.在SD卡根目录找到Xposed Framework刷机包(xposed-v86-sdk22-arm64.zip),并选择。
view
4.滑动底部的滑动条,确认刷入,等待提示刷机完成。

5.重启手机,等待进入桌面。

###卸载
1.如果刷入Xposed Framework刷机包之后,无限重启,进不去桌面怎么办?

2.那就按照下面提示,卸载掉Xposed Framework。

3.重启手机,进入Recovery界面。(adb reboot recovery)

4.选择【安装刷机包】进入下级页面,选择【从SD卡选择ZIP文件】

5.在SD卡根目录找到Xposed Framework卸载刷机包(xposed-uninstaller-20150831-arm64.zip),并选择。
滑动底部的滑动条,确认刷入,等待提示刷机完成。

6.重启手机,等待进入桌面。

###Xposed Installer
这是一个管理Xposed模块的官方应用。通过它,你可以随时禁用或者启用Xposed模块,然后重启手机。
对于Android 5.0以上的手机,请前往XDA论坛主题贴下载附件 XposedInstaller_3.0_alpha4.apk,并安装。
下载地址:http://forum.xda-developers.com/showthread.php?t=3034811
如果你看到以下界面,恭喜你,Xposed Framework安装完成。
view

##参考

http://www.snowdream.tech/2016/09/02/android-install-xposed-framework/

交叉编译pjsip

Veröffentlicht am 2017-05-12

##说明
 PJSIP是一种以C语言编写的免费开源多媒体通信库,实现基于标准的协议,如SIP,SDP,RTP,STUN,TURN和ICE。它将信令协议(SIP)与丰富的多媒体框架和NAT穿越功能相结合,成为可移植的高级API,适用于从台式机,嵌入式系统到手机等几乎任何类型的系统。

官方网址为http://www.pjsip.org/

##修改编译配置文件
配置文件路径为

pjproject-2.4.5\pjlib\include\pj\config_site.h

添加以下宏定义

#define PJMEDIA_AUDIO_DEV_HAS_ALSA        1
#undef PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO
#define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO        0
#include <pj/config_site_sample.h>

#define PJMEDIA_RESAMPLE_NONE   1
#define PJMEDIA_HAS_SPEEX_AEC   0
#define PJMEDIA_HAS_VIDEO   0
#define PJMEDIA_CONF_USE_SWITCH_BOARD 1

##编译安装
用的是 pjproject-2.4.5版本

直接在源码目录下执行以下指令

./configure --prefix=/usr/local/arm_linux_4.2 --host=arm-linux  LIBS=-ldl

make dep

make

##运行例子程序
view

##音频驱动切换

 Linux音频驱动分为alsa和oss,oss是比较旧的驱动,pjsip支持这两种音频驱动,默认是oss,蓝天门口机的内核使用的是alsa驱动,运行例子程序的时候会出现以下问题。

view

###解决方法
修改config_site.h文件 在pjproject-2.4.5\pjlib\include\pj目录下

增加

#define PJMEDIA_AUDIO_DEV_HAS_ALSA 1

ndk编译pjsip

Veröffentlicht am 2017-05-12

#环境
pjsip版本pjproject-2.5.5.tar.bz2

ndk版本android-ndk-r10e

##配置ndk环境变量

export ANDROID_NDK_ROOT=/home/gsta/liang/android-ndk-r10e

##修改配置文件

vim ./pjlib/include/pj/config_site.h

#define PJ_CONFIG_ANDROID 1
#include <pj/config_site_sample.h>

##配置编译环境

./configure-android 

##编译
make dep && make clean && make

##注意:整个编译过程是在linux系统下进行的

123…6

我思,故我在!

58 Artikel
© 2018 我思,故我在!
Erstellt mit Hexo
|
Theme — NexT.Muse v5.1.4