站内公告:

我们的虚拟社区正式开通了

Main Menu

最新帖子

#11
Vue开发 / 终极解决:Error: error:0308010C:dig...
上次发布者 jvip_chen - 2023-7月-17 04:09 下午
1、报错
启动vue项目,报错如下:
You cannot view this attachment.

2、报错原因
出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.

在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出这个异常。

3、解决方案
3.1版本降级,解决报错
尝试卸载Node.js 17+版本并重新安装Node.js 16+版本,然后再重新启动

这个方法,测试有效,但我推荐的是第二个办法。

3.2设置参数,解决报错
在执行运行项目命令之前,先运行这个命令:

Linux & Mac OS:
export NODE_OPTIONS=--openssl-legacy-provider
windows命令提示符:
set NODE_OPTIONS=--openssl-legacy-provider
这样就可以解决了,亲测有效。

唯一不足,是每次启动项目都要运行,所以,我们可以把它配置一下。也就是第三种方法。

3.3 修改配置文件,解决报错(推荐)
根据你的系统类型,选择一个上面的命令,如,我是Mac系统,我就用:
export NODE_OPTIONS=--openssl-legacy-provider
然后,找到项目的package.json文件,把自己对应的命令,加上&&,写到启动项目的配置里面(构建写不写都可以),即可。

例1:脚手架
"scripts": {
  "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
  "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
},
例2:Vue-Element-Admin
"scripts": {
    "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
//略...
  },
#12
Linux 系统 / appimage 错误dlopen(): error loa...
上次发布者 jvip_chen - 2023-7月-05 11:25 上午
运行appimage的时候,出现如下错误

dlopen(): error loading libfuse.so.2

AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
if you run it with the --appimage-extract option.
See https://github.com/AppImage/AppImageKit/wiki/FUSE
for more information

只要运行sudo apt install libfuse2就行
#13
Nginx服务器 / Ubuntu用Apt-get安装Nginx服务器
上次发布者 jvip_chen - 2023-6月-18 11:05 下午
1、添加nginx-Apt源
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
2、安装nginx
sudo install apt-get install nginx
#14
Linux 系统 / Linux 系统安全启动
上次发布者 jvip_chen - 2023-5月-16 06:30 下午
什么是安全启动

"安全启动" 是 2012 年出现的 Windows 8 预装电脑里的 UEFI 功能。目前所有的 Ubuntu 64位(非32位)版本支持此功能。简而言之,安全启动工作原理是在固件中启用信任源机制,虽然其它实现方式是可能的,但在实践中通过 x509 证书来实现信任链。根证书( 根证书是由受信任的证书颁发机构 CA 颁发的证书)嵌入在固件中,使得它可以验证签名的引导加载程序,然后,签名的引导加载程序可以验证已签名内核或已签名的第二级引导加载程序等。为了使用安全启动,我们需要使用UEFI启动系统,而不是旧的 BIOS。
BIOS与UEFI有什么区别?

两者都可初始化计算机,任务是加载操作系统。BIOS 通过读取硬盘上的第一个扇区(主引导记录 MBR)并执行它来启动,相比之下,UEFI 通过从硬盘上的分区(称为 EFI 系统分区 ESP)加载EFI程序文件(使用 .efi 文件扩展名)来启动。


如何判断Linux系统是使用UEFI还是BIOS启动的?

最简单的方法是检查文件夹 /sys/firmware/efi 是否存在。
secureBoot:~$ ls /sys/firmware/efi/
config_table fw_platform_size runtime systab
efivars fw_vendor runtime-map vars
如果 Linux 计算机使用传统 BIOS 启动,则不会出现 /sys/firmware/efi 文件夹。
legacy:~$ ls /sys/firmware/efi
ls: cannot access /sys/firmware/efi: No such file or directory


如何判断Linux系统是否使用安全启动?

mokutil 命令用于管理机主密钥(MOK),这些密钥由 shim 层用于验证 grub2和内核映像,也可用于验证安全启动是否启用。
secureBoot:~$ mokutil --sb-state
SecureBoot enabled
或者也可以使用 mokutil 命令来查看当前所有已注册的密钥。
secureBoot:~$ mokutil --list-enrolled

