puppet yum模块、配置仓储、mount模块
转载:http://blog.51cto.com/ywzhou/1577335
作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。
1、服务端配置yum模块
(1)模块清单
[root@puppet ~]# tree /etc/puppet/modules/yum/
/etc/puppet/modules/yum/
├── files
│ ├── yum.conf
│ └── RPM-GPG-KEY-CentOS-6
├── manifests
│ ├── config.pp
│ ├── init.pp
│ ├── install.pp
│ └── params.pp
└── templates
说明:这里只针对centos 6.5版本测试,其他的可以此类推,需要注意的就是本地源的光盘加载问题(见测试环节)
(2)定义参数类
[root@puppet ~]# vi /etc/puppet/modules/yum/manifests/params.pp
class yum::params {
case yum_centos_descr = 'centos base rpm packages' #本地仓库描述信息
yum_centos_pki = 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6' #YUMREPO文件中指定PKI文件路径
yum_centos_pki_download = 'puppet:///modules/yum/RPM-GPG-KEY-CentOS-6'
yum_puppet_baseurl = 'http://yum.puppetlabs.com/el/6/products/
yum_163_descr = '163 rpm packages for centos' #163仓库描述信息
releasever/contrib/
{::operatingsystem}") #6.5版本以外的会提示不支持,如有5.5、5.4这样的版本可按参考6.5进行参数定义
}
}
}
注意:PKI文件RPM-GPG-KEY-CentOS-6是光盘中的存在的,系统不一样,名称也不一样,需要确认。
说明:变量$operatingsystemrelease是通过facter获取计算机的信息的,运行下面的命令可查看计算机相关信息:
[root@puppet ~]# facter | grep operatingsystemrelease
operatingsystemrelease => 6.5
(3)定义安装类
[root@puppet ~]# vi /etc/puppet/modules/yum/manifests/install.pp
class yum::install{
1、确保yum被安装
package { 'yum':
ensure => installed,
}
2、创建光盘挂载目录
file { '/media/cdrom':
ensure => directory,
owner => root,
group => root,
}
3、确保光盘被挂载
方法一:EXEC
exec { "mount_cdrom":
path => "/usr/bin:/usr/sbin:/bin",
command => '/bin/mount /dev/cdrom /media/cdrom/',
creates => '/media/cdrom/RPM-GPG-KEY-CentOS-6',
require => File['/media/cdrom'],
}
方法二:MOUNT
mount { 'mount_cdrom':
name => "/media/cdrom", #挂载到的目标目录
ensure => mounted, #要求被挂载状态
fstype => "iso9660", #光盘的文件类型,使用mount命令或cat /etc/fstab查看
device => "/dev/cdrom", #光盘的设备,是个链接,实际指向/dev/sr0
options => "ro", #以只读方式挂载光盘
atboot => true, #允许开机启动时挂载上
remounts => true, #允许重新挂载
require => File['/media/cdrom'], #要求挂载目标目录存在
}
4、安装源前先备份
file { '/etc/yum.repos.d/bak':
ensure => directory,
owner => root,
group => root,
}
exec { "repos_bak":
path => "/usr/bin:/usr/sbin:/bin",
command => 'mv -f /etc/yum.repos.d/[^c].repo /etc/yum.repos.d/bak/', #将不是小写c开头的repo文件强制移动到备份目录
creates => '/etc/yum.repos.d/bak/CentOS-Base.repo', #当备份目录存在这个文件时不再执行此资源
require => File['/etc/yum.repos.d/bak'], #要求备份目录存在
}
}
说明:新生成的repo文件都是小写c开头的,因此将不是c开头([^c])的repo文件移至bak,
原文件都是CentOS开头的,外加一个puppetlabs.repo,可以将[^c].repo改成CentOS.repo,只将原文件备份。
(4)定义配置类
[root@puppet ~]# vi /etc/puppet/modules/yum/manifests/config.pp
class yum::config{
include yum::params
include yum::config_file,yum::config_key,yum::config_repo
}
1、定义配置文件
class yum::config_file{
file { '/etc/yum.conf': #yum主配置文件yum.conf路径
ensure => present, #要求文件处于存在状态
owner => 'root', #属主为root
group => 'root', #属组为root
mode => '0644', #文件权限为644
source => 'puppet:///modules/yum/yum.conf', #自动搜索yum模块下的files目录,因此省略/files
require => Class['yum::install'], #要求在配置之前先安装yum软件包
}
file { '/etc/yum.repos.d/centos-base.repo': #设置光盘repo的一些属性,文件名是yumrepo中的标题名定义的,必须一致
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
require => Class['yum::config_repo'], #要求设置之前yumrepo资源centos-base必须存在
}
file { '/etc/yum.repos.d/centos-puppet.repo':
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
require => Class['yum::config_repo'],
}
file { '/etc/yum.repos.d/centos-163.repo':
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
require => Class['yum::config_repo'],
}
}
2、定义pki证书文件
class yum::config_key{ #设置pki证书的一些属性及下载位置
file { yum::params::yum_centos_pki_download, #证书下载地址在参数类中定义
}
}
3、定义基本yum仓库、puppet仓库和163仓库
class yum::config_repo{
yumrepo { centos-base: #创建yumrepo资源cenos-base
descr => yum::params::yum_centos_baseurl, #设置yum源下载地址
enabled => 1, #激活yum源
gpgcheck => 1, #设置要求通过pki校验
gpgkey => yum::params::yum_puppet_descr,
baseurl => yum::params::yum_163_descr,
baseurl => $yum::params::yum_163_baseurl,
enabled => 1,
gpgcheck => 0,
priority => 3,
}
}
说明:创建了三个YUM源,都以centos(小写)开头的,客户端安装puppet时生成了puppetlabs.repo源,因此这里的centos-puppet源也可以省略。
(7)定义yum主类
[root@puppet ~]# vi /etc/puppet/modules/yum/manifests/init.pp
class yum {
include yum::params,yum::install,yum::config
}
(8)定义节点文件,调用模块
[root@puppet ~]# vi /etc/puppet/manifests/centostest.pp
node "centostest.ewin.com" {
include ntp, yum
}
(9)应用节点文件
[root@puppet ~]# vi /etc/puppet/manifests/site.pp
import "centostest.pp"
(10)复制文件
将以下两个文件从客户端复制一份到服务端/etc/puppet/modules/yum/files下
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
/etc/yum.conf
注意在文件头部加上以***释,测试的时候方便分辨
config by puppet
2、测试
(1)客户端执行测试
[root@centostest ~]# puppet agent --server puppet.ewin.com -test --noop
Info: Caching catalog for centostest.ewin.com
Info: Applying configuration version '1415332221'
Notice: Finished catalog run in 1.09 seconds
(2)查看客户端日志
[root@centostest ~]# tailf /var/log/messages
Nov 7 11:50:20 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/File[/media/cdrom]/ensure) created
Nov 7 11:50:20 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/Exec[mount_cdrom]/returns) executed successfully
Nov 7 11:50:22 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/File[/etc/yum.repos.d/bak]/ensure) created
Nov 7 11:50:22 centostest puppet-agent[8809]: (/Stage[main]/Yum::Install/Exec[repos_bak]/returns) executed successfully
Nov 7 11:50:23 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_key/File[/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6]/content) content changed '{md5}e8e57fd1a55dc5c6d82e60a444781b96' to '{md5}a27c559bf7660f101317ac3b41a7600b'
Nov 7 11:50:23 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-base]/ensure) created
Nov 7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-puppet]/ensure) created
Nov 7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_repo/Yumrepo[centos-163]/ensure) created
Nov 7 11:50:24 centostest puppet-agent[8809]: (/Stage[main]/Yum::Config_file/File[/etc/yum.conf]/content) content changed '{md5}5d8b0bf30a8ee9d66a9cb2642186ac37' to '{md5}8c1fab4142147877a3f77f89eb8ccb7c'
Nov 7 11:50:24 centostest puppet-agent[8809]: Finished catalog run in 4.27 seconds
结论:可看到cdrom目录创建、挂载命令执行成功、备份命令成功、同步了PKI文件和CON文件、创建了三个YUMREPO
(3)查看客户端挂载的光盘目录
[root@centostest ~]# ls /media/cdrom/
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
结论:挂载成功,如果用的EXEC方法将会判断RPM-GPG-KEY-CentOS-6存在时不会再执行Exec,而且此文件是原文件,不是新建的空文件。
经测试umount /media/cdrom卸载光盘后会自动重启挂载上,甚至卸载再删除/media/cdrom目录,也会恢复,有兴趣的可以试试。
(4)查看YUM源备份
[root@centostest ~]# ls /etc/yum.repos.d/bak/
CentOS-Base.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-Debuginfo.repo puppetlabs.repo
(5)查看客户端同步的文件
[root@centostest ~]# cat /etc/yum.conf
config by puppet
[main]
...
[root@centostest ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
config by puppet
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
...
结论:从文件头部注释信息可以确认文件同步成功
(6)查看YUM list
[root@centostest ~]# yum clean all
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: base puppetlabs-deps puppetlabs-products
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@centostest ~]# yum list
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
centos-163 | 2.9 kB 00:00
centos-163/primary_db | 1.2 kB 00:00
centos-base | 4.0 kB 00:00 ...
centos-base/primary_db | 4.4 MB 00:00 ...
centos-puppet | 2.5 kB 00:00
centos-puppet/primary_db 13% [=- ] 5.9 B/s | 17 kB --:-- ETA
结论:YUM三个仓库都能成功加载,通过yum clean all再yum list可观察。
[root@centostest ~]# yum list puppet
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
http://mirrors.163.com/centos/6/contrib/x86_64/repodata/repomd.xml:
[Errno 12] Timeout on http://mirrors.163.com/centos/6/contrib/x86_64/repodata/repomd.xml:
(28, 'Operation too slow. Less than 1 bytes/sec transfered the last 30 seconds')
Trying other mirror.
Installed Packages
puppet.noarch 3.7.1-1.el6 @puppetlabs-products
Available Packages
puppet.noarch 3.7.3-1.el6 centos-puppet
结论:可以看到从163的源查找puppet超时,已安装的包是从@puppetlabs安装的,有效的包是在centos-puppet源中。
3、yum仓库资源
yumrepo { "repo163": #YUM源文件.repo的文件名
descr => "163 repo", #仓库的描述
baseurl => "http://mirrors.163.com/centos/basearch/", #仓库的url
gpgcheck => "0", #是否检查仓库中的软件包GPG签名,可设置的值为0或者1.
enabled => "1", #是否开启或者禁用仓库,可设置的值为1或者0.1为开启,0为禁用
}
{
enablegroups => , #是否可以使用yumgroup参数,如yumgroup list,yumgroup install等
exclude => , #排除那些软件的安装与更新,支持shell通配符。
failovermethod => , #可设置的值为priority,roundrobin.
gpgkey => , #仓库的软件包签名,GPG密钥的URL。
include => , #包含配置url.
includepkgs => , #只有匹配的软件包才能安装或者更新。
keepalive => , #设置http/1.1选项,可设置的为0或者1.
metadata_expire => , #元组数据的过期时间,单位时间为秒。
miirorlist => , #仓库的镜像列表。
name => , #仓库名字。
priority => , #优先级,可设置的是从1-99.
protect => , #启用或者禁用对这个仓库的保护。可设置的值为0或者1.
proxy => , #设置代理
}
4、mount挂载资源
挂载共享文件夹
mount { "/mount": #挂载的目标目录,等同于name参数
device => "192.168.0.1:/share/nfs", #挂载的来源设备
fstype => "nfs", #文件系统类型
options => "_netdev,vers=3,tcp,rsize=8192,wsize=8192,noauto", #其他选项
}
挂载samba
mount {"/media":
ensure => mounted,
device => "//172.22.2.89/public",
fstype => cifs,
options => "username=perofu,password=123456";
}
参数说明
mount { 'mount_cdrom':
name => "/media/cdrom", #挂载到的目标目录
ensure => mounted, #要求被挂载状态
fstype => "iso9660", #光盘的文件类型
device => "/dev/cdrom", #光盘的设备,是个链接,指向/dev/sr0
options => "ro", #以只读方式挂载光盘
atboot => true, #允许开机启动时挂载上
remounts => true, #允许重新挂载
require => File['/media/cdrom'], #要求挂载目标目录存在
}
查看文件系统类型:
[root@centostest ~]# mount
/dev/mapper/vg_centostest-lv_root on / type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_centostest-lv_home on /home type ext4 (rw)
/dev/sr0 on /media/cdrom type iso9660 (ro)
发现以下报错,是因为没有加上options => "ro",因为光盘是只读的。
[mount_cdrom]) Could not evaluate: Execution of '/bin/mount /media/cdrom' returned 32:
mount: block device /dev/sr0 is write-protected, mounting read-only
相关文章:

