使用mmdetection mmcv报错:ImportError: libGL.so.1: cannot open shared object file: No such file or directory

OS: Rocky Linux 9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/mmdetection.py", line 7, in <module>
from mmdet.apis import init_detector, inference_detector
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/mmdet/__init__.py", line 2, in <m odule>
import mmcv
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/mmcv/__init__.py", line 4, in <mo dule>
from .image import *
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/mmcv/image/__init__.py", line 2, in <module>
from .colorspace import (bgr2gray, bgr2hls, bgr2hsv, bgr2rgb, bgr2ycbcr,
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/mmcv/image/colorspace.py", line 4 , in <module>
import cv2
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/cv2/__init__.py", line 181, in <m odule>
bootstrap()
File "/opt/label-studio-ml-backend/label_studio_ml/examples/mmdetection-3/ml-backend/lib64/python3.9/site-packages/cv2/__init__.py", line 153, in bo otstrap
native_module = importlib.import_module("cv2")
File "/usr/lib64/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
....
  • 解决方法
    1
    2
    3
    yum install -y mesa-libGL.x86_64
    # Ubuntu系 使用以下命令
    apt-get install libgl1-mesa-dev

安装label-studio-ml 1.0.9报错:Error: pg_config executable not found.

OS: Rocky Linux 9

1
2
3
4
5
6
7
8
9
pip install label-studio-ml==1.0.9
....
writing top-level names to psycopg2.egg-info/top_level.txt

Error: pg_config executable not found.

pg_config is required to build psycopg2 from source. Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
....
  • 解决方法
    1
    2
    3
    4
    dnf install libpq-devel
    pip install label-studio-ml==1.0.9
    # Ubuntu系 使用以下命令
    apt-get install libpq-dev

证明书常用操作命令合集 (持续更新中)

  • PEM 证书(base64编码格式)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 查看证书内容
    openssl x509 -text -noout -in cert.pem

    # 验证证书的有效性
    openssl verify -CAfile <(cat root-ca.pem internal-ca.pem ) server.pem
    # 正常时的返回
    server.pem: OK
    # 验证失败的返回例子
    openssl verify -CAfile <(cat root-ca.pem internal-ca.pem ) server.pem
    O = system, CN = xxxxxx
    error 18 at 0 depth lookup: self-signed certificate
    O = system, CN = xxxxxx
    error 10 at 0 depth lookup: certificate has expired
    error server.pem: verification failed
  • PKCS#12 【Public Key Cryptography Standards】证书
    常见扩展名:.p12/.pfx,包含证书和私钥的二进制文件,通常带有密码保护。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 从p12导出证书
    openssl pkcs12 -in cert.p12 -out output/cert.pem -nokeys
    Enter Import Password:
    MAC verified OK

    # 确认证书内容
    openssl x509 -text -noout -in output/cert.pem

    # 从p12导出秘钥
    openssl pkcs12 -in cert.p12 -out output/key.pem -nocerts -nodes
    Enter Import Password:
    MAC verified OK

    # 把证书和私钥合并成p12形式
    openssl pkcs12 -export -inkey output/key.pem -in output/cert.pem -out output/new-cert.p12
    Enter Export Password:
    Verifying - Enter Export Password:
  • PEM 转换成 DER证书(二进制的证书编码形式)
    openssl x509 -inform pem -outform der -in output/cert.pem -out output/cert.der

  • Java证明书keystore的一览导出

    1
    2
    keytool -list -v -storepass changeit -keystore /usr/local/jdk1.8.0_221/jre/lib/security/cacerts > keystore
    less keystore
  • 辅助命令

用openssl进行密码的base64变换

1
2
3
4
5
6
# 转换成base64 (-n:去掉输出中的换行)
echo -n password | openssl base64
cGFzc3dvcmQ=

# base64 逆转换
echo cGFzc3dvcmQ= | openssl base64 -d

运维人员小技巧 - 持续更新中

过滤Apache访问日志中,排名前20的IP

1
cat access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20

手动触发CPU使用率100%的命令

1
2
# Linux
yes > /dev/null &

解决umount target is busy

1
2
3
4
5
6
7
8
# 强制解除挂载
umount -f <path>
-f, --force Force an unmount.

# 指定-l lazy模式后,进行中的访问不受影响,设备不接收新访问,挂载信息会从mount和fstab中消失
# 等到访问该设备的进程结束后解除挂载
umount -l <path>
-l, --lazy Lazy unmount (after the disk operations are done).

查询某个指定服务进程的 PID 值

1
pidof httpd

重置Linux系统的登录密码

重启Linux,出现引导界面时,按下 e 键进入内核编辑界面
在 linux16 参数这行的最后面追加“rd.break”参数,
然后按下 Ctrl + X 组合键来运行修改过的内核程序,大约 30 秒过后,进入到系统的紧急求援模式,
输入以下命令,待系统重启完成后,就可以用新密码登录了。

1
2
3
4
5
6
mount -o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
reboot

yum-config-manager: command not found

yum install yum-utils解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@as ~]# yum-config-manager
-bash: yum-config-manager: command not found
[root@as ~]# yum install yum-utils
...
==================================================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================================================
Installing:
yum-utils noarch 1.1.31-54.el7_8 base 122 k
Installing for dependencies:
python-kitchen noarch 1.1.1-5.el7 base 267 k

