kickstart+mkisofs制作自动安装的镜像

ks文件模板可以参考/root/anaconda_ks.cfg(根据当前操作系统实际安装情况生成的一个文件),然后以此为模板经行编辑,制作自己的ks文件。

 

ks.cfg文件组成大致分为3段

  1.命令段:

  键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项

  2.软件包段:

  %packages

  @groupname:指定安装的包组

  package_name:指定安装的包

  -package_name:指定不安装的包

  在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。

  3.脚本段(可选):

  %pre:预安装脚本(由于只依赖于启动镜像,支持的命令很少)

  %post:后安装脚本(基本支持所有命令)

 

1. 挂载镜像到本地,并复制该镜像中的所有文件作为模板

mkdir /mnt/iso
mkdir ~/ks.iso
mount /var/lib/libvirt/images/CentOS-8.5.2111-x86_64-dvd1.iso /mnt/iso/
cp -r /mnt/iso/ ~/ks.iso/

 注:背景图为isolinux/splash*,如centos8为splash.png,centos6为splash.jpg,可用同名文件替换,图片大小640x480

 

导入新加的rpm包

cd /root/ks.iso/iso

#将收集好的rpm,放到AppStream、BaseOS中的Packages中,然后重新生成repodata
mkdir /root/zip
cp /mnt/AppStream/repodata/e1428debe6fbc707d9e40f69b9df9da1e26c2af25bce7509e41068cc57b54d59-comps-AppStream.x86_64.xml.gz  .

gzip -d e1428debe6fbc707d9e40f69b9df9da1e26c2af25bce7509e41068cc57b54d59-comps-AppStream.x86_64.xml.gz


cd ./AppStream/

createrepo_c -g /mnt/AppStream/repodata/d38ae79097e78b4222a259c16c0c8c67ffb5483816bb0667c1f55ed8ad574d1c-comps-AppStream.x86_64.xml  -d .

modifyrepo_c --mdtype=modules /root/zip/e1428debe6fbc707d9e40f69b9df9da1e26c2af25bce7509e41068cc57b54d59-comps-AppStream.x86_64.xml repodata/

 

 

 

2. 复制/root/anaconda_ks.cfg文件作为模板,并编辑ks文件

LABEL=CentOS-8-5-2111-x86_64-dvd此处是否修改待定,LABEL标签应为iso的volume id

cp /root/anaconda-ks.cfg /root/ks.iso/iso/.ks.santiagod
cd /root/ks.iso/iso/

 

3. 调整isolinux.cfg文件

设置ks启动

注:menu default 可以使得该label成为默认启动项,倒计时结束后自动选项该菜单启动

vi /isolinux/isolinux.cfg
#修改linux和check两个label label linux menu label
^Install Santiagod_ks_test Linux 8 [manual] kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 quiet label check menu label Install Santiagod_ks_test Linux 8 [auto] menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 inst.ks=hd:LABEL=Santiagod-linux-8-5-2111-x86_64:/.ks.santiagod inst.nosave=all quiet

 

修改系统标签(这个可以不修改,若有改动根据实际情况而定,注意LABEL的值为ISO镜像的volume id)

关键是inst.ks=*,需注明ks文件的路径

sed -i 's/CentOS Linux/Santiagod_ks_test Linux/g' isolinux/isolinux.cfg 
sed -i 's/LABEL=CentOS-8-5-2111-x86_64-dvd/LABEL=Santiagod-linux-8-5-2111-x86_64/g' isolinux/isolinux.cfg 

 

sed -i 's/CentOS Linux/Santiagod_ks_test Linux/g' EFI/BOOT/grub.cfg 
sed -i 's/CentOS-8-5-2111-x86_64-dvd/Santiagod-linux-8-5-2111-x86_64/g' EFI/BOOT/grub.cfg

 

cat EFI/BOOT/grub.cfg
set default="1"

function load_video {
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod all_video
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2

set timeout=60
### END /etc/grub.d/00_header ###

search --no-floppy --set=root -l 'Santiagod-linux-8-5-2111-x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install Santiagod_ks_test Linux 8 [manual]' --class fedora --class gnu-linux --class gnu --class os {
    linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 quiet
    initrdefi /images/pxeboot/initrd.img
}
menuentry 'Install Santiagod_ks_test Linux 8 [auto]' --class fedora --class gnu-linux --class gnu --class os {
    linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 inst.ks=hd:LABEL=Santiagod-linux-8-5-2111-x86_64:/.ks.santiagod inst.nosave=all  quiet
    initrdefi /images/pxeboot/initrd.img
}
submenu 'Troubleshooting -->' {
    menuentry 'Install Santiagod_ks_test Linux 8 in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 nomodeset quiet
        initrdefi /images/pxeboot/initrd.img
    }
    menuentry 'Rescue a Santiagod_ks_test Linux system' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 inst.rescue quiet
        initrdefi /images/pxeboot/initrd.img
    }
}

 

 4. 调整isolinux/grub.conf文件(实验证明,此文件若不调整,亦不影响镜像的自动化安装)

