0%

准备工作

制作启动盘

官方镜像
Minimal CD Stage
国内加速
清华大学开源软件镜像站
中国科技大学开源镜像站

使用Rufus制作启动U盘.

连接网络

Linux配置网络及SSH配置

参考 Linux配置网络及SSH配置

分区规划

Linux硬盘分区

参考 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
6
7
8
# 使用命令行浏览器下载stage
links http://www.gentoo.org/main/en/mirrors.xml

# 发送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/

配置软件源

常规源

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

1
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf   
创建主仓库
1
2
3
4
5
6
7
8
9
10
11
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
chroot /mnt/gentoo /bin/bash
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
3
4
FEATURES="ccache -test" 
CCACHE_DIR="/var/cache/ccache"

USE="... ${FEATURES}" # 在USE中添加${FEATURES}

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

1
emerge --ask aria2

在portage/make.conf中添加配置

1
2
3
4
5
6
7
DISTDIR="/var/cache/distfiles"
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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}"

# 源代码包构建时传递给`make`的参数
# 同时编译的线程数,根据cpu线程数和内存大小/2中较小的
MAKEOPTS="-j8"

PORTDIR="/var/db/repos/gentoo"

# Portage存储下载的源代码归档的位置,默认为新安装的`/var/cache/distfiles`
DISTDIR="/var/cache/distfiles"

#Portage临时文件的位置,默认为`/var/tmp`
# 如果内存足够大(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

# 设置镜像站为清华镜像站
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的默认选项
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变量
# 用户希望在系统中启用的Portage特性列表,影响Portage的行为。
# 由于这是一个增量变量,可以在不直接覆盖通过 Gentoo profile
# 实现的FEATURES值的情况下添加FEATURES值。
FEATURES=""

# gnome和kde及其相关组件
DESK_ENV="-gnome -gnome-shell -gnome-keyring -nautilus -kde icu"

# 不使用systemd plymouth consolekit 只使用elogind
# 旧教程会使用consolekit,elogind是consolekit未来的替代品
FUCKSV="-bindist -mdev elogind -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 dhclient \
-dhcpcd policykit nftables"

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

ELSE="cjk emoji"

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

# 二进制包保存路径
# PKGDIR="/var/cache/binpkgs"

# 使用二进制软件包,加入USE生效
# BIN_PKG="getbinpkg"

# 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模块。

内核配置和编译

安装内核源码

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

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

某些驱动程序在工作之前需要在系统上安装其他固件。这通常是网络接口的情况,尤其是无线网络接口。此外,在使用开源驱动程序时,来自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

三种方法安装内核

安装系统时可选择安装二进制内核,系统安装完后再配置编译内核,参考 配置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

    ^注意如果想在以后支持jack低延迟实时音频组件(Jack-Audio-Connection-Kit),则需要vim generated-config,手动设置“CONFIG_CGROUPS=y”、“CONFIG_CGROUP_SCHED=y”、“CONFIG_RT_GROUP_SCHED=y”,然后重新make menuconfig载入保存generated-config一遍,接下来再编译内核。
    ^注意: 使用nvidia显卡闭源驱动,需要将内核配置中“CONFIG_I2C_NVIDIA_GPU”这一项禁用,否则会和官方nvidia-drivers冲突!!!

  3. 全手动安装

    1
    2
    3
    4
    5
    emerge sys-apps/pciutils

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

![[Gentoo安装/IMG-20241210170128644.png]]
有些内核选项是必须的,必须编译到内核中,而不是作为模块加载。*表示包括到内核中,M表示作为模块加载,[]只有包括到内核中和排除在外两种选项,<>则有包括到内核中、排除在外和以模块加载三种选项。下面这些选项都必须以*方式编译到内核中。

devtmpfs支持。

1
2
3
4
Device Drivers --->
Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs

SCSI磁盘支持。

1
2
3
Device Drivers --->
SCSI device support --->
<*> SCSI disk support

