pxe高效网络批量装机

文章目录

  • 一, PXE远程安装服务
    • (一)三种系统装机的方式
    • (二)linux装机
      • 1. 加载 Boot Loader
      • 2. 加载启动安装菜单
      • 3. 加载内核和 initrd
      • 4. 加载根文件系统
      • 5. 运行 Anaconda 安装向导
    • (三)实现过程
    • (四)名词概念
      • 1. TFTP(Trivial File Transfer Protocol,简单文件传输协议)
        • 1.1 TFTP 的特点
      • 2. pxelinux.0
        • 2.1 pxelinux.0` 的作用
      • 3. xinetd
        • 3.1 xinetd` 的主要功能和特点:
      • 4. vmlinuz
        • 4.1 vmlinuz` 的作用
        • 4.2 获取和生成 `vmlinuz`
      • 5. pxelinux.cfg
      • 6. pxelinux.cfg
    • (五) 搭建步骤
      • 1. 配置网络
      • 2. 安装所需的软件包
      • 3.配置 DHCP 服务器
      • 4. 配置 TFTP 服务器
      • 5. 配置 PXE 引导文件
      • 6. 配置 FTP 服务器
      • 7. 验证服务状态
      • 8. 验证 PXE 引导配置
  • 二,Kickstart
    • (一)Kickstart 的工作原理
    • (二)Kickstart 文件结构
    • (三) Kickstart 文件关键部分
    • (四)使用Kickstart 进行安装
      • 优点
    • 运行流程图

一, PXE远程安装服务

  • 网络装机有时需要安装多台设备,可能是上百台,人工一台一台安装需要大量时间效率低下,所以有了需求批量安装,高效快速。
  • PXE 是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。
  • PXE不是一种安装方式,而是一种引导的方式,PXE 安装是需要安装的计算机中有一个能够帮,pxe运行的网卡,要有pxe的客户端,使计算机可以通过网络启动pxe。
  • pxe协议分为客户端和服务端,PXE客户端在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE 客户端调入内存执行,由 PXE客户端将放置在远端的文件通过网络下载到本地运行。
  • 运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。DHCP 服务器用来给 PXE客户端(要安装系统的主机)分配一个 IP ,由于是给 PXE客户端分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。
  • pxe优点是规模化:同时装配多台服务器自动化:安装系统、配置各种服务远程实现:不需要光盘、U盘等安装介质

(一)三种系统装机的方式

  1. 硬盘
  2. 光驱
  3. pxe

(二)linux装机

1. 加载 Boot Loader

  1. 作用:Boot Loader 它是一个小程序,它在操作系统内核运行之前运行。它的主要目的是初始化硬件设备,建立内存空间,并为操作系统内核准备好运行环境。
  2. 常见 Boot Loader:常见的 Boot Loader 包括 GRUB(GRand Unified Bootloader)和 LILO(Linux Loader)。

2. 加载启动安装菜单

  1. 展示启动选项:启动安装后,Boot Loader 会加载一个启动菜单。这通常包括多个选项:安装 Linux、检查安装介质的完整情况、从本地硬盘,光盘启动等。
  2. 用户选择:用户可以选择“安装 Linux”选项来继续安装过程。

3. 加载内核和 initrd

  1. 内核(Kernel):内核是操作系统的核心组件,负责管理系统资源和硬件设备的沟通。选择安装选项后,Boot Loader 会加载内核( vmlinuz 文件)。
  2. initrd(Initial RAM Disk):是一个包含最小化操作系统环境的临时根文件系统。它包含必要的驱动程序和工具,方便内核访问根文件系统,启动操作系统。

4. 加载根文件系统

  1. 根文件系统:在加载内核和 initrd 后,系统会加载实际的根文件。根文件包括了操作系统运行所需的文件和目录结构。
  2. 文件系统挂载:内核使用 initrd 中的工具和驱动程序挂载根文件系统(从硬盘或网络位置)。

5. 运行 Anaconda 安装向导

  1. 启动安装程序:加载根文件系统后,启动 Anaconda 安装向导。Anaconda 是 Red Hat 系统(如 RHEL、CentOS 和 Fedora)使用的安装程序。
  2. 安装向导步骤
    1. 选择语言:用户选择系统使用的语言
    2. 设置键盘布局:选择输入键盘的模式
    3. 配置网络:设置网络连接
    4. 选择安装源:选择操作系统安装文件的位置
    5. 分区硬盘:选择自动分区或手动分区,配置根分区、swap,home,boot等分区
    6. 选择软件包:选择要安装的软件包或软件包组
    7. 设置用户:设置 root 密码和创建普通用户
    8. 开始安装:确认所有设置并开始安装操作系统

(三)实现过程

  1. **网卡需要查找相关的dhcp服务器(获取地址时间) **
  2. **找到后dhcp服务器提供ip地址,和引导程序(boot loader)的地址 还提供给客户机TFTPserver地址 (dhcp不提供tftp服务) **
  3. **网卡使用tftp客户端吧引导程序加载到内存中来 **
  4. **bios执行引导程序 **
  5. **引导程序去TFTP去查找配置文件 **
  6. **根据配置文件去引导安装系统 **

系统安装过程

image.png

(四)名词概念

1. TFTP(Trivial File Transfer Protocol,简单文件传输协议)

**TFTP(Trivial File Transfer Protocol,简单文件传输协议)**是一种简化版的文件传输协议,常用于局域网中的文件传输。它的设计目的是提供一个非常轻量级的文件传输协议,适用于网络启动和小文件的传输。TFTP和FTP一个主要的区别就是它没有交互式,且不进行身份验证。

1.1 TFTP 的特点
  1. 简单性:TFTP 是一种简单的协议,易于实现和使用。它使用 UDP 作为传输层协议,不需要复杂的握手过程。
  2. 无身份验证:TFTP 没有内置的身份验证机制,因此适用于需要快速、轻量级文件传输的环境。
  3. 端口:TFTP 使用 UDP 端口 69 进行通信。
  4. 主要用途:TFTP 常用于网络设备的配置文件传输、系统引导文件传输(如 PXE 启动)以及嵌入式系统的固件升级。

2. pxelinux.0

**pxelinux.0** 是一个重要的组件,常用于通过网络启动计算机(PXE,Preboot eXecution Environment)。PXE 是一种通过网络加载和启动操作系统的技术,广泛应用于无盘工作站、嵌入式系统和大规模操作系统部署。pxelinux.0 是 SYSLINUX 项目的一部分,专门用于 PXE 启动。

2.1 pxelinux.0` 的作用

