rabbitmq

RabbitMQ 消息代理,能够接收并转发消息,可以把他看成邮局。

RabbitMQ is open source message broker software (sometimes called message-oriented middleware) that implements the Advanced Message Queuing Protocol (AMQP). The RabbitMQ server is written in the Erlang programming language and is built on the Open Telecom Platform framework for clustering and failover. Client libraries to interface with the broker are available for all major programming languages.

安装

各个平台的安装官网都非常详细: https://www.rabbitmq.com/download.html

各个语言的客户端:https://www.rabbitmq.com/devtools.html

apt install rabbitmq-server

Docker 安装

docker pull rabbitmq
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmq rabbitmq:latest  

rabbitmq 默认的 latest tag 是不带管理页面的如果是要管理页面需要使用 rabbitmq:3-management

docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmq rabbitmq:3-management

启动之后访问 http://ip:15672 就能够访问管理后台

使用

列出当前 RabbitMQ 中的队列

sudo rabbitmqctl list_queues

列出 exchange

sudo rabbitmqctl list_exchanges

各个客户端的教程官方的教程非常详细可以直接参考。

reference


2018-05-25 rabbitmq , message , broker , queue

每天学习一个命令:ip 处理网络管理任务

linux中的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。ifconfig是net-tools中已被废弃使用的一个命令。iproute2 套件里提供了许多增强功能的命令,ip命令即是其中之一。只需一个ip命令,就能很轻松地执行一些网络管理任务。

常见用法

给机器设置一个IP地址

sudo ip addr add 192.168.0.193/24 dev wlan0

列出路由表条目

ip route show

显示网络统计数据

ip -s link

2018-05-22 network , linux , command , ip , ifconfig

斐讯 k3 刷机教程

k3 的折腾记录

降级

我的固件版本 V21.6.12.66

只要两步,WEB直刷,就能降级

  • 第一步,下载提供的 K3_V21.6.11.58P 固件,并在WEB管理页面手动升级处,选择这个固件刷机
  • 第二步, 选择欲降级到的固件 比如 K3_V21.5.37.246,在WEB管理页面手动升级处,选择这个固件刷机,就可以降级到 K3_V21.5.37.246

K3_V21.6.11.58P 下载地址 链接: https://pan.baidu.com/s/1rasSyjq 密码: ksxp

K3_V21.5.37.246 下载地址 链接: https://pan.baidu.com/s/1mjv2jaC 密码: xmrh

激活 Telnet

使用这个教程 激活 Telnet 端口

然后备份路由器

telnet 192.168.2.1

mount  # 查看当前挂载的U盘
cd /tmp/share/sda1/
mkdir backup
cd backup
cat /dev/mtdblock0 > mtdblock0.bin     # 备份CFE
cat /dev/mtdblock5 > mtdblock5.bin     # 备份设备信息
cat /dev/mtdblock6 > mtdblock6.bin     # 备份固件,备份固件时间可能有些长 1min左右

这个几个分区的作用

对于K3官方固件:

mtd0 boot
cfe引导分区,建议备份,还包含了部分nvram参数和MAC等信息,不要刷入别人的,也不要随意刷写这个分区。
mtd1 nvram
设置分区,不用备份,保存了路由的所有设置信息,恢复出厂时会格式化然后从cfe和当前固件复制默认参数。
mtd2 nvram_back
从名字看像是nvram的备份,实际固件没有使用,全部空白,不用备份。
mtd3 res_info
没有使用,全部空白,不用备份。
mtd4 pro_info
只有6字节数据,00904C17F234,所有机器都一样,可选备份,就算没备份把这6字节复制过去就恢复了。
mtd5 dev_info
176字节数据,好像是加密的固件的版本一些信息,刷写官方固件版本号发生变化时候这里的数据就变化,可选备份。
mtd6 linux
整个固件分区,平常刷写官方固件或者LEDE都是刷到这里,官方提供固件下载,只要cfe正常随便刷,不用备份。
mtd7 rootfs
动态的,包含在linux分区,mtd6减去当前固件内核部分,是固件的后半部分,而固件是一个整体,当然不用备份。
mtd8 brcmnand
存储分区,日志文件、自己安装的软件保存再这里,固件版本信息变化时系统会格式化,不用备份,也不要恢复。

寻找固件刷入