选择支持的文件系统。因为ESP分区用的FAT32格式化的,根目录用的XFS格式化的,所以这里这两项(FAT32也就是VFAT)必须包括到内核中,虚拟内存和proc文件系统也是必选的。其实这里还可以取消掉不需要的文件系统,但是对于新手不建议取消任何自己不明白的东西,很容易弄的最后内核没办法启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
File systems --->
< > Second extended fs support
< > The Extended 3 (ext3) filesystem
<*> The Extended 4 (ext4) filesystem
< > Reiserfs support
< > JFS filesystem support
< > XFS filesystem support
< > Btrfs filesystem support
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support

Pseudo Filesystems --->
[*] /proc file system support
[*] Tmpfs virtual memory file system support (former shm fs)

如果处理器是多核的,还需要开启SMP(对称多处理器支持)。

1
2
Processor type and features  --->
[*] Symmetric multi-processing support

USB也必须启用

1
2
3
4
5
6
7
8
9
10
11
Device Drivers --->
HID support --->
-*- HID bus support
<*> Generic HID driver
[*] Battery level reporting for HID devices
USB HID support --->
<*> USB HID transport layer
[*] USB support --->
<*> xHCI HCD (USB 3.0) support
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD (USB 1.1) support

系统体系相关的内核配置

因为选择了multlib,所以32和64位的程序都会安装。为了支持32位程序,必须启用32位程序模拟功能。这里其实倒是不用怎么改,默认已经都选上了。

1
2
3
4
5
6
7
8
9
10
11
12
Processor type and features  --->
[*] Machine Check / overheating reporting
[*] Intel MCE Features
[*] AMD MCE Features
Processor family (AMD-Opteron/Athlon64) --->
( ) Opteron/Athlon64/Hammer/K8
( ) Intel P4 / older Netburst based Xeon
( ) Core 2/newer Xeon
( ) Intel Atom
(*) Generic-x86-64
Binary Emulations --->
[*] IA32 Emulation

启用GPT支持,因为前面我用的GPT分区表,EFI启动方式,所以这两项也必须启用。

1
2
3
4
-*- Enable the block layer --->
Partition Types --->
[*] Advanced partition selection
[*] EFI GUID Partition support

EFI的支持。

1
2
3
4
5
6
7
8
Processor type and features  --->
[*] EFI runtime service support
[*] EFI stub support
[*] EFI mixed-mode support

Firmware Drivers --->
EFI (Extensible Firmware Interface) Support --->
<*> EFI Variable Support via sysfs
1
2
3
4
# 编译内核
make -j12 #(CPU核心数根据机器cpu调整)
make modules_install
make install

使用二进制内核

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

可选:生成一个initramfs

在某些情况中需要建立一个initramfs——一个基于内存的初始化文件系统。最觉的原因是当重要的文件系统位置(如/usr/或/var/)在分离的分区。通过一个initramfs,这些分区可以使用initramfs里面的工具来完成挂载。

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

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

cd /boot

dracut --hostonly

或者使用genkernel生成内核的initramfs

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

系统环境配置

配置主机名

1
2
3
4
#nano -w /etc/conf.d/hostname

echo "HOSTNAME" > /etc/hostname

配置系统时区

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

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

sudo emerge --config sys-libs/timezone-data

配置编码

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 app-shells/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
18
# 无线
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

![[Gentoo安装/IMG-20241210170128726.png]]
安装配置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
# 系统日志
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

配置系统用户

安装sudo

1
2
3
emerge app-admin/sudo

nano -w /etc/sudoers

%wheel ALL=(ALL) ALL 这一行去掉注释,如果希望执行sudu不需要密码则取消注释%wheel ALL=(ALL) NOPASSWD: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 {用户名}

添加操作系统启动项

/etc/portage/make.conf中添加grub配置

1
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驱动无法加载!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
lsmod | grep nvidia
sudo rmmod nvidia
sudo modprobe nvidia

lsmod|grep nvidia

sudo vim /etc/modules-load.d/nvidia.conf:
nvidia

sudo vim /etc/modprobe.d/nvidia-drm.conf:
options nvidia-drm modeset=1

