概述
本例主要实现通过cobbler,配合seed脚本文件,来自动化安装部署ubunut环境,并安装相应的软件并作相应的基本配置,可以通过此方法来为ceph等大规模集群基础部署。
seed文件:Debian ubuntu平台的一种自动化部署配置文件 和kickstart文件功能相同。其实ubuntu也可以使用ks文件,但是只能进行基本的环境配置,不能自定义包的安装和脚本的运行。
实验环境
cobbler-server: 1.1.1.122 centos7.2
ubuntu 客户端:kvm虚拟机
定义发行版Distro
导入外部安装源,如光盘导入本地会放在 /var/www/cobbler/ks_mirror 下,通过 http输出,假设这里已将ubuntu的安装光盘挂载到本地 的/mnt 下
cobbler import --name="ubuntu14" --path=/mnt 【导入安装源】 cobbler distro list 【查看已经存在的安装源】
建立更改配置文件profile
1.用于与相应的发行版联系起来,实现同一个发行版的不同安装选项,名称不要与 distro 相同。默认情况下,建立完成distro后会自动建立与之相关联的profile。如果想手动建立并且指定seed文件的话使用如下操作:
cobbler profile add --name=ubuntu14-x86_64 --distro=ubuntu14 --kickstart=/var/lib/cobbler/kickstarts/ubuntu.seed 【指定发行版为ubuntu14,并指定 seed文件的名称和位置, cobbler 的/var/lib/cobbler/kickstarts/目录下带了很多 kickstart和seed的文件模板
具体seed文件内容稍后会列出。当然这些操作可以在web UI界面下完成,也很直观。
2.查看现有的profile
cobbler profile list
添加安装节点System
主要功能就是可以根据节点mac地址,来识别不同节点的安装选项差异,如ip、dns、hostname等等。
cobbler system add --name=ceph-deploy --hostname=ceph-deploy.test.com --dns-name=ceph-deploy.test.com --profile=ubuntu14-x86_64 --interface=eth0 --mac= [mac地址] --ip-address=1.1.1.30 --subnet=255.255.255.0 --gateway=1.1.1.1 --static=1
这样当客户端通过pxe启动,检测到与之匹配的mac时候就会自动调取相应的system,安装过程中会给分配相应的地址等信息。如果不匹配启动就会出现cobbler默认的引导菜单界面。
PreSeed文件
这里列出了一个seed文件,一般情况下会适用于绝大多数ubuntu14的安装环境,但是某些情况也许有些特例,这方面seed不如ks兼容性那么好,不同的大版本直接也许会有差异。这里仅以14版本为例,12版本没有试过是否可用,由于本人对seed文件也是理解有限,所以仅供参考
############# # 网络配置 ############# d-i netcfg/choose_interface select auto ############# # Pre Install ############ # Command Line 1: This is necessary otherwise you will be prompted to umount /dev/sda. See Ubuntu bug #1347726. d-i preseed/early_command string umount /media || true ############# # Net Image ############# # 针对12.10以上的版本一定要配置这个 d-i live-installer/net-image string ############# #语言设置 ############# d-i debian-installer/locale string en d-i debian-installer/country string CN d-i debian-installer/locale string en_US.UTF-8 d-i debian-installer/language string en ############# # 键盘设置 ############# d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us d-i console-setup/variantcode string d-i keyboard-configuration/layoutcode string us ############# # 安装源配置 ############# #安装源配置 d-i mirror/country string manual d-i mirror/http/proxy string 1.1.1.122 #此处必须填写,否则安装system要等很久 d-i mirror/http/hostname string 1.1.1.122 d-i mirror/http/directory string /ubuntu/ ############# # APT ############ #如不配置此项,在安装包的时候会卡住很久,但不影响最终安装结果 d-i apt-setup/security_host string 172.16.245.240 d-i apt-setup/security_path string /ubuntu ############# # # Clock and Time Zone # ############# d-i clock-setup/ntp boolean true d-i clock-setup/ntp-server string 1.1.1.1 d-i time/zone string Asia/Shanghai d-i clock-setup/CST boolean true ############# # Partitioning ############# #清楚磁盘中所有的lvm分区 d-i partman-lvm/device_remove_lvm boolean true # 清楚所有raid分区 d-i partman-md/device_remove_md boolean true #使用磁盘进行普通分区 d-i partman-auto/method string regular d-i partman-auto/disk string /dev/vda #kvm虚拟机中磁盘是vda,如果是真实机器则是sda #预定义分区方式,每个分区在一行定义,以.结尾 #每组分区三个数字表示:最小分区多少MB,优先级(越小越优先),分区最大多少MB d-i partman-auto/expert_recipe string boot-root :: 150 150 150 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } . 8000 8000 8000 linux-swap method{ swap } format{ } . 204800 204800 204800 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . d-i partman-partitioning/confirm_write_new_label boolean true #不提示写入fenqu信息到磁盘 d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true #不提示覆盖磁盘中已有数据 ############# # Packages ############# # 这里目前我只能选择包组,没法制定具体某个安装包,不知道具体为什么。 tasksel tasksel/first multiselect openssh-server # 禁止安装时自动更新 d-i pkgsel/upgrade select none d-i pkgsel/update-policy select none popularity-contest popularity-contest/participate boolean false ############# # Users and Password ############# #允许使用root登录 d-i passwd/root-login boolean true # 不建立其他用户 d-i passwd/make-user boolean false #允许使用弱密码 d-i user-setup/allow-password-weak boolean true #配置root密码,通过mkpasswd程序生成 d-i passwd/root-password-crypted password $1$RsMBi5P0$bWmhi.I4MnZPmWFXpBEy0/ ############# # Bootloader ############# d-i grub-installer/only_debian boolean true d-i finish-install/reboot_in_progress note #安装完成后重启 ############# # 安装完成后执行脚本和命令 ############# #所有命令通过;分隔,如果使用一般命令可以直接执行,但此时真正的系统正被挂在载/target/下面,因此最终执行的目标是/target/下,如果想使用系统级的命令,如执行脚本等。需要通过chroor 到/target下,以target为根 才能正常执行,否则报错。 #第一个命令是修改ssh配置文件,使其允许root登录 #第二个命令是下载soures.list,该文件实现定义内部的apt源。 #第三个命令是去掉cobbler中system的自动引导,否则下次重启系统还会重新安装。 #第四个命令是下载并执行一个脚本,实现公钥注入功能。 #第五个命令是更新apt源,并安装指定的软件包。 #第六个命令则修改puppet配置文件和chrony时间服务的配置文件。 d-i preseed/late_command string sed -i ‘/PermitRootLogin / s/ .*/ yes/‘ /target/etc/ssh/sshd_config; wget http://$http_server/cobbler/repo_mirror/trusty-sources.list -O /target/etc/a pt/sources.list; wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; cd /target; wget http://$http_server/cobbler/svc/public_key.sh; chmod +x ./public_key.sh; chr oot ./ ./public_key.sh; chroot ./ apt-get update; chroot ./ apt-get install -y --force-yes vim chrony puppet; cd - ; sed -i ‘8 s/^.*/server=puppet-server.chinergy.com.cn/‘ /target/etc/puppet/puppet. conf; sed -i ‘4 s/^.*/server 1.1.1.1 iburst/‘ /target/etc/chrony/chrony.conf
公钥注入脚本内容
mkdir /root/.ssh cat >> /root/.ssh/authorized_keys << PUPPET ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCk0cgPsrcwvIKBe+Y4sDMtcriNkxgLvXDTJhi1M4v+HvUF0VUO7DmjESfcUcpJVRn09O8erYcPy548b/mJBoy0zfp16+5mGw6y9NH/VHToxfqkA1nAdBKQRih7CHv40iO7cFxFBnDcL+5nTyHzHAbPx4TZ5QwsWGNPnL8yMFyeX2dxP64woiwVIcKo2yoVockyyiGkgiOb6vc6ZK6XKR1LjhAr1ESAAYBzSKNCNak8qrf4tuCvVI++qnl9GiiLJ+OatTNOLId3umz5+J5/hRfHhxNzR7P0q/fJBQOvgtBqXaldJFYM6zr679dB4niMuObXphVuOVGfQDDOK7w/ root@puppet-server PUPPET
总结
个人感觉ubuntu的seed文件较ks更为复杂一些,而且更容易出错,很详细的说明文档也很少,所以在自己的环境中不断的试验修改,最后达到适合自己环境的版本。目前还不知道在post脚本阶段怎么成功引用snippets变量,试了很多方式都会报错,因此干脆就用执行脚本替代了。
原文地址:http://h11345.blog.51cto.com/780987/1852027