解决U盘安装Windows 2000/XP时找不到EULA的方法

使用Rufus制作的Windows2000安装U盘,安装过程中显示“安装程序无法找到最终用户许可协议(EULA)”(英文版为”Setup cannot find end user licensing agreement EULA”)。

该问题是由安装程序无法找到i386文件夹位置导致的。

要解决该问题,需要使用较早版本的Rufus(如3.x),并在制作安装U盘时勾选“使用 Rufus MBR 配合 BIOS ID”选项。

按序测试”0x80″、”0x81″….,直至安装程序正常运行。

(测试的ID与硬盘有关,如果电脑上直接入了一个U盘和一个硬盘,理论上正确的ID要是0x80,要么时0x81,如果由3个或更多设备,则类推)。

如果安装完进入系统后出现找不到“NT5INF.CAT”及其他文件,可能也是因为文件目录问题,可尝试修改原地址”C:\i386“为”D:\i386“。

迅时OM系列语音网关修改HTTPS证书

迅时OM语音网关的Web界面没提供修改HTTPS证书的功能,需要手动在CLI中修改,以下以OM20为例。

首先需要在Web管理页面中开启Telnet功能,并设置密码(高级→安全配置→Telnet)。

使用命令行工具接入语音网关的Telnet,用户名为root,密码为设置的密码。

直接修改原有的证书公钥与私钥:

//替换公钥
vi /mnt/rwfs/var/config/httpsCA/newreq.ca
//替换私钥
vi /mnt/rwfs/var/config/httpsCA/newreq.key

需要注意的是,原有的newreq.ca文件中,包含了友好的证书信息,为了避免bug,我们可以利用openssl来生成这部分信息,并替换掉原来的信息:

openssl x509 -in voip_cert.pem -text -noout

(如果vi编辑器中粘贴文本出现缩进错误,可以用:set noautoindent来关闭自动缩进。)

最后重启语音网关,打开Web页面,此时HTTPS证书已被替换。

H3C AC添加HTTPS证书

H3C的V7版本中,Web界面没有提供直接修改HTTPS证书的表单,所以需要在CLI中配置,以下以WX2510H-F为例,从创建根证书、签发子证书到最终导入AC并应用,讲解整个过程。

首先,使用OpenSSL生成私钥、签名请求和证书:

//生成根证书私钥
openssl genkey -algorithem RSA -out root_key.pem
//生成根证书签名请求,这一步需要填写证书的详细信息(包括位置、机构等)
openssl req -new -key root_key.pem -out root_csr.pem
//签名根证书,并设定有效期10年(3650天)
openssl x509 -req -in root_csr.pem -signkey root_key.pem -out root_cert.pem -days 3650

接着,用根证书签署子证书:

//生成子证书私钥
openssl genkey -algorithem RSA -out ac_key.pem
//生成子证书签名请求,和根证书一样,需填写相关信息
openssl req -new -key ac_key.pem -out ac_csr.pem

在签名子证书前,我们还需要创建一个.ext文件,以便在签发子证书加入额外的设定(比如是否可签发子证书、域名等):

basicConstraints=CA:FALSE
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.1.5
DNS.1 = ac.example.com

然后,用根证书签名子证书,并设定有效期10年:

openssl x509 -req -in ac_csr.pem -CA root_cert.pem -CAkey root_key.pem -out ac_cert.pem -days 3650 -extfile ac.ext

因为H3C系统对于PEM文件的读取机制,我们还需要在记事本中将ac_key.pem与ac_cert.pem两个文件的内容组合到一起,生成ac_mix.pem文件。

至此,在PC中对证书的处理就完成了。接下来需要将证书导入AC并应用与HTTPS服务。

首先,我们需要先在Web页面向AC的Flash中上传根证书公钥root_cert.pem和子证书公私钥ac_mix.pem两个文件。(在系统面板下,左侧边栏“系统”→“文件管理”,直接上传至Flash根目录即可)

接着,进入CLI页面的System-view