sudo rc-update add modules boot
sudo reboot

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
# 安装KDE桌面可忽略上边LightDM
emerge --ask x11-misc/sddm
emerge --ask kde-plasma/plasma-meta

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

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

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

#---

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

# Systemd
Rsystemctl enable xdm
systemctl start xdm

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
emerge --ask alsa-utils
emerge --ask alsa-plugins
emerge --ask

中文字体

1
2
3
4
5
6
7
8
emerge --ask media-fonts/arphicfonts
emerge --ask media-fonts/noto-cjk
emerge --ask media-fonts/source-han-sans
emerge --ask media-fonts/wqy-microhei
emerge --ask media-fonts/wqy-zenhei

eselect fontconfig list
eselect fontconfig enable X X X # 选择所有wqy开头的项

输入法

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
19
20
21
22
23
24
25
26
27
28
29
30
31
# 使用常规(基于源)更新
# --ask(-a)控制Portage显示要更新的软件列表,并提供是否更新选择
# --verbose(-v)在屏幕上输出完整的文件列表
# --update(-u)更新包的最佳版本
# --deep(-D)更新系统中的每个软件包
# --newuse(-N)USE标记变更后,要使用Portage检查USE标记的变动是否导致需要安装新的软件或将现有的软件包重新编译
sudo emerge --ask --verbose --update --deep --newuse @world

# 等价简写
emerge -avuDN @world

emerge -av --deepclean

#gentookit包里的一个软件,用来检查系统的依赖是否都满足,自动安装缺失的依赖
revdep-rebuild

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

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

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

# 刷新环境变量
source /etc/profile

# 清理旧版本的内核
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) ,但如果无法下载二进制包,则会失败

USE变量说明 官方文档

USE是Gentoo为用户提供的最具威力的变量之一。很多程序通过它可以选择编译或者不编译某些可选的支持。例如,一些程 序可以在编译时加入对gtk或是对qt的支持。其它的程序可以在编译时加入或不加入对于SLL的支持。有些程序甚至可以在编译时加入对 framebuffer的支持(svgalib)以取代X11(X服务器)。
大多数的发行版会使用尽可能多的支持特性编译它们的软件包,这既增加了软件的大小也减慢了启动时间,而这些还没有算上可能会涉及到的大量依赖性问题。Gentoo可以让你自己定义软件编译的选项,而这正是USE要做的事。
在USE变量里可以定义关键字,它被用来对应相应的编译选项。例如,ssl将会把ssl支持编译到程序中以支持它。-X会移除其对于X服务器的支持(注意前面的减号)。gnome gtk -kde -qt4将会以支持GNOME(和GTK)但不支持KDE(和Qt)的方式编译软件,使系统为GNOME做完全调整(如果架构支持)。
默认的USE设置全放在了系统所使用的Gentoo配置文件的make.defaults文件中。Gentoo对它的配置文件们使用了一个(复杂的)继承系统,在这个阶段我们不去深入。最简单的检查当前活动的USE标记的办法是运行emerge –info并选择以USE开头的那一行:

1
emerge --info |grep ^USE

![[Gentoo安装/IMG-20241210170128821.png]]
可以在系统的/usr/portage/profiles/use.desc中找到可用的USE标记的完整描述。

1
less /usr/share/portage/profile/use.desc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 常用软件

