docker compose 模式部署的 gitea 在某次更新之后开始大量出现如下报错:

1
2
Feb 12 17:23:37 VM-0-16-ubuntu gitea_compose_giteadb_1[3927]: 2024-02-12  9:23:37 3103704 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).
Feb 12 17:23:37 VM-0-16-ubuntu gitea_compose_giteadb_1[3927]: 2024-02-12 9:23:37 3103704 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB')

错误量非常巨大给syslog打崩了, 日志滚动的时候负载特别高会出现无法连接的问题. 经排查发现是mariadb升级的时候没有自动升级库表结构引起. 在 docker-compose.yml mariadb 中添加 MARIADB_AUTO_UPGRADE=1 环境变量再 docker-compose up -d 即可修复.

参考

Incorrect definition of table mysql.column_stats: expected column ‘hist_type’ … #25970

mariadb docker README

【大型催泪鬼畜】赵本山宋丹丹《白云黑土爱情故事》完整版MV首发!笑着笑着就哭了

Hoàng Read - The Magic Bomb (Questions I get asked) [Official Audio] 抽象手舞蹈BGM

ปูหนีบอีปิ (Poo Neep E-Pi) - พร จันทพร พอดีม่วน [OFFICIAL VIDEO] Lisa螃蟹舞BGM

Nee Jathaga Full Video Song - Yevadu Video Songs - Ram Charan, Allu Arjun, Shruti Hassan, Kajal Nee…

2NE1 - “I’m Busy (난 바빠) (Color Coded Lyrics Eng/Rom/Han/가사) bang bang bang bey bey bey

[MV] Lee Hyori(이효리) _ 10 Minutes

王不醒 - 佛说不配 (抖音热播DJ版) Phật Nói Không Xứng Đáng (Remix)『佛说不配,酒又下肚两杯,你有别人陪你不醉不归』【2k22抖音火流行歌曲推荐TikTok】

黄文文 - 财神殿里的上上签

Computer Chip Walking To Stayin’ Alive Synced to Music 原曲: Bee Gees - Stayin’ Alive (Official Music Video)

ERUPTION - ONE WAY TICKET / BONEY M - RASPUTIN / DJ DALI MIX / HQ HD

认清现实の小曲.mp3完整版素材 | The Amazing Digital Circus [End Orchestral Theme] | EPIC VERSION (Your New Home)

German Soldier’s Song - “Erika” (with English Subtitles) 希希哈哈的小曲

The Perfect Girl 绝命毒师meme曲

Project Zomboid Remastered OST - Main Theme PZ主题曲

我知道你对我最好 | 《小丑の小曲》1.3x蚊子版 | 勵陽 - 我知道你『我知道你 在我世界最重要』【動態歌詞Lyrics】

往期优秀作品推荐

2023年9-10月

问题现象

1
2
sudo podman create network test
sudo podman network ls

报错提示

1
WARN[0000] Error validating CNI config file /etc/cni/net.d/test.conflist: [plugin bridge does not support config version "1.0.0" plugin portmap does not support config version "1.0.0" plugin firewall does not support config version "1.0.0" plugin tuning does not support config version "1.0.0"]

解决方案

看起来是Ubuntu2204的已知问题, 需要手动安装最新版本的containernetworking-plugins

  1. 打开下载页面, 下载最新的deb包

  2. sudo dpkg -i containernetworking-plugins_1.1.1+ds1-3build1_amd64.deb

参考

Ubuntu 22.04.1 LTS libpod (package podman 3.4.4+ds1-1ubuntu1.22.04.1): broken network functionality for CNI plugins

Podman automatically sets cniVersion 1.0.0 instead of 0.4.0

Error validating CNI config file and network errors in rootful podman #14189

需要两个配置文件

消费远端消息 mirrormaker-consumer.config (注: remote-kafka 需要在 /etc/hosts 里添加配置, 下同)

1
2
bootstrap.servers=remote-kafka:9092
group.id=mirrormaker-mirror-1