pxelinux.0 是一个 PXE 启动加载程序,它从网络服务器(通常是 TFTP 服务器)下载并执行,用于引导计算机进入操作系统安装或启动环境。其主要功能包括:

  1. 引导加载:从 TFTP 服务器下载内核和初始 RAM 文件系统(initrd),然后引导这些文件。
  2. 配置管理:通过读取配置文件(通常是 pxelinux.cfg 目录中的文件),决定引导过程中的选项和参数。
  3. 菜单系统:提供引导菜单,允许用户选择不同的启动选项或操作系统。

3. xinetd

**xinetd**,即扩展互联网守护进程(Extended Internet Daemon),是一个开放源码的超级服务器,用于管理基于互联网的服务。它是 inetd 的增强版本,提供了更强大的功能和灵活性,用于控制和管理各种网络服务。除了 TFTP,xinetd 还可以管理其他多种服务,如 Telnet、FTP 等

3.1 xinetd` 的主要功能和特点:
  1. 增强的安全性:提供基于时间、IP 地址、访问频率等多种条件的访问控制。
  2. 资源限制:可以设置每个服务的资源使用限制,如并发连接数、每个源 IP 的连接数等。
  3. 日志记录:提供详细的日志记录功能,可以记录每个服务的访问情况。
  4. 服务控制:可以轻松启用或禁用服务,而无需修改每个服务的配置文件。

4. vmlinuz

**vmlinuz** 是 Linux 内核的压缩可执行文件的名称。以下是关于 vmlinuz 的详细介绍,包括其作用、使用方式和相关的配置示例。

4.1 vmlinuz` 的作用
  1. Linux 内核vmlinuz 是 Linux 内核的可执行文件,它是系统启动时加载并运行的核心组件。vmlinuz 文件通常位于 /boot 目录下。
  2. 压缩:文件名中的 z 表示内核是经过压缩的,这样可以减少文件大小,加快加载速度。
  3. 启动过程:在系统启动过程中,bootloader(如 GRUB)会加载 vmlinuz 文件,并将其解压到内存中,开始执行内核代码。
