Alderaan的博客 2020-05-11T14:55:44.524Z https://alderaan.xyz/ Alderaan Hexo Centos 7.6 下使用美格SLM750(4G模块)拨号上网 https://alderaan.xyz/2020/05/11/centos7-6-use-meig-4G-module-slm750/ 2020-05-11T09:40:13.000Z 2020-05-11T14:55:44.524Z 概述

​ 想要实现4G上网有两种方式,要么加多一个4G路由器,再通过优先接入;要么通过增加4G模块(可为USB或PCIE等多种接口),直接进行拨号上网。尝试在一款J1900工控机上(该工控机自带SIM插槽),通过增加PCIE接口的美格4G模块SLM750,进行拨号上网。Windows系统下已测试过,直接安装厂家提供驱动,可以正常上网,说明硬件方面是完全支持的。本文参照厂家提供的嵌入式方案,进行驱动编译安装,并编译拨号软件,最终实现工控机4G上网功能。

准备

​ 系统为Cento 7.6 64bit,基本环境为Basic Web Server安装(理论上与安装环境模式无关,最小安装也可以)。需要下载内核源码,Centos 7.6的内核版本为3.10.0-957,源码可在此链接下载。另外还需要厂家提供的GobiNet网卡拨号的驱动及拨号工具源码,一张能4G上网的手机卡或物联网卡,接好模块天线。

编译内核源码

​ 将下载好的源码,解压到看到linux-3.10.0-957.21.3.el7.tar.xz文件,将其放到/usr/src/kernels文件夹下,并执行如下命令:

1
2
$ tar xvf linux-3.10.0-957.21.3.el7.tar.xz // 解压内核源码文件
$ mv linux-3.10.0-957.21.3.el7 3.10.0-957.el7.x86_64 // 重命名文件夹

​ 之所以要更改文件夹名称,是因为厂家的GobiNet驱动源码,Makefile文件中:

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
obj-m := GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o

PWD := $(shell pwd)
OUTPUTDIR=/lib/modules/`uname -r`/kernel/drivers/net/usb/

#ifeq ($(ARCH),)
#EARCH := $(shell uname -m)
#endif
#ifeq ($(CROSS_COMPILE),)
#CROSS_COMPILE :=
#endif
#ifeq ($(KDIR),)
KDIR := /lib/modules/$(shell uname -r)/build # 这里通过uname -r 获取了内核名称
#endif

default:
#ln -sf makefile Makefile
#$(MAKE) ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -C $(KDIR) M=$(PWD) modules
$(MAKE) CROSS_COMPILE=${CROSS_COMPILE} -C $(KDIR) M=$(PWD) modules

install: default
mkdir -p $(OUTPUTDIR)
cp -f GobiNet.ko $(OUTPUTDIR)
depmod
modprobe -r GobiNet
modprobe GobiNet

clean:
# rm -rf Makefile # 这里这段代码去掉,否则执行make clean会把Makefile文件也删除了
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module.* modules.order

​ 如果为其他版本的系统,将文件夹对应修改为uname -r得到的名称即可。

添加串口的ID

​ 打开内核源码文件 /3.10.0-957.el7.x86_64/drivers/usb/serial/option.c,在/* Vendor and product IDs */下增加宏定义:

1
2
3
4
5
6
7
/* Vendor and product IDs */

#define MEIG_VENDOR_ID0x05C6
#define MEIG_PRODUCT_7300xF601
#define MEIG_VENDOR_ID_7200x2dee
#define MEIG_PRODUCT_7200x4d07
#define MEIG_PRODUCT_720_ECM0x4d02

​ 在option_ids结构体数组增加4G模块的VIDPID

1
2
3
4
static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(MEIG_VENDOR_ID,MEIG_PRODUCT_730) },
{ USB_DEVICE(MEIG_VENDOR_ID_720,MEIG_PRODUCT_720) },
{ USB_DEVICE(MEIG_VENDOR_ID_720,MEIG_PRODUCT_720_ECM) },

删除NDIS和ADB端口