这里我使用 abccba94 官改固件,在页面下载固件,现在最新的已经到了 k3_v16d ,解压,得到 k3_v16d.bin 文件,复制到 U 盘,如果 U盘还连在路由器,可以使用 \192.168.2.1\ 然后远程将文件拷贝到U盘中。

然后在登录 telnet 192.168.2.1

cd /tmp/share/sda1/
cat k3_v16d.bin > /dev/mtdblock6 && reboot

将该目录下固件刷入,等待重启之后,做一次恢复出厂设置,长按 reset 键5秒。

固件大全

K3 的固件整理大全

  • 官改固件 by abccba94 http://www.right.com.cn/forum/thread-259012-1-1.html
  • 官改 By tianbaoha http://www.right.com.cn/forum/thread-212725-1-1.html
  • 梅林 By 63780223 http://www.right.com.cn/forum/thread-249788-1-1.html
  • 梅林 By laode1987 http://www.right.com.cn/forum/thread-251361-1-1.html
  • LEDE By stones http://koolshare.cn/thread-104733-1-1.html
  • LEDE By XiaoShan http://www.right.com.cn/forum/thread-215164-1-2.html
  • LEDE By ypjalt http://www.right.com.cn/forum/thread-215807-1-4.html
  • LEDE By Lean http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=214087
  • LEDE By updateing http://koolshare.cn/thread-91998-1-1.html

entware 包管理

在管理后台软件中心安装 entware 之后,可以使用命令安装很多扩展。

entware 中的包列表:

http://pkg.entware.net/binaries/armv7/Packages.html

网页终端模拟器

安装 ttyd

opkg install ttyd

然后在 webshell 中设置开启网页管理,那么直接访问 http://ip:7681 ,输入用户名和密码就能够在网页中管理路由器。

ttyd 开源在GitHub,使用C语言,websocket通信。

更多有趣的包可以查看这里

手机移动端SSH工具:

IOSTermiusPrompt 2
AndroidJuiceSSHConnectBotTermius

reference


2018-05-19 斐讯 , phicomm , k3 , 刷机 , router

个人非常喜欢的几个icon 主题

我一直用的是 Cinnamon 的桌面环境,使用 icon 主题也比较方便,这里就做个记录。

Papirus icon

地址:

安装

sudo add-apt-repository ppa:papirus/papirus
sudo apt-get update
sudo apt-get install papirus-icon-theme

Ultra flat icon

地址

安装

sudo add-apt-repository ppa:noobslab/icons
sudo apt-get update
sudo apt-get install ultra-flat-icons

更多的ICON主题可以看


2018-05-19 linux , icon-theme , unity , theme

yourls 相关工具和API调用

自己的 yourls 已经搭建完毕 ,重要的就是如何高效的用起来了, yourls 自身提供了很不错的快速访问工具,安装完毕之后直接浏览

https://域名/admin/tools.php

可以得到书签栏中的快速访问工具,直接拖拽到浏览器的地址栏就可以快速的将当前的页面地址缩短。这个工具也就不多介绍了,这篇文章主要摸索一下 yourls 的API调用,以及如何在PC,和移动端快速的使用短链接服务。

API 访问

yourls 提供了丰富的API,使用自身的API可以实现

  • 产生或者获取短链接
  • 获取短链接的统计信息,包括点击最高的链接,最后一次点击的链接,或者新产生的链接等等
  • 可以以 JSON, XML 或者纯文本输出
  • 通过用户名密码或者安全的无密码token机制授权

请求的地址

https://域名/yourls-api.php

通过 GET 或者 POST 请求(GET请求需要URL Encode)

参数

两种方式获得授权,一种是使用 username / password 对发送请求,但是这种方式不安全,可能导致用户名密码在传输过程中被截取泄露;另一种方式是使用不需要密码的 token 机制,在 admin/tools.php 页面会产生当前用户的验证 token。

动作 action 参数有很多个选项

  • shorturl 获取链接的短链接

    在使用了值之后,另外两个参数

      - `url` 用来缩短的原始链接
      - `keyword` 或者 `title` 可选参数,用来自定义短链接
    
  • expand 获取短链接的原始长链接

    将短链接展开

      - `shorturl` 值可以为 `abc` 或者完整的短链接
    
  • url-stats 获取短链接的信息

    短链接的统计信息

      - `shorturl` 值可以为 `abc` 或者完整的短链接
    
  • stats 获取链接的信息

    获取链接的信息

      - `filter` 值可以为 `top`, `bottom`, `rand`, `last`
      - `limit` 返回的数量
    
  • db-stats 获取全局的链接和点击数

