當前位置:首頁 » 操作系統 » openstackhorizon源碼

openstackhorizon源碼

發布時間: 2022-10-18 01:42:25

Ⅰ 怎麼安裝horizon world

Horizon是OpenStack中提供可視化管理(Dashboard)的組件,使用的python的Web開發框架Django開發,使得Horizon本身代碼結構較為簡單,但是,內部數據流比較復雜。下載步驟:
1、初始化環境:安裝linux環境,下載源碼
2、安裝horizon依賴包。
3、配置local_settings文件。
4、翻譯。
5、靜態資源設置。
6、Session存儲
7、部署Apache2伺服器。

Ⅱ Openstack概述 、 部署安裝環境 、 部署Openstack 、 Openstack操作基礎

案例1:配置yum倉庫

案例2:測試時間伺服器

案例3:配置yum倉庫

案例4:檢查基礎環境

案例5:部署Openstack

案例6:網路管理

案例7:登錄openstack

1 案例1:配置yum倉庫

1.1 問題

本案例要求配置基本環境:

配置三台虛擬機

2CPU,6G 內存,50G 硬碟

2CPU,4.5G 內存,100G 硬碟

配置靜態IP ifcfg-eth0

openstack : 192.168.1.10

nova: 192.168.1.11, 192.168.1.12

配置主機名 /etc/hosts,能夠相互 ping 通

配置 dns 伺服器 /etc/resolv.conf

1.2 方案

此實驗的整體方案需要三台機器,openstack作為主節點,nova01 和 nova02作為額外節點,真機做為DNS轉發和NTP的伺服器(這里不再在表-1中體現),提供域名解析和時間同步服務,具體情況如表-1所示:

表-1

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:准備三台虛擬機

[student@room9pc01 images]$base-vm openstack nova01 nova02

[student@room9pc01 images]$virsh start openstack

[student@room9pc01 images]$virsh start nova01

[student@room9pc01 images]$virsh start nova02

2)opensatck主機擴容為50G

[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/openstack.img--size 100G openstack

[student@room9pc01 images]$ virsh console openstack

[root@localhost~]#/usr/bin/growpart /dev/vda1

[root@localhost~]#/usr/sbin/xfs_growfs /

[root@localhost~]# df-h

Filesystem      Size  Used Avail Use%Mounted on

/dev/vda1        50G  914M  50G2%/

3)nova01 和 nova02 主機擴容為100G(以nova01為例)

[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/nova01.img--size 50G nova01

重新定義'/var/lib/libvirt/images/nova01.img'塊設備大小

[root@localhost~]#/usr/bin/growpart /dev/vda1

[root@localhost~]#/usr/sbin/xfs_growfs  /

[root@localhost~]# df-h

Filesystem      Size  Used Avail Use%Mounted on

/dev/vda1      100G  917M  100G1%/

4)三台主機配置靜態ip(以一台為例)

openstack:192.168.1.10

nova01: 192.168.1.11

nova02: 192.168.1.12

[root@localhost~]#cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# vim ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

PERSISTENT_DHCLIENT="yes"

IPADDR=192.168.1.10

NEMASK=255.255.255.0

GATEWAY=192.168.1.254

5)三台主機修改主機名,配置/etc/hosts,和/etc/resolv.conf文件(以一台為例)

[root@localhost~]# hostname openstack

[root@localhost~]# echo openstack>/etc/hostname

[root@localhost~]#vim /etc/hosts

192.168.1.10openstack

192.168.1.11nova01

192.168.1.12nova02

[root@localhost~]#vim /etc/resolv.conf//去掉search開頭的行

;generatedby /usr/sbin/dhclient-script

nameserver192.168.1.254

6)修改三台主機的內存(openstack6G,nova01 和nova02 4G)

[student@room9pc01~]$ virsh edit openstack

...

<memory unit='KiB'>6588282</memory>

<currentMemory unit='KiB'>6588282</currentMemory>

...

[student@room9pc01~]$ virsh edit nova01

...

<memory unit='KiB'>4588282</memory>

<currentMemory unit='KiB'>4588282</currentMemory>

...

[student@room9pc01~]$ virsh start  openstack

域 openstack 已開始

[student@room9pc01~]$ virsh start  nova01

域 nova01 已開始

[student@room9pc01~]$ virsh start  nova02

域 nova02 已開始

2 案例2:測試時間伺服器

2.1 問題

本案例要求掌握時間服務的配置:

修改 openstack,nova01,nova02 的時間伺服器

重啟服務後驗證配置

2.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:修改openstack,nova01 和 nova02 的時間伺服器(以一台為例)

[root@openstack~]#vim /etc/chrony.conf

...

server192.168.1.254iburst

[root@openstack~]# systemctl restart chronyd

步驟二:驗證

[root@openstack~]# chronyc sources-v

...

||||\

MSName/IP address        Stratum Poll Reach LastRx Last sample

===============================================================================

^*gateway36376-93ns[+903ns]+/-26ms

步驟三:兩台虛擬機配置靜態ip

注意:兩台主機同樣操作,改一下ip即可(以openstack.te.cn為例)

[root@localhost~]# echo openstack.te.cn>/etc/hostname

[root@localhost~]# hostname openstack.te.cn

//另外一台主機改名為nova.te.cn,配置ip為1.20

[root@openstack~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

IPV6INIT="no"

IPV4_FAILURE_FATAL="no"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

IPADDR="192.168.1.10"

PREFIX=24

GATEWAY=192.168.1.254

[root@openstack~]# systemctl restart network

3 案例3:配置yum倉庫

3.1 問題

本案例要求配置yum倉庫:

配置 yum 源,軟體倉庫一共 4 個

3.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:三台主機配置yum源(以一台主機為例,共10670個軟體包)

[student@room9pc01~]$cd /linux-soft/04/openstack/

[student@room9pc01 openstack]$ ls

cirros.qcow2  RHEL7-extras.iso  RHEL7OSP-10.iso  small.qcow2

[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7-extras

[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7OSP-10

[student@room9pc01 openstack]$ mount RHEL7-extras.iso  /var/ftp/RHEL7-extras/

mount:/dev/loop1 防寫,將以只讀方式掛載

[student@room9pc01 openstack]$ mount RHEL7OSP-10.iso /var/ftp/RHEL7OSP-10/

mount:/dev/loop2 防寫,將以只讀方式掛載

[root@openstack~]#vim /etc/yum.repos.d/local.repo

[local_repo]

name=CentOS-$releasever-Base

baseurl="ftp://192.168.1.254/centos-1804"

enabled=1

gpgcheck=1

[RHEL7-extras]

name=RHEL7-extras

baseurl="ftp://192.168.1.254/RHEL7-extras"

enabled=1

gpgcheck=0

[RHEL7OSP-package]

name=RHEL7OSP-package

baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-rpms"

enabled=1

gpgcheck=0

[RHEL7OSP-devtools]

name=RHEL7OSP-devtools

baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-devtools-rpms"

enabled=1

gpgcheck=0

[root@openstack~]#scp /etc/yum.repos.d/local.repo192.168.1.11:/etc/yum.repos.d/

[email protected]'s password:

local.repo                                                                                          100%  490  484.4KB/s  00:00   

[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/

[email protected]'s password:

local.repo

4 案例4:檢查基礎環境

4.1 問題

本案例要求准備基礎環境,為安裝openstack做准備:

安裝額外的軟體包

是否卸載firewalld 和 NetworkManager

檢查配置主機網路參數(靜態IP)

主機名必須能夠相互 ping 通

檢查配置主機yum源(4個,10670)

依賴軟體包是否安裝

檢查NTP伺服器是否可用

檢查 /etc/resolv.conf 不能有 search 開頭的行

4.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:檢查基礎環境

1)安裝額外軟體包(三台機器操作,這里以一台為例)

[root@openstack yum.repos.d]# yum install-y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools

2)是否卸載firewalld 和 NetworkManager

[root@openstack~]# rpm-qa|grep NetworkManager*

[root@openstack~]# rpm-qa|grep firewalld*

3)檢查配置主機網路參數

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

PERSISTENT_DHCLIENT="yes"

IPADDR=192.168.1.10

NEMASK=255.255.255.0

GATEWAY=192.168.1.254

4)驗證主機名是否互通

[root@openstack~]# ping openstack

...

64bytes fromopenstack(192.168.1.10):icmp_seq=1ttl=255time=0.023ms

64bytes fromopenstack(192.168.1.10):icmp_seq=2ttl=255time=0.027ms

...

[root@openstack~]# ping nova01

PINGnova01(192.168.1.11)56(84)bytes of data.

64bytes fromnova01(192.168.1.11):icmp_seq=1ttl=255time=0.139ms

...

[root@openstack~]# ping nova02

