JueLuo's Blog


  • Home

  • Categories

  • Archives

  • Tags

  • Search

快速解决 Docker Compose 部署的 Jellyfin 更新后文本变成方框

Posted on 2024-08-22 | In Docker

我使用 Docker Compose 部署的 Jellyfin,每次执行 docker-compose pull 更新后,就会因为缺失汉字字体而导致部分中文变为方框

解决方法很简单,只需要安装 fonts-noto-cjk-extra 这个包即可

但受限于国内网络状况,想要更高效地完成这项工作,还需要替换下载源

进入容器后,执行以下命令(使用上海交通大学的镜像源):

1
sed -i "s|http://deb.debian.org/debian|http://mirror.sjtu.edu.cn/debian|g" /etc/apt/sources.list.d/debian.sources && apt update && apt install -y fonts-noto-cjk-extra

安装完毕后,重启该容器即可

参考

  1. Integrate CJK fonts · Issue #161 · linuxserver/docker-jellyfin
  2. 上海交通大学 Linux 用户组 软件源镜像服务
Read more »

JavaScript setTimeout 不工作

Posted on 2024-08-18 | In JavaScript

帮朋友写了一个 Tampermonkey 脚本,用于爬取一个多页的表格,其中有一个小功能需要翻页后等待几秒以确保数据加载完成。

但是发现这玩意儿中的 setTimeout() 函数并没有按照我想象中的等待一定时间后再执行下一行代码。

原因分析

原因是 setTimeout() 作为同步代码执行,并且对 setTimeout() 的多次调用均同时运行。每次调用 setTimeout() 都会创建异步代码,该代码将在给定延迟后稍后执行。 就其本身而言,setTimeout() 不能用作 sleep() 函数,但是你可以使用 async 和 await 创建自定义JavaScript sleep() 函数。

解决方案

结合 Promises 、 async 和 await 编写一个 sleep() 函数,然后从 async 函数中调用它,并且需要与 await 关键字一起使用。

1
2
3
4
5
6
7
8
9
10
11
12
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))

const repeatedGreetings = async () => {
  await sleep(1000)
  console.log(1)
  await sleep(1000)
  console.log(2)
  await sleep(1000)
  console.log(3)
}

repeatedGreetings()

参考资料

  1. 如何使JavaScript休眠或等待 - 程序员张张 - SegmentFault 思否
Read more »

在 Nextcloud 28 上无法调整用户配额为“无限”的临时解决办法

Posted on 2023-12-28 | In Nextcloud

疑似为 Nextcloud 28.0.1 的 bug,等待官方修复或使用下面的解决方案

解决方案

  1. 直接链接数据库,找到 Nextcloud 使用的数据库
  2. 找到 oc_preferences 表
  3. 根据 userid 字段,找到对应用户的记录
  4. 将 configkey 字段为 quota 的记录的 configvalue 值改为 none

或者直接使用如下命令,记得修改命令中的 username

1
2
3
UPDATE nextcloud.oc_preferences
	SET configvalue='none'
	WHERE userid='username' AND appid='files' AND configkey='quota';

参考链接

  1. https://github.com/nextcloud/server/issues/34961#issuecomment-1307234975
Read more »

在 Linux 上使用 caddy 和 S302 来访问 Steam 社区

Posted on 2023-01-18 | In Linux

由于一些众所周知原因,Steam 社区页面无法在我所处的地区直接访问了,而我部署于 Linux 设备上的 ArchiSteamFarm 也因此无法正常工作。早些时候是通过使用网络代理的方式来使其正常工作的,但该方法稳定性不够理想,故试图使用 caddy 进行本地反代的方式来解决问题。

准备工作

  • 一台 Debian 系的设备(Ubuntu 和 Raspbian 测试通过)
    • 需要 root 权限
    • 需要占用 443 端口
  • Steamcommunity 302(官方下载地址,本文使用 V12.1.4 版本)
  • caddy(caddy 的 Releases 页,本文使用 v2.6.2 版本)
    • 如使用树莓派,请下载 armv5 版本

1 在 Windows 上生成证书

在 Windows 设备上正常下载并使用 Steamcommunity 302 软件,在其设置内勾选自己所需反代的服务。

在本例中,勾选了 Steam 社区和商店。

