Linux 驱动蓝牙

Linux 驱动蓝牙

搞了台新设备,设备带一个AX200网卡,又有Wi-Fi又有蓝牙,Wi-Fi直接免驱,蓝牙却无法驱动,经过研究搞定了这个事情,记录下。

安装驱动

  • 检查蓝牙服务
1
2
3
service bluetooth status
# 如果显示 masked 就输入下面的命令
systemctl unmask bluetooth.service
  1. 安装蓝牙控制套件
1
apt install bluez -y
  1. 获取蓝牙设备
1
2
bluetoothctl show
# 如果显示 No default controller available 则表示没有驱动起来
  1. 安装缺少的驱动
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
# 查看蓝牙情况
dmesg | grep blue
# 我这里显示
# bluetooth hci0: Direct firmware load for intel/ibt-20-1-3.sfi failed with error -2
# 表示缺少 ibt-20-1-3.sfi 驱动文件

# 进入驱动文件夹
cd /lib/firmware/intel
# 下载缺失的驱动,如果你缺少的是别的驱动,则替换掉文件名即可
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/ibt-20-1-3.sfi
# 下载完毕后重启设备
reboot now
# 再次查看蓝牙设备
bluetoothctl show
# 此时应该已经有内容了
# root@vm:~# bluetoothctl show
# Controller **:**:**:**:**:** (public)
# Name: vm
# Alias: vm
# Class: 0x00000104
# Powered: yes
# Discoverable: no
# Pairable: yes
# UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
# UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
# UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
# UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
# UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
# Modalias: usb:v1D6Bp0246d0532
# Discovering: no

设备控制

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
# 进入蓝牙控制 如果进入了,应该是这样的 [bluetooth]# 
bluetoothctl

# 开启扫描 屏幕上会出现一堆设备的 MAC 地址
scan on
# Discovery started
# [CHG] Controller E0:D4:E8:94:07:86 Discovering: yes
# [NEW] Device 54:21:C3:BC:77:1A 54-21-C3-BC-77-19
# [NEW] Device E9:33:F9:B9:6B:AF MX Keys
# [NEW] Device 48:AB:38:E9:67:89 48-AB-38-E9-67-84
# [NEW] Device F4:5C:89:AB:57:61 F4-5C-89-AB-57-66

# 关闭扫描
scan off

# 连接指定设备,屏幕上会出现不少内容,主要看
# 出现 Connection successful 则连接成功
connect E9:33:F9:B9:6B:AF

# 在蓝牙控制中 如果链接了蓝牙设备,或者断开了蓝牙设备都会有提示

# 有设备链接
# [CHG] Device E9:33:F9:B9:6B:AF Connected: yes
# [CHG] Device E9:33:F9:B9:6B:AF ServicesResolved: yes

# 有设备断开
# [CHG] Device E9:33:F9:B9:6B:DE ServicesResolved: no
# [CHG] Device E9:33:F9:B9:6B:DE Connected: no

如何在 macOS 下创建 Windows 安装U盘

如何在 macOS 下创建 Windows 安装U盘

即使所有设备都是苹果的东西了,但是还是避免不了身边的人需要使用 Windows 电脑,或者重装 Windows 系统,这时就需要创建 Windows 安装盘了。

准备

  • U盘(存储空间需要大于等于 8G,且要求格式化U盘)
  • Windows 系统镜像(ISO格式)
  • wimlib-imagex 大文件分割
  • rsync 文件复制

安装必备工具

使用 brew 安装这两个工具,如果已经安装请跳过

1
brew cask install rsync wimlib