PINGnova02(192.168.1.12)56(84)bytes of data.

64bytes fromnova02(192.168.1.12):icmp_seq=1ttl=255time=0.251ms

...

5)檢查配置主機yum源

[root@openstack~]# yum repolist

已載入插件:fastestmirror

Loading mirror speeds from cached hostfile

源標識                                                          源名稱                                                          狀態

RHEL7-extras                                                    RHEL7-extras76

RHEL7OSP-devtools                                              RHEL7OSP-devtools3

RHEL7OSP-package                                                RHEL7OSP-package680

local_repo                                                      CentOS-7-Base9,911

repolist:10,670

6)檢查時間同步是否可用

[root@openstack~]# chronyc  sources-v

210Numberof sources=1

....

||||\

MSName/IP address        Stratum Poll Reach LastRx Last sample

===============================================================================

^*gateway3737728+31us[+89us]+/-25ms

[root@openstack~]#

7)檢查/etc/resolv.conf 不能有 search 開頭的行

[root@openstack~]#cat /etc/resolv.conf

;generatedby /usr/sbin/dhclient-script

nameserver192.168.1.254

5 案例5:部署Openstack

5.1 問題

本案例要求通過packstack完成以下配置:

通過packstack部署Openstack

根據相關日誌文件進行排錯

5.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:安裝packstack

[root@openstack~]# yum install-y openstack-packstack

[root@openstack~]# packstack--gen-answer-file answer.ini

//answer.ini與answer.txt是一樣的,只是用vim打開answer.ini文件有顏色

Packstack changed given value  to requiredvalue /root/.ssh/id_rsa.pub

[root@openstack~]# vim answer.ini

42CONFIG_SWIFT_INSTALL=n

45CONFIG_CEILOMETER_INSTALL=n//計費相關模塊

49CONFIG_AODH_INSTALL=n//計費相關模塊

53CONFIG_GNOCCHI_INSTALL=n//計費相關模塊

75CONFIG_NTP_SERVERS=192.168.1.254//時間伺服器的地址

98CONFIG_COMPUTE_HOSTS=192.168.1.11

102CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11

333CONFIG_KEYSTONE_ADMIN_PW=a//修改管理員的密碼

840CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan//驅動類型

876CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5

//設置組播地址,最後一個隨意不能為0和255,其他固定

910CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex//物理網橋的名稱

921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0

//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接

1179CONFIG_PROVISION_DEMO=n//DEMO是否測試

[root@openstack~]# packstack--answer-file=answer.ini

Welcome to the Packstack setup utility

The installation log file is available at:/var/tmp/packstack/20190423-170603-b43g_i/openstack-setup.log

Installing:

Clean Up[DONE]

Discovering ip protocol version[DONE]

[email protected]'s password:

[email protected]'s password:

Setting up ssh keys

****Installation completed successfully******//出現這個為成功

6 案例6:網路管理

6.1 問題

本案例要求運用OVS完成以下配置:

查看外部OVS網橋及其埠

驗證OVS配置

6.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:查看外部OVS網橋

1)查看br-ex網橋配置(br-ex為OVS網橋設備)

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-br-ex

ONBOOT="yes"

NM_CONTROLLED="no"

IPADDR="192.168.1.10"

PREFIX=24

GATEWAY=192.168.1.254

DEVICE=br-ex

NAME=br-ex

DEVICETYPE=ovs

OVSBOOTPROTO="static"

TYPE=OVSBridge

2)查看eth0網卡配置(該網卡為OVS網橋的介面)

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

NAME=eth0

DEVICETYPE=ovs

TYPE=OVSPort

OVS_BRIDGE=br-ex

ONBOOT=yes

BOOTPROTO=none

3)驗證OVS配置

[root@openstack~]# ovs-vsctl show

Bridge br-ex

Controller"tcp:127.0.0.1:6633"

is_connected:true

fail_mode:secure

Port br-ex

Interface br-ex

type:internal

Port phy-br-ex

Interface phy-br-ex

type:patch

options:{peer=int-br-ex}

Port"eth0"

Interface"eth0"

ovs_version:"2.5.0"

7 案例7:登錄openstack

7.1 問題

本案例要求通過Horizon完成以下操作:

修改/etc/httpd/conf.d/15-horizon_vhost.conf 配置文件,使其可以成功登錄openstack

7.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:瀏覽器訪問openstack

1)瀏覽器訪問

[root@openstack~]# firefox192.168.1.10//訪問失敗

