PXE+kickstart無人值守安裝CentOS 7

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/08/11/7342919.html
-Advertisement-
Play Games

本文目錄: 1.1 PXE說明 1.2 PXE流程 1.3 部署環境說明 1.4 部署DHCP服務 1.5 部署FTP 1.6 提供pxe的boot loader和相關配置文件 1.7 從安裝鏡像中獲取Linux內核文件 1.8 設置開機菜單並提供系統安裝文件 1.9 開機測試 1.10 通過pxe ...



本文目錄:

1.1 PXE說明

1.2 PXE流程

1.3 部署環境說明

1.4 部署DHCP服務

1.5 部署FTP

1.6 提供pxe的boot loader和相關配置文件

1.7 從安裝鏡像中獲取Linux內核文件

1.8 設置開機菜單並提供系統安裝文件

1.9 開機測試

1.10 通過pxe+kickstart實現無人值守批量安裝操作系統


 

1.1 PXE說明

所謂的PXE是Preboot Execution Environment的縮寫,字面上的意思是開機前的執行環境。

要達成PXE必須要有兩個環節:

(1)一個是客戶端的網卡必須要支持PXE用戶端功能,並且開機時選擇從網卡啟動,這樣系統才會以網卡進入PXE客戶端的程式;

(2)一個是PXE伺服器必須要提供至少含有DHCP以及TFTP的服務!

且其中:

    · DHCP服務必須要能夠提供客戶端的網路參數,還要告知客戶端TFTP所在的位置;

    · TFTP則提供客戶端的boot loader及kernel file下載路徑。

還要加上NFS/FTP/HTTP(選擇一樣即可)等提供安裝文件(安裝鏡像的解壓文件),才算是比較完整的PXE伺服器。一般TFTP和DHCP服務都由同一臺伺服器提供,且大多數時候還提供NFS/FTP/HTTP服務,所以PXE伺服器一般是提供3合一的服務。

1.2 PXE流程

如下圖:圖片來源於網路,雖不易理解,但細節描述的很好。

(1).Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC地址),如果合法則返回Client的IP地址,同時將pxe環境下的Boot loader文件pxelinux.0的位置信息傳送給Client。

(2).Client向PXE Server上的TFTP請求pxelinux.0,TFTP接收到消息之後再向Client發送pxelinux.0大小信息,試探Client是否滿意,當TFTP收到Client發回的同意大小信息之後,正式向Client發送pxelinux.0。

(3).Client執行接收到的pxelinux.0文件

(4).Client向TFTP請求pxelinux.cfg文件(其實它是目錄,裡面放置的是是啟動菜單,即grub的配置文件),TFTP將配置文件發回Client,繼而Client根據配置文件執行後續操作。

(5).Client向TFTP發送Linux內核請求信息TFTP接收到消息之後將內核文件發送給Client。

(6).Client向TFTP發送根文件請求信息,TFTP接收到消息之後返回Linux根文件系統。

(7).Client載入Linux內核(啟動參數已經在4中的配置文件中設置好了)。

(8).Client通過nfs/ftp/http下載系統安裝文件進行安裝。如果在4中的配置文件指定了kickstart路徑,則會根據此文件自動應答安裝系統。

1.3 部署環境說明

如下圖,172..16.10.10是PXE伺服器,提供dhcp+tftp+nfs服務。其他該網段內的主機為待安裝系統的主機群。

1.4 部署DHCP服務

首先安裝dhcp服務端程式。

yum -y install dhcp

DHCP主要是提供客戶端網路參數與TFTP的位置,以及boot loader的文件名。同時,我們僅針對內網來告知TFTP的相關位置,所以可以編輯/etc/dhcp/dhcpd.conf在subnet的區塊內加入兩個參數即可。其中PXE上專門為PXE客戶端下載的boot loader文件名稱為pxelinux.0。

vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 259200;
max-lease-time 518400;    
option routers 172.16.10.10;
option domain-name-servers 172.16.10.10;
subnet 172.16.10.0 netmask 255.255.255.0 {
        range 172.16.10.11 172.16.10.100;
        option subnet-mask 255.255.255.0;
        next-server 172.16.10.10;            # 就是TFTP的位置
        filename "pxelinux.0";               # 告知得從TFTP根目錄下載的boot loader文件名
}