```bash
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

# VIM
sudo emerge app-editors/vim

参考文章

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)

posted on 2017-08-23 15:41  DoubleLi  阅读(24263)  评论()  编辑  收藏

流媒体服务器

流媒体解决方案 Live555(C++)

流媒体平台框架 EasyDarwin(GO,国产精品)

实时流媒体播放服务器程序DarwinStreamingSrvr(C++)

流媒体实时传输开发包 jrtplib

多媒体处理工具 ffmpeg

多媒体编码工具包Libav

Flash流媒体服务器 Red5(Java)

流媒体服务器 Open Streaming Server(Java)

FMS流媒体服务器(Adobe,收费的)

Wowza流媒体服务器(Java)

开源流媒体平台FreeCast(Java)

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

https://www.cnblogs.com/tttlv/p/14397699.html
https://www.cnblogs.com/ltaodream/p/15135365.html
https://blog.csdn.net/weixin_42142364/article/details/111084493
https://blog.csdn.net/Obese_Tiger/article/details/104741708?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160378122119724836762566%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160378122119724836762566&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-8-104741708.first_rank_ecpm_v3_pc_rank_v2&utm_term=kubeedge%E5%AE%89%E8%A3%85&spm=1018.2118.3001.4187
https://blog.csdn.net/PinocchioNE/article/details/109337365
https://www.jianshu.com/p/c6fc46563cb6
https://www.dogfei.cn/archives/kubeedge#
https://www.cnblogs.com/dream397/p/14628425.html
https://blog.csdn.net/MSSC_/article/details/114866906
https://zhuanlan.zhihu.com/p/350335104
https://www.cnblogs.com/kkbill/p/12600541.html
https://blog.csdn.net/weixin_38159695/article/details/118486461

https://blog.csdn.net/IUNIQUE/article/details/121787708
https://www.jianshu.com/p/3de558d8b57a
https://www.cnblogs.com/chalon/p/14840216.html
https://blog.csdn.net/f95_sljz/article/details/105544338
https://www.cnblogs.com/zhaobowen/p/13399708.html
https://www.cnblogs.com/UncleZhao/p/14646127.html
https://segmentfault.com/a/1190000021036626
https://www.cnblogs.com/ltaodream/p/15116711.html
https://knner.wang/2019/11/13/docker-io-gcr-io-k8s-gcr-io-quay-io-Chinese-source.html
https://www.cnblogs.com/kevingrace/p/12778066.html
https://www.cnblogs.com/hujinzhong/p/14995169.html
https://www.cnblogs.com/chenyishi/category/1359251.html
https://oldtang.com/1772.html
https://www.kubernetes.org.cn/7315.html
https://blog.csdn.net/networken/article/details/84571373
https://blog.csdn.net/JENREY/article/details/84205838
https://blog.csdn.net/ggggyj/article/details/104922023
https://zhuanlan.zhihu.com/p/109803657
https://www.cnblogs.com/cptao/p/10912644.html
https://blog.51cto.com/billy98/2350660
https://z.itpub.net/article/detail/68E9894E9257CC55D0AD3643AD3E9C89
https://blog.csdn.net/w13657909078/article/details/120141490?spm=1001.2014.3001.5501
https://blog.csdn.net/w13657909078/article/details/120342636?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_default&utm_relevant_index=10

将 .NET 微服务部署到 Kubernetes - Learn | Microsoft Docs

Kubernetes + .NET Core 的落地实践 - 腾讯云开发者社区-腾讯云

https://www.cnblogs.com/harlanzhang/category/1362182.html
https://cloud.tencent.com/developer/article/1450346
https://www.cnblogs.com/dingcong1201/p/15472764.html#1-minikube
https://yiqisoft.cn/blog/server-side/171.html
https://blog.csdn.net/lwkhdx/article/details/103879460
https://www.helloworld.net/p/ObLHGeiALU2D
https://blog.51cto.com/lvzhenjiang/2473866

helm3实战教程 | helm3常用命令和部署应用实战案例 - 知乎

kubernetes实战篇之helm完整示例 - 周国通 - 博客园

利用Kubernetes搭建便携式开发环境之MySQL和Redis - 知乎

Kubernetes使用helm部署单机版mysql(使用hostPath数据卷) - Sureing - 博客园

从零开始建立 EMQX MQTT 服务器的 K8S 集群 | EMQ

Kubernetes集群部署Prometheus和Grafana - 运维人在路上 - 博客园

Kubernetes K8S之存储Secret详解 - 踏歌行666 - 博客园

DevOps笔记 - k3s 默认ingress 配置 - 知乎

如何用NFS共享ZFS文件系统——详细教程 - 掘金