0%

评估转正式

# 获取当前版本
DISM /Online /Get-CurrentEdition
# 设置为目标版本
DISM /Online /Set-Edition:ServerDatacenter /ProductKey:<productKey> /AcceptEula

Intel驱动安装

KMS激活

VLAN

  • 启用Windows功能
# 获取网卡信息
Get-NetAdapter
# 创建vSwitch
New-VMSwitch -name VLAN-vSwitch -NetAdapterName "Ethernet" -AllowManagementOS $true
# 创建vlan
Add-VMNetworkAdapter -ManagementOS -Name "<vlanName>" -SwitchName "VLAN-vSwitch" -Passthru | Set-VMNetworkAdapterVlan -Access -VlanId <vlanId>

Workflow

# 删除已完成的actions/runs
export GH_TOKEN=
github_user=
github_repo=
ids=$(gh api -X GET -F per_page=100 /repos/${github_user}/${github_repo}/actions/runs --jq '.workflow_runs[] | select(.status=="completed") | .id' | xargs)
for t in $ids;do
  echo "Delete: $t"
  gh api -X DELETE /repos/${github_user}/${github_repo}/actions/runs/$t --silent
done

基础

git config --global http.proxy http://127.0.0.1:1081           #设置http代理
git config --global https.proxy https://127.0.0.1:1081         #设置https代理
git config --global http.proxy 'socks5://127.0.0.1:1081'       #设置socks代理
git config --global https.proxy 'socks5://127.0.0.1:1081'      #设置socks代理
git config --global core.autocrlf false                        #去除warning:LF will be replaced by CRLF警告
git rm -r --cached .                                           #忽略文件不生效时使用并再次提交即可
git config --global user.name "<name>"                         #配置用户名
git config --global user.email "<email>"                       #配置邮箱
git config --system core.longpaths true                        # 允许长文件名

git checkout -b test <name of remote>/test                    # 创建本地分支并切换到远程分支
git daemon --reuseaddr --base-path=. --export-all --verbose --enable=receive-pack # 开启局域网访问 需cd到git工程根目录
git rev-list --all | xargs -rL1 git ls-tree -r --long | awk '{ size=$4/1024/1024; if (size >= 80) {print size" "$0}}' # 查找历史记录的文件大小大于80MB

删除指定文件所有历史记录

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <filepath>" --prune-empty --tag-name-filter cat -- --all
git add .
git commit -m "<message>"
git push origin --all --force

替换敏感记录内容

# https://docs.github.com/zh/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository#purging-a-file-from-your-repositorys-history
bfg --replace-text passwords.txt
git add .
git commit -m "<message>"
git push origin --all --force

依赖

  • luci-proto-wireguard
  • qrencode

新建接口: 网络 -> 接口 -> 添加新接口

常规设置

防火墙设为lan

对端 -> 添加对端

生成对端配置

  • xxx.com为本端域名或公网ip地址
  • 添加对端时允许的ip不能填本路由所属的ip段,否则会导致无法访问本路由

vim-cmd vmsvc/getallvms
vim-cmd vmsvc/power.shutdown [vmid]


用户

useradd -d /home/[user] -m [user]   # 添加用户,并创建用户目录
adduser [user]                      # 添加用户
userdel -r [user]                   # 删除用户
usermod -G [group] [user]           # 把用户从其他组中去掉,只属于该组
usermod -a -G [group] [user]        #把用户添加至该组,之前所属组不影响

权限

# root用户下打开 /etc/sudoers 文件
# [user]   ALL=NOPASSWD: ALL 某用户不需要密码可以执行sudo
# %[group] ALL=NOPASSWD: ALL 某组的所有用户不需要密码可执行sudo
# 
# -rw------- (600) 只有拥有者有读写权限
# -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限
# -rwx------ (700) 只有拥有者有读、写、执行权限
# -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限
# -rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限
# -rw-rw-rw- (666) 所有用户都有文件读、写权限
# -rwxrwxrwx (777) 所有用户都有读、写、执行权限
chown -R [user]:[group] [filePath]    # 更改文件拥有者及组

文件

