OpenStack Yoga版安装笔记(十二)nova安装(下)

5、Install and configure controller node for Ubuntu

注意安装版本为:nova 25.2.2.dev5

5.1 Prerequisites

在安装和配置compute service之前,需要先创建数据库、服务凭证(用户名/密码)、服务API端点。

1、Create the database:

root@controller:~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.18-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> CREATE DATABASE nova_cell0;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
    ->   IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
Bye
root@controller:~# 

2、Configure User and Endpoints

root@controller:~# . admin-openrc 
root@controller ~(admin/amdin)# openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 107cee2c7dc34407bd41bea2e8ae4b2c |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
root@controller ~(admin/amdin)# openstack role add --project service --user nova admin
root@controller ~(admin/amdin)# openstack service create --name nova \
>   --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 1b8f162ebcf848ee8bd69bc6b36a8dff |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+
root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   compute public http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 56f7de504b8c46a8bf49ca95bb82b20a |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 1b8f162ebcf848ee8bd69bc6b36a8dff |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+
root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   compute internal http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 92a7d9dd7cce4678b280d143514bbed4 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 1b8f162ebcf848ee8bd69bc6b36a8dff |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+
root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   compute admin http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 9f112fb3f16441fc8f4314608aaad122 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 1b8f162ebcf848ee8bd69bc6b36a8dff |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+
root@controller ~(admin/amdin)# 

5.2 Install and configure components

1、安装软件包

root@controller:~# apt install nova-api nova-conductor nova-novncproxy nova-scheduler

2、Edit the /etc/nova/nova.conf file

root@controller:~# vi /etc/nova/nova.conf

[api_database]
# connection = sqlite:var/lib/nova/nova_api.sqlite
connection = mysql+pymysql://nova:openstack@controller/nova_api
...
[database]
# connection = sqlite:var/lib/nova/nova.sqlite
connection = mysql+pymysql://nova:openstack@controller/nova
...
[DEFAULT] 
transport_url = rabbit://openstack:openstack@controller:5672/
...
[api]
auth_strategy = keystone
...
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack
...
[service_user]
send_service_user_token = true
auth_url = https://controller/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = openstack
...
[DEFAULT]
my_ip = 10.0.20.11
...
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack
...
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
...
[glance]
api_servers = http://controller:9292
...
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
...
[DEFAULT]
# log_dir = /var/log/nova
...
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack

3、Populate the nova-api database:

root@controller:~# su -s /bin/sh -c "nova-manage api_db sync" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
2024-08-03 09:56:33.424 12329 INFO alembic.runtime.migration [-] Context impl MySQLImpl.
2024-08-03 09:56:33.425 12329 INFO alembic.runtime.migration [-] Will assume non-transactional DDL.
2024-08-03 09:56:33.432 12329 INFO alembic.runtime.migration [-] Running upgrade  -> d67eeaabee36, Initial version
2024-08-03 09:56:33.631 12329 INFO alembic.runtime.migration [-] Running upgrade d67eeaabee36 -> b30f573d3377, Remove unused build_requests columns
root@controller:~# 

4、Register the cell0 database:

root@controller:~# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
root@controller:~# 

5、Create the cell1 cell:

root@controller:~# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
--transport-url not provided in the command line, using the value [DEFAULT]/transport_url from the configuration file
--database_connection not provided in the command line, using the value [database]/connection from the configuration file
8b1967df-7901-42b3-8b03-fc4e884f490d
root@controller:~# 

6、Populate the nova database:

root@controller:~# su -s /bin/sh -c "nova-manage db sync" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
2024-08-03 10:06:03.073 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Context impl MySQLImpl.
2024-08-03 10:06:03.073 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Will assume non-transactional DDL.
2024-08-03 10:06:03.080 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Running upgrade  -> 8f2f1571d55b, Initial version
2024-08-03 10:06:03.879 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Running upgrade 8f2f1571d55b -> 16f1fbcab42b, Resolve shadow table diffs
2024-08-03 10:06:03.899 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Context impl MySQLImpl.
2024-08-03 10:06:03.899 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Will assume non-transactional DDL.
2024-08-03 10:06:03.905 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Running upgrade  -> 8f2f1571d55b, Initial version
2024-08-03 10:06:04.629 14092 INFO alembic.runtime.migration [req-2c88e019-957e-4116-8e7c-29dd6243047c - - - - -] Running upgrade 8f2f1571d55b -> 16f1fbcab42b, Resolve shadow table diffs
root@controller:~# 

