0%

解决SuperMicro主板风扇转速过低告警

现象

系统启动后风扇忽高忽低,进入IPMI后台可以看到,看到传感器日志里大量的告警

造成此问题的原因是风扇转速过低,触发了超微的风扇转速允许的下限,从而强制满速运转,而在满速后主板又很快发现没有问题,且此时温度较低,风扇开始降速,直到降速到下限以下,重复此过程。

在进入IPMI后台管理界面后风扇速度有四种智能模式可调

  • Standard: zone0和zone1 风速为50%

  • Optimal: 风速为30%

  • Full: 风速为100%

  • Heavy IO: zone0 为50%,zone1 为75%

解决方法

1. 在服务器上安装IPMItool

1
2
apt install ipmitool # Ubuntu/Debian指令
yum install ipmitool # CentOS指令

2. 设置风扇转速

1
2
3
# 风扇名可以看告警里边的对应风扇名
ipmitool sensor thresh FAN1 lower 100 125 125
ipmitool sensor thresh FANA lower 100 125 125

3. Windows 下远程操作IPMI

ipmitool windows 版 下载地址

1
2
ipmitool -H [IPMI网口IP地址] -U [IMPI账户] -P [IPMI密码] sensor thresh FAN1 lower 100 125 125
ipmitool -H [IPMI网口IP地址] -U [IMPI账户] -P [IPMI密码] sensor thresh FANA lower 100 125 125

问题

如果你运行上面的命令后,风扇转速回落后马上又返回原样,这表明服务器的自动调速覆盖了你手动设置的转速。你需要切换服务器风扇策略为全速(Full Speed),在这个策略下服务器不会使用自动调节转速,因此也不会覆盖你手动设置的转速。

运行下面的命令切换到全速模式(也可以进入IPMI界面调整):

1
2
ipmitool -H [IPMI网口IP地址] -U [IMPI账户] -P [IPMI密码] 0x30 0x45 0x01 0x01
# 最后一个0x01表示全速模式。如果为0x00则表示标准(Standard);0x02表示最优(Optimal)

参考

1.解决超微 SuperMicro 主板风扇反复高低转速问题 - 哔哩哔哩 (bilibili.com)

超微服务器Supermicro X9/X10/X11设置风扇转速 - 辰宸的备忘录 (licc.tech)

ipmitool常用命令详解_ipmitool lan set_owlcity123的博客-CSDN博客

服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[common]
# TCP通信端口
bind_port = 7000

#UDP通信端口
bind_udp_port = 7001

# 最大连接数
max_pool_count = 50

# 仪表板界面配置
dashboard_port=7500
dashboard_user=admin
dashboard_pwd=admin

# 允许使用的端口号,可以指定范围也可以用‘,’分割
allow_ports = 18081-18090,8080

服务端开机自启配置

1
2
3
sudo vim /etc/systemd/system/frps.service
sudo systemctl enable frps.service
sudo systemctl start frps.service

启动文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description = Frp Server Service
After = network.target

[Service]
Type = simple
User = nobody
Restart = on-failure
RestartSec = 5s
ExecStart = /usr/local/bin/frps -c /usr/local/etc/frp/frps.ini

[Install]
WantedBy = multi-user.target

客户端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
#替换IP地址为服务端IP
server_addr=0.0.0.0
server_port=7000

# windows远程桌面
[rdp]
type=tcp
# 映射IP
local_ip=127.0.0.1
# 映射端口(本地)
local_port=3389
# 远程端口(服务器)注意端口要在允许端口内切未被占用
remote_port=18087

准备工作

制作启动盘

使用Rufus制作启动U盘.

连接网络

参考 Linux配置网络及SSH配置

分区规划

参考 Linux硬盘分区

挂载分区

1
2
3
4
5
6
7
8
mkdir /mnt/gentoo
mount /dev/sdx? /mnt/gentoo
mkdir /mnt/gentoo/home
mount /dev/sdx? /mnt/gentoo/home
mkdir /mnt/gentoo/boot
mount /dev/sdx? /mnt/gentoo/boot
mkdir /mnt/gentoo/boot/efi
mount /dev/sdx? /mnt/gentoo/boot/efi

配置Portage

释放stage

1
2
3
4
5
# 发送stage3
scp stage3-amd64-*.tar.xz root@192.168.0.2:/mnt/gentoo
cd /mnt/gentoo
# 释放stage3
tar xpvf stage3-*.tar.bz2 --xattrs-include='*.*' --numeric-owner

挂载系统必要环境

1
2
3
4
5
6
7
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
#mount --make-rslave /mnt/gentoo/sys (不使用systemd,所以注释掉)
mount --rbind /dev /mnt/gentoo/dev
#mount --make-rslave /mnt/gentoo/dev (不使用systemd,所以注释掉)
mount --rbind /run /mnt/gentoo/run
#mount --make-slave /mnt/gentoo/run (不使用systemd,所以注释掉)

复制DNS

1
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

配置软件源

常规源

选择中国源,这一步是非必须的,提供的make.conf里已经有中国的所有源了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方式1
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

# 方式2
mkdir -p -v /mnt/gentoo/etc/portage/repos.conf
cp -v /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