最新技术选型解决方案列表
最新技术选型解决方案列表 1 概述 这是一份当前的技术选型方案,针对创业、中小型公司 2 目标2.1 产品目标2.1.1 SaaS 2.1.1.1 免安装 2.1.1.2 多租户 2.1.1.3 流量计费 2.1.2 可配置 2.1.2.1 需开通服务 2.1.2.2 服务自动组合 2.1…

合工大的计算机专业好不好,合肥工业大学计算机好,还是西电的好?差距有多大?...
合肥工业大学计算机好,还是西电的好?差距有多大?这两个大学都是教育部直属的工科院校,但是性质完全不一样,到底谁更厉害,结论是西电的计算机要比合肥工业大学强。首先因为西电本身就是比哈工大厉害的大学,学科评估方…

DataWorks V2使用PyUdf
在DataWorks上新建一个Python资源,命名为 test_udf.py 编辑pyudf的脚本代码,实现方法请参考Python实现MaxCompute UDF # -*- coding:utf-8 -*- from odps.udf import annotate #函数签名,SQL执行前所有函数的参数类型和返回值类型必须确定&a…

Java线程怎样映射到操作系统线程
先说多线程模型,参考经典教材《Operating System Concepts , Silberschatz ,9th edition》 中文版是《操作系统概念,第9版》 https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html 一个线程是CPU利用率的基本单元,包…

