找回密码
 注册
查看: 4526|回复: 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 | 显示全部楼层
安装一些自己需要的工具- a# B  u" q% x" \/ Z9 f0 p/ r3 ?
000_添加自己的内部源,没有的同学,跳过此步骤即可;0 [7 p6 e/ r* w9 M5 [: `! [
" V- r' l1 U( V+ A  g, @
001_这里我只安装 cloud-init 、acpid 和 jq
% |0 D0 S: g) qacpid服务作用:重新引导或关闭实例
) C3 ^: L3 w- h1 A2 Djq 服务作用:处理json数据5 L9 N# D; h. L8 A1 p) R
cloud-init服务作用: 配置使用metadata(我把官网的简绍截一下图)
1 V( L1 d- c2 e* s, X: h) o1 {$ c% Z5 ?8 h1 B" I! L2 A

* S/ `: m. w, V+ D9 G0 Y3 ^1 @9 V3 i; y

& \- _& t0 O" D1 a  u
" `+ `) o2 V, e4 ?+ B4 g6 W! y$ P# Z4 X& x' c: T
[tr][/tr]' h) E* Q) @8 {% ~3 L7 \2 I
[tr][/tr]
yum -y install acpid cloud-init  jq# q# d6 D' s5 n2 C* Y+ K! i
3 ~! W# o) b# C
chkconfig acpid on
$ R4 l- F9 g+ H! C; I( G- E$ b6 J& d1 o4 |+ W: b  t* [! M
chkconfig cloud-init on+ }2 M2 {2 Z: B: D, T
8 y- {+ {/ x' \  Y1 I7 Q  Y
echo "NOZEROCONF=yes" >> /etc/sysconfig/network

4 h) N6 T4 N" e+ H, v) k8 [
; r/ b: d( a9 [8 @$ _5 _8 |002_修改内核参数,并更新内核配置
( V8 H* p  m, W! q, N4 |" \[tr][/tr]
4 W  |1 W3 u( A: F: m! a0 b[tr][/tr]
sed -i '/GRUB_CMDLINE_LINUX/ i\GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"\' /etc/default/grub) f- o: W) c/ H: _

" T* o, h' c% |( t6 [- q9 X8 R) q( g6 {grub2-mkconfig -o /boot/grub2/grub.cfg

$ O( S9 ]) i+ A# _( h/ M0 c. B6 M* M; r9 Q
003_修改cloud.cfg配置文件 这里,就直接把需要修改的地方用 红色字体标注出来啦,当然也会把 替换的命令贴出来/ A- F3 k% w' c0 D% j
[tr][/tr]
# F& H5 X# k4 o6 p4 K) S% c[tr][/tr]
sed -i 's/disable_root: 1/disable_root: 0/g' /etc/cloud/cloud.cfg
5 h+ m3 V( ?* Qsed -i 's/ssh_pwauth: 0/ssh_pwauth: 1/g' /etc/cloud/cloud.cfg! t/ w/ m  _6 T; V( x* |" M
sed -i 's/name: centos/name: root/g' /etc/cloud/cloud.cfg

! W0 {6 t" M, a" Y
! U1 |3 B7 [8 O: `/ D3 }0 d下面编辑 cloud.cfg 部分仅供参考( @4 j! R: n6 r, w* h
vim /etc/cloud/cloud.cfg* Q; c5 @, t: f* `' S

users:' s, O: F" m+ T' X
- default
' G# F8 Y9 \, X5 I) L7 W
+ O+ e& V+ K- T  o( r/ [disable_root: 0
; u4 n) _/ b) G: ?ssh_pwauth:   1
- p* m2 o) Z' [# S
9 i5 M' e) |+ V2 I% b3 p& klocale_configfile: /etc/sysconfig/i18n
  M! E& A. }* @3 q" d4 Vmount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']: A8 w3 H! u4 i4 w, G3 K( V. P
resize_rootfs_tmp: /dev
( h) z1 H/ i$ \( n0 k7 j' Y" f3 d6 mssh_deletekeys:   0
! O3 m6 m5 j/ o, \ssh_genkeytypes:  ~
7 B% G  H" ^7 y. s  i/ lsyslog_fix_perms: ~
; L& E  G) a1 ]# J+ z1 B
: ~2 v% q+ ]  |- Y! {3 R, _$ z! {cloud_init_modules:9 ]) R! l6 P% C2 {% E
- migrator7 g$ `: \; D; S6 Y9 A: ^7 J
- bootcmd
; B/ R( l4 F2 R$ @( A- i& M6 L+ Y - write-files
# s8 u- s, _2 \9 x - growpart
" D4 y1 E+ n, d+ h9 i- v - resizefs
1 g- o, e! o) P, F0 R/ F7 m - set_hostname& I- J4 C$ D8 a
- update_hostname
5 u( p$ b8 T* g' | - update_etc_hosts
2 E) n/ y5 A" q6 H9 j8 } - rsyslog3 f( S6 m8 k( }5 ~) m# K6 p
- users-groups& D  J0 G1 I, g2 x+ u8 l3 T
- ssh
4 E9 z/ o$ |2 t$ v
4 @0 t2 G6 \+ }* u, qcloud_config_modules:! Z/ ]& K3 s4 I. {: |
- mounts
" k+ F  N/ W& |8 T3 z1 R - locale( o* ^' i" }& `* W! P# P& q
- set-passwords
1 ]% ~4 u# B8 w - yum-add-repo1 d2 s  ~; D! r! t
- package-update-upgrade-install8 N& W2 u* L* v6 m- c, x
- timezone+ l8 }  R+ b2 s$ m1 e
- puppet( E$ u: d  Y% ]9 \- r
- chef
! V7 W$ h, ~1 M( y2 y - salt-minion
/ J  J# S# r$ G. ~ - mcollective3 j# V4 W. a0 j. q
- disable-ec2-metadata! W6 O4 Q3 O/ @9 J
- runcmd4 f6 N1 c+ `4 n7 _, y2 m

0 A5 t# l/ u! F  u  k  Ocloud_final_modules:
8 W, `% o$ {: h) Y- y: I: T" H/ l - rightscale_userdata
: G' n3 X! U2 [ - scripts-per-once
' Q0 g' g3 J; u) i9 ? - scripts-per-boot
$ `. f1 C1 `. T/ k - scripts-per-instance1 }# w) x, G4 E! d' N
- scripts-user
4 `& l/ u( C2 T7 w% D( m; F  D - ssh-authkey-fingerprints
1 a$ W& @5 N4 J& W& ? - keys-to-console
4 `. Z$ y  R/ h5 ~( H: h - phone-home
! R/ E) y& I- o# u - final-message& ?; q" X5 k0 l3 Q6 o' Y
1 l) _* Y& S' r/ W" Q
system_info:: B5 m) {8 g3 g3 x% Z
  default_user:
5 h; N* n  `' [/ _    name: root
( R9 h. c, O! q3 ]- f+ [    lock_passwd: true
8 {6 H& _. C3 R    gecos: Cloud User
3 r4 j5 A% V: j) G. M    groups: [wheel, adm, systemd-journal]
+ f  r2 R4 |. b, Q3 o    sudo: ["ALL=(ALL) NOPASSWD:ALL"]6 k: g. w& H- ]
    shell: /bin/bash$ ^0 J4 ?4 ~* @$ |7 {
  distro: rhel0 }% o% C3 f% E( q8 E" f' H- h
  paths:5 D* X) D! a* V+ r+ B2 I* A3 M
    cloud_dir: /var/lib/cloud& G& W9 k& R" Y8 p: y0 b; A! ~
    templates_dir: /etc/cloud/templates" \$ z6 X+ s) |  K9 `6 ]9 O! ?- u1 h
  ssh_svcname: sshd
6 e9 t1 Y1 t6 q- ]% ?' h
0 Z8 Q: d1 y- j8 p6 j3 B, _" v# vim:syntax=yaml
! S% R3 Q" j: L/ F
7 Z% u/ o+ y0 ]- W3 H

. a* y1 m2 p+ g  o) K+ }004_添加修改、重置密码的脚本(这些操作均由下面的脚本一键执行添加)
- E" ^, K- ~1 d( @# X3 D将下面的内容复制到一个文件,并赋予执行的权限即可  自动添加写好的服务脚本,并且自己添加为开机启动,还会把 /sbin 对应的文件加密 * B* J& A4 F) t$ T' Q
5 p- _: f6 t9 z' C1 q
vim meta_centos73.sh$ B0 I5 {' ?1 k
[tr][/tr]
' r6 K3 V$ T/ X, V[tr][/tr]
#!/usr/bin/bash
5 G* l2 y. _2 @9 I2 E* q) S+ ccat > /etc/init.d/meta_data_service << END
' T# C, O( M& \) _, K1 ]7 [9 i% H#!/usr/bin/bash  ^, z  q' t( u$ v$ B  F
#8 c" E. _' @8 h: ]
# meta_data_service Start up meta_data_service the server daemon
7 l3 A7 l- X; u/ y1 W$ b#
6 X1 v2 a4 t  l$ ^# chkconfig: 2345 98 98
; H8 G+ i+ E9 c2 {3 E4 E* Z4 ]5 h. S# description: meta_data_service sspaas-cloud daemon
2 m( b( J4 ~3 n. {& v1 j( e#
+ I" U! `8 }! h, Z) D! jBASE_DIR=/sbin  B* j& m1 i; A! z8 x/ {
ARGV="\$@"/ J% E" c7 l5 L% y; {, _: r
start()! b6 k6 `3 k1 X' L3 t) I. f
{+ T5 y* V1 s+ w6 B/ ~) [0 e
echo "START meta_data SERVERS"
1 S! F' n5 `: q2 C\$BASE_DIR/meta_data > /dev/null 2>&1 &
5 g# u+ Y% w9 z  d# F3 Y; n/ n/ d}- b: z" c$ U! F& q0 h- y8 r
stop()
' J0 ~' w2 Y: h  q+ f* p- h" `+ S{ * W& V$ V8 E3 n% r
#meta_data.pid0 l. r- z& F& M( Y
echo "STOP meta_data SERVERS"4 b) P- k/ S6 U: S7 e' t4 R: X
meta_datapid=\`ps -ef|grep meta_data|grep -v grep|awk '{ print\$2 }'\`
6 D2 E7 e( m/ ^% w8 nfor i in \$meta_datapid* I3 D# I( J9 G  B
do4 X* U2 J# C6 v* p
kill -9 \$meta_datapid
4 G8 N: t) ^. R2 U  @- rdone
4 I6 c  k. p2 |  O}' \: g* l' d4 `, O3 f
case \$ARGV in) P/ H* M" N& k7 ^  {% i( L3 J
start)
- c" v0 O5 {3 X4 ~3 ?start
, H/ P, F7 j1 U# f& K. T+ F, \$ r. EERROR=\$?( t& n' Y2 {5 F, t& ^2 c; X% Q
;;
+ d3 [! s8 ~/ W- }" `. X, Kstop)
7 L( H4 l! T, estop5 F6 d2 q6 W# b) C
ERROR=\$?
- ?% k; K/ r" v, |;;
/ \# V: y+ V& H' l* Irestart)6 H* O9 f; ?( k$ Z' n$ \
stop
' k4 J& C  W2 L& E1 istart+ X6 E+ j4 b; q+ r7 v& @
ERROR=\$?
( {  V8 d" P; i2 r2 b, n! t. \;;
& K  Q) j0 @' U8 ]9 ]*)
1 K3 I% H- X/ C5 r) b& Mecho "meta_data [start|restart|stop]"
- B0 T' [# N8 n5 Qesac) T. Y4 j- |* M; p+ v" ?
exit \$ERROR, v4 z0 b- G$ T: e
END7 ?7 E: r% M. E- ?" S# r- G
* A& D& H' X; d( J
cat > /etc/init.d/meta_network_service << END6 \' b, X  k' }2 ]5 l: F, {9 o
#!/usr/bin/bash
" a: D0 T. f- R#
5 G1 S1 Y( l- K# meta_network_service Start up meta_network_service the server daemon
. ?" ]. D  d! r. Z- l# E#) T5 Y% \5 S3 c# @5 b
# chkconfig: 2345 99 99* F4 ?8 R- {6 b1 n# z4 q
# description: meta_network_service sspaas-cloud daemon- d0 |5 B' x* K0 t
#
4 p! E" U0 l9 y7 Q- i  l* SBASE_DIR=/sbin) x6 Z* L1 U" {; W
ARGV="\$@"
  g9 z: L+ z; e( X* ^start()
' ]3 R% U# k; z{; v* g0 j7 S7 o( g6 d/ D- C. q# s) l
echo "START meta_data SERVERS". i+ G: y+ c: z. Y( T# g
\$BASE_DIR/meta_network > /dev/null 2>&1 &
: ^9 g, P" b$ o, O( g}
. d. P* O& D" X$ [stop()
# C4 d& T- A7 ]{
- t8 a: n8 c- `% l, S#meta_data.pid
6 Z. z& D  F( [1 ^* techo "STOP meta_data SERVERS"* k0 E# l- g" s) |, N8 ^* [: D7 Z
meta_networkpid=\`ps -ef|grep meta_network|grep -v grep|awk '{ print\$2 }'\`5 Z: ?* q4 @' v8 O4 n# e9 H
for i in \$meta_networkpid
, v/ J; R. t& L' i5 Pdo( R. r+ Y8 m$ _8 t
kill -9 \$meta_networkpid
) o7 |9 e/ Z: O0 Z' v. |- s# Y8 e6 Pdone
5 K7 U5 |/ g+ y}3 @' B, q/ v2 m6 V
case \$ARGV in( h! @; l  q, ?
start)
+ x/ W+ y: m' h% x+ H4 Vstart5 I1 [( F1 K+ }9 ]- ]7 ?. d7 Z
ERROR=\$?7 j5 n: u, A1 M: y( [7 F& x) P
;; 7 D' P$ w+ y6 a6 j
stop)
% T7 x1 d: ]4 m( r9 @- cstop
" \2 c, l4 F4 n  }ERROR=\$?6 t9 d; d3 c) m1 r! K  e' M. g
;; ; G4 G3 m. u" l; y1 z
restart)# _( y9 k1 g/ d) R
stop
6 x# n- P' J. h0 N+ S3 z7 fstart
% i0 }* _) B5 {) L, A7 {. rERROR=\$?
0 d2 T) T+ S. M* ?;; : u( ~! y7 N7 y( t7 R8 C6 g
*)
2 |! H% R. U" {2 Yecho "meta_network [start|restart|stop]"
1 l6 M( c; z$ J0 j$ n0 h) mesac
! {, j# X. H& I6 `exit \$ERROR
* U" ]; j, Q( j1 j( F+ hEND
/ r7 j9 ?) P" U. g/ B. R" `
" Y8 X/ x4 N; \3 ncat > /sbin/meta_data << END* h! z( p2 H* W8 K- |. b% q
#!/usr/bin/bash8 e+ F5 N& M/ W6 W; D, {# t
m=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`, q$ B  Y8 r( @: L0 P4 g
   status=\`echo \$m | jq '.changePasswd' | sed 's/"//g'\`9 K2 _( u+ w% j- x% \
   password=\`echo \$m | jq '.admin_pass' | sed 's/"//g'\`0 h& t1 r( H1 U) p7 ]$ R
     if [ \$status == True ];then) ~1 v- D; q$ Q! V& Z" t" C
       echo root:\$password | chpasswd
. Y  C8 p; ^1 I* \0 u     fi
2 i3 C7 R5 t8 g7 Y! _
- \6 V5 q8 O/ Xwhile true# `! J. X* l% l  `+ h
  do
2 g' r8 ~1 g& Z; x4 {, {    m1=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta' | jq '.changePasswd' | sed 's/"//g'\`
; a# n+ }7 |* B- u$ F/ f5 ~    sleep 3* D# y) \; f, F; J/ t; c* z' u0 }
    m2=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`
4 h* m; s$ V* L7 L7 L+ R1 N! C, v7 J* ^& q       changepw=\`echo \$m2 | jq '.changePasswd' | sed 's/"//g'\`2 `' C( X6 h3 _% R6 i! I, A) Z! m
       pass=\`echo \$m2 | jq '.admin_pass' | sed 's/"//g'\`$ w  |3 e0 r7 h
+ ^5 ?6 B5 u0 ~/ a. l+ ^4 P3 L
    if [ \$m1 == False ] && [ \$changepw == True ];then
$ B9 [3 q: Z% `* f5 w; r      echo root:\$pass | chpasswd. }" s/ y! K, p7 r3 Q
    else% p4 l' H8 @, G8 X  [' C+ |+ Z
      echo "noting to do" >/dev/null8 {( B& O$ {& }! ~  r4 Y
    fi! |9 a2 A; f8 t. P4 l0 s( Y
  done# s! L5 `- ?. c0 L: @% N
END
2 g! T' q" L  K! j3 V: j7 E3 F) d3 @/ @
cat > /sbin/meta_network << END
2 A5 ?7 \% f2 [( j7 x7 p2 ~- Z# k#!/usr/bin/bash. Q- U. _( D! r% C
while true
  I/ U' r8 |% P4 t  do" [* M' J2 E; w" n
     temp=\`ifconfig eth0 | grep broadcast | awk '{ print \$2 }' | awk -F "." 'BEGIN{ OFS="." }{ print \$1,\$2,\$3 }'\`
1 ]3 C& _! ?3 s% N' y2 S* ?1 C' \8 ?+ X     ip0=\`ip a | grep eth0: | wc -l\`
8 y4 v6 f0 L- \" \5 {% ]1 _" b$ u( i     ip1=\`ip a | grep eth1: | wc -l\`
7 m) Y0 M7 a( Y! S( ?* ]     route0=\`route -n | grep "^0.0.0.0" | grep \$temp.254 |wc -l\`! x  x8 H& r6 o$ e# Q

0 @  j' u( }% d0 S3 S0 B) t/ \+ D     if [ \$ip0 -eq 1 ] && [ \$ip1 -eq 1 ] && [ \$route0 -eq 1 ];then
. |3 e3 O5 s  `* [1 _; d      route del default gw \$temp.254! w. k0 N& m6 Z/ V. |
     elif [ \$ip0 -eq 1 ] && [ \$ip1 -eq 0 ] && [ \$route0 -eq 0 ];then6 K4 C6 x7 G6 X
      route add default gw \$temp.254
# O+ N; A- q! ]4 `8 w/ V     fi
" M3 A. X% U8 m2 Y. D" j% s' [  sleep 3
$ ~( N! z. _' j  done
* [  Q* E4 Z% W$ s4 l2 O/ TEND6 K* k) D# D1 m6 W; g5 I( w7 d+ E; I8 Q
  j3 d* I+ M/ r  R
chmod +x /sbin/meta_data+ \' P; ]" Y3 h* P
chmod +x /sbin/meta_network
- n& E% I1 P! S7 {! Zchmod +x /etc/init.d/meta_data_service$ ]: J$ c+ Z. A: j$ g2 G" H0 g
chmod +x /etc/init.d/meta_network_service* H( O% a) P+ B7 t' G
#$ K  A. ]7 A$ x- J& t8 ]
gzexe /sbin/meta_data
4 F6 H- ?1 y9 h# w3 e0 Orm -f /sbin/meta_data~
( U' A  p2 R8 ngzexe /sbin/meta_network + [8 O5 o6 S1 u3 D8 ^% [( T- e
rm -f /sbin/meta_network~
' z0 J- P6 n% r#
) g$ l2 @3 o5 `# n# w$ K  _. kchkconfig --add meta_data_service
5 @  B. P5 {1 `" l7 h9 |8 pchkconfig --add meta_network_service
7 f( z& n: n! {: A! ?9 ]6 A
9 @$ E1 W* o' ?8 }6 M2 \5 q
下面 005 的操作仅仅用作删除上面meta_centos73.sh 的执行结果! p% \% ~& G0 V& G
005_删除上面脚本添加的内容,可以执行下面的操作& ]" `3 g0 w' ]
[tr][/tr]& b& V# D1 d, `
[tr][/tr]
chkconfig --del meta_data_service
- c% [3 h1 L- a# L: J( Ichkconfig --del meta_network_service
8 e0 U" z- W8 z+ }0 jrm -f /sbin/meta_data
1 ?1 k  R4 S( M- k5 Q' |4 N3 }rm -f /sbin/meta_network
; W8 e, k. D3 r+ Urm -f /etc/init.d/meta_data_service ! [3 I  m1 A- K& [. ]9 r( a
rm -f /etc/init.d/meta_network_service

* a7 s( z2 ?) Z
4 K( w3 R' z8 [! `006_删除之前添加的不必要的信息# |: a% d! Q% e9 Z& B
[tr][/tr]
/ m7 L. K2 k% c1 z& a[tr][/tr]
rm -f anaconda-ks.cfg
. @5 ]0 z5 F% `0 c7 U& Grm -f meta_centos73.sh

2 `7 p  w& n3 U; U. S) W' i; Y" [0 N+ n
007_关机即可
  g! H( C& e  [2 L; w% \7 ?; Dpoweroff
6 M4 {" G) z# c3 o4 w! X1 a! b! g- P9 B/ X6 |: D
到这里 openstack 的centos7.3镜像就做完成啦
/ w# R( h, ], g6 ?. c( {' M. v7 s下面的操作,主要是吧 大的镜像进行压缩,并进行上传,下面的操作均在做镜像的服务器(宿主机)上操作( B2 G3 H8 g/ W) h& F: K6 Z

% k: s4 v9 `$ M6 f三、技能扩展:% f% s) z% Y7 n6 z3 g

( m0 u$ a: }5 H, P* _001_显示kvm中所有虚拟机" I# w; V: b  j- k5 {7 y
virsh list --all# c7 S. E' L4 r% N) `3 X
# t- f: @$ R+ c, h
002_执行清理任务,如,之前的历史命令,mac地址,ip地址等
( ]( F) @3 b& l9 d1 q- ^virt-sysprep -d CentOS7
, w% F' _; \3 w2 e% {
. ~& Q  u2 Z+ u9 P9 c7 m% s& `4 z003_在kvm中删除虚拟机,仅仅删除xml文件,不会删除镜像文件8 G: q1 u) z/ |+ @6 G" Z' n# g. P
virsh undefine CentOS7# T3 _. ^; [; D3 i, x* m
+ Y5 H2 y4 ~, w4 j# b- d, N
004_将镜像压缩
- X' u# M% r# O3 U4 f/ aqemu-img convert -c -O qcow2    压缩之前的路径+名字 压缩之后的路径+名字
9 z+ Y  l6 P! P. T5 I- J8 N2 d) c/ p+ q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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