<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Github on Laning's Blog</title><link>https://blog.laning.org/categories/github/</link><description>Recent content in Github on Laning's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 23 Dec 2025 12:07:16 +0800</lastBuildDate><atom:link href="https://blog.laning.org/categories/github/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloudflare和阿里云DDNS的Shell实现</title><link>https://blog.laning.org/posts/wp-0426/</link><pubDate>Thu, 06 Feb 2025 11:24:47 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0426/</guid><description>&lt;h2 id="下一步开发计划"&gt;下一步开发计划&lt;/h2&gt;
&lt;p&gt;接入Telegram机器人，IP变化时自动通知&lt;/p&gt;
&lt;h2 id="脚本地址"&gt;脚本地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/cfddns.sh"&gt;raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/cfddns.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/aliddns.sh"&gt;raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/aliddns.sh&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="使用说明"&gt;使用说明&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;proxy=false/true，是否开始Cloudflare小黄云选项&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ZONE_ID，API_TOKEN，Cloudflare 域ID和API令牌，API需对应域名的DNS编辑和读取权限&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv4Domain，需要填写全写，如&amp;quot;test.yourdomain.com&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;阿里云&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;accessKeyId,accessSecret，需要在阿里云控制台获取，并赋予DNS编辑和读取权限&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;与Cloudflare不同，子域名和主域名分开&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>使用 Telegram 作为存储后端的图床程序</title><link>https://blog.laning.org/posts/wp-0421/</link><pubDate>Wed, 04 Dec 2024 16:18:29 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0421/</guid><description>&lt;h2 id="项目地址"&gt;项目地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/nodeseeker/goImage"&gt;GitHub - nodeseeker/goImage: 基于 Go 开发的图片托管服务，使用 Telegram 作为存储后端。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/laningya/goImage"&gt;GitHub - laningya/goImage: 基于 Go 开发的图片托管服务，使用 Telegram 作为存储后端。&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="部署流程"&gt;部署流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;拉取Dockerfile并本地构建镜像&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/laningya/goImage/refs/heads/main/Dockerfile
docker build -t image .
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;拉取docker-compose.yml文件&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/laningya/goImage/refs/heads/main/docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;拉取config.json文件&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/laningya/goImage/refs/heads/main/config.json
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;config.json文件说明如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;{
&amp;#34;telegram&amp;#34;: {
&amp;#34;token&amp;#34;: &amp;#34;1234567890:ABCDEFG_ab1-asdfghjkl12345&amp;#34;,
&amp;#34;chatId&amp;#34;: -123456789
},
&amp;#34;admin&amp;#34;: {
&amp;#34;username&amp;#34;: &amp;#34;nodeseeker&amp;#34;,
&amp;#34;password&amp;#34;: &amp;#34;nodeseeker@123456&amp;#34;
},
&amp;#34;site&amp;#34;: {
&amp;#34;name&amp;#34;: &amp;#34;NodeSeek&amp;#34;,
&amp;#34;maxFileSize&amp;#34;: 10,
&amp;#34;port&amp;#34;: 18080,
&amp;#34;host&amp;#34;: &amp;#34;127.0.0.1&amp;#34;
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;telegram.token&lt;/code&gt;：电报机器人的Bot Token&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;telegram.chatId&lt;/code&gt;：频道的Chat ID&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;admin.username&lt;/code&gt;：网站管理员用户名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;admin.password&lt;/code&gt;：网站管理员密码&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;site.name&lt;/code&gt;：网站名称&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;site.maxFileSize&lt;/code&gt;：最大上传文件大小（单位：MB），建议10MB&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;site.port&lt;/code&gt;：服务端口，默认18080&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;site.host&lt;/code&gt;：服务监听地址，默认127.0.0.0本地监听；如果需要调试或外网访问，可修改为0.0.0.0&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上参数获取方式：&lt;/p&gt;</description></item><item><title>基于Cloudflare Worker的Telegram传信机器人</title><link>https://blog.laning.org/posts/wp-0424/</link><pubDate>Thu, 05 Sep 2024 17:20:01 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0424/</guid><description>&lt;h2 id="项目原因"&gt;项目原因&lt;/h2&gt;
&lt;p&gt;Telegram是很注重隐私的聊天软件，受到很多人的青睐。但是，如果经常和陌生人聊天很容易触发风控，因此一款好用的传信机器人十分有必要。&lt;/p&gt;
&lt;h2 id="项目特色"&gt;项目特色&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在nfdv1项目的基础上增加提示对方ID（TG账户唯一标识）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;美化输出UI，以及封禁逻辑&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持构建欺诈数据库，有不良记录的用户及时提醒&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署方法"&gt;部署方法&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从&lt;a href="https://t.me/BotFather"&gt;@BotFather&lt;/a&gt;获取token，并且可以发送&lt;code&gt;/setjoingroups&lt;/code&gt;来禁止此Bot被添加到群组&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从&lt;a href="https://www.uuidgenerator.net/"&gt;uuidgenerator&lt;/a&gt;获取一个随机uuid作为secret&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从&lt;a href="https://t.me/username_to_id_bot"&gt;@username_to_id_bot&lt;/a&gt;获取你的用户id&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;登录&lt;a href="https://workers.cloudflare.com/"&gt;cloudflare&lt;/a&gt;，创建一个worker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置worker的变量&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;增加一个&lt;code&gt;ENV_BOT_TOKEN&lt;/code&gt;变量，数值为从步骤1中获得的token&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;增加一个&lt;code&gt;ENV_BOT_SECRET&lt;/code&gt;变量，数值为从步骤2中获得的secret&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;增加一个&lt;code&gt;ENV_ADMIN_UID&lt;/code&gt;变量，数值为从步骤3中获得的用户id&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;绑定kv数据库，创建一个Namespace Name为&lt;code&gt;nfd&lt;/code&gt;的kv数据库，在setting -&amp;gt; variable中设置&lt;code&gt;KV Namespace Bindings&lt;/code&gt;：nfd -&amp;gt; nfd&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;code&gt;Quick Edit&lt;/code&gt;，复制&lt;a href="worker.js"&gt;这个文件&lt;/a&gt;到编辑器中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过打开&lt;code&gt;https://xxx.workers.dev/registerWebhook&lt;/code&gt;来注册websoket&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当其他用户给bot发消息，会被转发到bot创建者&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用户回复普通文字给转发的消息时，会回复到原消息发送者&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用户回复&lt;code&gt;/block&lt;/code&gt;, &lt;code&gt;/unblock&lt;/code&gt;, &lt;code&gt;/checkblock&lt;/code&gt;等命令会执行相关指令，&lt;strong&gt;不会&lt;/strong&gt;回复到原消息发送者&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>服务备份与同步脚本实现</title><link>https://blog.laning.org/posts/wp-0428/</link><pubDate>Tue, 06 Aug 2024 14:21:25 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0428/</guid><description>&lt;h2 id="脚本地址"&gt;脚本地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/back.sh"&gt;raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/back.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/rsync.sh"&gt;raw.githubusercontent.com/laningya/Raspberry-Pi/refs/heads/master/shell/rsync.sh&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="使用说明"&gt;使用说明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;为防止服务器宕机开发，需要配合crontab等服务实现定时备份&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;针对采用docker-compose部署的服务编写，如为其他方式部署的服务，此脚本并不使用&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Armbian/build脚本分析</title><link>https://blog.laning.org/posts/wp-0380/</link><pubDate>Thu, 06 Jun 2024 13:44:10 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0380/</guid><description>&lt;h2 id="1-脚本目录检测和代码健壮性保证"&gt;1. 脚本目录检测和代码健壮性保证&lt;/h2&gt;
&lt;h3 id="11-程序报错退出脚本"&gt;1.1 程序报错退出脚本&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#set -o pipefail # trace ERR through pipes - will be enabled &amp;#34;soon&amp;#34;
#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled
set -e
set -o errtrace # trace ERR through - enabled
set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled
# Important, go read http://mywiki.wooledge.org/BashFAQ/105 NOW!
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="12-compilesh脚本目录检测"&gt;1.2. ./compile.sh脚本目录检测&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SRC=&amp;#34;$(dirname &amp;#34;$(realpath &amp;#34;${BASH_SOURCE[0]}&amp;#34;)&amp;#34;)&amp;#34;
cd &amp;#34;${SRC}&amp;#34; || exit
# check for whitespace in ${SRC} and exit for safety reasons
grep -q &amp;#34;[[:space:]]&amp;#34; &amp;lt;&amp;lt;&amp;lt; &amp;#34;${SRC}&amp;#34; &amp;amp;&amp;amp; {
echo &amp;#34;\&amp;#34;${SRC}\&amp;#34; contains whitespace. Not supported. Aborting.&amp;#34; &amp;gt;&amp;amp;2
exit 1
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2-singlesh-文件加载位于lib"&gt;2. single.sh 文件加载（位于./lib）&lt;/h2&gt;
&lt;h3 id="21-检查bash版本是否高于5x"&gt;2.1 检查bash版本是否高于5.x&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# The Armbian functions require Bash 5.x.
if [[ &amp;#34;${BASH_VERSINFO:-0}&amp;#34; -lt 5 ]]; then
echo &amp;#34;Armbian build scripts require Bash 5.x. Go get it...&amp;#34; &amp;gt;&amp;amp;2
if [[ &amp;#34;${OSTYPE}&amp;#34; == &amp;#34;darwin&amp;#34;* ]]; then
echo &amp;#34;Armbian build scripts require brew to be installed and working on macOS. (old Bash version)&amp;#34; &amp;gt;&amp;amp;2
echo &amp;#34;Please install brew, *restart your terminal*.&amp;#34; &amp;gt;&amp;amp;2
echo &amp;#34;Then run &amp;#39;brew install bash coreutils git&amp;#39;, *restart your terminal* and then try again.&amp;#34; &amp;gt;&amp;amp;2
exit 51
fi
exit 50
fi
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="22-macos系统检查"&gt;2.2 macOS系统检查&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;是否以root运行脚本&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Homebrew 包管理器已安装并正常工作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过 Homebrew 的 &lt;code&gt;coreutils&lt;/code&gt; 安装的 &lt;code&gt;realpath&lt;/code&gt; 命令是否可用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更新 &lt;code&gt;PATH&lt;/code&gt; 环境变量以包含由 Homebrew 安装的 GNU &lt;code&gt;coreutils&lt;/code&gt; 二进制文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保 &lt;code&gt;${SRC}&lt;/code&gt; 变量（应指向构建脚本的源目录）位于用户的主目录中。这对于 macOS 上的 Docker 兼容性很重要。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>玩客云刷Openwrt/Armbian</title><link>https://blog.laning.org/posts/wp-0378/</link><pubDate>Sat, 01 Jun 2024 10:56:00 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0378/</guid><description>&lt;h2 id="玩客云配置"&gt;玩客云配置&lt;/h2&gt;
&lt;p&gt;SOC为晶晨S805，ARM 4核1.5GHz，1G(DDR3)+8G(eMMC)，两个USB 2.0，HDMI接口，一个千兆网口（RJ45 ），一个SD卡槽。&lt;/p&gt;
&lt;h2 id="刷机工具下载"&gt;刷机工具下载&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://pan.baidu.com/share/init?surl=CSKqhwEIOBXXi1-2-oG0dw&amp;amp;pwd=pirb"&gt;百度网盘 请输入提取码 (baidu.com)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.right.com.cn/forum/thread-8275843-1-1.html"&gt;更新 2024.04.15 OPENWRT高内核直刷 玩客云ws1608/赚钱宝三代和赚钱宝2代WS1508-PCDN、玩客云、京东云等各种云设备-恩山无线论坛 (right.com.cn)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/hzyitc/armbian-onecloud"&gt;GitHub - hzyitc/armbian-onecloud: Armbian for onecloud. 玩客云用armbian&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="刷入openwrtarmbian"&gt;刷入Openwrt/Armbian&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开USB_Burning_Tool软件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;短接触点上电，进入刷机模式&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;刷写系统到emmc&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="参考文档"&gt;参考文档&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.cnblogs.com/ban1234/p/17083431.html"&gt;玩客云刷软路由保姆教程 - 流云1 - 博客园 (cnblogs.com)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>sing-box TUN模式透明代理</title><link>https://blog.laning.org/posts/wp-0372/</link><pubDate>Sat, 27 Apr 2024 01:16:33 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0372/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;你的软路由到底是用来做旁路由还是主路由？如果是旁路由的话，只用科学上网不妨试试Linux旁路由网关&lt;/p&gt;
&lt;h2 id="docker镜像构建"&gt;docker镜像构建&lt;/h2&gt;
&lt;p&gt;原本是64位的处理器，可惜之前装的32位操作系统，所以只能从Dockerfile自己构建喽&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;拉源码&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/SagerNet/sing-box.git
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;构建镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker build --no-cache -t laningya/sing-box:v1 .
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="docker-composeyml文件"&gt;docker-compose.yml文件&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;version: &amp;#34;3.3&amp;#34;
services:
sing-box:
image: laningya/sing-box:v1
container_name: sing-box
restart: always
network_mode: &amp;#34;host&amp;#34;
volumes:
- ./conf:/etc/sing-box/
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- ALL
command: -D /var/lib/sing-box -C /etc/sing-box/ run
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要开启tun模式，devices和cap_add字段非常重要&lt;/p&gt;
&lt;h2 id="一个不错的sing-box配置模板"&gt;一个不错的sing-box配置模板&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;{
&amp;#34;dns&amp;#34;: {
&amp;#34;servers&amp;#34;: [
{
&amp;#34;tag&amp;#34;: &amp;#34;dns_proxy&amp;#34;,
&amp;#34;address&amp;#34;: &amp;#34;https://1.1.1.1/dns-query&amp;#34;,
&amp;#34;address_resolver&amp;#34;: &amp;#34;dns_resolver&amp;#34;,
&amp;#34;strategy&amp;#34;: &amp;#34;ipv4_only&amp;#34;,
&amp;#34;detour&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;tag&amp;#34;: &amp;#34;dns_direct&amp;#34;,
&amp;#34;address&amp;#34;: &amp;#34;h3://dns.alidns.com/dns-query&amp;#34;,
&amp;#34;address_resolver&amp;#34;: &amp;#34;dns_resolver&amp;#34;,
&amp;#34;strategy&amp;#34;: &amp;#34;ipv4_only&amp;#34;,
&amp;#34;detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;tag&amp;#34;: &amp;#34;dns_block&amp;#34;,
&amp;#34;address&amp;#34;: &amp;#34;rcode://refused&amp;#34;
},
{
&amp;#34;tag&amp;#34;: &amp;#34;dns_resolver&amp;#34;,
&amp;#34;address&amp;#34;: &amp;#34;223.5.5.5&amp;#34;,
&amp;#34;strategy&amp;#34;: &amp;#34;ipv4_only&amp;#34;,
&amp;#34;detour&amp;#34;: &amp;#34;direct&amp;#34;
}
],
&amp;#34;rules&amp;#34;: [
{
&amp;#34;outbound&amp;#34;: &amp;#34;any&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;dns_resolver&amp;#34;
},
{
&amp;#34;clash_mode&amp;#34;: &amp;#34;direct&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;dns_direct&amp;#34;
},
{
&amp;#34;clash_mode&amp;#34;: &amp;#34;global&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
},
{
&amp;#34;process_name&amp;#34;: [
&amp;#34;TencentMeeting&amp;#34;,
&amp;#34;NemoDesktop&amp;#34;,
&amp;#34;ToDesk&amp;#34;,
&amp;#34;ToDesk_Service&amp;#34;,
&amp;#34;WeChat&amp;#34;,
&amp;#34;Tailscale&amp;#34;,
&amp;#34;wireguard-go&amp;#34;,
&amp;#34;Tunnelblick&amp;#34;,
&amp;#34;softwareupdated&amp;#34;,
&amp;#34;kubectl&amp;#34;
],
&amp;#34;server&amp;#34;: &amp;#34;dns_direct&amp;#34;
},
{
&amp;#34;domain_suffix&amp;#34;: [
&amp;#34;icloudnative.io&amp;#34;,
&amp;#34;fuckcloudnative.io&amp;#34;,
&amp;#34;sealos.io&amp;#34;,
&amp;#34;cdn.jsdelivr.net&amp;#34;
],
&amp;#34;server&amp;#34;: &amp;#34;dns_direct&amp;#34;
},
{
&amp;#34;process_name&amp;#34;: [
&amp;#34;DropboxMacUpdate&amp;#34;,
&amp;#34;Dropbox&amp;#34;
],
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
},
{
&amp;#34;package_name&amp;#34;: [
&amp;#34;com.google.android.youtube&amp;#34;,
&amp;#34;com.android.vending&amp;#34;,
&amp;#34;org.telegram.messenger&amp;#34;,
&amp;#34;org.telegram.plus&amp;#34;
],
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;geosite-geolocation-!cn&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;Global&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: [
&amp;#34;YouTube&amp;#34;,
&amp;#34;Telegram&amp;#34;,
&amp;#34;Netflix&amp;#34;,
&amp;#34;geoip-google&amp;#34;,
&amp;#34;geoip-telegram&amp;#34;,
&amp;#34;geoip-twitter&amp;#34;,
&amp;#34;geoip-netflix&amp;#34;
],
&amp;#34;server&amp;#34;: &amp;#34;dns_proxy&amp;#34;
}
],
&amp;#34;final&amp;#34;: &amp;#34;dns_direct&amp;#34;
},
&amp;#34;ntp&amp;#34;: {
&amp;#34;enabled&amp;#34;: true,
&amp;#34;server&amp;#34;: &amp;#34;time.apple.com&amp;#34;,
&amp;#34;server_port&amp;#34;: 123,
&amp;#34;interval&amp;#34;: &amp;#34;30m0s&amp;#34;,
&amp;#34;detour&amp;#34;: &amp;#34;direct&amp;#34;
},
&amp;#34;inbounds&amp;#34;: [
{
&amp;#34;type&amp;#34;: &amp;#34;tun&amp;#34;,
&amp;#34;inet4_address&amp;#34;: &amp;#34;198.18.0.1/16&amp;#34;,
&amp;#34;auto_route&amp;#34;: true,
&amp;#34;exclude_package&amp;#34;: [
&amp;#34;cmb.pb&amp;#34;,
&amp;#34;cn.gov.pbc.dcep&amp;#34;,
&amp;#34;com.MobileTicket&amp;#34;,
&amp;#34;com.adguard.android&amp;#34;,
&amp;#34;com.ainemo.dragoon&amp;#34;,
&amp;#34;com.alibaba.android.rimet&amp;#34;,
&amp;#34;com.alicloud.databox&amp;#34;,
&amp;#34;com.amazing.cloudisk.tv&amp;#34;,
&amp;#34;com.autonavi.minimap&amp;#34;,
&amp;#34;com.bilibili.app.in&amp;#34;,
&amp;#34;com.bishua666.luxxx1&amp;#34;,
&amp;#34;com.cainiao.wireless&amp;#34;,
&amp;#34;com.chebada&amp;#34;,
&amp;#34;com.chinamworld.main&amp;#34;,
&amp;#34;com.cmbchina.ccd.pluto.cmbActivity&amp;#34;,
&amp;#34;com.coolapk.market&amp;#34;,
&amp;#34;com.ctrip.ct&amp;#34;,
&amp;#34;com.dianping.v1&amp;#34;,
&amp;#34;com.douban.frodo&amp;#34;,
&amp;#34;com.eg.android.AlipayGphone&amp;#34;,
&amp;#34;com.farplace.qingzhuo&amp;#34;,
&amp;#34;com.hanweb.android.zhejiang.activity&amp;#34;,
&amp;#34;com.leoao.fitness&amp;#34;,
&amp;#34;com.lucinhu.bili_you&amp;#34;,
&amp;#34;com.mikrotik.android.tikapp&amp;#34;,
&amp;#34;com.moji.mjweather&amp;#34;,
&amp;#34;com.motorola.cn.calendar&amp;#34;,
&amp;#34;com.motorola.cn.lrhealth&amp;#34;,
&amp;#34;com.netease.cloudmusic&amp;#34;,
&amp;#34;com.sankuai.meituan&amp;#34;,
&amp;#34;com.sina.weibo&amp;#34;,
&amp;#34;com.smartisan.notes&amp;#34;,
&amp;#34;com.sohu.inputmethod.sogou.moto&amp;#34;,
&amp;#34;com.sonelli.juicessh&amp;#34;,
&amp;#34;com.ss.android.article.news&amp;#34;,
&amp;#34;com.ss.android.lark&amp;#34;,
&amp;#34;com.ss.android.ugc.aweme&amp;#34;,
&amp;#34;com.tailscale.ipn&amp;#34;,
&amp;#34;com.taobao.idlefish&amp;#34;,
&amp;#34;com.taobao.taobao&amp;#34;,
&amp;#34;com.tencent.mm&amp;#34;,
&amp;#34;com.tencent.mp&amp;#34;,
&amp;#34;com.tencent.soter.soterserver&amp;#34;,
&amp;#34;com.tencent.wemeet.app&amp;#34;,
&amp;#34;com.tencent.weread&amp;#34;,
&amp;#34;com.tencent.wework&amp;#34;,
&amp;#34;com.ttxapps.wifiadb&amp;#34;,
&amp;#34;com.unionpay&amp;#34;,
&amp;#34;com.unnoo.quan&amp;#34;,
&amp;#34;com.wireguard.android&amp;#34;,
&amp;#34;com.xingin.xhs&amp;#34;,
&amp;#34;com.xunmeng.pinduoduo&amp;#34;,
&amp;#34;com.zui.zhealthy&amp;#34;,
&amp;#34;ctrip.android.view&amp;#34;,
&amp;#34;io.kubenav.kubenav&amp;#34;,
&amp;#34;org.geekbang.geekTime&amp;#34;,
&amp;#34;tv.danmaku.bili&amp;#34;
],
&amp;#34;stack&amp;#34;: &amp;#34;mixed&amp;#34;,
&amp;#34;sniff&amp;#34;: true
},
{
&amp;#34;type&amp;#34;: &amp;#34;socks&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;socks-in&amp;#34;,
&amp;#34;listen&amp;#34;: &amp;#34;::&amp;#34;,
&amp;#34;listen_port&amp;#34;: 5353
}
],
&amp;#34;outbounds&amp;#34;: [
{
&amp;#34;type&amp;#34;: &amp;#34;selector&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;select&amp;#34;,
&amp;#34;outbounds&amp;#34;: [
&amp;#34;trojan-out&amp;#34;
],
&amp;#34;default&amp;#34;: &amp;#34;trojan-out&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;selector&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;openai&amp;#34;,
&amp;#34;outbounds&amp;#34;: [
&amp;#34;trojan-out&amp;#34;
],
&amp;#34;default&amp;#34;: &amp;#34;trojan-out&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;selector&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;tiktok&amp;#34;,
&amp;#34;outbounds&amp;#34;: [
&amp;#34;trojan-out&amp;#34;
],
&amp;#34;default&amp;#34;: &amp;#34;trojan-out&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;trojan&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;trojan-out&amp;#34;,
&amp;#34;server&amp;#34;: &amp;#34;199.180.115.155&amp;#34;,
&amp;#34;server_port&amp;#34;: 9443,
&amp;#34;password&amp;#34;: &amp;#34;5iFHKMrn9Ez//VKh6zChTA==&amp;#34;,
&amp;#34;tls&amp;#34;: {
&amp;#34;enabled&amp;#34;: true,
&amp;#34;server_name&amp;#34;: &amp;#34;ss.icloudnative.io&amp;#34;,
&amp;#34;insecure&amp;#34;: true,
&amp;#34;utls&amp;#34;: {
&amp;#34;fingerprint&amp;#34;: &amp;#34;chrome&amp;#34;
}
},
&amp;#34;multiplex&amp;#34;: {
&amp;#34;protocol&amp;#34;: &amp;#34;h2mux&amp;#34;,
&amp;#34;max_connections&amp;#34;: 4,
&amp;#34;min_streams&amp;#34;: 4
},
&amp;#34;transport&amp;#34;: {
&amp;#34;type&amp;#34;: &amp;#34;grpc&amp;#34;,
&amp;#34;service_name&amp;#34;: &amp;#34;TunService&amp;#34;
}
},
{
&amp;#34;type&amp;#34;: &amp;#34;direct&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;block&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;block&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;dns&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;dns-out&amp;#34;
}
],
&amp;#34;route&amp;#34;: {
&amp;#34;rules&amp;#34;: [
{
&amp;#34;protocol&amp;#34;: &amp;#34;dns&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;dns-out&amp;#34;
},
{
&amp;#34;clash_mode&amp;#34;: &amp;#34;direct&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;clash_mode&amp;#34;: &amp;#34;global&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;domain_suffix&amp;#34;: [
&amp;#34;icloudnative.io&amp;#34;,
&amp;#34;fuckcloudnative.io&amp;#34;,
&amp;#34;sealos.io&amp;#34;,
&amp;#34;cdn.jsdelivr.net&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;process_name&amp;#34;: [
&amp;#34;TencentMeeting&amp;#34;,
&amp;#34;NemoDesktop&amp;#34;,
&amp;#34;ToDesk&amp;#34;,
&amp;#34;ToDesk_Service&amp;#34;,
&amp;#34;WeChat&amp;#34;,
&amp;#34;OpenLens&amp;#34;,
&amp;#34;Tailscale&amp;#34;,
&amp;#34;wireguard-go&amp;#34;,
&amp;#34;Tunnelblick&amp;#34;,
&amp;#34;softwareupdated&amp;#34;,
&amp;#34;kubectl&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;protocol&amp;#34;: &amp;#34;quic&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;block&amp;#34;
},
{
&amp;#34;inbound&amp;#34;: &amp;#34;socks-in&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: [
&amp;#34;WeChat&amp;#34;,
&amp;#34;Bilibili&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;OpenAI&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;openai&amp;#34;
},
{
&amp;#34;domain_suffix&amp;#34;: [
&amp;#34;openai.com&amp;#34;,
&amp;#34;oaistatic.com&amp;#34;,
&amp;#34;oaiusercontent.com&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;openai&amp;#34;
},
{
&amp;#34;package_name&amp;#34;: &amp;#34;com.openai.chatgpt&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;openai&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;TikTok&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;tiktok&amp;#34;
},
{
&amp;#34;package_name&amp;#34;: &amp;#34;com.zhiliaoapp.musically&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;tiktok&amp;#34;
},
{
&amp;#34;domain_suffix&amp;#34;: [
&amp;#34;depay.one&amp;#34;,
&amp;#34;orbstack.dev&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;process_name&amp;#34;: [
&amp;#34;DropboxMacUpdate&amp;#34;,
&amp;#34;Dropbox&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;package_name&amp;#34;: [
&amp;#34;com.google.android.youtube&amp;#34;,
&amp;#34;com.android.vending&amp;#34;,
&amp;#34;org.telegram.messenger&amp;#34;,
&amp;#34;org.telegram.plus&amp;#34;,
&amp;#34;com.google.android.googlequicksearchbox&amp;#34;,
&amp;#34;app.rvx.android.youtube&amp;#34;,
&amp;#34;com.mudvod.video&amp;#34;,
&amp;#34;com.fox2code.mmm&amp;#34;,
&amp;#34;com.twitter.android&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;domain&amp;#34;: &amp;#34;accounts.google.com&amp;#34;,
&amp;#34;domain_suffix&amp;#34;: [
&amp;#34;sourceforge.net&amp;#34;,
&amp;#34;fhjasokiwq.com&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;domain_suffix&amp;#34;: &amp;#34;cloud.sealos.io&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;logical&amp;#34;,
&amp;#34;mode&amp;#34;: &amp;#34;and&amp;#34;,
&amp;#34;rules&amp;#34;: [
{
&amp;#34;rule_set&amp;#34;: &amp;#34;geosite-geolocation-!cn&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;geoip-cn&amp;#34;,
&amp;#34;invert&amp;#34;: true
}
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;Global&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: &amp;#34;geoip-cn&amp;#34;,
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;ip_is_private&amp;#34;: true,
&amp;#34;outbound&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;rule_set&amp;#34;: [
&amp;#34;YouTube&amp;#34;,
&amp;#34;Telegram&amp;#34;,
&amp;#34;Netflix&amp;#34;,
&amp;#34;geoip-google&amp;#34;,
&amp;#34;geoip-telegram&amp;#34;,
&amp;#34;geoip-twitter&amp;#34;,
&amp;#34;geoip-netflix&amp;#34;
],
&amp;#34;outbound&amp;#34;: &amp;#34;select&amp;#34;
}
],
&amp;#34;rule_set&amp;#34;: [
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geosite-geolocation-!cn&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geoip-cn&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-cn.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geoip-google&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-google.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geoip-telegram&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-telegram.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geoip-twitter&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-twitter.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;geoip-netflix&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;binary&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-netflix.srs&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;Global&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Global.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;YouTube&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/YouTube.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;OpenAI&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/OpenAI.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;TikTok&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/TikTok.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;Telegram&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Telegram.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;Netflix&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Netflix.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;WeChat&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/WeChat.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
},
{
&amp;#34;type&amp;#34;: &amp;#34;remote&amp;#34;,
&amp;#34;tag&amp;#34;: &amp;#34;Bilibili&amp;#34;,
&amp;#34;format&amp;#34;: &amp;#34;source&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Bilibili.json&amp;#34;,
&amp;#34;download_detour&amp;#34;: &amp;#34;direct&amp;#34;
}
],
&amp;#34;final&amp;#34;: &amp;#34;direct&amp;#34;,
&amp;#34;find_process&amp;#34;: true,
&amp;#34;auto_detect_interface&amp;#34;: true
},
&amp;#34;experimental&amp;#34;: {
&amp;#34;cache_file&amp;#34;: {
&amp;#34;enabled&amp;#34;: true
},
&amp;#34;clash_api&amp;#34;: {
&amp;#34;external_controller&amp;#34;: &amp;#34;0.0.0.0:9090&amp;#34;,
&amp;#34;external_ui&amp;#34;: &amp;#34;metacubexd&amp;#34;,
&amp;#34;external_ui_download_url&amp;#34;: &amp;#34;https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip&amp;#34;,
&amp;#34;external_ui_download_detour&amp;#34;: &amp;#34;select&amp;#34;,
&amp;#34;default_mode&amp;#34;: &amp;#34;rule&amp;#34;
}
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="开启内核转发并关闭防火墙"&gt;开启内核转发并关闭防火墙&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
ufw disable
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="参考地址"&gt;参考地址&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://icloudnative.io/posts/sing-box-tutorial/"&gt;icloudnative.io&lt;/a&gt;&lt;/p&gt;</description></item><item><title>甲骨文防火墙设置</title><link>https://blog.laning.org/posts/wp-0370/</link><pubDate>Fri, 26 Apr 2024 10:50:59 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0370/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;甲骨文啊，你真狗！甲骨文除了与其他云厂商一样有防火墙面板，额外在系统镜像上也默认配置了防火墙，这直接导致开机更换ssh端口从而机器失联。。。&lt;/p&gt;
&lt;h2 id="面板防火墙设置"&gt;面板防火墙设置&lt;/h2&gt;
&lt;p&gt;不多说，与其他云厂商没有多大区别&lt;/p&gt;
&lt;h2 id="系统镜像关闭防火墙"&gt;系统镜像关闭防火墙&lt;/h2&gt;
&lt;h3 id="开放所有端口ubuntudebian"&gt;开放所有端口（Ubuntu、Debian）&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="关闭防火墙"&gt;关闭防火墙&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt-get purge netfilter-persistent &amp;amp;&amp;amp; reboot
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="参考文章"&gt;参考文章&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://isedu.top/index.php/archives/33/"&gt;Oracle开放全部端口并关闭防火墙 - 清~幽殇 (isedu.top)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>哪吒监控部署</title><link>https://blog.laning.org/posts/wp-0363/</link><pubDate>Mon, 22 Apr 2024 20:03:20 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0363/</guid><description>&lt;h2 id="演示站点"&gt;演示站点&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dash.laning.org/"&gt;laning&amp;rsquo;s dashboard&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="项目起因"&gt;项目起因&lt;/h2&gt;
&lt;p&gt;手上的vps逐渐多了起来，还是可以玩一下监控面板&lt;/p&gt;
&lt;h2 id="主要特性"&gt;主要特性&lt;/h2&gt;
&lt;p&gt;cloudflare CDN + caddy反代&lt;/p&gt;
&lt;h2 id="部署过程"&gt;部署过程&lt;/h2&gt;
&lt;h3 id="官方参考文档"&gt;官方参考文档&lt;/h3&gt;
&lt;h4 id="文档地址"&gt;文档地址&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://nezha.wiki/guide/dashboard.html"&gt;哪吒监控 | 哪吒监控 (nezha.wiki)&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="主要步骤"&gt;主要步骤&lt;/h4&gt;
&lt;p&gt;参考文档拉取源码并docker部署，接入github作为管理账号，配置cf的cdn代理&lt;/p&gt;
&lt;h3 id="docker部署caddy反代"&gt;docker部署caddy反代&lt;/h3&gt;
&lt;h4 id="docker-composeyml"&gt;docker-compose.yml&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;version: &amp;#39;3.3&amp;#39;
services:
caddy:
image: caddy
container_name: caddy
hostname: caddy
restart: always
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/data:/data
- ./caddy/config:/config
network_mode: host
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="caddyfile"&gt;Caddyfile&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cdn.example.com
encode gzip
reverse_proxy 127.0.0.1:8008
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="icmptcp-公用ip探针"&gt;ICMP/TCP 公用IP探针&lt;/h3&gt;
&lt;h4 id="文档地址-1"&gt;文档地址&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.nodeseek.com/post-68572-1"&gt;【存】全国 34 省份 TCPING v4 IP (nodeseek.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nxtrace/NTrace-V1/blob/main/fast_trace/basic.go"&gt;NTrace-V1/fast_trace/basic.go at main · nxtrace/NTrace-V1 (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="故障通知机器人配置"&gt;故障通知机器人配置&lt;/h3&gt;
&lt;h4 id="文档地址-2"&gt;文档地址&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://nezha.wiki/guide/notifications.html"&gt;哪吒监控 | 哪吒监控 (nezha.wiki)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>VPS测试脚本</title><link>https://blog.laning.org/posts/wp-0305/</link><pubDate>Sun, 14 Apr 2024 11:08:01 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0305/</guid><description>&lt;h2 id="三网回程测试脚本"&gt;三网回程测试脚本&lt;/h2&gt;
&lt;h3 id="脚本地址"&gt;脚本地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/zhanghanyun/backtrace"&gt;zhanghanyun/backtrace: 三网回程路由测试 (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="命令行"&gt;命令行&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl https://raw.githubusercontent.com/zhanghanyun/backtrace/main/install.sh -sSf | sh
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="流媒体gpt解锁测试脚本"&gt;流媒体/GPT解锁测试脚本&lt;/h2&gt;
&lt;h3 id="脚本地址-1"&gt;脚本地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/lmc999/RegionRestrictionCheck"&gt;lmc999/RegionRestrictionCheck: A bash script to check the status of your IP on various geo-restricted services. (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="命令行-1"&gt;命令行&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;bash &amp;lt;(curl -L -s check.unlock.media)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="bbr加速"&gt;BBR加速&lt;/h2&gt;
&lt;h3 id="脚本地址-2"&gt;脚本地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/Chikage0o0/Linux-NetSpeed"&gt;Chikage0o0/Linux-NetSpeed: 将Linux现常用的网络加速集成在一起 (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="命令行-2"&gt;命令行&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget -N --no-check-certificate &amp;#34;https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh&amp;#34; &amp;amp;&amp;amp; chmod +x tcp.sh &amp;amp;&amp;amp; ./tcp.sh
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="缝合怪"&gt;缝合怪&lt;/h2&gt;
&lt;h3 id="脚本地址-3"&gt;脚本地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/spiritLHLS/ecs/blob/main/README.md"&gt;ecs/README.md at main · spiritLHLS/ecs (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="命令行-3"&gt;命令行&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh &amp;amp;&amp;amp; chmod +x ecs.sh &amp;amp;&amp;amp; bash ecs.sh
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="xraycli安装脚本"&gt;XrayCLI安装脚本&lt;/h2&gt;
&lt;h3 id="脚本地址-4"&gt;脚本地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/233boy/Xray/wiki/Xray%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC"&gt;Xray一键安装脚本 · 233boy/Xray Wiki (github.com)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>cloudflare 科学环境</title><link>https://blog.laning.org/posts/wp-0299/</link><pubDate>Thu, 04 Apr 2024 17:19:15 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0299/</guid><description>&lt;p&gt;2024/11/24更新：项目已失效&lt;/p&gt;
&lt;h2 id="warp"&gt;warp+&lt;/h2&gt;
&lt;h3 id="流量获取"&gt;流量获取&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://t.me/generatewarpplusbot"&gt;tg机器人&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="windows客户端"&gt;windows客户端&lt;/h3&gt;
&lt;p&gt;设置代理端口+Proxy SwitchyOmega分流&lt;/p&gt;
&lt;h3 id="订阅转clash等订阅链接"&gt;订阅转clash等订阅链接&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker pull vvbbnn00/warp-clash-api
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="https://github.com/vvbbnn00/WARP-Clash-API"&gt;vvbbnn00/WARP-Clash-API: 该项目可以让你通过订阅的方式使用Cloudflare WARP+，自动获取流量。This project enables you to use Cloudflare WARP+ through subscription, automatically acquiring traffic. (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="展示地址"&gt;展示地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.laning.ltd:21001/"&gt;click here&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="cloudflare-反向代理"&gt;cloudflare 反向代理&lt;/h2&gt;
&lt;h3 id="开源项目"&gt;开源项目&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/3Kmfi6HP/EDtunnel"&gt;3Kmfi6HP/EDtunnel: Use Cloudflare pages and worker serverless to implement VLESS protocol (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="参考文章"&gt;参考文章&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://jdssl.top/index.php/2023/08/02/newvless/"&gt;免费翻墙，批量vless节点，反代伪装网页，轻松跑满本地宽带 (jdssl.top)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="展示地址-1"&gt;展示地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://helloworld.610524250.workers.dev/785f7047-3c97-47c5-a63f-e1b408386baa"&gt;click here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Jellyfin on NanoPC-T4</title><link>https://blog.laning.org/posts/wp-0290/</link><pubDate>Tue, 19 Mar 2024 14:40:38 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0290/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;受限于jellyfin对rk3399等ARM处理器视频硬件解码的支持，搭建的Jellyfin服务都采用客户端解码。&lt;/p&gt;
&lt;h2 id="docker部署jellifin"&gt;docker部署Jellifin&lt;/h2&gt;
&lt;h3 id="docker-composeyml文件"&gt;docker-compose.yml文件&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;version: &amp;#39;3.3&amp;#39;
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
network_mode: &amp;#39;host&amp;#39;
volumes:
- ./config:/config
- ./cache:/cache
- ./media:/media
# - /path/to/media2:/media2:ro
restart: &amp;#39;unless-stopped&amp;#39;
# Optional - alternative address used for autodiscovery
environment:
- JELLYFIN_PublishedServerUrl=http://example.com
#- http_proxy=http://127.0.0.1:7890
#- https_proxy=http://127.0.0.1:7890
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
# extra_hosts:
# - &amp;#39;host.docker.internal:host-gateway&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;一些说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;采用了host模式，无需进行端口映射&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;https端口8920，http端口8096&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可通过环境变量配置http和https代理&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="部署https证书"&gt;部署https证书&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;阿里云申请免费证书，有效期3个月，服务器类型选IIS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上传证书到./config文件夹中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在Jellyfin页面中配置证书文件地址和密码&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>gitea服务安装配置</title><link>https://blog.laning.org/posts/wp-0283/</link><pubDate>Sat, 27 May 2023 02:53:51 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0283/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;关于gitea是什么，以及基本的配置可以参考&lt;a href="https://docs.gitea.com/zh-cn/"&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="特性"&gt;特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;此为内网使用，因而没有配置caddy或nginx等代理&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;h3 id="1启动docker服务"&gt;1.启动docker服务&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2ipport通过浏览器配置"&gt;2.IP:port通过浏览器配置&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://blog.laning.org/images/2023-05-27-gitea%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/Gitea%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8E%E7%AB%99%E7%82%B9%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE.png"&gt;&lt;img alt="Gitea数据库与站点初始化配置" loading="lazy" src="https://blog.laning.org/images/2023-05-27-gitea%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/Gitea%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8E%E7%AB%99%E7%82%B9%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.laning.org/images/2023-05-27-gitea%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/Gitea%E6%9C%8D%E5%8A%A1%E4%B8%8E%E7%AE%A1%E7%90%86%E5%91%98%E9%85%8D%E7%BD%AE.png"&gt;&lt;img alt="Gitea服务与管理员配置" loading="lazy" src="https://blog.laning.org/images/2023-05-27-gitea%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/Gitea%E6%9C%8D%E5%8A%A1%E4%B8%8E%E7%AE%A1%E7%90%86%E5%91%98%E9%85%8D%E7%BD%AE.png"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>vscode-web服务与配置</title><link>https://blog.laning.org/posts/wp-0268/</link><pubDate>Sat, 27 May 2023 01:59:14 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0268/</guid><description>&lt;p&gt;&lt;a href="https://blog.laning.org/images/2023-05-27-vscode-web%E6%9C%8D%E5%8A%A1%E4%B8%8E%E9%85%8D%E7%BD%AE/VSCode-Web%E6%B5%8F%E8%A7%88%E5%99%A8%E5%BC%80%E5%8F%91%E7%95%8C%E9%9D%A2.png"&gt;&lt;img alt="VSCode-Web浏览器开发界面" loading="lazy" src="https://blog.laning.org/images/2023-05-27-vscode-web%E6%9C%8D%E5%8A%A1%E4%B8%8E%E9%85%8D%E7%BD%AE/VSCode-Web%E6%B5%8F%E8%A7%88%E5%99%A8%E5%BC%80%E5%8F%91%E7%95%8C%E9%9D%A2.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;如果需要在多台设备之间来进行开发工作，频繁的配置开发环境无疑是很消耗精力的事情。而vscode-web提供了通过浏览器来编写代码的环境，因而理论上，你可以在任何一台机器上继续你的工作。&lt;/p&gt;
&lt;h2 id="配置过程"&gt;配置过程&lt;/h2&gt;
&lt;h3 id="1启动docker服务"&gt;1.启动docker服务&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2进入容器查看密钥"&gt;2.进入容器查看密钥&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#进入容器
docker exec -it code-server bash
#查看密钥
cat ~/.config/code-server/config.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="3更换容器的apt源"&gt;3.更换容器的apt源&lt;/h3&gt;
&lt;p&gt;参考文档：&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/debian/"&gt;清华开源软件镜像站Debian Help&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#换源完成后执行
apt update
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="4安装cc环境"&gt;4.安装C/C++环境&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt install build-essential
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="5解决python命令找不到"&gt;5.解决python命令找不到&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ln -s /usr/bin/python3 /usr/bin/python
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="6安装rust开发环境"&gt;6.安装Rust开发环境&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl --proto &amp;#39;=https&amp;#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="7进入web界面自行安装喜欢的插件"&gt;7.进入web界面，自行安装喜欢的插件&lt;/h3&gt;</description></item><item><title>bingAI本地部署</title><link>https://blog.laning.org/posts/wp-0263/</link><pubDate>Sat, 27 May 2023 00:35:44 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0263/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;自从chatGPT3.0问世以后，新一轮的人工智能浪潮深刻改变了我们的生活。相比于深蓝击败人类象棋冠军以及阿尔法狗击败人类围棋冠军，chatGPT更能称为划时代的人工智能产品，因为它太接近我们的生活了（通用人工智能）。关于它能干什么以及它与newbing的关系这里不多介绍，感兴趣的可以自己寻找这方面的科普视频。本文主要分享如何通过docker部署newbing，从而达到无需魔法访问newbing的目的。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.laning.org/images/2023-05-27-bingAI%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2/NewBing%E8%81%8A%E5%A4%A9%E9%A6%96%E9%A1%B5.png"&gt;&lt;img alt="NewBing聊天首页" loading="lazy" src="https://blog.laning.org/images/2023-05-27-bingAI%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2/NewBing%E8%81%8A%E5%A4%A9%E9%A6%96%E9%A1%B5.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开源项目地址&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adams549659584/go-proxy-bingai"&gt;go-proxy-bingai&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="特性"&gt;特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用caddy来进行反向代理，自动配置域名证书&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实践过程"&gt;实践过程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;拉取&lt;a href="https://github.com/laningya/Raspberry-Pi/tree/develop/bingAI"&gt;本目录&lt;/a&gt;下的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;替换caddy文件下的Caddyfile文件中的yourdomain.com字段为自己的域名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;命令行执行&lt;code&gt;docker-compose up -d&lt;/code&gt;畅享服务吧。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>NanoPC-T4开发记录</title><link>https://blog.laning.org/posts/wp-0258/</link><pubDate>Sat, 27 May 2023 00:21:02 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0258/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;咸鱼200块淘了块RK3399的T4开发板（裸板），4GRAM，16GBemmc，比起树莓派，价格算很香的了&lt;/p&gt;
&lt;h2 id="制作外壳"&gt;制作外壳&lt;/h2&gt;
&lt;p&gt;因为没有外壳，官方的外壳售价一言难尽，并且没有预留GPIO的空间，尝试自己画亚克力外壳。先是用了3DMAX，可惜商家需要dwg格式（即需要autoCAD），简单学习就能上手，需要学习rec，dli等命令的使用。同时经过测量需要M3的六角铜柱，以及M3螺丝，螺母，具体规格可以参考&lt;a href="https://github.com/laningya/Raspberry-Pi/tree/master/NanoPC-T4"&gt;Raspberry-Pi/NanoPC-T4 at master · laningya/Raspberry-Pi (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="烧录系统"&gt;烧录系统&lt;/h2&gt;
&lt;p&gt;常用的烧录方式有两种（直接将系统安装在SD卡，读写速度有点慢，且步骤相对简单，不作记录）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;从windows或者linux烧录到emmc&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从sd卡烧录到emmc&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上两种方式,&lt;a href="https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T4"&gt;官方文档&lt;/a&gt;都提供了详细的步骤。 主要记录&lt;strong&gt;在emmc中安装armbian系统&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下载或自己编译Armbian的镜像文件。此处推荐内核版本为4.4或4.19，至于原因后续会讲到，如果不想编译，可以直接在官方提供的&lt;a href="https://stpete-mirror.armbian.com/archive/nanopct4/archive/"&gt;链接&lt;/a&gt;下载。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将镜像写入sd卡。windows平台下推荐使用win32Diskimage，linux平台下推荐使用dd命令，它看起来是这样&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo dd if=imagePath of=/dev/sdx bs=4M status=progress&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将Armbian系统写入到emmc中。Armbian提供了 armbian-config的工具，命令行执行：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo armbian-config&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;依次选择System&amp;mdash;&amp;gt;Install&amp;mdash;&amp;gt;Boot from eMMC - system on eMMC&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基本初始化"&gt;基本初始化&lt;/h2&gt;
&lt;h3 id="apt换源以及armbian换源"&gt;apt换源以及armbian换源&lt;/h3&gt;
&lt;p&gt;参考清华大学开源软件镜像站帮助文档&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/debian/"&gt;Debian apt换源参考文档&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/armbian/"&gt;Armbian换源参考文档&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ifconfig普通用户无法执行问题"&gt;ifconfig普通用户无法执行问题&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vim ~/.bashrc
#在文件末尾添加
export PATH=$PATH:/sbin:/usr/sbin
#保存后命令行执行
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="wiringpi-for-rk3399-安装"&gt;WiringPI for RK3399 安装&lt;/h2&gt;
&lt;p&gt;参考&lt;a href="https://wiki.friendlyelec.com/wiki/index.php/WiringPi_for_RK3399/zh"&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt; 官方的wiringpi for rk3399 的.deb文件通过解包可以发现，官方只为NanoPC-T4开发板适配了4.x内核，这也是为什么推荐安装4.4内核的armbian系统。&lt;/p&gt;
&lt;h2 id="pwm风扇配置"&gt;PWM风扇配置&lt;/h2&gt;
&lt;p&gt;rk3399真的太热了，只配置散热片的情况下，待机状态下，cpu温度都有40摄氏度，所以还是推荐购买官方的PWM风扇，12V供电且开发板预留了接口，有了散热风扇后，cpu35摄氏度左右，除了贵没啥缺点，。以下脚本也只支持4.x内核版本&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; class=&amp;#34;wp-block-preformatted&amp;#34;&amp;gt;#文件路径：/usr/bin
#文件名称：start-rk3399-pwm-fan.sh
#以下为文件内容：
#!/bin/bash
echo $$ &amp;gt; /var/run/fan.pid echo 0 &amp;gt; /sys/class/pwm/pwmchip1/export
echo 0 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/enable
echo 50000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/period
echo 1 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/enable
while true
do
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
if [ $temp -gt 48000 ]; then
echo 1000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/duty_cycle;
elif [ $temp -gt 43000 ]; then
echo 20000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/duty_cycle;
elif [ $temp -gt 38000 ]; then
echo 30000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/duty_cycle;
elif [ $temp -gt 33000 ]; then
echo 40000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/duty_cycle;
else
echo 50000 &amp;gt; /sys/class/pwm/pwmchip1/pwm0/duty_cycle;
fi
sleep 1s;
done
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;#文件路径：/lib/systemd/system
#文件名称：pwm-fan.service
#以下为文件内容
[Unit]Description=pwm-fan
After=rc.local.service
[Service]
Type=oneshot
KillMode=control-group
WorkingDirectory=/tmp
ExecStart=/usr/bin/start-rk3399-pwm-fan.sh
[Install]
WantedBy=multi-user.target
Alias=pwm-fan.service
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;配置开机自启动&lt;/p&gt;</description></item><item><title>校园电信宽带自动连接脚本</title><link>https://blog.laning.org/posts/wp-0211/</link><pubDate>Thu, 06 Apr 2023 15:28:16 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0211/</guid><description>&lt;h2 id="项目起因"&gt;项目起因&lt;/h2&gt;
&lt;p&gt;校园电信宽带一大痛点是在路由器断电后，需要手动进行身份认证。在外面遇到寝室断电或者早上赶早八，而没有连接网络，当需要远程宿舍网络时，就会很崩溃。前不久看到有人在朋友圈分享自己写的脚本，今天自己实践一下。&lt;/p&gt;
&lt;h2 id="脚本地址"&gt;脚本地址&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;作者提供的地址&lt;/strong&gt;：&lt;a href="https://gist.github.com/learnerLj/e327816e735ac8f12a62d18029bb45f0"&gt;https://gist.github.com/learnerLj/e327816e735ac8f12a62d18029bb45f0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在此基础上，我修改了部分代码，更便于后续的部署实践&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修改后的地址&lt;/strong&gt;：&lt;a href="https://github.com/laningya/UESTC-WORK/blob/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/autoConnectNetwork.py"&gt;https://github.com/laningya/UESTC-WORK/blob/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/autoConnectNetwork.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;先看一下脚本需要提供的信息&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;post_url中的IP地址&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;post_data中userId，password，queryString&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实践过程"&gt;实践过程&lt;/h2&gt;
&lt;h3 id="获取脚本需要的信息"&gt;获取脚本需要的信息&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;获取post_url中的IP地址和post_data中的queryString字段&lt;img alt="电信认证页面IP与queryString参数" loading="lazy" src="https://blog.laning.org/images/2023-04-06-%E6%A0%A1%E5%9B%AD%E7%94%B5%E4%BF%A1%E5%AE%BD%E5%B8%A6%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E8%84%9A%E6%9C%AC/%E7%94%B5%E4%BF%A1%E8%AE%A4%E8%AF%81%E9%A1%B5%E9%9D%A2IP%E4%B8%8EqueryString%E5%8F%82%E6%95%B0.png"&gt;&lt;/p&gt;
&lt;p&gt;（原文图片未随备份提供：&lt;code&gt;images/1.png&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;如图，在电信宽带认证界面的url中，172.25.249.64即为posturl中需要的IP地址；index.jsp? 之后的所有内容为post_data中queryString需要的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获取post_data中的userId和password&lt;img alt="浏览器开发者工具获取认证参数" loading="lazy" src="https://blog.laning.org/images/2023-04-06-%E6%A0%A1%E5%9B%AD%E7%94%B5%E4%BF%A1%E5%AE%BD%E5%B8%A6%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E8%84%9A%E6%9C%AC/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7%E8%8E%B7%E5%8F%96%E8%AE%A4%E8%AF%81%E5%8F%82%E6%95%B0.png"&gt; 如图，需要打开在浏览器打开f12开发者工具，如图为Google Chrome的调试页面。点击网络，保留日志，双击InterFace.do?method=login选项，选择载荷，找到其中的userId和password字段，并填入代码中，**注意：**pasaword字段后面还有个queryString字段，在步骤1中我们也有一个相同名称的字段，而程序需要的是步骤1中的字段。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;至此，我们就获取到脚本需要的所有信息，即可以运行脚本。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="在树莓派等设备上部署自动执行脚本"&gt;在树莓派等设备上部署自动执行脚本&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;树莓派部署自动执行脚本的形式有很多，本次采用crontab服务，在pi用户下，命令行执行以下命令&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd &amp;amp;&amp;amp; mkdir .script &amp;amp;&amp;amp; cd .script &amp;amp;&amp;amp; touch autoConnectNetwork.py
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过vim或者nano编辑器将脚本内容添加到 &lt;strong&gt;autoConnectNetwork.py&lt;/strong&gt;中&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加crontab任务，在命令行执行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;crontab -e
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在文件末尾添加&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;* * * * * /usr/bin/python /home/pi/.script/autoConnectNetwork.py &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="通过docker部署脚本"&gt;通过Docker部署脚本&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载项目文件和Docker环境以及填写配置文件。Docker的安装方法可以参考&lt;a href="https://docs.docker.com/engine/install/"&gt;官方文档&lt;/a&gt;，Docker部署文件地址为：&lt;a href="https://github.com/laningya/UESTC-WORK/tree/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/Docker"&gt;https://github.com/laningya/UESTC-WORK/tree/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/Docker&lt;/a&gt; 需要的配置与前面一致，配置文件路径为Docker/config/config.txt，填入必要的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;构建镜像。如果你是Linux用户，在Docker文件夹下，命令行执行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker build --no-cache -t laningya/uestc_auto_connect_network:v1 .
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;不要忘记复制后面的点&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;说明： build:docker构建镜像的命令 --no-cache:忽略缓存 -t:指定构建后的镜像名
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;（原文图片未随备份提供：&lt;code&gt;images/docker_build.png&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行镜像。还是在/Docker目录下，命令行执行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run -itd --restart=always --net=host --name autoConnectNetwork laningya/uestc_auto_connect_network:v1
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;说明： run:docker运行容器的命令 -itd：可以简单理解为在后台执行 --restart=always:容器运行出现错误时，自动尝试重启，关键参数，不能轻易取消 --net=host:指定容器网络为host模式，便于直接访问路由器 --name utoConnectNetwork 指定容器名，便于后续管理 laningya/uestc_auto_connect_network:v1 我们前面构建的镜像名称
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;（原文图片未随备份提供：&lt;code&gt;images/docker_run_ps.png&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>CSAPP学习笔记</title><link>https://blog.laning.org/posts/wp-0105/</link><pubDate>Thu, 14 Jul 2022 13:45:10 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0105/</guid><description>&lt;h1 id="深入理解计算机系统c语言数据结构微嵌编译原理数电模电"&gt;深入理解计算机系统（C语言、数据结构、微嵌、编译原理、数电、模电）&lt;/h1&gt;
&lt;h2 id="第一章计算机系统漫游"&gt;第一章：计算机系统漫游&lt;/h2&gt;
&lt;p&gt;编译系统&lt;/p&gt;
&lt;p&gt;hello.c-&amp;gt;hello.i&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -E hello.c -o hello.i
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.i-&amp;gt;hello.s&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -S hello.i -o hello.s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.s-&amp;gt;hello.o&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -c hello.s -o hello.o
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.o-&amp;gt;hello&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc hello.o -o hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="第二章信息的表示和处理"&gt;第二章：信息的表示和处理&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//数据在不同架构处理器下的表示
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;typedef&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; byte_pointer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;(byte_pointer start, &lt;span style="color:#66d9ef"&gt;size_t&lt;/span&gt; led)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;size_t&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; ;i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; led; i&lt;span style="color:#f92672"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;%.2x&amp;#34;&lt;/span&gt;,start[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_int&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_float&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_pointer&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;12345&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_int&lt;/span&gt;(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="整数浮点数在计算机内部的表示与运算"&gt;整数、浮点数在计算机内部的表示与运算&lt;/h3&gt;
&lt;h2 id="第三章程序的机器级表示"&gt;第三章：程序的机器级表示&lt;/h2&gt;
&lt;h3 id="whiledo-whilefor性能分析"&gt;while、do-while、for性能分析&lt;/h3&gt;
&lt;p&gt;三种都是通过条件测试和跳转指令实现的。&lt;/p&gt;</description></item><item><title>OpenStick折腾日记</title><link>https://blog.laning.org/posts/wp-0103/</link><pubDate>Mon, 11 Jul 2022 01:37:34 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0103/</guid><description>&lt;h2 id="项目起因"&gt;项目起因&lt;/h2&gt;
&lt;p&gt;最近网上火起了用淘宝8.8购买随身WIFI,其处理器为msm8916，这是一款4核ARMV8架构的64位处理器，酷安&lt;/p&gt;
&lt;p&gt;社区有大佬通过逆向工程为其编译了Debian、OpenWRT镜像，本次安装的是Debian11的镜像。&lt;/p&gt;
&lt;h2 id="环境准备"&gt;环境准备&lt;/h2&gt;
&lt;p&gt;一台Windows电脑&lt;/p&gt;
&lt;p&gt;随身Wifi&lt;/p&gt;
&lt;h2 id="安装过程"&gt;安装过程&lt;/h2&gt;
&lt;h3 id="备份原系统"&gt;备份原系统&lt;/h3&gt;
&lt;p&gt;为了防止我们操作失误将Stick刷成砖，我们需要先备份Stick原系统。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;备份工具&lt;a href="https://pan.baidu.com/s/1ocF7B79xgsXr5KquIx8cDg?pwd=4w5h"&gt;下载地址&lt;/a&gt; 提取码：4w5h&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装9008驱动，按住随身WIFI上的按钮插入电脑USB口，在电脑设备管理器-端口设备里能看到 9008 的 COM 设备就说明连接上了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装miko，打开文件夹MiKo_Pro，双击安装miko并将 Loader 粘贴到安装的路径下面（默认在 C:\Program Files (x86)\miko_service_tool_pro\miko_service_tool_pro），打开 Loader&lt;/p&gt;
&lt;p&gt;然后在 miko 里依次选择 Read – Partition Backup/Earese – 点击左下角 Load Partition Structure 看到右边有系统信息的输出就说明连上了。&lt;/p&gt;
&lt;p&gt;然后点击 Read Full Image 选个路径，取个名字就开始全量备份救砖能用的 .bin 文件。过程会比较慢，可能要十几分钟。等到跑完进度条 100% 右边的输出显示 success 就备份好了，我们就能开始随意折腾。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入fastboot模式，备份完后重新插拔（这次重启不需要按随身wifi上的按钮），然后打开搞机工具箱，（注意此处应该显示有一台设备）选择线刷专区，重启到 Fastboot，一般重启 fastboot 后随身 Wi-Fi 会亮红灯。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="刷入新系统"&gt;刷入新系统&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载&lt;a href="https://github.com/OpenStick/OpenStick/releases/download/v1/base.zip"&gt;base.zip&lt;/a&gt; 并解压；下载&lt;a href="https://github.com/OpenStick/OpenStick/releases/download/v1/debian.zip"&gt;debian.zip&lt;/a&gt; 并解压&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在base文件夹下双击执行flash.bat，注意期间可能需要几次回车，完成后关闭窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在debian文件夹下双击执行flash.bat，同样注意需要几次回车，完成后关闭窗口即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;刷机完成。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="基本使用"&gt;基本使用&lt;/h2&gt;
&lt;h3 id="windows通过ssh连接stick"&gt;Windows通过ssh连接Stick&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;大佬提供的系统镜像默认开启了ssh服务，但是我们需要通过NDIS来为Stick分配网络地址，此时我们可能会遇到驱动问题，此处我建议看看&lt;a href="https://www.kancloud.cn/handsomehacker/openstick/2636506"&gt;OpenStick Wiki&lt;/a&gt; 提供的解决方案，此处我做一点补充说明，安装上面的操作后，我们会在设备管理器中发现一个未知设备，为次设备添加NDIS驱动即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stick默认的IP地址为192.168.68.1 默认用户为user 密码为1&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh user@192.168.68.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="为stick连接wifi"&gt;为Stick连接Wifi&lt;/h3&gt;
&lt;p&gt;虽然随身WIFI在购买时可能厂商提供了免费的流量套餐，但是，这种免费一般都是限额的，所以我们此处考虑使用nmcli工具在命令行为OpenStick连接我们的WIFI&lt;/p&gt;</description></item><item><title>华迪实习</title><link>https://blog.laning.org/posts/wp-0101/</link><pubDate>Wed, 06 Jul 2022 16:06:47 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0101/</guid><description>&lt;hr&gt;
&lt;h2 id="6月24日"&gt;&lt;mark&gt;6月24日&lt;/mark&gt;&lt;/h2&gt;
&lt;h3 id="pc与嵌入式计算机"&gt;PC与嵌入式计算机&lt;/h3&gt;
&lt;p&gt;参考微处理器与嵌入式系统设计课程内容。介绍计算机的体系结构、组成等。&lt;/p&gt;
&lt;h3 id="开发环境及配置"&gt;开发环境及配置&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;介绍了在VMware中安装Ubuntu20.04LTS的方法&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;介绍通过运维三大神器之一sed来实现CLI换源操作，对sudo apt update命令作用做了分析介绍&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装openssh服务端，通过xshell、secureCRT、CMD、powershell等工具来实现对linux的访问，此处也介绍了systemctl命令的常用用法status、enabled、start等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;介绍cd ls mkdir rm 等文件操作命令及参数&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;介绍文件权限管理命令chmod以及文件类型判断、文件权限修改等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;介绍环境变量的概念，以及影响环境变量的多个配置文件，有系统级和用户级配置文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;介绍tar的归档打包与解包&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="总结"&gt;总结&lt;/h3&gt;
&lt;p&gt;第一天实习主要工作是配置Linux（Ubuntu）环境，学习并实践Linux常用命令（主要针对的是文件管理的命令）。因为有Linux基础，学习起来相对轻松。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="6月25日"&gt;&lt;mark&gt;6月25日&lt;/mark&gt;&lt;/h2&gt;
&lt;h3 id="vivim的安装与使用"&gt;vi/vim的安装与使用&lt;/h3&gt;
&lt;p&gt;vim是Linux命令行最强大的编辑器之一，快捷键操作是它最大的特点。拥有Linux基础不再过多描述这一部分&lt;/p&gt;
&lt;h3 id="交叉编译环境的搭建"&gt;交叉编译环境的搭建&lt;/h3&gt;
&lt;p&gt;交叉编译是指在x86的平台上从源代码开始编译适用于arm架构的程序，甚至是x86_64编译arm32的程序。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ubuntu20.04最小安装缺少基本的C的编译环境，我们可以从apt包管理器下载安装基本的编译环境&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#安装为64位的环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install build-essential
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#若需要32位的函数库支持&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install lib32stdc++6
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#为gcc编译32位程序做准备&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg --add-architecture i386
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install gcc-multilib g++-multilib
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;至此，我们搭建了Ubuntu上编译x86和x86_64位C程序的环境，接下来我们通过SecureFX、winSCP等软件上传开发板的arm下的C语言编译器，并进行如下操作&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#此为归档文件，我们用tar命令解包,注意此为绿色软件（已经编译好的二进制文件），为了Linux的使用规范，我们将其解包到/usr/local下，而/usr/local是root用户的目录，普通用户需要sudo权限才能进行写的操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linuxgnu.tar.bz2 -C /usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#检查是否安装完成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -V
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;至此，我们完成了检查编译环境的搭建，我们使用此环境简单编译hello world程序&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc hello.c -o hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;
&lt;p&gt;添加环境变量&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo vim /etc/profile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;添加以下内容
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/usr/local/arm-2014.05/bin:$PATH
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#使上面修改生效&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source /etc/profile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="6月24日-1"&gt;&lt;mark&gt;6月24日&lt;/mark&gt;&lt;/h2&gt;
&lt;h3 id="通过内核控制lde亮灭"&gt;通过内核控制LDE亮灭&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;fcntl.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/ioctl.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;open&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/dev/leds&amp;#34;&lt;/span&gt;,O_RDWR);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;==&lt;/span&gt;fd)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;打开设备失败&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;exit&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;sleep&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;sleep&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;fcntl.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;sys/ioctl.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;open&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/dev/leds&amp;#34;&lt;/span&gt;,O_RDWR);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;==&lt;/span&gt;fd)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;打开设备失败&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;exit&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;sleep&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;ioctl&lt;/span&gt;(fd,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;sleep&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="linux内核编译"&gt;Linux内核编译&lt;/h3&gt;
&lt;p&gt;Linux内核编译的重点是.config文件的修改，即自己需要选择适合自己机器（开发板）的套件，而我们为了简化难度，.config文件老师已经给出，我们执行下面的命令&lt;/p&gt;</description></item><item><title>多平台挂载Webdav</title><link>https://blog.laning.org/posts/wp-0094/</link><pubDate>Fri, 20 May 2022 11:33:30 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0094/</guid><description>&lt;h2 id="webdav有什么用"&gt;webdav有什么用？&lt;/h2&gt;
&lt;p&gt;在日常工作应用中，我们常常有下面的需求场景：在公司没有完成的工作，可能需要在家继续办公，而我们需要同步在公司的工作进度，最朴素的解决方法就是用U盘进行拷贝，但如果你有webdav等文件传输工具，我们可以完全省去这个繁琐的过程。webdav通过挂载云盘服务到本地，在不同设备都开启webdav,即可实现资源共享；webdav是基于http的文本传输协议，这意味着如果你能接入互联网，就能实现文本共享；同时webdav可以跨平台挂载在本地使用，这意味着你不需要考虑从Linux到Windows对于中文编码方式而出现乱码不同的尴尬；同时，例如阿里云盘、群晖NAS、Google云盘等都提供了webdav服务，这意味着你可以像使用本地硬盘一样访问你的云盘资源。&lt;/p&gt;
&lt;h3 id="声明本人拥有群晖nas所以下文的配置等可能会以群晖nas配置作为示例但配置方法与其他云盘区别不大有需求的可以作为参考"&gt;声明：本人拥有群晖NAS,所以下文的配置等可能会以群晖NAS配置作为示例，但配置方法与其他云盘区别不大，有需求的可以作为参考。&lt;/h3&gt;
&lt;h2 id="windows"&gt;Windows：&lt;/h2&gt;
&lt;p&gt;Windows平台一直以其丰富的图像化软件，在这里我推荐一款好用的webdav客户端软件:&lt;/p&gt;
&lt;p&gt;RaiDrive&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href="https://www.raidrive.com/download"&gt;https://www.raidrive.com/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RaiDrive提供可视化操作和中文界面，具体配置可自行摸索。&lt;/p&gt;
&lt;h2 id="linux"&gt;Linux：&lt;/h2&gt;
&lt;p&gt;图像化操作：&lt;/p&gt;
&lt;p&gt;如果你是将Linux作为主力机的用户，并且安装了KDE、GNOME这类桌面环境，我们可以使用桌面环境的文档管理器在网络、其他位置这些地方选择挂载Webdav。&lt;/p&gt;
&lt;p&gt;关于GNOME桌面，我的系统环境为ArchLinux+GNOME桌面，在挂载基于https的davs服务失败，但是挂载http的dav服务成功，出于安全考虑，我舍去了这种挂载方法。&lt;/p&gt;
&lt;p&gt;命令行操作：&lt;/p&gt;
&lt;p&gt;命令行需要安装davfs2工具：&lt;/p&gt;
&lt;p&gt;安装：&lt;/p&gt;
&lt;p&gt;Ubuntu/Debian：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install davfs2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Arch/Manjaro：（pacman不提供这个工具，我们需要AUR来下载）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yay -S davfs2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;配置：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/davfs2/davfs2.conf &lt;/code&gt; 删掉前面的注释符号并修改为：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;use_locks 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ignore_dav_header 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/davfs2/secrets&lt;/code&gt; 在文件末尾添加：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://damain:port/path username userpassword&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;说明：需要指定域名、端口、群晖NAS文件路径、用户名、密码&lt;/p&gt;
&lt;p&gt;配置开机自动挂载：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/fstab&lt;/code&gt; 在文件末尾添加：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://damain:port/path /mnt/webdav davfs rw,user,uid=username,noauto 0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;说明：&lt;/p&gt;
&lt;p&gt;username为系统用户名&lt;/p&gt;</description></item><item><title>local</title><link>https://blog.laning.org/posts/wp-0084/</link><pubDate>Fri, 22 Apr 2022 15:54:22 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0084/</guid><description>&lt;h1 id="pip换源"&gt;&lt;strong&gt;pip换源&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;配置文件地址：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;~/.config/pip/pip.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;文件内容：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;命令行操作：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;附清华大学开源镜像站pypi帮助：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/pypi/"&gt;https://mirrors.tuna.tsinghua.edu.cn/help/pypi/&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="vimrc"&gt;&lt;strong&gt;.vimrc&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Github项目地址：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/amix/vimrc"&gt;https://github.com/amix/vimrc&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;~/.vim_runtime/vimrcs/extended.vim中 可以禁用主题和背景色，搭配终端配置透明终端&lt;/p&gt;
&lt;h1 id="zshrc"&gt;&lt;strong&gt;.zshrc&lt;/strong&gt;&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r &amp;#34;${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh&amp;#34; ]]; then
source &amp;#34;${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh&amp;#34;
fi
if [[ ! -f $HOME/.zi/bin/zi.zsh ]]; then
print -P &amp;#34;%F{33}▓▒░ %F{160}Installing (%F{33}z-shell/zi%F{160})…%f&amp;#34;
command mkdir -p &amp;#34;$HOME/.zi&amp;#34; &amp;amp;&amp;amp; command chmod g-rwX &amp;#34;$HOME/.zi&amp;#34;
command git clone -q --depth=1 --branch &amp;#34;main&amp;#34; https://github.com/z-shell/zi &amp;#34;$HOME/.zi/bin&amp;#34; &amp;amp;&amp;amp; \
print -P &amp;#34;%F{33}▓▒░ %F{34}Installation successful.%f%b&amp;#34; || \
print -P &amp;#34;%F{160}▓▒░ The clone has failed.%f%b&amp;#34;
fi
source &amp;#34;$HOME/.zi/bin/zi.zsh&amp;#34;
autoload -Uz _zi
(( ${+_comps} )) &amp;amp;&amp;amp; _comps[zi]=_zi
# examples here -&amp;gt; https://z-shell.pages.dev/docs/gallery/collection
zicompinit # &amp;lt;- https://z-shell.pages.dev/docs/gallery/collection#minimal zi light-mode for \ z-shell/z-a-meta-plugins \ @annexes @molovo zi light romkatv/powerlevel10k zi light zsh-users/zsh-syntax-highlighting zi load zsh-users/zsh-completions # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh alias ls=&amp;#34;ls --color&amp;#34; alias ll=&amp;#34;ls -al&amp;#34; eval $(thefuck --alias) alias proxy=&amp;#39;http_proxy=&amp;#34;127.0.0.1:10809&amp;#34; https_proxy=&amp;#34;127.0.0.1:10809&amp;#34;&amp;#39; alias vi=vim # &amp;gt;&amp;gt;&amp;gt; conda initialize &amp;gt;&amp;gt;&amp;gt;
# !! Contents within this block are managed by &amp;#39;conda init&amp;#39; !!
__conda_setup=&amp;#34;$(&amp;#39;/usr/bin/conda&amp;#39; &amp;#39;shell.zsh&amp;#39; &amp;#39;hook&amp;#39; 2&amp;gt; /dev/null)&amp;#34;
if [ $? -eq 0 ]; then
eval &amp;#34;$__conda_setup&amp;#34;
else
if [ -f &amp;#34;/usr/etc/profile.d/conda.sh&amp;#34; ]; then
. &amp;#34;/usr/etc/profile.d/conda.sh&amp;#34;
else
export PATH=&amp;#34;/usr/bin:$PATH&amp;#34;
fi
fi
unset __conda_setup
# &amp;lt;&amp;lt;&amp;lt; conda initialize &amp;lt;&amp;lt;&amp;lt;
alias s=sudo
alias sv=&amp;#34;sudo vim&amp;#34;
alias spm=&amp;#34;sudo pacman&amp;#34;
alias sc=&amp;#34;sudo cat&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="debianubunturaspbianarmbian换源"&gt;&lt;strong&gt;Debian/Ubuntu/Raspbian/Armbian换源&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;软件源配置文件地址：&lt;/p&gt;</description></item><item><title>WireGuard配置</title><link>https://blog.laning.org/posts/wp-0078/</link><pubDate>Tue, 19 Apr 2022 20:34:22 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0078/</guid><description>WireGuard配置的一些示例</description></item><item><title>树莓派自编译opencv</title><link>https://blog.laning.org/posts/wp-0066/</link><pubDate>Fri, 03 Dec 2021 22:10:51 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0066/</guid><description>&lt;h2 id="项目介绍"&gt;项目介绍&lt;/h2&gt;
&lt;p&gt;OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库，可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效，同时提供了Python、Ruby、MATLAB等语言的接口，实现了图像处理和计算机视觉方面的很多通用算法。而树莓派作为一款非常流行的开发学习平台，很多开发者的人工智能项目都基于opencv，然而，树莓派的软件源一般提供的都是opencv3.4.0这种老版本，这个项目将分享如何在树莓派上源码编译并安装指定版本的opencv。&lt;/p&gt;
&lt;h3 id="说在前面"&gt;说在前面&lt;/h3&gt;
&lt;p&gt;即便是最新的树莓派4B代（4G）版本，在一切顺利的情况下，编译安装完成本项目也大概需要5个小时以上，所以如果没有特殊要求可以考虑用清华源（其他软件源不太清楚是否有对应的软件包）直接安装opencv，关于如何换清华源不多赘述，请自行百度。换源之后，命令行依次执行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install python3-opencv
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="1环境配置"&gt;1.环境配置&lt;/h3&gt;
&lt;p&gt;（建议SSH远程连接树莓派操作，省去自己输入命令的烦恼）&lt;/p&gt;
&lt;p&gt;现在你假设已经正确更换软件源，包括apt和pip，不换源在环境配置这一步可能会花费很多没必要花费的时间&lt;/p&gt;
&lt;p&gt;对于一些博主进行扩容的操作思路，本人并没有进行所谓的扩容，且没有出现卡死的现象，所以本教程没有扩容这一步&lt;/p&gt;
&lt;p&gt;安装opencv环境依赖，依次执行下面命令&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ wget unzip
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install build-essential git cmake pkg-config -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libjpeg8-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libtiff5-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libjasper-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libpng12-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libgtk2.0-dev -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install libatlas-base-dev gfortran -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2下载源码并解压"&gt;2.下载源码并解压&lt;/h3&gt;
&lt;p&gt;（建议SSH远程连接树莓派操作，省去自己输入命令的烦恼）&lt;/p&gt;</description></item><item><title>树莓派远程访问——向日葵解决方案</title><link>https://blog.laning.org/posts/wp-0062/</link><pubDate>Fri, 03 Dec 2021 20:03:54 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0062/</guid><description>&lt;h2 id="项目介绍"&gt;项目介绍&lt;/h2&gt;
&lt;p&gt;树莓派是一款口袋型电脑，拥有丰富的外设接口，同时不错的计算能力，完善的生态（可安装多种Linux操作系统），吸引了一大批技术爱好者加入树莓派社区。要想实现远程访问树莓派GUI界面，除了常用的VNC解决方案，在这里我推荐一个工具——向日葵，它很好地解决了在无公网IP的情况下，树莓派GUI访问的问题。&lt;/p&gt;
&lt;h3 id="1环境要求"&gt;1.环境要求&lt;/h3&gt;
&lt;p&gt;Raspbain_bullseye_arm64镜像，下载链接：&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_arm64/images/raspios_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64.zip"&gt;https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_arm64/images/raspios_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更换Debian的软件源（注意此处必须是对应系统版本Debian的软件源，而非Raspbian的软件源），更换方法如下：（&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/help/debian/"&gt;参考清华大学开源软件镜像站使用帮助&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;命令行执行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo nano /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注释掉原有的软件源，即在未注释行前面加#号，并复制粘贴以下内容``&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;依次 ctrl+o 回车 ctrl+x&lt;/p&gt;
&lt;p&gt;如果细心观察你会发现我们这里使用了Debian11(bullseye)的系统但是使用的是Debian10(buster)的软件源，因为树莓派向日葵客户端的.deb包依赖只有buster能解决（截止2022年5月9日），如果后续需要使用可以在安装完向日葵客户端后再次换源Debian11(bullseye)&lt;/p&gt;
&lt;p&gt;换源方法在文尾，此处可继续执行后续步骤。&lt;/p&gt;
&lt;p&gt;接下来命令行执行下面的命令使上述变更生效&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2下载并安装向日葵客户端"&gt;2.下载并安装向日葵客户端&lt;/h3&gt;
&lt;p&gt;通过git命令克隆.deb文件地址，命令行依次执行&lt;/p&gt;</description></item></channel></rss>