分类 Linux 下的文章

为什么我无法使用podman update container_id --restart=always ?

我猜你在阅读本文之前已经尝试过docker(podman) update了,但是很遗憾Podman update命令主要用于配置容器可用资源和,比如限制容器使用的内存数量。
以下为podman update的可用子命令: 随着podman更新,他们可能会被更改,请参考官方文档podman-update - Update the configuration of a given container

选项描述
--blkio-weight设置块设备 I/O 的权重。权重决定了在多个容器之间进行块 I/O 带宽分配时的优先级。
--blkio-weight-device为特定的块设备设置 I/O 权重。格式为“设备路径:权重”。
--cpu-period设置 CPU 周期的时间长度,单位为微秒。用于与 --cpu-quota 一起限制 CPU 的使用。
--cpu-quota设置 CPU 配额,即容器在一个 CPU 周期内可以使用的微秒数。
--cpu-rt-period设置实时 CPU 调度的周期长度,单位为微秒。用于限制实时任务的 CPU 使用时间。
--cpu-rt-runtime设置实时 CPU 调度的运行时间长度,单位为微秒。
--cpu-shares设置 CPU 权重,用于在多个容器之间分配 CPU 时间。
--cpus.container设置容器可以使用的 CPU 核心数。
--cpuset-cpus设置容器可以使用的 CPU 集合。
--cpuset-mems设置容器可以使用的内存节点集合。
--device-read-bps为特定的设备设置读取带宽限制,单位为字节/秒。格式为“设备路径:带宽”。
--device-read-iops为特定的设备设置读取 I/O 操作限制,单位为操作/秒。格式为“设备路径:I/O 操作数”。
--device-write-bps为特定的设备设置写入带宽限制,单位为字节/秒。格式为“设备路径:带宽”。
--device-write-iops为特定的设备设置写入 I/O 操作限制,单位为操作/秒。格式为“设备路径:I/O 操作数”。
--memory设置容器可以使用的内存大小。
--memory-reservation设置容器内存预留大小,确保容器启动时获得的最小内存量。
--memory-swap设置容器可以使用的总内存(包括内存和交换分区)大小。
--memory-swappiness设置容器的交换倾向性,取值范围为 0 到 100。较高的值意味着容器更倾向于使用交换分区。
--pids-limit设置容器可以创建的进程数限制。

使用Podman更新容器参数的正确做法

假设你不想删除并在重新创建该容器时丢失之前使用的参数
以正在运行的容器natfrp-service为例:

查看容器启动参数

(我使用SakuraFrp官方的脚本部署,但是我现在需要更改--restart=on-failure:5 为:--restart=always 并且我不想重新修改一些其他固定好的参数)
podman inspect natfrp-service | grep -A 15 "CreateCommand"
这里的15取决于你的容器启动参数有多少项,一般来说一项为一行,15即获取字符串“CreateCommand”后的15行。如果你发现过多导致没有完全输出,可以适当增加该值。

停止容器

sudo podman stop natfrp-service

删除容器

sudo podman rm natfrp-service

重新运行容器并添加参数

podman run --name=natfrp-service --restart=always other... natfrp.com/launcher:latest

xfox@orangepi3b:~$ journalctl -xeu cloudflared.service
部分输出如下:

lines 1-95/316 25%
Aug 05 22:50:15 orangepi3b systemd[1]: Starting cloudflared.service - cloudflared...
░░ Subject: A start job for unit cloudflared.service has begun execution
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ A start job for unit cloudflared.service has begun execution.
░░
░░ The job identifier is 142.
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF Starting tunnel tunnelID=740e1ff0-2276-4e32-9028-2a491dbd654a
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF Version 2024.6.1
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF GOOS: linux, GOVersion: go1.22.2, GoArch: arm64
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF Settings: map[no-autoupdate:true token:*****]
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF Generated Connector ID: f222f304-ee8e-4354-b409-212c19408f21
Aug 05 22:50:20 orangepi3b cloudflared[1116]: 2024-08-05T14:50:20Z INF cloudflared will not automatically update if installed by a package manager.
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR Failed to fetch features, default to disable error="lookup cfd-features.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable"
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR update check failed error="Get \"https://update.argotunnel.com?arch=arm64&clientVersion=2024.6.1&os=linux\": dial tcp: lookup update.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable"
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z WRN Unable to lookup protocol percentage.
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z INF Initial protocol quic
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z INF ICMP proxy will use 0.0.0.0 as source for IPv4
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z INF ICMP proxy will use ::1 in zone lo as source for IPv6
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z WRN The user running cloudflared process has a GID (group ID) that is not within ping_group_range. You might need to add that user to a group within that range, or instead update the range to encompass a group the user is already in by modifying /proc/sys/net/ipv4/ping_group_range. Otherwise cloudflared will not be able to ping this network error="Group ID 0 is not between ping group 1 to 0"
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z WRN ICMP proxy feature is disabled error="cannot create ICMPv4 proxy: Group ID 0 is not between ping group 1 to 0 nor ICMPv6 proxy: socket: permission denied"
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR edge discovery: error looking up Cloudflare edge IPs: the DNS query failed error="lookup _v2-origintunneld._tcp.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable" event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR Please try the following things to diagnose this issue: event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR   1. ensure that argotunnel.com is returning "origintunneld" service records. event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      Run your system's equivalent of: dig srv _origintunneld._tcp.argotunnel.com event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR   2. ensure that your DNS resolver is not returning compressed SRV records. event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      See GitHub issue https://github.com/golang/go/issues/27546 event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      For example, you could use Cloudflare's 1.1.1.1 as your resolver: event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      https://developers.cloudflare.com/1.1.1.1/setting-up-1.1.1.1/ event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z INF Starting metrics server on 127.0.0.1:37845/metrics
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR edge discovery: error looking up Cloudflare edge IPs: the DNS query failed error="lookup _v2-origintunneld._tcp.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable" event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR Please try the following things to diagnose this issue: event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR   1. ensure that argotunnel.com is returning "origintunneld" service records. event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      Run your system's equivalent of: dig srv _origintunneld._tcp.argotunnel.com event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR   2. ensure that your DNS resolver is not returning compressed SRV records. event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      See GitHub issue https://github.com/golang/go/issues/27546 event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      For example, you could use Cloudflare's 1.1.1.1 as your resolver: event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR      https://developers.cloudflare.com/1.1.1.1/setting-up-1.1.1.1/ event=0
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z INF Tunnel server stopped
Aug 05 22:50:21 orangepi3b cloudflared[1116]: 2024-08-05T14:50:21Z ERR Initiating shutdown error="Could not lookup srv records on _v2-origintunneld._tcp.argotunnel.com: lookup _v2-origintunneld._tcp.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable"
Aug 05 22:50:22 orangepi3b cloudflared[1116]: 2024-08-05T14:50:22Z INF Metrics server stopped
Aug 05 22:50:22 orangepi3b cloudflared[1116]: Could not lookup srv records on _v2-origintunneld._tcp.argotunnel.com: lookup _v2-origintunneld._tcp.argotunnel.com on [2001:4860:4860::8888]:53: dial udp [2001:4860:4860::8888]:53: connect: network is unreachable

除了刚执行服务部署的时候,其他时间大部分log只是在重复的报错各种连接失败和重试

在大量的日志中我发现参杂了这条:
2024-08-05T13:47:45Z ERR Failed to fetch features, default to disable error="lookup cfd-features.argotunnel.com on [fe80::1%end1]:53: dial udp [fe80::1%end1]:53: i/o timeout"

看上去是dns解析有问题,所以我去看了看/etc/resolv.conf
内容默认是H2-3V的ipv4地址和一个看上去不太对劲的ipv6内网地址,遂改为如下内容:
nameserver 8.8.8.8 # Google IPv4
nameserver 8.8.4.4 # Google IPv4
nameserver 2001:4860:4860::8888 # Google IPv6
nameserver 2001:4860:4860::8844 # Google IPv6
但是看注释这个文件内容貌似是由NetworkManager生成的,所以规范一点用nmcli解决问题。

xfox@orangepi3b:~$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Orange Pi ethernet  b76cc74f-5847-4558-8098-5709829e4eb2  ethernet  end1
lo                  572b3c59-1519-4e09-b290-a48063e98424  loopback  lo
sudo nmcli connection modify "Orange Pi ethernet" ipv4.dns "8.8.8.8,8.8.4.4"
sudo nmcli connection modify "Orange Pi ethernet" ipv6.dns "2001:4860:4860::8888,2001:4860:4860::8844"

启用自动获取dns服务器功能:

可选,特别是你的网络需要被劫持dns才能跳转认证页面完成认证的情况下。(某些大学) 但是对于我参数应为yes,因为我不想用路由器下发的的瘸腿DNS,特别是有这样一条提示:

# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
...
sudo nmcli connection modify "Orange Pi ethernet" ipv4.ignore-auto-dns no
sudo nmcli connection modify "Orange Pi ethernet" ipv6.ignore-auto-dns no

重启网络连接

我使用SSH连接,所以最好一次性执行完所有内容,以免需要重启设备。
sudo nmcli connection down "Orange Pi ethernet" && sudo nmcli connection up "Orange Pi ethernet"

查看当前DNS设置状态

cat /etc/resolv.conf

# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 2001:4860:4860::8844


重新安装cloudflared服务

sudo cloudflared service uninstall
#最好先在cloudfalre zero trust > Networks > Tunnels里刷新一下token
#接着按照面板提供的指令直接安装即可。
sudo cloudflared service install *******
2024-08-05T15:00:44Z INF Using Systemd
2024-08-05T15:00:48Z INF Linux service for cloudflared installed successfully

END

问题成功解决!!!

没错,我又买了一块开发板香橙派3B,第一块Zero2几年前已经送给秋秋了。这块OPI 3B的用途以后再公开。

参考了OrangePi5B修改默认的用户名 如果你去看C*D*的文章,最好记得回来看看怎么给新用户目录授权。

关闭自动登录

我使用的server img没有安装桌面环境,按照官方文档只需要执行如下指令:

sudo auto_login_cli.sh -d
sudo disable_desktop_autologin.sh #如果你安装了桌面环境

修改相关系统配置文件

sed -i "s/orangepi/xfox/g" /etc/passwd
sed -i "s/orangepi/xfox/g" /etc/shadow
sed -i "s/orangepi/xfox/g" /etc/group

修改用户目录名称

mv /home/orangepi /home/xfox

给变更后的新用户目录授权

chown -R xfox:xfox /home/xfox

接下来重启

reboot

END

为什么我必须要用AAC

因为我发现我新买的1MORE ComFoBuds Pro耳机最多支持AAC(手机AAC编码连接一切正常),而PC连接使用SBC×编码的时候要么音质不佳要么音质凑合了有卡顿中断问题。瞬间无比怀念我的KMOUK KM-HTW008 这玩意就没出过类似问题,而且降噪也很好,甚至感觉万魔的这个深度降噪不如他,也就风噪万魔强点。可惜,我买了俩,这俩KMOUK都丢了,一个丢在支教路上,第二个丢在家里。(初步怀疑第二个是放在桌子上的时候家里老爷子神智不清醒的时候当垃圾扔了,就剩下耳机充电仓😭,当时我这个难受啊...)
总之,我不得不使用AAC提高我的耳机使用体验。

参考文章:

高级音频分配配置文件(A2DP)AAC 在debian12上不可用 ——Debian Wiki

通过偷共享库的方式让 Debian 在使用 pipewire-pulse 连接蓝牙听歌时使用 AAC 编码传输音频流

为什么偷文件

AAC codec
The AAC codec is unavailable in Debian 12 bookworm.
In the case of PipeWire its support (see the 1021370 request) requires libfdk-aac2, however a decision has not made if this package may be moved from the non-free to the main section (see 981285). The only workaround is to build the AAC Bluetooth plugin from sources.

按照官方说明,唯一的解决办法是自己编译libfdk-aac2 。但是编译过程可能存在一些困难,而其他发行版大多已经内置了(就很难受,你Apt-X都支持了居然到现在还没折腾清楚AAC的许可问题。)在技术水准没那么高,明知道可以偷的情况下没必要自己编译。偷对版本就行,否则就和原帖博主挂出来憨皮一样把自己PC 搞炸。

Debian12 快速偷文件指南

如果你确定自己使用Debian12,
直接下载libspa-codec-bluez5-aac_0.3.65-4~glasgall1_amd64.tar.xz
解压得到libspa-codec-bluez5-aac.so,
sudo cp libspa-codec-bluez5-aac.so /usr/lib/x86_64-linux-gnu/spa-0.2/bluez5/
重启PC即可一步到位.

后记

AAC确实可以用了,但是卡顿问题有一定缓解,但是没有完全解决!这肯定就不只是编码的缘故了,百分之百是有干扰。
我的使用环境是:Thinkpad E14 Gen3 (AMD R5 5600U) WIFI和蓝牙使用RTL8852AE 驱动是rtw89 2024年1月18日的版本。 使用一块WIFI4 的4G WIFI棒子对PC和手机提供网络访问(插在1+ 100W A+C双口充电器上)。 这就极有可能构成一定干扰。
PC关了WIFI后本地音乐蓝牙播放就没干扰了,棒子直接插PC上走RDNIS给PC提供网络,手机WIFI连接棒子,问题暂时解决。

环境公示

宿主机J3160 上模拟堡垒机跑反代和虚拟机 网络桥接模式宽带联通IPv6公网
通过测试确定任何网络支持ipv6的用户可正常使用。

照本宣科

仓库有文档不需要我教
我高估了国内开发者的水平,实践证明90%的在职从业者水平解决问题的能力并不像他们的学历一样比我高。
如果你很有自信,有能力补全官方PPA安装后造成的一大堆依赖和配置文件缺失问题,你可以尝试不使用docker直接安装。
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
docker部署后注意写对PUBLIC_URL,端口无所谓,但要和后续反代对照。
NAT后部署的必须填写JVB_ADVERTISE_IPS
其他参数非必要即默认,不要看什么CSDN之类的烂文章乱改乱加。

- 阅读剩余部分 -

使用场景

现在我有了一部安卓设备,我需要使用它在任何时候登录我的服务器,而我的服务器仅支持使用公钥访问
目前我暂时不清楚有哪些应用支持使用GPG密钥替代密码认证登录SSH,所以直接使用Termux模拟的Linux Shell环境就了最佳选择。

安装依赖

pkg update && pkg upgrade
pkg install gnupg openssh util-linux

- 阅读剩余部分 -

上一篇文章记录了如何使用GnuPG生成SSH密钥对代替密码登录服务器,既然是为了安全和方便,是时候禁用密码登录让你的服务器彻底免遭各国脚本小子的攻击了!

禁用密码登录提高安全性

现在你已经可以使用安装了GPG私钥的PC无密码登录服务器了,先登录服务器
编辑 SSH 配置文件:
打开 SSH 配置文件以进行编辑。

sudo nano /etc/ssh/sshd_config

找到并修改配置项:

- 阅读剩余部分 -