Why so serious?

卯君,理工男,学酥


  • 首页

  • 关于

  • 归档

  • 标签

树莓派安装shadowsocks

发表于 2017-04-23

树莓派怎么翻墙网上的教程一堆一堆的,不过过程中也是有些坎坷,记录一下吧。

安装shadowsocks

一开始不明白其中的区别,就安装了shadowsocks

sudo apt-get install shadowsocks

安装完发现多了两个命令,sslocal和ssserver,ssserver显然是给服务端用的,于是用了sslocal

编辑了一下配置文件

sudo vim /etc/shadowsocks/config.json

{
    "server":"你的服务端IP,如VPS的IP",
    "server_port": 服务端设置的端口,
    "local_address":"0.0.0.0",
    "local_port":1080,
    "password":"服务端设置的密码",
    "timeout":300,
    "method":"aes-256-cfb"
}

后来才发现这个sslocal只支持socks5协议,属于正向代理,ss-redir才是我需要的透明代理,这个命令的名字就是 redirect 的缩写,也就是转发。

关于如何验证sslocal的有效性,使用如下命令将socks5转成http:

# 安装 
sudo apt-get install polipo
# 停止服务 service polipo stop
# 重新配置来源端口 sudo polipo socksParentProxy=localhost:1080 &
# 通过polipo默认的8123端口的http代理访问谷歌 http_proxy=http://localhost:8123 curl www.google.com

回到正题,现在的问题是如何安装ss-redir了,找到官方的github,看了下README。网上所有教程都是说 clone 之后运行 configure make make install这一套,可下载一看目录里根本就没有可执行的 configure 文件。

最后在README中看到,推荐的方式不是自行编译(试了下在autogen这一步就走不下去了。。)而是通过源安装,具体如下:

sudo sh -c ‘printf “deb http://httpredir.debian.org/debian jessie-backports main” > /etc/apt/sources.list.d/jessie-backports.list’

sudo apt-get update

sudo apt-get -t jessie-backports install shadowsocks-libev

安装步骤中会提示你源不可信,别管它。

装完后就有了ss-redir和ss-tunnel两个命令,配置都不用改,执行命令开启:

ss-redir -u -c /etc/shadowsocks/config.json -f /var/run/shadowsocks.pid &

配置iptables

iptables 的思路是这样的,对于以下 IP 的访问直接返回(就是不做任何处理):

  • shadowsocks 服务器端 IP(我的 VPS 地址)
  • 内网地址
  • 中国境内的 IP

对于其他的 IP 则转发到 shadowsocks 的1080端口,走代理。

基础概念

我也iptables的小白,这些知识都是通过man iptables查到的

  • 既然都叫 iptables 了,table 必然是一个最基础的元素,一共有五张表,分别是 filter,nat,mangle,raw 和 security。
  • 其中我们需要关心的是 nat 这张表,它是在新链接建立时使用的。
  • table 下有一层 chain 的概念,nat 这张表包含三个 chain,分别是:
    • PREROUTING:当报文进来时触发修改
    • OUTPUT:本地产生的报文在进行路由前触发修改
    • POSTROUTING:当报文要出去时出发修改

具体步骤

在官方github的 Advanced usage 中有记录详细步骤,搬运一下(去除了UDP的部分,增加了中国境内IP段排除,增加了规则保存)。

# 创建一个新的 chain
root@Wrt:~# iptables -t nat -N SHADOWSOCKS
# 跳过 shadowsocks 服务器端的地址 # 这个非常重要!!! root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN
# 跳过局域网和其他不想走代理的地址 root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# 跳过中国境内的IP段 root@Wrt:~# wget -c http://ftp.apnic.net/stats/apnic/delegated-apnic-latest root@Wrt:~# cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print "iptables -t nat -A SHADOWSOCKS -d "$4 "/" 32-log($5)/log(2)" -j RETURN"}' > cmd.sh root@Wrt:~# sh cmd.sh root@Wrt:~# rm delegated-apnic-latest root@Wrt:~# rm cmd.sh
# 其他地址将会被转发到 shadowsocks 的本地端口 root@Wrt:~# iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
# 应用规则 root@Wrt:~# iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS root@Wrt:~# iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS

保存与启动加载

iptables的设置在重新启动时会清空,需要通过脚本加载。

保存设置

iptables-save > ~/iptables.rules

加载设置

iptables-restore < ~/iptables.rules

