0%

Kubectl部署

配置文件

Helm部署

添加helm库

1
2
3
4
5
6
7
8
9
10
11
# 添加库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 更新库缓存
helm repo update

# 搜索redis镜像
helm search repo redis

# 获取package的values.yaml
helm show values bitnami/redis > values-default.yaml

配置 values.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
auth:
password: 123456 # redis 访问密码
master:
service:
type: NodePort # 服务对外暴露端口方式
persistence: # 配置点存储
storageClass: ""
size: 8Gi
replica:
service:
type: NodePort
persistence:
storageClass: ""
size: 8Gi

部署

1
helm install -f values.yaml redis bitnami/redis --namespace --create-namespace

参考

kubernetes环境部署单节点redis - 紫色飞猪 - 博客园 (cnblogs.com)

K8S如何部署Redis(单机、集群)_k8部署redis单节点-CSDN博客

4. K8S发布redis主从-CSDN博客

redis集群 - Helm3-安装Redis - 全栈工程师进阶 - SegmentFault 思否

Linux 源

清华 https://mirrors.tuna.tsinghua.edu.cn

阿里 http://mirrors.aliyun.com

腾讯 https://mirrors.tencent.com

华为 https://mirrors.huaweicloud.com

中国科技大学 https://mirrors.ustc.edu.cn

华中科技大学 http://mirror.hust.edu.cn

Docker 镜像仓库

DockerHub(docker.io)

网易 http://hub-mirror.c.163.com

中国科技大学 https://docker.mirrors.ustc.edu.cn (不可用)

道客 https://docker.m.daocloud.cn (参考官方文档)

腾讯 https://mirror.ccs.tencentyun.com

华为 https://mirror.swr.myhuaweicloud.com

阿里云 https://registry.cn-hangzhou.aliyuncs.com

[^注]: 阿里可申请私有加速,需注册账号,注册后地址修改为 https://{私有ID}.mirror.aliyuncs.com。详细信息参考官方文档

谷歌镜像仓库(gcr.io k8s.gcr.io)

阿里 https://registry.aliyuncs.com/google_containers

中科大 https://gcr.mirrors.ustc.edu.cn (2022.8之后不再更新镜像,校外访问返回403)

华为 https://mirror.swr.myhuaweicloud.com

道客 https://m.daocloud.io/k8s.gcr.io 文档

CoreOS镜像仓库(quay.io )

道客 https://m.daocloud.io/quay.io 参考支持镜像列表

Github镜像仓库(ghcr.io )

道客 https://m.daocloud.io/ghcr.io 参考支持镜像列表

Helm 源

ArtifactHub https://artifacthub.io/

华为 https://mirrors.huaweicloud.com/helm/

bitnami https://charts.bitnami.com/bitnami

Google https://gcr.io/kubernetes-helm

容器配置

Docker(/etc/docker/daemon.json )

1
2
3
4
5
6
7
8
9
10
11
{

"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries": [],
"exec-opts":["native.cgroupdriver=systemd"]

}

Containerd(/etc/containerd/config.toml)

1
2
3
4
5
6
7
8

[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."quay.io"]
endpoint = ["https://quay.tencentcloudcr.com"]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://mirror.ccs.tencentyun.com"]

K3s中Containerd容器(/var/lib/rancher/k3s/agent/etc/containerd/config.toml)

K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。

1
2
3
4
5
6
7
8
9
10
11
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"
"rancher.ksd.top:5000":
endpoint:
- "http://172.31.6.200:5000"
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"

