Cobbler实现多系统版本全自动批量部署

  • 原创
  • Madman
  • /
  • 2018-04-20 09:23
  • /
  • 0
  • 552 次阅读

Cobbler实现多系统版本全自动批量部署.jpg

Synopsis: Cobbler是一个免费开源系统安装部署软件,用于自动化网络安装操作系统。Cobbler 集成了 DNS,DHCP,软件包更新,带外管理以及配置管理,方便操作系统安装自动化。Cobbler 可以支持PXE启动,操作系统重新安装,以及虚拟化客户机创建,包括Xen, KVM or VMware。Cobbler透过koan程序以支持虚拟化客户机安装。Cobbler 可以支持管理复杂网路环境,如创建在链路聚合以太网的桥接环境

Linux系统自动部署系列:


1. 安装Cobbler

Cobbler官网

Cobbler主要组件:

1 Cobbler实现多系统版本全自动批量部署

本次实验中,准备部署Cobbler的服务器OS版本为CentOS-7.2-1511-x86_64,并且禁用了FirewalldSELinux

1.1 提供CentOS-Base.repo源和epel.repo源

# cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
# rm -rf /etc/yum.repos.d/*
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# yum makecache

1.2 安装Cobbler相关软件包

Cobbler默认以HTTP文件服务提供各系统的安装源Repository

# yum -y install httpd cobbler

将会安装Cobbler相关依赖,比如syslinuxtftp-server

几个重要的目录:

# rpm -ql cobbler

/var/lib/cobbler
/var/lib/tftpboot
/var/log/cobbler
/var/www/cobbler

2. 修改默认配置项

Cobbler的配置文件是一个YAML格式的数据文件,/etc/cobbler/settings,修改前先备份:

# cp /etc/cobbler/settings{,.bak}

2.1 Default Encrypted Password

这个配置项为通过Kickstart文件新安装的系统设置初始root密码:

1. 生成密码
# openssl passwd -1 -salt `openssl rand -hex 4`
Password: $1$73ab0f5a$cMeS9bHrfVZiEOlNmQ9rP0

2. 修改配置项
# vim /etc/cobbler/settings
将default_password_crypted的值修改为上一步骤中产生的$1$73ab0f5a$cMeS9bHrfVZiEOlNmQ9rP0

注意: 如果以后要修改配置项,可在启动Cobbler的情况下执行类似如下命令:

1. 启用动态修改配置文件功能
# sed -i '/^allow_dynamic_settings:/ s/0/1/' /etc/cobbler/settings

2. 重启Cobbler
# systemctl restart httpd
# systemctl restart cobblerd

3. 修改某一配置项
# cobbler setting edit --name=default_password_crypted --value="$1$73ab0f5a$cMeS9bHrfVZiEOlNmQ9rP0"

2.2 Server and Next_Server

设置Cobbler服务器的监听IP地址和TFTP服务器的IP(一般部署在同一服务器上,所以IP相同)

# cobbler setting edit --name=server --value="192.168.80.10"
# cobbler setting edit --name=next_server --value="192.168.80.10"

2.3 DHCP Management and DHCP Server Template

为实现PXE网络引导,需要一个DHCP服务器来分配IP地址,并指明下一跳地址TFTP服务器所在位置。 一般公司已经存在DHCP服务器了,所以不能再搭建,此时要取消Cobbler来管理DHCP服务,确保manage_dhcp: 0

## default, don't manage
manage_dhcp: 0

如果公司没有DHCP服务器,则安装dhcp,并配置如下:

1. 安装dhcp
# yum -y install dhcp

2. 配置可用网段及IP范围,boot loader指定为pxelinux.0,并指定TFTP的地址
# vim /etc/dhcp/dhcpd.conf

内容如下:
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#

# option definitions common to all supported networks...
ddns-update-style interim;
ignore client-updates;
authoritative;
allow booting;
allow bootp;
allow unknown-clients;

# A slightly different configuration for an internal subnet.
subnet 192.168.80.0 netmask 255.255.255.0 {
    range 192.168.80.100 192.168.80.200;
    option domain-name-servers 192.168.80.10; 
    option domain-name "cobbler.wangy.com"; 
    option routers 192.168.80.2; 
    option broadcast-address 192.168.80.255;
    default-lease-time 600; 
    max-lease-time 7200; 

    # TFTP Server Information
    next-server 192.168.80.10;
    filename "pxelinux.0";
}

3. 启动服务
# systemctl start dhcpd
# systemctl enable dhcpd

