Linux 系統自動化部署系統

来源:https://www.cnblogs.com/heyongshen/archive/2022/08/07/16558754.html
-Advertisement-
Play Games

linux安裝光碟中的相關文件: [root@Centos8 cdrom]# ls BaseOS EFI images isolinux LICENSE media.repo Minimal TRANS.TBL #isolinux:存放和安裝相關的文件 [root@Centos8 isolinux] ...


linux安裝光碟中的相關文件:

[root@Centos8 cdrom]# ls
BaseOS  EFI  images  isolinux  LICENSE  media.repo  Minimal  TRANS.TBL

#isolinux:存放和安裝相關的文件
[root@Centos8 isolinux]# ls
boot.cat  boot.msg  grub.conf  initrd.img  isolinux.bin  isolinux.cfg  ldlinux.c32  libcom32.c32  libutil.c32  memtest  splash.png  TRANS.TBL  vesamenu.c32  vmlinuz

boot.cat: 相當於grub的第一階段,載入MBR中的bootloader到記憶體

isolinux.bin:光碟引導程式

isolinux.cfg:啟動菜單的配置文件(是一個文本文件,用於設置開機的光碟界面)

....c32:提供了啟動菜單功能的文件

memtest:記憶體檢測程式

splash.png:光碟啟動菜單界面的背景圖

vmlinuz:是內核映像文件

initrd.img:ramfs文件,是linux的一個精簡系統,裡面有文件系統的驅動
內核參數
isolinux/isolinux.cfg中設置相關的內核載入參數,實現不同的安裝過程

#不同的啟動模式,比如救援模式等,就是採用了不同的內核參數。

#指定內核參數的方法:
法一:在啟動菜單界面,選中一項安裝方法,按tab鍵,在後面增加參數

法二:在啟動菜單界面,任意選中一項安裝方法,按ESC鍵:boot: linux 參數設置 (linux表示isolinux.cfg中指定的一個標簽)

#常見的內核參數:
text:指定文本方式的安裝界面
rescue:進入救援模式
ks=path: 指定自動化安裝應答文件路徑,

#boot.iso:只是用來啟動的鏡像文件

自動安裝的應答文件

應答文件,稱為kickstart文件,用於保存安裝過程需要指定的選項。

#kickstart文件主要包括三個部分:命令段,程式包段,腳本段
命令段:指明各種安裝前配置,如鍵盤類型等

#命令段中的常見命令:
	keyboard: 設定鍵盤類型
	lang: 語言類型
	zerombr:清除mbr
	clearpart:清除分區
	part: 創建分區
	rootpw: 指明root的密碼
	timezone: 時區
	text: 文本安裝界面
	network:指定網路設置
	firewall:設置防火牆設置
	selinux:設置selinux設置
	reboot:安裝完自動重啟
	user:安裝完成後為系統創建新用戶
	url: 指明安裝源

#程式包段:指明要安裝的程式包組或程式包,不安裝的程式包等
	%packages
	@^environment group: 指定環境包組,如:@^minimal-environment
	@group_name
	package
	-package
	%end

#腳本段:
	%pre: 安裝前腳本
	%post: 安裝後腳本

#註意:
CentOS 8,7,6 不同版本的kickstart文件格式不盡相同,不可混用
 %addon, %packages, %onerror, %pre 、 %post 必須以%end結束,否則安裝失敗

kickstart文件創建

  • 使用圖形工具創建(centos7支持)

  • 使用自帶的模板生成

可使用創建工具:system-config-kickstart ,註意:此方法 CentOS 8不再支持

依據某模板修改並生成新配置,CentOS安裝完後,會自動參考當前系統的安裝過程,生成一個kickstart文件 /root/anaconda-ks.cfg
檢查ks文件的語法錯誤:
使用 ksvalidator 工具可以檢查kickstart的文件格式是否有語法錯誤,來自於 pykickstart 包

格式:ksvalidator /PATH/TO/KICKSTART_FILE

DHCP服務的實現

  • DHCP:Dynamic Host Configuration Protocol,動態主機配置協議

  • DHCP使用的是UDP協議,服務端使用67/udp埠,客戶端使用68/udp埠

  • DHCP主要實現的是區域網類自動給客戶機分配ip地址、網段、dns等內容

DHCP工作過程:
  1. 客戶機發送廣播報文尋找DHCP伺服器(DISCOVER廣播報文)

  2. DHCP伺服器回應客戶機(OFFER報文)

  3. 客戶機回應指定的DHCP伺服器(REQUEST報文,先到先得的原則)

  4. DHCP和客戶機簽訂協約(ACK報文)

DHCP的實現
註意:實現DHCP服務前,先將網路已有DHCP服務,如:vmware中的DHCP關閉,訪止衝突
DHCP服務的實現軟體:
  • dhcp(CentOS 7 之前版本) 或 dhcp-server(CentOS 8 中的包名) #功能更強大

  • dnsmasq:小型服務軟體,可以提供dhcp和dns功能