Transaction Summary
==================================================================================================================================================================================================
Install 1 Package (+1 Dependent package)
...

亚马逊云AWS的默认用户名

1
2
3
4
5
6
7
8
9
10
11
EC2 实例的默认用户名由您在启动实例时指定的 AMI 决定。
默认用户名为:
对于 AL2023、Amazon Linux 2 或 Amazon Linux AMI,用户名是 ec2-user。
对于 CentOS AMI,用户名是 centos 或 ec2-user。
对于 Debian AMI,用户名称是 admin。
对于 Fedora AMI,用户名是 fedora 或 ec2-user。
对于 RHEL AMI,用户名是 ec2-user 或 root。
对于 SUSE AMI,用户名是 ec2-user 或 root。
对于 Ubuntu AMI,用户名称是 ubuntu。
对于 Oracle AMI,用户名是 ec2-user。
对于 Bitnami AMI,用户名称是 bitnami。

grep命令检索tab字符

在单引号前面加上 $ 字符,bash就会 \t 解释为tab字符。

1
grep $'\t'

windows下nslookup开启debug模式,查看DNS查询的详细步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\>nslookup
Default Server: test.example.com
Address: 0.0.0.0
> set debug=true
> www.google.co.jp

可以发现如下递归查询过程

1. 先在域服务器上查询A和AAAA记录
DNS 服务器响应NXDOMAIN(未找到条目)

2. 去互联网根服务器查询A和AAAA记录
DNS 服务器响应NXDOMAIN(未找到条目)

3. 从www.google.co.jp获取A记录,AAAA记录
DNS 服务器响应NOERROR

Ubuntu读取审计日志,查询用户操作

查询默认审计日志/var/log/audit/audit.log,

1
# ausearch -if /var/log/audit/audit.log -i -ua 1001

-i: 转换成人类易于理解的形式
-ua: 查询用户ID为1001的用户操作
ausearch 是 Linux 审计框架(Audit Framework)的一个工具,用于查询和分析审计日志。Linux 审计系统通常由 auditd 守护进程管理,并将日志存储在 /var/log/audit/audit.log 中。

linux下占用内存,进行测试的方法

1
2
3
4
5
6
7
# 使用head命令
head -c 500M /dev/zero | tail
head -c 1G /dev/zero | tail

# 使用dd命令,输出到内存映射到的文件系统上。使用完记得删除文件。
dd if=/dev/zero of=/dev/shm/mem_test bs=1M count=1024
rm /dev/shm/mem_test

jar命令更新已有的jar包 Java

  • 背景
    生产环境中运行着基于Java的web服务,需要修改CSS文件解决适配问题。
    当时的开发人员已离职,无法按照正常流程打包jar文件进行修改。

  • 解决方法
    通过jar命令直接更新jar文件的CSS

    1
    2
    3
    4
    5
    6
    7
    8
    # 例:替换jar内public目录的css文件
    # 在jar文件所在目录,创建public目录,存放form.css

    jar uf target.jar public\form.css

    # 参数说明
    u: 更新现有jar文件
    f: 指定jar文件名

    参考文档:Updating a JAR File