注意:

cobbler的运行依赖于dhcp、tftp、rsync及dns服务。其中dhcp可由dhcpd(isc)提供,也可由dnsmasq提供;tftp可由tftp-server程序包提供,也可由cobbler自带的tftp功能提供;rsync由rsync程序包提供;dns可由bind提供,也可由dnsmasq提供。

cobbler可自行管理这些服务中的部分甚至是全部,但需要配置/etc/cobbler/settings文件中的manage_dhcpmanage_tftpdmanage_rsyncmanage_dns分别进行定义。另外,由于每种服务都有着不同的实现方式,如若需要进行自定义,需要通过修改/etc/cobbler/modules.conf配置文件中各服务的模块参数的值来实现。

本文采用了独立管理的方式,即不通过cobbler来管理这些服务。

启动Cobbler服务后,查询:
# cobbler setting report | grep -E '^(pxe_just_once|manage_|server|next_server)'

2 Cobbler实现多系统版本全自动批量部署

# cobbler setting edit --name=manage_tftp --value=0
# cobbler setting edit --name=manage_tftpd --value=0
# cobbler setting edit --name=pxe_just_once --value=1

3 Cobbler实现多系统版本全自动批量部署

3. 启动HTTP和Cobbler服务

# systemctl start httpd cobblerd
# systemctl enable httpd cobblerd
# systemctl status httpd cobblerd

4. 检查并解决问题

# cobbler check

The following are potential configuration items that you may want to fix:

1 : change 'disable' to 'no' in /etc/xinetd.d/tftp
2 : 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.
3 : enable and start rsyncd.service with systemctl
4 : debmirror package is not installed, it will be required to manage debian deployments and repositories
5 : ksvalidator was not found, install pykickstart
6 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them

Restart cobblerd and then run 'cobbler sync' to apply changes.

Q1: tftp是由super daemon (xinetd) 所管理的服务

1. 安装 xinetd 服务
# yum -y install xinetd

2. 启动tftp并设置开机自启
# vim /etc/xinetd.d/tftp
将disabled的值修改为no

3. 启动服务
# systemctl start xinetd
# systemctl enable xinetd

4. 查看运行状态
# netstat -tunap | grep :69
udp        0      0 0.0.0.0:69              0.0.0.0:*                           1641/xinetd 

Q2: 提示缺少network boot-loaders,如果Cobbler只是用来网络启动x86/x86_64,则只需要安装最新版的syslinux

# ls -al /var/lib/cobbler/loaders/
total 4
drwxr-xr-x 2 root root    6 Jan 24  2016 .
drwxr-xr-x 8 root root 4096 Aug 30 13:32 ..
联网的情形下,运行:
# cobbler get-loaders

task started: 2016-08-30_141144_get_loaders
task started (id=Download Bootloader Content, time=Tue Aug 30 14:11:44 2016)
downloading http://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/README
downloading http://cobbler.github.io/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilo
downloading http://cobbler.github.io/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yaboot
downloading http://cobbler.github.io/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinux
downloading http://cobbler.github.io/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efi
downloading http://cobbler.github.io/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yaboot
downloading http://cobbler.github.io/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0
downloading http://cobbler.github.io/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32
downloading http://cobbler.github.io/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efi
downloading http://cobbler.github.io/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi
*** TASK COMPLETE ***

Q3: 启动rsync服务

# systemctl start rsyncd
# systemctl enable rsyncd
# systemctl status rsyncd

Q4: 如果Cobbler要用来安装debian系统,则需要安装debmirror包,否则可忽略

Q5: 安装pykickstart

# yum -y install pykickstart

Q6: 安装fencing tools,例如cmanfence-agents

# yum -y install fence-agents

5. 第一次Sync

再次执行# cobbler check,如果检查正常,使用sync同步配置:

# cobbler sync

6. 导入第一个系统发行版Distribution

使用# cobbler import命令导入distributions会自动识别发行版的类型和版本,并会为你自动创建一个正确的默认profile

The /var/www/cobbler/ks_mirror directory is where all of the distribution and repository files are copied, so you will need 5-10GB of free space per distribution you wish to import.

6.1 挂载CentOS-7.2 ISO到/mnt

# mount -o loop,ro -t iso9660 CentOS-7-x86_64-DVD-1511.iso /mnt

6.2 运行导入命令

# cobbler import --name=CentOS-7.2 --arch=x86_64 --path=/mnt