​ 使用option驱动,修改 /3.10.0-957.el7.x86_64/driver/usb/serial/option.c,在option_probe函数添加如下代码:

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
static int option_probe(struct usb_serial *serial,
const struct usb_device_id *id)
{
struct usb_interface_descriptor *iface_desc =
&serial->interface->cur_altsetting->desc;
struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;
const struct option_blacklist_info *blacklist;

/* Never bind to the CD-Rom emulation interface*/
if (iface_desc->bInterfaceClass == 0x08)
return -ENODEV;

/*
* Don't bind reserved interfaces (like network ones) which often have
* the same class/subclass/protocol as the serial interfaces. Look at
* the Windows driver .INF files for reserved interface numbers.
*/
blacklist = (void *)id->driver_info;
if (blacklist && test_bit(iface_desc->bInterfaceNumber,
&blacklist->reserved))
return -ENODEV;

// struct usb_wwan_intf_private *data; 文档中的这个语句其实没有
// 开始添加代码
if (serial->dev->descriptor.idVendor == MEIG_VENDOR_ID &&
(serial->dev->descriptor.idProduct == MEIG_PRODUCT_730)&&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;

if (serial->dev->descriptor.idVendor == MEIG_VENDOR_ID_720&&
(serial->dev->descriptor.idProduct == MEIG_PRODUCT_720)&&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;
// 完成添加代码

使用usb-serial驱动,/3.10.0-957.el7.x86_64/driver/usb/serial/usb-serial.c,在usb_serial_probe函数添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    serial = create_serial (dev, interface, type); 
if (!serial) {
unlock_kernel();
dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
return -ENOMEM;
}
//开始添加代码 厂家文档写的是宏定义,在该文件中无法找到会报错,这里直接改成了对应值
if ( (serial->dev->descriptor.idVendor == 0x50C6 &&
(serial->dev->descriptor.idProduct == 0xF601) )&&
serial->interface->cur_altsetting->desc.bInterfaceNumber >=4 )
return -ENOMEM;

if (serial->dev->descriptor.idVendor == 0x2dee &&
(serial->dev->descriptor.idProduct == 0x4d07)&&
serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;
//完成添加代码
### 配置编译参数
1
2
3
4
$ cd /usr/src/kernels/3.10.0-957.el7.x86_64  # 切换到内核源码所在路径
$ cp /boot/config-3.10.0-957.el7.x86_64 ./.config # 拷贝当前内核的编译配置
$ make oldconfig # 在已有内核基础上进行配置
$ yum install gcc gdb make elfutils-libelf-devel

​ 需要说明的是,Centos 6.7默认就开启了device drivers->usb support->usb serial converter support->USB driver for GSM and CDMA modemsdevice drivers->Network device support->usb Network Adapters->Multi-purpose USB Networking Framework这两个组件,所以拷贝原有内核的编译配置即可使用。

开始编译

​ 执行如下命令开始编译源码,对应的线程数字按照实际机器进行配置,这个过程会比较慢。

1
$ make -j 8

​ 如果有其他错误提示,则安装对应的软件包依赖即可,这里编译后不进行安装,因为内核是一样的,编译内核只是为了编译驱动时能找到一些依赖。

编译NDIS驱动

​ 这里采用的是单独编译的方式,所以上一个步骤没有和内核一块打包编译,主要是为了在不动原来内核的情况下使用,以防上面的其他软件运行受影响。

​ 到驱动目录下,执行如下命令:

1
2
$ make # 编译驱动
$ make install # 安装驱动

​ 正常编译安装的话,不会有其他的警告或者错误,驱动成功后,可以看到新的网卡。一般是ethX这种格式,但还没有IP地址,需要使用拨号软件。

编译Gobinet拨号工具

​ 在厂家提供的源码中,由于是嵌入式的方案,默认获取IP地址的是busybox中的udhcpc命令,在udhcpc.c文件中,可以注释掉这样代码,以及这行代码上面两行的寻找默认配置文件的语句。本文管理网卡的工具是NetworkManager,Gobinet拨号后,会自动检测网卡状态,进行获取IP地址操作。其它系统根据实际需要,进行修改。本文做出的修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (profile->ipv4.Address) {
#ifdef USE_DHCLIENT
snprintf(udhcpc_cmd, sizeof(udhcpc_cmd), "dhclient -4 -d --no-pid %s", ifname);
dhclient_alive++;
#else
// 注释掉获取默认配置文件
//if (access("/usr/share/udhcpc/default.script", X_OK)) {
// dbg_time("Fail to access /usr/share/udhcpc/default.script, errno: %d (%s)", errno, strerror(errno));
//}

//-f,--foreground Run in foreground
//-b,--background Background if lease is not obtained
//-n,--now Exit if lease is not obtained
//-q,--quit Exit after obtaining lease
//-t,--retries N Send up to N discover packets (default 3)
// 注释定义的获取IP命令
//snprintf(udhcpc_cmd, sizeof(udhcpc_cmd), "busybox udhcpc -f -n -q -t 5 -i %s", ifname);
#endif
// 注释掉命令线程
//pthread_create(&udhcpc_thread_id, &udhcpc_thread_attr, udhcpc_thread_function, (void*)strdup(udhcpc_cmd));
sleep(1);
}

​ 执行如下命令编译拨号工具

1
2
$ make # 编译
$ ./MeiG-CM & # 后台执行拨号工具

​ 如果拨号成功,可以看到对应的网卡会获取到IP地址,并可以正常上网。

服务化拨号工具

​ 可以使用systemctl管理拨号工具,新建一个文件MeiG-CM.service,并写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=quectel-CM Service
After=network.target

[Service]
Type=simple
User=root
Restart=always
RestartSec=5s
ExecStart=/home/MeiG-CM/MeiG-CM # 这里更改为对应的可执行文件所在路径

[Install]
WantedBy=multi-user.target

​ 执行以下命令可配置服务并设置开机自启动:

1
2
3
4
$ cp MeiG-CM.service /usr/lib/systemd/system/ # 拷贝服务文件到系统目录
$ systemctl daemon-reload # 重新检测加载服务,使其被系统识别到
$ systemctl start MeiG-CM.service # 手动启动服务
$ systemctl enable MeiG-CM.service # 配置开机自启动

​ 至此,在Centos 7.6上就可以自动配置MeiG SLM50 4G模块上网。如果卡被停用后·再启用,也不需要重新启动机器,会自动重新拨号。

]]>
<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>​ 想要实现4G上网有两种方式,要么加多一个4G路由器,再通过优先接入;要么通过增加4G模块(可为USB或PCIE等多种接口),直接进行拨号上网。尝试在一款J1900工控机上(该工控机自带SIM插槽),通过增加PCIE接口的美格4G模块<code>SLM750</code>,进行拨号上网。Windows系统下已测试过,直接安装厂家提供驱动,可以正常上网,说明硬件方面是完全支持的。本文参照厂家提供的嵌入式方案,进行驱动编译安装,并编译拨号软件,最终实现工控机4G上网功能。</p>
水星USB无线网卡mw150us苹果macOS系统驱动成功 https://alderaan.xyz/2020/05/10/mw150us-2-0-mac-driver/ 2020-05-10T07:04:06.000Z 2020-05-11T06:20:15.584Z 概述

​ 之前修好后的MacBook Pro (13-inch, Mid 2010),去年开始就发现偶尔找不到自带的无线网卡,用着也还经常死机。屏蔽了无线功能后,一直只能有线上网。最近终于忍不住,要无线上网了。。。由于囊中羞涩,先找了一块MERCURY(水星)的usb无线网卡MW150US 2.0 (170107),想在macOS Hight Sierra 10.13.5上驱动它。

基本信息

​ 由于水星这款网卡,不同时期生产的是不一样的芯片,我手头上这块是这样子的:

水星无线网卡图片

​ 在苹果系统上的硬件信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
802.11n NIC:

产品 ID:0x8179
厂商 ID:0x0bda (Realtek Semiconductor Corp.)
版本:0.00
序列号:00E04C0001
速度:最大 480 Mb/秒
制造商:Realtek
位置 ID:0x24100000 / 1
可用电流 (mA):500
所需电流 (mA):500
额外的操作电流 (mA):0

​ 在Windows系统上,驱动后显示的网卡名称包含rtl 8188eu字眼,成功得到对应芯片型号信息。

寻找驱动

​ 一开始在网上下载一些别人试过的Mac版本驱动,安装后仍无法使用,有可能是我的系统版本比较新的缘故。转而开始从芯片版本入手,查找其他也使用了这款芯片的厂家,看是否有对应的macOS驱动。后来了解到,Edimax这个厂家的EW-7811Un 这款 USB 无线网卡,采用了类似芯片,也是最高150Mbps。在Download页面上有如下的驱动列表:

VersionNoteDateFile TypeFile Size
v1.0.1.4Support OS:MAC 10.7/10.8/10.9/10.10/10.11 Languages:English2016-02-24ZIP10.30 MBimg
v1.0.0.1Support OS:Raspberry Pi2 Win10 IoT Languages:English2015-12-21ZIP1.65 MBimg
v1.0.0.5Support OS:Windows XP/Vista Languages:English2015-12-17ZIP26.81 MBimg
v1.0.0.5Support OS:MAC 10.4/10.5/10.6 Languages:English2012-12-12ZIP24.73 MBimg
1.0.1.6Support OS:Windows 7/8/8.1/10 Languages:English2019-10-21ZIP49.75 MBimg
1.0.1.8Support OS:MAC 10.13 Languages:English2018-09-17ZIP12.03 MBimg
1.0.1.9EW-7811Un_Linux_Wi-Fi_Driver_1.0.1.9 Support Kernel : 2.6.18 ~ 4.4.32018-06-13ZIP1.08 MBimg
1.0.1.5Support OS:MAC 10.12 Languages:English2016-12-20ZIP10.70 MBimg

​ 刚好有1.0.1.8这个版本可以支持macOS 10.13,直接下载解压后,有如下四个文件:

压缩包解压后文件夹图片

安装驱动

​ 双击Installer.pkg安装驱动

压缩包解压后文件夹图片

​ 选择继续

压缩包解压后文件夹图片

​ 选择继续,会弹出如下窗口

压缩包解压后文件夹图片

​ 同意软件许可协议中的条款

压缩包解压后文件夹图片

​ 点击安装开始执行安装,这个过程可能需要几分钟,耐心等待

压缩包解压后文件夹图片

​ 安装完成后会提示需要重新启动,同时在第一次运行会提示需要有额外的权限,允许即可。

完成

​ 如果安装完成,在右上侧状态栏中会出现新的图标,插上USB网卡,成功驱动后会显示周围的WiFi网络:

驱动成功周围WiFi信息截图

​ 打开Wireless Utility显示信息如下,左上角的图标和网上其他人发的那些驱动图标一模一样:

Wireless Utility显示信息截图

​ 现在就可以开心地重新享受无线上网了,其他81XX芯片型号的网卡也可以试试这个厂家的驱动,对于黑苹果用户也可以参考使用。

]]>
<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>​ 之前修好后的<strong>MacBook Pro (13-inch, Mid 2010)</strong>,去年开始就发现偶尔找不到自带的无线网卡,用着也还经常死机。屏蔽了无线功能后,一直只能有线上网。最近终于忍不住,要无线上网了。。。由于囊中羞涩,先找了一块<strong>MERCURY(水星)</strong>的usb无线网卡MW150US 2.0 (170107),想在<strong>macOS</strong> Hight Sierra 10.13.5上驱动它。</p>
使用Gulp压缩Hexo博客静态资源 https://alderaan.xyz/2020/05/07/hexo-compress/ 2020-05-07T13:06:42.000Z 2020-05-11T06:20:15.584Z 概述