未签名模块的特征是什么?

如果在启用了安全启动的计算机上编译并安装了无有效签名的 Kvaser 驱动程序模块,即使连上了 Kvaser 分析仪,在运行 listChannels 示例的时候也不会侦测到任何通道。
secureBoot:~$ ./listChannels
Canlib version 5.20
Found 0 channel(s).
可以使用 lsusb 命令验证 Kvaser 分析仪实际上是由 USB 子系统连接和识别的。
secureBoot:~$ lsusb | grep Kvaser
Bus 003 Device 008: ID 0bfd:0108 Kvaser AB
通过查找系统日志中的错误,并会发现类似错误 "所需密钥不可用"。
apr 19 16:05:38 mypc /usr/sbin/mhydra.sh[22789]: modprobe: ERROR: could not insert 'mhydra':
Required key not available
apr 19 16:05:38 mypc systemd-udevd[22776]: Process '/usr/sbin/mhydra.sh start' failed with exit code 1.
这需要签名模块使其在计算机上工作。在下篇文章中将介绍如何构建和签署 Kvaser 驱动程序模块,以便能够在启用了安全启动的 Linux 计算机上使用它们。
#15
在一个h5页面中通过websocket连接服务器,如果该h5页面是通过https来访问,需要注意wss连接是不能以ip加端口的方式来连接的。

比如页面https://domain.com/index.html中有如下js代码

var wsServer = 'wss://8.8.8.8:8888';
var websocket = new WebSocket(wsServer);
这样是连接不上websocket服务器的,因为wss不支持ip加端口的方式。

解决的办法是利用nginx的方向代理功能,将代码改成:

var wsServer ='wss://domain.com/wss';
var websocket = new WebSocket(wsServer);
同时nginx配置文件中,加入如下配置:

# server外面最上面加
upstream webSocket {
  server 8.8.8.8:8888;#需要代理到的socket服务器端口
}
# server里面加入
# 访问:wss://xxxx.com/wss
location /wss {
  proxy_pass https://webSocket/;#代理到上面的地址去
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}
这样就可以连接成功了。

注意将文中的域名、ip和端口替换成你自己的。
#16
PHP框架-Yii / Yii2 关闭和打开csrf 验证
上次发布者 jvip_chen - 2023-1月-09 10:46 上午
1.在Yii2配置中配置所有:所有的controller都将关闭csrf验证,如果设置成true,则将打开csrf验证。

'request' => [
    'enableCsrfValidation' => false,
],


2.在Yii2 controller中配置当前的controller添加变量,下面的设置将关闭csrf验证。

public $enableCsrfValidation = false;
#17
Linux 系统 / Linux 环境下 NFS 服务安装及配置
上次发布者 virtual - 2023-1月-06 02:29 下午
服务端:

确认是否安装
rpm -qa nfs-utils rpcbind

安装:
yum install -y nfs-utils rpcbind

服务端开机启动
systemctl start rpcbind
systemctl enable rpcbind
 
systemctl start nfs-server
systemctl enable nfs-server

配置

vim /etc/exports
 /mnt/share 172.18.0.0/16(rw,sync,insecure,no_subtree_check,no_root_squash)

常用选项:

  • rw 表示允许读写
  • ro 表示为只读
  • sync 表示同步写入到内存与硬盘中
  • no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash),如果不加那么客户端无法在里面编辑或写入文件,因为默认以nfsnobody的权限
  • root_squash 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户
  • 其它常用选项:
  • all_squash 所有访问用户都映射为匿名用户或用户组
  • async 将数据先保存在内存缓冲区中,必要时才写入磁盘,速度快但会丢失数据
  • subtree_check(默认) 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
  • no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
举例:
其中客户机地址可以是主机名 ID 地址、网段地址,允许使用 "*" "?" 通配符;权限选项中的 rw 表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以 root 身份访问时赋予本地 root 权限(默认是root_squash,将为 nfsnobody 用户降权对待)。

