拿着麻布口袋的皮皮虾
皮皮虾

简单缩小数据库

sqlite3 sqlite.db "VACUUM;"

数据库被锁

cp sqlite.db sqlite.db.backup

sqlite3 sqlite.db .dump > backup.sql
sqlite3 new.db < backup.sql
sqlite3 new.db "PRAGMA integrity_check;" #检查数据库

如果标准的 .dump 命令无法成功导出数据,可以尝试使用 .recover 命令(适用于SQLite 3.33.0及更高版本):

sqlite3 corrupted.db ".recover" > backup.sql
sqlite3 new.db < backup.sql

简单缩小不咋管用的方法

首先导出数据

sqlite3 sqlite.db
sqlite>.output tmp.sql
sqlite>.dump
sqlite>.quit

再导入到一个新库中

sqlite3 new.sqlite.db
sqlite>.read tmp.sql
sqlite>.quit

覆盖原库并优化

cp -f new.sqlite.db sqlite.db
sqlite3 sqlite.db 'VACUUM;'

删除一些日志

cd /opt/nezha/dashboard/data && cp sqlite.db sqlite.db.bak && sqlite3 ./sqlite.db
.tables
.schema monitor_histories

begin transaction;
delete from monitor_histories
where id < (
select min(id)
from (

select id 
from monitor_histories 
order by id desc 
limit 10000

)
);
commit;

.exit

2024年11月20日
皮皮虾

Debian系列
cp your_certificate.crt /usr/local/share/ca-certificates/
update-ca-certificates

Centos系列
cp your_certificate.crt /etc/pki/ca-trust/source/anchors/update-ca-trust
update-ca-trust

对于其他 Linux 发行版
大多数 Linux 发行版都有类似的步骤,但具体路径和命令可能会有所不同。以下是一个通用的步骤:

找到系统的受信任证书存储区。常见的路径包括:

/etc/ssl/certs/
/usr/local/share/ca-certificates/
/etc/pki/tls/certs/
/etc/pki/ca-trust/source/anchors/
将证书复制到适当的目录。

更新证书存储区。常见的命令包括:

update-ca-certificates
update-ca-trust
验证证书是否已添加成功
你可以使用以下命令来验证证书是否已成功添加到系统的受信任证书存储区:

openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt your_certificate.crt

2024年08月20日
皮皮虾

双栈小鸡出口优先级修改

IPV4优先

sed -i '/^#precedence ::ffff:0:0\/96  100/s/^#//' /etc/gai.conf

IPV6优先

sed -i '/^precedence ::ffff:0:0\/96  100/s/^/#/' /etc/gai.conf

禁用IPV6
echo "1" > /proc/sys/net/ipv6/conf/all/disable_ipv6

IPV6DNS
echo '
nameserver 2400:3200::1
nameserver 2402:4e00::
' > /etc/resolv.conf

2024年08月20日
皮皮虾

nodehatch如何给小鸡分配nat IPV6

# 清除现有规则

sudo ip6tables -F
sudo ip6tables -t nat -F
sudo ip6tables -t mangle -F
sudo ip6tables -X

# 设置默认策略为接受
sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT

# 启用IPv6转发
sudo sysctl -w net.ipv6.conf.all.forwarding=1


#!/bin/bash
# 定义内部IPv6地址
INNER_IPV6="2001:db8::1"

# 配置 series_inner_id 为 11 的转发规则
series_inner_id=11
ssh_port=$((10000 + 100 * series_inner_id + 22))
direct_port_start=$((10000 + 100 * series_inner_id + 1))
direct_port_stop=$((10000 + 100 * series_inner_id + 20))

# 转发SSH端口
sudo ip6tables -t nat -A PREROUTING -p tcp --dport $ssh_port -j DNAT --to-destination [$INNER_IPV6]:22

# 转发其他端口
for port in $(seq $direct_port_start $direct_port_stop)
do
    sudo ip6tables -t nat -A PREROUTING -p tcp --dport $port -j DNAT --to-destination [$INNER_IPV6]:$port
    sudo ip6tables -t nat -A PREROUTING -p udp --dport $port -j DNAT --to-destination [$INNER_IPV6]:$port
done

# 允许转发流量
sudo ip6tables -A FORWARD -d $INNER_IPV6 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo ip6tables -A FORWARD -s $INNER_IPV6 -m state --state ESTABLISHED,RELATED -j ACCEPT

2024年08月20日
皮皮虾

Cloudflare API 更新动态 DNS

首先,你需要准备以下信息:

Cloudflare API Token:你可以在 Cloudflare 的 Dashboard 中生成。
Zone ID:你可以在 Cloudflare 的 Dashboard 中找到。
Record ID:你需要更新的 DNS 记录的 ID。
Domain Name:你需要更新的域名。
以下是脚本的示例:

#!/bin/bash

# 配置部分
API_TOKEN="你的Cloudflare API Token"
ZONE_ID="你的Zone ID"
RECORD_ID="你的Record ID"
DOMAIN="你的域名"
IPV6_REGEX='([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}'

# 获取当前的IPv6地址
CURRENT_IPV6=$(ip -6 addr show scope global | grep -oP "$IPV6_REGEX")

# 获取Cloudflare中的现有记录
RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
     -H "Authorization: Bearer $API_TOKEN" \
     -H "Content-Type: application/json")

# 从现有记录中提取IPv6地址
OLD_IPV6=$(echo $RECORD | jq -r '.result.content')

# 检查IPv6地址是否需要更新
if [ "$CURRENT_IPV6" != "$OLD_IPV6" ]; then
    echo "IPv6地址已更改,正在更新Cloudflare记录..."
    
    # 更新Cloudflare中的DNS记录
    UPDATE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
         -H "Authorization: Bearer $API_TOKEN" \
         -H "Content-Type: application/json" \
         --data '{"type":"AAAA","name":"'"$DOMAIN"'","content":"'"$CURRENT_IPV6"'","ttl":120,"proxied":false}')
    
    if echo "$UPDATE" | grep -q '"success":true'; then
        echo "Cloudflare DNS记录更新成功:$CURRENT_IPV6"
    else
        echo "Cloudflare DNS记录更新失败:$UPDATE"
    fi
else
    echo "IPv6地址未更改,无需更新。"
fi

2024年08月20日