包含关键字 ARM 的文章

本文写作动机:

我在Debian Buster with Armbian Linux
5.3.0-rockchip64上配置cloudreve的持久化出现问题 nano /usr/lib/systemd/system/cloudreve.service出现如下红色报错: `Directory
'/usr/lib/systemd/system' does not exist`
当你按照cloudreve官方文档用vim会发现没有这个问题,只是有提示:[New DIRECTORY],所以进入/usr/lib/systemd看了一眼:只有这几个蓝色文件夹 boot catalog logind.conf.d user user-environment-generators user-generators user-preset 那么结合[New DIRECTORY]这一提示,其实就是没system这个文件夹,这时候又想起网友跟我说过nano有时候会碰到权限问题,但是vim就没这个问题。看起来新秀仍需打磨.......在/usr/lib/systemd/下新建system文件夹再执行就没事了。
systemd的相关东西看情况更新吧,用到了我就记上,没用到就随缘。

Systemd 目录

引用https://cloud.tencent.com/developer/article/1516125

Unit 文件按照 Systemd 约定,应该被放置指定的三个系统目录之一中。这三个目录是有优先级的,如下所示,越靠上的优先级越高。因此,在三个目录中有同名文件的时候,只有优先级最高的目录里的那个文件会被使用。

/etc/systemd/system:系统或用户自定义的配置文件
/run/systemd/system:软件运行时生成的配置文件
/usr/lib/systemd/system:系统或第三方软件安装时添加的配置文件。

CentOS 7:Unit 文件指向该目录
ubuntu 16:被移到了 /lib/systemd/system
Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在那个目录。

Shell脚本实现方案

方案1:缺点无法自动选择有效时间长的ipv6长地址,但是仅需一个Shell文件即可完成。
#!/usr/bin/bash    
dnspod_ddnsipv6_id="#####" #【API_id】将引号内容修改为获取的API的ID
dnspod_ddnsipv6_token="####" #【API_token】将引号内容修改为获取的API的token
dnspod_ddnsipv6_ttl="600" # 【ttl时间】解析记录在 DNS 服务器缓存的生存时间,默认600(s/秒)
dnspod_ddnsipv6_domain='######' #【已注册域名】引号里改成自己注册的域名
dnspod_ddnsipv6_subdomain='#####' #【二级域名】将引号内容修改为自己想要的名字,需要符合域名规范,附常用的规范
local_net="eth0" # 【网络适配器】 默认为eth0,如果你的公网ipv6地址不在eth0上,需要修改为对应的网络适配器
# 常用的规范【二级域名】
# 【www】 常见主机记录,将域名解析为 www.test.com
# 【@】   直接解析主域名 test.com
# 【*】   泛解析,匹配其他所有域名 *.test.com
#  改进了非fe80开头内网地址被误解析的错误。ps:仅支持中国电信,中国联通,中国移动使用,若国外ipv6无法解析请自行修改脚本。
# 举例
# 在腾讯云注册域名,登陆DNSPOD,在【我的账号】的【账号中心】中,有【密钥管理】
# 点击创建密钥即可创建一个API
# 如果你在腾讯云注册域名叫【test.com】
# 那么【dnspod_ddnsipv6_domain】后面就填【test.com】
# 然后根据常用的规范/自己想要的名字在【dnspod_ddnsipv6_subdomain】填入自己需要的名字
# 现假设为【file】,那么你的访问地址为【file.test.com】
if [ "$dnspod_ddnsipv6_record" = "@" ]
then
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_domain
else
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_subdomain.$dnspod_ddnsipv6_domain
fi

die () {
    echo "Error: unable to find [public IPv6 address], please use the 'ip addr' command or query the network panel of the system to check the network card, and fill in the name of the network card with the IPv6 address in the 'local_net' position in the command file." >&2
    echo "IP地址提取错误: 在指定的网络适配器上[$local_net]找不到<公网IPv6地址>(不是fe80开头),请使用'ip addr'命令或在系统的网络面板查询有公网IP的网络适配器,然后在脚本的[local_net]中用填写网络适配器的名称。" >&2
    exit
}

ipv6_list=`ip addr show $local_net | grep inet6 | sed 's/\/.*//g' | awk '{print $2}'  | grep 24 |  awk 'NR==1{print}'` || die

for ipv6 in ${ipv6_list[@]}
do
    if [[ "$ipv6" =~ ^fe80.* ]]
    then
        continue
    else
        echo select IP: $ipv6 >&1
        break
    fi
done

if [ "$ipv6" == "" ] || [[ "$ipv6" =~ ^fe80.* ]]
then
    die
fi

dns_server_info=`nslookup -query=AAAA $dnspod_ddnsipv6_name 2>&1`

dns_server_ipv6=`echo "$dns_server_info" | grep 'address ' | awk '{print $NF}'`
if [ "$dns_server_ipv6" = "" ]
then
    dns_server_ipv6=`echo "$dns_server_info" | grep 'Address: ' | awk '{print $NF}'`
fi
    
if [ "$?" -eq "0" ]
then
    echo "DNS server IP: $dns_server_ipv6" >&1

    if [ "$ipv6" = "$dns_server_ipv6" ]
    then
        echo "The address is the same as the DNS server." >&1
    fi
    unset dnspod_ddnsipv6_record_id
else
    dnspod_ddnsipv6_record_id="1"   
fi

send_request() {
    local type="$1"
    local data="login_token=$dnspod_ddnsipv6_id,$dnspod_ddnsipv6_token&domain=$dnspod_ddnsipv6_domain&sub_domain=$dnspod_ddnsipv6_subdomain$2"
    return_info=`curl -X POST "https://dnsapi.cn/$type" -d "$data" 2> /dev/null`
}

