Go语言的安装包, 装完了需要设置三个地方(WINDOWS)

1. 在windows的PATH变量中添加go的可执行文件所在的目录

PATH=C:\Go\bin;其他设置;

2. 设置 GOROOT , 这个好理解, 直接设置成 C:\Go 即可

GOROOT=C:\Go

3. 设置GOPATH, 这个很难理解, 我的尝试

GOPATH= #就是等于空, 这个是可以在系统环境变量中设置的, 结果报错go get 包的时候报错说$GOPATH未设置
GOPATH=; #就是等于一个分号(;), go get 包开始可以运行, 不报错, 最后还是报错, 说$GOPATH未设置
GOPATH=C:\Go 或者GOPATH=C:\Go; #go get 包报错, 说$GOPATH不能设置成和GOROOT一样的

最后的解决方案是:

在C盘创建一个目录叫做GOPATH, 然后设置GOPATH=C:\GOPATH,

GOPATH=C:\GOPATH

go get 包可以使用了, 最后包会安装到 C:\GOPATH\ 目录的pkg和src文件夹里, pkg里是*.a格式的, 暂且理解为库吧, src目录里是*.go格式的源码.

总结

实际上GOPATH, 可以是一个目录的列表, 在windows环境变量里设置的时候, 多个目录使用分号(;)隔开, 在linux里多个目录使用冒号(:)隔开, 组合的一个字符串.

GOPATH是一些列用于go来查找包的目录列表. 使用import “包名” 的时候, 如果在 GOROOT里找不到, 应该会转向到你的GOPATH里去寻找.

不让GOPATH和GOROOT环境变量的值设置为同一个目录, 可能是因为不想你新安装的包, 污染了核心go的pkg和src文件.

搬家到GCP Centos 7 (SELinux)日志:

系统环境:Centos 7
selinux:开启
Apache:2.4
PHP :5.4
Mysql:GCP 云SQL

GCP目标系统基础运行LAMP环境搭建:

yun -y install httpd php php-gd php-mbstring php-mysql wget unzip zip nano
可选组件安装:
yun -y install php-opcache php-devel php-mcrypt php-pdo php-fpm php-xml php-common

接着开始网站搬家

1、备份数据库。

借助帝国备份王备份数据库:http://ebak.phome.net/

2、打包网站。

使用zip命令打包网站以及备份数据库文件
zip -q -r www.zip /var/www/
格式:zip 参数 压缩包名字 压缩文件夹目录
然后mv移动压缩包文件到你网站根目录。

3、转移打包文件。

mkdir创建一个临时目录,并进入
使用wget http://clin003.com/www.zip (记得域名替换为自己的)

4、解压。

unzip www.zip

5、导入数据库。

使用帝国备份王,恢复备份的数据库

6、测试网站。

如果只有一个网站,并且使用了默认网站目录,那么到此基本没有什么问题,一切顺利。

……

遇到Selinux之文件属性问题

然而如果你爱折腾,使用了非默认网站目录,那么可能会发现,从上一步开始,怎么搞也是
(13)Permission denied AH00035

[core:error] [pid 1519] (13)Permission denied: [client 1.11.21.21:19224] AH00035: access to /index.html denied (filesystem path '/clin003.com/index.html') because search permissions are missing on a component of the path

这个看上去很容易解决,不就是没权限么!
排查顺序如下:
cd /clin003.com/
ls -l index.html
chmod 644 index.html

然后
ls -la
chmod +x .

重启httpd服务。
问题依旧Permission denied

经过Google,翻阅文档:(13) Permission Denied
最终找到解决办法
那就是selinux开启的情况下。
ls -alZ
查看文档权限属性
通过对比默认目录和自定义目录,发现问题
[gcp@clin003.com]$ ls -alZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root root system_u:object_r:var_t:s0 ..
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
[gcp@clin003.com]$ ls -alZ
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 .
dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..
-rw-r–r–. root root unconfined_u:object_r:default_t:s0 index.html
通过对比可以发现同样的owner属性,实际的安全属性却不同
那么解决的办法就是给自定义目录及目录下文件添加“httpd_sys_content_t”属性,命令如下:
chcon -R -t httpd_sys_content_t /clin003.com

遇到Selinux之php语法错误问题解决方法

Parse error: syntax error, unexpected end of file in *.php on line *

这个比较容易解决,定位到目标行后发现是php结尾处错误!检查php.ini配置文件

找到short_open_tag

把short_open_tag = off 改为 short_open_tag = on

开启段标签模式就可一解决。

 

遇到Selinux之PHP连接MySQL出现 Can’t connect to MySQL server 的解决方法

问题情景,命令行mysql客户端可以连接成功,网站php连接不成功。

无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似:

Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13)

php.ini配置文件,php mysql组件,防火墙均检查没问题。

最终把目标盯在SElinux

getsebool -a|grep -i httpd

可以看到这里设置了httpd进程的许可模式,再仔细看一下,有一个选项:

getsebool -a|grep -i httpd_can_network_connect
httpd_can_network_connect --> off

原来是SELinux限制了httpd对外访问的权限。将其开启即可:

setsebool -P httpd_can_network_connect=1

如果对SELinux不熟悉,也可以直接修改系统配置文件 /etc/sysconfig/selinux,全局关闭SELINUX!