DHCP相關文件的組成
dhcp或dhcp-server 包文件組成
[root@Centos8 ~]# rpm -ql dhcp-server
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/dhcp
/etc/dhcp/dhcpd.conf #dhcp服務配置文件
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema 
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
...
/usr/share/doc/dhcp-server/dhcpd.conf.example #dhcp服務配置範例文件
/usr/lib/systemd/system/dhcpd.service ##dhcp服務service文件
/usr/lib/systemd/system/dhcpd6.service
/usr/sbin/dhcpd  #dhcp服務主程式
/usr/share/doc/dhcp-server
/var/lib/dhcpd/dhcpd.leases 地址分配記錄
...
/var/lib/dhcpd
...
dhcp-client客戶端包
...
/usr/sbin/dhclient #客戶端程式
/var/lib/dhclient #自動獲取的IP信息
...
DHCP伺服器配置文件
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf #拷貝一個範例文件進行更改
#註意:
DHCP伺服器本身採用靜態IP

必須配置和DHCP網卡的靜態IP所在網段的subnet段,否則DHCP服務無法啟動(比如自己的ip是10網段,首先就要給10網段配置dhcp)

#全局配置
subnet {
 ...
 }
host {
}

next-server:提供引導文件的伺服器IP地址

filename: 指明引導文件名稱
範例
subnet 192.168.100.0 netmask 255.255.255.0 {
 range 192.168.100.10  192.168.100.100; #指明分配的ip地址範圍
 range 192.168.100.150  192.168.100.200; #每一行需要以分號結束
 option routers 192.168.100.1; #指定網關
 next-server 192.168.1.100; #TFTP伺服器地址
 filename "pxelinux.0";     #bootloader啟動文件的名稱
}
範例:dhcpd.conf
#dhcp的配置文件每一行使用分號結束
[root@centos8 ~]#grep -v "#" /etc/dhcp/dhcpd.conf
option domain-name "magedu.org";
option domain-name-servers 180.76.76.76, 223.6.6.6; #指定使用的dns
default-lease-time 600;  #指定到期的時間
max-lease-time 7200;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 { #指定給那個網段分配
 range 10.0.0.10  10.0.0.100; #分配的ip地址範圍 
 range 10.0.0.110 10.0.0.200;
 option routers 10.0.0.2; #指定網關
 next-server 10.0.0.8; #指定使用的tftp伺服器
 filename "pxelinux.0"; } #指定需要再tftp伺服器上下載的文件

host testclient { #給特定的客戶端分配的ip地址
 hardware ethernet 00:0c:29:33:b4:1a; #客戶端的mac地址
 fixed-address 10.0.0.106; #如果是這個客戶端就分配這個ip地址
 default-lease-time 86400; #合約時間
 max-lease-time 864000;
 option routers 10.0.0.254; #網關名
 option domain-name-servers 114.114.114.114,8.8.8.8 ; #dns伺服器
 option domain-name "test.net"; } #功能變數名稱自動補齊
#範例: DHCP伺服器給指定主機分配固定IP
[root@centos8 ~]#vim /etc/dhcp/dhcpd.conf
subnet 10.0.0.0 netmask 255.255.255.0 {
   range 10.0.0.50 10.0.0.100;
   range 10.0.0.150 10.0.0.200;
   option routers 10.0.0.2;
   next-server 10.0.0.8;
   filename "pxelinux.0"; }

host test {
 hardware ethernet 00:0c:29:cd:90:10;
 fixed-address 10.0.0.123;
}

實現TFTP服務

TFTP:Trivial File Transfer Protocol ,是一種用於傳輸文件的簡單高級協議,是文件傳輸協議(FTP)的簡化版本。

TFTP使用UDP作為傳輸層協議,TFTP使用69/udp這個埠

安裝和使用TFTP

  • tftp:提供小文件的下載

  • tftp:只需要下載啟動起來就行了

實現tftp的軟體:
  • tftp-server 伺服器包

  • tftp 客戶端包

#安裝tftp伺服器包
[root@centos8 ~]#dnf install tftp-server tftp -y

[root@Centos8 ~]# rpm -ql tftp-server
...
/usr/lib/systemd/system/tftp.service #tftp service文件
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd #tftp主程式
/usr/share/doc/tftp-server
...
/var/lib/tftpboot ##TFTP服務數據目錄 數據都放在這個目錄下麵
#啟動服務
[root@centos8 ~]#systemctl enable --now tftp.service
#tftp客戶端下載服務端的指定文件
tom@ubuntu1804:~$ tftp 192.168.26.129
tftp> get aa.txt  #下載服務端/var/lib/tftpboot下的某個文件
tftp> quit #退出tftp
tftp> status #連接狀態的查看
Connected to 192.168.26.129.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds

#以下在tftp伺服器執行,當用戶下載文件後,可以觀察到伺服器端自動打開in.tftpd主程式

利用 PXE 實現自動化系統部署

PXE:Preboot Excution Environment,預啟動執行環境,是由Intel公司研發
目標:實現基於網路自動化安裝系統

利用PXE實現自動化安裝流程

PXE網卡:ROM中不但集成了MAC,還集成了DHCP和TFTP客戶端。

pxelinux.0 就是一個bootloader。 獲取pxelinux.cfg文件(grub二階段 )
image