#加入中国源
nano -w /mnt/gentoo/etc/portage/repos.conf/gentoo.conf:

## 源地址
sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
#sync-uri = rsync://mirrors.yun-idc.com/gentoo-portage/
二进制源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修改二进制源地址为国内源
nano -w /etc/portage/binrepos.conf/gentoobinhost.conf

# 原有内容
# ---
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consider using a local mirror.

[gentoobinhost]
priority = 1
# sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64
sync-uri = https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64/
# sync-uri = https://mirrors.ustc.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64/

如果启用二进制源需要在USE中添加 getbinpkg binpkg-request-signature

生成fstab

1
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

生成的fstab格式如下

1
2
3
UUID=......      /boot/efi      vfat      noauto,defaults,noatime,umask=0077                               0 2
UUID=...... / xfs defaults,noatime 0 1
UUID=...... /home xfs noatime,discard

系统配置

进入新系统环境

从现在开始,所有的动作将立即在新 Gentoo Linux 环境里生效。

1
2
3
4
5
chroot /mnt/gentoo /bin/bash
mkdir -p /var/db/repos/gentoo
env-update
source /etc/profile
export PS1="(chroot) ${PS1}" # 切换提示符,避免混淆

同步stage

1
emerge-webrsync

^注意: gentoo handbook上提到可以使用emerge -rsync升级软件包数据库到最近2小时的最新版,这是没有必要的,而且下载的速度会极其慢,所以不推荐这样做。单用emerge-webrsync就可以同步数据库到最近3~4天内的最新版了。

设置profile

1
2
eselect profile list     #查看profile予设值
eselect profile set X #这里先保持选择默认值,即“default/linux/amd64/17.1 (stable)”

检测cpu指令集

1
2
3
4
5
6
7
# 安装cpuid2cpuflags
emerge --ask app-portage/cpuid2cpuflags

# 查看CPU指令集
cpuid2cpuflags

echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

安装CCache(可选,加速编译)

1
2
3
4
emerge --ask ccache 
mkdir -p /var/cache/ccache
chown root:portage /var/cache/ccache -R
chmod 2775 /var/cache/ccache -R

在portage/make.conf中添加

1
2
FEATURES="ccache -test" # 在USE中 ${FEATURES}
CCACHE_DIR="/var/cache/ccache"

安装Aria2(可选,加快包下载)

1
emerge --ask aria2

在portage/make.conf中添加配置

1
2
3
4
5
6
FETCHCOMMAND="/usr/bin/aria2c -d \${DISTDIR} -o \${FILE} \
--allow-overwrite=true --max-tries=5 --max-file-not-found=2 \
--max-concurrent-downloads=5 --connect-timeout=5 --timeout=5 \
--split=5 --min-split-size=2M --lowest-speed-limit=20K \
--max-connection-per-server=9 --uri-selector=feedback \${URI}"
RESUMECOMMAND="${FETCHCOMMAND}"

配置编译选项

1
nano /mnt/gentoo/etc/portage/make.conf

^注意: 设置编译标志 -march=native (如果你知道自己处理器的代号,就用自己的处理器代号替换这里的native 比如我的是skylake,如果不确定就使用native)
[^ 注意]: 设置 MAKEOPTS=”-j8” 来定义安装软件时并行编译的数量 这个数字等于你的CPU线程数(也称为逻辑CPU数)参考MAKEOPTS WiKi