运行一次并确认工作正常后,应当会在 Steamcommunity 302 目录下,生成自签证书等多个文件。

2 修改文件并发送至 Linux 设备

本步骤共需要 6 个文件,建议先将下列文件复制一份以供后续编辑操作。

1
2
3
4
5
6
steamcommunityCA.pem
steamcommunityCA.key
steamcommunity.key
steamcommunity.crt
steamcommunity_302.caddy.json
caddy

编辑 steamcommunity_302.caddy.json 文件,将红圈处原先随机生成的端口修改为 443 端口。

如果在 Steamcommunity 302 中选择反代了多个服务,并且希望在 Linux 设备上使用,那么需要修改的数量会多于图中的红圈,请仔细检查并修改该文件。

3 导入证书

将上一步骤中的 6 个文件传递到 Linux 服务器上。

注意,在 Debian/Ubuntu 系的服务器上,需要将 steamcommunityCA.pem 修改为 .crt 扩展名,才可在后续步骤中正常导入。

故运行如下命令:

1
sudo cp steamcommunityCA.pem /usr/local/share/ca-certificates/steamcommunityCA.crt

并使用如下命令更新根证书:

1
sudo update-ca-certificates

若一切正常,将会看到提示添加了 1 张新证书。

4 修改 hosts

在 Windows 上,打开 C:\Windows\System32\drivers\etc 并打开 hosts 文件。

复制 hosts 文件中,以 #S302 结尾的条目。

将上述复制的内容写入到 Linux 设备上的 /etc/hosts 文件中。

在本例中,写入了如下内容:

1
2
3
4
5
6
127.0.0.1 steamcommunity.com #S302
127.0.0.1 www.steamcommunity.com #S302
127.0.0.1 store.steampowered.com #S302
127.0.0.1 api.steampowered.com #S302
127.0.0.1 help.steampowered.com #S302
127.0.0.1 store.akamai.steamstatic.com #S302

请根据实际情况调整。

5 运行 caddy 并测试

进入 caddy 目录,赋予 caddy 执行权限,然后启动:

1
2
chmod +x caddy
sudo ./caddy run --config steamcommunity_302.caddy.json --adapter caddyfile

因为使用了 443 端口,故需要 root 权限以运行。

如若运行正常,可进行测试,例如使用 curl https://steamcommunity.com/ 或直接启动 ASF 等程序进行测试。

6 配置开机自启动

本例供树莓派官方系统配置开机自启动参考,编辑 /etc/rc.local 文件,加入如下内容:

1
2
su pi -c 'screen -dmS caddy'
su pi -c 'screen -S caddy -X stuff "cd /home/pi/caddy && sudo ./caddy run --config steamcommunity_302.caddy.json --adapter caddyfile\n"'

注意:

  1. 请根据实际,更改命令中自己所使用的用户名以及第二行命令中 caddy 的路径。
  2. 添加上述两行的位置,亦请根据实际调整。
  3. 需要 screen 命令支持

参考资料

  1. Linux/Macos环境下使用 steamcommunity 302 教程 – Dogfight360
  2. How do you add a certificate authority (CA) to Ubuntu? - Super User
  3. 从Steam社区屏蔽分析绕过方法及ASF安全部署 - NiGhT_Ray - 博客园
Read more »

逆向练习题 01

Posted on 2022-09-23 | In Reverse

原始文件

【re1.exe】

MD5:46F8553C1FE1F88F927F4037C6FC7771

SHA-1:FAEA9FB20B436CEAE05E3A6C01FE7D21D5ECB7D4

Read more »

调整 Pyinstaller 的 spec 文件来控制打包哪些内容

Posted on 2022-07-08 | In Python

案例:需要打包一个 Python 项目为二进制文件,但该项目包含了一个 config.py 不应一起被打包

安装 Pyinstaller

1
pip install pyinstaller

创建 spec 文件

使用如下命令获得一个 .spec 文件:

1
pyinstaller monitor.py

调整 spec 文件

在本例中,需要调整如下两行:

告知 Pyinstaller 将 config.py 置于打包后的根目录中

datas=[('config.py', '.')],

告知 Pyinstaller 不将 import config 一起打包

excludes=['config'],

打包,创建可执行文件

修改 .spec 后再执行:

1
pyinstaller monitor.spec
Read more »

使用 Docker Compose 安装 Elastic Stack

Posted on 2022-07-06 | In ElasticStack

一、简介

本文将会使用官方提供的 Elastic Stack with Dockers Compose 的方式进行安装 安装内容包含了一个启用了身份验证和网络加密的、三节点的 Elasticsearch 服务器,和一个 Kibana 服务器

二、配置要求

  • 一个可以安装和运行 Docker 的操作系统(建议避免使用 ARM 架构)
  • 至少 4 GB 的内存

本文中采用的操作系统:Ubuntu Server 22.04 LTS

三、准备工作

安装 Docker 和 Docker Compose

在 Ubuntu 上,通常可使用如下命令直接安装

1
sudo apt install docker.io docker-compose

在其他平台上,可参考 Docker 的官方文档:

Get Docker - Docker Documentation

Install Docker Compose - Docker Documentation

四、配置并启动 Elastic Stack

准备 docker-compose 文件

创建一个新的空目录,并放置入.env 和 docker-compose.yml 这两个文件

方法一:从 GitHub 直接下载

1
2
wget https://raw.githubusercontent.com/elastic/elasticsearch/8.1/docs/reference/setup/install/docker/.env
wget https://raw.githubusercontent.com/elastic/elasticsearch/8.1/docs/reference/setup/install/docker/docker-compose.yml

方法二:从此处下载后导入

修改 .env 文件

在第 2 行填入欲使用的 elastic 用户的密码,稍后会在登录时使用 在第 5 行填入欲使用的 kibana_system用户的密码(这个值仅在内部配置 Kibana 时使用) 在第 8 行填入欲使用的版本号,在本例中,使用的版本号为 8.1.3 如若不希望将 Elasticsearch HTTP API 绑定到 0.0.0.0:9200,可将第 18 行的值修改为诸如 127.0.0.1:9200的值 同理,可在第 22 行处修改 Kibana 的相关配置

启动 Docker Compose

上述文件编辑完毕后,可以尝试启动这个实例

1
docker-compose up -d

停止并移除部署

如需停止上述配置的服务,可使用如下命令(会暂时卸载卷,故数据不会被直接删除,可于下次启动时继续使用)

1
docker-compose down

想要同时删除所有数据,可使用如下命令

1
docker-compose down -v

五、故障排除

若在尝试启动 Docker Compose 时,出现以下提示

1
2
ERROR: for kibana  Container "abcdef123456" is unhealthy.
ERROR: Encountered errors while bringing up the project.

可以尝试通过如下方式调整最大内存映射计数来解决

1
sudo sysctl -w vm.max_map_count=262144

六、总结

若通过上述步骤配置完毕,均成功启动且无异常,则已开放下述两个端口提供服务:

  • 通过 https://example.com:9200来访问 Elasticsearch API,该站点使用自签证书
  • 通过 http://example.com:5601访问 Kibana 界面

账号及密码:

  • 账号:elastic
  • 密码:在本文第四节中配置的密码

七、参考资料

  1. Running the Elastic Stack (“ELK”) on Docker - Getting Started [8.1] - Elastic
  2. elasticsearch/docs/reference/setup/install/docker at 8.1 · elastic/elasticsearch
  3. Docker - Kibana, APM, Elasticsearch issue - - Stack Overflow
  4. Maximum map count check - Elasticsearch Guide [8.1] - Elastic
Read more »

Docker-compose 下的 Kibana 匿名访问仪表盘

Posted on 2022-07-05 | In ElasticStack , Docker

创建 Space

前往 Stack Management -> Spaces 创建一个空间

本例中创建的样式如图所示

创建 Dashboard

切换至新建的 Space (方法如下图)并创建一个 Dashboard

创建好后,复制地址栏中形如 /app/dashboard#/view/xxxxx 的这段地址备用

本例中的复制的内容如下所示

/app/dashboards#/view/04d2e130-fc13-11ec-ae61-a383e01a8fec?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))

设置路由

前往 Stack Management -> Advanced Settings -> Default Route

将上一小节中复制的内容粘贴至此处以设定默认路由地址,填入内容后,记得保存页面设置

如果设置无误,每次打开该 Space 时,即会自动跳转至该 Dashboard