//导入根证书
pki import domain 1 pem ca filename root_cert.pem
//导入子证书
pki import domain 1 pem local filename ac_mix.pem
//配置pki domain 1,关闭证书检查
pki domain 1
undo crl check enable
//配置SSL服务器端策略myssl,绑定PKI域
ssl server-policy myssl
pki-domain 1
//停止HTTP和HTTPS服务
no http enable
no https enable
//绑定HTTPS的SSL服务端策略
ip https ssl-server-policy myssl
//启动HTTP和HTTPS服务
ip http enable
ip https enable

重新打开Web页面,此时证书已替换为自己签名的证书。

如果要避免浏览器显示“不安全”,还需要在Windows系统中导入我们自己的根证书,步骤如下:

搜索→管理计算机证书→受信任的根证书颁发机构→证书→操作→所有任务→导入→root_cert.pem

Ubuntu更新高版本MariaDB

备份数据库:

mysqldump -u root dbname > dbname_backup.sql

添加官方repo:

wget https://r.mariadb.com/downloads/mariadb_repo_setup

echo "935944a2ab2b2a48a47f68711b43ad2d698c97f1c3a7d074b34058060c2ad21b  mariadb_repo_setup" \
       | sha256sum -c -

chmod +x mariadb_repo_setup

sudo ./mariadb_repo_setup

强制升级:

sudo apt update
sudo apt -u dist-upgrade

VUE基于nginx的快速部署教程

在部署前,服务器应配置好nginx,见Ubuntu部署nginX

编写好的VUE代码,可以在本地编译(编译好后将dist文件通过FTP上传服务器),也可以在服务器端进行编译(服务器安装node.js进行编译)。

如果本地编译,直接

npm run build

当提示”built in x.xx s“后即为编译成功,结果文件存于当前目录的dist文件夹内。

使用MobaXterm或者Xshell之类的软件连接到服务器,通过FTP将dist文件上传到设置的目录即可,比如“/etc/nginx/html/”,应注意需要nginx有足够的文件权限访问上传的文件。

如果在服务器编译,需要服务器安装node.js和npm

sudo apt install nodejs npm
// 由于apt中的node.js版本较老,还需要通过npm升级版本
npm install n -g
sudo n stable
hash -r

然后通过FTP或者git将源码放到服务器中,在源码目录中执行

npm run build

然后把编译好的dist文件移动到设置的目录就可以了。

Ubuntu部署nginX

通过APT安装nginx

sudo apt update
sudo apt upgrade
sudo apt install nginx

编辑nginx的配置文件

//nginx配置的主文件
sudo vim /etc/nginx/nginx.conf
//nginx.conf默认引用了/etc/nginx/conf.d/中的所有.conf文件,所以建议以在conf.d中添加文件的形式添加web服务配置
sudo vim /etc/nginx/conf.d/vm.conf

以基本的web服务为例,vm.conf的配置内容可以是:

server {

    # 使用的端口,及是否作为默认服务
    listen    16666 default_server;

    # 服务器名称,同一个IP的同一个端口可以设置为不同的域名,nginx可以根据用户访问的域名的不同      提供不同的网站服务。
    server_name yttj.f3322.net:16666;

    # 文件的位置
    location / {

        # 文件根目录
        root     /usr/share/nginx/html;

        # 主页文件名
        index    index.html;
    }
}

配置完成后,即可启动nginx

sudo systemctl start nginx
#启用开机自动启动
sudo systemctl enable nginx

Ubuntu的防火墙默认开启,还应设置防火墙开放服务的端口

sudo ufw allow 16666

Jupyter Notebook安装于虚拟机或云服务器

系统为Ubuntu Server 22.04.2。

pip install jupyter
jupyter notebook --generate-config
vim ~/.jupyter/jupyter_notebook_config.py

在ipython,用jupyter自带的密码生成器生成哈希密码,复制最终的out结果

ipython
>>> from notebook.auth import passwd
>>> passwd()

修改配置文件中的配置(必须要修改ip才能在外网访问)

c.NotebookApp.ip = 'xxx.xxx.xx.xx'
c.NotebookApp.open_browser = False
c.NotebookApp.password = ''  #此处应为前文中复制的哈希密码
c.NotebookApp.port = 8888
c.NotebookApp.allow_remote_access = True