task started: 2016-08-30_142738_import
task started (id=Media import, time=Tue Aug 30 14:27:38 2016)
Found a candidate signature: breed=redhat, version=rhel6
Found a candidate signature: breed=redhat, version=rhel7
Found a matching signature: breed=redhat, version=rhel7
Adding distros from path /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64:
creating new distro: CentOS-7.2-x86_64
trying symlink: /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64 -> /var/www/cobbler/links/CentOS-7.2-x86_64
creating new profile: CentOS-7.2-x86_64
associating repos
checking for rsync repo(s)
checking for rhn repo(s)
checking for yum repo(s)
starting descent into /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64 for CentOS-7.2-x86_64
processing repo at : /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64
need to process repo/comps: /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64
looking for /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/repodata/*comps*.xml
Keeping repodata as-is :/var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/repodata
*** TASK COMPLETE ***
# du -sh /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/
4.2G    /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/

6.3 查看对象distro和profile

# cobbler distro list
   CentOS-7.2-x86_64
# cobbler profile list
   CentOS-7.2-x86_64

Object Details:

# cobbler distro report --name=CentOS-7.2-x86_64
Name                           : CentOS-7.2-x86_64
Architecture                   : x86_64
TFTP Boot Files                : {}
Breed                          : redhat
Comment                        : 
Fetchable Files                : {}
Initrd                         : /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/images/pxeboot/initrd.img
Kernel                         : /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/images/pxeboot/vmlinuz
Kernel Options                 : {}
Kernel Options (Post Install)  : {}
Kickstart Metadata             : {'tree': 'http://@@http_server@@/cblr/links/CentOS-7.2-x86_64'}
Management Classes             : []
OS Version                     : rhel7
Owners                         : ['admin']
Red Hat Management Key         : <<inherit>>
Red Hat Management Server      : <<inherit>>
Template Files                 : {}

通过HTTP访问Cobbler的相关文件,http://192.168.80.10/cobbler

4 Cobbler实现多系统版本全自动批量部署

7. 使用Cobbler Web User Interface

使用Cobbler WebUI,能够:

  • View all of the cobbler objects and the settings
  • Add and delete a system, distro, profile, or system
  • Run the equivalent of a "cobbler sync"
  • Edit kickstart files (which must be in /etc/cobbler and /var/lib/cobbler/kickstarts)

暂时不能够:

  • Auto-Import media
  • Do a "cobbler validateks"

7.1 安装cobbler-web

# yum -y install cobbler-web

7.2 配置认证方式

使用/etc/cobbler/modules.conf中默认的配置:

[authentication]
module = authn_configfile
[authorization]
module = authz_allowall

7.3 修改默认用户

Cobbler WebUI的默认用户为cobbler,修改用户名为admin,并设置其密码

# sed -i 's/^cobbler/admin/' /etc/cobbler/users.digest
# htdigest /etc/cobbler/users.digest "Cobbler" admin
Changing password for user admin in realm Cobbler
New password: 
Re-type new password:

修改某用户的密码的方法为:

htdigest /etc/cobbler/users.digest "Cobbler" <username>

7.4 Cobbler WebUI配置文件

确保针对Cobbler的Apache配置文件/etc/httpd/conf.d/cobbler.conf存在

7.5 重启HTTP和Cobbler服务

# systemctl restart httpd cobblerd

7.6 访问Cobbler WebUI

Cobbler WebUI使用了HTTPS,本实验没有搭建私有CA,所以不使用SSL功能。访问https://192.168.80.10/cobbler_web

5 Cobbler实现多系统版本全自动批量部署

6 Cobbler实现多系统版本全自动批量部署

8. 测试

7 Cobbler实现多系统版本全自动批量部署

8.1 删除默认profile

因为默认的profile可能不适合生产环境,需要重新定制Kickstart

# cobbler profile remove --name=CentOS-7.2-x86_64 --recursive
# cobbler sync

8.2 增加其它profile

(1) 提供Kickstart文件

# vim /root/CentOS-7.2-BasicWebServer-ks.cfg
内容如下:

# Kickstart file automatically generated by anaconda.
# version=DEVEL

##############################################################################
# Command section --- Must include the required options.
##############################################################################

# Use text mode install
text

# Run the Setup Agent on first boot
firstboot --disable

# Install OS instead of upgrade
install

# Use network installation
url --url=$tree
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
$yum_repo_stanza

# Network information
$SNIPPET('network_config')

# System authorization information
auth --useshadow --enablemd5

# Root password
rootpw --iscrypted $default_password_crypted

# Do not configure the X Window System
skipx

# System timezone
timezone Asia/Shanghai

# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'

# System language
lang en_US.UTF-8

# Firewall configuration
firewall --disabled

# SELinux configuration
selinux --disabled

# Installation logging level
logging --level=info

# Reboot after installation
reboot

# System bootloader configuration
bootloader --location=mbr

# Partition clearing information
clearpart --all --initlabel

# Clear the Master Boot Record
zerombr

# Allow anaconda to partition the system as needed
autopart

##############################################################################
# The %pre sections 
##############################################################################

%pre

$SNIPPET('log_ks_pre')
$SNIPPET('kickstart_start')
$SNIPPET('pre_install_network_config')
# Enable installation monitoring
$SNIPPET('pre_anamon')

%end

##############################################################################
# The %packages section
##############################################################################
%packages
@^web-server-environment
@base
@core
@java-platform
@python-web
@web-server
%end
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end

##############################################################################
# The %post sections 
##############################################################################

%post --nochroot

$SNIPPET('log_ks_post_nochroot')

%end

%post

$SNIPPET('log_ks_post')
# Start yum configuration
$yum_config_stanza
# End yum configuration
$SNIPPET('post_install_kernel_options')
$SNIPPET('post_install_network_config')
$SNIPPET('func_register_if_enabled')
$SNIPPET('download_config_files')
$SNIPPET('koan_environment')
$SNIPPET('redhat_register')
$SNIPPET('cobbler_register')
# Enable post-install boot notification
$SNIPPET('post_anamon')
# Start final steps
$SNIPPET('kickstart_done')
# End final steps

%end

(2) 添加

8 Cobbler实现多系统版本全自动批量部署

解决办法: 将Kickstart文件移至/var/lib/cobbler/kickstarts/目录

# mv /root/CentOS-7.2-BasicWebServer-ks.cfg /var/lib/cobbler/kickstarts/CentOS-7.2-BasicWebServer-ks.cfg
# cobbler profile add --name=CentOS-7.2-BasicWebServer --distro=CentOS-7.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.2-BasicWebServer-ks.cfg
# cobbler profile list
   CentOS-7.2-BasicWebServer
注意:添加完新的profile后,必须sync同步一次
# cobbler sync

(3) 修改Boot Menu

每次执行# cobbler sync都会重新生成/var/lib/tftpboot/pxelinux.0/default文件,具体的启动选项请参考Anaconda Boot Options

# vim /var/lib/tftpboot/pxelinux.cfg/default
1. 删除ONTIMEOUT local
2. 将MENU DEFAULT移动至刚才新添加的启动项LABEL CentOS-7.2-BasicWebServer下面

9 Cobbler实现多系统版本全自动批量部署

9. 使用Koan重装系统

Koan(kickstart-over-a-network)是cobbler的一个辅助工具,安装在客户端(即需要重装系统的服务器上),Koan会根据从远端cobbler server上获取的安装信息,实现快速重装Linux(Fedora, RedHat, CentOS)等系统。

假设当前Cobbler Server: 172.17.40.31; 需重装的客户端: 192.168.40.201 (eno1网卡的MAC: 0c:c4:7a:89:00:04)

9.1 客户端安装koan

注意: 需要EPEL源

# yum -y install koan

9.2 查看Cobbler Server相关信息

# koan --server=172.17.40.31 --list=profiles
- looking for Cobbler at http://172.17.40.31:80/cobbler_api
CentOS-7.2-BasicWebServer-Kickstart
CentOS-6.5-ISO-VNC
CentOS-7.2-ISO-Manual
CentOS-7.2-4U4Node-BasicWebServer-Kickstart
CentOS-6.5-BasicServer-Kickstart
CentOS-6.5-ISO-Manual
CentOS-7.2-ISO-VNC
# koan --server=172.17.40.31 --profile=CentOS-7.2-4U4Node-BasicWebServer-Kickstart --display
- looking for Cobbler at http://172.17.40.31:80/cobbler_api
- reading URL: http://172.17.40.31/cblr/svc/op/ks/profile/CentOS-7.2-4U4Node-BasicWebServer-Kickstart
install_tree: http://172.17.40.31/cblr/links/CentOS-7.2-x86_64
                name  : CentOS-7.2-4U4Node-BasicWebServer-Kickstart
              distro  : CentOS-7.2-x86_64
           kickstart  : http://172.17.40.31/cblr/svc/op/ks/profile/CentOS-7.2-4U4Node-BasicWebServer-Kickstart
             ks_meta  : tree=http://@@http_server@@/cblr/links/CentOS-7.2-x86_64 
        install_tree  : http://172.17.40.31/cblr/links/CentOS-7.2-x86_64
              kernel  : /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/images/pxeboot/vmlinuz
              initrd  : /var/www/cobbler/ks_mirror/CentOS-7.2-x86_64/images/pxeboot/initrd.img
      kernel_options  : ks=http://172.17.40.31/cblr/svc/op/ks/profile/CentOS-7.2-4U4Node-BasicWebServer-Kickstart ksdevice=link kssendmac lang= text 
               repos  : 
            virt_ram  : 512
    virt_disk_driver  : raw
           virt_type  : xenpv
           virt_path  : 
      virt_auto_boot  : 1

9.3 Cobbler Server添加System信息

http://cobbler.github.io/manuals/2.6.0/3/1/3_-_Systems.html

System records map a piece of hardware (or a virtual machine) with the cobbler profile to be assigned to run on it. This may be thought of as chosing a role for a specific system.

1. 添加system
# cobbler system add --name=4U4Node-nkocs-node4 \
--profile=CentOS-7.2-4U4Node-BasicWebServer-Kickstart \
--hostname=nkocs04 \
--interface=eno1 \
--static=1 \
--netboot-enabled=true \
--ip-address=192.168.40.201 \
--subnet=255.255.255.0 \
--gateway=192.168.40.25 \
--name-servers="192.168.0.1"

2. 同步配置
# cobbler sync

9.4 客户端添加GRUB引导项

此时客户端可以查看到Cobbler Server上新增的system信息:

# koan --server=172.17.40.31 --list=systems
- looking for Cobbler at http://172.17.40.31:80/cobbler_api
4U4Node-nkocs-node4

-r, --replace-self reinstall this host at next reboot

# koan --server=172.17.40.31 --replace-self --system=4U4Node-nkocs-node4

- looking for Cobbler at http://172.17.40.31:80/cobbler_api
- reading URL: http://172.17.40.31/cblr/svc/op/ks/system/4U4Node-nkocs-node4
install_tree: http://172.17.40.31/cblr/links/CentOS-7.2-x86_64
downloading initrd initrd.img to /boot/initrd.img_koan
url=http://172.17.40.31/cobbler/images/CentOS-7.2-x86_64/initrd.img
- reading URL: http://172.17.40.31/cobbler/images/CentOS-7.2-x86_64/initrd.img
downloading kernel vmlinuz to /boot/vmlinuz_koan
url=http://172.17.40.31/cobbler/images/CentOS-7.2-x86_64/vmlinuz
- reading URL: http://172.17.40.31/cobbler/images/CentOS-7.2-x86_64/vmlinuz
- ['/sbin/grubby', '--add-kernel', '/boot/vmlinuz_koan', '--initrd', '/boot/initrd.img_koan', '--args', '"ks=http://172.17.40.31/cblr/svc/op/ks/system/4U4Node-nkocs-node4 ksdevice=link kssendmac lang= text "', '--copy-default', '--make-default', '--title=kick1472699253']
- ['/sbin/grubby', '--update-kernel', '/boot/vmlinuz_koan', '--remove-args=root']
- reboot to apply changes

查看GRUB配置文件发现已经自动增加了一条首选引导项:

### BEGIN /etc/grub.d/10_linux ###
menuentry 'kick1472699253' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-86a8dd4a-44bb-4e14-b5c9-52de145c952f' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod xfs
    set root='hd1,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd1,msdos1'  677bc0e6-fcc1-4120-93a0-3e6e1a418d8f
    else
      search --no-floppy --fs-uuid --set=root 677bc0e6-fcc1-4120-93a0-3e6e1a418d8f
    fi
    linux16 /vmlinuz_koan ro rd.md.uuid=c78a94ba:53a5fd94:fe20a8fa:54201e70 rd.lvm.lv=centos/root rd.md.uuid=410f9e22:809c065e:e8371c3b:416aa6fc rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 ks=http://172.17.40.31/cblr/svc/op/ks/system/4U4Node-nkocs-node4 ksdevice=link kssendmac lang= text
    initrd16 /initrd.img_koan
}

9.5 重启客户端自动重装

10 Cobbler实现多系统版本全自动批量部署

未经允许不得转载: LIFE & SHARE - 王颜公子 » Cobbler实现多系统版本全自动批量部署

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录

专题