创建 Role

前往 Stack Management -> Role 创建一个角色

设定好 Role name 和 Index privileges(选择能够访问的索引并赋予 Read 权限)

赋予其 Kibana 权限,本例中的设置如下所示

创建用户

前往 Stack Management -> Users 创建一个用户

本例中设置的用户如图所示

修改配置文件

修改 docker-compose.yml 文件,在 Kibana 的 volumes 部分加入如下内容

1
- ./kibana.yml:/usr/share/kibana/config/kibana.yml

新建文件 kibana.yml,并在其中配置如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 以 Docker 方式配置的默认设置
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

# 修改显示语言为中文
i18n.locale: "zh-CN"

# 配置默认登录用户
xpack.security.authc.providers:
  anonymous.anonymous1:
    order: 1
    credentials:
      username: "kibana-dashboard-only-user"
      password: "password"
  basic.basic1:
    order: 2

修改完配置文件后,重启 Kibana,进入 Dashboard 页面,选择 Share 功能,即可复制 Public URL

该功能在 Chrome 上工作不正常,Firefox 没有问题

参考连接

  1. Authentication in Kibana - Kibana Guide [8.3] - Elastic
  2. Embed Kibana content in a web page - Kibana Guide [8.3] - Elastic
  3. Share Public URL Option Not Present - Elastic Stack / Kibana - Discuss the Elastic Stack
  4. Configure Kibana - Kibana Guide [8.3] - Elastic
  5. Install Kibana with Docker - Kibana Guide [8.3] - Elastic
  6. Kibana:如何让用户匿名访问 Kibana 中的 Dashboard_Elastic 中国社区官方博客的博客-CSDN博客_kibana 匿名登录
  7. Security settings in Kibana - Kibana Guide [8.3] - Elastic
Read more »

在 Win7 和 WinXP 上使用 PyQt5

Posted on 2022-06-08 | In Python

因特殊需求,需要在 Win7 和 WinXP 上使用一个由 PyQt5 构建的桌面应用程序。

但较新版本的 Python 早已放弃对 WinXP 以及 Win7 的支持。

在此整理了一套可在该平台上运行的方案。

由于在 pypi 上已经下载不到了,所以提供了各自官方的下载地址。


下载并安装 PyQt5

版本 5.5.1

PyQt - Browse /PyQt5/PyQt-5.5.1 at SourceForge.net

下载并安装 pywin32

不安装这个,不能正常使用 PyInstaller

版本 220

Download Python for Windows Extensions from SourceForge.net

下载并安装 PyInstaller

版本 3.2.1

Release v3.2.1 · pyinstaller/pyinstaller

选择 zip 包下载,下载后使用 pip install PyInstaller-3.2.1.zip 安装

Read more »

使用 Python 构造一个伪装来源的 UDP 攻击

Posted on 2022-05-01

获取方式

1
2
3
4
wget https://raw.githubusercontent.com/JueLuo99/network-tools/master/fake_udp_attack.py

# 或者使用下面这个地址
wget https://git.jueluo.tech/jueluo/network-tools/raw/branch/master/fake_udp_attack.py

环境需求

  • Linux 需要 root 权限(Windows未知)
  • Python 3.6+
  • 安装 scapy 库:sudo pip3 install scapy

使用方式

1
sudo python3 fake_udp_attack.py <source_ip> <source_port> <dest_ip> <dest_port> <payload>

举个例子

发送端:

1
2
3
$ sudo python3 fake_udp_attack.py 8.8.8.8 8888 192.168.2.15 4567 Hello
.
Sent 1 packets.

接收端:

1
2
3
4
$ sudo nc -luvvp 4567
Listening on [0.0.0.0] (family 2, port 4567)
Connection from dns.google 8888 received!
Hello

可见成功伪装成 Google DNS 的地址发送了一个 UDP 报文,并且接收端收到了这个报文。

注意事项

该功能可能会因 NAT 技术等原因在公网上工作不正确,亦可能直接被网关丢弃

Read more »
1 2 … 7
JueLuo

JueLuo

The better we get at getting better, the faster we will get better.

65 posts
21 categories
86 tags
GitHub Weibo Steam
© 2015 - 2024 JueLuo
Powered by Jekyll
Theme - NexT.Pisces