本文使用 小米路由官方固件 实现自定义IPV6防火墙的高级功能
首先到 https://github.com/openwrt-xiaomi/xmir-patcher 下载最新的脚本,Windows 用户直接运行 run.bat 即可
确认 IP 设置正确后,选择 2 后按提示开始安装并设置密码
安装完成后即可通过如下命令连接
ssh -o HostKeyAlgorithms=+ssh-rsa [email protected]SSH 进入小米官方固件,可以看到系统是由 OpenWRT 修改而来,所以放行端口的方式类似原版 OpenWRT, 打开配置文件 /etc/config/firewall 并添加如下内容
config rule
option name 'Allow-NAS'
list proto 'tcp'
option src 'wan'
option dest 'lan'
list dest_ip '::设备的后缀/::ffff:ffff:ffff:ffff'
option dest_port '端口号'
option target 'ACCEPT'
option family 'ipv6'路由器下级设备某个IPV6后四位IP固定不变的设备,例如::11aa:22bb:33cc:44dd/::ffff:ffff:ffff:ffff,该设备11aa:22bb:33cc:44dd固定不变)
保存后运行 /etc/init.d/firewall restart 即可生效
uci set firewall.aliddns=include
uci set firewall.aliddns.type='script'
uci set firewall.aliddns.path='/data/aliddns.sh'
uci set firewall.aliddns.enabled='1'
uci commit firewall官方的自定义 hosts 功能通过修改文件 /etc/custom_hosts 实现
修改 /etc/dnsmasq.d/custom.conf 为如下内容
address=/hismarttv.com/127.0.0.1保存后运行 /etc/init.d/dnsmasq restart 即可生效
ifconfig wl3 down
]]># 允许 iptables 检查桥接流量
sudo tee /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF
sudo tee /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 使设置生效
sudo modprobe overlay br_netfilter
sudo sysctl --system
# 禁用虚拟内存
sudo swapoff -a# 安装 containerd
curl -sL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg
echo "deb http://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y containerd.io
# 安装 kubeadm
curl -sL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-archive-keyring.gpg
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubeadm=1.21.14-00 kubectl=1.21.14-00 kubelet=1.21.14-00# 安装 containerd
sudo curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
sudo yum install -y containerd.io
sudo systemctl enable containerd
# 安装 kubeadm
sudo tee /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=0
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y --enablerepo=kubernetes kubeadm-1.21.14 kubelet-1.21.14 kubectl-1.21.14
sudo systemctl enable kubelet# 配置容器运行时
sudo tee /etc/containerd/config.toml << EOF
version = 2
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://hub-mirror.c.163.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://registry.lan:5000"]
EOF
sudo systemctl restart containerd
# 添加自动填充
sudo tee /etc/profile.d/kubectl.sh << EOF
source <(kubectl completion bash)
source <(crictl completion bash)
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
# 配置 crictl
sudo tee /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
EOFsudo kubeadm init --kubernetes-version=1.21.14 --token=abcdef.0123456789abcdef \
--apiserver-advertise-address=$(ip addr show dev eth0 | grep -Po 'inet \K[\d.]+') \
--cri-socket=unix:///run/containerd/containerd.sock \
--image-repository=registry.aliyuncs.com/google_containers稍等几分钟,K8S 的 Master 节点就启动起来了
# 其他节点加入集群
sudo kubeadm join node1.lan:6443 --token=abcdef.0123456789abcdef --discovery-token-unsafe-skip-ca-verification# 链接 kubeconfig
sudo chmod +r /etc/kubernetes/admin.conf
# 配置网络插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
# 去除污点
kubectl taint node --all node-role.kubernetes.io/master-
# 安装 Helm
curl -sL https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz | sudo tar zxf - --strip-components=1 -C /usr/local/bin
# 安装 Traefik Ingress Controller
helm install traefik -n kube-system --repo https://helm.traefik.io/traefik traefiksudo kubeadm reset --cri-socket=unix:///run/containerd/containerd.sock -f
sudo rm -rf /var/lib/{calico,etcd,kubelet,kubernetes,cni} /etc/cni/net.d /etc/kubernetes /opt/cni/bin/*]]>参考资料
首先到 Debian 官网 下载网络安装镜像 debian-11.0.0-amd64-netinst.iso
Ventoy 的便利性这里不做赘述,下载最新版 Ventoy2Disk 一键制作启动盘
然后将刚在下载的 ISO 文件拷贝到U盘根目录下面
博主的笔记本是没有有线网卡的,首先需要下载网卡 固件文件 驱动无线网卡,可以根据自己的网卡型号选择不同的固件,博主为了安装黑苹果,已经将笔记本自带的无线网卡更换为 D1830A,此处使用的是博通的固件
| 厂商 | 固件 | 文档 |
|---|---|---|
| 英特尔(Intel) | firmware-iwlwifi | https://wiki.debian.org/iwlwifi |
| 博通(Broadcom) | firmware-brcm80211 | https://wiki.debian.org/brcmfmac |
| 瑞昱(Realtek) | firmware-realtek | |
| 高通(Atheros) | firmware-atheros |
使用 ar x firmware-xxx.deb 命令解压得到 data.tar.xz 得到固件压缩包。
下面使用 Ventoy 文件注入插件 把固件文件注入到安装盘中,
编辑 U盘中的 ventoy\ventoy.json 为如下内容
{
"injection": [{
"image": "/debian-testing-amd64-netinst.iso",
"archive": "/firmware-brcm80211.tar.xz"
}]
}重启电脑按 F12 进入启动选单,选择 EFI USB Device 即可进入 Ventoy 启动界面

安装器的语言选择 简体中文


Debian 可以搭配多种 桌面环境 安装,大多数时候在选择组件时候勾选其中一项桌面环境即可,如果不是折腾党可以跳过此节。

由于通过 tasksel 安装的桌面环境会预安装 浏览器、播放器、libreoffice等组件,虽然可以事后通过 sudo apt purge -y libreoffice? firefox-esr h3v 命令卸载,但是作为重度强迫症患者实在不能忍。

当安装程序提示完成的时候,不要重启,按 Ctrl+Alt+F2 快捷键输入以下命令,然后安装桌面必要组件以及网络管理器
mount /dev/pts /target/dev/pts
chroot /target bash
sudo sed -i 's/bullseye main/bullseye main contrib non-free/g' /etc/apt/sources.list
sudo sed -i 's/security.debian.org/mirrors.163.com/g' /etc/apt/sources.list
sudo apt update
XFce 桌面环境 sudo apt install -y xfce4 network-manager-gnome fonts-wqy-zenhei
LXDE 桌面环境 sudo apt install -y lxde-core connman-ui fonts-wqy-zenhei
LXQt 桌面环境 sudo apt install -y sddm lxqt-core lxqt-admin cmst fonts-wqy-zenhei
Cinnamon 桌面环境 sudo apt install -y cinnamon-core
Budgie桌面环境 sudo apt install gdm3 budgie-desktop budgie-network-manager-applet fonts-wqy-zenhei
安装过程中可以通过Ctrl+Alt+F2组合键进入中断,Ctrl+Alt+F1返回安装界面
/lib/firmware/i195 目录中cat > ~/.Xresources << EOF
Xft.dpi: 130
EOF修改 /etc/NetworkManager/NetworkManager.conf 将 managed=false 改为 managed=true
LXQt 桌面的用户可以通过开始菜单中的 首选项 -> LxQT 设置 -> 键盘与鼠标 中的 鼠标与触摸板 配置多指手势。但是LXDE 的用户就没有这么方便了,可以通过配置 libinput 的方法达到效果
运行 sudo apt install -y xserver-xorg-input-libinput 安装 Libinput
编辑 /usr/share/X11/xorg.conf.d/40-libinput.conf 修改如下内容
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "Tapping" "true"
Option "NaturalScrolling" "true"
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
EndSection重启后即可使用触摸板的 轻点、双指右键等功能
运行 sudo apt edit-sources 将如下内容添加到最后
deb http://mirrors.163.com/debian/ bullseye-backports main
deb-src http://mirrors.163.com/debian/ bullseye-backports main安装内核文件
sudo apt -t bullseye-backports install -y linux-image-amd64echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/90-cloudimgwget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.debWPS Office for Linux 是由金山软件股份有限公司自主研发的一款办公软件套装,可以实现办公软件最常用的文字、表格、演示等多种功能。具有内存占用低、运行速度快、体积小巧、强大插件平台支持、免费提供海量在线存储空间及文档模板。
curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] http://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt install -y code选择 File -> Prefernces -> Setting,Window 下的 Title Bar Style 选择为 custom
https://packages.debian.org/bullseye/ttf-mscorefonts-installer
修改 /etc/apt/source.list 增加 contrib
sudo apt install -y ttf-mscorefonts-installer 修改 editor.fontFamily 为 Courier New
sudo curl -sL https://mirrors.163.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
echo "deb [arch=amd64] http://mirrors.163.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list
apt update && apt install -y docker-ce即将推出的 Debian Bullseye 中,由于 deepin-wine-plugin-virtual 所依赖的 python-dbus 和 python-gobject 两个基于 Python2.7 的包被砍掉了,所以没办法像 Debian 10 一样简单的补充一个 udis86 包就能解决依赖问题。Debian 10 用户可以只看下一节的 安装 Wine
此处采用了重新打包两个 deb 文件,将依赖重定向到 Python3 版本的方案
mkdir -p python-dbus/DEBIAN python-gobject/DEBIAN
cat > python-dbus/DEBIAN/control << EOF
Package: python-dbus
Version: 1.2.16-5
Architecture: all
Maintainer: Debian GNOME Maintainers
Depends: python3-dbus
Section: python
Priority: optional
Description: simple interprocess messaging system (Python interface)
EOF
cat > python-gobject/DEBIAN/control << EOF
Package: python-gobject
Version: 3.30.4-1
Architecture: all
Maintainer: Debian GNOME Maintainers
Depends: python3-gi
Section: python
Priority: optional
Description: Python 3 bindings for gobject-introspection libraries
EOF
dpkg -b python-dbus python-dbus.deb
dpkg -b python-gobject python-gobject.deb
sudo apt install -y ./python-*.deb# 添加 Deepin 商店源
wget http://mirrors.163.com/deepin/pool/main/d/deepin-keyring/deepin-keyring_2021.06.07-1_all.deb
sudo apt install -y ./deepin-keyring_*.deb
echo "deb https://com-store-packages.uniontech.com/appstore eagle appstore" | sudo tee /etc/apt/sources.list.d/appstore.list
# 安装 x86 反汇编引擎
sudo dpkg --add-architecture i386
sudo apt update
wget http://mirrors.163.com/deepin/pool/non-free/u/udis86/udis86_1.72-4_i386.deb
sudo apt install -y ./udis86_*.deb
# 安装 Deepin-Wine5
sudo apt install -y deepin-wine-plugin-virtual
# 处理桌面快捷方式及图标
sudo tee "/etc/profile.d/deepin.sh" >/dev/null << "EOF"
XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
for deepin_dir in /opt/apps/*/entries; do
if [ -d "$deepin_dir/applications" ]; then
XDG_DATA_DIRS="$XDG_DATA_DIRS:$deepin_dir"
fi
done
export XDG_DATA_DIRS
EOFsudo apt install -y com.qq.im.deepin com.qq.weixin.deepin
# 调整DPI
env WINEPREFIX="$HOME/.deepinwine/Deepin-QQ" $HOME/.deepinwine/deepin-wine5/bin/winecfg
env WINEPREFIX="$HOME/.deepinwine/Deepin-WeChat" /opt/deepin-wine6-stable/bin/winecfg获取 deb 下载连接 apt install -y --print-uris $PACKAGE | cut -f 2 -d \' | grep \.deb
]]>那么有没有什么方案可以更优雅更轻量更快速搭建一个 K8S 集群呢?答案就是 K3D
目前主流的本地 k8s 运行方式有很多
关于 k3d 以及 kind 的对比,可以参考 K3d vs Kind 谁更适合本地研发。
k3s 是 Rancher 公司推出非常快速且轻量级的完全兼容的 Kubernetes 发行版(CNCF 认证)
k3d 是一个可以让 k3s 运行在 Docker 中的工具,它提供了一个简单的 CLI 来创建、运行和删除具有 1 到 N 个节点的 Kubernetes 集群
详情参考官方文档 什么是 K3s?
官方提供的 Docker Desktop 是基于 WSL2 实现的,需要开启 Hyper-V 功能。 这样会使整个 Windows 都跑在虚拟机中,导致某些虚拟化相关的应用不正常 (比如某些模拟器),而且内存占用也不太可控。
本文采用了基于 boot2docker 的方式运行 Docker 服务,定制性更灵活一些。
这里强烈推荐使用 Git for Windows 自带的 MinGW 命令行SHELL,使开发体验更加贴近与 Linux。以下操作均在 Git Bash 中进行
首先需要安装虚拟机软件 VirtualBox
然后需要下载如下命令工具并添加到环境变量 PATH 中
docker-machine.exek3d.exe本文中上面这些工具下载到了D:\Docker\bin,并将D:\Docker\bin添加到环境变量中
同时也配置了如下环境变量,将虚拟机文件的储存位置修改为 D 盘,避免占用系统空间
在 ~/.profile 文件添加如下内容配置命令行自动补全
sudo tee /etc/profile.d/kubectl.sh << EOF
source <(kubectl completion bash)
source <(k3d completion bash)
下面创建了一个磁盘大小为 60000 MB,CPU 使用 2 个核心的虚拟机
docker-machine create --virtualbox-cpu-count 2 \
--engine-registry-mirror https://hub-mirror.c.163.com \
--virtualbox-disk-size 60000 --virtualbox-memory 2048 \
--virtualbox-no-share default
# 每次使用 docker 时都需要执行如下命令
eval $(docker-machine env --shell bash default)稍等片刻,当出现以下日志时,说明 Docker 服务已启动完成

