找回密码
 注册
查看: 4525|回复: 5

通过KVM创建openstack镜像的过程

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2017-11-1 14:10:46 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 5 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-11-1 15:57:28 | 显示全部楼层
glance image-create --name CentOS-7-x86_64  --disk-format qcow2 --container-format bare --visibility public  --progress < CentOS-7-x86_64.qcow2

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-11-1 17:38:17 | 显示全部楼层
virsh destroy SAAS001  强制关机 virsh undefine SAAS001  删除虚机

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-11-2 15:48:59 | 显示全部楼层
要记得虚机的网络配置文件,修改成DHCP的方式,这样创建的虚机才能自动写入IP地址。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-11-2 15:52:58 | 显示全部楼层
# virt-install --name=CentOS-7-x86_64 --os-variant=RHEL7 --ram 16384 --vcpus=16 --disk path=/usr/src/CentOS-7-x86_64.img,format=qcow2,size=20,bus=virtio --accelerate --cdrom /usr/src/CentOS-7-x86_64-DVD-1511.iso --vnc --vncport=5903 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio  --noautoconsole

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-11-10 18:07:16 | 显示全部楼层
安装一些自己需要的工具
6 h# Q$ C* [8 d000_添加自己的内部源,没有的同学,跳过此步骤即可;; n1 u) q' q  }, S, I

