<?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>Linux on Laning's Blog</title><link>https://blog.laning.org/tags/linux/</link><description>Recent content in Linux on Laning's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 01 Apr 2025 15:46:17 +0800</lastBuildDate><atom:link href="https://blog.laning.org/tags/linux/index.xml" rel="self" type="application/rss+xml"/><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>甲骨文防火墙设置</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>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;</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;
&lt;h3 id="switchif-else性能分析"&gt;switch、if-else性能分析&lt;/h3&gt;
&lt;p&gt;switch通过一个跳转表实现，所以只需要执行一次跳转，而if-else需要多次跳转指令，代码效率相对低。&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;</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;</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;</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;</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;</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;</description></item></channel></rss>