NSUserDefaults的用法
2019独角兽企业重金招聘Python工程师标准>>> NSDictionary* defaults [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; NSLog("Defaults: %", defaults); 是用来获取设备上的所有的NSUserDefaults的设置。 上面代码输出了 2013-06…

计算机在轻工行业中的应用,计算机在不同领域中的具体应用
计算机以其卓越的性能和强大的生命力,在科学技术、国民经济、社会生活等各个方面得到了广泛的应用,并且取得了明显的社会效益和经济效益。计算机的应用几乎包括人类生活的一切领域,可以说是包罗万象,不胜枚举。据统计,…

自动驾驶L3量产追梦:如何跨过车规级和低成本门槛?
雷锋网新智驾按:从人类设想到落地前行,智能驾驶领域在2018年声响不断。在频繁的融资、技术创新和商业应用等信息背后,无数车企在公司战略中加入“网联化”、“自动化”,前几年涌现的自动驾驶领域的初创公司,近年来也开…
一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了。所以今天在这里用最简短的语言让你明白这些区别。 看这种图表就一切…

awstats CGI模式下动态生成页面缓慢的改进
本文可以看做是 多server多站点情况下awstats日志分析 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直是在考验人的耐性),本文分享一种改…

计算机水平flash试题,计算机flash考试试题
《Flash动画设计》课程考核方案一、考试班级及科目216班 《Flash动画设计》二、考试时间1、考核时间:90分钟2、考试地点:学校计算机3机房3、考核时期:十七、十八周内各课任教师自主选定三、考核形式上机独立完成所有操作。在规定时间内按考核…