cat isolinux/grub.conf
#debug --graphics
default=1
splashimage=@SPLASHPATH@
timeout 60
hiddenmenu
title Install Santiagod_ks_test Linux 8 [manual]
    findiso
    kernel @KERNELPATH@ @ROOT@ inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 quiet
    initrd @INITRDPATH@
title Install Santiagod_ks_test Linux 8 [auto]
    findiso
    kernel @KERNELPATH@ @ROOT@ inst.stage2=hd:LABEL=Santiagod-linux-8-5-2111-x86_64 inst.ks=hd:LABEL=Santiagod-linux-8-5-2111-x86_64:/.ks.santiagod inst.nosave=all quiet
    initrd @INITRDPATH@

 

 5. 调整ks文件

cat .ks.santiagod
#version=RHEL8
# Use graphical/text install  #图形化/字符安装界面
#text
graphical

#使用系统上的第一个光驱执行安装
#cdrom
#装机使用的yum源
#repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream
#repo --name="BaseOS" --baseurl=file:///run/install/sources/mount-0000-cdrom/BaseOS

#要实际运行安装,必须指定 cdrom、harddrive、hmc、nfs、liveimg 或 url 之一
url --url=file:///run/install/repo/

#最小化安装,及其他预装应用
%packages
@^minimal-environment
kexec-tools
bash-completion
curl
wget
tar
unzip
ipmitool
%end #使用美式键盘 keyboard --xlayouts='us' #系统默认语言设置,即环境变量$LANG,--addsupport添加对附加语言的支持 lang en_US.UTF-8 --addsupport=zh_CN #设置主机名 network --hostname=santiagod.ks #IP设置,需指明device,否则会取消后续所有network指令 #network --bootproto=static --ip=192.168.116.10 --netmask=255.255.255.0 --gateway=192.168.116.1 --nameserver=8.8.8.8,114.114.114.114 --device=ens192 #enable时,系统第一次引导时启动 Initial Setup,设置语言、鼠标、键盘、root 密码、安全级别、时区以及默认网络配置。默认为disable firstboot --disable #使用这个选项在没有用户互动的情况下接受最终用户许可证协议(End User License Agreement,EULA)。指定这个选项可防止 Initial Setup 在完成安装并第一次重启系统后提示您接受该许可证 eula --agreed #指定使用sda并忽略其他盘 #ignoredisk --only-use=sda,vda #清理盘上的所有分区表 #clearpart --all --initlabel #基于 UEFI 的 AMD64、Intel 6464 位 ARM 需要 200 MiB EFI 系统分区。推荐的最小值是 200 MiB,默认大小为 600 MiB,最大为 600 MiB。BIOS 系统不需要 EFI 系统分区 #part /boot/efi --fstype="efi" --ondisk=sda,vda --size=600 --fsoptions="umask=0077,shortname=winnt" #将sda创建为ID:311的物理卷,最小10G,若磁盘大于10G,也全部做成物理卷 #--grow 自增长 #part pv.311 --fstype="lvmpv" --ondisk=sda,vda --size=10240 --grow #boot分区,建议大小1G #part /boot --fstype="xfs" --ondisk=sda,vda --size=1024 #将pv.311加入卷组,默认pe大小4M #volgroup santiagod --pesize=4096 pv.311 #逻辑卷-交换空间,视磁盘大小而定,为安装时的系统盘大小10% #logvol swap --fstype="swap" --recommended --name=swap --vgname=santiagod #逻辑卷-根分区,虽然 5 GiB 根文件系统允许您最小安装,但建议至少分配 10 GiB,以便可以尽可能安装您想要的软件包组 #logvol / --fstype="xfs" --size=10240 --grow --name=root --vgname=santiagod #系统时区上海,使用UTC时间,不开启时间同步 timezone Asia/Shanghai --isUtc --nontp # Root password: Admin123! rootpw --iscrypted $6$uMfDCfQnqrZgk/yL$F.DkU0TF2k14QNqLUv.cc8X16ZUXGe/8Q./rspkY1tKnmOywrgcBx.eEA7u9oWT/u2T6jzNM410EL1Uy5oPk9/ #禁用selinux与firewalld firewall --disabled selinux --disabled #安装完成后,重启系统 #--eject - 在重新启动前尝试弹出可引导介质(DVD、USB 或其他介质) reboot --eject %include /tmp/part-include #禁用kdump %addon com_redhat_kdump --disable --reserve-mb='auto' %end %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end #------------------------------------------------------------------------------------------------------------------------------------------------------ %pre ###设置系统盘 #找到大于10G的盘 disk=$(while read line;do awk 'BEGIN{} {if ($3 >= "10485760" && $2 == "0") print $4} END{}';done < /proc/partitions|grep -Ew 'sda|vda|hda') #disk=sda,vda,hda cat > /tmp/part-include << EOF_PART clearpart --all --initlabel #基于 UEFI 的 AMD64、Intel 6464 位 ARM 需要 200 MiB EFI 系统分区。推荐的最小值是 200 MiB,默认大小为 600 MiB,最大为 600 MiB。BIOS 系统不需要 EFI 系统分区 part /boot/efi --fstype="efi" --ondisk=$disk --size=600 --fsoptions="umask=0077,shortname=winnt" #将sda创建为ID:311的物理卷,最小10G,若磁盘大于10G,也全部做成物理卷 #--grow 自增长 part pv.311 --fstype="lvmpv" --ondisk=$disk --size=10240 --grow #boot分区,建议大小1G part /boot --fstype="xfs" --ondisk=$disk --size=1024 #将pv.311加入卷组,默认pe大小4M volgroup santiagod --pesize=4096 pv.311 #逻辑卷-交换空间,视磁盘大小而定,为安装时的系统盘大小10% logvol swap --fstype="swap" --recommended --name=swap --vgname=santiagod #逻辑卷-根分区,虽然 5 GiB 根文件系统允许您最小安装,但建议至少分配 10 GiB,以便可以尽可能安装您想要的软件包组 logvol / --fstype="xfs" --size=10240 --grow --name=root --vgname=santiagod EOF_PART #------------------------------------------------------------------------------------------------------------- %end %post #!/bin/bash ###打标签 echo -e "\033[1;31mSantiagod \033[1;34mlinux \033[1;31m8\033[1;34m.15\033[0m\n" > /etc/issue #-------------------------------------------------------------------------------------------- ###内核调优 #kernel.sem 表示设置的信号量 #fs.aio-max-nr 表示系统范围异步 I/O 请求的最大并发数 #fs.file-max 表示一个进程可以打开的文件句柄的最大数量 #net.ipv4.ip_local_port_range 表示专用服务器模式下与用户进程通信时分配给用户的端口区间 #kernel.pid_max 表示进程ID数量上限 #验证:sysctl 模块名,如【sysctl kernel.sem】 cat > /etc/sysctl.d/Santiagod-98-sysctl.conf <<-\EOF_SYSCTL kernel.sem = 4010 641600 4010 1024 fs.aio-max-nr = 1048576 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65501 net.core.rmem_default = 1048576 net.core.rmem_max = 1048576 net.core.wmem_default = 1048576 net.core.wmem_max = 1048576 vm.swappiness = 0 vm.dirty_background_bytes=102400000 vm.dirty_bytes=409600000 vm.min_free_kbytes=512000 kernel.pid_max = 4194303 EOF_SYSCTL #限制用户的最大线程数[nproc]和最大打开文件数[nofile],*代表所有用户,131072代表最大可接受的数 #有soft,hard和-,soft指的是当前系统生效的设置值,软限制也可以理解为警告值。hard表名系统中所能设定的最大值。 #soft的限制不能比hard限制高,用-表名同时设置了soft和hard的值。 #验证:ulimit -a cat > /etc/security/limits.d/Santiagod-20-nofile.conf <<-\EOF_LIMITS * soft nproc 131072 * hard nproc 131072 * soft nofile 131072 * hard nofile 131072 EOF_LIMITS #---------------------------------------------------------------------------------------------------------- ###Serial串口设置及网卡命名规则eth0模式 if [ $(systemd-detect-virt) = none ]; then dnf module disable virt -qy else ### linux-firmware is use-less in VM dnf remove -y linux-firmware ### Enable serial console && use ethN names in VMs CONF=/etc/default/grub grep GRUB_TERMINAL $CONF | grep -q serial || \ sed -i '/^GRUB_TERMINAL/s/_TERMINAL.*$/_TERMINAL="serial console"/' $CONF grep GRUB_SERIAL_C $CONF | grep -q serial || \ sed -i '/^GRUB_TERMINAL/aGRUB_SERIAL_COMMAND="serial --speed=115200"' $CONF grep GRUB_CMDLINE_ $CONF | grep -q ttyS0 || \ sed -i '/^GRUB_CMDLINE_/s/"$/ net.ifnames=0 biosdevname=0 console=ttyS0,115200n8"/' $CONF sed -i -e '/CMDLINE/s/rhgb/spectre_v2=off/' -e '/CMDLINE/s/quiet/nopti/' $CONF fi #grub2-mkconfig -o $(find /boot -name grub.cfg) #---------------------------------------------------------------------------------------- ###修改系统标签 #验证:more /etc/*release
rm -rf /etc/system-release
cat /etc/centos-release > /etc/system-release rm -rf /etc/{redhat,centos}-release sed -i '/URL/d' /etc/os-release
sed -i 's/CentOS/Santiagod/g' /etc/{system,os}-release sed -i -e 's/centos/santiagod/g' -e 's/CENTOS/SANTIAGOD/g' /etc/{system,os}-release grub2-mkconfig -o /boot/grub2/grub.cfg
#---------------------------------------------------------------------------------------- ### rc.local 删记录,设IP cat <<'EOF' >> /etc/rc.d/rc.local #START# find /root -type f -name \*-ks.cfg -exec rm -f {} \; find /tmp -type f -name ks-\* -exec rm -f {} \; find /var/log \( -name anaconda -o -name installer.log \) -exec rm -rf {} \; ### 预设IP nmcli -g UUID con | xargs -I{} nmcli con down {} nmcli -g UUID con | xargs -I{} nmcli con del {} IF2=$(nmcli -g DEVICE dev | grep -v lo | head -1) if [ -n "$IF2" ]; then nmcli con add type ethernet ifname $IF2 con-name $IF2 nmcli con mod $IF2 ipv4.method manual ipv4.addr 192.168.116.10/24 nmcli con mod $IF2 ipv4.gateway 192.168.116.1 autoconnect yes nmcli con reload nmcli con up $IF2 fi #IF3=$(nmcli -g DEVICE dev | grep -Ev 'lo|br' | tail -n +2 | head -1) #if [ -n "$IF3" ]; then # nmcli con add type ethernet ifname $IF3 con-name $IF3 # nmcli con mod $IF3 ipv4.method manual ipv4.addr 10.10.1.10/24 autoconnect yes # nmcli con reload # nmcli con up $IF3 #fi