#SELINUX=enforcing
#把设置改为disabled
SELINUX=disabled

然后重启操作系统,即可生效。
或者,直接执行命令,可在线生效:
[gcp@clin003.com]# setenforce 0
setenforce: SELinux is disabled

至此,坑已填完,网站已搬家完成!

参考文档:

(13) Permission Denied

https://wiki.apache.org/httpd/13PermissionDenied

SELinux导致PHP连接MySQL异常

https://yq.aliyun.com/ziliao/145002

 

从Linode搬家到Google Cloud Platform

Linode已经很稳定了。而且性价比也很好。不过GCP有免费一年的使用时间,刚好Linode快该续费了,就搬吧。

备份数据库。

打包网站。

转移打包文件。

解压。

导入数据库。

测试网站。

ok!

下一篇专门记录下这几步中遇到的问题,及解决办法!

Chrome Adobe Flash 无法正常使用

Adobe Flash 无法正常使用

如果 Adobe Flash 无法正常使用,或者您看到以下错误消息,请尝试按照下文介绍的问题排查步骤操作。

  • Adobe Flash 版本太旧,因此已被屏蔽
  • 无法加载插件
  • 该网页已屏蔽以下插件

如果您使用的是移动设备,那么 Flash 无法在 Chrome 中使用。

第 1 步:开启 Adobe Flash Player

  1. 在计算机上打开 Chrome。
  2. 在顶部地址栏中,输入 chrome://plugins,然后按 Enter
  3. 在“Adobe Flash Player”下方,点击启用

第 2 步:更新 Adobe Flash Player

  1. 在计算机上打开 Chrome。
  2. 在顶部地址栏中,输入 chrome://components,然后按 Enter
  3. 在“Adobe Flash Player”下方,点击检查是否有更新
  4. 返回含有 Flash 内容的页面。如果该页面并未自动加载,请点击左上方的“重新加载”图标 重载

第 3 步:确保 Chrome 是最新版本

  1. 在计算机上打开 Chrome。
  2. 点击右上角的“更多”图标 更多
  3. 点击更新 Google Chrome。如果您没有看到此按钮,则表明您的 Chrome 是最新版本。
  4. 点击重新启动

更新 Chrome 时遇到问题?了解如何解决 Chrome 更新问题

第 4 步:从 Adobe 的网站安装 Flash Player

  1. 在计算机上打开 Chrome。
  2. 转至 https://get.adobe.com/cn/flashplayer/otherversions/
  3. 在“第 1 步”下方,选择计算机的操作系统。
  4. 在“第 2 步”下方,选择列有“PPAPI”的选项。
  5. 点击立即下载,然后按照相应步骤安装 Adobe Flash Player。

管理员须知

Adobe Flash Player 中经常会出现严重漏洞,而且这些漏洞会被漏洞攻击工具快速利用。详细了解 Adobe 的安全性

请在整个组织范围内将 Chrome 更新为最新版本,并为 Flash 设置相应支持。我们建议允许 Chrome 日后自动进行更新。

如果您关闭了更新功能,那么在 Flash 版本不安全的情况下,其内容可能会被屏蔽。如果发生这种情况,系统会提示用户更新 Chrome。您可以使用 AllowOutdatedPlugins 政策阻止系统进行提示,但我们建议您将 Chrome 更新为最新版本。

转载自:https://support.google.com/chrome/answer/6258784

apt-get 的几个命令

apt-get 就是从网上下载包,并安装到本地

手工下载 dpkg 包,而后 ”dpkg -i 包名“ 也可以

但找包,检查dependency 太辛苦,这就是 apt-get 帮助做的事情

从哪里下载, 官方url

在/etc/apt/sources.list中,可以看看

开头 deb  代表编译好的包, des-src代表源代码

distribution 代表发行版本

update 三个命令的区别

apt-get update 更新软件列表。
apt-get upgrade 更新软件。
apt-get dist-upgrade 更新系统版本。

查询可安装的 package 

很多时候忘记了package 的名字

用 apt-cache search <包名>  查询就是了,其原理应该是到 package  的index文件中去做正则匹配

查询已经安装的package 

使用 dpkg -S 命令

 

wx.config 配置信息获取

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。

通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项。

使用说明

在使用微信JS-SDK对应的JS接口前,需确保公众号已获得使用对应JS接口的权限,可登录微信公众平台进入“开发者中心”查看对应的接口权限。

注意: 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”》“功能设置”里填写“JS接口安全域名”。

步骤一:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

备注:支持使用 AMD/CMD 标准模块加载方法加载

步骤二:通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)。

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,
若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

JS-SDK使用权限签名算法

jsapi_ticket

生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

 

1、首先获取AppID和AppSecret。

2、获取access token (http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

3、用拿到的access token获取jsapi_ticket,https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

成功返回如下JSON:

{
"errcode":0,
"errmsg":"ok",
"ticket":"bx×××hFKA",
"expires_in":7200
}

获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。

4、通过微信 JS 接口签名校验工具获取签名

地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

示例:

noncestr=Wm3WZYTPz0wzccnW (可以直接随机写)
jsapi_ticket=sM4×××KP7qg
timestamp=1414587457 (单位秒)
url=http://mp.weixin.qq.com?params=value (需要调用js的页面地址)