7、Verify nova cell0 and cell1 are registered correctly:

root@controller:~# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
|  Name |                 UUID                 |              Transport URL               |               Database Connection               | Disabled |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                  none:/                  | mysql+pymysql://nova:****@controller/nova_cell0 |  False   |
| cell1 | 8b1967df-7901-42b3-8b03-fc4e884f490d | rabbit://openstack:****@controller:5672/ |    mysql+pymysql://nova:****@controller/nova    |  False   |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
root@controller:~# 

5.3 Finalize installation

Restart the Compute services:

root@controller:~# service nova-api restart
root@controller:~# service nova-scheduler restart
root@controller:~# service nova-conductor restart
root@controller:~# service nova-novncproxy restart
root@controller:~# 
root@controller:~# systemctl  | grep nova
  nova-api.service                                                                                 loaded active running   OpenStack Compute API
  nova-conductor.service                                                                           loaded active running   OpenStack Compute Conductor
  nova-novncproxy.service                                                                          loaded active running   OpenStack Compute novncproxy
  nova-scheduler.service                                                                           loaded active running   OpenStack Compute Scheduler
root@controller:~# 

6、Install and configure a compute node for Ubuntu

计算服务(Compute Service)支持多种hypervisor来部署实例或虚拟机。为了简化配置,这里使用Quick EMUlator(QEMU)hypervisor,并在支持虚拟机硬件加速的计算节点上结合了基于内核的虚拟机(KVM)扩展。在不支持硬件加速的传统硬件上,可以使用通用的QEMU hypervisor。另外可以通过简单修改这里的配置,增加额外的计算节点,从而水平扩展计算环境。

6.1 Install and configure components

root@compute1:~# apt install nova-compute

6.2 Edit the /etc/nova/nova.conf file

root@compute1:~# vi /etc/nova/nova.conf 

[DEFAULT]

transport_url = rabbit://openstack:openstack@controller
...
[api]
auth_strategy = keystone
...
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack
...
[service_user]
send_service_user_token = true
auth_url = https://controller/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = openstack
...
[DEFAULT]
my_ip = 10.0.20.11
...
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack
...
[glance]
api_servers = http://controller:9292
...
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
...
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack

6.3 Finalize installation

1、检查计算节点(compute node)是否支持硬件虚拟化,返回1或者大于1,则支持;返回0则不支持:

root@compute1:~# egrep -c '(vmx|svm)' /proc/cpuinfo
8

2、重启compute service:

root@compute1:~# service nova-compute restart