CDH大数据集群安全风险汇总
一,风险分为内部和外部 首先内部: CDH大数据集群部署过程中会自动创建以服务命名的用户,如图所示 用户名(login_name):口令位置(passwd):用户标识号(UID):用户组标识号(GID):注释性描述(users)&…
有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣。 先看实例代码: main函数起2个线程模拟生成消费者 import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.…

zabbix监控windows 服务器各项性能
Zabbix agent 在windows上安装部署1、 下载与解压地址: http://www.zabbix.com/downloads/2.4.0/zabbix_agents_2.4.0.win.zip解压zabbix_agents_2.4.0.win.zipconf目录存放是agent配置文件 bin文件存放windows下32位和64位安装程序2、 配置与安装2.1 配置zabbix agent相关配…

计算机设备板块超跌,半导体全线拉升,沪指强势突破3600点,午后A股会再次冲高回落吗...
周四开盘沪指开于3585点,和周三收盘价低开了8个点。上午开盘后沪指呈现低开高走的趋势,10点以后沪指持续拉升上涨不但顺利地突破了3600点而且还创了反弹新高。除了沪指以外深市三大股指也是全线翻红,上午A股的三大股指再次全线拉升并且均创了…

docker之基础
一、Docker简介 容器:运行在同一类用户空间上的程序打包在一起,相当于一个集装箱 Docker:码头装运工;把集装箱搬运到该有的位置。 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC&…
Java一个线程能否结束另一个永不停止的线程
在Java中停止一个线程有三种办法 : 1.正常结束执行; 2.发生异常; 3.被其他线程stop(Java官方不建议) 参考:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html 为什么Thread.stop弃用…