2)需要改配置文件並重新載入

[root@openstack~]#

[root@openstack conf.d]# vi15-horizon_vhost.conf

35WSGIProcessGroup apache

36WSGIApplicationGroup%{GLOBAL}//添加這一行

[root@openstack conf.d]# apachectl  graceful//重新載入配置文件

3)瀏覽器訪問,出現頁面,如圖-6所示:

圖-6

3)查看用戶名和密碼

[root@openstack conf.d]# cd

[root@openstack~]# ls

answer.ini  keystonerc_admin//keystonerc_admin生成的文件,裡面有用戶名和密碼

[root@openstack~]# cat keystonerc_admin

unset OS_SERVICE_TOKEN

exportOS_USERNAME=admin//用戶名

exportOS_PASSWORD=a//密碼

exportOS_AUTH_URL=http://192.168.1.10:5000/v2.0

exportPS1='[\u@\h \W(keystone_admin)]\$ '

exportOS_TENANT_NAME=admin

exportOS_REGION_NAME=RegionOne

4)在火狐瀏覽器中輸入用戶名和密碼,登錄後頁面如圖-7所示:

圖-7

安裝openstack可能會出現的錯誤以及排錯方法

1)ntp時間不同步,如圖-2所示:

圖-2

解決辦法:查看ntp時間伺服器,是否出現*號,若沒有,查看配置文件,配置ntp伺服器步驟在案例3,可以參考

[root@room9pc01~]# chronyc sources-v//出現*號代表NTP時間可用

^*120.25.115.20261762-753us[-7003us]+/-24ms

[root@openstack~]# chronyc sources-v

^*192.168.1.25439377504+50us[-20us]+/-24ms

[root@nova~]# chronyc sources-v

^*192.168.1.25439377159-202us[-226us]+/-24ms

2)網橋名稱寫錯,如圖-3所示:

圖-3

解決辦法:檢查配置文件

[root@openstack~]# vim answer.ini

...

921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0

//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接

...

3)若/root/.ssh/id_rsa.pub,提示password,同樣是配置文件沒有寫對,如圖-4所示:

圖-4

4)yum源沒有配置正確,如圖-5所示:

圖-5

解決辦法:檢查yum是否為10853個軟體包,查看是否是yum源沒有配置正確,之後安裝oprnstack-dashboard

5)出現Cannot allocate memory,如圖-6所示:

圖-6

解決辦法:

內存不足,重新啟動主機

6)出現/usr/bin/systemctl start openvswith ... falied,說明是ssse3指令集的錯誤,如圖-7所示:

圖-7

解決辦法:編輯openstack的xml文件,在裡面添加

<cpu mode='host-passthrough'>

</cpu>

7)若出現 Could not prefetch... 『openstack』。 如圖-8所示:

圖-8

配置文件裡面有中文符號

9)訪問openstack出錯

圖-9

沒有修改Apache配置文件

4)創建名為myproject的項目

[root@openstack~]# source~/keystonerc_admin  //初始化環境變數

[root@openstack~(keystone_admin)]# openstack project create myproject

+-------------+----------------------------------+

|Field|Value|

+-------------+----------------------------------+

|description|None|

|enabled|True|

|id||

|name|myproject|

+-------------+----------------------------------+

5)查看項目信息

[root@openstack~(keystone_admin)]# openstack project list

+----------------------------------+-----------+

|ID|Name|

+----------------------------------+-----------+

||services|

||admin|

||myproject|

+----------------------------------+-----------+

6)更新vcpu配額為30

[root@openstack~(keystone_admin)]# nova quota-update--cores30myproject

7)刪除myproject

[root@openstack~(keystone_admin)]# openstack projectdeletemyproject

Ⅲ 如何從零開始學習OpenStack

1)先安裝OpenStack的環境,幾種方法
第一種方法:先安裝docker,下載openstack的鏡像,關於docker的使用資料Docker資料 網上搜索一下,很多,比較容易學習和使用

第二種方法:使用fuel來安裝 Fuel 30 分鍾快速安裝OpenStack

2)安裝後,先去熟悉如何應用OpenStack
3)建議你先從horizon模塊開始研究源碼,邊研究,邊試著做些修改,這樣切入比較容易點,千萬別以上來就去啃nova neutron模塊,難度太大,不太容易切如進去

4)開發環境可以考慮

pychorm

devstack

另外,官方文檔資料寫的很詳細,多去看看