#切换可用公网yum源 sed -i 's/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g' /etc/yum.repos.d/C*
sed -i 's/^#baseurl=http:\/\/mirror.centos.org/baseurl=https:\/\/vault.centos.org/g' /etc/yum.repos.d/C*
#sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/C* chmod -x /etc/rc.d/rc.local sed -i '/^#START#$/,/^#END#$/d' /etc/rc.d/rc.local #END# EOF chmod +x /etc/rc.d/rc.local #----------------------------------------------------------------------------------------- ### 清空记录 #dnf clean all #{ #find /etc/yum.repos.d /var/lib/dhclient /var/log /tmp -type f #find /root \( -name .bash_history -o -name authorized_keys -o -name anaconda-ks.cfg \) #find /etc \( -name resolv.conf -o -name 70-persistent-net.rules -o -name "ssh_host_*" \) #} | xargs rm -f #touch /var/log/wtmp #----------------------------------------------------------------------------------------- %end

 

 

 

clearpart

clearpart
删除系统分区,优先创建新分区。默认情况下不删除分区。

STOP_IMG 如果使用了clearpart命令,那么不能对逻辑分区使用 --nopart 选项。

--all
删除系统上所有分区。
--drives
指定需要删除分区的硬盘。比如,下例为清楚主IDE控制器上的前两个硬盘分区。 clearpart --all --drives=sda,sdb
--list
指定需要删除的分区。如果指定了,该选项将替代--all和--linux选项。该选项值来自不同硬盘。 clearpart --list=sda2,sda3,sdb1
--initlabel
将标签初始化为符合你系统架构的默认值(例如:msdos for x86, gpt for Itanium)。该选项仅和"--all"组合使用是有效。
--linux
删除所有linux分区
--none(默认值)
不删除任何分区
--disklabel=
使用默认磁盘标签。仅当平台支持磁盘标签时有效。例如,msdos和gpt的x86_64系统支持,但dasd不支持。 在anaconda-21.43-1时引入。
View Code

 