tar --exclude=*.mp3 -zcvf file.tar.gz [filePath]          # 过滤文件并压缩
tar -xzvf file.tar.gz -C [targetPath]                     # 解压缩至指定目录
ls -lR|grep "^-"|wc -l                                    # 统计当前文件夹下文件的个数,包括子文件夹
ls -lR|grep "^d"|wc -l                                    # 统计当前文件夹下目录的个数,包括子文件夹
ls -l |grep "^-"|wc -l                                    # 统计当前文件夹下文件的个数
ls -l |grep "^d"|wc -l                                    # 统计当前文件夹下目录的个数
ls -1 *.ts | sort -n | xargs cat > merged.ts              # 按顺序合并文件到merged.ts
find . -type d -empty -delete                             # 删除空目录
find -type d -empty | xargs rmdir -p                      # 删除当前目录下所有空文件夹
find . -type f | grep '\./\.' | xargs rm -rf.             # 删除以 ./.开头的文件
find temp/*201902* -not -name *20190214* | xargs rm -rf   # 删除除某种条件下的文件
find . -type f -name *-compose.yml -exec sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' {} \;  # 去除开始与结尾空行 保留中间部分
find . -type f -name *-compose.yml -exec sed -i -e '$a\[plantext]' {} \;                # 文本末尾批量追加
find . -type f -name 'init_config.sh' -exec sh -c 'f={};mv $f $(dirname $f)/init.sh' \; # 批量修改文件
find . -name "[file]" -exec grep -l '[hello]' {} \; | xargs rm -rf                      # 过滤文件+过滤内容+删除
find . -name "-*" -exec sh -c 'f={}; mv $f $(echo $f | sed 's/-//g')' \;                # 正则修改文件名称
find . -type f -name values.yaml -size 0c -exec rm -rf {} \;                            # 批量删除空文件
find . -type f -exec sh -c 'f={};if echo $f | grep -q src ; then sed -i "s|com.learning|com.czy.learning|g" $f; fi;' \; # 修改匹配路径下的文件内容
find . -maxdepth 1 -type f -exec md5sum {} \; | sort | uniq -D -w 33   # md5 文件查重
find -name '*.gradle' -exec sed -i -e 's|compile|implementation|g' -e 's|testCompile|testImplementation|g' -e 's|runtime|implementation|g' {} \;
sed -i '1,nd' [file] # 删除前n行
sed -i -e 's/^INSERT INTO public\./INSERT INTO /' [file] # 正则替换
cat nginx.conf | grep -oP 'upstream \K\w.*?(?={)' | awk '{printf $1 ";"}'  # 正则提取upsteam地址
# \$\{(\S+?)\}   -------->   \${\L$1}    # 正则匹配括号内内容 并转为大小写(idea)

磁盘

du -hd0 .         # 查看当前目录下总空间大小
du -hd1           # 查看当前目录及各目录的总空间大小

fdisk /dev/sdb                n  初始化分区
mkfs.ext4 /dev/sdb1              格式化系统

Mount

  • Disk
    # get device name
    fdisk -l
    # get device uuid
    blkid /dev/sdb1
    # disk in /etc/fstab
    /dev/disk/by-uuid/<uuid> /volume1 ext4 defaults 0 0
    
  • NFS
    # show nfs
    showmount -e [host]
    # nfs in /etc/fstab
    [host]:/volume1/ubuntu /volume1 nfs defaults 0 0
    
    # nfs command line
    sudo mount -t nfs <nfs_server>:/<nfs_path> /<local_path>
    
  • SMB
    # smb in /etc/fstab
    //<host>/public/ubun12   /volume2   cifs   user=<username>,pass=<password>,gid=1000,uid=1000    0 0
    
    # smb command line
    sudo mount -t cifs //<smb_server>/<smb_path> /<local_path> -o "user=<username>,password=<password>,gid=1000,uid=1000"
    

系统

# set hostname
hostnamectl set-hostname --static [hostname]

ssh

scp -r [user]@[host]:/home/[user]/*[!.mp3] d:/upload/      # 从服务器下载文件
scp -r [local] [user]@[host]:[remote]                      # 本地上传文件至服务器
ssh [user]@[host] 'bash -s' < test.sh init                 # ssh运行加参数的本地脚本
ssh [user]@[host] < test.sh                                # ssh直接运行.sh脚本
ssh [user]@[host] 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub # 将本地公钥id_rsa.pub传给远程主机

rsync

# list remote module
rsync rsync://<host>
# -e "ssh -i <private_key_file>"
# push
rsync --progress -avogXH <local_path> rsync://<user>@<host>:<remote_path>
# pull
rsync --progress -avogXH rsync://<user>@<host>:<remote_path> <local_path>

docker

docker pull mysql:5.7
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
docker exec -it pwc-mysql /usr/bin/bash (win10下 前面加上 wintpy)

docker stop $(docker ps -a -q)                                       # 停止容器
docker rm $(docker ps -a -q)                                         # 删除容器
docker image rm $(docker image ls -a -q)                             # 删除镜像
docker volume rm $(docker volume ls -q)                              # 删除数据卷
docker network rm $(docker network ls -q)                            # 删除 network
docker rm $(docker ps -q -f status=exited)                           # 删除 exited 容器
docker restart $(docker ps -aq --filter 'exited=0')                  # 重启 exited 容器
docker stop $(docker ps -a -q) && docker system prune --all --force  # 全部清理
docker rm -f $(docker ps -a -q) && docker volume prune -y            # 清空所有容器及数据卷
docker rm $(docker ps -qa --no-trunc --filter "status=exited")       # 清空exited的容器
docker image prune -a                                                # 清空未使用的镜像
docker ps -a --filter volume=                                        # 根据volume name获取container
docker inspect <container_name> -f '{{ .LogPath }}' | xargs sudo cat # 查看容器日志文件
docker inspect <container_name> -f '{{ .LogPath }}' | xargs sudo tee # 清空容器日志文件

mac

# homebrew
export ALL_PROXY=socks5://127.0.0.1:1080
# mongo
brew install libpq
# mysql
brew install mysql-client

Remove subscription

  • vim proxmoxlib.js
    vim /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
    /checked_command
    
  • checked_command: function(orig_cmd) {
    	  orig_cmd();
    },
    
  • systemctl restart pveproxy.service
    
  • CTRL+F5 Refresh Brower

Enable IOMMU

  • AMD
    sed 's|\(GRUB_CMDLINE_LINUX_DEFAULT\)=\(.*\)|\1="quiet amd_iommu=on iommu=pt"|' /etc/default/grub
    
  • INTEL
    sed 's|\(GRUB_CMDLINE_LINUX_DEFAULT\)=\(.*\)|\1="quiet intel_iommu=on iommu=pt"|' /etc/default/grub
    
update-grub

Kernel Modules

cat << EOF > /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
EOF
update-initramfs -u -k all 
reboot

Verify

dmesg | grep iommu
# hav output is success
find /sys/kernel/iommu_groups/ -type l

GPU passthrough

  • AMD
    cat << EOF > /etc/modprobe.d/blacklist.conf 
    blacklist radeon
    blacklist amdgpu
    EOF
    
  • NVIDIA
    cat << EOF > /etc/modprobe.d/blacklist.conf
    blacklist nouveau
    blacklist nvidia*
    EOF
    

Allow unsafe interrupt

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

Ignore vm exception

echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

Set passthrough ids

# show pcie device
lspci -nn
# set passthrough ids
echo "options vfio-pci ids=xxxx:xxxx,yyyy:yyyy" > /etc/modprobe.d/vfio.conf
# verify
lspci -nnk
update-initramfs -u -k all
reboot

Disk passthrough

  • RDM
ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part
# type: scsi sata ide
# example: qm set <vmid> --scsi0 /dev/disk/by-id/xxxx
qm set <vmid> --<type><sequence> /dev/disk/by-id/xxxx
# delete passthrough
qm set <vmid> --delete scsi0

Reference

IPXE编译(Ubuntu 22.04)

apt install gcc binutils make perl liblzma-dev mtools mkisofs syslinux
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src
cat << EOF > script.ipxe
#!ipxe
dhcp
chain --autofree tftp://\${next-server}/boot.ipxe
#chain --autofree https://boot.netboot.xyz
EOF
  • UEFI
    git checkout config/general.h
    sed -i 's|#undef.*\(DOWNLOAD_PROTO_HTTPS\)|#define \1|' config/general.h
    make bin-x86_64-efi/ipxe.efi EMBED=script.ipxe
    
  • BIOS
    git checkout config/general.h
    sed -i 's|#undef.*\(DOWNLOAD_PROTO_HTTPS\)|#define \1|' config/general.h
    sed -i 's|\/\/#define.*\(IMAGE_COMBOOT\)|#define \1|' config/general.h
    make bin/undionly.kpxe EMBED=script.ipxe
    

windows powershell执行

Install-Module -Name VMware.PowerCLI -RequiredVersion 12.0.0.15947286
Set-ExecutionPolicy RemoteSigned

脚本导入

.\ESXi-Customizer-PS.ps1 -izip .\VMware-ESXi-7.0U3d-19482537-depot.zip -pkgDir .\pkg\