root@compute1:~# systemctl status nova-compute
● nova-compute.service - OpenStack Compute
     Loaded: loaded (/lib/systemd/system/nova-compute.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-08-03 12:09:38 UTC; 1min 13s ago
   Main PID: 1167 (nova-compute)
      Tasks: 23 (limit: 4514)
     Memory: 122.8M
        CPU: 1.924s
     CGroup: /system.slice/nova-compute.service
             └─1167 /usr/bin/python3 /usr/bin/nova-compute --config-file=/etc/nova/nova.conf --config-file=/etc/nova/nova-compute.conf --log-file=/var
/log/nova/nova-compute.log

Aug 03 12:09:38 compute1 systemd[1]: Started OpenStack Compute.
Aug 03 12:09:38 compute1 nova-compute[1167]: Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urlli
b3. This warning can usually be ignored if the caller is only importing and not executing nova code.
root@compute1:~# 

6.4 Add the compute node to the cell database

1、以admin的凭证获取admin-only openstack CLI,查看数据库是否有compute host:

root@controller ~(admin/amdin)# cat admin-openrc 
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(admin/amdin)\$ '
root@controller ~(admin/amdin)# 
root@controller:~# . admin-openrc 
root@controller ~(admin/amdin)# openstack compute service list --service nova-compute
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| ID                                   | Binary       | Host     | Zone | Status  | State | Updated At                 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| c04e53a4-fdb8-4915-9b1a-f5d195e753c4 | nova-compute | compute1 | nova | enabled | up    | 2024-08-03T12:14:15.000000 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+

2、Discover compute hosts:

root@controller:~# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 8b1967df-7901-42b3-8b03-fc4e884f490d
Checking host mapping for compute host 'compute1': 205c89e0-fb82-4def-a0f6-bfe4b120ab79
Creating host mapping for compute host 'compute1': 205c89e0-fb82-4def-a0f6-bfe4b120ab79
Found 1 unmapped computes in cell: 8b1967df-7901-42b3-8b03-fc4e884f490d
root@controller:~# 

root@controller:~# nova-manage cell_v2 list_hosts --cell_uuid 8b1967df-7901-42b3-8b03-fc4e884f490d
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
+-----------+--------------------------------------+----------+
| Cell Name |              Cell UUID               | Hostname |
+-----------+--------------------------------------+----------+
|   cell1   | 8b1967df-7901-42b3-8b03-fc4e884f490d | compute1 |
+-----------+--------------------------------------+----------+
root@controller:~# 
root@controller:~# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 8b1967df-7901-42b3-8b03-fc4e884f490d
Found 0 unmapped computes in cell: 8b1967df-7901-42b3-8b03-fc4e884f490d
root@controller:~# 
root@controller:~# nova-manage cell_v2 list_hosts --cell_uuid 8b1967df-7901-42b3-8b03-fc4e884f490d
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
+-----------+--------------------------------------+----------+
| Cell Name |              Cell UUID               | Hostname |
+-----------+--------------------------------------+----------+
|   cell1   | 8b1967df-7901-42b3-8b03-fc4e884f490d | compute1 |
+-----------+--------------------------------------+----------+
root@controller:~#

当您添加新的计算节点时,您必须在控制节点上运行 nova-manage cell_v2 discover_hosts 命令来注册这些新的计算节点。

7、Verify operation

1、Source the admin credentials to gain access to admin-only CLI commands:

root@controller:~# . admin-openrc 
root@controller ~(admin/amdin)# 

2、List service components to verify successful launch and registration of each process:

root@controller ~(admin/amdin)# openstack compute service list

+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| ID                                   | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| b935d869-0102-45c0-8b24-e338c5606890 | nova-scheduler | controller | internal | enabled | up    | 2024-08-03T12:36:55.000000 |
| e4929b42-af08-449f-b703-c0fc36c4220b | nova-conductor | controller | internal | enabled | up    | 2024-08-03T12:37:02.000000 |
| c04e53a4-fdb8-4915-9b1a-f5d195e753c4 | nova-compute   | compute1   | nova     | enabled | up    | 2024-08-03T12:36:56.000000 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+

3、List API endpoints in the Identity service to verify connectivity with the Identity service:

root@controller ~(admin/amdin)# openstack catalog list
+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| nova      | compute   | RegionOne                               |
|           |           |   public: http://controller:8774/v2.1   |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8774/v2.1 |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8774/v2.1    |
|           |           |                                         |
| placement | placement | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           |                                         |
| keystone  | identity  | RegionOne                               |
|           |           |   admin: http://controller:5000/v3/     |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           |                                         |
| glance    | image     | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:9292      |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+
root@controller ~(admin/amdin)# 

4、List images in the Image service to verify connectivity with the Image service:

root@controller ~(admin/amdin)# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 429decdd-9230-49c0-b735-70364c226eb5 | cirros | active |
+--------------------------------------+--------+--------+

5、Check the cells and placement API are working successfully and that other necessary prerequisites are in place:

root@controller ~(admin/amdin)# nova-status upgrade check
Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
+-------------------------------------------+
| Upgrade Check Results                     |
+-------------------------------------------+
| Check: Cells v2                           |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Placement API                      |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Cinder API                         |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy Scope-based Defaults        |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy File JSON to YAML Migration |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Older than N-1 computes            |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: hw_machine_type unset              |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Service User Token Configuration   |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
root@controller ~(admin/amdin)#

8、关闭虚机,拍摄快照

关闭controller node和compute node虚机,拍摄快照(可参考之前的章节)。

相关推荐
李小星同志30 分钟前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c42 分钟前
MFC 使用细节
笔记·学习·mfc
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
OkeyProxy1 小时前
怎麼在Ubuntu上設置全局代理
ubuntu·代理模式·proxy模式·ip代理·海外ip代理
Jhxbdks1 小时前
C语言中的一些小知识(二)
c语言·开发语言·笔记
gopher95111 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发
AlexMercer10121 小时前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
码哝小鱼1 小时前
firewalld封禁IP或IP段
linux·网络
鼠鼠龙年发大财1 小时前
【x**3专享】安装SSH、XFTP、XShell、ARM Linux
linux·arm开发·ssh
nfgo1 小时前
快速体验Linux发行版:DistroSea详解与操作指南
linux·ubuntu·centos