一、CentOS系统的安装启动过程

二、ks文件的制作
(1)ks文件的组成
[1]命令段:指定各种安装前配置选项,如键盘类型必选命令:auth --enableshadow --passalgo=sha512-->指明登录认证验证信息bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda-->(bootloader安装位置及其配置参数)(crashkernel=auto内核一旦出现异常自动修复)keyboard --vckeymap=us --xlayouts='us'-->设定键盘类型lang en_US.UTF-8-->英语编码格式partclearpart --none --initlabel-->清空磁盘分区part pv.252 --fstype="lvmpv" --ondisk=sda --size=14759-->创建卷组id为252part boot --fstype="xfs" --ondisk=sda --size=600volgroup centos --pesize=4096 pv.252-->使用卷组252创建pvlogvol --fstype="xfs" --size=13731 --name=root --vgname=centos-->在卷组上创建lvlogvol swap --fstype="swap" --size=1024 --name=swap --vgname=centosrootpw --iscrypted $6$QsR8hUq23RJn5u13$/QdYW3DyvjiD6RJ4X6MzKHQj04F4EACUHxN3G1VseUKn3NRXUNAsSn/LyNbknKgw/WZLTv/Ujw9YVjR9ThjT0/[root@bogon ~]# openssl passwd -1 -salt `openssl rand -hex 4`-->生成加密密码字符-1:使用第一种加密算法md5openssl rand -hex 4:生成8为随机数openssl rand -base64 8timezone Asia/Shanghai --isUtc --nontp可选命令:install or upgrade:安装或升级(默认为install)text:图形或者文本界面,text为TUI,默认为GUInetwork --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activatenetwork --hostname=localhost.localdomainfirewall --disabledselinux --disabled[root@bogon ~]# ll etc/sysconfig/selinuxlrwxrwxrwx. 1 root root 17 Nov 14 06:16 etc/sysconfig/selinux -> ../selinux/config[root@bogon ~]# setenforce 0[root@bogon ~]# getenforcehalt、shutdown或reboot-->定义安装完成后的操作repo:指明安装时使用的仓库repositoryrepo --name="CentOS" --baseurl=cdrom:sr0 --cost=100url:指明安装时使用的repository,但是为url格式url --url=http://172.17.12.45/cobbler/ks_mirror/CentOS-6.7-x86_64/https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/os/x86_64/[2]程序包段:指明要安装的程序包以及包组%packages@group_namepackage-->需要安装的包-package-->不需要安装的包%end[3]脚本段%pre:安装前脚本(能够提供的命令很有限)运行环境:运行于安装介质上的微型Linux系统%post:安装后脚本运行环境:
(2)ks文件制作工具
[root@bogon ~]# yum install -y system-config-kickstart[root@bogon ~]# init 5[base]name=CentOS-$releasever - Base如果不能选安装包时将yum仓库base替换为[base]name=CentOS-$releasever - development
三、利用网络中的ks文件实现自动化系统安装
(1)HTTP+KS实现系统安装
http服务配置
[root@localhost ~]# yum install -y httpd[root@localhost ~]# vim etc/httpd/conf/httpd.confServerName 192.168.3.100:80DocumentRoot "/var/www/html"[root@localhost ~]# cp root/ks.cfg var/www/html/[root@localhost ~]# chmod 766 /var/www/html/ks.cfg[root@localhost ~]# systemctl restart httpdhttp://192.168.3.100/ks.cfg-->测试是否可以访问
启动安装命令
选中Install CentOS 7或者Test this media & install CentOS 7,按ESC

