OpenVPN 客户端创建多个网络适配器
CentOS 7 磁盘扩展方法
第一步: 磁盘分区
- 使用
fdisk -l
查看本机磁盘分区情况
1 | [root@localhost core]# fdisk -l |
CentOS 默认挂载盘无法超过 2T, 需要挂载超过 2T 的磁盘,需要先对磁盘的分区方式进行转换成 GPT
转换方式:
1 | parted /dev/vdb |
可以看到一个 /dev/vdb 的设备没有使用
- 执行分区:
- fdisk /dev/vdb
- m 显示命令列表
- n 新增分区
- p 主分区
- 1
- enter
- enter
- w 写入并退出
1 | [root@localhost core]# fdisk /dev/vdb |
第二步: 格式化磁盘
通知内核重新读取分区信息 partprobe /dev/vdb
先执行 blkid 查看磁盘的格式
如果是 xfs 格式,执行下面的命令
mkfs -t xfs /dev/vdb1
如果是 ext4 的话
mkfs -t ext4 /dev/vdb1
1 | [root@localhost core]# mkfs -t xfs /dev/vdb1 |
第四步: 创建目录并挂载
1 | [root@localhost core]# mkdir /data |
第五步: 永久挂载
vim /etc/fstab
在最后添加如下一行:
1 | /dev/vdb1 /data xfs defaults 0 0 |
保存生效: mount -a
最后: 查看磁盘挂载情况
lsblk -f
1 | [root@localhost core]# lsblk -f |
扩展现有磁盘 (LVM 格式)
比如在虚拟机情况下,原来给虚拟机分配的磁盘大小是 100G,后来发现不够用了,在虚拟机操作界面将 100G 扩容到了 200G,然后多出来的 100G, 扩容到现有系统的 /home 目录下
按以下操作即可实现
扩展分区
fdisk -l
1 | fdisk /dev/sda |
加载分区表
partprobe
创建物理卷
pvcreate /dev/sda3
使用 pvdisplay
可查看当前物理卷的相关信息
将物理卷扩容到现有的卷组
vgextend centos /dev/sda3
使用 vgdisplay
可查看卷组的信息
将卷组中空闲空间扩容到 home 分区
lvextend /dev/mapper/centos-home /dev/sda3
使用 lvdisplay
可查看逻辑卷的信息
刷新 home 分区,在线扩容
xfs_growfs /dev/mapper/centos-home
使用 df -kh
和 lsblk
查看磁盘挂载情况
扩展现有磁盘 (非 LVM 格式)
在现有的环境中 /data 目录下挂载一块 1T 的存储盘, 非 LVM 格式,现在,新加了一块 2T 的硬盘,想要扩展到 /data 目录下,如下:
1 | [root@server-62 ~]# lsblk |
简单说下处理方式,还是转为 LVM 格式,将 2 块硬盘都加入逻辑卷,然后将原来数据花园
备份现有 /data 目录的数据,注意原先目录的权限, 比如cp -a /data/ /home/backup/
卸载原先磁盘,并删除分区
1 | umout /dev/vdc1 |
编辑 /etc/fstab 注释掉目录挂载
创建物理卷
1 | pvcreate /dev/vdd |
创建卷组, 并命名为 vg_data
1 | vgcreate vg_data /dev/vdd |
将物理卷 /dev/vdc 加入卷组
1 | vgextend vg_data /dev/vdc |
查看信息
1 | pvdisplay |
创建逻辑卷, 并命名为 lv_data, 100% 使用
1 | lvcreate -l 100%VG -n lv_data vg_data |
查看信息
1 | lvdisplay |
格式化
1 | mkfs -t xfs /dev/vg_data/lv_data |
最后,创建目录挂载
1 | vim /etc/fstab |
如果 mount -a
发现挂载不上, 可执行 systemctl daemon-reload
或重启解决
扩展逻辑卷
扩容分区和文件系统
转换MBR分区为GPT分区
关于 Docker -p 穿透防火墙 firewalld 的问题的研究记录
背景
使用 docker run -p 或者 docker compose 启动暴露的端口的容器, 会直接穿透防火墙, 不受系统防火墙的 firewalld 的管控
原因
docker 容器会在启动的时候向 iptables 添加转发的规则
而 firewalld 也是通过操作 iptables 来实现的防火墙的功能
1 | [root@centOS7 es-test]# iptables -L DOCKER |
可以看到是 anywhere
解决方式
第一种 禁用 docker 操作 iptables
在 /etc/docker/daemon.json 配置禁用 iptables:
1 | {"iptables": false} |
之后重启 docker 服务, 可以看到 docker 不会自动往 iptables 里添加规则了
这种方式有个弊端: 就是容器之间无法互相访问, 而且容器里的程序也无法访问外部网络
解决方式:
在防火墙里开始 net 转发:
配置 /etc/firewalld/zones/public.xml
1 | <zone> |
或者使用下面的方式添加 iptables 规则
1 | firewall-cmd --zone=public --add-masquerade |
之后使用 firewall-cmd –restart 或者 systemctl restart firewalld 使配置生效即可
但是这样做还有个问题, 就是所有访问容器的程序对于容器来说 IP 的变成的网关的 IP
这样的问题对于一些需要特定限制一些 IP 地址来源的应用和使用 IP 地址来作区分的应用来说就有很大问题, 比如注册中心
目前没有找到什么方式解决这个问题
第二种 容器直接指定主机网络
docker run 的时候不显式暴露端口 -p 什么的, 使用 –net host 的形式直接将容器的端口绑定到宿主机上
docker compose 运行的时候使用:
1 | version: '3.2' |
Docker 安装的 Maven 私服 Nexus3 因磁盘爆满而导致的无法启动的问题解决及忘记 admin 用户密码的解决方式
Maven 私服 Nexus3 因磁盘爆满而导致的无法启动的问题
背景
同事在 Nexus3 私服的宿主机上部署了一个服务, 结果因为网络问题导致服务打印大量的日志信息, 将宿主机的磁盘撑爆了,经过一系列排除, 删除了大日志文件
重启 Nexus3 容器,发现无法启动了, 报错如下:
1 | com.orientechnologies.orient.core.exception.OStorageException: Cannot open local storage '/nexus-data/db/config' with mode=rw |
解决
- 进入宿主机存放 Nexus3 数据目录下
先对该目录分配用户和用户组:
1 | chown -R 200 /home/transport/maven-repos-data |
分别删除 db/config 目录下和 db/component 目录下的所有的 .wal 文件
1 | cd /home/transport/maven-repos-data/db/config |
- 找到容器中的 nexus-orient-console.jar jar 包
1 | find / -name nexus-orient-console.jar |
进入上述目录, 我这里是: /var/lib/docker/overlay2/3b9c8d7685a03dcbb9ee69c33cd8fd9b487d980731596da27e7639854c0bb6e1/diff/opt/sonatype/nexus/lib/support
执行 java -jar nexus-orient-console.jar
, 来连接数据库
1 | connect plocal:/home/transport/maven-repos-data/db/component admin admin |
执行下列命令进行修复, 修复完成并退出:
1 | rebuild index * |
- 数据目录重新授权
1 | chmod 777 -R /home/transport/maven-repos-data/db |
- 重启容器
Maven 私服 Nexus3 忘记 admin 用户密码的解决
如上述步骤描述的, 运行 nexus-orient-console.jar
进入 security 数据库:
1 | connect plocal:/home/transport/maven-repos-data/db/security admin admin |
将 admin 用户密码重置为 admin123
1 | update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="admin" |
数据目录重新授权
1 | chmod 777 -R /home/transport/maven-repos-data/db |
MacOS 开发问题备忘记录
清理 brew
- brew cleanup
- brew cleanup –prune 1 #清理早于 1 天的
防止 mac 锁屏后关闭显示器的方法
brew cask install keepingyouawake
zsh 对 docker 命令的自动提示
- 首先确定安装好了 oh-my-zsh
- 在文件 ~/.zshrc 文件中启用 docker docker-compose, 下面是我启用的插件
参考: https://docs.docker.com/compose/completion/
1 | plugins=(git gradle mvn node npm brew yarn docker docker-compose) |
zsh 插件推荐
- 自动补全插件 zsh-autosuggestions
这里利用Oh my zsh的方法安装。直接一句话命令行里下载并移动到 oh my zsh 目录中:
1 | git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions |
然后在 ~/.zshrc 文件中找到 plugins 数组,加入 zsh-autosuggestions 名字,重新打开终端即可。
- 语法高亮插件 zsh-syntax-highlighting
将插件下载到oh my zsh的插件目录下的该新建插件同名文件夹中
1 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting |
编辑 ~/.zshrc 文件将然后将插件引用命令写入该文件最后一行(必须)
1 | source "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" |
保存重新打开即可看到高亮的命令行了。
黑苹果 --- Hackintosh + GIGABYTE Z390 AORUS PRO WIFI + i9-9900K + RX 580 + BCM94360CD + OpenCore 0.6.3 黑苹果主机配置与安装记录
简介
组装一台黑苹果最重要的是硬件的选择, 选择的重点是尽量选择与白苹果一致的配件
在硬件选择的方面有几点需要特别的注意
- CPU 的选择,CPU尽量选择 Intel 的,7/8/9代 酷睿 i9,i7,i5,i3 都可以, AMD 的CPU 也不是不行, 只不过需要打补丁,折腾的东西比较多
- 显卡的选择, 白苹果的显卡都是 A 卡, 所以在显卡的选择上直接选择 A 卡即可, 选择 A 卡需要注意的是,直接选择免驱动的 A 卡类型, 首选蓝宝石和微星的,下面列举了一些免驱的 A 卡
- Vega FE (真正免驱,无需搭配集显也可完全硬件加速)
- Vega 64 (真正免驱,无需搭配集显也可完全硬件加速)
- Vega 56 (真正免驱,无需搭配集显也可完全硬件加速)
- Vega Nano (真正免驱,无需搭配集显也可完全硬件加速)
- Pro SSG (真正免驱,无需搭配集显也可完全硬件加速)
- WX 9100 (真正免驱,无需搭配集显也可完全硬件加速)
- WX 8200 (真正免驱,无需搭配集显也可完全硬件加速)
- RX 590
- RX 580 (注意,缩水的阉割版2048SP的RX580马甲卡不是免驱的,标准2304SP才是免驱卡)
- RX 570
- RX 560 (个别型号的HDMI/DVI输出黑屏,需要改FB,DP输出没问题)
- 主板的选择,华硕,微星,技嘉 的 主板推荐选择, 8/9代酷睿首选Z390/Z370芯片组
- 硬盘的选择,三星 970 EVO Plus 和 三星 PM981 无法做为macOS系统盘安装原版,不要选择
- 显示器的选择,首选 4K 显示器,2K 以下的显示器需要开启 HiDPI,而且使用体验不好
- 无线网卡和蓝牙的选择,主板自带的WI-FI和蓝牙目前都无法驱动, 这个无解, 推荐免驱的 BCM94360CD 或者 BCM943602CS,直接插上即可使用
配置
先贴出我本次的黑苹果主机的配置信息, 如下:
项目 | 型号 | 价格 | 链接 |
---|---|---|---|
CPU | Intel i9-9900K 8核16线程 盒装CPU | 2899 | https://item.jd.com/100000634429.html |
主板 | 技嘉(GIGABYTE)Z390 AORUS PRO WIFI | 956 | https://item.jd.com/100000612305.html |
内存 | 金士顿(Kingston) DDR4 3200频 128GB(32G×4) | 4409 | https://item.jd.com/100008221061.html |
硬盘 | 三星970 EVO 1TB M.2接口(NVMe) | 1087 | https://item.jd.com/7234468.html |
显卡 | 蓝宝石 RX 580 2304sp 8G 满血版 (淘宝二手) | 1238 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.661e2e8d5l686T&id=614820302674&_u=425lenq48296 |
散热器 | 九州风神大霜塔 | 179 | https://item.jd.com/689273.html |
电源 | 长城 750W 全模组金牌电源 | 490 | https://item.jd.com/8025804.html |
显示器 | 戴尔 U2720QM 27英寸4K | 3468 | https://item.jd.com/100011317048.html |
无线网卡 | BCM94360CD | 265 | https://item.jd.com/10021401339167.html |
鼠标 | 罗技 MX Master 3 for Mac | 668 | https://item.jd.com/100014681386.html |
键盘 | Keychron K6蓝牙双模机械键盘 青轴 | 327 | https://item.jd.com/100007939581.html |
机箱 | 先马(SAMA)剑魔升级版 | 179 | https://item.jd.com/100007087962.html |
其他 | RGB风扇 x3 / DP 线 1.4版 | 130 | https://item.jd.com/100007577985.html https://item.jd.com/100008069617.html |
总计 | 16295 |
效果图
Power 显示的是当前 CPU 的功率;
Frequency 显示当前 CPU 的频率;
Temperature 显示当前 CPU 的温度,此温度是内核温度;
Utilization 显示当前 CPU 的占用率。
步骤
准备工作
- 一个容量大于等于 16G 的 U 盘
- 一台macOS操作系统的主机
- 下载 Mac 版的软件 balenaEtcher (https://www.balena.io/etcher/)
- 软件 Hackintool (https://github.com/headkaze/Hackintool)
准备安装镜像
- App Store 下载最新的操作 MacOS 操作系统,下载完成之后就可以在“应用程序”中找到
- 创建DMG文件: 打开“磁盘工具”,创建空白镜像,命名为 MyMacOS, 根据所下载的镜像的大小,分配一个合理的镜像大小,格式选择日志式,分区选择 GUID 分区类型,权限选择读写
- macOS 系统上的主机上 插入 U 盘,输入以下命令格式化 U 盘
1 | diskutil partitionDisk /dev/{YOUR_DISK_ID} GPT JHFS+ "USB" 100% |
- 双击打开 MyMacOS.dmg 文件进行挂载,输入如下命令,将下载的系统镜像文件写入 DMG 镜像中
1 | sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/MyMacOS |
- 使用 balenaEtcher 将 MyMacOS.dmg 镜像刷入 U 盘中
- 使用 Hackintool 挂载 U 盘的 UEFI 分区,将我已经配置好的
USB_EFI
整个目录拷贝进去, 并且重命名为EFI
,之后卸载分区
BIOS 配置
在技嘉官网下载最新版 Z390 主板的 BIOS 固件(https://www.gigabyte.cn/Motherboard/Z390-AORUS-PRO-WIFI-rev-10/support#support-dl-driver)并刷入
当前最新版本 F12j
进行如下配置:
- Load Optimized Defaults
- Settings -> IO Ports -> Internal Graphics -> Enabled
- Settings -> IO Ports -> DVMT Pre-Allocated -> 32M
- Settings -> IO Ports -> Wi-Fi -> Disabled
- Settings -> IO Ports -> Above 4G Decoding -> Enabled
- Settings -> IO Ports -> Wake on LAN Enable -> Disabled
- Settings -> IO Ports -> USB Configuration -> Legacy USB Support -> Disabled
- Settings -> IO Ports -> USB Configuration -> XHCI Hand-off -> Enabled
- Settings -> Miscellaneous -> Software Guard Extensions(SGX) -> Disabled
- Settings -> Miscellaneous -> Trusted Computing -> Security Device Support -> Disabled
- Boot -> CFG Lock -> Disabled
安装
- 插入 U 盘,启动时按
F12
进入启动设备选择, 选择OpenCore
, 之后选择安装 MacOS 选项 - 耐心等待跑码安装完毕, 之后会进入 MacOS 的安装界面, 先进入磁盘工具, 将要安装系统的那个硬盘抹掉, 格式选择 APFS,之后再安装 MacOS 系统, 之后等待重启
- 重启依然要使用 U 盘进行引导,进入硬盘里的 MacOS 系统
- 到这里整个系统的安装以及完成了一半了
- 注意此时进入系统是千万不要登入自己的 iCloud 账号进行使用,需要在下面生成并注入了序列号之后才可以安全的登录
后续完善
更换 EFI
使用 Hackintool 挂载 硬盘的 UEFI 分区,并且将我配置好的 EFI
目录复制进去,进行覆盖
USB 端口的配置
有 MacOS 系统的限制, 最多只允许开始使用 15个端口, 我这里就 Z390 的主板进行下面端口的开启
使用 Hackintool, 修改端口, 并导出, 注意保留 USBPorts.kext
文件以放入 Kexts 目录下, 我这里开启的端口如下配置
关闭啰嗦模式
找到 配置文件中的
1 | <key>boot-args</key> |
去掉 -v
生成序列号
使用 Hackintool 生成序列号,选择的类型为 iMac (Retina 5K, 27-inch, 2019)
之后到官网查询,如果提示序列号不合法,则该序列号可用,这时候可以将其注入以下部分
1 | <dict> |
分别是 MLB
,SystemSerialNumber
,SystemUUID
OpenCore 配置列表
OpenCore EFI
Download OpenCore RELEASE from here
ACPI
- SSDT-EC-USBX.aml
- SSDT-PLUG.aml
- SSDT-HPET.aml
- SSDT-PMC.aml
Driver
- HfsPlus.efi
- OpenRuntime.efi - Included in OpenCore package
Kext - Make sure to download RELEASE version
- Lilu.kext
- VirtualSMC.kext
- WhateverGreen.kext
- AppleALC.kext
- IntelMausi.kext
- USBInjectAll.kext - Only needed for installation media
- USBPorts.kext - Refer post installation
- SMCProcessor.kext - Included in VirtualSMC package
- SMCSuperIO.kext - Included in VirtualSMC package
Tools
- modGRUBShell.efi
- OpenShell.efi - Included in OpenCore package
- ResetSystem.efi - Included in OpenCore package
- CleanNvram.efi - Included in OpenCore package
config.plist
- Use
config_usb.plist
for installation media(USB). Rename it toconfig.plist
. - Use
config.plist
for internal boot disk.
EFI Folder Structure
USB
1 | EFI |
SSD/NVME/HDD
1 | EFI |
工作状态
目前一切都正常工作,包括声卡,网卡,Wi-Fi,蓝牙,Airdrop,随航,接力,显示分辨率,睡眠,关机,重启
遇到的坑
- 我买的主板CPU针脚上有一个针脚弯曲了, 导致有2 个内存插槽无法读取, 如下图
这种情况的具体表现是只有插在主板的 DDR4_A1 槽或者 DDR4_A2 槽或者 2 个槽都插时才能短接进入 BIOS 界面,
插入全部 4 根内存条或者只要插入 DDR4_B2 或者 DDR4_B1 时将无法进入 BIOS 界面且主板无限重启,显示器无输出且 DRAM 指示灯常亮
后来我用镊子将其矫正就可以了
- 主板的
CSM Support
选项不能关闭, 关闭会导致无法进入 BIOS, 且主板上的 VGA 等常亮
最后
目录中的 EFI
和 EFI_USB
都是我已经修改好的引导了,可以直接使用,其中 EFI
是复制到硬盘上用来引导系统的, EFI_USB
是复制到 U 盘上用来进行 U 盘引导的
引导下载地址见: https://github.com/JoyLau/Hackintosh-GIGABYTE-Z390-AORUS-PRO-WIFI-i9-9900K-RX580-BCM94360CD-OpenCore
参考资料
SpringBoot RestTemplate 支持发送 HTTPS 请求
背景
有时在项目中调用的接口是 https 的形式, 这时使用 RestTemplate 来调用请求就会出错:
1 | javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target |
下面是解决方式
配置
- 引入依赖
1 | implementation 'org.apache.httpcomponents:httpclient' |
- 代码配置
1 | import org.apache.http.conn.ssl.NoopHostnameVerifier; |
使用
之前使用方式不变:
1 | @Autowired |
使用 https RestTemplate
1 | @Autowired |