输出格式 format 参数用来指定API输出的格式,有如下值

  • jsonp
  • json
  • xml
  • simple

举例

请求缩短链接

curl -X POST \
  https://gtk.pw/yourls-api.php \
  -F signature=xxxxxx \
  -F action=shorturl \
  -F url=https://gtk.pw/readme.html \
  -F format=json

返回结果

因为之前已经请求过,所以报了fail,不过结果依然能够从 shorturl 中拿到

{
    "status": "fail",
    "code": "error:url",
    "url": {
        "keyword": "OStH3",
        "url": "https://gtk.pw/readme.html",
        "title": "YOURLS: Your Own URL Shortener",
        "date": "2018-05-18 03:27:36",
        "ip": "123.123.123.7",
        "clicks": "0"
    },
    "message": "https://gtk.pw/readme.html already exists in database",
    "title": "YOURLS: Your Own URL Shortener",
    "shorturl": "https://gtk.pw/OStH3",
    "statusCode": 200
}

其他几个API同理,返回结果结构稍有差异不过都类似。

iOS 移动平台快速获取短链接

iOS 上可以借助 Workflow 快速实现,主要的步骤

  • Get Clipboard
  • Get URLs from Input
  • URL -> API地址 https://域名/yourls-api.php
  • Get Contents of URL -> 构造参数
  • Get Dictionart Value -> shorturl
  • Copy to Clipboard

然后每一次将链接复制到粘贴板,然后运行该 workflow ,短链接就在 Clipboard 中了。

第二中方法,是直接在浏览器中,在链接前面加上,yourls 的域名,比如

https://blog.einverne.info

加入yourls 的域名是 https://gtk.pw

那么在链接前加上 gtk.pw,yourls 会跳转到 admin 页面并添加该链接

gtk.pw/https://blog.einverne.info

其他平台同理,不过需要登录 admin 略麻烦。


2018-05-18 yourls , url-shorten , api , domain , linux

chevereto 备份及恢复记录

之前安装 Chevereto 时还没有折腾 Docker,后来发现 Docker 安装 实在太方便了,所以现在就将数据迁移到 Docker 中,备份和恢复的方式主要可以参考之前写的文章

备份

对于 Chevereto 这样的程序主要备份的就是数据库和文件,mysql 备份没啥说的,文件也直接打包即可。

恢复

这里主要展开下恢复,一方面在 docker-compose.yml 文件中,我映射列两个 volumes,

volumes:
  - chevereto:/var/www/html/images
  - chevereto_content:/var/www/html/content

这两个文件路径,images 主要存放的是上传的图片,而 content 目录一开始的时候我们并没有加上,导致一些系统的logo还有用户的头像消失了,我对比了下目录中存放的文件,发现 Chevereto 将这些资源文件存放在了 content 目录中,映射出来,然后恢复的时候将之前备份的内容恢复到这两个目录即可。

数据库恢复也比较容易

sudo cat backup.sql | sudo docker exec -i chevereto_db /usr/bin/mysql -u root --password=password chevereto

然后文件恢复时直接恢复到 volumes 的目录,sudo docker volume inspect volume_name 然后查看 volume 的位置,将文件解压到该目录下。

然后 chown www-data:www-data * 来改变权限即可。

这个备份和恢复的操作同理可以应用到任何类似 WordPress,Chevereto 这样的PHP应用上。


2018-05-16 chevereto , photo , backup , docker , docker-compose

HTTP协议学习笔记

HTTP 协议全称 Hyper Text Transfer Protocol 超文本传输协议,基于 TCP/IP 协议用来传递数据。HTTP 面向应用层,HTTP协议是万维网的基石。

HTTP 请求

HTTP请求由以下部分组成

  • 请求行(Request line),用来说明请求类型,要访问的资源以及所使用的HTTP版本
  • 请求头部(Request Headers),紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
  • 空行(Blank line),请求头部后面的空行是必须的
  • 请求数据也叫主体(Request Body),可以添加任意的其他数据。

HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

Request Headers

Referer

Referer 头允许客户端指定请求的URI的源地址,服务端通过检查该头信息可以知道客户端请求的资源的原始来源。

Connection

HTTP 1.1 中请求和应答头都可能出现 Connection ,表示 client 和 server 通信时对于长连接如何处理。