query_recordid() {
    send_request "Record.List" ""
}

update_record() {
    send_request "Record.Modify" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6&record_id=$dnspod_ddnsipv6_record_id"
}

add_record() {
    send_request "Record.Create" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6"
}

if [ "$dnspod_ddnsipv6_record_id" = "" ]
then
    echo "seem exists, try update." >&1
    query_recordid
    code=`echo $return_info  | awk -F \"code\":\" '{print $2}' | awk -F \",\"message\" '{print $1}'`
    echo "return code $code" >&1
    if [ "$code" = "1" ]
    then
        dnspod_ddnsipv6_record_id=`echo $return_info | awk -F \"records\":.{\"id\":\" '{print $2}' | awk -F \",\"ttl\" '{print $1}'`
        update_record
        echo "update sucessful" >&1
    else
        echo "error code return, domain not exists, try add." >&1
        add_record
        echo "add sucessful." >&1
    fi
else
    echo "domain not exists, try add."
    add_record
    echo "add sucessful" >&1

fi

Shell方案2

来自:https://github.com/rehiy/dnspod-shell 非单文件,但是也可以稍加修改后单文件运行,并且支持识别长效地址。

Scrcpy是一款开源投屏工具软件,Anlink基于此开发,做了更简单易用的UI。
Scrcpy Github开源仓库AnLink官方网站

本文着重介绍后者,前者很多人应该听过了。
Scrcpy的实现利用了ADB,支持所有Android设备,所以也适用于还未与Android解耦的手机HarmoneyOS,而Anlink简化了整个连接流程。
Anlink具有以下特性(以下功能实现无需在Android端安装其他第三方APP)

  • USB有线投屏
  • 无线投屏
  • 投屏并在PC操控安卓设备
  • 在PC端播放安卓设备音频
  • 在PC端直接对安卓设备输入文字(包括中文!)
  • 互相传输文件
  • 通过PC端的按钮对设备进行模拟按下电源键,调整音量,旋转屏幕,截屏并复制到剪切板等快捷操作。
  • 开机自动运行,可调透明度的快捷悬浮框。

看完以上几点,是不是有华为多屏协同那味道了?实测软件投屏延迟不高,而且在Windows应用商店上架啦!不过,很遗憾Anlink目前不支持Linux,但是从实现原理来看,基于Scrcpy构建Gun/Linux发行版可用的版本是完全可行的。

感谢开源,拥抱(づ ●─● )づ开源,自由软件加油(ง •̀_•́)ง!

‍HarmonyOS的应用开发体验让我感觉非常糟糕,因为仅仅是为了你能够调试你的应用,你得去做一大堆事,甚至现在除了受邀请的开发者,其他个人开发者都无法进行任何发布应用的相关操作。你可能要和我一样面临写了个Hell world却卡死在生成有效的应用上。
我不明白为什么我私下调试鸿蒙应用还要向华为申请一大堆东西。[无语]

详情参考:
手动方式调试HarmonyOS应用
我现在对鸿蒙的态度发生了巨大转变,如果你想和和美美的开发一个鸿蒙应用,那对不起建议你早日打消这个想法。恐怕写一个Android应用去调试比这个简单多了。

说明:这个视频是我发现bug后第一时间尝试对bug进行复现,但是只成功复现第一部分。
下面是我第一次碰到这个bug情形的文字描述。
  1. 插入otg转接头,再插上64G U盘选择USB连接方式为“传输文件时”会自动退回。
  2. 在经过和视频中相同的打开ES文件管理器加载片刻后直接拔下U盘,otg转接头指示灯灭了,然后我放下手机随后发现手机屏幕已经亮了华为logo开始自动重启。
    重启后系统恢复正常,随后的第一次bug复现仅成功复现第一条。

    U盘和转接头信息说明:

    U盘USB3.0 64G,主控应该是慧荣的具体型号不明。转接头也支持USB3.0
    U盘内几乎存满数据,格式:exFAT
    (两个设备usb口9触点)
    两个USB设备图片

    系统版本

    系统版本截图

准备好我家云/玩客云/其他可以刷armbian的设备

我认为安装宝塔面板会让你省点事,这样新建文件夹、上传、修改文件都可以直接在宝塔面版上操作,减少新手对SSH连接GNU/LINUX发行版执行shell命令的严重陌生感。(不会用Linux命令宝塔的可视化界面进行操作总会用吧)

参考[[超简单!]给我家云刷Armbian并安装宝塔5.9完美实现宝塔可控LNMP](https://xfox.fun/archives/476/)

挂载存储甜糖缓存的硬盘

甜糖不怎么吃存储设备,即使用USB2.0的U盘或者外置硬盘盒加机械硬盘也能跑,但是为了提高存储性能以便获取更高收益,更好的存储设备当然是很有必要的。
参考:在我家云上格式化并挂载60G固态硬盘

锁定网卡MAC地址

这一步对于某些用户似乎不是必须的,但是如果你从来没做过类似的工作完全可以照做。

- 阅读剩余部分 -

由于长时间跑甜糖,我的垃圾U盘已经占用了40多G,系统也崩溃了。ssh也连不上,存储满了我拔下来U盘,但是仍然无法开机,U盘插在电脑上都无法正常读取里面的内容,Windows10资源管理器开始卡死,最终放弃了读取盘内数据。

2021年8月31日补充:我确定搞崩系统的原因主要是我之前乱改太多系统文件了,另外但是配置甜糖是参照恩山的官方教程,但是也用了很多自动部署工具,把整个系统搞得乌七八糟。手动刷机部署甜糖后到现在我家云都很稳定,证明自动脚本还是没自己手动配置契合设备环境。

- 阅读剩余部分 -