重啟dhcp

systemctl start dhcpd

 

1.5 部署TFTP

從流程圖中可以看出,boot loader文件pxelinux.0以及內核相關的配置文件(目錄pxelinux.cfg下)主要都是由TFTP來提供的!

TFTP的安裝很簡單,直接使用yum即可。不過要告訴客戶端TFTP的根目錄在哪裡,這樣客戶端才能找到相關文件。另外要註意,TFTP是由xinetd這個super daemon所管理的,因此設定好TFTP之後,要啟動的是xinetd。

yum install tftp-server
yum -y install xinetd

預設TFTP服務的根目錄是/var/lib/tftpboot/,為了少寫些字母,將tftp的根目錄修改為/tftpboot/。修改tftp的配置文件,主要是TFTP的根目錄。

vim /etc/xinetd.d/tftp

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot    # 重點在這裡!修改tftp的chroot根目錄
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

創建tftp的根目錄。

mkdir /tftpboot

啟動TFTP並觀察之:

systemctl start tftp

netstat -tulnp | grep xinetd
udp        0      0 0.0.0.0:69              0.0.0.0:*                           28465/xinetd 

接下來的文件必須要放置於/tftpboot/目錄下。

1.6 提供pxe的bootloader和相關配置文件

如果要使用PXE的開機引導的話,需要使用CentOS提供的syslinux包,從中copy兩個文件到tftp的根目錄/tftpboot下即可。整個過程如下:

yum -y install syslinux
cp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0}  /tftpboot/
mkdir /tftpboot/pxelinux.cfg
ls -l /tftpboot/
-rw-r--r-- 1 root root  61796 Oct 16  2014 menu.c32      # 提供圖形化菜單功能
-rw-r--r-- 1 root root  26759 Oct 16  2014 pxelinux.0    # boot loader文件
drwxr-xr-x 2 root root   4096 Feb 24 20:02 pxelinux.cfg  # 開機的菜單設定在這裡
-rw-r--r-- 1 root root 163728 Oct 16  2014 vesamenu.c32  # 也是提供圖形化菜單功能,但界面和menu.c32不同

pxelinux.cfg是個目錄,可以放置預設的開機選項,也可以針對不同的客戶端主機提供不同的開機選項。一般來說,可以在pxelinux.cfg目錄內建立一個名為default的文件來提供預設選項。

如果沒有menu.c32或vesamenu.c32時,菜單會以純文字模式一行一行顯示。如果使用menu.c32或vesamenu.c32,就會有類似反白效果出現,此時可以使用上下鍵來選擇選項,而不需要看著屏幕去輸入數字鍵來選擇開機選項。經過測試,使用vesamenu.c32比menu.c32更加好看些。

這部分設定完畢後,就是內核相關的設定了。

1.7 從安裝鏡像中獲取Linux內核文件

要安裝Linux系統,必須提供Linux內核文件和initrd文件,這裡以64位版本的CentOS 7.2為例。

這裡計劃將內核相關文件放在/tftpboot/CentOS7.2/目錄下。既然要從安裝鏡像中獲取內核相關文件,首先得要掛載鏡像。

mount /dev/cdrom /test
mkdir /tftpboot/CentOS7.2
cp /test/isolinux/{vmlinuz,initrd.img} /tftpboot/CentOS7.2
cp /test/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

其實僅需要vmlinuz和initrd.img兩個文件即可,不過這裡還將isolinux.cfg這個文件拷貝出來了,這個文件里提供了開機選項,可以以它作為修改開機選項和菜單的模板,這樣修改起來比較容易,也更便捷!

1.8 設置開機菜單並提供系統安裝文件

以下是CentOS 7.2中syslinux包中提供的isolinux.cfg中提供的預設內容。