boot:linux text method ip=192.168.3.140 netmask=255.255.255.0 gateway=192.168.3.1 ks=http://192.168.3.100:80/ks.cfg
(2)FTP+KS实现系统安装
ftp服务配置
注意:ftp方式ks=ftp://,需要开启ftp服务器匿名用户下载文件
[root@localhost ~]# yum install -y vsftpd[root@localhost ~]# cat etc/vsftpd/vsftpd.conf | grep -v "^#"anonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022anon_upload_enable=YESanon_mkdir_write_enable=YESdirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_file=/var/log/xferlogxferlog_std_format=YESascii_upload_enable=YESascii_download_enable=YESlisten=YESlisten_ipv6=NOpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES
- 设置匿名用户工作路径权限且上传ks文件
[root@localhost ~]# ll -aR var/ftp//var/ftp/:total 4drwxr-xr-x 3 root root 17 Dec 5 10:10 .drwxr-xr-x. 22 root root 4096 Dec 5 2019 ..drwxr-xr-x 2 root root 20 Dec 5 09:37 pub/var/ftp/pub:total 4drwxr-xr-x 2 root root 20 Dec 5 09:37 .drwxr-xr-x 3 root root 17 Dec 5 10:10 ..-rwxrw-rw- 1 root root 1543 Dec 5 09:30 ks.cfg
启动安装命令
boot:linux text method ip=192.168.3.140 netmask=255.255.255.0 gateway=192.168.3.1 ks=ftp://192.168.3.141:21/pub/ks.cfg
(3)利用ks文件与网络仓库安装系统
ks文件指明仓库url
[root@bogon ~]# cat /etc/httpd/conf/httpd.conf | grep -E "(^ServerName|^DocumentRoot)"ServerName 192.168.1.103:80DocumentRoot "/var/www/"[root@bogon ~]# ll /var/www/cobbler/ks_mirror/CentOS7.6-x86_64/total 320-rw-rw-r-- 1 root root 14 Nov 26 2018 CentOS_BuildTagdrwxr-xr-x 3 root root 35 Nov 26 2018 EFI-rw-rw-r-- 1 root root 227 Aug 30 2017 EULA-rw-rw-r-- 1 root root 18009 Dec 10 2015 GPLdrwxr-xr-x 3 root root 57 Nov 26 2018 imagesdrwxr-xr-x 2 root root 198 Nov 26 2018 isolinuxdrwxr-xr-x 2 root root 43 Nov 26 2018 LiveOSdrwxrwxr-x 2 root root 225280 Nov 26 2018 Packagesdrwxrwxr-x 2 root root 4096 Nov 26 2018 repodata-rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7-rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7-r--r--r-- 1 root root 2883 Nov 26 2018 TRANS.TBL[root@bogon /]# ll /var/www/cobbler/ks_mirror/CentOS7.6-x86_64/images/total 151868-rw-r--r-- 1 root root 8912896 Nov 26 2018 efiboot.img-r--r--r-- 1 root root 146595840 Dec 8 06:18 install.imgdrwxr-xr-x 2 root root 56 Nov 26 2018 pxeboot-r--r--r-- 1 root root 442 Nov 26 2018 TRANS.TBL[root@bogon ~]# cat /var/www/ks.cfg | grep -B 5 url#platform=x86, AMD64, or Intel EM64T#version=DEVEL# Install OS instead of upgradeinstall#Use network installationurl --url=http://192.168.1.103/cobbler/ks_mirror/CentOS7.6-x86_64/boot:linux text method ip=192.168.1.110 netmask=255.255.255.0 gateway=192.168.1.1 ks=http://192.168.1.103/ks.cfg
四、Cobbler实现全自动化系统安装
[root@localhost ~]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)[root@localhost ~]# getenforceDisabled
[1]搭建相应的服务
[root@localhost ~]# yum list | grep cobbler-->cobbler使用python开发,需要使用epel源cobbler.x86_64 2.8.5-0.3.el7 @epelcobbler-web.noarch 2.8.5-0.3.el7 epel[root@localhost ~]# yum list | grep epel-epel-release.noarch 7-12 @epelepel-rpm-macros.noarch 7-23 @epel[root@localhost ~]# yum install -y epel-release.noarch[root@localhost ~]# yum install -y rsync dhcp xinetd tftp cobblerd httpd[root@localhost ~]# systemctl start httpd[root@localhost ~]# systemctl enable httpd[root@localhost ~]# systemctl start xinetd[root@localhost ~]# systemctl enable xinetd[root@localhost ~]# systemctl start cobblerd[root@localhost ~]# systemctl enable cobblerd[root@localhost ~]# systemctl start tftp[root@localhost ~]# systemctl enable tftp[root@localhost ~]# systemctl start dhcpd[root@localhost ~]# systemctl enable dhcpd查看安装cobbler包生成的文件[root@localhost ~]# rpm -ql cobbler | grep /var/www/cobbler//var/www/cobbler/images/var/www/cobbler/ks_mirror/var/www/cobbler/ks_mirror/config/var/www/cobbler/links/var/www/cobbler/localmirror/var/www/cobbler/misc/var/www/cobbler/misc/anamon/var/www/cobbler/misc/anamon.init/var/www/cobbler/pub/var/www/cobbler/rendered/var/www/cobbler/repo_mirror/var/www/cobbler/svc/var/www/cobbler/svc/services.py/var/www/cobbler/svc/services.pyc/var/www/cobbler/svc/services.pyo
[2]服务配置
DHCP服务配置
[root@localhost ~]# hostname -I192.168.3.101[root@localhost kickstarts]# ip routedefault via 192.168.3.1 dev ens33 proto static metric 100[root@localhost ~]# cp /etc/cobbler/dhcp.template{,.bak}[root@localhost ~]# vim /etc/cobbler/dhcp.templatesubnet 192.168.3.0 netmask 255.255.255.0 {option routers 192.168.3.1;option domain-name-servers 192.168.3.1;option subnet-mask 255.255.255.0;range dynamic-bootp 192.168.3.102 192.168.3.254;default-lease-time 21600;max-lease-time 43200;next-server $next_server;
cobbler配置文件
[root@localhost ~]# cp /etc/cobbler/settings{,.bak}[root@localhost ~]# sed -i 's/next_server: 127.0.0.1/next_server: 192.168.3.100/g' /etc/cobbler/settings[root@localhost ~]# sed -i 's/server: 127.0.0.1/server: 192.168.3.100/g' /etc/cobbler/settings[root@localhost ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/dhcp.template上一步不做的话dhcp服务会报错[root@localhost ~]# sed -i 's/manage_tftpd: 0/manage_tftpd: 1/g' /etc/cobbler/dhcp.template[root@localhost ~]# sed -i 's/manage_rsync: 0/manage_rsync: 1/g' /etc/cobbler/dhcp.template[root@localhost ~]# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/dhcp.template[root@localhost ~]# openssl passwd -1 -salt '1' '123'$1$1$378YcKhlQfiB0iaKOLko51[root@localhost ~]# sed -i 's/^default_password_crypted:.*/default_password_crypted: "$1$1$378YcKhlQfiB0iaKOLko51."/g' /etc/cobbler/settings[root@localhost ~]# systemctl restart cobblerd[root@localhost ~]# cobbler checkThe following are potential configuration items that you may want to fix:1 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.2 : enable and start rsyncd.service with systemctl3 : debmirror package is not installed, it will be required to manage debian deployments and repositories4 : ksvalidator was not found, install pykickstart5 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use themRestart cobblerd and then run 'cobbler sync' to apply changes.
[3]对cobblerd服务检测排错
[root@localhost ~]# yum install -y pykickstart[root@localhost ~]# systemctl start rsyncd[root@localhost ~]# systemctl enable rsyncd[root@localhost ~]# cobbler get-loaderstask started: 2019-12-06_030651_get_loaderstask started (id=Download Bootloader Content, time=Fri Dec 6 03:06:51 2019)downloading https://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/READMEdownloading https://cobbler.github.io/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilodownloading https://cobbler.github.io/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yabootdownloading https://cobbler.github.io/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinuxdownloading https://cobbler.github.io/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efidownloading https://cobbler.github.io/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yabootdownloading https://cobbler.github.io/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0downloading https://cobbler.github.io/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32downloading https://cobbler.github.io/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efidownloading https://cobbler.github.io/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi*** TASK COMPLETE ***[root@localhost ~]# cobbler checkThe following are potential configuration items that you may want to fix:1 : debmirror package is not installed, it will be required to manage debian deployments and repositories2 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use themRestart cobblerd and then run 'cobbler sync' to apply changes.(1)如果不是debian系统可以忽略(2)可以忽略[root@localhost ~]# cobbler synctask started: 2019-12-06_030908_synctask started (id=Sync, time=Fri Dec 6 03:09:08 2019)running pre-sync triggerscleaning treesremoving: /var/lib/tftpboot/pxelinux.cfg/defaultremoving: /var/lib/tftpboot/grub/imagesremoving: /var/lib/tftpboot/grub/efidefaultremoving: /var/lib/tftpboot/s390x/profile_listcopying bootloaderstrying hardlink /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0copying: /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0trying hardlink /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32copying: /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32trying hardlink /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboottrying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efitrying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.eficopying distros to tftpbootcopying imagesgenerating PXE configuration filesgenerating PXE menu structurerendering TFTPD filesgenerating /etc/xinetd.d/tftpcleaning link cachesrunning post-sync triggersrunning python triggers from /var/lib/cobbler/triggers/sync/post/*running python trigger cobbler.modules.sync_post_restart_servicesrunning shell triggers from /var/lib/cobbler/triggers/sync/post/*running python triggers from /var/lib/cobbler/triggers/change/*running python trigger cobbler.modules.manage_gendersrunning python trigger cobbler.modules.scm_trackrunning shell triggers from /var/lib/cobbler/triggers/change/**** TASK COMPLETE ***
[4]导入cobbler镜象
[root@localhost ~]# mount /dev/cdrom /mnt/-->从光驱导入ISO文件[root@localhost ~]# cobbler image --help-->获取cobbler子命令帮助usage=====cobbler image addcobbler image copycobbler image editcobbler image findcobbler image listcobbler image removecobbler image renamecobbler image report[root@localhost ~]# cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64task started: 2019-12-06_031204_importtask started (id=Media import, time=Fri Dec 6 03:12:04 2019)Found a candidate signature: breed=redhat, version=rhel6Found a matching signature: breed=redhat, version=rhel6Adding distros from path /var/www/cobbler/ks_mirror/CentOS-7-x86_64:creating new distro: CentOS-7-x86_64trying symlink: /var/www/cobbler/ks_mirror/CentOS-7-x86_64 -> /var/www/cobbler/links/CentOS-7-x86_64creating new profile: CentOS-7-x86_64associating reposchecking for rsync repo(s)checking for rhn repo(s)checking for yum repo(s)starting descent into /var/www/cobbler/ks_mirror/CentOS-7-x86_64 for CentOS-7-x86_64processing repo at : /var/www/cobbler/ks_mirror/CentOS-7-x86_64need to process repo/comps: /var/www/cobbler/ks_mirror/CentOS-7-x86_64looking for /var/www/cobbler/ks_mirror/CentOS-7-x86_64/repodata/*comps*.xmlKeeping repodata as-is :/var/www/cobbler/ks_mirror/CentOS-7-x86_64/repodata*** TASK COMPLETE ***[root@localhost ~]# ll /var/www/cobbler/ks_mirror/total 0drwxrwxr-x 8 root root 254 Nov 25 2018 CentOS-7-x86_64drwxr-xr-x 2 root root 34 Dec 6 03:15 config[root@localhost ~]# cobbler distro reportName : CentOS-7-x86_64Architecture : x86_64TFTP Boot Files : {}Breed : redhatComment :Fetchable Files : {}Initrd : /var/www/cobbler/ks_mirror/CentOS-7-x86_64/images/pxeboot/initrd.imgKernel : /var/www/cobbler/ks_mirror/CentOS-7-x86_64/images/pxeboot/vmlinuzKernel Options : {}Kernel Options (Post Install) : {}Kickstart Metadata : {'tree': 'http://@@http_server@@/cblr/links/CentOS-7-x86_64'}Management Classes : []OS Version : rhel6Owners : ['admin']Red Hat Management Key : <<inherit>>Red Hat Management Server : <<inherit>>Template Files[root@localhost ~]# cobbler profile reportName : CentOS-7-x86_64TFTP Boot Files : {}Comment :DHCP Tag : defaultDistribution : CentOS-7-x86_64Enable gPXE? : 0Enable PXE Menu? : 1Fetchable Files : {}Kernel Options : {}Kernel Options (Post Install) : {}Kickstart : /var/lib/cobbler/kickstarts/sample_end.ksKickstart Metadata : {}Management Classes : []Management Parameters : <<inherit>>Name Servers : []Name Servers Search Path : []Owners : ['admin']Parent Profile :Internal proxy :Red Hat Management Key : <<inherit>>Red Hat Management Server : <<inherit>>Repos : []Server Override : <<inherit>>Template Files : {}Virt Auto Boot : 1Virt Bridge : xenbr0Virt CPUs : 1Virt Disk Driver Type : rawVirt File Size(GB) : 5Virt Path :Virt RAM (MB) : 512Virt Type : kvm导入ISO后会默认生成ks文件/var/lib/cobbler/kickstarts/sample_end.ks,cobbler到现在已经可以实现自动化安装了,不过我们需要自定义ks文件
[5]新建profile且指明ks文件路径
[root@localhost ~]# cp ks.cfg /var/lib/cobbler/kickstarts/[root@localhost ~]# cobbler profile --helpusage=====cobbler profile addcobbler profile copycobbler profile dumpvarscobbler profile editcobbler profile findcobbler profile getkscobbler profile listcobbler profile removecobbler profile renamecobbler profile report[root@localhost kickstarts]# cobbler profile edit --distro=CentOS-7-x86_64 --name=CentOS7.6_DIY --kickstart=/var/lib/cobbler/kickstarts/ks_DIY.cfg[root@localhost kickstarts]# cobbler profile listCentOS-7-x86_64CentOS7.6_DIY[root@localhost kickstarts]# cobbler distro listCentOS-7-x86_64也可编辑原来kickstart文件,方法如下:[root@localhost kickstarts]# cp /var/lib/cobbler/kickstarts/ks_DIY.cfg /var/lib/cobbler/kickstarts/ks_DIY1.cfg[root@localhost kickstarts]# cobbler profile edit --distro=CentOS-7-x86_64 --name=CentOS7.6_DIY --kickstart=/var/lib/cobbler/kickstarts/ks_DIY1.cfg[root@localhost ~]# systemctl restart cobblerd[root@localhost ~]# cobbler sync
五、自制系统ISO
CentOS 6
[1]重复光驱启动过程
stage1:MBR:isolinux/boot.cat -->grubstage2:isolinux/isolinux.bin -->提供安装菜单界面配置文件:isolinux/isolinux.cfg每选择一个选项就执行对应操作:label linuxmenu label ^Install or upgrade an existing systemmenu defaultkernel vmlinuzappend initrd=initrd.imgisolinuxvmlinuzisolinuxinitrd.img结论:isolinux相当于系统的boot分区
[2]复制光驱中的bootloader
[root@bogon ~]# mount /dev/cdrom /mnt/[root@bogon ~]# cp -r /mnt/isolinux /myboot[root@bogon ~]# chmod +w /myboot/*[root@bogon ~]# cp /root/ks.cfg /myboot[root@bogon ~]# cat /myboot/isolinux/isolinux.cfg | grep -A 3 "label linux"label linuxlabel linuxmenu label ^Install or upgrade an existing systemmenu defaultkernel vmlinuzappend initrd=initrd.img[root@bogon /]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root.iso /myboot制作镜像时需要切换目录至isolinux的根目录上-->/[root@bogon /]# ll root.iso-rw-r--r-- 1 root root 59996160 Dec 7 06:25 root.iso
[3]将制作好的ISO和程序包放在ftp服务器的pub目录下
[root@bogon /]# ll -aR /var/ftp//var/ftp/:total 4drwxr-xr-x 3 root root 17 Nov 16 04:02 .drwxr-xr-x. 21 root root 4096 Nov 16 04:02 ..drwxrwxrwx 2 root root 22 Dec 7 06:43 pub/var/ftp/pub:total 58592drwxrwxrwx 2 root root 22 Dec 7 06:43 .drwxr-xr-x 3 root root 17 Nov 16 04:02 ..-rw-r--r-- 1 root root 59996160 Dec 7 06:25 root.iso
[4]将boot.iso文件复制到windows桌,光驱挂载启动



