作者:AngryFox 分类: Uncategorized March 15th, 2018 暂无评论

0×00 案例

目前正使用 Ubuntu 14.04.4 LTS,编译软件却发现 GCC 版本仍然处于 gcc-4.8 这个尴尬的老版本。
0×01 说明

幸好是 Ubuntu,toolchain/test 已经有了官方编译好的 gcc 版本。也只有 Ubuntu 才能够快速安装软件包来升级。其他系统则需要自己编译。。

0×02 解决方案

1. 添加 PPA,回车:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

假如提示未安装,则需要:

sudo apt-get install software-properties-common

2. 更新源:

sudo apt-get update

3. 更新系统:

sudo apt-get upgrade

4. 正式安装 gcc 5.3:

sudo apt-get install gcc-5 g++-5

5. 安装完成后,刷新一下:

sudo updatedb && sudo ldconfig

6. 解决 locate 找不到 gcc 的问题:

locate gcc

7. 更新系统链接:

update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-5 53 \
–slave /usr/bin/g++ g++ /usr/bin/g++-5 \
–slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-5 \
–slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-5 \
–slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-5
8. 安装完毕,可以用了。

Windows上可以安装mingw版的
关键步骤(以下步骤是必须的):
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-5 # gcc可以不升级依然用4.6,只装g++5
sudo apt-get install g++-5
sudo apt-get install gcc-5-multilib # gcc可以不升级依然用4.6,只装g++5
sudo apt-get install g++-5-multilib
sudo apt-get install g++-5-doc # 可选

可选(之后g++命令默认指向g++5.x.x)

sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-5 20
sudo update-alternatives –config g++
根据提示选择默认的版本

现在就可以使用了,通过g++ -v 命令可以查看当前gcc或者g++的版本, 在我的系统上显示如下(省略了一些):
……
Thread model: posix
gcc version 5.4.0 20160603 (Ubuntu 5.4.0-3ubuntu1~12.04)
……

安装完成后还有一个小问题就是gdb调试器还是比较老的7.4,而一些IDE在生成makefile时, 默认生成的debug版本都是以-g3或者-g来添加调试信息的,实际上从gcc4.8开始-g产生的是新的DWARF4格式的调试信息, 不是旧的DWARF2格式,这导致调试程序时gdb无法使用DWARF 4的调试信息从而给调试带来麻烦,使用eclipse cdt的同学要特别注意!

正确解决办法是:把-g或者-g3 改为-gdwarf-2就可以了,使用eclipse cdt的同学要特别注意!

附ubuntu12.04 软件源, 163是比较我一直使用比较快的, 个人感觉比cn99和sohu好点
deb http://mirrors.163.com/ubuntu/ precise main restricted
deb-src http://mirrors.163.com/ubuntu/ precise main restricted
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb http://mirrors.163.com/ubuntu/ precise universe
deb-src http://mirrors.163.com/ubuntu/ precise universe
deb http://mirrors.163.com/ubuntu/ precise-updates universe
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe
deb http://mirrors.163.com/ubuntu/ precise multiverse
deb-src http://mirrors.163.com/ubuntu/ precise multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted
deb http://mirrors.163.com/ubuntu/ precise-security universe
deb-src http://mirrors.163.com/ubuntu/ precise-security universe
deb http://mirrors.163.com/ubuntu/ precise-security multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security multiverse
deb http://extras.ubuntu.com/ubuntu precise main

deb-src http://extras.ubuntu.com/ubuntu precise main

1.下载GCC源码:
wgetftp://mirrors.kernel.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz
2.解压:
sudo tar -zxvf gcc-5.4.0.tar.gz
3.下载编译所需依赖项:
cd gcc-5.4.0 //进入解包后的gcc文件夹
sudo ./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录
4.建立编译输出目录:
sudomkdir gcc-build-5.4.0
5.进入输出目录,执行以下命令,并生成makefile文件:
cd gcc-build-5.4.0
sudo ../gcc-5.4.0/configure –enable-checking=release –enable-languages=c,c++ –disable-multilib
6.编译:
sudo make -j4
接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。

7.安装:
编译结束以后,我们就可以执行安装了:
make install

8.检查版本:
gcc
–version

gcc -v

作者:AngryFox 分类: Uncategorized March 10th, 2018 暂无评论

解决: g++: internal compiler error: Killed (program cc1plus)
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,

查了很多资料,最后发现主要原因是内存不足, 临时使用交换分区来解决吧

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
sudo mkswap /swapfile
sudo swapon /swapfile
After compiling, you may wish to