Ⅳ openstack horizon開發環境搭建運行run_tests報錯No mole named config

openstack_dashboard.settings 這個文件存不存在, config配置檢查下是否正確

Ⅳ 怎樣修改 Openstack Horizon的顯示界面

這個文件很簡單,最重要的是兩個參數: name 和 slug。 name 是這個panel 在網頁上顯示的名字,而 slug 則是這個 panel 的類似於 ID 的東西。因此,在我們自己的 panel.py 中也可以依葫蘆畫瓢,定義一個 PluginPanel 的類:

import horizon

class PluginPanel(horizon.Panel):
name = "MyPlugin"
slug = 'plugin_panel'
注意這里的 slug 要和在之前提到的 _50_admin_add_panel.py 中的 PANEL 變數的值相同。

接下來我們再看看networks文件夾下面的 form.py:

復制代碼
import logging

from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _

from horizon import exceptions
from horizon import forms
from horizon import messages

from openstack_dashboard import api

LOG = logging.getLogger(__name__)

class CreateNetwork(forms.SelfHandlingForm):
name = forms.CharField(max_length=255,
label=_("Name"),
required=False)
tenant_id = forms.ChoiceField(label=_("Project"))
if api.neutron.is_port_profiles_supported():
net_profile_id = forms.ChoiceField(label=_("Network Profile"))
admin_state = forms.BooleanField(label=_("Admin State"),
initial=True, required=False)
shared = forms.BooleanField(label=_("Shared"),
initial=False, required=False)
external = forms.BooleanField(label=_("External Network"),
initial=False, required=False)

...... 這里省略了一些其他代碼 ......

def handle(self, request, data):
try:
params = {'name': data['name'],
'tenant_id': data['tenant_id'],
'admin_state_up': data['admin_state'],
'shared': data['shared'],}
#'router:external': data['external']}
if api.neutron.is_port_profiles_supported():
params['net_profile_id'] = data['net_profile_id']
network = api.neutron.network_create(request, **params)
msg = _('Network %s was successfully created.') % data['name']
LOG.debug(msg)
messages.success(request, msg)
return network
except Exception:
redirect = reverse('horizon:admin:networks:index')
msg = _('Failed to create network %s') % data['name']
exceptions.handle(request, msg, redirect=redirect)

class UpdateNetwork(forms.SelfHandlingForm):
name = forms.CharField(label=_("Name"), required=False)
tenant_id = forms.CharField(widget=forms.HiddenInput)
network_id = forms.CharField(label=_("ID"),
widget=forms.TextInput(
attrs={'readonly': 'readonly'}))
admin_state = forms.BooleanField(label=_("Admin State"), required=False)
shared = forms.BooleanField(label=_("Shared"), required=False)
external = forms.BooleanField(label=_("External Network"), required=False)
failure_url = 'horizon:admin:networks:index'

def handle(self, request, data):
try:
params = {'name': data['name'],
'admin_state_up': data['admin_state'],
'shared': data['shared'],
'router:external': data['external']}
network = api.neutron.network_update(request, data['network_id'],
**params)
msg = _('Network %s was successfully updated.') % data['name']
LOG.debug(msg)
messages.success(request, msg)
return network
except Exception:
msg = _('Failed to update network %s') % data['name']
LOG.info(msg)
redirect = reverse(self.failure_url)
exceptions.handle(request, msg, redirect=redirect)
復制代碼

Ⅵ 怎樣修改 Openstack Horizon的顯示界面

已經做好自己的網頁,怎麼把修改Openstack Dashboard的界面,也可以說怎麼把自己做網頁套用在上面,以及刪除,添加自己需要的功能,告訴我實現Openstack Dashboard頁面上功能的python源代碼在哪裡也可以
創建 實例 ,找到實例所在伺服器的 IP 進程的查看實例的 埠 拿客戶端連,或者直接在openstack的horizon管理界面登陸到虛機的控制台

Ⅶ 怎樣修改 Openstack Horizon的顯示界面

Openstack 有很多項目,比如 nova 是虛擬機管理,neutron 是虛擬網路管理, glance 是存儲管理,而 horizon 是負責 Openstack 的統一界面。horizon 的源代碼和 neutron 的不太一樣,分布在兩個地方,一個是/usr/lib/python2.7/dist-packages/hor...

熱點內容
蜜蜂編程官網 發布:2025-05-14 19:59:28 瀏覽:56
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:634
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:860
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:433
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:449
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:461
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:272
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:971
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:868