HTTP 响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

  • 状态行(Status line),由HTTP协议版本号, 状态码, 状态消息 三部分组成。
  • 消息报头(Response Headers),用来说明客户端要使用的一些附加信息
  • 空行(Blank line),消息报头后面的空行是必须的
  • 响应正文(Response Body),服务器返回给客户端的文本信息。

HTTP 状态码

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

理解 HTTPS

看到一篇使用信鸽来解释HTTPS的文章,信息量足够,也很生动的解释了非对称加密以及产生的问题和解法。

通过信鸽传递盒子,解释了HTTPS的非对称加密公私钥的问题

  • 鲍勃向爱丽丝送一只没有携带任何信息的鸽子。
  • 爱丽丝给鲍勃送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。
  • 鲍勃把信放进盒子中,把锁锁上然后把盒子送给爱丽丝。
  • 爱丽丝收到盒子,用钥匙打开然后阅读信息。

盒子是公钥,而爱丽丝手上的钥匙是私钥

如何信任盒子一节引入泰德这个第三方签名,在HTTPS中是认证机构。而沉重的盒子这一个小节,总结了HTTPS存在的问题,虽然加密的HTTPS要慢,但未来的趋势已经不可避免了。

长连接 VS 短连接

长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1 相对于1.0 最重要的新特性就是引入了长连接。

短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。

注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。

需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。

维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。

301 vs 302

HTTP 协议 redirect 有两个状态码 301 和 302,对于这两个状态码协议上是这么写的

  • 301 Permanently Moved
  • 302 Temporarily Moved

浏览器在处理这两个状态码时行为不一样,对于 Chrome / Firefox 会永久的缓存 301 跳转1,浏览器会尽可能的永久保存该跳转,除非手动清除浏览器缓存,或者浏览器缓存将满为新内容腾出空间。如果不想跳转被浏览器缓存,可以使用 Cache-ControlExpires 两个头。

  • Cache-Control: max-age=3600
  • Expires: Thu, 01 Dec 2014 16:00:00 GMT
  • Cache-Control: no-cache
  • Cache-Control: no-store

关于Chrome中如何清除永久的301跳转可以参考这篇文章

reference

  • wikipedia
  1. https://stackoverflow.com/a/21396547/1820217 


2018-05-15 http , web , tcp-ip

使用 flask migrate 来迁移数据结构

最近在学习使用 Flask 生成一个短链接服务时看到了 Flask-Migrate 这样一款插件,之前学习 Django 的时候自带数据库迁移工具, Flask 中也有这样一款,不过是以插件的形式出现,Flask Migrate 基于 Alembic,Alembic 是 SQLAlchemy 作者开发的数据迁移工具。

文档主页:https://flask-migrate.readthedocs.io/en/latest/

安装

pip install Flask-Migrate

在安装完成之后需要在代码中添加如下代码

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

在添加代码之后需要运行

flask db init

来初始化项目,命令运行之后会在项目中生成 migrations 文件夹,该文件夹需要添加到版本控制。

之后可以使用 migrate 命令来初始化迁移

flask db migrate

迁移脚本不会检测models 的所有变更, Alembic 目前无法检测表名修改,列名修改,其他限制可以在Alembic网站查看。

之后可以应用该迁移

flask db upgrade

运行该命令来将修改应用到数据库,以后对model的每一次修改需要重复 migrateupgrade 命令。如果要在不同机器之间同步数据库结构,只需要同步 migrations 文件夹,并且在另一台机器上运行 flask db upgrade 即可。

Flask Migrate 也支持直接使用脚本的方式运行,具体可参考官方的文档,非常易懂。


2018-05-14 flask , sql , migrate , sqlalchemy , alembic

在屏幕上显示敲击的键盘 screencast

之前在做一次 Vim 演示的时候想要更加直观的在屏幕上实时显示出当前敲击的字母,所以找到了 screencast 这个解决方法。

安装

GitHub发布页面 下载安装包

wget "https://github.com/wavexx/screenkey/archive/screenkey-0.9.tar.gz"
tar xvf screenkey-0.9.tar.gz
# 安装依赖
sudo apt-get install python-gtk2 python-setuptools python-setuptools-git python-distutils-extra

然后执行安装

sudo ./setup.py install

然后启动

screenkey

使用

然后可以设置各种参数,延迟时间,字体,大小,颜色,透明度等等

reference


2018-05-13 screencast , keyboard , linux

自驾游必备 App