[root@xuexi ~]# cat /tftpboot/pxelinux.cfg/default
default vesamenu.c32   # 這是必須項,或者使用menu.c32
timeout 600            # 超時等待時間,60秒內不操作將自動選擇預設的菜單來載入

display boot.msg       # 這是為選項提供一些說明的文件

# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png   # 背景圖片
menu title CentOS 7          # 大標題
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13

# Border Area
menu color border * #00000000 #00000000 none

# Selected item
menu color sel 0 #ffffffff #00000000 none

# Title bar
menu color title 0 #ff7ba3d0 #00000000 none

# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none

# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none

# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none

# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none

# Help text
menu color help 0 #ffffffff #00000000 none

# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none

# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none

# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none

# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.

menu tabmsg Press Tab for full configuration options on menu items.

menu separator # insert an empty line
menu separator # insert an empty line

label linux
  menu label ^Install CentOS 7   # 菜單文字
  kernel vmlinuz        # 內核文件路徑,註意相對路徑是從tftp的根路徑/tftpboot開始的,所以要改為"./CentOS7.2/vmlinuz"
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet  
                        # 內核啟動選項,其中包括initrd的路徑,同樣要改為"./CentOS7.2/initrd.img"
                        # stage2文件的搜索路徑,搜索的文件一般是".treeinfo",找不到該文件則找LiveOS/squashfs.img
                        # 一般pxe環境下此路徑直接指向系統安裝文件的路徑,具體做法見下文示例

label check
  menu label Test this ^media & install CentOS 7
  menu default          # menu default表示開機時游標一開始預設停留在此label上
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

menu separator # insert an empty line

# utilities submenu          # 子菜單項的設置方法
menu begin ^Troubleshooting
  menu title Troubleshooting

label vesa
  menu indent count 5
  menu label Install CentOS 7 in ^basic graphics mode
  text help
        Try this option out if you're having trouble installing
        CentOS 7.
  endtext
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 xdriver=vesa nomodeset quiet

label rescue
  menu indent count 5
  menu label ^Rescue a CentOS system
  text help
        If the system will not boot, this lets you access files
        and edit config files to try to get it booting again.
  endtext
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet

label memtest
  menu label Run a ^memory test
  text help
        If your system is having issues, a problem with your
        system's memory may be the cause. Use this utility to
        see if the memory is working correctly.
  endtext
  kernel memtest

menu separator # insert an empty line

label local
  menu label Boot from ^local drive
  localboot 0xffff

menu separator # insert an empty line
menu separator # insert an empty line

label returntomain
  menu label Return to ^main menu
  menu exit

menu end

所以,將其稍作修改,使其適合做pxe的菜單配置文件。

default vesamenu.c32  
timeout 600           

display boot.msg      

menu clear
menu background splash.png
menu title CentOS 7 menu
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13

menu color border * #00000000 #00000000 none
menu color sel 0 #ffffffff #00000000 none
menu color title 0 #ff7ba3d0 #00000000 none
menu color tabmsg 0 #ff3a6496 #00000000 none
menu color unsel 0 #84b8ffff #00000000 none
menu color hotsel 0 #84b8ffff #00000000 none
menu color hotkey 0 #ffffffff #00000000 none
menu color help 0 #ffffffff #00000000 none
menu color scrollbar 0 #ffffffff #ff355594 none
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none

label linux
  menu label ^Install CentOS 7.2 through pxe
  menu default
  kernel "./CentOS7.2/vmlinuz"
  append initrd="./CentOS7.2/initrd.img" inst.stage2=ftp://172.16.10.10 quiet net.ifnames=0 biosdevname=0

其中"net.ifnames=0 biosdevname=0"這兩個內核啟動參數是為了讓網卡名稱為ethN,而不是預設的eno16777728這樣的隨機名稱。

註意示例中stage2的路徑是放在ftp的路徑下(vsftpd根目錄/var/ftp/),所以先將鏡像文件中的系統安裝文件提取出來放到/var/ftp/下。當然,除了ftp,還支持nfs/http。但是,CentOS7.2在pxe+kickstart時對NFS的支持出現了bug,所以不建議使用nfs,當使用nfs出現各種疑難雜症時請換回ftp或http。