防火墙开放8888端口

sudo ufw allow 8888

启动Jupyter Notebook

jupyter notebook

外网访问IP:8888即可

(notebook中的python环境可能与系统的环境不一致,进而出现找不到依赖库的情况,最简单的方法是直接在notebook中安装包,从根源上解决就得给notebook配置kernel)

! pip install numpy    #在jupyter notebook 中直接安装库

Swoole的安装(包括yasd调试)

在Ubuntu系统下,安装需要的包:

sudo apt install php gcc make autoconf php-dev

下载源代码

解压,并安装:

sudo tar -xzvf swoole-src-5.0.0.tar.gz
cd cd swoole-src-5.0.0/
sudo phpize
sudo ./configure
sudo make -j6
sudo make install

还需在php.ini中添加:

extension=swoole.so

编译安装yasd

sudo apt install libboost-all-dev
git clone https://github.com/swoole/yasd.git
cd yasd/
sudo phpize --clean
sudo phpize
sudo ./configure
sudo make clean
sudo make
make install

在php.ini中添加:

zend_extension=yasd
yasd.debug_mode=remote
yasd.remote_host=127.0.0.1
yasd.remote_port=9000

如果采用phpstorm的ssh模式使用解释器,还需要设置部署及路径映射。

基于WVP-GB28181的云视频监控管理平台配置

wvp的GitHub页面648540858/wvp-GB28181-pro

wvp-Docker的GitHub页面 imnicn/wvp-docker

采用Ubuntu20.04的腾讯云服务器,配置最新版本Docker及docker-compose。

wget -qO- https://get.docker.com/ | sh
systemctl enable docker
systemctl start docker
apt install docker-compose

首先克隆wvp-docker的代码:

git clone https://github.com/imnicn/wvp-docker.git

接着进入wvp-docker目录,修改docker-compose配置文件,包括wvp和zml的IP,以及相关的SIP编号、密码等。(编号规则见GB附录)

保存配置文件后,启动docker-compose即可

docker-compose up -d

初次启动时存在无法连接到媒体服务器的Bug,需要docker-compose down后重新up才能正常。

大华的28181配置修改后可能存在延迟,需要重启机器。

由于国标采用了推模式,摄像头、NVR等设备不需要公网IP,也(可能)不需要端口映射。

Ubuntu 20修改网络配置

原有的/etc/network/interfaces方法已经不适用,现需要:

sudo vi /etc/netplan/00-installer-config.yaml

yaml格式的样本:

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: false
      addresses: [192.168.3.18/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5,119.29.29.29]

  version: 2

修改完成后,应用配置:

sudo netplan apply

Debian部署MiniKube

检查Debian发行版版本:

cat /etc/os-release

更新(建议使用VPN):

sudo apt update
sudo apt upgrade

安装Docker

//移除潜在的老版本Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
//安装需要的包
sudo apt-get install ca-certificates curl gnupg lsb-release
//添加Docker官方的GPG密钥(需关闭V2Ray,否则SSL报错)
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
//添加稳定版仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
//安装Docker(需关闭V2Ray,否则SSL报错)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
//检查是否安装成功
docker -v

安装MiniKube

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb

启动MiniKube(需拉取镜像,建议使用VPN):

minikube start
//可能报错未添加Docker组,则需要添加用户组:
sudo usermod -aG docker $USER && newgrp docker

TrueNAS移除条带池(strip)中硬盘的方法

因意外,将要作为cache/log的傲腾硬盘当作tank加入到了strip池中,在Web管理页面无法将其移除。

使用ssh或web命令行可移除。

zpool list -v cache
//查看目前cache池的状态

根据池中硬盘的ID,移除硬盘:

zpool remove cache gptid/7b5dddfa-b754-11eb-a683-000c29a6c389

移除过程需要一段时间,之后在list -v就没有这个硬盘了。

PS:官方不推荐使用remove指令,有降低池性能的可能,仅适合应急使用。如果池中文件较少或有条件转移,建议rebuild整个池。