4.2 获取和生成 vmlinuz

在大多数 Linux 发行版中,内核文件 vmlinuz 由包管理系统提供。例如,在 Debian 系统上,通过 apt-get 安装或更新内核包会自动更新 /boot/vmlinuz 文件。

5. pxelinux.cfg

pxelinux.cfg 是用于配置 PXE (Preboot eXecution Environment) 启动过程的配置文件目录。pxelinux.cfg 目录通常位于 TFTP 服务器的根目录下,包含一个或多个配置文件,这些配置文件定义了 PXE 客户端如何引导操作系统。

6. pxelinux.cfg

pxelinux.cfg 是用于配置 PXE (Preboot eXecution Environment) 启动过程的配置文件目录。pxelinux.cfg 目录通常位于 TFTP 服务器的根目录下,包含一个或多个配置文件,这些配置文件定义了 PXE 客户端如何引导操作系统。

(五) 搭建步骤

搭建 PXE 远程安装服务器需要的安装包
vsftpd 放置安装镜像,通过ftp访问镜像安装
dhcp.x86_64 12:4.2.5-7pd-3.0.2-27.el7.x86_64.r9.el7.centos 给客户机分配ip
syslinux-4.05-15.el7.x86_64.rpm 提供pxe的引导程序
tftp-server.x86_64 0:5.2-22.el7.rpm 提供引导镜像文件的下载
xinetd.x86_64 2:2.3.15-14.el7 托管tftp
system-config-kickstart.noarch 0:2.9.7-1.el7.rpm 无人值守安装

6a3407257b950e4e0df4315cada1a521_pxe-boot.png

1. 配置网络

检查并配置网络接口, ens35

cd /etc/sysconfig/network-scripts/
ls
cp ifcfg-ens33 ifcfg-ens35
vim ifcfg-ens35

ifcfg-ens35 的内容如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens35

DEVICE=ens35
ONBOOT=yes
IPADDR=192.168.101.100
NETMASK=255.255.255.0
#GATEWAY=192.168.72.2
#DNS1=8.8.8.8
#DNS2=61.147.37.1
~                   

重启网络服务并确保其已启用:

systemctl restart network
systemctl enable network

通过以下命令验证网络状态:

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:dd:1e:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.72.20/24 brd 192.168.72.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::bcc8:ab8:f0b3:cdb1/64 scope link 
       valid_lft forever preferred_lft forever
3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:dd:1e:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.100/24 brd 192.168.101.255 scope global ens35
       valid_lft forever preferred_lft forever
    inet6 fe80::1542:e054:7995:6dd6/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:4c:17:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:4c:17:ee brd ff:ff:ff:ff:ff:ff

2. 安装所需的软件包

yum install -y vsftpd dhcp tftp-server xinetd syslinux

3.配置 DHCP 服务器

编辑 /etc/dhcp/dhcpd.conf 文件:

cp -rfp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf

添加以下配置:

subnet 192.168.101.0 netmask 255.255.255.0 {
  range 192.168.101.40 192.168.101.80;地址池
  option domain-name-servers 8.8.8.8;网关
  option routers 192.168.101.100;
  next-server 192.168.101.100;指定tftp服务器的地址
  filename "pxelinux.0";指定pxe引导程序的文件名
}
ddns-update-style none;禁用动态 DNS 更新

启动并启用 DHCP 服务:

systemctl start dhcpd
systemctl enable dhcpd

4. 配置 TFTP 服务器

编辑 /etc/xinetd.d/tftp 文件:

vim /etc/xinetd.d/tftp