制作

  1. 找到自己的U盘,如 disk3

    1
    diskutil list
  2. 格式化自己的U盘,并起名为 WINDOWS10,请务必确认替换掉disk3为你的U盘

    1
    2
    3
    diskutil eraseDisk MS-DOS "WINDOWS10" MBR disk3
    # 如果你清楚什么是 MBR/GPT 你也可以选择 GPT
    diskutil eraseDisk MS-DOS "WINDOWS10" GPT disk3
  3. 装载系统盘,直接双击挂载,如果你觉得手动方式一点都不酷,你也可以使用命令挂载

    1
    hdiutil mount ~/Downloads/Win10_2004_Chinese(Simplified)_x64.iso
  4. 复制除了sources/install.wim文件到U盘

    1
    rsync -vha --exclude=sources/install.wim /Volumes/CCCOMA_X64FRE_ZH-CN_DV9/* /Volumes/WINDOWS10
  5. 分割复制sources/install.wim到U盘

    因为这个文件太大,fat32格式装不下,会报错:File too large,所以需要分割复制。

    1
    wimlib-imagex split /Volumes/CCCOMA_X64FRE_ZH-CN_DV9/sources/install.wim /Volumes/WINDOWS10/sources/install.swm 4000

至此全部完成,现在可以直接当做 Windows 的启动盘了。

使用 SoftEther 搭建 L2TP VPN

使用 SoftEther 搭建 L2TP VPN

在openwrt上搭建 L2TP VPN 都推荐用 openswan、libreswan 比较繁琐,softether在openwrt上不知道为什么总是丢失配置文件,所以要在Linux上配置,softether这个简单易用还容易管理,也能完成多地组网的复杂操作。

安装

编译安装

1
2
3
4
5
6
7
8
9
10
# 安装编译工具
apt install build-essential gcc make wget tzdata git libreadline-dev libncurses-dev libssl-dev zlib1g-dev
# 下载源码
git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git
# 编译,我编译的时候丝般顺滑,一点报错都没有(Ubuntu 20.04)
cd SoftEtherVPN_Stable/
./configure
make
# 安装
make install

开机自启

创建文件:/lib/systemd/system/vpnserver.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/vpnserver start
ExecStop=/usr/bin/vpnserver stop

[Install]
WantedBy=multi-user.target
1
2
3
4
# 开启这个服务
systemctl enable vpnserver.service
# 启动服务
service vpnserver start

配置L2TP

配置

咕了,这东西配置起来很容易很容易,教程特别多,都是中文的,大致说一下有两种配置方式:

一种是通过命令行配置vpncmd,这里如果你的Linux服务器是中文的,那么这个vpncmd的命令帮助都是中文的,简直太简单,这个vpncmd值得好好玩一玩,GUI配置有些时候着实是不方便。

另一种是通过管理程序配置,也是中文的,配置工具下载 https://www.softether-download.com/cn.aspx?product=softether。

如果想要访问内网的东西,需要开启SecureNAT

参考配置教程:

  1. 中文:https://noter.tw/4524/softether-vpn-架設記錄/
  2. 官方英文(不推荐):https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/1.Setup_L2TP%2F%2F%2F%2FIPsec_VPN_Server_on_SoftEther_VPN_Server
  3. 中文:https://libertyleadingnetwork.blogspot.com/2018/01/softethervpsvpn.html
  4. 中文:http://blog.dengxj.com/archives/9/

端口转发

如果你和我一样是在内网配置的,且有公网IP,需要在路由器上转发UDP:500UDP:4500出去,再搞一个DDNS这样就可以远程访问家里了。

Ubuntu 编译 vmfs-tool

Ubuntu 编译 vmfs-tool

VMFS 文件系统想要在 linux 里读取,需要使用vmfs-fuse,但是这个工具已经下架了,所以需要自己编译,

其实编译整理来说就是缺什么下什么,然后就编译完了。

我的系统:ubuntu 20.04

vmfs-tools 下载地址

如果只做读取使用这个就可以了

下载下来后,直接安装即可

1
opkg -i vmfs-tools_0.2.5-1_amd64.deb

挂载 VMFS 文件系统

其实挂载VMFS 文件系统很简单,类似 mount 命令

1
2
3
4
5
# 查看哪个是 VMFS
fdisk -l
# 挂载 /dev/sdb3
mkdir /tmp/vmfs
vmfs-fuse /dev/sdb3 /tmp/vmfs

或者你也可以手动编译

安装需要的库

1
apt install git build-essential gcc pkg-config xsltproc libfuse-dev uuid-dev

下载源码编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载源码
cd /tmp
git clone https://github.com/glandium/vmfs-tools.git
cd vmfs-tools
# 开始编译
./configure
make
gcc -Wall -O2 -g -D_FILE_OFFSET_BITS=64 -Ivmfs-fuse -Ilibvmfs -I/usr/include/uuid -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -c -o vmfs-fuse/vmfs-fuse.o vmfs-fuse/vmfs-fuse.c
gcc -o vmfs-fuse/vmfs-fuse vmfs-fuse/vmfs-fuse.o libvmfs/libvmfs.a -luuid -lfuse -pthread
# 安装
make install
install -s -m 0755 debugvmfs/debugvmfs /usr/local/sbin/
install -s -m 0755 vmfs-lvm/vmfs-lvm /usr/local/sbin/
install -s -m 0755 vmfs-fuse/vmfs-fuse /usr/local/sbin/
install -s -m 0755 fsck.vmfs/fsck.vmfs /usr/local/sbin/

ESXI SSH 免密码登陆

ESXI SSH 免密码登陆

ESXI 的 authorized_keys/etc/ssh/keys-root/authorized_keys 所以 ssh-copy-id 不会成功。

查看自己的公钥

1
cat ~/.ssh/id_rsa.pub

把自己的公钥写入到

1
echo "你的公钥" > /etc/ssh/keys-root/authorized_keys

完毕

Mac 修改 hostname

Mac 修改 hostname

黑苹果,前一阵子升级了系统,顺利升级,唯独发现主机名变成了iMacPro,这就有些难受了,导致 airdrop 时出现了 两个机器,所以一定要修改回来,修改命令如下。

  1. 执行命令

    1
    2
    3
    4
    5
    sudo scutil --set LocalHostName RyzenMacPro
    sudo scutil --set HostName RyzenMacPro
    sudo scutil --set ComputerName RyzenMacPro
    sudo hostname RyzenMacPro
    dscacheutil -flushcache
  2. 重启路由器,不然 netbios 名称修改不过来

  3. 重启电脑,最好在重启路由器的操作执行过后就直接重启电脑

GitHub action 自动部署 Hexo

GitHub action 自动部署 Hexo

首先贴上我的 yaml 代码,这可能是目前最简洁的了,因为加上了缓存,所以执行起来也较快,使用的是 https://github.com/yrpang/github-actions-hexo。

执行耗时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Deploy blog
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache node modules # 缓存 node_modules
uses: actions/cache@v1
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- uses: yrpang/github-actions-hexo@master
env:
TZ: Asia/Shanghai # 设置时区
with:
deploykey: ${{secrets.DEPLOY_KEY}} # 这里注意对应自己配置的KEY的名称
username: github-action
email: action@github

使用 GitHub action 还是老生常谈的那一套secret keydeploy key就不多说了,参考:

与其它不太一样的是:

  1. 源码的package.json文件中必须包含hexo-deployer-git

  2. 源码的_config.yml文件中必须包含deploy块,且 repo 必须为 ssh 形式,如:

    1
    2
    3
    4
    5
    6
    7
    # ...
    # 部署
    ## Docs: https://hexo.io/docs/deployment.html
    deploy:
    type: git
    # 这里填写博客 repo 地址,非源码地址
    repo: git@github.com:YOU_USERNAME/blog.git

如果上面的条件确定满足了,直接复制上面的 action 代码使用即可。

本篇文章由 GitHub action 自动生成。

我的图床相关内容

我的图床相关内容

终于没忍住诱惑,还是用上了图床,特地来测试一下。

image-20200531000941619

环境

软件:uPic + Typora 配合

图床:Github + 自定义域名

安装

安装 uPic Typora

1
brew cask install upic typora

配置图床

官方教程

Github 图床提醒

在 github 图床的设置中,自定义域名设置与 github 的 pages 不同,需要加上 https://http://,如 img.baidu.com,要写成 https://img.baidu.com ,否则明明返回了图片地址 typora 依然会认为上传失败。

看来 typora 的正则比较严格 😔

PVE 增加 pve/root 容量

pve

PVE 增加 pve/root 容量

PVE 在安装时默认不会使用全部硬盘容量用作 pve/root ,为的是存储其它内容,诸如dump,但是我有其它的硬盘存储备份,所以需要把 pve/root 扩容。

1
2
3
4
5
6
7
8
9
10
11
# 增加全部剩余空间
lvresize -l +100%FREE /dev/pve/root
# 你也可以增加指定容量
# lvresize -l +10G /dev/pve/root

# 增加后确定扩容
resize2fs /dev/mapper/pve-root

# 查看是否扩容成功

lvdisplay
pve

PVE 硬盘相关

PVE 硬盘相关

休眠

PVE 硬盘不休眠的原因基本都是由于pvestatd一直在读取硬盘信息,导致不会休眠

所以问题就比较简单了

第一种方法 (比较粗暴,不推荐)

1
pvestatd stop

第二种方法

修改/etc/lvm/lvm.conf文件,开启 lvm 的 metadata 的缓存

1
2
3
4
# 开启
sed -i 's/use_lvmetad = 0/use_lvmetad = 1/g' /etc/lvm/lvm.conf
# 重启
pvestatd restart

如果开启的话,就会缓存 lvm 的信息,就不需要再读取硬盘获取了

第三种方法

修改/etc/lvm/lvm.conf文件,过滤不需要监控的盘

1
2
3
4
# 添加 "r|/dev/sd*|" 到 global_filter
global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|", "r|/dev/sd*|" ]
# 重启
pvestatd restart

通过以上方式允许硬盘休眠后,可以让硬盘立即休眠来测试下是否还会被唤醒

1
2
3
4
# 立即休眠
hdparm -y /dev/sdc
# 设置硬盘休眠时间为 5 分钟
hdparm -S 60 /dev/sdc

这里-S取值设定逻辑比较奇怪,本文列出部分常见取值供选:

30 = 2 min 30 sec

60 = 5 minutes

120 = 10 minutes

180 = 15 minutes

241 = 30 minutes

242 = 1 hour

243 = 1.5 hours

244 = 2 hours

持久化保存 休眠时间

不要添加到各种开机启动的脚本、crontab 中

编辑/etc/hdparm.conf就可以做到持久化保存休眠配置

第一种

在 command_line 处

1
2
3
command_line {
hdparm -S 60 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215
}

第二种

在 特定硬盘处

1
2
3
4
# 这里也可以改为 sdc 或者 /dev/disk/by-label/8TB,但是 UUID 最稳定
/dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
spindown_time = 60
}

挂载硬盘 给 lxc

首先需要注意的是,创建 LXC 容器需要在创建时开启了特权模式,否则只能读取但无法写入数据。

假设 lxc id 是 202

使用 sd* 挂载设备 (不推荐)

1
2
3
4
5
6
# 停止
pct stop 202
# 挂载 sdc 到 /data
pct set 202 -mp0 /dev/sdc,mp=/data
# 开机
pct start 202

使用 UUID 挂载设备(推荐)

因为 /dev/sdb /dev/sdc 这种形式可能会随着插拔设备之类的发生变动,或改变顺序,而 UUID 则不会改变

1
2
3
4
5
6
7
8
# 停止
pct stop 202
# 获取设备 UUID
blkid /dev/sdc
# 挂载 sdc 到 /data
pct set 202 -mp0 /dev/disk/by-uuid/312e15c4-c8e8-4465-8099-2f1cf007fe92,mp=/data
# 开机
pct start 202

PVE 移动虚拟磁盘到另一台虚拟机

PVE

PVE 移动虚拟磁盘到另一台虚拟机

准备工作,原主机和目标主机都要关机,然后把原主机的硬盘卸载

  1. 磁盘改名

    1
    2
    lvrename /dev/pve/vm-103-disk-1 /dev/pve/vm-200-disk-1
    # Renamed "vm-103-disk-1" to "vm-200-disk-1" in volume group "pve"
  2. 查看配置结构

    不知道怎么挂载的就手动添加一个硬盘查看下配置结构

    这里我添加了一个挂载点 /test ,大小 8G

    1
    cat /etc/pve/nodes/pve-asus/lxc/200.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    arch: amd64
    cores: 2
    hostname: localService1804
    memory: 2048
    mp0: local-lvm:vm-200-disk-1,mp=/test,size=8G
    net0: name=eth0,bridge=vmbr0,firewall=1,gw=10.0.0.1,hwaddr=DA:7D:AB:9D:AB:97,ip=10.0.0.250/24,type=veth
    ostype: ubuntu
    rootfs: local-lvm:vm-200-disk-0,size=8G
    swap: 2048
    unprivileged: 1

    我这个目的地是 lxc 的,所以路径不一样,如果是 kvm 就去 /etc/pve/nodes/pve-asus/qemu-server/200.conf

  3. 编辑配置文件

    添加 要挂载的磁盘 上去

    1
    echo "local-lvm:vm-200-disk-1,mp=/data,size=32G" >> /etc/pve/nodes/pve-asus/lxc/200.conf

    此时在 web 界面上,硬盘应该已经出现在目标主机了

  4. 开机验货

    完成

参考资料

  1. https://pve.proxmox.com/wiki/Moving_disk_image_from_one_KVM_machine_to_another

AMD 黑苹果 Catalina 简单记录

AMD 黑苹果 Catalina

本文主要是记录下在使用 Vanilla 折腾黑苹果过程中的各种问题。

操作主要是根据这里操作的:https://vanilla.amd-osx.com

除非特殊的硬件可能需要旧版外,所有 kext 都尽可能安装新版,旧版存在都问题新版都可能已经修复了,所以遇到问题不妨试试更新。

USB 驱动不完美导致的 USB 蓝牙不工作

描述

板载 USB 母口都能正常工作,但是板载针脚 USB 都不能驱动。

解决方案

先安装 USBInjectAll.kext 然后 打2个补丁

1
2
3
4
5
6
7
Name: com.apple.iokit.IOUSBHostFamily
Find: 83FB0F0F
Replace: 83FB3F0F

Name com.apple.driver.usb.AppleUSBXHCI
Find: 83F90F0F
Replace: 83F93F0F

Rx580 DP 口无法显示

描述

在安装系统时可以使用 DP 口输出内容,而安装完开机进入苹果系统后黑屏。

解决方案

先使用 HDMI 输出,随后使用使用 Clover Configurator 来更新到新版 Lilu.kext、WhateverGreen.kext 即可解决问题。

开机瞬间出现紫色横条

描述

Rx580 在苹果系统开机时出现瞬间的紫色线条,虽然马上就消失,但是很不舒服。

解决方案

还是需要打两个补丁,来源:https://github.com/athlonreg/Common-patches-for-hackintosh/commit/a333627981b83d2a6344391f0cc760dc94ba6b1f

1
2
3
4
5
6
7
Name: AMDSupport
Find: 553B0C90
Replace: 5539C990

Name: AMDSupport
Find: C704B1AA 55AA55
Replace: 90909090 909090

总是卡在 Report this panic

描述

安装过程中总是会提示 Report this panic,其中向上能看到 AppleMCEReporter 或 !A!IMCEReporter 字样

解决方案

安装 AppleMCEReporterDisabler.kext,地址:https://files.amd-osx.com/AppleMCEReporterDisabler.kext.zip

来源:https://amd-osx.com/2019/10/10/macos-catalina-is-on-amd/

添加或移除内存后不能开机

描述

在我给电脑加了两条内存后出现无法开机的状况,找了几个教程都文不对题。

错误提示:

1
2
3
OsxAptioFixDrv: Starting override for System\Library\CoreServices\boot.efi
Using rebloc block:yes,hibernate wake:no
++++++++++++++++++++++++++++++++++++++++

解决方案

进入Windows系统,使用 CPU-Z 生成一份报告,找到 Memory SPD 部分,然后逐个写进去,或者拔掉内存启动电脑用 Clover configure 写好在插上。

1
2
3
4
5
6
7
8
9
DIMM #				1            ==============>>>> 这个是内存插槽编号,写在 config.plist 时记得减 1,写在 Slot
SMBus address 0x50
Memory type DDR4 ==============>>>> 这个是内存类型,直接写在 Type 里就好
Module format UDIMM
Module Manufacturer(ID) CUSO (7F7F7F7F7F7F7F7FBC0000) ==============>>>> 这个是内存厂商,写在 Vendor 里
SDRAM Manufacturer (ID) Micron Technology (2C00000000000000000000)
Size 16384 MBytes ==============>>>> 这个是内存大小,写在 Size 里
Max bandwidth DDR4-2400 (1200 MHz) ==============>>>> 这个是内存频率,写在 Frequency 里
Part number CS4U2400D17161C ==============>>>> 这不知道怎么翻译,写在 Part 里

写下面的东西到,<key>Memory</key> 部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dict>
<key>Frequency</key>
<integer>内存频率</integer>
<key>Part</key>
<string>F4-3200C16-8GTZR</string>
<key>Size</key>
<integer>内存大小单位是MB</integer>
<key>Slot</key>
<integer>插槽编号</integer>
<key>Type</key>
<string>DDR4</string>
<key>Vendor</key>
<string>厂商</string>
</dict>

下面是我的 内存部分

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<key>Memory</key>
<dict>
<key>Channels</key>
<integer>2</integer>
<key>Modules</key>
<array>
<dict>
<key>Frequency</key>
<integer>2400</integer>
<key>Part</key>
<string>CS4U2400D17161C</string>
<key>Size</key>
<integer>16384</integer>
<key>Slot</key>
<integer>0</integer>
<key>Type</key>
<string>DDR4</string>
<key>Vendor</key>
<string>CUSO</string>
</dict>
<dict>
<key>Frequency</key>
<integer>2400</integer>
<key>Part</key>
<string>F4-3200C16-8GTZR</string>
<key>Size</key>
<integer>8192</integer>
<key>Slot</key>
<integer>1</integer>
<key>Type</key>
<string>DDR4</string>
<key>Vendor</key>
<string>G.Skill</string>
</dict>
<dict>
<key>Frequency</key>
<integer>2400</integer>
<key>Part</key>
<string>CS4U2400D17161C</string>
<key>Size</key>
<integer>16384</integer>
<key>Slot</key>
<integer>2</integer>
<key>Type</key>
<string>DDR4</string>
<key>Vendor</key>
<string>CUSO</string>
</dict>
<dict>
<key>Frequency</key>
<integer>2400</integer>
<key>Part</key>
<string>F4-3200C16-8GTZR</string>
<key>Size</key>
<integer>8192</integer>
<key>Slot</key>
<integer>3</integer>
<key>Type</key>
<string>DDR4</string>
<key>Vendor</key>
<string>G.Skill</string>
</dict>
</array>
<key>SlotCount</key>
<integer>3</integer>
</dict>

常用 kext 官方主页

不是说从第三方下载不好或者不安全什么的,而是第三方更新可能不及时,很多时候更新能解决你现有的问题。

其他的我用不到或者找不到官方主页就不放了。

使用 overture DNS

使用 overture DNS

  1. 下载 overture 并解压

    https://github.com/shawn1m/overture/releases/ 下载并解压

  2. 编辑配置文件 config.json ,如果使用下面的配置记得删掉所有注释

    下载 gfwlist 和 china_ip_list

    1
    2
    wget https://cokebar.github.io/gfwlist2dnsmasq/gfwlist_domain.txt -O gfwlist_domain.txt
    wget https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt -O china_ip_list.txt
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    {
    "BindAddress": ":53", // 绑定的端口
    "DebugHTTPAddress": "127.0.0.1:5555", // 可以通过 curl 127.0.0.1:5555/cache 查看缓存情况
    "PrimaryDNS": [ // 主DNS
    {
    "Name": "DNSPod",
    "Address": "119.29.29.29:53",
    "Protocol": "udp",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    },
    {
    "Name": "AliDNS",
    "Address": "223.5.5.5:53",
    "Protocol": "udp",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    }
    ],
    "AlternativeDNS": [ // 副 DNS
    {
    "Name": "OpenDNS",
    "Address": "208.67.222.222:443",
    "Protocol": "tcp",
    "SOCKS5Address": "",
    "Timeout": 4,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    },
    {
    "Name": "CloudFlareDNS",
    "Address": "one.one.one.one:853@1.1.1.1",
    "Protocol": "tcp-tls",
    "SOCKS5Address": "",
    "Timeout": 4,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    },
    {
    "Name": "GeekDNS",
    "Address": "ndns.233py.com:853",
    "Protocol": "tcp-tls",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    },
    {
    "Name": "RubyFish",
    "Address": "dns.rubyfish.cn:853",
    "Protocol": "tcp-tls",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    },
    {
    "Name": "BlahDNS",
    "Address": "dot-jp.blahdns.com:853",
    "Protocol": "tcp-tls",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    }
    ],
    "OnlyPrimaryDNS": false, // 是否仅使用 主DNS
    "IPv6UseAlternativeDNS": false, // IPv6 使用副 DNS
    "WhenPrimaryDNSAnswerNoneUse": "PrimaryDNS",
    "IPNetworkFile": {
    "Primary": "./china_ip_list.txt",
    "Alternative": ""
    },
    "DomainFile": {
    "Primary": "", // 强制使用主dns解析的域名列表
    "Alternative": "./gfwlist_domain.txt", // 强制使用副dns解析的列表
    "Matcher": "regex-list" // 使用 正则匹配
    },
    "HostsFile": "./hosts", // 自定义 hosts 绑定
    "MinimumTTL": 1200, // 最小缓存存留时间,0 关闭
    "DomainTTLFile": "./domain_ttl_sample", // 域名缓存时间列表
    "CacheSize": 1024, // 缓存大小,0关闭,建议开启
    "RejectQType": [
    255
    ]
    }
  3. 加执行权限

    1
    chmod +x /etc/overture-dns/overture-linux-amd64
  1. 执行

    1
    ./overture-linux-amd64

从 nextcloud URI 中移除 index.php

从 nextcloud URI 中移除 index.php

仅限 Apache

  1. 编辑 nextcloud 配置文件,增加'htaccess.RewriteBase' => '/',

    1
    nano /var/www/nextcloud/config/config.php
  2. 使用 occ 命令更新.htaccess文件

    1
    2
    occ maintenance:update:htaccess
    # .htaccess has been updated
  3. 完成,刷新网页看效果

apt 禁止使用IPv6

apt 禁止使用IPv6

虽然IP v6很好,也开始普及了,但是也仅仅是能够获得IP v6地址和访问部分IP v6网站,路由基本一塌糊涂,apt 更新时经常会在IP v6上卡住,而又不想彻底抛弃IP v6,所以需要禁止 apt 使用IP v6。

1
echo 'Acquire::ForceIPv4 "true";' | tee /etc/apt/apt.conf.d/99force-ipv4

tar 解压遇到的小问题

tar 解压遇到的小问题解决

  1. 报错tar: Ignoring unknown extended header keyword时需要安装bsdtar例如Ubuntuapt install bsdtar,使用bsdtar即可轻松解决问题,参数不需要变,如tar xvf xxx.tar.gz变为bsdtar xvf xxx.tar.gz

  2. 报错Pathname can't be converted from UTF-8 to current locale.时只需要增加--warning=no-unknown-keyword参数即可,如tar xvf xxx.tar.gz变为tar xvf xxx.tar.gz --warning=no-unknown-keyword。解压出来的东西是没问题的,就是可能文件名显示有问题,不过这就是另一回事了。

Ubuntu Server 迁移 Mongodb 数据到 XFS 文件系统

Ubuntu Server 迁移 Mongodb 数据到 XFS 文件系统

XFS 很强,具体有多强需要自己去查资料了,总之Mongodb使用是有好处的。

添加硬盘并格式化

  1. 首先添加一块硬盘,我这里的硬盘为/dev/sdb,并且格式化为 XFS,命令为 mkfs.xfs /dev/sdb
  2. 然后查看是否格式化成功df -Th,这里没有挂载的地址。
  3. 接下来准备修改fstab 文件,使用blkid /dev/sdb获取UUID(UUID比设备名稳定)。
  4. 然后创建一个文件夹用于挂载硬盘,我这里使用的/data
  5. 然后在/etc/fstab添加一行UUID=你的UUID /data xfs defaults,noatime,nobarrier 0 0
  6. 最后执行mount -a如无报错则使用df -Th就能看到已经成功挂载了。

修改配置

  1. 执行service mongodb stop停止服务。
  2. 创建文件夹mkdir /data/db
  3. 编辑/etc/mongodb.conf里的dbpath,修改为dbpath=/data/db

迁移数据

  1. 执行/var/lib/mongodb/* /data/db移动数据。
  2. 然后执行chown mongodb:mongodb -R /data/db恢复权限。

启动

  1. 执行service mongodb start恢复服务。
  2. 执行service mongodb status查看服务运行状态,显示active (running)则启动成功。
  3. 执行mongo查看是否还有XFS的提醒,如果没有则一切OK。

如何转移 MySQL 的数据到 MongoDB

如何转移 MySQL 的数据到 MongoDB

我的系统是 Ubuntu

  1. 安装 ruby

    1
    apt install ruby
  2. 安装 mongoify

    1
    gem install mongoify
  3. 配置数据库

    1. 新建一个database.config

    2. 填写数据库配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      sql_connection do
      adapter "mysql2"
      host "localhost"
      username "root"
      password "passw0rd"
      database "my_database"
      end

      mongodb_connection do
      host "localhost"
      database "my_database"
      end
  4. 检查数据库配置

    1
    2
    3
    4
    5
    mongify check database.config
    # 如果提示 Specified 'mysql' for database adapter, but the gem is not loaded. Add `gem 'mysql'` to your Gemfile 则需要安装 mysql
    # gem install mysql2
    # 如果安装 mysql2 提示:mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h 则需要安装 libmysqlclient-dev
    apt install libmysqlclient-dev

    提示这个即可下一步

    1
    2
    SQL connection works
    NoSQL connection works
  5. 配置转移配置

    1. 先自动生成一个

      1
      mongify translation database.config > translation.rb
    2. 随后开始根据文档修改,或者如果没有需要动的结构直接迁移即可,这是文档地址)。

  6. 开始转移

    1
    mongify process database.config translation.rb

附录

  1. 转移过程中 清理/修改 数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    table "sgk" do
    # 修改列名
    column "name1", :string, :rename_to => 'username'
    # 保持原样,未作修改
    column "email", :string
    # 忽略这个列
    column "id", :key, :ignore => true

    # 保存之前操作
    before_save do |row|
    # 清理空格
    if row.username
    row.username = row.username.strip
    end
    end
    end

解决 Ubuntu MySQL 导出文件无法写入

解决 Ubuntu MySQL 导出文件无法写入

错误提示ERROR 1 (HY000): Can't create/write to file '' (Errcode: 13 - Permission denied)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看是否有限制
aa-status | grep mysqld
# 如果有输出则表示有限制

# -----------------------------------

# 编辑配置,给指定的目录增加权限
nano /etc/apparmor.d/usr.sbin.mysqld
# 添加以下内容到/usr/sbin/mysqld {}
/to/path/ r,
/to/path/** rwk,
# 保存

# -----------------------------------
# 重新加载
/etc/init.d/apparmor reload
# 完毕

如何在 Ubuntu 18.04 中修改 DNS

如何在 Ubuntu 18.04 中修改 DNS

  1. 先安装 resolvconf

    1
    sudo apt install resolvconf
  2. 然后编辑配置文件

    编辑/etc/resolvconf/resolv.conf.d/head修改nameserver配置项,内容类似:

    1
    2
    nameserver 8.8.4.4
    nameserver 8.8.8.8
  3. 重启 reslovconf

    1
    sudo service resolvconf restart

解锁网易云音乐

解锁网易云音乐

网易云、QQ音乐等内容全都有版权问题,即使有VIP也不能全听,换APP很烦

搭建

我的环境比较特殊,不一定大家能参考,仅做记录。

我在路由器上把 music.163.cominterface.music.163.com都解析到了我的内网已经搭建了这个服务的主机上,这样整个内网的机器就不需要设置代理了,不然那么多设备设置的要累死了。

  1. 安装 nodejs、git、supervisor

    1
    2
    curl -sL https://deb.nodesource.com/setup_10.x | bash -
    apt install -y nodejs git supervisor
  2. 克隆代码

    1
    2
    3
    git clone https://github.com/nondanee/UnblockNeteaseMusic.git
    # 记录路径
    pwd
  3. 配置 supervisor,替换下面的 /home/pi 为刚才的路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [program:unblock]
    command=/usr/bin/node /home/pi/UnblockNeteaseMusic/app.js -p 80
    stdout_logfile=/tmp/UnblockNeteaseMusic.log
    autostart=true
    autorestart=true
    startsecs=5
    priority=1
    stopasgroup=true
    killasgroup=true
  4. 启动

    1
    2
    3
    4
    sudo supervisorctl reload
    # 查看是否运行
    sudo supervisorctl status
    # unblock RUNNING pid 774, uptime 0:10:36
  5. 配置路由器DNS,这个支持的路由器配置起来很简单,如果不支持的路由器也没办法配置

  6. 整个网络的网易云都可以听了

修复黑苹果时间错误

修复黑苹果时间错误

最近在玩黑苹果,但是因为我的 CPU 是动态睿频的,导致 CPU 时间总会出错,每秒钟都会快击败毫秒,并且在使用 safari 浏览器播放视频时声画不同步。在 Clover 中的 CPU 里修改了频率也无效,去掉 NTP 服务器后面的点.也没用,所以想了歪点子,就是加快与 NTP 服务器同步的频率,默认是3600秒,修改为60秒,这样有时间差也不会太夸张,但这个办法不能修复声画不同步。

命令方式

系统版本 >= High Sierra

100%有效, 缺点是不知道为什么每次同步时间,窗口都会失去焦点。 之前的每次都会失去焦点是因为Dynamic dark mode应用导致的,非常完美。

1
2
# 这条命令是每分钟与时间服务器同步一次
while true; do sudo sntp -sS time.asia.apple.com; sleep 60; done

如果报错 kod_init_kod_db(): Cannot open KoD db file /var/db/ntp-kod: No such file or directory 执行下面的命令即可

1
2
sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod

或者使用crontab

1
2
3
crontab -e
# 每分钟同步一次时间
* * * * * sntp -sS time.asia.apple.com >> /tmp/time_sync.log

修改 plist

打开/System/Library/LaunchDaemons/com.apple.timed.plist,找到StartInterval项,修改360060,重启即可。

附修改好的 plist

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
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>GroupName</key>
<string>_timed</string>
<key>JetsamProperties</key>
<dict>
<key>JetsamMemoryLimit</key>
<integer>2500</integer>
<key>JetsamPriority</key>
<integer>-49</integer>
</dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.apple.timed</string>
<key>LaunchEvents</key>
<dict>
<key>com.apple.systemconfiguration</key>
<dict>
<key>airplane mode changed</key>
<dict>
<key>Identifier</key>
<string>com.apple.radios.plist</string>
<key>KeyPath</key>
<string>AirplaneMode</string>
<key>Value</key>
<false/>
</dict>
</dict>
</dict>
<key>MachServices</key>
<dict>
<key>com.apple.timed.xpc</key>
<true/>
</dict>
<key>POSIXSpawnType</key>
<string>Interactive</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/timed</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
<key>ThrottleInterval</key>
<integer>3</integer>
<key>UserName</key>
<string>_timed</string>
</dict>
</plist>

参考资料

  1. stackexchange

通过 brew cask 安装 Mac 应用

Mac

通过 brew cask 安装 Mac 应用

1
2
3
4
5
brew cask install dynamic-dark-mode typora mounty ezip balenaetcher visual-studio-code iina mos brooklyn clipy proxyman switchhosts fork google-chrome qlmarkdown v2rayu

# 几乎所有的特殊字体都有了
brew tap caskroom/fonts
brew cask install font-hack-nerd-font

列表

  • dynamic-dark-mode 根据时间自动切换到夜间模式

  • typora 实时 markdown 编辑器,对大纲支持的更好,比 mark-text 更出色

  • mounty 挂载 NTFS 的工具

  • ezip 压缩解压缩的神器

  • balenaetcher 烧录镜像到 U 盘的神器

  • visual-studio-code 强大的代码编辑器 VSCode

  • iina 视频播放器,支持多格式

  • Mos 第三方鼠标滚动顺滑方案,免费且远超收费的 smoothscroll

  • clipy 剪切板增强,历史记录等

  • brooklyn 苹果风格的屏保

  • proxyman HTTP/HTTPS 抓包工具,免费,漂亮,好用

  • switchhosts hosts 文件快速切换编辑

  • fork git 客户端,漂亮,高性能

  • google-chrome 谷歌浏览器

  • qlmarkdown Markdown 快捷预览工具

  • v2rayu V2ray Mac 客户端,支持订阅

设置 sudo 命令不需要密码

设置 sudo 命令不需要密码

1
2
3
4
5
6
# 编辑 sudo 命令权限文件
sudo visudo
# 在最后一行增加
# 要免密码的用户名 ALL=(ALL) NOPASSWD: ALL
# 例如
zhangsan ALL=(ALL) NOPASSWD: ALL

安装 Cloudreve

NAS

安装 Cloudreve

ubuntu 18.04

docker 那个版本总是有问题就算了 (2019/04/16)

之所以要安装是因为长得好看

安装

1
2
# 安装必备内容
apt install mysql-server apache2 php php-curl php-gd php-dom php-mbstring php-zip php-mysql php-mysqli -y

mysql 创建数据库

1
CREATE DATABASE cloudreve CHARACTER SET utf8 COLLATE utf8_general_ci;

安装 composer

1
2
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

安装 cloudreve

1
2
cd 你要安装的目录
composer create-project hfo4/cloudreve:dev-master

交互环节

1
2
3
4
5
6
7
8
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? # Y
Input the hostname of your MySQL server (Default:127.0.0.1): //数据库连接地址,本的话默认回车
The database name:pan //数据库名称
The username of your MySQL server (Default:root):root //数据库用户名
The password of your MySQL server:mf8.biz //数据库用户密码
The hostport of your MySQL server (Default:3306): //数据库端口,默认回车

The full-url to access to your Cloudreve (e.g. https://pan.aoaoao.me/ , 'http' must be included in the front and '/' must be included at the end): //网站域名, 必须 http:// 或者 https:// 开头, / 结尾

安装完毕

1
2
3
4
5
6
# Congratulations! Cloudreve has been installed successfully.
# Here's some informatioin about yor Cloudreve:
# Homepage: 刚才输入的地址/ //首页地址
# Admin Panel: 刚才输入的地址/Admin //后台地址
# Default username: admin@cloudreve.org //管理员账号
# Default password: admin //管理员密码

备注

  • 如果可以打开首页但是其他页面都无法访问,记得开启 apache2 伪静态

    1
    2
    3
    4
    sudo a2enmod rewrite
    sudo service apache2 restart
    # 替换 AllowOverride None -> AllowOverride All
    sudo nano /etc/apache2/apache2.conf

PVE 安装配置

PVE 安装配置

常见的 PVE 安装配置我就不说了

移除 PVE 企业源

1
2
# 还是不要删除了
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak

去除订阅提示 6.X

1
sed -i "s/checked_command: function(orig_cmd) {/checked_command: function(orig_cmd) {return;/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

硬盘直通

1
2
3
4
# 获取硬件ID,找到 硬盘,一般以 ata- 开头
ls -l /dev/disk/by-id/
# qm set 虚拟机ID --硬盘类型和编号 硬件ID
qm set 1000 --sata0 /dev/disk/by-id/ata-WDC_WD3200AAJS-00L7A0_WD-WMAV2C195655

Windows 链接匿名 SMB

Windows 链接匿名 SMB 共享

Windows 10 1709 后默认不允许匿名链接 SMB

解决办法是:

  1. 启用或关闭 Windows 功能

  2. 勾选 “SMB 1.0/CIFS 文件共享支持”

  3. 保存并重启电脑即可

修复 SpaceVim 在 Mac 系统上的乱码

Mac

修复 SpaceVim 在 Mac 系统上的乱码

在 Mac iTerm 上,可能会出现 文字乱码的问题,即使你安装了 Powerlines 系列字体也一样,其原因是缺少 Hack Nerd 字体。

修复办法

首先需要安装字体

1
2
brew tap caskroom/fonts
brew cask install font-hack-nerd-font

然后设置 iTerm

Profile – Text – 勾选 Use different font for non-ASCII text – 在出现的 non-ASCII 中选择 Hack Nerd 字体

重启 iTerm

保存 Git 认证信息

保存 Git 认证信息

如果经常 git pull 而且总是要输入密码信息一定很麻烦

代码

1
2
3
4
5
cd codedir # 跳转到代码目录,确保其中有 .git 文件夹
git config credential.helper store # 开启密码保存功能
git pull # 输入认证信息
git pull # 验证是否需要输入认证信息
# 结束

修复 the following signatures couldn’t be verified because the public key is not available 错误

修复 public key is not available

the following signatures couldn’t be verified because the public key is not available

错误提示:

例如:

1
2
3
Err:6 https://dl.yarnpkg.com/debian stable InRelease

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 23E7166788B63E1E

解决办法:

1
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 23E7166788B63E1E

PUBKEY 要一致,例如上文中的:23E7166788B63E1E

安装官方版 LEDE 到 virtualbox

安装官方版 LEDE 到 virtualbox

已放弃 Deprecated,已放弃 Deprecated,已放弃 Deprecated, 已改回我最老的 r8000 merlin 性能虽然差,但免折腾

不知为何我在虚拟机中的 koolshare 版本 lede 有奇怪的问题, 例如当开启 v2ray 时, 每隔 8 小时(怀疑与 DHCP 有关) v2ray 必然短链, 且重启插件无效, 日志中都是疯狂的自动重启, 必须要重启系统(koolshare 版 lede)才可以重新连接上 v2ray, 或者是使用 PC Chrome 登陆不上去 Web 配置界面, 必须开启隐私浏览才能登陆或者换其他浏览器(应该是 Chrome 的锅, 但也不爽), 所以有了安装官方版 LEDE 到 virtualbox 的想法, 这肯定是个大坑.

梅林开机自动执行脚本

梅林开机自动执行脚本

  1. 编辑文件
1
vi /jffs/scripts/init-start
  1. 写入要执行的内容
1
2
3
4
#!/bin/sh
# 这里是执行超频到 1400Mhz
nvram set clkfreq=1400,900
nvram commit
  1. 设置权限
1
2
chmod a+rx /jffs/scripts/init-start
# chmod a+rx /jffs/scripts/*

Python3 简易多线程HTTP文件服务器

Python 搭建简单文件服务器

偶尔我们会需要让别人下载点文件,但是Apache、NGINX都有点过于重了,而实际上使用一条命令即可实简易的文件服务器。

Python3 单线程文件服务器

这句代码执行后会绑定所有IP,8000端口,列当前目录

如果文件很小,或者网速很快,则只需要使用这个就足够了

1
python3 -m http.server

Python3 多线程文件服务器

如果文件较大或者网速较、高迸发的情况则需要使用多线程的,防止文件服务器卡死

用法:

1
2
3
4
# 运行在当前目录、8000端口
python3 server.py
# 运行在 /tmp 目录、8888端口
python3 8888 /tmp

保存脚本为 server.py

Hello

  1. 尝试 hugo
  2. 测试发布