pxe cobbler ipmi bmc
http://blog.csdn.net/xuensong520/article/details/8922926 http://blog.csdn.net/xuensong520/article/details/8915945 http://www.wenzizone.cn/?p408 #执行外部脚本(后置脚本)vi /var/www/cobbler/ks_mirror/config/autoip.sh #创建脚本,自动设置Linux系统静…

广东电大计算机绘图试题,电大计算机绘图期末复习试题及答案参考小抄.doc
电大计算机绘图期末复习试题及答案参考小抄一、填空题(每小题1.5分,共30分)1.CAD的常用图形输入设备有???鼠标??、数字化仪、图形输入板、光笔、??键盘 等。2.CAD的软件可分为系统软件、支撑软件和???应用软件??? 软件三个层次。…

django07 字符串替换
1. 模板语言(字符串替换) 1. 母版和继承 1. 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件。 (比如:导航条和左侧菜单) 2. 子页面如何使用母版? {% e…

【云和恩墨】一次 truncate 核心表衍生的安全管理思考
第一章 一次 truncate 核心表衍生的安全管理思考 云和恩墨 | 2016-05-06 17:56 本文编辑整理来自上周四晚云和恩墨大讲堂 黄嵩 关于数据安全问题的分享。安全问题涉及到信息系统的方方面面,尤其是其核心资产——数据的安全。无论是数据访问控制的裸露࿰…
合理估算线程池线程数量
参考《Java并发编程实战》 线程数量计算公式 公式:Nthread Ncpu * Ucpu * (1 W/C),各字段含义: Nthreads:线程数量 Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors()…

通过regedt查看计算机密码,win10系统通过注册表设置定时更换密码提醒的处理步骤...
有关win10系统通过注册表设置定时更换密码提醒的操作方法想必大家有所耳闻。但是能够对win10系统通过注册表设置定时更换密码提醒进行实际操作的人却不多。其实解决win10系统通过注册表设置定时更换密码提醒的问题也不是难事,小编这里提示两点: 1、首先在…

苏宁零售云 App 稳定保障实践
1. 背景 苏宁零售云目标T4-T6级市场的业务,定位更靠谱的智慧零售解决方案和零售服务集成商,实战式跨界赋能。苏宁易购TO C的经验丰富,相关的方案很完善,但是零售云TO B相关业务启动后,业务增长迅速,App相关…

小酌重构系列[8]——提取接口
前言 世间唯一“不变”的是“变化”本身,这句话同样适用于软件设计和开发。在软件系统中,模块(类、方法)应该依赖于抽象,而不应该依赖于实现。 当需求发生“变化”时,如果模块(类、方法…
多线程并发编程需要注意虚假唤醒Spurious wakeup
虚假唤醒 Spurious wakeup 如果等待线程在没有通知被调用的情况下唤醒,则称为Spurious wakeup。 解决方案就是: 使用while条件判断,更好的方案是避免使用wait这种低级的API,而是使用高级的并发工具。 因为这些高级的并发工具都是经过无数…

高中计算机个人总结怎么写,毕业生自我总结范文
毕业生自我总结范文1时光飞逝,三年忙碌而充实的大学生活在一片有序的繁忙中将要过去了,回首过去三年,内心感慨万千。我是20xx年春参加电大机械班的学习,回顾这三年的电大学习之路,饱含了汗水和收获。总结是一面镜子&am…

python - 字符串的格式化输出
# -*- coding:utf-8 -*-project: jiaxyauthor: Jimmyfile: study_2_str.pyide: PyCharm Community Editiontime: 2018-11-01 15:12blog: https://www.cnblogs.com/gotesting/# 字符串s #空字符串# 1:字符串拼接# 1.1:字符串与字符串的拼接用 连接s_1 hellos_2 worlds_3 5…
一个冷僻的知识点try直接返回finally里的设置null其实无效
先看引用类型的代码: import java.util.HashMap; import java.util.Map;public class trycatchefinally {public static void main(String[] args) {System.out.println(getMap().get("KEY"));}public static Map<String, String> getMap() {Map&l…

身份证工具类
2019独角兽企业重金招聘Python工程师标准>>> 身份证工具类 package com.pqs.common.tools;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util…

目前常用的服务器端网络操作系统有,目前常用的服务器端网络操作系统是()。...
在一台IP地址为192.168.1.1的Windows Server 2008 R2计算机上安装活动目录,建立一个森林根域test.com,保留默认的域功能级别,同时使该计算机成为域test.com的首台域控制器并承担着DNS服务器和全局编录服务器的角色。 操作步骤ÿ…