文件内容如下:

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes    表示客户机可以多台一起连接,yes表示客户机只能一台一台连接,表示是否开启多线程一起工作,否则需要等待
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot指定TFTP根目录(引导文件的存储路径) -c允许上传
        disable                 = no
        per_source              = 11     通过限制一个主机的最大连接数,从而防止某个主机独占某个服务,这里每个IP地址的连接数是11个
        cps                     = 100 2  表示服务器最多启动100个连接,如果达到这个数目将停止启动新服务2秒。在此期间不接受任何请求

        flags                   = IPv4
}

启动并启用 xinetd 服务:

systemctl start xinetd
systemctl enable xinetd

5. 配置 PXE 引导文件

创建必要的目录并复制 PXE 引导文件:

mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mount /dev/sr0 /mnt
cp /mnt/images/pxeboot/vmlinuz /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/

创建并编辑 /var/lib/tftpboot/pxelinux.cfg/default 文件:

vim /var/lib/tftpboot/pxelinux.cfg/default

添加以下内容:

plaintext
default auto
prompt 1

label auto
    kernel vmlinuz
    append initrd=initrd.img method=ftp://192.168.101.100/centos7

label linux text
    kernel vmlinuz
    append text initrd=initrd.img method=ftp://192.168.101.100/centos7

label linux rescue
    kernel vmlinuz
    append rescue initrd=initrd.img method=ftp://192.168.101.100/centos7

启动并启用 TFTP 服务:

systemctl start tftp
systemctl enable tftp

6. 配置 FTP 服务器

创建 FTP 服务器目录并复制安装源:

mkdir -p /var/ftp/centos7
cp -r /mnt/* /var/ftp/centos7/

启动并启用 vsftpd 服务:

systemctl start vsftpd
systemctl enable vsftpd

7. 验证服务状态

确保所有服务都在运行:

systemctl status dhcpd
systemctl status xinetd
systemctl status tftp
systemctl status vsftpd

8. 验证 PXE 引导配置

确保所有引导文件存在:

ls /var/lib/tftpboot/
initrd.img  pxelinux.0  pxelinux.cfg  vmlinuz
ls /var/ftp/centos7/
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL

二,Kickstart

Kickstart 是一个自动化安装工具,通常用于大规模部署 Red Hat Enterprise Linux (RHEL)、CentOS 和其他基于 Red Hat 的 Linux 发行版。它允许系统管理员通过预先配置的应答文件(kickstart 文件)自动化操作系统的安装过程,减少了手动干预的需求。

(一)Kickstart 的工作原理

Kickstart 文件是一个纯文本文件,包含了一系列的安装指令。安装过程中,系统读取这个文件并按照其中的指令执行安装。这些指令可以包括分区配置、包选择、网络配置、用户账户设置等。

(二)Kickstart 文件结构

Kickstart 文件ks.cfg

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$NdNHpAa4$SAgJwaPmH01iXzpt76AHe1
# Use network installation
url --url="ftp://192.168.101.100/centos7"
# System language
lang zh_CN
# Firewall configuration
firewall --disabled
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled

# Network information
network  --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Seoul --isUtc
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=500
part swap --fstype="xfs" --size=4096
part /home --fstype="xfs" --size=4096
part / --fstype="xfs" --grow --size=1

%post --interpreter=/bin/bash
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
echo "[local]
name=local
baseurl=ftp://192.168.100.100/centos7
enabled=1
gpgcheck=0" > /etc/yum.repos.d/local.repo
%end

Kickstart 文件由多个部分组成,每个部分定义不同的安装配置。以下是 Kickstart 文件及其各部分说明:

# 安装来源
url --url="http://mirror.centos.org/centos/7/os/x86_64/"

# 安装语言
lang en_US.UTF-8

# 键盘布局
keyboard us

# 网络配置
network --bootproto=dhcp --device=eth0

# 根密码
rootpw --iscrypted $1$random$1234567890abcdef12345

# 分区配置
clearpart --all --initlabel
part /boot --fstype=xfs --size=500
part pv.01 --grow --size=1
volgroup vg0 pv.01
logvol / --vgname=vg0 --size=10240 --name=root --fstype=xfs
logvol swap --vgname=vg0 --size=2048 --name=swap

# 引导加载程序
bootloader --location=mbr

# 包选择
%packages
@core
@base
wget
vim
%end

# 后脚本
%post
echo "安装完成" > /root/install_log.txt
%end

(三) Kickstart 文件关键部分

  1. 安装来源
url --url="http://mirror.centos.org/centos/7/os/x86_64/"

指定安装介质的位置,可以是 HTTP、FTP 或 NFS。

  1. 语言和键盘布局
lang en_US.UTF-8
keyboard us

指定安装过程中使用的语言和键盘布局。

  1. 网络配置
network --bootproto=dhcp --device=eth0

配置网络接口,可以使用 DHCP 或静态 IP。

  1. 根密码
rootpw --iscrypted $1$random$1234567890abcdef12345

设置根用户密码,可以是明文或加密的密码。

  1. 分区配置
clearpart --all --initlabel
part /boot --fstype=xfs --size=500
part pv.01 --grow --size=1
volgroup vg0 pv.01
logvol / --vgname=vg0 --size=10240 --name=root --fstype=xfs
logvol swap --vgname=vg0 --size=2048 --name=swap

配置磁盘分区,包括标准分区和逻辑卷。

  1. 引导加载程序
bootloader --location=mbr

指定引导加载程序的位置。

  1. 包选择
%packages
@core
@base
wget
vim
%end

指定要安装的软件包组和单个软件包。

  1. 后脚本
plaintext
复制代码
%post
echo "安装完成" > /root/install_log.txt
%end

在安装完成后执行的脚本,可以用于自定义配置或执行其他操作。

(四)使用Kickstart 进行安装

  1. 准备 Kickstart 文件: 创建一个 Kickstart 文件,并将其放在一个可访问的位置(如 HTTP 服务器)。
  2. 引导安装程序: 使用引导介质(如 USB、PXE 引导)启动安装程序,并指定 Kickstart 文件的位置。例如,在启动引导菜单中添加以下参数:
inst.ks=http://example.com/ks.cfg
  1. 开始自动化安装: 安装程序会读取指定的 Kickstart 文件,并根据其中的指令执行安装过程。

优点

  • 节省时间:大规模部署时,自动化安装显著减少了手动配置的时间。
  • 一致性:确保每台机器的安装配置一致,减少人为错误。
  • 易于管理:通过集中管理 Kickstart 文件,可以方便地更新和维护安装配置。

通过这些步骤和概念,你可以使用 Kickstart 实现 Linux 系统的自动化安装,从而提高部署效率和一致性。如果有更多具体问题或需要进一步的帮助,请随时询问。

运行流程图

60fe271e76a8ca12de844bed546f3a4d_1311546-20190815111353864-268410972.png

安装好的字符界面
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

games103作业2(未完)

PBD方法 首先是每个质点的力的分析&#xff0c;不考虑碰撞和弹簧弹力的情况下&#xff0c;每个质点受重力的影响&#xff0c;所以需要对每个质点进行速度和位置的重力影响更新。 float t 0.0333f; float damping 0.99f; int[] E; float[] L; Vector3[] V; Vector3 gra…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…

【机器翻译】基于术语词典干预的机器翻译挑战赛

文章目录 一、赛题链接二、安装库1.spacy2.torch_text 三、数据预处理赛题数据类定义 TranslationDataset批量处理函数 collate_fn 四、编码器和解码器Encoder 类Decoder 类Seq2Seq 类注意事项 五、主函数1. load_terminology_dictionary(dict_file)2. train(model, iterator, …

windows USB 设备驱动开发- USB Type-C支持(二)

Microsoft 提供 USB Type-C 连接器系统软件接口 (UCSI) 符合规范的 ACPI 传输驱动程序。 如果你的设计包含带有 ACPI 传输的嵌入式控制器&#xff0c;请在系统的 BIOS/EC 中实现 UCSI&#xff0c;并加载随机 UCSI 驱动程序&#xff08;UcmUcsiCx.sys 和 UcmUcsiAcpiClient.sys&…

【Linux】:重定向和缓冲区

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来关于重定向和缓冲区的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

海事无人机解决方案

海事巡察 海事巡察现状 巡查效率低下&#xff0c;存在视野盲区&#xff0c;耗时长&#xff0c;人力成本高。 海事的职能 统一管理水上交通安全和防治船舶污染。 管理通航秩序、通航环境。负责水域的划定和监督管理&#xff0c;维护水 上交通秩序&#xff1b;核定船舶靠泊安…

Spring Boot集成groovy快速入门Demo

1.什么是groovy&#xff1f; Groovy 是构建在 JVM 上的一个轻量级却强大的动态语言&#xff0c;它结合了 Python、Ruby 和 Smalltalk 的许多强大的特性。 Groovy 就是用 Java 写的&#xff0c;Groovy 语法与 Java 语法类似&#xff0c;Groovy 代码能够与 Java 代码很好地结合&…

QQ频道导航退出

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

C#中的MD5摘要算法与哈希算法

文章目录 一、哈希算法基础二、MD5 算法原理三、MD5摘要算法四、哈希算法五、C#实现示例MD5算法示例哈希算法示例字符串MD5值对比 六、总结 一、哈希算法基础 哈希算法是一种单向密码体制&#xff0c;它将任意长度的数据转换成固定长度的字符串。这种转换是不可逆的&#xff0…

Java二十三种设计模式-工厂方法模式(2/23)

工厂方法模式&#xff1a;设计模式中的瑞士军刀 引言 在软件开发中&#xff0c;工厂方法模式是一种常用的创建型设计模式&#xff0c;它用于处理对象的创建&#xff0c;将对象的实例化推迟到子类中进行。这种模式不仅简化了对象的创建过程&#xff0c;还提高了代码的可维护性…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候&#xff0c;会遇到页面空白&#xff0c;这个问题是怎么导致呢&#xff1f;我们可以打开F12开发者模式看下报错信息&#xff0c;这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做&#xff0c;最近发现gradle其实很多项目的支持比较差&#xff0c;所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库&#xff0c;只有springdoc 是能够按照文档就能部署出来的。 官网&#xff1a; OpenAPI 3 Library for spring-bo…

Mac电脑下运行java命令行出现:错误: 找不到或无法加载主类

mac 电脑 问题复现 随手写了一个main方法&#xff0c;想用命令行操作 进入 BlockDemo.java 所在目录&#xff1a; wnwangnandeMBP wn % cd /Users/wn/IdeaProjects/test/JianZhiOffer/src/main/java/com/io/wn wnwangnandeMBP wn % ls -l total 16 -rw-r--r-- 1 wangnan …

Qt文件下载工具

在Qt中实现文件下载功能&#xff0c;通常可以通过多种方式来完成&#xff0c;包括使用 QNetworkAccessManager 和 QNetworkReply 类&#xff0c;或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法&#xff1a; 方法1&#xff1a;使用 QNetworkAccessManager 和…

芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

tessy 集成测试:小白入门指导手册

目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…

Linux 下使用Docker安装redis

redis&#xff1a; 是一个高性能的&#xff0c;键值对的&#xff0c;将数据存储到内存中的非关系型数据库&#xff08;nosql数据库 not only sql&#xff09; 高性能&#xff1a;数据存在内存中&#xff0c;直接访问内存 键值对&#xff1a;新闻id&#xff08;键&#xff09…

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

51单片机6(P0P1P2P3结构框架图)

一、GPIO结构框架图与工作原理 1、接下来我们介绍一下这个GPIO结构框图和工作原理&#xff0c;我们使用51单片机的GPIO分为了P0&#xff0c;P1&#xff0c;P2&#xff0c;P3这四组端口&#xff0c;下面我们就分别来介绍这四组端口它的一个内部结构&#xff0c;只有了解了内部的…

windows环境下基于3DSlicer 源代码编译搭建工程开发环境详细操作过程和中间关键错误解决方法说明

说明: 该文档适用于  首次/重新 搭建3D-Slicer工程环境  Clean up(非增量) 编译生成 1. 3D-slicer 软件介绍 (1)3D Slicer为处理MRI\CT等图像数据软件,可以实行基于MRI图像数据的目标分割、标记测量、坐标变换及三维重建等功能,其源于3D slicer 4.13.0-2022-01-19开…