第一次创建 Docker 实例会下载boot2docker.iso作为启动镜像,国内用户可以通过添加参数--virtualbox-boot2docker-url https://github.com.cnpmjs.org/dragonflylee/boot2docker/releases/latest/download/boot2docker.iso加速镜像下载
首先我们尝试创建包含主节点和容器仓库的集群
eval $(docker-machine env --shell bash)
k3d cluster create --api-port 6443 \
-p 0.0.0.0:80:80@loadbalancer \
--k3s-arg "--disable=traefik@server:0" \
--registry-create registry:0.0.0.0:5000当出现下面的日志时,k3s 集群就创建成功了

此时,我们按照日志提示,运行 kubectl cluster-info 查看下当前集群的信息
运行 kubectl get pod -o wide -A 命令,当所有 Pod 的状态都是 Running 或者 Done 的时候,集群就初始化完毕了
cgroups: cannot find cgroup mount destination: unknown. 的错误提示,请执行如下命令docker-machine ssh default sudo sh - << EOF
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
EOF而 K3s 不需要任何特殊的配置就可以使用 Helm 命令行工具,如下命令使用 Helm CRD 部署 traefik 服务
kubectl create -f - << EOF
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: traefik
namespace: kube-system
spec:
chart: traefik
repo: https://helm.traefik.io/traefik
valuesContent: |-
ports:
websecure:
expose: false
EOF下面的例子是使用 Traefik CRD 开启内置的仪表盘
kubectl apply -f - << EOF
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: kube-system
spec:
entryPoints:
- web
routes:
- match: Host(\`traefik.domain.com\`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
EOF更多配置参考 https://docs.rancher.cn/docs/k3s/helm/_index

KinD 顾名思义 Kubernetes in Docker,是一个使用 Docker 容器在本地运行 Kubernetes 集群的工具。相比 k3d,Kind 更贴近原生 Kubernetes,适合用于开发测试 Kubernetes 原生组件。
首先下载最新版本的 KinD https://kind.sigs.k8s.io/dl/latest/kind-windows-amd64
kind create cluster --image kindest/node:v1.21.14 --config=- << EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerAddress: "$(docker-machine ip)"
apiServerPort: 6443
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
kubeadmConfigPatches:
- |
kind: ClusterConfiguration
etcd:
local:
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
controllerManager:
extraArgs:
bind-address: 0.0.0.0
scheduler:
extraArgs:
bind-address: 0.0.0.0
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://hub-mirror.c.163.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://registry:5000"]
EOF参数描述参考 https://kind.sigs.k8s.io/docs/user/quick-start#configuring-your-kind-cluster
https://docs.nginx.com/nginx-ingress-controller/
# 生成测试用 SSL 证书
openssl req -x509 -nodes -newkey rsa:4096 -keyout tls.key -out tls.crt -days 3650 -subj "/CN=kube"
kubectl create secret tls ingress-wildcard-tls -n kube-system --cert=tls.crt --key=tls.key
# 安装控制器
helm install nginx -n kube-system --repo https://helm.nginx.com/stable nginx-ingress --values - << EOF
controller:
image:
tag: latest-alpine
service:
create: false
controller:
hostNetwork: true
setAsDefaultIngress: true
EOFhelm install traefik -n kube-system --repo https://helm.traefik.io/traefik traefik --values - << EOF
service:
enabled: false
ports:
web:
hostPort: 80
websecure:
expose: false
deployment:
kind: DaemonSet
ingressClass:
enabled: true
isDefaultClass: true
EOF
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/alternative.yaml
# 添加 ingress 路由
kubectl create ing -n kubernetes-dashboard dashboard --rule="domain.com/*=kubernetes-dashboard:80,tls"
# 添加用户权限
kubectl create serviceaccount admin-user -n kubernetes-dashboard
kubectl create clusterrolebinding admin-user --serviceaccount=kubernetes-dashboard:admin-user --clusterrole=cluster-admin
# 获取 Token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')参考文档:
]]>1.安装系统固件
官方提供的 FriendlyCore 预装了一堆诸如 samba、ftp 的服务。
但是官方并没有提供内核头文件,内核版本也比较老不适合折腾, 因此转而使用 Armbian 提供的固件
下载 https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/nanopineo3/archive 解压得到 img 文件后使用 USBImager 写入到 TF 卡中

2.网络配置
插上网线和电源,微型电脑就启动了。如何确定 NanoPi 的 IP 呢,方法如下任选其一
nmap -n --open -p 22 192.168.1.0/24 扫描 ssh 端口
# 关闭密码登录
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
# 清空 root 用户密码
passwd -d root3.本地化设置
sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn\/debian-security/g' /etc/apt/sources.list
sed -i 's/apt.armbian.com/mirrors.tuna.tsinghua.edu.cn\/armbian/g' /etc/apt/sources.list.d/armbian.list
dpkg --remove-architecture armhf
apt update && apt upgrade -ydpkg-reconfigure locales 后选择 zh_CN.UTF-8dpkg-reconfigure tzdata 选择 Asia/Chongqingapt update 失败,可能需要同步时间ntpdate cn.ntp.org.cn3.驱动 USB 无线网卡
某些 WIFI 虽然官方称之为“免驱版”,但实际上是网卡内置了驱动,Windows下如果没有驱动就会被识别为存储设备用于驱动安装,这是需要安装 usb-modeswitch 切换模式
sudo apt install -y usb-modeswitch翻出了之前买的 翼联WIFI, 安装 usb-modeswitch 后运行 lsusb 查看,设备 ID 已变为
Bus 004 Device 003: ID 148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapter
虽然模式切换已经成功,但是网卡仍未被驱动。
后来从 Arch 社区 找到解决方案如下
apt install -y linux-headers-current-rockchip64curl -o- http://mirrors.163.com/kernel/v5.x/linux-$(uname -r | cut -f1 -d-).tar.xz | tar Jxf -
cd linux-$(uname -r | cut -f1 -d-)/drivers/net/wireless/mediatek/mt7601u
curl -o- https://launchpadlibrarian.net/419756943/mcu.patch | patch -p0
make -C /lib/modules/$(uname -r)/build/ M=$(pwd) modules这时编译可能遇到 __stack_chk_guard undefined 错误,这时候在 mcu.c 的适当位置添加如下代码
unsigned long __stack_chk_guard;
void __stack_chk_guard_setup(void)
{
__stack_chk_guard = 0xBAAAAAAD; //provide some magic numbers
}
void __stack_chk_fail(void)
{
}install -p -m 644 mt7601u.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/mediatek/mt7601u
echo > /etc/modprobe.d/mt7601u.conf options mt7601u vnd_reset=0
/sbin/depmod -a $(uname -r)重启后 WIFI 就能正常驱动了
sudo vnstat -i wlxe84e0685ff49 --createsudo curl -Lo /etc/apt/trusted.gpg.d/docker-ce.asc https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg
echo "deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list
apt update && apt install -y docker-cesudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8C718D3B5072E1F5
echo "deb http://mirrors.tuna.tsinghua.edu.cn/mysql/apt/debian $(lsb_release -cs) mysql-5.7" | sudo tee /etc/apt/sources.list.d/mysql.list wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list'
]]>首先需要使用管理员权限打开 PowerShell 执行如下命令 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
或者在程序和功能选打开 适用于 Linux 的 Windows 子系统
出现提示时,重启计算机。
直接参考 WSL安装指南 使用 Microsoft Store 安装的方法无法将 Linux 安装到系统盘之外的分区,这里使用的是 手动下载 的方法。
单击以下链接下载您喜欢的 Linux 的发行版,这里选的是 Ubuntu 20.04
使用 7-ZIP 或者其他工具解压下载的 appx 文件 ( 比如解压到 D:\WSL\Ubuntu ) 然后运行 ubuntu2004.exe
需要等待一两分钟时间来完成安装,安装完成后,系统会提示创建新的用户帐户(及其密码)。

如果需要使用 root 默认登录可以运行 ubuntu2004.exe config --default-user root首先需要进行一些本地化操作
# 修改为国内软件源
sudo sed -Ei 's/\w+.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
apt-get update
# 设置系统语言为中文
apt install -y language-pack-zh-hans
update-locale LANG=zh_CN.UTF-8由于 WSL 并没有 Linux 内核的支持,仅在用户层实现了系统调用的翻译。因此诸如 systemd、cgroup 是无法工作的。
只能使用 start-stop-daemon 或其他进程守护工具实现服务管理
vim /etc/init.wsl 文件添加如下内容#! /bin/sh
# Filename: /etc/init.wsl
service nginx start定位到 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 后新建一个 REG_SZ 类型的值,名称随意,数值数据填写以下内容
mshta vbscript:CreateObject("WScript.Shell").Run("wsl -d Ubuntu-20.04 -u root bash /etc/init.wsl",0,TRUE)(window.close)
以后就可以向 /etc/init.wsl 追加服务,实现开启自启动了
Linux 环境搞好,下面就开始根据自己需要配置相应的开发环境
得益于 Wordpress 等平台的流行,PHP 仍是目前使用广泛 Web 开发语言,LNMP 环境
sudo apt-get install -y nginx php-fpm php-mysql php-curl mysql-server
# 开放端口
sudo sed -i 's/bind-address/#bind-address/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 启动 MySQL
service mysql start
# 启动 fpm
service php-fpm start
# 启动 nginx
service nginx start在 /etc/nginx/nginx.conf 中的 http block 中加入
fastcgi_buffering off;配置添加如下内容
server {
listen 80;
server_name domain.com;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# 设置监听端口
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
# 用于伪静态
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?r=$1 last;
}
}运行 sudo mysql -u root 进入命令行模式
-- 重设密码
UPDATE mysql.user SET host = '%', authentication_string = PASSWORD('123456') WHERE user = 'root';
FLUSH privileges;
-- 用户创建与授权
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
CREATE DATABASE `database` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
# 安装 Composer
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/bin --filename=composer
php -r "unlink('composer-setup.php');"
# 配置 国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com除了 apt 中自带的 PHP 扩展,很多扩展需要通过 pecl 命令安装。
这里通过配置 php_ini 实现 php.ini 的自动配置
sudo apt install -y php-pear php-dev
sudo touch /etc/php/7.4/mods-available/pear.ini
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/fpm/conf.d/20-pear.ini
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/cli/conf.d/20-pear.ini
sudo pear config-set php_ini /etc/php/7.4/mods-available/pear.ini
pecl install yaf# 安装必要依赖
sudo apt-get install -y git cmake
# 下载并解压
curl -o- https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz | sudo tar zxf - -C /usr/local
sudo ln -s /usr/local/go/bin/go /usr/bin/go
# 配置环境变量
go env -w GOPROXY=goproxy.cn
# git 配置
git config --global core.editor nanoapt-get install -y postgresql
# 数据库初始化
pg_dropcluster 12 main --stop
TZ=UTC pg_createcluster 12 main --start -d /opt/pgsql
# 服务启动
service postgresql start
# 修改数据库密码
su postgres -c psql
postgres=# \passwordexport PGPASSWORD=123456
# 导出
su postgres -c 'pg_dumpall -O -x -c --inserts --if-exists --quote-all-identifiers -f /tmp/db.sql'
# 导入
psql -h 127.0.0.1 -U postgres -f db.sqlsudo apt install lsb-release
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install consul编辑服务脚本
/etc/init.d/consul
#!/bin/sh
# Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh
set -e
# Must be a valid filename
NAME=consul
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="agent -server -bootstrap-expect=1 -bind=127.0.0.1 -data-dir=/var/lib/$NAME -ui -log-file=/var/log/$NAME"
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
echo "."
;;
restart)
echo -n "Restarting daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo "."
;;
*)
echo "Usage: "$1" {start|stop|restart}"
exit 1
esac
exit 0# 安装 Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 安装 v10 的 Node
source ~/.bashrc
nvm install 10
# 解决 npm install 失败的问题
npm config set unsafe-perm=true
# 设置国内镜像
npm config set registry https://registry.npm.taobao.orgsudo apt install -y python3-distutils
curl -sSL https://bootstrap.pypa.io/get-pip.py | sudo python3
pip config --global set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplecmd 下输入 wslconfig /l,可以看到所有已安装的发行版
rem 卸载删除wsl
wslconfig /u <DistributionName>
]]>1.下载 VSCode 并安装
https://code.visualstudio.com/Download
2.配置 VScode 语言包
在 VSCode 中安装 中文语言包, 安装结束后确认切换到该语言
如需更改默认显示语言,先按下Ctrl+Shift+P调出命令面板,输入display后选择Configure Display Language命令打开locale.json 语言配置。按下自动提示快捷键Ctrl+Space选择支持的语言
1.下载 MinGW 并解压到 系统盘
这里本人选择的是 MinGW-W64 GCC-8.1.0 版本,然后将 MinGW64 下 bin 目录添加到环境变量
2.在 VSCode 中安装 ms-vscode.cpptools 插件
1.使用管理员权限打开 PowerShell 执行如下命令
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux或者在程序和功能选中 WSL
2.VSCode 中安装 Remote WSL 扩展
相关文档 https://code.visualstudio.com/docs/remote/wsl
配置环境变量
STATICCHECK_CACHE D:\Documents\Go\pkg\static
]]>