完整的配置文件如下(转自Gentoo安装流程分享(step by step),第一篇之基本系统的安装,修改了下注释格式,删除不用的部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
# GCC编译配置 -O3代表优化级别,如果采用更高的-Ofast可能会导致部分软件包编译错误,
# -march=native代表为本机cpu进行编译,如果是交叉编译需要去掉
COMMON_FLAGS="-march=skylake -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"

# 同时编译的线程数,根据cpu线程数和内存大小/2中较小的
MAKEOPTS="-j8"

PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
# 如果内存足够大(8G、16G),那么建议把编译程序时存放临时中间文件的目录设置
# 为内存的tmpfs(/tmp目录),以减少编译时对硬盘的大量读写、延长硬盘使用寿命、
# 并加快编译速度;但如果你的内存较小(<=4G),那么建议把此项注释掉,否则很多
# 程序会因内存容量不足而导致编译失败
PORTAGE_TMPDIR="/tmp"

# NOTE: This stage was built with the bindist Use flag enabled

# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C

# emerge的默认选项
EMERGE_DEFAULT_OPTS="--keep-going --with-bdeps=y --quiet --ask --verbose"
#每次安装完包之后自动清理
AUTO_CLEAN="yes"

# 如果更喜欢最新那这里用~amd64
ACCEPT_KEYWORDS="amd64"
# 接受所有许可证的软件
ACCEPT_LICENSE="*"

# 语言设置
L10N="en-US zh-CN en zh"
LINGUAS="en_US zh_CN en zh"

# intel集成显卡和nvidia显卡(不使用novueau)
VIDEO_CARDS="intel i965 iris nvidia"
# intel声卡
ALSA_CARDS="hda_intel"
# 输入设备 非笔记本去除后面的synaptics
INPUT_DEVICES="libinput synaptics"

# 设置GRUB版本
GRUB_PLATFORMS="efi-64"

# 使用ccache来大大提高重新编译时的速度,安装ccache后解除注释
# CCACHE="parallel-fetch ccache"
# ccache使用的目录
# CCACHE_DIR="/var/cache/ccache"

# 使用aria2提高下载速度(不设置也无大碍,设置的话一定要注意指令拼写正确),安装aria2后解除注释
# FETCHCOMMAND="/usr/bin/aria2c -d \${DISTDIR} -o \${FILE} \
# --allow-overwrite=true --max-tries=5 --max-file-not-found=2 \
# --max-concurrent-downloads=5 --connect-timeout=5 --timeout=5 \
# --split=5 --min-split-size=2M --lowest-speed-limit=20K \
# --max-connection-per-server=9 --uri-selector=feedback \${URI}"
# RESUMECOMMAND="${FETCHCOMMAND}"

# USE变量

# 不打算安装gnome和kde及其相关组件
FUCKDE="-gnome -gnome-shell -gnome-keyring -nautilus -kde"

# 不使用systemd plymouth consolekit 只使用elogind
# 旧教程会使用consolekit,elogind是consolekit未来的替代品
FUCKSV="-bindist -mdev elogind -dhcpcd -oss -grub -plymouth -consolekit"

SOFTWARE="sudo -icu client git openmp minizip udev blkid efi hwdb smack \
acpi ccache dbus policykit udisks"

# 对于音频相关软件使用pulseaudio alsa jack特性
AUDIO="alsa jack pulseaudio"

# 网络相关
NET="network networkmanager connection-sharing wifi http2"

# 图形相关
VIDEO="X vulkan layers glamor nvidia gallium"

ELSE="cjk emoji"

# 使用二进制软件包
# BIN_PKG="getbinpkg"

# 定义需要的USE变量
USE="${FUCKDE} ${FUCKSV} ${SOFTWARE} ${AUDIO} ${NET} ${VIDEO} ${ELSE} ${CCACHE}"


# 设置镜像站为清华镜像站
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"
# 备选
# GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
# GENTOO_MIRRORS="https://mirrors.aliyun.com/gentoo/"
# GENTOO_MIRRORS="https://mirrors.cloud.tencent.com/gentoo/"
# GENTOO_MIRRORS="https://mirrors.huaweicloud.com/gentoo/"

# emerge时用到的代理 需要代理时候自行设置
# http_proxy="http://127.0.0.1:8889"
# https_proxy="http://127.0.0.1:8889"

永久禁用nouveau驱动模块

强烈要求你禁用Nouveau驱动!!能省掉以后很多莫名其妙的麻烦!

1
2
3
4
5
6
7
mkdir /etc/modprobe.d/
nano -w /etc/modprobe.d/blacklist.conf

# 写入一下内容
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0

即便在编译内核前就已经设置内核禁用Nouveau驱动了,但是内核安装时还是会默认把nouveau驱动作为内核模块自动加载。启用了nouveau驱动模块的内核会出现各式各样的莫名其妙的数不清的问题,所以为了避免以后出现这些问题,必须禁用nouveau模块。

内核配置和编译

某些驱动程序在工作之前需要在系统上安装其他固件。这通常是网络接口的情况,尤其是无线网络接口。此外,在使用开源驱动程序时,来自AMD,Nvidia和Intel等供应商的现代视频芯片通常需要外部固件文件。大多数固件都封装在sys-kernel / linux-firmware中:

1
emerge --ask --quiet sys-kernel/linux-firmware

除了独立显卡硬件和网络接口之外,CPU 可能也需要固件更新。通常这种固件被称为微码(microcode)。有时需要更新版本的微码来修补 CPU 硬件中的不稳定性、安全问题或其他复杂的错误。

AMD CPU 的微码更新在前面提到的 sys-kernel/linux-firmware 软件包内分发。Intel CPU 的微码可以在 sys-firmware/intel-microcode 包中找到,并且需要单独安装

1
2
# Intel CPU 执行
emerge --ask sys-firmware/intel-microcode

安装内核源码

1
2
3
4
5
emerge --ask sys-kernel/gentoo-sources

# 如果安装多个版本内核时执行
eselect kernel list # 查看内核列表
eselect kernel set 1 # 选择内核版本

三种方法安装内核

安装系统时可选择安装二进制内核,系统安装完后再配置编译内核,参考 配置Linux内核 - Gentoo Wiki

  1. 全自动安装

    当为基于 amd64 的系统安装和编译内核时,Gentoo 推荐使用 sys-kernel/gentoo-sources 软件包

    1
    emerge --ask sys-kernel/installkernel
  2. 混合安装(推荐方式)

    生成内核配置文件

    将genkernel的默认内核配置文件“generated-config”复制过来,里面已经设置好了绝大部分应用场景以及绝大部分硬件驱动的配置,非常方便,值得借过来使用,只需要在自己手动配置内核的时候将其加载,在其基础上做一点点轻微的修改或完全不修改都可以,对内核新手极其友好!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    emerge --ask sys-kernel/genkernel

    # 以genkernel的配置文件为基础进行自定义配置
    cp /usr/share/genkernel/arch/x86_64/generated-config /usr/src/linux/

    # 备份
    cp /usr/src/linux/generated-config /usr/src/linux/generated-config.bak

    # 编译
    genkernel --mountboot --install all

    ^注意: 首先先要加载(“Load”)刚才生成的genkernel默认内核配置文件“1.config”,然后在其基础上只需按需作轻微的修改即可(我是只修改了CPU架构为“Core 2/newer Xeon”,Preemption Model:“Low-Latency Desktop”,Timer frequecy 1000hz,Timer tick handling:“tickless idle”,Cputime accounting:“Simple tick based cputime accounting”,去掉了不需要的文件系统支持,去掉了对AMD CPU的支持,禁用Nouveau驱动)。“Support for extended (non-PC) x86 platforms”这一项取消掉。 之后“Save”你的设置,并且“Exit”即可。
    ^注意: 如果想在以后支持jack低延迟实时音频组件(Jack-Audio-Connection-Kit),则还需要vim 1.config,手动设置“CONFIG_CGROUPS=y”、“CONFIG_CGROUP_SCHED=y”、“CONFIG_RT_GROUP_SCHED=y”,然后重新make menuconfig载入保存1.config一遍,接下来再编译内核。
    ^注意: 使用nvidia显卡闭源驱动,还需要将内核配置中“CONFIG_I2C_NVIDIA_GPU”这一项禁用,否则会和官方nvidia-drivers冲突!!!

  3. 全手动安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    emerge sys-apps/pciutils

    cd /usr/src/linux
    # 配置内核
    make menuconfig

    # 编译内核
    make -j12 #(CPU核心数根据机器cpu调整)
    make modules_install
    make install

使用二进制内核

1
2
# 安装二进制内核
emerge --ask sys-kernel/gentoo-kernel-bin

用dracut生成内核的initramfs,快速且方便,新手友好

1
2
3
4
5
emerge --ask sys-kernel/dracut

cd /boot

dracut --hostonly

或者使用genkernel生成内核的initramfs

1
2
cp /usr/src/linux/1.config /etc/kernels/kernel-config-<内核版本号>-gentoo-x86_64
genkernel --install initramfs

系统环境配置

配置系统时区

1
2
3
4
5
6
ls /usr/share/zoneinfo
echo "Asia/Shanghai" > /etc/timezone

# 解决时间差8小时问题(双系统时会遇到Windows时间不对)
sudo rm /etc/localtime
sudo ln -sv /usr/share/zoneinfo/Universal /etc/localtime

配置编码

1
2
3
4
5
6
7
8
nano -w /etc/locale.gen 		#将以下几项取消注释,如果没有手动输入

en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK
zh_CN.UTF-8 UTF-8

locale-gen # 更新

设置系统locale

1
2
3
4
5
6
7
8
#查看可用系统时区和地区配置
eselect locale list

#这里只能选择“en-US.utf8”!!假如设置成了中文后,整个系统的终端命令行会乱码!!!
eselect locale set X

# 更新环境
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

配置sudo自动补全

1
2
3
4
5
6
sudo emerge --ask bash-completion

# 添加 bash-completion 全局 USE 标记
sudo vim /etc/protage/make.conf
USE="... bash-completion"
sudo emerge --avuDN world

安装网络工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 无线
emerge --ask net-wireless/iw
emerge --ask net-wireless/wpa_supplicant

# 有线
emerge --ask net-misc/netifrc # openrc 自带
# emerge --ask net-misc/systemd-networkd

# PPPoE环境
emerge --ask net-dialup/ppp

# 如果使用GUI可跳过
# 要在引导时激活网络接口,需要将它们添加到默认运行级别
# 首先使用 ifconfig 查看网络接口名称
cd /etc/init.d/
ln -s net.lo net.eno1
rc-update add net.eno1 default

安装配置networkmanager

最方便支持多种联网方式的工具是NetworkManager,基本满足所有需求,但同时它的依赖有点多。如果使用桌面换进的话建议安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
nano -w /etc/portage/make.conf:
USE=“networkmanager connection-sharing dhclient policykit ppp wifi -dhcpcd”

emerge net-misc/networkmanager

nano -w /etc/dhcp/dhclient.conf:
send host-name "Gentoo" #your hostname

nano -w /etc/NetworkManager/NetworkManager.conf
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt


nano -w /etc/NetworkManager/NetworkManager.conf
[main]
plugins=keyfile
dns=dnsmasq
hostname-mode=none

rc-update del dhcpcd
rc-update add NetworkManager default
# systemctl disable dhcpcd
# systemctl enable networkmanager

#gpasswd -a <你的桌面使用用户名> plugdev #没有这一步,用户将不能使用networkmanager,也就不能上网。不过先跳过这一步,在设置系统用户的时候再做。

nano -w /etc/dnsmasq.conf:
server=114.114.114.114

安装必要的工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 系统日志
emerge --ask app-admin/sysklogd
rc-update add syslogd default
# systemctl enable syslogd
# systemctl start syslogd

# 守护进程工具
emerge --ask sys-process/cronie
rc-update add cronie default
# systemctl enable cronie
# systemctl start cronie

# 文件索引
emerge --ask sys-apps/mlocate

# 电源管理
emerge --ask sys-power/acpid
rc-update add acpid default
# systemctl enable acpid
# systemctl start acpid

emerge sys-power/thermald
rc-update add thermald default
# systemctl enable thermald
# systemctl start thermald

# 设备管理工具
emerge virtual/udev
emerge --oneshot sys-fs/eudev
rc-update add udev sysinit
# systemctl enable udev
# systemctl start udev

# 定时任务管理
emerge crone

配置系统用户

安装sudo

1
2
3
emerge app-admin/sudo

nano -w /etc/sudoers

%wheel ALL=(ALL) ALL 这一行去掉注释

添加用户

1
2
useradd -m -G users,wheel,usb,portage,video,audio -s /bin/bash [用户名]
chmod 700 /home/[用户名] -R

设置密码

1
2
3
4
# 设置root密码
passwd root

passwd {用户名}

添加操作系统启动项

添加grub配置

1
2
nano -w /etc/portage/make.conf:
GRUB_PLATFORMS="efi-64"

安装grub2

1
2
emerge --ask sys-boot/grub:2
emerge --ask sys-boot/os-prober

grub安装到硬盘并生成开机启动项

1
2
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
grub-mkconfig -o /boot/grub/grub.cfg
1
mount -o remount,rw /sys/firmware/efi/efivarsos-prober

如果出现No space left on device,请运行以下命令,之后再重复上述步骤

1
2
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
rm /sys/firmware/efi/efivars/dump-*

grub默认配置添加自定义配置,可提高intel cpu的稳定性和性能

1
2
3
4
nano -w /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="intel_idle.max_cstate=0 processor.max_cstate=1"

grub-mkconfig -o /boot/grub/grub.cfg

清理

1
2
3
4
5
6
7
8
9
10
11
12
rm /stage3-*.tag.ge
# 退出chroot
exit

# 卸载
umount -lR /mnt/gentoo

# 重启
reboot

# 成功开机并进入系统后
grub-mkconfig -o /boot/grub/grub.cfg

如果开启不正常参考挂载文件系统(不要执行分区和mkfs操作),可重新chroot进入系统修改错误的配置。

桌面环境

安装基础环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 旧教程中使用 x11-drivers/xf86-video-intel(Intel显卡),这个驱动已没人更新维护
# 取而代之的的是 x11-base/xorg-drivers 和 media-libs/mesa
emerge --ask x11-base/xorg-drivers
emerge --ask media-libs/mesa

# 英伟达显卡
emerge --ask x11-drivers/nvidia-drivers

# 安装xorg-server
emerge --ask x11-base/xorg-server

# 安装双显卡设置工具
emerge --ask x11-apps/xrandr

# 让nvidia自动设置双显卡prime配置
rm /etc/X11/xorg.conf && nvidia-xconfig --prime

# 安装完更新当前系统组件环境
env-update && source /etc/profile

^注意: 以后每次重新编译安装内核kernel后,均须要运行一遍“emerge @module-rebuild”,重新编译安装nvidia驱动模块加载到内核之中,否则nvidia驱动无法加载!!!

LightDM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 安装LightDM,使用KDE可忽略
sudo emerge --ask x11-misc/lightdm

# 如果不安装桌面管理器需要加入环境,登录后自动启动桌面
echo XSESSION=\"awesome\" > /etc/env.d/90xsession
env-update && source /etc/profile

# openrc
nano -w /etc/conf.d/display-manager
DISPLAYMANAGER="lightdm"

# 设置默认开机启动
rc-update add display-manager default
# 设置dubs默认开机启动,虽然display-manager也会启动它,但有时候会出现奇怪的问题
rc-update add dbus default

# 手动启动
rc-service dbus start
rc-service display-manager start

# systemd
systemctl enable lightdm.service

KDE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装KDE桌面可忽略上边LightDM
emerge --ask sddm
emerge --ask kde-frameworks/plasma
emerge --ask kde-plasma/plasma-meta

# 安装Dock
# 安装完打开latte-dock后会自动设置为开机自启动
emerge --ask kde-misc/latte-dock

# 修改登陆管理器配置文件
nano -w /etc/conf.d/xdm

# --- xdm内容
DISPLAYMANAGER="sddm"

#---

# 添加SDDM开机启动
rc-update add sddm default
# 启动SDDM
rc-service sddm start

# Systemd
systemctl enable sddm
systemctl start sddm

Awesome

1
2
3
4
5
6
7
8
9
10
11
12
13
# awesome 平铺式桌面
emerge --ask x11-wm/awesome

# 测试
mkdir -p ~/.config/awesome/
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua
awesome -k

# 壁纸支持
emerge --ask media-gfx/feh

# 在~/.config/awesome/theme/theme中添加一下内容
theme.wallpaper_cmd = { "wesetbg -f .config/awesome/themes/awesome-wallpaper.png" }

Mate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 选择profile
eselect profile list
eselect profile set 0 # 选择default/linux/amd64/23.0/desktop
# 更新
emerge -auvDU @world

# Meta 桌面
emerge --ask mate-base/mate

# 修改xsession配置
nano -w /etc/env.d/90xsession
#--- 90xsession内容
XSESSION="Mate"

#---

# 修改LightDM配置(需要安装LightDM)
nano -w /etc/conf.d/display-manager
#--- display-manager内容
DISPLAYMANAGER="lightdm"

Xfce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# xfce4桌面
emerge --ask xfce-base/xfce4-meta

# 测试桌面启动指令
startxfce4 # 启动Xfce桌面

# Pulseaudio音量控制
emerge --ask xfce-extra/xfce4-volumed-pulse

# 蓝牙音乐播放组件
emerge --ask xfce-extra/xfce4-pulseaudio-plugin

# 显示所有正在运行的程序的列表,以及每个程序占用的CPU和内存消耗。
emerge --ask xfce-extra/xfce4-taskmanager

# 监视和管理电源使用情况的应用程序。 这对笔记本电脑特别重要!
# 电源管理器允许用户调节屏幕亮度,选择最大性能或节电模式,
# 并在盖子关闭或按下按钮时设置休眠,暂停和关闭操作
emerge --ask xfce-extra/xfce4-power-manager

# 适合笔记本电脑用户。 它显示电池百分比,剩余时间,电源(交流或电池),风扇状态,警告,
# 甚至可以配置为在特定功率级别执行命令。 此功能可用于在电池电量几乎耗尽时将笔记本电脑置于休眠模式。
xfce-extra/xfce4-battery-plugin

# 添加几个窗口管理器主题
emerge --ask x11-themes/xfwm4-themes

# 一个X11终端,比准系统更可配置和有用 xterm
emerge --ask x11-terms/xfce4-terminal

# Xfce的默认图形文件管理器。
emerge --ask xfce-base/thunar

# 允许用户从Thunar内预览某些类型的文件,例如图像和字体。
emerge --ask xfce-extra/tumbler

# manages自动挂载可移动介质和驱动器。
emerge --ask xfce-extra/thunar-volman

# 嵌入面板的一个小命令行。 它比打开终端运行命令更快。
emerge --ask xfce-extra/xfce4-verve-plugin

# 提供一种方便的方法,只需点击鼠标即可安装/etc/fstab中列出的设备。
emerge --ask xfce-extra/xfce4-mount-plugin

# 允许用户监视硬件传感器,例如CPU温度,风扇RPM,硬盘驱动器温度,主板电压等。
emerge --ask xfce-extra/xfce4-sensors-plugin

中文字体

1
2
3
4
emerge --ask media-fonts/arphicfonts
emerge --ask media-fonts/noto-cjk
emerge --ask media-fonts/source-han-sans
emerge --ask media-fonts/wqy-microhei

输入法

1
2
3
4
5
6
7
8
9
10
11
12
# 输入法主题框架
# 其中, app-i18n/fcitx:5 是 fcitx 的主程序
#     app-i18n/fcitx-configtool:5 是它的配置工具
#     app-i18n/fcitx-qt:5 用于支持在 qt 程序上使用它
#     app-i18n/fcitx-gtk:5 用于支持在 gtk 程序上使用它
emerge -vj app-i18n/fcitx:5 app-i18n/fcitx-configtool:5 app-i18n/fcitx-qt:5 app-i18n/fcitx-gtk:5

# 安装完成后再用户的~/.xsession文件内添加
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export SDL_IM_MODULE=fcitx

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 使用常规(基于源)更新
sudo emerge --ask --verbose --update --deep --newuse @world

# 等价简写
emerge -avuDN @world

# 使用二进制包更新系统
emerge --ask --verbose --update --deep --changed-use --getbinpkg @world

# 告诉 Portage 不要对一些指定的包或分类创建二进制包
emerge -uDN @world --buildpkg --buildpkg-exclude "virtual/* sys-kernel/*-sources"

# 合并use标记
etc-update
-3 # 自动合并

# 清理旧版本的内核
emerge --prune sys-kernel/gentoo-kernel sys-kernel/gentoo-kernel-bin

emerge 使用二进制包选项说明

选项 说明
–usepkg (-k) 尝试使用本地可用的 packages 目录中的二进制包。如果未找到二进制包,将执行常规(基于源)安装。
–usepkgonly (-K) 类似 –usepkg (-k) ,但如果找不到二进制包,则失败。
–getbinpkg (-g) 从远程二进制包主机下载二进制包。如果未找到二进制包,将执行常规(基于源)安装。
–getbinpkgonly (-G) 类似于 –getbinpkg (-g) ,但如果无法下载二进制包,则会失败

常用软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo emerge --ask media-video/mpv

# 电子邮件客户端
sudo emerge mail-client/thunderbird

# 视频播放器
sudo emerge media-video/mplayer

# 音乐播放器
sudo emerge media-sound/exaile

# 虚拟机
sudo emerge app-emulation/virt-manager
sudo emerge app-emulation/virtualbox

参考文章

Gentoo AMD64 Handbook - Gentoo Wiki

开始使用gentoo linux——gentoo安装笔记(上)

开始使用gentoo linux——gentoo安装笔记(下)

Gentoo安装流程分享(step by step),第二篇之KDE Plasma桌面的安装配置 - 知乎 (zhihu.com)

gentoo linux配置intel和nvidia双显卡电脑,使用prime方案 - 简书 (jianshu.com)

Beego

官网 https://beego.me

github https://github.com/astaxie/beego

优点:

  • 很全很简单
  • 不仅追求性能,同样追求开发效率,解放程序员的生产力
  • 社区良好,中文开发者很多,找资料很方便
  • 代码文档化做的很优秀

缺点:

  • 比较臃肿,因为提供了很多支持,当遇到坑时需要花很多时间查源码解决问题
  • 模块众多,这既是优点也是缺点

Echo

官网 https://echo.labstack.com

github https://github.com/labstack/echo

优点:

  • 路由性能高
  • 更轻量级的web开发框架

缺点:

  • 调试不方便,报错信息不友好
  • 路由性能虽高,但是路由实现的算法底层不支持路由排序,会引起路由冲突

Gin

官网 https://gin-gonic.github.io/gin

github https://github.com/gin-gonic/gin

优点:

  • 封装比较好,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
  • 运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json

缺点:

  • 封装比较好,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
  • 运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json

Iris

官网 https://iris-go.com

github https://github.com/kataras/iris

优点:

  • 是社区驱动的Go语言Web 框架,支持http2,完备 MVC 支持。
  • 极简主义风格
  • 社区活跃度和文档支持都非常到位

缺点:

  • 不够稳定,社区里有人反馈:最新的release版本是alpha版非常不稳定
  • 支持Iris的人很多,但是目前仍然不如Gin和Echo多

GB/T 35134-2017 物联网智能家居 设备描述方法

GB/T 35143-2017 物联网智能家居 数据和设备编码

GB/T 35317-2017 公安物联网系统信息安全等级保护要求

GB/T 35318-2017 公安物联网感知终端安全防护技术要求

GB/T 35319-2017 物联网 系统接口要求

GB/T 35419-2017 物联网标识体系 Ecode在一维条码中的存储

GB/T 35420-2017 物联网标识体系 Ecode在二维码中的存储

GB/T 35421-2017 物联网标识体系 Ecode在射频标签中的存储

GB/T 35422-2017 物联网标识体系 Ecode的注册与管理

GB/T 35423-2017 物联网标识体系 Ecode在NFC标签中的存储

GB/T 35592-2017 公安物联网感知终端接入安全技术要求

GB/T 35136-2017 智能家居自动控制设备通用技术要求

GB/T 35255-2017 LED公共照明智能系统接口应用层通信协议

GB/T 35291-2017 信息安全技术 智能密码钥匙应用接口规范

GB/T 30269.502-2017 信息技术 传感器网络 第502部分:标识:传感节点标识符解析

GB/T 30269.602-2017 信息技术 传感器网络 第602部分:信息安全:低速率无线传感器网络网络层和应用支持子层安全规范

GB/T 30269.801-2017 信息技术 传感器网络 第801部分:测试:通用要求

GB/T 30269.803-2017 信息技术 传感器网络 第803部分:测试:低速无线传感器网络网络层和应用支持子层

GB/T 35129-2017 面向食品制造业的射频识别系统 环境适应性要求

GB/T 35130-2017 面向食品制造业的射频识别系统 射频标签信息与编码规范

GB/T 35135-2017 面向食品制造业的射频识别系统 应用要求

GB/T 17626.6-2017 电磁兼容 试验和测量技术 射频场感应的传导骚扰抗扰度

GB/T 35290-2017 信息安全技术 射频识别(RFID)系统通用安全技术要求

GB/T 35120-2017 制造过程物联的数字化模型信息交换规范

GB/T 35122-2017 制造过程物联的数字化模型信息表达规范

GB/T 35128-2017 集团企业经营管理信息化核心构件

GB/T 34966.1-2017 卫星导航增强信息互联网传输 第1部分:播发体制

GB/T 34966.2-2017 卫星导航增强信息互联网传输 第2部分:接口要求

GB/T 34966.3-2017 卫星导航增强信息互联网传输 第3部分:数据传输格式

GB/T 35403.1-2017 国家物品编码与基础信息通用规范 第1部分:总体框架

GB/T 35589-2017 信息技术 大数据 技术参考模型

golang.org/x/net/websocket示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main

import (
"fmt"
"log"
"net/http"

"code.google.com/p/go.net/websocket"
)

func echo(ws *websocket.Conn) {
var err error
var i int
for {
var reply string

//建立连接后接收来自客户端的信息reply
if err == websocket.Message.Receive(ws, &reply); err != nil {
fmt.Println("error, can't receive message ...")
break
}

fmt.Println("recevied from client: " + reply)
i++

// 把收到的信息进行处理,可以做过滤也可以返回国定信息
msg := "received: " + reply
fmt.Println("send to client: " + msg)
fmt.Println(i)

// 返回消息给客户端
if err = websocket.Message.Send(ws, msg); err != nil {
fmt.Println("error,can't send message ...")
break
}
}
}

func main() {
http.Handle("/", websocket.Handle(echo))
// 访问服务器地址,ws://127.0.0.1:8088
if err := http.ListenAndServe(":8088", nil); err != nil {
log.Fatal("listen and serve: ", err)
}
}

github.com/gorilla/websocket示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main

import (
"log"
"net/http"

"github.com/gorilla/websocket"
)

var (
upgrader = websocket.Upgrader{
// 读取缓冲区空间大小
ReadBufferSize: 1024,
// 写入缓冲区空间大小
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
)

func wsHandler(w http.ResponseWriter, r *http.Request) {
//完成握手升级为websocket长连接,使用conn发送和接收消息
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("upgrade: ", err)
return
}
defer conn.Close()

for {
messageType, msg, err := conn.ReadMessage()
if err != nil {
log.Println("reading error ...", err)
return
}
log.Printf("read from client msg: %s \n", msg)

if err := conn.WriteMessage(messageType, msg); err != nil {
log.Println("writing error ...", err)
return
}
log.Printf("write msg to client: %s \n", msg)
}
}

func main() {
// 监听地址 ws://127.0.0.1:8088
http.HandleFunc("/", wsHandler)
err := http.ListenAndServe(":8088", nil)
if err != nil {
log.Fatal("listen and serve ", err.Error())
}
}

https://blog.csdn.net/maizi314/article/details/103979437
https://blog.csdn.net/wushang923/article/details/9226529
https://www.cnblogs.com/lonelyxmas/p/7979743.html
https://blog.csdn.net/yangyy9611/article/details/17464133
https://lindexi.oschina.io/lindexi/post/WPF-%E4%BD%BF%E7%94%A8%E5%B0%81%E8%A3%85%E7%9A%84-SharpDx-%E6%8E%A7%E4%BB%B6.html
https://blog.csdn.net/weixin_34320159/article/details/86132420
https://blog.csdn.net/wangsunjun/article/details/8894952
https://www.codeproject.com/Articles/15610/Regex-Validation-in-WPF
https://www.cnblogs.com/mantian/p/3816834.html
https://cloud.tencent.com/developer/ask/76782/answer/132738
https://blog.csdn.net/ZZZWWWPPP11199988899/article/details/77620211
https://blog.csdn.net/qq_38888555/article/details/82118505
https://blog.csdn.net/lwwl12/article/details/78472235
https://blog.walterlv.com/post/win10/2017/10/02/wpf-transparent-blur-in-windows-10.html
http://toto0668.blog.163.com/blog/static/30990252201691441716893/
https://blog.csdn.net/catshitone/article/details/78522931

https://blog.csdn.net/Jason_LiQuan/article/details/109717954
https://www.jianshu.com/nb/78768
https://www.hangge.com/blog/cache/detail_2351.html
https://unblocked-pw.github.io/
https://blog.csdn.net/ewtewtewrt/article/details/110161010
https://bthub11.xyz/cn
https://blog.csdn.net/ewtewtewrt/article/details/110382703
https://www.tpbaysproxy.com/
https://github.com/fwonggh/Bthub
https://limetorrent.cc/
https://blog.csdn.net/woaizard100/article/details/80910356
https://blog.csdn.net/woaizard100/category_7776741.html
https://cloud.tencent.com/developer/article/1671077
https://www.cnblogs.com/harrychinese/p/quartz_net.html#:~:text=Quartz.Net%20%E6%9C%89%E4%B8%A4%E7%B1%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%2C%201.%20Quartz.%E7%B3%BB%E7%BB%9F%E7%BA%A7%E5%88%AB%E9%85%8D%E7%BD%AE%2C%20%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%BA%20quartz.config%20%2C%20%E6%98%AFjava,job%2Ftrigger%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%2C%20%E9%BB%98%E8%AE%A4%E5%90%8D%E7%A7%B0%E4%B8%BA%20quartz_jobs.xml%2C%20%E7%94%A8%E6%9D%A5%E9%85%8D%E7%BD%AE%20job%20%E5%92%8C%20trigger%20%E5%AE%9A%E4%B9%89%E4%BF%A1%E6%81%AF.
https://www.cnblogs.com/z-huan/p/7412181.html
https://www.cnblogs.com/abeam/p/8044460.html
https://blog.csdn.net/freewebsys/article/details/107950520
https://cloud.tencent.com/developer/article/1171966
https://blog.csdn.net/mr_zhongjie/article/details/106916512
https://www.jianshu.com/p/e48dbd087133
https://blog.csdn.net/tianhuanqingyun/article/details/90454329
https://blog.csdn.net/Frank_Abagnale/article/details/114333740
https://blog.csdn.net/emqx_broker/article/details/106490836
https://blog.csdn.net/qq_36827625/article/details/106502620
https://blog.csdn.net/qq_41626768/article/details/109384703
https://www.jianshu.com/p/af515094244b
https://my.oschina.net/LFAPAC/blog/4522385
https://www.jianshu.com/p/f6b7f6781481
https://mp.weixin.qq.com/s?__biz=MzI1OTI5NjU0Mg==&mid=2247484968&idx=1&sn=44e773b6a0df47b7634ca5f8c1014649&chksm=ea7a5a59dd0dd34f002b01a5249e0afe61ae9597d36949abb95cc2e28c2e085cfdd68b59c26e&scene=132#wechat_redirect
https://blog.csdn.net/flystreet7/article/details/122086529