首頁 > 軟體

Cobbler自動化安裝部署Ubuntu 14.04

2020-06-16 17:04:56

概述

本例主要實現通過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等等。

1234567891011 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

公鑰注入指令碼內容
123456 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://www.linuxidc.com/Linux/2017-10/147477.htm


IT145.com E-mail:sddin#qq.com