​ 由于博客使用的插件较多,文章内包含的图片越多越大,会影响到博客的加载速度,影响访问效果。其中图片对文章加载速度影响较大,如果可以的话,可以使用国内的一些图床,但如果图床挂了,也会导致图片无法访问,迁移麻烦等,所以本博客还是挂在Github上进行访问。为此开始从资源文件大小上进行优化,了解到可以使用Gulp对博客的js、css、img、html等静态资源文件进行压缩。

Gulp全局安装

1
$ npm install gulp -g

​ 本博客安装的Gulp版本为4.0.2。

Gulp插件安装

​ 在blog文件夹(站点根目录)下,安装必备的插件:

1
$ npm install gulp gulp-minify-css gulp-uglify gulp-htmlmin gulp-htmlclean gulp-imagemin --save

​ 安装完成后,可以在package.json下查看到具体的插件版本信息,本博客的插件版本对应信息如下:

1
2
3
4
5
6
7
8
"dependencies": {
"gulp": "^4.0.2",
"gulp-htmlclean": "^2.7.22",
"gulp-htmlmin": "^5.0.1",
"gulp-imagemin": "^7.1.0",
"gulp-minify-css": "^1.2.4",
"gulp-uglify": "^3.0.2"
}

创建gulpfile.js文件

​ 在blog文件夹(站点根目录)下,新建gulpfile.js文件,并编写如下内容:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 引入需要的模块
var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
var imagemin = require('gulp-imagemin');