在CentOS 8上實現PXE自動化安裝CentOS 7,8

  • 配置伺服器環境

  • 安裝對應的軟體包

  • 配置DHCP服務

  • 配置yum私有倉庫

  • 準備應答文件

  • 準備菜單文件

安裝前準備:

  • 關閉防火牆和SELINUX,DHCP伺服器靜態IP

  • 網路要求:關閉Vmware軟體中的DHCP服務,基於NAT模式

安裝相關軟體包並啟動

dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux(或者syslinux-tftpboot)

syslinux-nonlinux這個軟體包裡面提供了pxelinux.0,menu.c32等文件。
menu.c32提供了菜單的功能
配置DHCP服務

配置yum的私有倉庫

準備kickstart文件
準備PXE啟動相關文件

這些相關文件放在tftp的指定目錄下麵。( /var/lib/tftpboot/)

[root@centos8 ~]#mkdir /var/lib/tftpboot/centos{6,7,8}
#準備CentOS6,7,8各自的內核相關文件

[root@centos8 ~]#cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8
[root@centos8 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/ 

#以下三個文件是CentOS8安裝所必須文件,CentOS7不需要

[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
#生成安裝菜單文件
[root@centos8 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
準備啟動菜單文件

手動編寫一個啟動菜單文件

[root@centos8 ~]#vim /var/lib/tftpboot/pxelinux.cfg/default 

default menu.c32 #指定預設使用的界面菜單文件 指定菜單的風格
timeout 600 #超時時間60是、
menu title Install CentOS Linux  #標題
label linux8  #指定標簽
 menu label Auto Install CentOS Linux ^8 #指定標題 加了脫字元會高亮
 kernel centos8/vmlinuz #指定使用的內核文件
 append initrd=centos8/initrd.img ks=http://10.0.0.100/ks/centos8.cfg #指定應答文件的位置

label linux7
 menu label Auto Install CentOS Linux ^7
 kernel centos7/vmlinuz
 append initrd=centos7/initrd.img ks=http://10.0.0.100/ks/centos7.cfg


label manual
 menu label ^Manual Install CentOS Linux 8.0
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img #手動安裝
inst.repo=http://10.0.0.100/centos/8/os/x86_64/ #指定repo地址

label rescue #救援模式
 menu label ^Rescue a CentOS Linux system 8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img
inst.repo=http://10.0.0.100/centos/8/os/x86_64/ rescue

label local
 menu default   #預設沒有任何選擇就採用本地硬碟啟動
 menu label Boot from ^local drive
 localboot 0xffff

利用cobbler實現自動化安裝

CentOS8沒有提供這個工具。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Swagger介面管理文檔 訪問介面文檔的網頁:http://localhost:8080/swagger-ui/index.html 導入依賴 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-start ...
  • 1、基於jQuery的Ajax 1.1 基本Ajax | 參數 | 說明 | | | | | url | 請求地址 | | type | 請求類型 | | data | 請求參數 | | dataType | 返回參數 | | success | 成功處理函數 | | error | 錯誤處理函數 ...
  • “索引什麼時候失效?” 面試過程中,突如其來的一個問題,是不是有點懵? 沒關係,關註我,面試不迷路。 我是Mic,一個工作了14年的Java程式員。 索引失效涉及到的知識點非常多,所以我把這個問題的回答整理到了一個20W字的面試文檔裡面,大家可以領取。 下麵看看高手的回答 高手: InnoDB引擎里 ...
  • django中資源文件夾的引入 1.靜態資源文件夾的引入 settings.py的配置如下所示: # django預設配置 STATIC_URL='static/' # django會去應用裡面的static文件夾找靜態資源,僅當DEBUG為True時 # BASE_DIR是項目的絕對地址 STAT ...
  • 它是基於Django的,幫助我們快速開發符合RESTful規範的介面框架。 一 路由 可以通過路由as_view()傳參 根據請求方式的不同執行對應不同的方法 在routers模塊下 封裝了很多關於路由的方法 , 最基礎的BaseRouter類,給我提供自定製的介面。 下麵這個方法給我們提供了自動生 ...
  • 配置文件設置 set number (設置行號) set nocompatible (設置不相容vi模式,不設置會導致許多vim特性被禁用) set clipboard=unnamed (設置普通的複製粘貼的內容和vim複製的內容相互使用) 打開、編輯,查找文件 vim + 任意文件名,如vim f ...
  • “Linux,全稱GNU/Linux,是一種免費使用和自由傳播的類UNIX操作系統,其內核由林納斯·本納第克特·托瓦茲於1991年10月5日首次發佈,它主要受到Minix和Unix思想的啟發,是一個基於POSIX的多用戶、多任務、支持多線程和多CPU的操作系統。 ...
  • 想要將圖片中的文字提取出來嗎?小編今天為大家分享一款線上文字識別轉換工具—"Text Scanner"。Text Scanner for Mac是一款非常不錯的線上文字識別轉換工具,辨識速度快,操作流程也簡單直接,且會自動判斷各國語言,非常簡單! Text Scanner mac版基於AI領先的深度 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...