注意:kickstart文件中无须再重复配IP地址,否者获取到ks文件后将找不到安装仓库URL
label linuxlabel linuxmenu label ^Install or upgrade an existing systemmenu defaultkernel vmlinuzappend initrd=initrd.img ks=cdrom:/ks.cfg
Tips:也可在isolinux.cfg文件中传参指明ks文件位置,在ks文件中指明IP地址即可完全自动化安装。
CentOS7
[root@bogon ~]# mount /dev/cdrom /mnt/[root@bogon ~]# cp -r /mnt/isolinux /myboot[root@bogon ~]# chmod +w /myboot/*[root@bogon ~]# cp /root/ks.cfg /myboot[root@bogon ~]# genisoimage -o CentOS-7.6-x86-64.iso -V CENTOS7 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /myboot[root@localhost /]# ll /myboot/total 4drwxr-xr-- 2 root root 198 Dec 9 14:12 isolinux-rw-r--r-- 1 root root 1786 Dec 9 13:59 ks.cfg[root@localhost /]# cat /myboot/isolinux/isolinux.cfg | grep -A 3 "label linux"label linuxmenu label ^Install CentOS 7(DIY)kernel vmlinuzappend initrd=initrd.img inst.ks=cdrom:/ks.cfg ip=192.168.3.140 netmask=255.255.255.0 gateway=192.168.3.1 quiet



文章转载自运维扫盲人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