6. 制作iso

这个过程特别慢,耐心等着即可,而且-b需要cd到iso目录里使用相对路径,使用绝对路径会报错找不到开机映像文件的路径。

注意: -V选择可设置iso的volume id

 

cd /root/ks.iso/iso

 #只可bios引导

mkisofs -o /root/Santiagod-linux-8-5-2111-x86_64.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V 'Santiagod-linux-8-5-2111-x86_64' -R -J -v -T /root/ks.iso/iso/

 #bios与efi引导,失败

从/efi/boot/grub.conf中修改以下内容再次尝试

search --no-floppy --set=root -l 'Santiagod-linux-8-5-2111-x86_64'

mkisofs -o /root/Santiagod-linux-8-5-2111-x86_64.iso  -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V 'Santiagod-linux-8-5-2111-x86_64' -R -J -v -T /root/ks.iso/iso/

 

 

 

-b FILE, -eltorito-boot FILE      #Set El Torito boot image name   #BIOS启动 映像文件
-e FILE, -efi-boot FILE          #Set EFI boot image name   #EFI启动 映像文件
-eltorito-alt-boot             #Start specifying alternative El Torito boot parameters  #同时支持BIOS与EFI;后接-b * -b *或-b * -e *

-no-emul-boot                       #Boot image is 'no emulation' image  #声明启动映像(*.img)是“无模拟”映像,不模拟,直接加载运行