把加载设置的命令放到/etc/rc.local中即可实现开机加载。

查看与清空

如果写错了,或者想看下是不是写对了,可以用以下命令
查看

iptables -t nat -L

清空

iptables -t nat -F

iptables -t nat -X

树莓派内网穿透

发表于 2017-04-15

长久以来一直有一个困惑,在路由器上挂着的PT会偶尔挂(transmission-daemon),也找不到相关的错误信息。如果不在家的话就无法重新启动(其实也是可以写个脚本定时检测重启daemon的,主要是我懒)。但如果可以从外面随意访问位于内网的路由器就解决了这个问题。

有了树莓派后,从外网访问内网的需求就愈发强烈了,网上看了不少方案,

  • 收费的有各种DDNS(如花生壳(免费的各种限制)),优点是域名固定,缺点就是要钱
  • 免费的也有各种,比如:
    • 反向代理(需要VPS一台,半免费吧,优点是IP固定,缺点是速度随VPS访问速度)
    • ngork(比较慢)
    • 电信光猫做端口映射

反向代理

反向代理的原理就是用位于外网的服务器(VPS)作为跳板来访问位于内网的机器,相对地,我们常规说的代理是内网的机器通过跳板机来访问外网(比如被墙的网址)。

代理说明图

现在举一个实际的例子说明下怎么配置反向代理,需求是要从公司机器SSH登录家里的树莓派

机器 机器ip 帐号 端口
VPS vps_ip vps_acc 8022
树莓派 pi_ip pi_acc 22

首先在VPS上建立端口

ssh -fCNL *:8022:localhost:8122 localhost

参数解释:

  • -f: 后台执行
  • -C: 压缩数据
  • -N: 不执行命令(用于端口转发)
  • -L: 将本地端口收到的数据转发到指定的地址和端口,这里*表示来源为任何IP,8022表示外部请求发送到了本地端口8022;localhost:8122表示转发到本地的8122端口

ssh -fCNR 8122:localhost:22 vps_acc@vp\s_ip

参数解释:

  • -f,-C,-N 同上
  • -R: 将远端端口收到的数据转发到本地地址和端口,8122表示远端的端口,localhost:22表示本地22端口
  • vps_acc@vps_ip 表示用 vps_acc 这个账户登录 vps_ip 这个地址

这样,在外网通过SSH登录VPS的8022端口就可以登录到树莓派上了

ssh pi_acc@vps_ip -p 8022

端口映射

反向代理的缺点就是访问速度取决于VPS的速度,毕竟是绕了一个圈子,速度总会有影响,想看树莓派上的监控视频,基本就是看PPT的感觉了。

所以反向代理现在是我的备选方案。

家里用的是中国电信的光猫,光猫上连着路由器,树莓派是无线连接路由器的,我的目标是通过直接访问光猫,通过NAT将请求转发到路由器,最后转发到树莓派。

好处不用多说,完全免费!
坏处就是光猫的IP会变化(比如重新拨号),需要能够通过一定手段通知到自己(比如邮件)。

先放一张网络结构图

网络拓扑

公网IP

浏览器打开http://ip.gs,看下自己的光猫分配到的IP是多少,如果是10,100之类的内网地址,就只能打电话10000给电信客服要求分配公网IP了。

超级密码

网上有一堆过时的方法,自己尝试各种方法都连接不上,只能祭出大杀器--社会工程。在捣鼓了几下把自己家里的宽带弄坏后打电话报修(就是登录普通的userAdmin账户,密码在光猫背后,然后将internet这条线路弄成桥接,导致不能上网)。告诉客服说要改桥接,让师傅上门维修。

师傅来了之后说明自己的情况,说家里要用监控,需要做端口映射,让他把超级管理员的密码给自己,师傅很爽气的就给了(这里的随机因素比较多,拒绝的原因很大一部分是师傅怕你自己瞎弄弄坏了又要找他上门来修。不过我表示自己是学计算机的,让师傅放心了很多)

PS: 超级管理员用户名是telecomadmin

防止远程管理修改超级密码

电信公司可以通过TR069协议远程管理(恢复设置,修改超级管理员密码等)。

虽然师傅临走前说如果超级密码被改了,可以打他电话问他再要,我还是决定自己动手杜绝后患。

超级管理员登录后,在“网络” - “宽带设置”里,找到带“TR069“的连接,你会发现下面的删除按钮是灰色的。我用的是chrome,打开开发者工具(mac下的快捷键是cmd+option+I),找到删除按钮,把里面的disable属性删了,就发现删除按钮可以点了。