// 压缩public目录下所有html文件, minify-html是任务名, 设置为default,启动gulp压缩的时候可以省去任务名
gulp.task('minify-html', function() {
return gulp.src('./public/**/*.html') // 压缩文件所在的目录
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))
.pipe(gulp.dest('./public')) // 输出的目录
});

// 压缩css
gulp.task('minify-css', function() {
return gulp.src(['./public/**/*.css','!./public/js/**/*min.css'])
.pipe(minifycss({
compatibility: 'ie8'
}))
.pipe(gulp.dest('./public'));
});
// 压缩js
gulp.task('minify-js', function() {
return gulp.src(['./public/**/.js','!./public/js/**/*min.js'])
.pipe(uglify())
.pipe(gulp.dest('./public'));
});
// 压缩图片
gulp.task('minify-images', function() {
return gulp.src(['./public/**/*.png','./public/**/*.jpg','./public/**/*.gif'])
.pipe(imagemin(
[imagemin.gifsicle({'optimizationLevel': 3}),
imagemin.mozjpeg({'progressive': true}),
imagemin.optipng({'optimizationLevel': 5}),
imagemin.svgo()],
{'verbose': true}))
.pipe(gulp.dest('./public'))
});
// gulp 4.0 适用的方式
gulp.task('default', gulp.parallel('minify-html','minify-css','minify-js','minify-images'
));

​ 这里要注意,压缩过程中排除*min.css*min.js这两类文件,因为这些文件其他人已经经过处理,不需要再进行压缩,否则可能无法正常使用。其他人网上的脚本使用的是imagemin.jpegtran,由于gulp-imagemin在7.0.0开始,已经被替换为 mozjpeg,具体可以在release版本说明中查看。

压缩指令

1
2
3
4
$ hexo clean// 可以先清除缓存文件和已生成的静态文件(特别是更换主题后需要执行此操作)
$ hexo generate// 生成博客
$ gulp default// 执行压缩,可简写为 gulp
$ hexo deploy// 压缩完成无错误后,就可以发布了

​ 在执行压缩过程中,可能会遇到压缩jpg、压缩png、压缩gif时的错误,或者提示类似于imagemin-*组件无法找到的错误。此时应该注意,gulp-imagemin也有对应的相关依赖,如本博客中版本为7.1.0,有以下特定版本的依赖

1
2
3
4
5
6
"optionalDependencies": {
"imagemin-gifsicle": "^7.0.0",
"imagemin-mozjpeg": "^8.0.0",
"imagemin-optipng": "^7.0.0",
"imagemin-svgo": "^7.0.0"
}