今年五一开车 2000 多公里,一路上找景点,找路线,找美食,这里记录一些比较好用的 App,当然在记录这写应用的时候,又发现了其他人推荐的应用,虽然之前并没有用上,但可以做一个备份期望可以用上。

PS 部分免责声明,PS 部分我并没有深入的用过,但是口碑还不错。

去哪里

这个问题早已经应该在心中确定,但如果没有确定,可以浏览马蜂窝 站点,一来对目的地有一个基本的了解,二来可以留心目的地的路况等等。虽然市场上游记类网站和应用也是泛滥的,但是马蜂窝确实多少年来一直兢兢业业专攻旅行的网站。写到这里不免想起,一直萦绕在我脑海里面的一个疑问,其实做内容的网站很容易转型做“工具”,比如马蜂窝就可以很轻松的售卖旅行产品,包括机票火车票,住宿等等,反而携程,去哪儿这一类“工具”类网站要转型做“内容”就要难很多。虽然携程也有游记,但终究只是为买票而生的辅助。

PS. 穷游锦囊,有个叫浪浪的,常有人推荐

选好车

说到选车,我只能推荐神州租车了,其他租车行并没有接触过,所以也不好推荐。而针对性的选择一辆舒适的车就成了关键,因为可能需要长时间在车上度过,选择一辆空间大,舒适的 SUV 就比较好。而如果目的地都是平原,可以选择轻便的小汽车

PS. 并没有使用过的租租车

制定路线

推荐 Google My Maps,使用 Google My Maps 可以快速制定一条大致路线,可以从宏观上对整个路线有个了解。

google my map plan

当然还要推荐另外一个很好用的工具 Trello,然后可以制作出如下的计划

trello plan

当然真正出行的时候,少不了导航应用,Google Map 看卫星图,高德导航

google map satellite

天气

国内墨迹,国外雅虎天气

找美食

大众点评,必不可少。在不熟悉的地方,选择一个品类,往往评价不错的菜肴是不会有什么差错的。

PS. 国外似乎有这俩 Yelp 和 Trip advisor,还有预订位置的 Open Table

住宿

强推 Airbnb,虽然很久前注册过 Airbnb 但是一直没怎么使用过,然而突然发现这么好用,每一个房子主人都很友好,房子也都非常新,房子里面各种设置都很不错。但是 Airbnb 可能有一个不好的地方,就是可能有些地方并没有那么多的选择,这个时候就需要携程,马蜂窝等等有旅馆预定的应用了。

airbnb

如果不嫌弃你可以点击我的邀请链接:https://zh.airbnb.com/c/einv 注册成功后你会得到 175 的优惠券。

PS. Booking 也是个好网站。

其他

绝大部分情况下停车并没有太大问题,可是如果真的到了城市环境,有一个 ETCP 还是需要的。

当然以上大部分只能局限于国内自驾的大部分情况,国外去如果要租车,可能还需要准备驾照翻译件或者国际驾照,不同国家的国情可能都需要调整。


2018-05-11 driving , tour , travel , app , collection

电子书

Google+

最近文章

  • 又一个网页文件管理:filebrowser 之前一直使用的是 h5ai,平时也够用,不过 h5ai 是不能上传文件编写文件的,这算是一个问题吧,今天正好看到了 filebrowser,以前叫做 file manager。
  • Linux 下超好用字典 GoldenDict 最近在使用 Linux 版有道的时候发现非常卡,影响正常使用,所以就发现了这个 GoldenDict。以前在 Win 下用过 lingoes 但是无奈只有 Win 版本。
  • Linux 网络配置 昨天升级 Ubuntu ,不知为何将网卡配置覆盖了,导致一时间无法上网,然后看了一些网络配置的文章,感觉自己需要补习一下相关知识,所以有了这篇文章。
  • AES 加密算法 高级加密标准 (AES,Advanced Encryption Standard) 为最常见的对称加密算法。对称加密算法也就是加密和解密用相同的密钥。
  • 使用 alembic 迁移数据库结构 Alembic 是一个处理数据库更改的工具,它利用 SQLAlchemy 来实现形成迁移。 因为 SQLAlchemy 只会在我们使用时根据 metadata create_all 方法来创建缺少的表 ,它不会根据我们对代码的修改而更新数据库表中的列。它也不会自动帮助我们删除表。 Alembic 提供了一种更新 / 删除表,更改列名和添加新约束的方法。因为 Alembic 使用 SQLAlchemy 执行迁移,它们可用于各种后端数据库。