yum -y install vsftpd
cp -a /test/* /var/ftp/
systemctl start vsftpd

1.9 開機測試

新開一個虛擬機,進入bios界面設置從網卡啟動。將首先搜索DHCP伺服器,找到DHCP後搜索bootloader文件,啟動菜單設置文件等,然後進入啟動菜單等待選擇要啟動的項。如下:

 

因為只設置了一個啟動項,所以菜單中只有一項。啟動它,將載入一系列文件,直到出現安裝操作界面。

 

然後就可以直接操作安裝系統了。但這樣畢竟是手動操作,無法實現批量系統安裝,所以要提供一個自動應答文件,每一次的手動操作步驟都由自動應答文件中給定的項來應答,這樣就能實現自動安裝操作系統,也就能實現批量系統安裝。

1.10 通過pxe+kickstart實現無人值守批量安裝操作系統

所謂的無人值守,就是自動應答,當安裝過程中需要人機交互提供某些選項的答案時(如如何分區),自動應答文件可以根據對應項自動提供答案。但是,無人值守並不完全是無人值守,至少設置bios從網卡啟動是必須人為設置的,且安裝完系統後設置不從網卡啟動也是需要人為設置的。除此之外,其他的基本上都可以實現無人值守安裝。

要配置無人值守的系統安裝環境,需要提供安裝過程中需要的各種答案,這些答案在kickstart的配置文件中設置,一般正常安裝完Linux系統在root用戶的家目錄下有一個anaconda-ks.cfg,該文件的選項說明見kickstart文件詳細說明

以下是修改後該文件中的內容,將用來做kickstart應答文件。並設置由ftp服務來提供該文件,所以將kickstart文件保存到ftp的pub目錄中。

[root@xuexi ~]# cp -a ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@xuexi ~]# chmod +r /var/ftp/pub/ks.cfg     # 必須要保證ks.cfg是全局可讀的
[root@xuexi ~]# cat anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://172.16.10.10"
#url --url="http://192.168.100.53/cblr/links/CentOS7.2-x86_64"
#nfs --server=172.16.10.10 --dir=/install
# Use text mode install
text
# Firewall configuration
firewall --disabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --onboot=yes --bootproto=dhcp --device=eth0 --noipv6
network  --hostname=node1.xuexi.com
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $6$KIPkwGVYqtjHln80$quxmkE5MKKA2LyzLOAc/s3FWH/jX76sObq6hqwOsEBoeMc/wIrzGG4xm72lkXwLeOfRLS/sl5vdajY9j34D4J. 
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --append="quiet crashkernel=auto" --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="xfs" --size=250
part swap --fstype="swap" --size=2000
part / --asprimary --fstype="xfs" --grow --size=5000

# 如果是要LVM分區,則考慮以下分區
# part /boot --fstype ext4 --size=100
# part swap --fstype=swap --size=2048
# part pv26 --size=100 --grow
# volgroup VG00 --pesize=32768 pv26
# logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984
# logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow

%post
rm -f /etc/yum.repos.d/*
cat >>/etc/yum.repos.d/base.repo<<eof
[base]
name=sohu
baseurl=http://mirrors.sohu.com/centos/7/os/x86_64/
gpgcheck=0
enable=1
[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/
enable=1
gpgcheck=0
eof
sed -i "s/rhgb //" /boot/grub2/grub.cfg
sed -i "s/ONBOOT.*$/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "/UUID/d" /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "UseDNS no" >> /etc/ssh/sshd_config
sed -i "s/^SELINUX=.*$/SELINUX=disabled/" /etc/sysconfig/selinux
systemctl disable firewalld
%end

%packages
@base
@core
@development
@platform-devel
kexec-tools
lftp
tree
lrzsz

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

設置後,修改/tftpboot/pxelinux.cfg/default文件,在其中的內核啟動參數上加上一項kickstart文件的尋找路徑。

vim /tftpboot/pxelinux.cfg/default
label linux
  menu label ^Install CentOS 7.2 through pxe
  menu default
  kernel "./CentOS7.2/vmlinuz"
  append initrd="./CentOS7.2/initrd.img" inst.stage2=ftp://172.16.10.10 ks=ftp://172.16.10.10/pub/ks.cfg quiet net.ifnames=0 biosdevname=0


# 如果使用nfs提供安裝文件和kickstart文件,則ks參數必須使用nfs4協議,即使使用了nfs4,仍然無法實現無人值守,這是bug append initrd="./CentOS7.2/initrd.img" inst.stage2=nfs:172.16.10.10:/install ks=nfs4:172.16.10.10:/install/ks.cfg quiet net.ifnames=0 biosdevname=0

註意註釋行中使用nfs4而不是nfs,否則在安裝系統時將報錯,如下。不知道為什麼到CentOS7.2還需要明確指定nfs4,算是bug吧,在redhat的bug提交區已經有用戶提交相關問題。

 

但即使使用nfs4協議,雖然能夠讀取kickstart文件,但卻無法生效,即無法實現自動應答,仍然需要手動操作。

所以,建議使用ftp或者http,暫時不要使用NFS。但這個bug只針對CentOS 7,CentOS 6是沒有任何問題的。

回歸正題,現在已經設置好/tftpboot/pxelinux.cfg/default和/var/ftp/pub/ks.cfg,所以可以進行無人值守安裝Linux了。

 

回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7342919.html

註:若您覺得這篇文章還不錯請點擊下右下角的推薦,有了您的支持才能激發作者更大的寫作熱情,非常感謝!


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

-Advertisement-
Play Games
更多相關文章
  • 用c++簡單封裝了redis的基本操作(hiredis) 介面包括:①鏈接和斷開連接、②設置鍵值對(set)、③查詢鍵值對(get)、④刪除鍵值對(del)、⑤將所有鍵顯示出來 若任何一處發生錯誤,返回對應的錯誤狀態碼,同時可以調用getErrorMsg()查看錯誤信息 所有碼包括: M_REDIS ...
  • 最近在做MySQL主從資料庫同步測試,發現了一些問題,其中主從同步延遲問題是其中之一,下麵內容是從網上找到的一些講解,記錄下來以便自己學習; MySQL的主從同步是一個很成熟的架構,優點為:①在從伺服器可以執行查詢工作(即我們常說的讀功能),降低主伺服器壓力;②在從主伺服器進行備份,避免備份期間影響 ...
  • 上周拿到了我的第一個工作任務,統計一個按天分區每天都有百億條數據條的hive表中account欄位的非重用戶數(大概兩千萬)。後來又更改為按id欄位分別統計每個id的用戶數。 按照我資料庫老師的教導,我很輕易的跳出來了count(distinct account)這個句子。然後寫上了一行查詢,等待了 ...
  • 我們知道Oracle資料庫真正存放數據的是數據文件(Data File),oracle表空間(tablespace)實際上是一個邏輯的概念,在物理上是並不存在的,那麼把一組data files捻在一起就成為一個表空間。表空間屬性:一個資料庫可以包含多個表空間,一個表空間只能屬於一個資料庫一個表空間包 ...
  • 在sqlserver2008中“新建查詢”,執行批量添加語句的執行時間: 10000 條數據 用了3秒50000 條數據 21秒100000 條數據 42秒40000 條數據 16秒200000 條數據 1:37秒 ...
  • Hbase集群監控 Hbase JMX集群監控,監控每個regionServer的總請求數,readRequestsCount,writeRequestCount,region分裂,region合併,Store 數據來源:/jmx?qry=Hadoop:service=HBase,name=Reg... ...
  • 仔細觀察上面幾個圖,比較下 oracle資料庫中的+操作符竟然可以替換left join 和right join sql server暫時沒用到過 ...
  • 最近在寫一些介面,總結一下目前想到的一些需要註意的點,說的並不是sqlserver與其他資料庫語句的區別,只是想到了就寫下來了,老規矩之後想到了在添加進去 分頁 sqlserver sqlserver一般通過not in/row_number()(不支持limit)一共兩種,網上還有一種是要在201 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...