9 p" h7 n/ \6 t# ?6 s001_这里我只安装 cloud-init 、acpid 和 jq! l$ q) ]2 L! b$ ]+ r. F
acpid服务作用:重新引导或关闭实例
6 J! s, j; y( S( F' vjq 服务作用:处理json数据
- y  K: d3 q$ S" xcloud-init服务作用: 配置使用metadata(我把官网的简绍截一下图)
. ~0 @% U- C2 C9 R, ?0 |. j+ W& H& [5 _% S$ _, e

; E- i4 w6 i  b- ^+ ]5 M; k
! Z4 ^1 S7 ], e: \# \7 r- D& Q5 g: Y: {5 M0 E$ i4 C7 e
0 X" r8 K. T7 e! D6 S0 [

: n! t& T% V# o$ r  v- L  R% i[tr][/tr]
7 j2 J& Y  p: O" t% V7 g* s: w. u+ |[tr][/tr]
yum -y install acpid cloud-init  jq& V3 H0 ~  D, D  v! j( |4 K7 w

1 o( R4 Y* q! ^$ q1 y$ fchkconfig acpid on$ B  J0 W; u# `/ r. E
  ~3 I; k% Q1 v7 A2 W9 n
chkconfig cloud-init on5 p! E6 {" B/ \

) g$ L5 c( b+ o8 S7 d  N4 Q: Secho "NOZEROCONF=yes" >> /etc/sysconfig/network

; M# y) I' Y# y' H$ V  Q
3 S6 G. y5 W3 t+ a) D/ }002_修改内核参数,并更新内核配置
0 E+ M- J1 D; Q9 k[tr][/tr]
* `/ R* x, A/ N7 `, N: ~- U[tr][/tr]
sed -i '/GRUB_CMDLINE_LINUX/ i\GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"\' /etc/default/grub0 U& J" ?& [8 b) k- r

& J+ a2 q. W4 V: @grub2-mkconfig -o /boot/grub2/grub.cfg

4 |8 Z3 V# Q7 Y( u$ h8 ?" B
2 S/ x9 y) f0 F6 X2 ^9 T( }2 P- N003_修改cloud.cfg配置文件 这里,就直接把需要修改的地方用 红色字体标注出来啦,当然也会把 替换的命令贴出来
! H% q, ~/ q2 E[tr][/tr]
7 T  S: _& F7 {9 r+ M$ Q[tr][/tr]
sed -i 's/disable_root: 1/disable_root: 0/g' /etc/cloud/cloud.cfg
! I, N+ u4 H7 p, wsed -i 's/ssh_pwauth: 0/ssh_pwauth: 1/g' /etc/cloud/cloud.cfg
4 `2 l: r7 o4 Z1 g% hsed -i 's/name: centos/name: root/g' /etc/cloud/cloud.cfg

  F* q" ~( h0 R5 D1 f7 z; t! d& m+ _+ L9 Z& b
下面编辑 cloud.cfg 部分仅供参考
2 k/ Y6 M" \7 W1 I) r2 \+ g$ {vim /etc/cloud/cloud.cfg; q6 w( v- D3 J/ n1 @- |, R

users:
9 x' i9 g3 B9 C3 j  y' @7 i, c - default
& A9 z1 v2 W$ ?. l3 N) x  c2 K" i8 N* Q: G2 @: H
disable_root: 0
6 n' ]: ?) t9 O. ^ssh_pwauth:   14 B' b3 Z9 U4 g: K

6 {( [# ~5 q3 S) O. z8 L% Alocale_configfile: /etc/sysconfig/i18n% ^* X' d( x+ m2 S
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']. t7 u8 }0 V& K  c' |: W% L
resize_rootfs_tmp: /dev: Z5 r! p- S! `# w+ K  R1 f9 ~
ssh_deletekeys:   0; x1 u# x+ b9 M% c$ C- _' n
ssh_genkeytypes:  ~# M: w5 j. Z- a/ O7 I; `8 ?  S  }  [
syslog_fix_perms: ~
5 }. M  y5 {2 ]' a  o1 n
5 H  f/ _& H/ P  x; Y7 @cloud_init_modules:
2 ^* I, ?$ I/ [ - migrator- \- v& T  J% `. ^) ?
- bootcmd
5 J1 U( J6 w; P! e  r  u - write-files6 e  y! j  g: O% g' u. u* d' b
- growpart5 n; U5 \9 r# E. L8 G
- resizefs
  d; K5 `! ^3 L - set_hostname
8 x2 `' M; ^* v) ~; H( l - update_hostname
0 U  e7 ~% h1 |' x - update_etc_hosts
* e* @6 B/ {9 b3 p- e  w - rsyslog
; ^% b: t3 o7 q: ]6 t! e - users-groups
* P% J. d/ f$ s4 J* O5 R - ssh5 w7 a$ B, P0 k) W5 z6 \

1 h+ ~/ a" @1 ]* H- M+ v4 Tcloud_config_modules:
9 Z) s- l/ z! _  l6 B8 Q' K - mounts* R, k5 G" f# c$ B* O# H7 w( v
- locale" N; y" {% b( g6 s- l, Q
- set-passwords
4 T7 Q; L0 T$ J( p3 H - yum-add-repo- X$ J2 G; @; D( }4 q& h
- package-update-upgrade-install
$ F" ?" E" q: d1 X. E4 T9 C - timezone/ ^1 H: ]7 |  O6 @5 ^
- puppet7 J$ ^" F& H1 \. W+ s- U8 g
- chef7 u4 ^/ H) f! o. B- B: ^% M  H/ H
- salt-minion2 H! G5 Y3 Y# W
- mcollective
; h9 L9 D6 s9 a$ T) F* ] - disable-ec2-metadata6 P3 Q* T) X4 _( X$ O2 p
- runcmd
+ _5 a; G) e8 T$ P
* c, t! }% g% Q9 r/ ucloud_final_modules:4 a9 ~, N7 R2 F
- rightscale_userdata" ]6 r" |% C" p* z5 ~
- scripts-per-once
/ p( ~7 N" u4 N1 j; h6 T - scripts-per-boot# i8 W) ?! j, o* @
- scripts-per-instance
( S! D+ M! x& @3 @1 ~ - scripts-user  }. R- Y  ?8 K: \4 }
- ssh-authkey-fingerprints" t- h+ w9 _* k' a
- keys-to-console9 e( w* }4 P& m0 S) h; E% ~0 ~% t
- phone-home
& y& z/ J" ]) d$ B- Y - final-message( _1 Q# q- f. F7 U: D

/ z, z% |; z# w- ^system_info:7 i1 N: X1 k* x
  default_user:1 ^  E2 ^3 s5 ^: m/ c* V0 _. J6 j
    name: root4 y( B- j( e) w0 C% g9 C+ Y# z
    lock_passwd: true
0 U& G) D$ A( n    gecos: Cloud User
3 y6 |- E! |, n8 ?    groups: [wheel, adm, systemd-journal]2 o$ D) M, C% {; j: \* }
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]% Q1 {) U4 X2 y5 T& ^
    shell: /bin/bash
* [' z' t. {! e2 g' ~  distro: rhel
0 S, O9 d1 q7 v; H8 J* H, f  paths:
# k* K8 d0 w2 V7 F+ _! ~) P2 V    cloud_dir: /var/lib/cloud& o1 n; Y3 y5 K- H# H* r
    templates_dir: /etc/cloud/templates& m" I; R. S; \4 q6 w
  ssh_svcname: sshd  o, K& W1 ?- o- q- q7 o  Z

! b( k; l3 E6 ?1 j; b# vim:syntax=yaml$ [; \' M3 E, |# q1 ]2 h

  h3 V! c/ O2 k* k

! M* }! _) D& v) s4 o2 ?004_添加修改、重置密码的脚本(这些操作均由下面的脚本一键执行添加)
8 R2 I' x* d' }) Q将下面的内容复制到一个文件,并赋予执行的权限即可  自动添加写好的服务脚本,并且自己添加为开机启动,还会把 /sbin 对应的文件加密 & l( O# a2 F% Q  a
+ _5 ~: Y. S/ g9 U9 a
vim meta_centos73.sh2 @# t( w) i; r( r' [% p
[tr][/tr]$ e9 d8 I: m8 }; C5 r
[tr][/tr]
#!/usr/bin/bash4 ~) Q: |6 T; v% _& `& z
cat > /etc/init.d/meta_data_service << END0 a# S9 y: M3 g' L5 s4 T  x5 H
#!/usr/bin/bash
4 c1 j9 u5 {( {0 k$ P#; _" k' }9 w7 |% D( Q, e$ @
# meta_data_service Start up meta_data_service the server daemon" J! g. d# a' W9 [
#8 i% f; A* u6 y- A" D9 i/ @# x. K
# chkconfig: 2345 98 981 Q) d/ z& _, Q7 `( ^0 N
# description: meta_data_service sspaas-cloud daemon  M* O( H7 B. l& \% @) z# \
#
$ T; f- X1 ?# a& L7 ?BASE_DIR=/sbin
% {4 k7 r& G, T7 LARGV="\$@"! t4 I9 D  v8 F5 Z" u9 w1 A+ v
start()- e1 t$ I7 l, a% Z
{& u5 V; t& l; O' W
echo "START meta_data SERVERS"- M0 V9 h* s$ Q7 m; {) r
\$BASE_DIR/meta_data > /dev/null 2>&1 && I* {& s" L+ b2 _# ^
}
8 |( y0 i9 c; ^& I% u/ W6 qstop()! ?* x" ~' L0 |
{
$ J# e8 s* z9 B4 p7 a#meta_data.pid: P' y  A4 Q' f, K& r
echo "STOP meta_data SERVERS"* ?; o  Q+ B" ?( b( z, d, f6 H
meta_datapid=\`ps -ef|grep meta_data|grep -v grep|awk '{ print\$2 }'\`0 j0 p: U& V' u
for i in \$meta_datapid
$ }# m, f0 O6 {+ g3 V$ fdo; i; @( j: o. Z$ ~/ j
kill -9 \$meta_datapid) o3 t  `1 [( P
done5 ?7 y: i) O: z% i/ O
}3 A" ]3 R4 Q0 E8 u6 f' @
case \$ARGV in' P+ I$ ~2 k5 r
start)( R% b& k: x) X, l9 N
start
+ u0 _& [; m% p1 P8 B/ w$ {( oERROR=\$?; z( Y% }; o& X+ ]
;;
' c' m# t, }, C7 O8 Bstop)
- e+ h5 o1 o; ~8 u# {0 |  u* Bstop
0 o- q* f& \5 J6 O! D' lERROR=\$?
- P. t6 N- P* @4 Z% F$ B" W# k7 J- P;; 7 \! g/ E: \  _& m% T( U7 M
restart)* ~; @. Z( p6 u% `% m( F4 \
stop* v: V: l7 r' \7 a9 w! L( g/ t9 b
start5 j$ ?- [2 @2 f0 j
ERROR=\$?
/ [: I0 \; m# J, w5 y2 l6 Z;; 8 Y! u* y# X0 ?
*)
! [* D; ~" r7 O) mecho "meta_data [start|restart|stop]"9 w! M" u: Y$ S3 p* p
esac* n  e- x; ]3 r3 Y
exit \$ERROR& ^$ _: K: s$ [. n# }- R
END" r8 j4 _( Z$ A* j" q+ {6 \
  ^) Y3 O5 y( i5 H
cat > /etc/init.d/meta_network_service << END
9 c! L. c- ~+ F" b$ ^; [#!/usr/bin/bash% \) ]! V% ^9 x* }3 ?% a. o
#8 B+ g/ Z! l1 m2 \( w$ l& t. Z
# meta_network_service Start up meta_network_service the server daemon
$ y7 K" V. b$ V' ?# @#5 n, J: a) ?- w: Y: _, B9 p
# chkconfig: 2345 99 99
; |" v- M5 g, M" x. T: m. c# description: meta_network_service sspaas-cloud daemon) W! E8 \9 d3 K, K& N8 Z% F$ K
#
) w+ Y& O% E( O2 c! `/ |& o5 LBASE_DIR=/sbin
2 ~. h" W! U9 F9 B0 Q6 w& l" AARGV="\$@"
7 \, c" Q/ a5 m' _; O# _start()* d1 B8 B6 i4 b5 R
{
( \* p1 l$ l: v; f* X9 eecho "START meta_data SERVERS"
( v9 [- n9 M% C. O' g\$BASE_DIR/meta_network > /dev/null 2>&1 &
! l; a5 g  p  @- E  Q- B2 E}" c2 l2 |; B- U6 \/ k
stop()
8 R0 ?* S' ?1 A: W' p8 s{ - \% _+ G% y7 E' j' }3 e3 x; b7 ?
#meta_data.pid
' t6 L. {8 h3 e: C1 ~echo "STOP meta_data SERVERS"
) r9 J* t4 I, Q9 \6 ^/ ameta_networkpid=\`ps -ef|grep meta_network|grep -v grep|awk '{ print\$2 }'\`
) r9 r, |/ _/ w7 A2 h, D' cfor i in \$meta_networkpid* d3 z1 K. z6 `( G7 E5 A4 `
do
; {$ K! ]0 y1 |" ^) v, e+ } kill -9 \$meta_networkpid
% n% g4 H+ {" _done
: o: ~7 S- @7 h}
$ J! B  x! }6 V3 M) Ccase \$ARGV in/ W, a! M* I# Z8 c5 {8 [- r
start)& |: a% T, Z. [* W2 @0 ]  y
start! E! q7 ]- l* y) I) c/ m
ERROR=\$?
  N) r$ d4 J! f* k$ `0 A6 E;; ! g! t& B; f& Q6 r
stop)
4 R* e- N' A  `8 ?% A; G& [' Qstop7 a# g! R8 [7 V% t8 z
ERROR=\$?
( N% Y* d' {$ n' @/ Q/ C4 Z1 v! c;;
$ f- p, D" i% f, _# `( _9 lrestart)
# I6 y  C, t7 ~) {2 L% Zstop9 y6 [# S( @2 C
start
' v: D0 {* Q# \+ eERROR=\$?' M# v+ L4 L7 I' r
;; 4 u: N% i* r3 m* x9 M! V5 ^0 q
*)
  e7 Z3 j7 f( |. z6 l4 X* decho "meta_network [start|restart|stop]"# o' D, e1 S( I) S* t; @
esac
5 l" v, N( W) i! y* R% Zexit \$ERROR- F2 I) Q/ U* w/ v0 b$ [
END
* ~: k) u4 T! T( x* U8 D& x! c' g
9 T8 f4 k7 D% P/ ?% y% icat > /sbin/meta_data << END
( W/ m* G9 ?' G: W3 J0 L3 e#!/usr/bin/bash4 V* m9 x' g: [2 N
m=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`' ^# b- @8 Y- c" k' b7 y+ X& t3 K
   status=\`echo \$m | jq '.changePasswd' | sed 's/"//g'\`0 y: q4 ?( M$ r5 U
   password=\`echo \$m | jq '.admin_pass' | sed 's/"//g'\`1 ]% M8 B9 T+ A7 e# u
     if [ \$status == True ];then
. M9 q% I) b/ L1 m' y+ \       echo root:\$password | chpasswd
/ ?/ D, c- m4 i: T) T6 h     fi+ V& f* O4 b* m* \

& f) y5 P% v6 Hwhile true* g& n1 G  `  `/ s" u$ S
  do
) \3 H( h/ J9 b$ _& W! ~% C    m1=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta' | jq '.changePasswd' | sed 's/"//g'\`. m- ^; l# O: h( f9 R# \8 y' [! J& W
    sleep 3
, _! i5 N) k4 K) H# E    m2=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`& t' a- Q4 ^$ }5 Z2 D
       changepw=\`echo \$m2 | jq '.changePasswd' | sed 's/"//g'\`
% N& Q/ @; L- ]       pass=\`echo \$m2 | jq '.admin_pass' | sed 's/"//g'\`
4 s% W, Q9 j  d4 c2 `
& J" E+ p, [4 H3 _$ M2 Y2 ^' j    if [ \$m1 == False ] && [ \$changepw == True ];then
! o# V/ g2 e' r7 R1 Y      echo root:\$pass | chpasswd& {2 n- ~% L$ ?& C! b2 S5 D9 A4 q
    else( Q5 [( J- Z# {7 X( c. `2 C
      echo "noting to do" >/dev/null
# V: X" d+ o# A4 F: m7 |7 O    fi
! {4 V& b9 @& ~" ?7 C  done6 f0 O5 ^: f# k% Z2 m# k) ^
END% {: _. z  T/ J9 y
) ^4 N. u1 X2 A2 y( {- G% S
cat > /sbin/meta_network << END
& j: l: z7 b1 q5 X- Q+ b#!/usr/bin/bash  k3 d8 Y* T0 @# Q
while true
1 w: `" [5 }" `9 u* H' t' w  do
3 H7 X  F) W+ ^; \! ]2 O) [     temp=\`ifconfig eth0 | grep broadcast | awk '{ print \$2 }' | awk -F "." 'BEGIN{ OFS="." }{ print \$1,\$2,\$3 }'\`& F, W8 d! w' {/ ?: X- @" w
     ip0=\`ip a | grep eth0: | wc -l\`+ D( u" b& T* _5 l( u& w
     ip1=\`ip a | grep eth1: | wc -l\`0 J/ I" Y' z+ N1 g2 O
     route0=\`route -n | grep "^0.0.0.0" | grep \$temp.254 |wc -l\`9 h5 o% ]# T/ D0 w- B
7 u0 E' m" q* z; v3 `
     if [ \$ip0 -eq 1 ] && [ \$ip1 -eq 1 ] && [ \$route0 -eq 1 ];then
" Q; r; U3 [. V' b( M      route del default gw \$temp.2540 J0 ?4 \: k  A3 u! e
     elif [ \$ip0 -eq 1 ] && [ \$ip1 -eq 0 ] && [ \$route0 -eq 0 ];then$ a4 Y& C% N$ T. C0 ~! _& e7 W2 b' k
      route add default gw \$temp.254
& K" }: `+ G6 \0 J( s5 V- c. D; C     fi
# G3 I2 M" S! A$ |5 N2 _2 F. z  sleep 3
( m6 m& Z9 f8 C% t1 V7 M- `7 @# u  done& {3 K& t* X, D" N) I$ P
END
$ E& C* S6 S/ m: F  P: W
+ ?( D, Q' m0 L# \( [/ Rchmod +x /sbin/meta_data
5 r' K& j% t1 {7 m' m& Gchmod +x /sbin/meta_network
8 |; E1 b5 T) Q( `. Cchmod +x /etc/init.d/meta_data_service
0 M! L7 L1 U5 k: U" [chmod +x /etc/init.d/meta_network_service
" v9 d% X" v$ s" f#
/ N3 R2 Z6 m" R- ]1 ]) K- Wgzexe /sbin/meta_data
3 i0 B( _0 j2 g3 i' C! O+ nrm -f /sbin/meta_data~
, p/ j9 A0 \) K% x+ }, M7 Ygzexe /sbin/meta_network   g9 X  X/ m; S( K
rm -f /sbin/meta_network~ $ r- C/ B( c/ ~
#
* l2 i. o$ J% c5 z0 Uchkconfig --add meta_data_service
" n9 o5 s6 P! }! e# j" Bchkconfig --add meta_network_service
3 L) x, f" A7 x; Z3 G$ l' Q/ M

0 H5 _/ w( p( P2 o( ^$ V下面 005 的操作仅仅用作删除上面meta_centos73.sh 的执行结果$ X: N8 B- B  v: H. b# Y, R) T: E
005_删除上面脚本添加的内容,可以执行下面的操作
4 d6 E6 N; w+ ^8 V0 Q[tr][/tr]+ T2 o! ?2 K' v- q) K& {: N& H
[tr][/tr]
chkconfig --del meta_data_service9 y2 ~2 G" w, j: U7 J
chkconfig --del meta_network_service
" E( [/ n! U: P- j5 _# {9 Srm -f /sbin/meta_data! E5 H. H/ a% X% [) J# T; L
rm -f /sbin/meta_network! ]) n4 ~: q4 |
rm -f /etc/init.d/meta_data_service ' c7 P; r" D% c
rm -f /etc/init.d/meta_network_service

% _7 v1 n2 w& s) @
* S3 Y: V, K; b1 L: x0 F% P006_删除之前添加的不必要的信息
9 r/ K* s9 u  @9 Y2 Q[tr][/tr]# V0 F. ^, K9 @3 L* k
[tr][/tr]
rm -f anaconda-ks.cfg
+ d; @# [0 {: b$ Erm -f meta_centos73.sh
8 i/ x7 p  }& O1 {5 P' Z

2 g, ~# c8 L. A007_关机即可
$ h+ I4 W0 d; A: F  c$ d: Q+ Lpoweroff5 v  V$ D" s/ M' M# Y$ t4 f* |
: S% j9 Q, `; t/ C( j& r& d: ~" r
到这里 openstack 的centos7.3镜像就做完成啦, {3 {- ]! Z$ x; b$ X
下面的操作,主要是吧 大的镜像进行压缩,并进行上传,下面的操作均在做镜像的服务器(宿主机)上操作
  A8 J8 U) Z6 H4 b) ~& y$ c" r! W1 O- c7 F
三、技能扩展:- h  l/ v4 y5 S9 O/ d& ^( @
2 W& E/ i% \1 [4 j2 }) ^1 O# y
001_显示kvm中所有虚拟机
0 \' R! K1 i% M! L8 [virsh list --all6 e9 G! h2 z! p1 ]2 H

$ R/ {9 L" v" b- F; Z002_执行清理任务,如,之前的历史命令,mac地址,ip地址等 7 A( p+ j9 t2 X; A1 i7 d6 b
virt-sysprep -d CentOS7
2 x! {: }8 K& {# y0 {! R7 e0 r; z$ e; I- V* a
003_在kvm中删除虚拟机,仅仅删除xml文件,不会删除镜像文件3 i+ Y3 C% @, ]2 |4 x
virsh undefine CentOS70 C2 o8 j, M( x# e0 @

9 o! `9 k$ O* B0 f: z004_将镜像压缩
3 S5 w0 `2 X# oqemu-img convert -c -O qcow2    压缩之前的路径+名字 压缩之后的路径+名字
, q2 m* T) g8 k9 n! F5 }9 A
, U$ s) p2 Z, Q8 d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:19 , Processed in 0.018306 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表