投递到本地的Kafka集群 mirrormaker-producer.config

1
2
bootstrap.servers=local-kafka:9092
acks=1

启动 Kafka Mirror Maker

1
2
#!/bin/bash
kafka-mirror-maker --consumer.config mirrormaker-consumer.config --producer.config mirrormaker-producer.config --include 'topic1|topic2'

mirror-maker虽然不被confluent看重(可能是因为他们有专门的同步工具), 不过还是非常好用的. 在线上实际跑了将近三个月的时间, 其自带的重试功能可以保证同步意外断开之后无人值守地自动恢复.

参考

retention.ms - Kafka topic configuration reference | Confluent Documentation 配置消息过期时间

Docker Configuration Parameters for Confluent Platform

Migrating clusters using Apache Kafka’s MirrorMaker

Kafka MirrorMaker

Kafka mirroring (MirrorMaker)

然后把脚本放到Stream Deck上配置个按键, 就可以实现一键调整Chrome的音量大小了. 这样打游戏的时候可以很方便的调整Youtube的音量.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import time
from pycaw.pycaw import AudioUtilities, ISimpleAudioVolume


def get_audio_volume(process_name):
sessions = AudioUtilities.GetAllSessions()
for session in sessions:
volume = session._ctl.QueryInterface(ISimpleAudioVolume)
print(session.Process)
if session.Process and session.Process.name().lower() == process_name:
print("{} current volume: {}".format(session.Process.name(), volume.GetMasterVolume()))
return volume.GetMasterVolume()

return None


def set_audio_volume(process_name, target_volume):
sessions = AudioUtilities.GetAllSessions()
for session in sessions:
volume = session._ctl.QueryInterface(ISimpleAudioVolume)
print(session.Process)
if session.Process and session.Process.name().lower() == process_name:
print("{} current volume: {}".format(session.Process.name(), volume.GetMasterVolume()))
volume.SetMasterVolume(target_volume, None)
return

参考

python能否调用windows系统的音量合成器?

Trouble accessing an my DefaultAudioEndpoint.

Volume Controls - Win32 apps | Microsoft Learn

Bật Tình Yêu Lên (H2O Remix) - Hoà Minzy x Tăng Duy Tân | Rót Mật Ngọt Vào Tai Em Remix Hot TikTok

EM LÀ NHẤT MIỀN TÂY - VÕ LÊ MI x JIN TUẤN NAM (YANG REMIX) Hỡi Em Má Đỏ Môi Hồng Remix Hot Tik Tok

Omoi feat. Hatsune Miku - Teo

晚安,用过就扔的玩具。 たかやん

DIOR - Положение / Polozhenie (T3NZU Remix) || PEAKY BLINDERS

【4K修复】萨卡班甲鱼サカサカバンバンバスピスピス (neutrino _ AI_VOICE)(AI超分) 萨卡班甲鱼 比划比划黑手比划比划黑手黑手… 还是这个带劲

往期优秀作品推荐

2023年7-8月

怀念老歌专场了属于是

罗百吉 - I Miss You

据说这首歌能勾起很多人回忆?-《哎呀》

这才是《不是因为寂寞才想你》的原唱,很多80、90后的青春回忆!

汤潮 - 狼爱上羊

【怀旧经典】庞龙《两只蝴蝶》超级王炸神曲!火遍大江南北的神曲!

【4K 无损+伴奏】马天宇 - 《该死的温柔》

【怀旧经典】王强《秋天不回来》超级王炸神曲!火遍大江南北的神曲!

【怀旧经典】誓言《求佛》超级王炸神曲!火遍大江南北的神曲!

【怀旧经典】徐誉滕《等一分钟》王炸神曲!铃声真的动了!

这才是《老鼠爱大米》的原版,听了好像回到童年。

【4K 童年神曲】郭美美 - 不怕不怕 MV 修复版

【回忆杀】-胡杨林《香水有毒》,经典永流传!