containerd 与 docker 都有默认仓库,并且都为 docker.io。如果配置中未指定 mirror 为 docker.io,重启 containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint( 默认为 https://registry-1.docker.io ),而 docker 无法修改。

docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认吧镜像仓库。

k3s完整配置文件

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
mirrors:
"192.168.50.119":
endpoint:
- "http://192.168.50.119"
"docker.io":
endpoint:
- "https://7bezldxe.mirror.aliyuncs.com"
- "https://registry-1.docker.io"
configs:
"192.168.50.119":
auth:
username: '' # this is the registry username
password: '' # this is the registry password
tls:
cert_file: '' # path to the cert file used in the registry
key_file: '' # path to the key file used in the registry
ca_file: '' # path to the ca file used in the registry
"docker.io":
auth:
username: '' # this is the registry username
password: '' # this is the registry password
tls:
cert_file: '' # path to the cert file used in the registry
key_file: '' # path to the key file used in the registry
ca_file: '' # path to the ca file used in the registry

镜像转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#gcr.io
docker pull gcr.io/kubernetes-helm/tiller:v2.16.1
docker pull gcr.mirrors.ustc.edu.cn/kubernetes-helm/tiller:v2.16.1

#k8s.gcr.io
#docker pull k8s.gcr.io/kube-proxy:v1.15.5
docker pull gcr.mirrors.ustc.edu.cn/google-containers/kube-proxy:v1.15.5

#quay.io
docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
docker pull quay.mirrors.ustc.edu.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1


转换为gcr.io镜像

1
2
3
docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.5

K8S批量下载docker images

1
kubeadm config images list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#!/bin/bash
images=( # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
kube-apiserver:v1.12.1
kube-controller-manager:v1.12.1
kube-scheduler:v1.12.1
kube-proxy:v1.12.1
pause:3.1
etcd:3.2.24
coredns:1.2.2
)

for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done

更新版

1
2
3
4
5
6
7
8
9
10
11

#!/bin/bash
url=registry.aliyuncs.com
version=v1.16.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename
done

或(V1.3以上)

1
2
kubeadm init --image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.13.0 --pod-network-cidr 192.168.1.100/24

K3s安装

参考 K3s安装

组件安装

组件 端口 说明
MySQL 3306(NodePort) Gitea、Harbor等组件的依赖,与PostgreSQL二选一即可。安装参考K3s安装MySQL
PostgreSQL 5432(NodePort) Gitea、Harbor等组件的依赖,与MySQL二选一即可。安装参考K3s安装PostgreSQL
Cert-Manager 证书管理服务,有公网域名推荐使用,内网部署可生成自签名证书
Harbor 443(Traefik) 私有镜像库,镜像缓存。安装参考K3s安装
Gitea (3000)NodePort,(22)NodePort 源代码仓库,ssh与宿主机ssh端口冲突,需要协调
Drone 8080(NodePort) 基于Docker的自动编译服务,与Gitea Runner二选一即可。
Gitea Runner 暂无 Gitea 自动编译服务,与Drone 二选一即可。
SonarQube 8000(NodePort) 静态代码审查。
Girret 暂无 代码Review工具

组件部署

MySQL

参考 K3s部署MySQL

1
2
3
4
5
6
7
8
9
10
11
# k3s使用 local-path 部署
kubectl apply -f https://gitee.com/Chemmy/kube-template/MySQL/mysql-pvc-local-path.yaml

# 部署mysql-config
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/MySQL/mysql-config.yaml

# 部署deploy
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/MySQL/mysql-deployment.yaml

# 部署service(NodePort 方式)
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/MySQL/mysql-service.yaml

PostgresSQL

参考 K3s部署PostgreSQL

1
2
3
4
5
6
7
8
9
10
11
# k3s使用 local-path 部署
kubectl apply -f https://gitee.com/Chemmy/kube-template/PostgreSQL/postgres-pvc-local-path.yaml

# 部署config
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/PostgreSQL/postgres-config.yaml

# 部署deploy
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/PostgreSQL/postgres-deployment.yaml

# 部署service(NodePort 方式)
kubectl apply -fhttps://gitee.com/Chemmy/kube-template/PostgreSQL/postgres-service.yaml

cert-manager

参考K3s部署cert-manager(证书管理)

1

Harbor

参考K3s部署Harbor私有镜像仓库

1

Gitea

参考K3s部署Gitea

1

Drone

参考K3s部署Drone

1

SonarQube

参考K3s部署SonarQube

1

组件之间联动配置

参考

Gitea官方文档

Gitea README

Drone官方文档

Helm官方文档

Harbor官方文档

Traefik Proxy Documentation - Traefik

k3s 部署gitea+drone_golang k3s-CSDN博客

Harbor 结合 Traefik 的 HA 安装配置-腾讯云开发者社区-腾讯云 (tencent.com)

Traefik - Kubernetes 配置TCP/HTTP服务-腾讯云开发者社区-腾讯云 (tencent.com)

Drone CI使用docker插件构建和推送镜像 - wosperry - 博客园 (cnblogs.com)

在 Kubernetes 上部署 Drone 持续集成环境 | Hanggi - NGNL

Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统 - Gitea - 博客园 (cnblogs.com)

Helm Chart Kubernetes安装SonarQube_helm安装sunaqube-CSDN博客

安装基础环境

新装环境

1
2
3
4
5
6
7
8
9
10
# master安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC='--write-kubeconfig-mode=644 --service-node-port-range=1-65535 --default-local-storage-path=/mnt/storage/k3s' sh -

# 加入其他节点
curl -sfL https://get.k3s.io | K3S_URL=https://<k3s-server-ip>:6443 K3S_TOKEN=<token> |INSTALL_K3S_EXEC='--write-kubeconfig-mode=644 --service-node-port-range=1-65535 --default-local-storage-path=/mnt/storage/k3s' sh -

# --write-kubeconfig-mode=644 设置配置文件权限
# --service-node-port-range=1-65535 解除端口限制,默认30000-32767
# --disable traefik 禁用Traefik Ingress
# --default-local-storage-path=/mnt/storage/k3s # 自定义本地存储(local-path-config)的默认存储路径

其中<k3s-server-ip>是K3s服务器的IP地址,<token>是由K3s服务器生成的唯一令牌。您可以使用以下命令在K3s服务器上获取此令牌:

1
sudo cat /var/lib/rancher/k3s/server/node-token
1
2
# 1.设置 kubeconfig 文件路径用于对 Kubernetes 集群的访问。
echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc

现有环境修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo systemctl stop k3s.service
vim /etc/systemd/system/k3s.service
# 修改ExecStart
# 原有内容
ExecStart=/usr/local/bin/k3s \
server \
'--write-kubeconfig-mode=644'
# 修改后
ExecStart=/usr/local/bin/k3s \
server \
'--write-kubeconfig-mode=644' \
'--service-node-port-range=1-65535' \
'--default-local-storage-path=/mnt/storage/k3s' \


sudo systemctl daemon-reload
sudo systemctl start k3s.service

安装管理工具Helm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#安装helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 或通过包管理器安装
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

# ubuntu 使用snap安装
sudo snap install helm --classic

# 离线安装
# 下载最新版离线安装包 https://github.com/helm/helm/releases
tar xf helm-v2.11.0-linux-amd64.tar.gz
cp linux-amd64/helm linux-amd64/tiller /usr/local/bin/

常用Helm Charts

Artifact Hub

Bitnami Helm Charts

Microsoft

常用命令

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
# 查看集权所有资源
kubectl get all -A -o wide

# 查看指定命名空间
kubectl get all -n {namespace name}

# 查看容器日志
kubectl logs -n {namespace name} pod/{pod name}

# 查看指定命名空间下资源详细信息
kubectl describe -n {namespace name} [service|pod|secret|carificate|...]

# 查看节点相关
kubectl get node --show-labels -o wide

# 重启pod
kubectl rollout restart {pod name} -n

# 伸缩实例数量
kubectl scale deploy whoami --replicas=5

# 查看 k3s 集群配置文件
kubectl cluster-info

## Helm常用命令
# 获取charts的values文件
helm show values bitnami/redis > values.yaml

测试

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
# 创建2副本的whoami应用,默认1副本
kubectl create deploy whoami --image=traefik/whoami --replicas=2

# 查看部署应用信息
kubectl describe deploy whoami
# 监控Pod状态,通过缩容\扩容可直观看到Pod的调度状态
kubectl get pods --watch

kubectl scale deploy whoami --replicas=5

# 请求链路理解
request public-ip -> node-port -> svc-port -> pod-port -> container

# 发布K3s内网的服务
kubectl expose deploy whoami --port=80

# 查看服务状态
kubectl get svc whoami -owide
kubectl describe svc whoami

# 映射端口到宿主机
# --tareget-port 容器映射端口
# --external-ip 指定公网IP
# --prot 集群内暴露端口
# --node-port type=NodePort时提供给集群外访问的端口
kubectl expose deploy whoami --type=LoadBalancer --port=80 --external-ip <PUBLIC_IP>

# 清空测试
kubectl delete all --all

配置国内源(私有镜像库)

K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 registries.yaml 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。

K3s 镜像仓库配置文件由两大部分组成:mirrors 和 configs:

  • Mirrors 是一个用于定义专用镜像仓库的名称和 endpoint 的指令
  • Configs 部分定义了每个 mirror 的 TLS 和证书配置。对于每个 mirror,你可以定义 auth 和/或 tls

containerd 使用了类似 K8S 中 svc 与 endpoint 的概念,svc 可以理解为访问名称,这个名称会解析到对应的 endpoint 上。也可以理解 mirror 配置就是一个反向代理,它把客户端的请求代理到 endpoint 配置的后端镜像仓库。mirror 名称可以随意填写,但是必须符合 IP 或域名的定义规则。并且可以配置多个 endpoint,默认解析到第一个 endpoint,如果第一个 endpoint 没有返回数据,则自动切换到第二个 endpoint,以此类推。

1
2
3
4
5
6
7
8
9
10
11
12
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"
"rancher.ksd.top:5000":
endpoint:
- "http://172.31.6.200:5000"
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"

非安全(http)私有仓库配置

配置非安全(http)私有仓库,只需要在 endpoint 中指定 http 协议头的地址即可。

在没有 TLS 通信的情况下,需要为 endpoints 指定 http://,否则将默认为 https。

无认证
1
2
3
4
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"
有认证
1
2
3
4
5
6
7
8
9
mirrors:
"35.182.134.80":
endpoint:
- "http://35.182.134.80"
configs:
"35.182.134.80":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password

安全(https)私有仓库配置

使用授信 ssl 证书
1
2
3
4
5
6
7
8
9
mirrors:
"harbor.kingsd.top":
endpoint:
- "https://harbor.kingsd.top"
configs:
"harbor.kingsd.top":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
使用自签 ssl 证书

如果后端仓库使用的是自签名的 ssl 证书,那么需要配置 CA 证书 用于 ssl 证书的校验。

1
2
3
4
5
6
7
8
9
10
11
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
tls:
ca_file: /opt/certs/ca.crt
ssl 双向认证

如果镜像仓库配置了双向认证,那么需要为 containerd 配置 ssl 证书用于 镜像仓库对 containerd 做认证。

1
2
3
4
5
6
7
8
9
10
11
12
13
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
tls:
ca_file: /opt/certs/ca.crt # path to the ca file used in the registry
cert_file: /opt/certs/harbor-ksd.kingsd.top.cert # path to the cert file used in the registry
key_file: /opt/certs/harbor-ksd.kingsd.top.key # path to the key file used in the registry

加速器配置

Containerd 与 docker 都有默认仓库,均为 docker.io 。如果配置中未指定 mirror 为 docker.io,containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint(默认为 https://registry-1.docker.io),而 docker 无法修改。

Docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认的镜像仓库。

Containerd 目前没有直接配置镜像加速的功能,但 containerd 中可以修改 docker.io 对应的 endpoint,所以可以通过修改 endpoint 来实现镜像加速下载。因为 endpoint 是轮询访问,所以可以给 docker.io 配置多个仓库地址来实现 加速地址+默认仓库地址。如下配置示例:

1
2
3
4
5
mirrors:
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"

参考

Kubernetes 入门到实践:搭建 K3s 集群初体验 - 知乎 (zhihu.com)

离线安装Air-Gap Install | K3s

解决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多