当需要将同一个目录共享给不同的客户机,且分配不同的权限时,只要以空格隔指定多个"客户机(权限选项)"即可。
例如,以下操作将 /var/ftp/public 目录共享给两个客户机,并分别给予只读、读写权限。


#启动服务 
service rpcbind start
 
sudo service nfs-server restart
sudo service nfs-server status

查看:
rpcinfo -p localhost
 
showmount -e 10.xx.xx.xx

# 客户端
yum install -y nfs-utils
showmount -e 172.18.0.13
mkdir -p /mnt/share
mount 172.18.0.13:/mnt/share /mnt/share -o proto=tcp -o nolock
df -h | grep 172.18.0.13

udp:

mount 172.18.0.13:/mnt/share /mnt/share
umount /mnt/share

fstab自动挂载设置
修改 /etc/fstab 配置文件,加入 NFS 共享目录的挂载设置(文件系统类型为nfs)。
挂载参数建议添加_netdev(设备需要网络)
若添加 soft、intr 参数可以实现软挂载,允许在网络中断时放弃挂载。这样客户机就可以在每次开机后自动挂载 NFS 共享资源了。

vim /etc/fstab

192.168.109.11:/opt/web /var/www/html           nfs     default,_netdev 0 0


#18
python更改下载源地址
python默认的pip源在国外,如果下载比较大的第三方库时可能会非常非常慢,甚至会报错,所以为了有一个更加友好的python使用体验,建议为python的pip换一下源。

临时使用pip源

在使用pip时候,后面加上参数-i 镜像地址,例如:

pip3 install pygame -i http://mirrors.aliyun.com/pypi/simple/
永久修改:

pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/

[root@localhost bin]# ./pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/Writing to /root/.config/pip/pip.conf工作中遇到的问题总结
WARNING: The repository located at mirrors.aliyun.com is not a trusted
WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '–trusted-host mirrors.aliyun.com'.
ERROR: Could not find a version that satisfies the requirement Pillow3.4.2 (from versions: none)
ERROR: No matching distribution found for Pillow3.4.2
WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '–trusted-host mirrors.aliyun.com'.

解决方法:根据错误提醒,添加 --trusted-host mirrors.aliyun.com 即可,如下

[root@localhost bin]# ./pip install -r requirements.txt --trusted-host mirrors.aliyun.com
#19
python3 开发 / 解决 mysql.connector.errors.NotS...
上次发布者 jvip_chen - 2023-2月-06 03:51 下午
环境
mysql:8.0.11
python:3.6

错误描述
mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported解决方案:

pip install MySQL-connector-python
#20
Linux 系统 / timedatectl命令使用介绍
上次发布者 jvip_chen - 2023-2月-06 12:37 下午
timedatectl是Linux下的一条命令,用于控制系统时间和日期。可以用来查询和更改系统时钟于设定,同时可以设定和修改时区信息。这篇文章简单介绍一下如何使用timedatectl进行常见操作。

基础知识
关于RTC/系统时钟/NTP/时区等基本信息和设定的介绍,可参看如下文章,本文不再赘述。

https://blog.csdn.net/liumiaocn/article/details/79250793
常见用法
使用timedatectl可以进行如下常见操作

  • 查看当前时间/日期/时区:timedatectl或者timedatectl status
  • 查看所有可用时区:timedatectl list-timezones
  • 设置时区:timedatectl set-timezone "时区信息"
  • 设置UTC:timedatectl set-timezone UTC
  • 设置时间:timedatectl set-time HH:MM:SS
  • 设置日期:timedatectl set-time YYYY-MM-DD
  • 设置日期时间:timedatectl set-time "YYYY-MM-DD HH:MM:SS"
  • 设置硬件时钟为本地时间:timedatectl set-local-rtc 1
  • 设置硬件时钟为UTC时间:timedatectl set-local-rtc 0
  • 启动NTP时间同步(启用NTP服务或者Chrony服务):timedatectl set-ntp true
  • 禁用NTP时间同步:timedatectl set-ntp false