【怀旧经典】刀郎《2002年的第一场雪》王炸神曲!2004年华语乐坛系列!

Imagine Dragons - Bones (Official Lyric Video) 阿姨压一压

崔子格 - 卜卦「 祈求別再變卦 」♪Karendaidai♪

Neil Cicierega - Daft Mouth

Bật Tình Yêu Lên Remix (Deep House)

#古風 殘雪、林玉涵-苦海邊◖夢回千年,最後你成了我一生心魔◗ [Official Lyric Video] 官方動態歌詞版

Tiësto vs Diplo - C’Mon

[for Orzmic] MYUKKE. - BiBiC HEART

FlyBoy & The Onyx Twins - I Will Be Ok (ft. Coby Grant)

Mae Stephens - If We Ever Broke Up (Official Video)

「Cyberangel」——《崩坏3》印象曲(演唱者:Hanser)

往期优秀作品推荐

2023年5-6月

经过接近7个月的测试, 目前两级存储中共有5.1亿条数据, 总数据量约230GB. SSD中热数据量约为10%

背景: 因为SSD存储太贵, 而且一般只有最近14天的数据需要经常查询, 因此把14天外的数据送到HDD里保存节约成本.

  1. 需要新增存储配置文件 storage.xml 其中 cold_disk 为HDD存储配置, cold_volume为HDD存储策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<clickhouse>
<storage_configuration>
<disks>
<default>
</default>
<cold_disk>
<path>/var/lib/clickhouse-hdd/</path>
</cold_disk>
</disks>
<policies>
<default>
<volumes>
<default>
<disk>default</disk>
</default>
<cold_volume>
<disk>cold_disk</disk>
</cold_volume>
</volumes>
</default>
</policies>
</storage_configuration>
</clickhouse>
  1. 给数据表添加TTL策略, 默认去default, 15天以上的去cold_volume
1
alter table database_name.table_name modify TTL create_time TO VOLUME 'default', create_time + INTERVAL 15 DAY TO VOLUME 'cold_volume'
  1. 刷新TTL策略, 强制冷数据移动
1
alter table database_name.table_name materialize ttl

参考资料

ClickHouse 单机docker多盘搭建教程

Amplifying ClickHouse Capacity with Multi-Volume Storage (Part 1)

Amplifying ClickHouse Capacity with Multi-Volume Storage (Part 2)

Putting Things Where They Belong Using New TTL Moves 中文翻译,但是水平一般: 【ClickHouse 技术系列】- 使用新的 TTL move,将数据存储在合适的地方

Manage Data with TTL (Time-to-live)

TrueNAS SCALE 22.04.3 运行一直很稳定, 有一天开始突然报错CRITIAL:

1
Error: (401) Reason: Unauthorized HTTP response headers: < CIMultiDictProxy('Audit-Id': '7b4e8f99-ae3e-415e-b80b-d5ab72dadd85', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Date': 'Sun, 28 May 2023 07:27:45 GMT', 'Content-Length': '129') > HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}

当时没太当回事, 以为是官方仓库挂了. 一个多月后再检查还是这样, 进shell看了一下journal发现是x509证书过期了:

1
May 29 03:23:29 truenas k3s[11305]: E0529 03:23:29.178174   11305 authentication.go:63] "Unable to authenticate the request" err="[x509: certificate has expired or is not yet valid: current time 2023-05-29T03:23:29+08:00 is after 2023-04-16T16:35:58Z, verifying certificate SN=..., SKID=, AKID=... failed: x509: certificate has expired or is not yet valid: current time 2023-05-29T03:23:29+08:00 is after 2023-04-16T16:35:58Z]"

shell直接运行k3s kubectl get node也会报错提示 Unauthorized.

解决方法很简单, 重启k3s和docker服务就行 (当然重启主机也可以, 只是会中断当前的读写):

1
2
systemctl stop k3s docker
systemctl start docker k3s

参考

Truecharts: Docker pull error x509: certificate valid for…