-V ID, -volid ID                      #Set Volume ID    #设置镜像ID

 

附:将软件打包成ISO

mv app test.iso/
mkisofs -o storcli.iso -R -J -v -T  test.iso/

 

isoinfo -d -i *.iso|grep -i 'Volume id' #查看iso镜像ID

mkisofs参 数: 
 
  -o或-output   指定映像文件的名称。
  -b或-eltorito-boot   指定在制作可开机光盘时所需的开机映像文件。 
  -c   制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog全部内容作成一个文件。 
  -copyright   指定版权信息文件的文件名。 
  -r或-rational-rock   使用Rock Ridge Extensions,并开放全部文件的读取权限。 
  -R或-rock   使用Rock Ridge Extensions
  -v或-verbose   执行时显示详细的信息。 
  -V或-volid   指定光盘的卷ID。 
  -T或-translation-table   建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上。 
  -J或-joliet   使用Joliet格式的目录与文件名称。(否则镜像中的文件名可能会变)

-no-emul-boot   指定用于创建El Torito可引导cd的引导映像是“无仿真”映像。系统将在不执行任何磁盘模拟的情况下加载和执行此映像。
-boot-load-size  指定在非模拟模式下加载的“虚拟”(512字节)扇区的数量。默认情况是加载整个引导文件。如果不是4的倍数,一些BIOSes可能会出现问题。
-boot-info-table 指定在引导文件中的偏移量8处修补一个56字节的表,其中包含CD-ROM布局的信息。如果提供此选项,则启动文件将在源文件系统中被修改,因此,如果无法轻松重新生成该文件,请创建该文件的副本!有关此表的说明,请参阅El Torito启动信息表部分。




  -h   显示帮助。
  -D或-disable-deep-relocation   ISO 9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO 9660兼容的格式。使用-D参数可关闭此功能。 
  -hide   使指定的目录或文件在ISO 9660或Rock RidgeExtensions的系统中隐藏。 
  -l或-full-iso9660-filenames   使用ISO 9660 32字符长度的文件名。 
  -L或-allow-leading-dots   允许文件名的第一个字符为句号。 
  -log-file   在执行过程中若有错误信息,预设会显示在屏幕上。 
  -m或-exclude   指定的目录或文件名将不会放入映像文件中。 
  -N或-omit-version-number   省略ISO 9660文件中的版本信息。 
  -p或-preparer   记录光盘的数据处理人。 
  -print-size   显示预估的文件系统大小。 
  -quiet   执行时不显示任何信息。 
  -sysid   指定光盘的系统ID。 
  -volset-size   指定卷册集所包含的光盘张数。 
  -volset-seqno   指定光盘片在卷册集中的编号。 
  -x   指定的目录将不会放入映像文件中。 
View Code

 

 参考链接:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/performing_an_advanced_rhel_installation/_kickstart_references

 

记录:
把iso拆开查看里面的配置文件。

已改动文件
isolinux/isolinux.cfg
isolinux/grub.conf
EFI/BOOT/grub.cfg

EFI/BOOT/BOOT.conf #不改动,带 centos 8标签,跟EFI/BOOT/grub.cfg改动前的内容是一样的
media.repo  #不改动,带centos 8标签
.diskinfo  #不改动,带centos8标签
.treeinfo #不改动,带centos8标签

 

posted @ 2022-12-13 14:00  咿呀哒喏  阅读(994)  评论(5编辑  收藏  举报