Code:

sudo swapoff /swapfile
sudo rm /swapfile

如何在 Ubuntu Linux 14.04 LTS 上安装php7
输入

$ sudo apt-get install -y language-pack-en-base
$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

或者

$ sudo add-apt-repository ppa:ondrej/php

然后更新源

$ sudo apt-get update

然后安装

$ sudo apt-get install php7.0 php7.0-cli php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-readline

然后编辑ngnix配置文件

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

作者:AngryFox 分类: Uncategorized March 8th, 2018 暂无评论

root@momo:/data/momo# make
make: Warning: File `Makefile.am’ has modification time 1.4e+04 s in the future
CDPATH=”${ZSH_VERSION+.}:” && cd . && /bin/bash /data/momo/build-aux/missing aclocal-1.14 -I build-aux/m4

查看当前的系统时间:

$ date
修改系统时间与server同步:

$ sudo apt-get install ntpdate
$ sudo ntpdate -u ntp.ubuntu.com

系统为ubuntu14.04lts
当apt-get安装软件时,都会报一个相同的错误,如下

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = “zh_CN.UTF-8″,
LC_MONETARY = “zh_CN.UTF-8″,
LC_ADDRESS = “zh_CN.UTF-8″,
LC_TELEPHONE = “zh_CN.UTF-8″,
LC_NAME = “zh_CN.UTF-8″,
LC_MEASUREMENT = “zh_CN.UTF-8″,
LC_IDENTIFICATION = “zh_CN.UTF-8″,
LC_NUMERIC = “zh_CN.UTF-8″,
LC_PAPER = “zh_CN.UTF-8″,
LANG = “en_US.UTF-8″
are supported and installed on your system.
perl: warning: Falling back to the standard locale (“C”).
那是因为安装软件时,都会去执行一个update-locale的命令,用来更新locale
这个命令是一个脚本,用perl写的,可以用whereis update-locale查到,位置在/usr/sbin/update-locale

上述报错并不是因为update-locale命令而引起,update-locale这段脚本没有问题,而是因为perl
可以使用以下命令测试:

perl -e exit
其实,真正的原因是perl为系统使用zh_CN.UTF-8,但系统不知道zh_CN.UTF-8是什么东西

解决方法

解决方法也很简单

apt-get install language-pack-zh-hans
安装一个中文语言,系统就知道zh_CN.UTF-8了,这个时候用perl就不会报错了

深入了解

这种情况一般是vps比较常见,因为一般都是用ssh的方式连接到vps上的
sshd有这个机制,会把客户机上的语言环境带到远程的机器上
客户机一般都会设置zh_CN.UTF-8语言,用来显示中文,而远端的vps一般就只有en_US.UTF-8zh_CN.UTF-8一旦带过去就会报找不到的错误

perl: warning: Setting locale failed.
apt-get install language-pack-zh-hans
安装一个中文语言,系统就知道zh_CN.UTF-8了,这个时候用perl就不会报错了
解决办法是:
vi /root/.bashrc
在最底部添加上一句
export LC_ALL=C
或者直接运行
#echo “export LC_ALL=C” >> /root/.bashrc
然后执行一下:
source /root/.bashrc

作者:AngryFox 分类: Uncategorized March 5th, 2018 暂无评论

Ubuntu12.04的crontab默认使用nanos,这个编译器相当难用,我们一般得把它换成vim,使用以下命令即可:

export EDITOR=vim

修改后最好重启一下crontab

/etc/init.d/cron stop
/etc/init.d/cron start

Ubuntu防火墙 UFW 设置
1.安装

sudo apt-get install ufw

2.启用

sudo ufw enable
sudo ufw default deny

运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。

3.开启/禁用

sudo ufw allow XXXXXXXX
sudo ufw deny XXXXXXXX

打开或关闭某个端口,例如:

sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口

sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口

sudo ufw allow 53 允许外部访问53端口(tcp/udp)

sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口

sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53

sudo ufw deny smtp 禁止外部访问smtp服务

sudo ufw delete allow smtp 删除上面建立的某条规则

4.查看防火墙状态

sudo ufw status
UFW 使用范例:

允许 53 端口
$ sudo ufw allow 53

禁用 53 端口
$ sudo ufw delete allow 53

允许 80 端口
$ sudo ufw allow 80/tcp

禁用 80 端口
$ sudo ufw delete allow 80/tcp

允许 smtp 端口
$ sudo ufw allow smtp

删除 smtp 端口的许可
$ sudo ufw delete allow smtp

允许某特定 IP
$ sudo ufw allow from 192.168.254.254

删除上面的规则
$ sudo ufw delete allow from 192.168.254.254

参考 http://wiki.ubuntu.org.cn/Ufw使用指南

使用apt-get进行软件的install或update时,有时会出现以下提示信息:
E: Could not get lock /var/lib/dpkg/lock – open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

原因是有可能有其他的apt-get进程在活动。
解决办法,把apt-get进程找出来,杀死!
ps aux | grep apt-get
sudo kill -9

如果再次执行apt-get,还是有这样情况出现,删除/var/lib/dpkg/lock文件,即可。

解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl

如果是ubuntu
解决办法:

  1. 检查/usr/bin和/usr/local/bin目录是否有多个版本的curl。  
  locate -r /curl$
2.删掉其中一个,若删除后者出现找不到curl, locate curl做软连接
ln -s /usr/bin/curl /usr/local/bin/curl

ubuntu删除所有的curl 然后 apt-get install curl // 通过这个语句安装,缺失的库,会自己补上!

安装curl的时候装了多个版本,默认路径是在前者。
一般用 which curl, whereis curl 或 mdfind curl 之类的方法找到该命令

如果你关注搜索到这篇文章,那么我可以合理怀疑你被apt-get的几个卸载命令有点搞晕了。

apt-get的卸载相关的命令有remove/purge/autoremove/clean/autoclean等。具体来说:

apt-get purge / apt-get –purge remove
删除已安装包(不保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,而且不保留配置文件

apt-get autoremove
删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包),保留配置文件。

apt-get remove
删除已安装的软件包(保留配置文件),不会删除依赖软件包,且保留配置文件。

apt-get autoclean
APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在 /var/cache/apt/archives/中,apt-get autoclean 只会删除 /var/cache/apt/archives/ 已经过期的deb。

apt-get clean
使用 apt-get clean 会将 /var/cache/apt/archives/ 的 所有 deb 删掉,可以理解为 rm /var/cache/apt/archives/*.deb。

那么如何彻底卸载软件呢?
具体来说可以运行如下命令:

# 删除软件及其配置文件
apt-get –purge remove # 删除没用的依赖包
apt-get autoremove # 此时dpkg的列表中有“rc”状态的软件包,可以执行如下命令做最后清理:
dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P

当然如果要删除暂存的软件安装包,也可以再使用clean命令。

作者:AngryFox 分类: Uncategorized January 6th, 2018 暂无评论

使用 Certbot 工具让你的网站秒配 HTTPS 证书。
Certbot
Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.
Certbot是由 Let’s Encrypt 一个开放免费证书颁发机构的EFF、Mozilla和其他开发者推出的,易于客户端获取网站加密证书。
特点

简单易用、免费
自动化配置
证书无限免费续签
效率极高,一次安装,再配置其他站点 https 证书只需要 3 分钟
PS: 因为测试服务器站点过多,每次使用 acme-tiny 脚本配置证书都要十多分钟时间,为了提高效率,就使用了 Let’s Encrypt 官网推荐的自动部署脚本。

官方网站: https://certbot.eff.org
选择自己的服务器和操作系统环境,Certbot 官方会给出详细的安装过程和使用方法,我的环境是 Nginx + Ubuntu 14.04,安装过程如下
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
or sudo apt-get update;sudo apt-get install software-properties-common;sudo add-apt-repository ppa:certbot/certbot;sudo apt-get update;sudo apt-get install python-certbot-nginx;
安装成功之后把 certbot 加入系统全局变量 PATH 中。

获取证书前需要先停止 Nginx 服务
service nginx stop

直接在命令行运行
certbot 根据提示完成配置
或者
生成单域名证书
certbot certonly –standalone –email your@email.com -d yourdomain.com
一次生成多域名证书:

certbot certonly –standalone –email your@email.com -d yourdomain.com -d yourdomain2.com
证书配置成功后提示:
https可以访问到数据
4.查看网站生成的证书

tree /etc/letsencrypt/live/
5.配置 Nginx

…… 其他配置

listen 443 ssl;

ssl_certificate /etc/letsencrypt/live/{yourdomain}.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{yourdomain}.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
6.重启 Nginx

service nginx start
此时再加上 https:// 访问你的网站,就会有一把可爱别致的小绿锁 Secure^_^

Let’s Encrypt 生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书

certbot renew
在生成证书的时候遇到一个问题
Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping
这是因为 nginx 服务没有关闭,执行 service nginx stop 即可。
原文地址

https://certbot.eff.org/docs/install.html

作者:AngryFox 分类: Uncategorized January 3rd, 2018 暂无评论

GRANT ALL PRIVILEGES ON *.* TO ‘mmp’@'%’ IDENTIFIED BY ‘#mmp2018′ WITH GRANT OPTION;
sudo apt-get install ufw

使用方法
1 启用
sudo ufw enable
sudo ufw default deny
作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。

2 关闭
sudo ufw disable

2 查看防火墙状态
sudo ufw status

3 开启/禁用相应端口或服务举例
sudo ufw allow 80 允许外部访问80端口
sudo ufw delete allow 80 禁止外部访问80 端口
sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端口
sudo ufw deny smtp 禁止外部访问smtp服务
sudo ufw delete allow smtp 删除上面建立的某条规则
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口

可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16

推荐设置
sudo apt-get install ufw
sudo ufw enable
sudo ufw default deny

这样设置已经很安全,如果有特殊需要,可以使用sudo ufw allow开启相应服务。

作者:AngryFox 分类: Uncategorized December 15th, 2017 暂无评论

[root@iZ945cveihaZ svn]# scp -r /home/wwwroot/app.missapp.com root@119.23.140.89:/jdata/app.missapp.com
使用nohup在后台运行scp

需要从远程拷贝一个比较大的文件,所以要让SCP在后台运行
google搜了一下都是说使用ssh的public key让两台机器可以不用密码连接
但不是每个人都有这个条件允许两台机器无密码通行的
所以可以使用下面的方法实现
1.nohup scp user@server:path/file localpath
2.输入密码
3.按Ctrl+z挂起当前进程
4.使用命令bg让挂起的进程继续运行

作者:AngryFox 分类: Uncategorized December 8th, 2017 暂无评论

zk-snarks anonymity

应用性能治理系统——APM(Application Performance Management)来解决这个问题。

在APM产品选型时,我们考虑到当当目前系统的现状,得出了以下的结论:
APM产品需要性能极高,嵌入线上系统的探针需要尽量少的资源来完成调用信息获取,APM自身也需要能承载百亿量级的入库和查询操作的能力。
APM产品需要方便部署使用,尽量不改动或者轻微改动代码即可实现系统追踪。
APM系统可以提供系统依赖关系、SLA指标和调用耗时甘特图。
APM产品方便定制开发,方便扩展内部不同语言的系统使用和提供各种的统计数据。
排行榜系统逐步实现了一套较高可用性、低延迟、低成本的排行榜解决方案(涵盖自动接入、调度、容灾、资源隔离、监控、扩缩容、数据冷热分离等)

关键隐私问题,安全共识和契约共识
AOF是什么:
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
Aof保存的是appendonly.aof文件。

优势
每修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失
不同步:appendfsync no 从不同步
劣势
相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

无优惠的场景、秒杀场景、满减场景、拼团场景
无优惠的场景分为“店铺首页、商品详情页、加购物车页、下单页、支付页、支付成功页”等等

链路压测的实施分为以下几个阶段:

基础中间件开发,各种框架升级开发,压测器研究与脚本开发。
业务升级与线下验证(人工点击,数据落影子库)
业务升级与线上验证(人工点击,数据落影子库)
数据工厂数据准备。
小流量下发验证(用gatling下发,数据落影子库)
大流量量压测与系统扩容

了解 CPython 的读者应该都知道,GIL(Global Interpreter Lock)的存在,制约了 Python 应用的并发能力。
Grumpy 是一个实验性的 Python 运行时。它将 Python 代码翻译成 Go 程序,转译(transpiled)得到的程序可以与 Go 运行时无缝集成。
Go 的垃圾收集来管理对象生命周期,而不再是依赖引用计数。

作者:AngryFox 分类: Uncategorized November 6th, 2017 暂无评论
<!--<audio autoplay="autoplay" loop="loop" src="http://app.missapp.com/file/uploads/20171103/1509703117.mp3"></audio>-->
在微信上面的代码iOS上无法播放
修改为

document.addEventListener("WeixinJSBridgeReady", function () {
    var audio = new Audio();
    audio.src = "http://app.missapp.com/file/uploads/20171103/1509703117.mp3"
    audio.play();
}, false);
正常播放

iphonex的 5.8封面图尺寸
5.8 英寸 Retina 显示屏
纵向分辨率为 1125 x 2436 像素
横向分辨率为 2436 x 1125 像素