​ 若对应依赖组件的版本有问题,可能会导致压缩对应格式的图片出错,为此建议当出现某个组件压缩失败时,手动安装对应特定的版本,npm安装软件包特定版本的命令格式如下:

1
$ npm install imagemin-mozjpeg@8.0.0 // 在软件包后面加上@版本号

效果

​ 一次压缩过程输出内容如下:

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
$ gulp
[21:55:01] Using gulpfile ~/Documents/blog/gulpfile.js
[21:55:01] Starting 'default'...
[21:55:01] Starting 'minify-html'...
[21:55:01] Starting 'minify-css'...
[21:55:01] Starting 'minify-js'...
[21:55:01] Starting 'minify-images'...
[21:55:02] Finished 'minify-js' after 1.01 s
[21:55:03] Finished 'minify-css' after 1.75 s
[21:55:03] gulp-imagemin: ✔ images/apple-touch-icon-next.png (saved 190 B - 12.3%)
[21:55:03] gulp-imagemin: ✔ images/favicon-16x16-next.png (saved 150 B - 34.5%)
[21:55:03] gulp-imagemin: ✔ images/avatar.jpg (saved 3.69 kB - 18.6%)
[21:55:03] gulp-imagemin: ✔ images/favicon-32x32-next.png (saved 152 B - 23.8%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-114433.jpg (saved 51.1 kB - 54.5%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-202546.jpg (saved 21.3 kB - 47.3%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-200236.jpg (saved 40.2 kB - 51%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-193801.jpg (saved 51 kB - 53%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-111152.jpg (saved 80.1 kB - 56.7%)
[21:55:04] gulp-imagemin: ✔ images/avatar.gif (saved 8 B - 0.4%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-203256.jpg (saved 17.2 kB - 43.5%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-205440.jpg (saved 18.5 kB - 47.4%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-200812.jpg (saved 49.4 kB - 52.7%)
[21:55:04] gulp-imagemin: ✔ 2020/05/03/hexo-install-and-deploy/20200503-202952.jpg (saved 49.6 kB - 52.5%)
[21:55:04] gulp-imagemin: Minified 14 images (saved 383 kB - 51.3%)
[21:55:04] Finished 'minify-html' after 3.13 s
[21:55:04] Finished 'minify-images' after 3.13 s
[21:55:04] Finished 'default' after 3.14 s

index.html在压缩前的大小为37,326字节,压缩后为33,537字节;utils.js在压缩前的大小为15,982字节,压缩后仍为 15,982字节;main.css在压缩前大小为49,538字节,压缩后为38,183字节。

​ 由本次压缩可看出,Gulp对图片的压缩效果比较明显,在html、css、js上也有一定的效果,总体上讲还是有比较好的优化。

]]>
<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>​ 由于博客使用的插件较多,文章内包含的图片越多越大,会影响到博客的加载速度,影响访问效果。其中图片对文章加载速度影响较大,如果可以的话,可以使用国内的一些图床,但如果图床挂了,也会导致图片无法访问,迁移麻烦等,所以本博客还是挂在Github上进行访问。为此开始从资源文件大小上进行优化,了解到可以使用<strong>Gulp</strong>对博客的js、css、img、html等静态资源文件进行压缩。</p>
ssh -T git@github.com Connection reset by XXX port 22 https://alderaan.xyz/2020/05/07/ssh-to-git-github-com-connection-reset/ 2020-05-07T05:34:09.000Z 2020-05-07T06:18:27.046Z 概述

​ 今天在用Hexo发布博客文章时,遇到上传Github失败问题,主要提示为

1
2
3
4
5
Connection reset by 52.74.223.119
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

问题发现

​ 由于已经在Git bash中配置过SSH免密访问,且已正常使用过也没有进行修改,所以排除SSH key配置问题。怀疑是无法连接到github.com,尝试执行ssh -T git@github.com得到如下结果:

1
2
$ ssh -T git@github.com
Connection reset by 52.74.223.119 port 22

​ 竟然真的无法SSH连接到github.com???增加-v选项查看一下详细信息,反馈如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ ssh -T -v git@github.com
OpenSSH_8.0p1, OpenSSL 1.1.1c 28 May 2019
debug1: Reading configuration data /c/Users/Alder/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [52.74.223.119] port 22.
debug1: Connection established.
debug1: identity file /c/Users/Alder/.ssh/id_rsa type 0
debug1: identity file /c/Users/Alder/.ssh/id_rsa-cert type -1
debug1: identity file /c/Users/Alder/.ssh/id_dsa type -1
debug1: identity file /c/Users/Alder/.ssh/id_dsa-cert type -1
debug1: identity file /c/Users/Alder/.ssh/id_ecdsa type -1
debug1: identity file /c/Users/Alder/.ssh/id_ecdsa-cert type -1
debug1: identity file /c/Users/Alder/.ssh/id_ed25519 type -1
debug1: identity file /c/Users/Alder/.ssh/id_ed25519-cert type -1
debug1: identity file /c/Users/Alder/.ssh/id_xmss type -1
debug1: identity file /c/Users/Alder/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.0
debug1: Remote protocol version 2.0, remote software version babeld-d45c1532
debug1: no match: babeld-d45c1532
debug1: Authenticating to github.com:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
Connection reset by 52.74.223.119 port 22

问题解决

​ 在Windows系统下,打开控制面板->系统和安全->Windows Defender 防火墙->高级设置,选择入站规则,点击新建规则,选择端口,在特定本地端口写入22,连续选择下一步三次,输入一个名称(随意命名规则),点击完成,然后再执行命令得到如下格式结果:

1
2
$ ssh -T git@github.com
Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.

​ 再尝试发布Hexo博客到Github就可以正常上传了…暂时不知道这其中的原理,即使将刚添加的规则删除了,再打开新的Git bash窗口也不会出现Connection reset错误了。。。

]]>
<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>​ 今天在用<strong>Hexo</strong>发布博客文章时,遇到上传<strong>Github</strong>失败问题,主要提示为</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Connection reset by 52.74.223.119</span><br><span class="line">fatal: Could not <span class="built_in">read</span> from remote repository.</span><br><span class="line"></span><br><span class="line">Please make sure you have the correct access rights</span><br><span class="line">and the repository exists.</span><br></pre></td></tr></table></figure>
Hexo博客Next主题美化 https://alderaan.xyz/2020/05/06/hexo-config/ 2020-05-06T07:01:22.000Z 2020-05-07T03:44:34.073Z ​ 本文主要说明在Hexo博客nexT主题下如何进行美化,具体对应效果可通过本博客页面进行查看。

  • Hexo version: 4.2.0
  • nexT version:7.8.0

更改nexT主题为中文

​ 在站点配置文件中的Site配置进行如下修改:

1
language: zh-CN # 简体中文

更改头像

​ 将头像图片放在/blog/themes/next/source/images/下,然后在主题配置文件下搜索avatar.gif,修改为要替换的头像图片名称。

1
2
# Replace the default image and set the url here.
url: /images/avatar.jpg # 头像图片名称 这里我的图片成名为avatar.jpg

更改头像显示框为圆形

​ 在/blog/themes/next/source/css/_common/outline/sidebar文件夹下编辑sidebar-author.styl文件,做出如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.site-author-image {
border: $site-author-image-border-width solid $site-author-image-border-color;
display: block;
margin: 0 auto;
max-width: $site-author-image-width;
padding: 2px;

/* 头像圆形 */
border-radius: 50%; # 新增
transition: 2s all; # 新增

if (hexo-config('avatar.rounded')) {
border-radius: 50%;
}
}

更改博客标题和作者名称

​ 在站点配置文件中的Site配置进行如下修改:

1
2
3
4
5
6
7
8
# Site
title: Alderaan的博客 # 博客名称
subtitle: ''
description: ''
keywords:
author: Alderaan # 作者名称
language: zh-CN
timezone: ''

文章开启版权说明

​ 新版nexT已增加版权说明模块,只需要在文章开头设置copyright: true即可,也可以修改~/scaffolds/post.md 文件,设置新建文章自动开启 copyright:

1
2
3
4
5
---
title: {{ title }}
date: {{ date }}
copyright: true # 设置默认开启版权说明
---

添加「标签」页面

新建「标签」页面,并在菜单中显示「标签」链接。「标签」页面将展示站点的所有标签,若你的所有文章都未包含标签,此页面将是空的。 底下代码是一篇包含标签的文章的例子:

1
2
3
4
5
title: 标签测试文章
tags:
- Testing
- Another Tag
---

请参阅官方 Hexo 的分类与标签文档,了解如何为文章添加标签或者分类。

在终端窗口下,定位到 Hexo 站点目录下。使用 hexo new page 新建一个页面,命名为 tags

1
2
$ cd your-hexo-site
$ hexo new page tags

注意:如果有集成评论服务,页面也会带有评论。 若需要关闭的话,请添加字段 comments 并将值设置为 false,如:

禁用评论示例

1
2
3
4
5
title: 标签
date: 2014-12-22 12:39:04
type: "tags"
comments: false
---

添加「分类」页面

​ 新建「分类」页面,并在菜单中显示「分类」链接。「分类」页面将展示站点的所有分类,若你的所有文章都未包含分类,此页面将是空的。 底下代码是一篇包含分类的文章的例子:

1
2
3
title: 分类测试文章
categories: Testing
---

​ 请参阅官方 Hexo 的分类与标签文档,了解如何为文章添加标签或者分类。

1
2
$ cd your-hexo-site
$ hexo new page categories

注意:如果有集成评论服务,页面也会带有评论。 若需要关闭的话,请添加字段 comments 并将值设置为 false,如:

​ 禁用评论示例

1
2
3
4
5
title: 分类
date: 2014-12-22 12:39:04
type: "categories"
comments: false
---

开启网站计数

​ 在主题配置文件中搜索busuanzi_count,做出如下修改:

1
2
3
4
5
6
7
8
9
10
# Show Views / Visitors of the website / page with busuanzi.
# Get more information on http://ibruce.info/2015/04/04/busuanzi
busuanzi_count:
enable: true # 更改为true开启计数
total_visitors: true
total_visitors_icon: fa fa-user
total_views: true
total_views_icon: fa fa-eye
post_views: true
post_views_icon: fa fa-eye

开启文章底部标签图标显示

​ 在主题配置文件中搜索tag_icon,做出如下修改:

1
2
# Use icon instead of the symbol # to indicate the tag at the bottom of the post
tag_icon: true # 更改为true开启图标显示,默认为'#'号

添加Live2D宠物

​ 首先在博客目录下执行:

1
2
3
#cmd 进入博客根目录
#安装 hexo-helper-live2d
npm install hexo-helper-live2d -save

​ 在站点配置文件尾部新增:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Live2d
live2d:
enable: true
scriptFrom: local
pluginRootPath: live2dw/
pluginJsPath: lib/
pluginModelPath: assets/
model:
use: live2d-widget-model-hijiki
display:
position: right
width: 150
height: 300
mobile:
show: false

npm安装需要的宠物文件

1
npm install {packagename}

​ 如本博客宠物名为hijiki, 则为 npm install live2d-widget-model-hijiki,其他宠物包点击live2d-widget-models。详细内容可参考hexo-helper-live2d


]]>
<p>​ 本文主要说明在<strong>Hexo</strong>博客<strong>nexT</strong>主题下如何进行美化,具体对应效果可通过本博客页面进行查看。</p> <ul> <li>Hexo version: 4.2.0</li> <li>nexT version:7.8.0</li> </ul>
在GitHub上搭建Hexo个人博客 https://alderaan.xyz/2020/05/03/hexo-install-and-deploy/ 2020-05-03T02:04:45.000Z 2020-05-07T03:46:42.729Z 概述

​ 近来发现,之前学习过、实践过的东西,要用的时候经常一时想不起来。习惯性添加进谷歌浏览器的书签,也会因为对方博客文章删除等无法继续看到。特别的是,部署一个东西需要看几个网上资源才可以完成,书签列表越来越长,难以维护。为此,觉得还是很有必要通过写博客的方式进行分类记录,也方便分享经验。本着能折腾就不闲着的宗旨,在网上查阅有关资料后,决定在GitHub上搭建Hexo个人博客,顺便学习使用Markdown

准备工作

安装Git

​ 在Git的官方下载地址上,选择要安装平台的安装文件进行安装

Git官方下载地址截图

​ 上述图片是在Mac OS上访问网页的截图,官网一般会自动检测当前电脑的系统,如果是Windows上浏览网页右侧显示会略有不同,当然也可以在Downloads下选择特定平台的版本安装文件。

安装Node.js

​ 在Node.js的官方下载地址上,选择要安装平台的安装文件进行安装

Node.js官方下载地址截图

​ 这里我选择的是12.16.3 LTS版本进行安装。

安装Hexo

执行安装命令

​ 在命令行执行以下命令(Mac、Linux下需要加上sudo权限)

1
$ npm install -g hexo

初始化网站

​ 在磁盘上创建好一个文件夹(本文章文件夹名为blog),用于保存网站文件,并切换到文件夹后,执行一下命令

1
2
$ cd blog
$ hexo init

生成默认网页

1
$ hexo generate # 也可以简写为 hexo g

启动本地预览服务

1
$ hexo server # 也可以简写为 hexo s

​ 默认的本地预览服务地址为 http://localhost:4000 ,需要先确保端口4000没有被占用,以免影响访问网页。不出意外,在浏览器上可以看到如下默认网页。

Hexo博客默认主题Hello World页面

修改主题

​ 如果对默认主题风格不满意,可以在hexo的官网上寻找自己喜欢的主题,并下载到theme目录下面。本博客使用的是NexT主题,可执行如下代码下载

1
$ git clone https://github.com/iissnan/hexo-theme-next themes/next # 若通过git clone下载,后续如果修改了主题配置,则无法提交修改后子模块源码到GitHub,建议下载后手动拷贝到themes文件夹下

​ 在 Hexo 中有两份主要的配置文件,其名称都是 _config.yml。 其中,一份位于站点根目录下,主要包含 Hexo 本身的配置;另一份位于主题目录下,这份配置由主题作者提供,主要用于配置主题相关的选项。

​ 为了描述方便,在以下说明中,将前者称为 站点配置文件, 后者称为 主题配置文件。打开 站点配置文件, 找到 theme 字段,并将其值更改为 next,以启用 NexT 主题

theme: next

​ 在切换主题之后、验证之前, 我们最好使用 hexo clean 来清除 Hexo 的缓存。重新执行hexo ghexo s即可查看应用新主题后的默认网页。

部署到GitHub

配置免密SSH登陆

​ 由于Hexo博客文章是通过提交代码实现,所以需要拥有github传输权限,但是直接使用用户名和密码不够安全,所以我们使用SSH Key来解决本地和服务器的连接问题。

1
2
$ cd ~/.ssh 
$ ls #检查本机已存在的ssh密钥

​ 如果没有任何结果,说明你是第一次使用git;如果仅有known_hosts文件,没有包含id_rsa字样文件,则需要创建SSH Key:

1
$ ssh-keygen -t rsa -C "邮件地址"

​ 然后连续3次回车(默认不添加密码),最终会生成两个文件(id_rsaid_rsa.pub)在用户目录下,打开用户目录,找到.ssh/id_rsa.pub文件,执行

1
$ cat id_rsa.pub

​ 并复制里面的内容(ssh-rsa开头、你输入的邮件地址内容结尾),打开你的github主页,进入Settings -> SSH and GPG keys -> New SSH key:

SSH配置截图

​ 将刚复制的内容粘贴到Key那里,Title按实际需要填写内容,保存后测试是否配置成功。

1
$ ssh -T git@github.com #注意地址不用改

​ 如果提示Are you sure you want to continue connecting (yes/no)?,输入yes,如果返回如下信息,说明SSH已配置成功:

Hi XXX! You’ve successfully authenticated, but GitHub does not provide shell access.

创建个人主页仓库

创建Github仓库截图

​ 这里需要注意的是,仓库名字格式为xxx.github.io,且前缀需要和Username一致,如果你的github账户名为blog,那么对应的的仓库名为blog.github.io。新建成功后,复制SSH地址。

SSH地址截图

绑定个人域名(可选)

​ 如果不绑定域名,只能通过默认的 xxx.github.io 来访问,如果你想更个性一点,可以在阿里云上注册一个域名(需要实名认证),并到控制台->域名->解析->解析设置->添加记录。

​ 域名解析配置最常见有2种方式,CNAME和A记录,CNAME填写域名,A记录填写IP,由于不带www方式只能采用A记录,所以必须先ping一下你Username.github.io的IP,然后到你的域名DNS设置页,将A记录指向你ping得到的IP,将CNAME指向Username.github.io,这样可以保证无论是否添加www都可以访问,如下所示:

域名解析设置截图

​ 此时需要到仓库下面,选择Settings->options,并下拉滚动条到GitHub Pages->Custom domain内填写上你的个人域名地址,如下所示:

GitHub Pages配置截图

​ 可以开启Enforce HTTPS,个人页面Github会自动添加HTTPS证书,不会提示连接不安全的问题。

此时还不能直接通过域名验证,由于阿里云免费的域名解析需要10分钟时间才能完全同步,且Github会自动申请添加HTTPS证书,需要一定时间。建议等待十分钟后,再查看是否可以正常访问。

上传Hexo生成的博客

​ hexo可以通过命令直接上传到git,但需要安装一个插件:

1
$ npm install hexo-deployer-git --save

​ 安装后,打开站点配置文件,找到deploy部分,修改repository项内容:

1
2
3
4
deploy:
type: git
repository: git@github.com:Username/Username.github.io.git
branch: master

​ 此时,到blog下输入

1
$ hexo deploy # 也可以简写为 hexo d

​ 就会将本次有改动的代码全部提交到master:

hexo d命令结果截图

上传Hexo博客源码(可选)

​ 为方便在MacOS、Windows不同电脑上随时编辑博客,且防止当前电脑故障,导致找不到Hexo配置及博文原始md文件,可以在存放Hexo博客生成的页面上创建一个新分支source,用于专门提交博客源码。

​ 操作步骤如下:

1
2
3
4
5
6
7
$ cd blog # 切换到博客文件夹下
$ git init # 初始化git
$ git remote add origin https://github.com/Username/Username.github.io.git # 替换为你实际的git地址
$ git checkout -b source # 创建并切换到新分支source
$ git add . # 添加当前所有文件(Hexo博客源码自带上传规则,会自动排出public等博客会自动生成的文件)
$ git commit -m "your description" # 添加提交版本描述
$ git push origin source #提交Hexo博客源码到source分支

​ 由于站点配置文件指定了上传博客网页的是master分支,所以提交Hexo博客源码切换的source分支,不会影响到hexo d的正常提交,两者互不冲突。

​ 至此,Hexo博客的安装部署工作已经完成!

]]>
<h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><p>​ 近来发现,之前学习过、实践过的东西,要用的时候经常一时想不起来。习惯性添加进谷歌浏览器的书签,也会因为对方博客文章删除等无法继续看到。特别的是,部署一个东西需要看几个网上资源才可以完成,书签列表越来越长,难以维护。为此,觉得还是很有必要通过写博客的方式进行分类记录,也方便分享经验。本着<code>能折腾就不闲着</code>的宗旨,在网上查阅有关资料后,决定在<strong>GitHub</strong>上搭建<strong>Hexo</strong>个人博客,顺便学习使用<strong>Markdown</strong>。</p>