删了这个连接后,理论上电信就无法远程控制你的光猫了!

设置光猫端口映射

在“应用” - “高级NAT配置” - “虚拟主机配置” 中,添加如下项:

  • 务必点击启用,有一次新端口我没点启用,思索了半天为啥这个端口没成功。。。
  • 协议就选 TCP AND UDP
  • 广域网起始/结束端口随便选一个端口,以后外网访问就通过这个端口了
  • 虚拟主机IP填路由器的IP,没有做静态地址的话就启用上面的mac映射,填路由器mac地址
  • 虚拟主机IP,保持和上面的端口一样就可以了

光猫端口映射

至此,通过外网(走在路上的手机,公司的电脑等)已经可以直接访问家里的路由器了。

设置路由器端口映射

剩下的就是在路由器上把请求转发到树莓派了,小意思。

我家的路由器是Asus AC68U,不同路由器的设置路径不太一样,要靠大家自己的摸索了。

最终设置如下图

路由器端口映射

意思就是将外来的8022端口的请求(来自于光猫),转发到树莓派IP(192.168.2.2)上的22端口。

如果上面的步骤中有什么看不懂的,可以发邮件问我,邮箱在页面底部。

树莓派记

发表于 2017-04-13

为何是树莓派

在拼完乐高2015年旗舰版40043之后,心里空落落的。原本想继续买9398改装全遥控,但一想到这么一来至少要花出去2.5K,不免有些心疼。

纠结的过程中,无意中在哪里看到了树莓派(这个名次其实对我并不陌生),便想着可以买来玩玩,看中的无非两点:

  • 小功率的linux服务器,虽性能不高,但暂时够用
  • 硬件接口很多,可编程的电路引脚提供了控制电子元器件的方式,从CS走进了EE(相当于二次元走进了三次元)

购买

知乎上搜了下购买,无非是总经销商和淘宝两条途径,RS和element14的价格都是量大从优,也就意味着淘宝的批发可以有价格优势。淘宝评论都说RS的板子边缘毛糙,element14的板子质量更好,但无意中找到一家店说是RS在日本SONY代工的新货,这一情况也在树莓派论坛上得到了证实,就下了单。

结果发现果然还是RS的风格,边缘有点毛糙。好在焊点都很干净,还是好评。

一同购买的配件有:

  • 5v 2.5A 电源(后来发现家里有乐视的5v 2.7A的电源,白买了)
  • 带开关的电源线(这个比较方便,省的拔插头)
  • 官方红白外壳(防止外界因素破环板子)
  • 散热片两枚(铜,铝各一个)
  • 16GB U1的东芝TF卡(U1比class10更好,建议问情套餐里的卡什么牌子,没牌子的别买,我就是另外购买的)
  • TF读卡器(家里有了所以没买)

安装系统

树莓派支持的系统有很多,我是玩linux的,找到官方系统raspbian的下载页。由于我也不玩桌面,就选择了LITE版本,链接如下:

https://downloads.raspberrypi.org/raspbian_lite_latest

TF卡插入读卡器后连接到电脑(mac),执行如下命令:

  • 找到挂载的U盘(我这里是/dev/disk2s1)

    df -lh

  • 卸载U盘(填入刚才找到的盘符名/dev/disk2s1)

    sudo diskutil umount /dev/disk2s1

  • 进行烧录(if后面填要烧录的镜像位置,of后面填卸载后的盘符名,就是把上面的s1去掉,bs指的是写入速度,不要超过TF卡的指标就可以了)

    sudo dd if=2017-03-02-raspbian-jessie-lite.img of=/dev/disk2 bs=4m && sync

注:默认ssh关闭,在boot目录下创建一个ssh文件可以打开

通过hdmi接口连上电视机或显示器(必须是hdmi直连,不能有转接头),显示开机成功

连接网络

用网线将树莓派与路由器连接,登陆路由器查看树莓派的ip,ssh登陆上去,默认name=pi,password=raspberry

ssh pi@192.168.2.2

ping一下百度看下网络是否联通

ping www.baidu.com

更新一下系统并安装vim(不会用自带的nano。。。)

sudo apt-get upgrade

sudo apt-get update

sudo apt-get install vim

查找可连接的无线网络SSID

sudo iwlist wlan0 scan

修改文件/etc/wpa_supplicant/wpa_supplicant.conf

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

在文件底部添加下面这段内容:

network={
    ssid="这里填入之前搜到的SSID名称"
    psk="这里填入你的WIFI密码"
}

重启机器,然后把网线拔了

sudo reboot

在路由器页面中查找新的无线连接的树莓派ip,尝试用ssh登陆

安装python

系统自带了python2.7,但我就是喜欢用最新的3.X!!

执行命令

sudo apt-get install python3

sudo apt-get install python3-pip

安装一些爬虫会用到的库

sudo pip install http

sudo pip install cookiejar

sudo pip install parse

坑

crontab 里的路径都必须是完整路径,包括python也要为/usr/bin/python

摄像头安装

之后追加了配件,500万像素的摄像头,当然不是官方的(太贵)。
执行下述命令,#后面为说明

# 这个版本在官方版本基础上加了很多plugin

wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip

# 解压缩到当前目录

unzip master.zip

# 编译

make

# 安装到系统目录

sudo make install

# 建立网页文件目录
sudo mkdir /var/www/camera

# 将网页文件复制过去
sudo cp -r www/* /var/www/camera

# 开启输出
mjpg_streamer -i input_raspicam.so -o output_http.so -p 8099 -w /var/www/camera

访问<树莓派ip>:8099/stream.html就可以看到视频输出了

在/boot/config.txt里修改或添加这句,就可以把亮瞎狗眼的摄像头LED灯给关了

disable_camera_led=1

修改完重启

sudo reboot

我就这样成了无影脚

发表于 2016-12-29

看到有xposed插件改微信运动的计步,于是也手痒想改下支付宝的计步。

打开支付宝,搜索运动。

必须在这里吐个槽,app里的东西实在太多,不搜索根本找不到这个功能!!

看到关键词是行走,于是解压apk包,全局grep关键词,结果没有。。。

于是资源搜索的捷径被阻断了,只有硬着头皮去搜类名。

用jad-x反编译后弄到IDE里打开,先是搜walk,没有,再搜step,有了!

CountStepPBService看着像啊!

step类

再搜调用者,找到APMainStepManager,扫了下里面的日志,确定是计步用的类。

找到了CountStepPBService的调用,是一个count函数,看下request是怎么构成的,找到了arrayList和stepPBCounter,最后定位到a2这个变量和一个名为a的函数。

step1

step1

从函数a的logger可以得知,几个参数分别是服务器端的步数(i2),当前增加的步数(i3)和总和(i)

step1

然后就没有什么可说的了,修改任何一个值都能让你操控发送到服务器端的步数,我是把当前增加的步数i3乘以了1000。

从想到做完大概花了半个小时,其中大部分时间还是在反编译代码和测试,找代码和改代码只花了5分钟。。。所谓熟能生巧就是这个道理吧,哈哈哈!

最后奉上repo地址:https://github.com/AaronGeist/AlipayHacker

钉钉防消息撤回插件的开发

发表于 2016-12-26

起因

学习一门技术,最好的方法是实际做一个项目。而做任何一个项目,最好的动力就是实际的需求。

我的一个需求就是把在钉钉(一个阿里的通讯软件,相当于企业版的微信)上对方撤回的消息显示出来。目的也就是想看看对方发了什么让自己觉得囧的消息想撤回,哈哈哈。

经过

工具

工欲善其事,必先利其器

xposed开发中80%的时间是用来对apk包反编译后代码的解读和思考(如果你在修改的开源代码,请跳过这一段。。。),因此想要开发xposed插件,必须学会apk反编译工具的使用。

列举一下我使用到的工具:

  • apktool
    • 用来将apk包解析后得到资源文件和smali文件(类似于汇编代码)
    • 使用java -jar apktool.jar d YOUR_APK_FILE.apk -o TARGET_FOLDER命令
    • 建议学习一下smali的语法
  • jad-x,用来将dex文件(类似于class文件)转为可读的java文件
    • 将apk文件后缀改为zip后解压,用jadx-gui打开每个dex文件,并save all
    • 将保存下来的目录进行合并,可以使用*unix的cp -r命令处理
    • 打开一个IDE(如果你喜欢用vim也行),开始找你要的代码吧

建议最开始主要使用jad-x生成的java代码进行程序的理解,当涉及到一些资源的使用,或者jad-x解析不了的代码时,使用apktool解析出来内容进行挖掘。

另外,还可能涉及到抓包这个步骤,不过我目前还没有用到。

思考

Xposed开发其实本身并不会写很多代码,而是在于找到切入点,对源程序进行行为的改变。

比如要防止消息撤回,最先想到的就是让消息的状态永远是“非撤回”状态,然后考虑到数据库的变化,想到的是拦截数据库的修改消息状态(撤回)的动作。

寻找

寻找不仅仅意味着寻找代码,还可以是利用搜索引擎进行查找~

我找到了veryyoung写的一个module,可以用但还是存在着一些问题。这也为我提供了不少的思路。

可以看到recallStatus是一个关键字,我用它来检索了全部代码,找到了MessageImpl这个类。可以看到veryyoung是对MessageImpl这个类的recallStatus这个方法进行了hook,让它永远返回0(1表示已撤回)来达到阻止撤回的目的。

但依然存在两个问题:

  1. 应用重启后,被撤回的消息无法复原,即还是被撤回了
  2. 过去被成功撤回的消息,在对话框中显示为正常对话,而内容是”Msg has been recalled.”

"Msg has been recalled."

尝试

首先我想到的是这个”Msg has been recalled.”是不是一个资源string,找一下看哪里显示了这个字符串,结果没找到。。。

后来我意识到了:

  1. 这个字符串不是显示的时候加载的,而是被写入了数据库
  2. 显示”Msg has benn recalled”的时候并没有和那些正常“已撤回”的消息使用同样的格式,而是和普通的消息使用一样的格式,也是因为这条数据就只是一条普通的消息
  3. 数据的来源可能是远端的请求,所以本地资源里找不到这个字符串

于是我的方向转为了寻找数据库的写入或更新,只要这条“新“的消息不覆盖原始数据,那消息就能够被正常显示了,即使本地应用重启也没问题。

同时结合关键词recallStatus,我找到了MessageDB这个类(代码混淆后类名变成了cuw),在对几个可能更新消息内容的函数进行hook打印日志后,最终确定了某个函数。

这个函数在对方点击撤回时会在我这里被调用,且写入的消息内容正是”Msg has been recalled”。

Binggo!

总结

这个插件的源码地址是https://github.com/AaronGeist/DingDingHacker,欢迎提交issue。

我这篇文章也只是记录了一下开发的过程和思路,推荐大家读一下veryyoung的这篇文章,能够对安卓的逆向工程基础有所了解
http://veryyoung.me/blog/2016/09/29/android-reverse-basic.html

Xposed开发教程

发表于 2016-12-26

背景

Xposed是大神rovo89编写的一个基于安卓系统的应用,它的作用是在不用改变应用源码的情况下,可以改变应用的行为,外观等。Xposed可以做到AOP,但也不仅限于AOP,资源替换,行为替换都是可以做到的,总之就是很牛!

现在市场上使用比较多的Xposed模块应该是修改软件界面,抢红包之类的。

安装Xposed

准备

准备工作对于每个机型,每个安卓版本都有所不同,所以这里就不详细介绍了,请自行谷歌完成:

  1. 解锁bootloader
  2. 获取root权限
  3. 安装第三方recovery(如twrp,cm)
注:卡刷xposed安装包需要第三方recovery

安装

  1. 安装xposed_installer

    访问官方网站可以看到下载链接(针对5.0,5.1和6.0的版本在这里),下载后直接安装即可。

  2. 安装xposed

    1. 访问官方仓库,找到自己机型和系统版本对应的zip文件(不要解压直接放到某个目录中)

      • 21对应5.0,22对应5.1,23对应6.0
      • nexus5/6/7是32位系统,nexus5x/6p是64位系统
    2. 关机并同时按住音量下+电源键进入recovery mode

    3. 通过音量键(控制上下)和电源键(确认),按照提示安装之前某个目录里的zip文件,安装就完成了
    4. 进入xposed installer确认xposed是否安装成功

创建第一个Xposed插件

偷懒不想写了,因为最好的入门文档已经由作者rovo89已经给我们写了一个,步骤也很清楚,国内的不少论坛上的教程就是翻译了这个而来的。
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

用Hexo在Github搭建博客

发表于 2016-12-25

1. 环境准备

Git

从官网下载并安装

Github账号

在官网注册,然后参考这个步骤为自己的添加本机的ssh-key,用于免密码登录

Nodejs

从官网下载并安装

Hexo

利用nodejs的npm安装(-g表示全局安装)

npm install -g hexo
  1. -g表示全局安装
  2. 若提示没有权限,则在命令前加上sudo

运行下命令看看当前Hexo的版本,我的是3.2.2。如果版本和我的差异比较大的话,可能下面的步骤会不一样哦!

hexo v

2. 本地初始化

在本地的某个你中意的目录下运行命令,用来初始化目录

hexo init

安装依赖包

npm install

生成基础代码并在本地运行服务

hexo generate
hexo server

打开浏览器,输入localhost:4000,就能看到效果

3. 创建Github Page

Github page不是用来给你放代码的,它的概念就是一个静态网站,没有数据库,只有html+css+js(当然这个静态网站可以很动态,因为有了js嘛 LoL)

你要做的是在https://github.com/new上新增一个repo,repo的名字每个账号是固定的,为你的账号名+github.io,然后记录下你的repo地址,比如git@github.com:AaronGeist/AaronGeist.github.io.git。当然以https开头的也是一样的。

创建Github Page

4 配置Hexo

Hexo的配置文件是_config.yml,官方的配置文档说明在这里。

细节可以稍后再看,这里需要做的是将本地的Hexo项目和刚才建立的Github Page关联起来。打开这个_config.yml,找到Deployment这里,修改成下面的样子:

deploy:
  type: git
  repo: #这里填你的repo地址,比如git@github.com:AaronGeist/AaronGeist.github.io.git
  branch: master
注意,hexo配置的语法是冒号后面要加一个空格,切记!

Hexo对git的支持还需要装一个插件,运行如下命令:

npm install hexo-deployer-git --save

5 创建文章

用命令创建文章

hexo new "我的标题"

屏幕上会提示在source/_post目录下创建了我的标题.md这个文件,打开它,用markdown语法在正文部分愉快地编辑吧。

注:#后面记得加空格,否则无效 =。=

写完之后,可以用命令预览文章

hexo server

6 部署到Github

执行命令

hexo generate
hexo deploy

提示中出现INFO Deploy done: git就表示成功了

另外,如果你想删除一些文章(比如默认的hello word那篇),只是删除_post目录下的文件是没用的,需要再执行这个命令清空缓存

hexo clean

然后执行部署即可

7 添加资源

一般博客都会有贴图的需求,Hexo的官方资源配置说明在这里。虽然不需要做什么额外的工作,但使用的标签却不是markdown的,比较遗憾。

另一种使用的比较多的方式是继续用插件hexo-asset-image

首先打开资源选项,将_config.yml中的post_asset_folder设置为true即可。

其次,当创建新的文章时,可以添加layout选项,在创建文章的同时自动创建一个文件夹,文件夹名称和文章名称相同。文章需要使用的图片都放在这个文件夹中。

最后,在文章中使用![logo](logo.png)来插入资源目录下的logo.png(是的,不用加目录名,当然加上也可以)

8 美化

主题

目前使用的Next主题,挺简洁的,官方网站在这里,步骤讲解的也非常详细

增加”关于”页面

在主题目录下(比如theme/next/)找到主题配置文件_config.yml,找到menu配置项,去除about前面的注释

menu:
  home: /
  #categories: /categories
  about: /about
  archives: /archives
  tags: /tags
  #commonweal: /404.html

使用命令 hexo new page about在source目录下新增about.md文件,内容自行编辑。

增加favicon图标

使用工具生成32x32大小的favicon.ico文件,放到source/images/目录下。

修改主题配置文件(比如theme/next/_config.yml)中的favicon配置,设置为images/favicon.ico(路径是从source开始的,所以不用加source)。

参考文章

  1. 手把手教你建github技术博客
  2. 在 hexo 中无痛使用本地图片

开张

发表于 2016-12-25

第一次使用github作为blog的托管站点,没想到从想到完成只用了20分钟的时间。我想这么快的原因主要有两点:

  • 网络的发达,已经人们愿意分享的态度
  • 对于所涉及到的技术栈,自己已经有所了解

平日里总会被一些自己未曾涉足过的技术领域所吸引,但也变得有些三心二意。自己就说服自己说广度和深度都要有,这就算拓展广度吧。

希望这里,是记录自己拓展广度(和深度)的一个地方。

shakazxx@gmail.com

shakazxx@gmail.com

一个卯君写字的地方

8 日志
8 标签
© 2017 shakazxx@gmail.com
由 Hexo 强力驱动
主题 - NexT.Muse