SUSE linux 15的网络管理

1 手工配置网络

wicked提供了一种新的网络配置框架。自SUSE 12起,SUSE使用了新的网络管理工具wicked,这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。

1.1 wicked网络配置

传统网络接口管理面临的挑战之一是网络管理的不同层被混杂成一个脚本,或者最多两个不同的脚本。这些脚本以一种没有明确定义的方式相互交互。这会导致不可预测的问题、模糊的约束和约定等。正在使用的地址配置协议是通过dhcpcd等守护进程实现的,这些守护进程与基础设施的其余部分交互相当差。引入了需要大量udev支持的流行的接口命名方案,以实现接口的持久识别。

wicked的思想是通过几种方式来分解问题。它们都不是完全新颖的,但是尝试将来自不同项目的想法结合在一起有望创造出更好的整体解决方案。

一种方法是使用客户端/服务器模型。这允许wicked为诸如地址配置之类的东西定义标准化的设施,这些设施与整体框架很好地集成在一起。例如,使用特定的地址配置,管理员可能会请求通过DHCP或IPv4 zeroconf配置接口。在这种情况下,地址配置服务只是从其服务器获取租约并将其传递给安装请求的地址和路由。

分解问题的另一种方法是强制分层方面。对于任何类型的网络接口,都可以定义一个dbus服务来配置网络接口的设备层——VLAN、网桥、绑定或半虚拟化设备。通用功能(例如地址配置)由位于这些设备特定服务之上的联合服务实现,而无需专门实现它们。wicked框架通过使用各种dbus服务来实现这两个方面,这些服务根据其类型附加到网络接口上。这是wicked中当前对象层次结构的粗略概述。

每个网络接口都通过/org/opensuse/Network/Interfaces的子对象表示。子对象的名称由其ifindex给出。例如,通常获取ifindex1的环回接口是/org/opensuse/Network/Interfaces/1,注册的第一个以太网接口是/org/opensuse/Network/Interfaces/2。

每个网络接口都有一个与之关联的“类”,用于选择它支持的dbus接口。默认情况下,每个网络接口都属于netif类,wickedd将自动附加所有与此类兼容的接口。在当前的实现中,这包括以下接口:

  • org.opensuse.Network.Interface:通用网络接口功能,例如链路的启用或停用,分配MTU等。
  • org.opensuse.Network.Addrconf.ipv4.dhcp
  • org.opensuse.Network.Addrconf.ipv6.dhcp
  • org.opensuse.Network.Addrconf.ipv4.auto:DHCP,IPv4等地址服务的配置。

除此之外,网络接口可能需要或提供特殊的配置机制。例如,对于以太网设备,您应该能够控制链路速度、校验和卸载等。为此,以太网设备有一个自己的类,称为netif-ethernet,它是netif的子类。因此,分配给以太网接口的dbus接口包括上面列出的所有服务,以及仅对属于netif-ethernet类的对象可用的org.opensuse.Network.Ethernet服务。

类似地,存在用于接口类型的类,如网桥、VLAN、绑定或InfiniBand。您如何与需要首先创建的VLAN(实际上是位于以太网设备顶部的虚拟网络接口)之类的接口进行交互?为此,wicked定义了factory接口,例如org.opensuse.Network.VLAN.Factory。这样的factory接口提供了一个单一的功能,可以让您创建所请求类型的接口。这些factory接口附加到/org/opensuse/Network/Interfaces列表节点。

1.1.1 wicked架构和特性

在这里插入图片描述

  • 用于解析SUSE风格的后端配置文件/etc/sysconfig/network
  • 以XML文件形式的后端网络接口配置
  • 启动和关闭“正常”网络接口,例如以太网或InfiniBand、VLAN、网桥、绑定、tun、tap、dummy、macvlan、macvtap、hsi、qeth、iucv和无线(目前仅限于一个wpa-psk/eap网络)设备。
  • 内建的DHCPv4和DHCPv6客户端
  • nanny守护进程(默认启用)有助于在设备可用(接口热插拔)时自动启动已配置的接口,并在检测到链路(运营商)时设置IP配置。
  • wicked被部署到集成到systemd的一组DBus服务中。因此通过systemctl可以管理wicked。
1.1.2 使用wicked

在openSUSE Leap上,wicked默认运行在桌面或服务器硬件上。NetworkManager默认运行在移动硬件上。如果要检查当前启用的内容以及它是否正在运行,查看network的状态:

SUSE15:~ # systemctl status network
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor pre>
    Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
             └─NetworkManager-ovs.conf
     Active: active (running) since Wed 2021-08-18 15:08:09 CST; 7h ago
       Docs: man:NetworkManager(8)
   Main PID: 1182 (NetworkManager)
      Tasks: 4 (limit: 2303)
     CGroup: /system.slice/NetworkManager.service
             ├─1182 /usr/sbin/NetworkManager --no-daemon
lines 1-10...skipping...
...

如果wicked开启了,可以看到wicked管理了网络接口

SUSE15:~ # systemctl status wicked
● wicked.service - wicked managed network interfaces
     Loaded: loaded (/usr/lib/systemd/system/wicked.service; enabled; vendor preset: disabled)
     Active: active (exited) since Wed 2021-08-18 15:22:31 CST; 7h ago
    Process: 2425 ExecStart=/usr/sbin/wicked --systemd ifup all (code=exited, status=0/SUCCESS)
   Main PID: 2425 (code=exited, status=0/SUCCESS)

Aug 18 15:22:16 SUSE15 systemd[1]: Starting wicked managed network interfaces...
Aug 18 15:22:31 SUSE15 wicked[2425]: lo              up
Aug 18 15:22:31 SUSE15 wicked[2425]: eth0            up
Aug 18 15:22:31 SUSE15 wicked[2425]: eth1            up
Aug 18 15:22:31 SUSE15 systemd[1]: Finished wicked managed network interfaces.

如果正在运行其他的服务(例如,NetworkManager)并且想切换到wicked,首先停止正在运行的服务,然后启用wicked:

SUSE15:~ # systemctl is-active network && systemctl stop network
SUSE15:~ # systemctl enable --force wicked

这两条命令开启了wicked服务,并创建了一个network.service软链接,链接到wicked.service。并且在下次重启时启动network。

开启服务器进程

SUSE15:~ # systemctl start wickedd

启动wickedd(主服务器)和相关的请求:

SUSE15:~ # /usr/lib/wicked/bin/wickedd-auto4 --systemd --foreground
SUSE15:~ # /usr/lib/wicked/bin/wickedd-dhcp4 --systemd --foreground
SUSE15:~ # /usr/lib/wicked/bin/wickedd-dhcp6 --systemd --foreground
SUSE15:~ # /usr/sbin/wickedd --systemd --foreground
SUSE15:~ # /usr/sbin/wickedd-nanny --systemd --foreground

然后启动网络

SUSE15:~ # systemctl start wicked

可以配置wicked的debug信息,在文件/etc/sysconfig/network/config中配置:

#debug所有信息,或者部分信息,下面两行二选一
WICKED_DEBUG="all"

WICKED_DEBUG="all,-dbus,-objectmodel,-xpath,-xml"
wicked命令的使用:
  1. 查看接口信息
SUSE15:~ # wicked show all
lo              up
      link:     #1, state up
      type:     loopback
      config:   compat:suse:/etc/sysconfig/network/ifcfg-lo
      leases:   ipv4 static granted
      leases:   ipv6 static granted
      addr:     ipv4 127.0.0.1/8 [static]
      addr:     ipv6 ::1/128 [static]

eth0            up
      link:     #2, state up, mtu 1500
      type:     ethernet, hwaddr 00:0c:29:76:10:2c
      config:   compat:suse:/etc/sysconfig/network/ifcfg-eth0
      leases:   ipv4 dhcp granted
      leases:   ipv6 dhcp requesting
      addr:     ipv4 192.168.100.39/24 [dhcp]
      route:    ipv4 default via 192.168.100.1 proto dhcp
      route:    ipv4 default via 192.168.100.1 metric 20101 proto dhcp

eth1            up
      link:     #3, state up, mtu 1500
      type:     ethernet, hwaddr 00:0c:29:76:10:36
      config:   compat:suse:/etc/sysconfig/network/ifcfg-eth1
      addr:     ipv4 192.168.19.145/24
      route:    ipv4 default via 192.168.19.145 metric 20100 proto static
SUSE15:~ # wicked show eth1
eth1            up
      link:     #3, state up, mtu 1500
      type:     ethernet, hwaddr 00:0c:29:76:10:36
      config:   compat:suse:/etc/sysconfig/network/ifcfg-eth1
      addr:     ipv4 192.168.19.145/24
      route:    ipv4 default via 192.168.19.145 metric 20100 proto static

详细信息和省略信息

SUSE15:~ # wicked show --verbose eth1
eth1            up
      link:     #3, state up, mtu 1500
      type:     ethernet, hwaddr 00:0c:29:76:10:36
      control:  none
      config:   compat:suse:/etc/sysconfig/network/ifcfg-eth1,
                uuid: b8e31353-9465-5ba9-a034-7bdca453eb58
      addr:     ipv6 fe80::9159:a10a:57b:ddf4/64 scope link flags noprefixroute
      addr:     ipv4 192.168.19.145/24 brd 192.168.19.145 scope universe label eth1
      route:    ipv4 0.0.0.0/0 via 192.168.19.145 dev eth1 type unicast table main scope universe protocol static priority 20100
      route:    ipv4 192.168.19.0/24 type unicast table main scope link protocol kernel pref-src 192.168.19.145 priority 100
      route:    ipv6 fe80::/64 type unicast table main scope universe protocol kernel priority 100
SUSE15:~ # wicked show --brief eth1
eth1            up
  1. 查看接口信息(xml输出格式)
SUSE15:~ # wicked show-xml eth0
<object path="/org/opensuse/Network/Interface/2">
  <interface>
    <name>eth0</name>
    <index>2</index>
    <status>ready, device-up, link-up, network-up, arp, broadcast, multicast</status>
    <link-type>ethernet</link-type>
    <mtu>1500</mtu>
    <txqlen>1000</txqlen>
    <client-state>
      <control>
        <persistent>false</persistent>
        <usercontrol>false</usercontrol>
      </control>
      <config>
        <origin>compat:suse:/etc/sysconfig/network/ifcfg-eth0</origin>
        <uuid>37958523-d28f-576c-a241-f6a03f615dbd</uuid>
        <owner-uid>4294967295</owner-uid>
      </config>
    </client-state>
    <addresses>
      <assigned-address>
        <local>fe80::ea3f:de00:414d:7a3/64</local>
        <scope>link</scope>
        <flags>640</flags>
      </assigned-address>
      <assigned-address>
        <local>192.168.100.39/24</local>
        <broadcast>192.168.100.255</broadcast>
        <scope>universe</scope>
        <flags>512</flags>
        <label>eth0</label>
        <cache-info>
          <preferred-lifetime>258665</preferred-lifetime>
          <valid-lifetime>258665</valid-lifetime>
        </cache-info>
        <owner>dhcp</owner>
      </assigned-address>
    </addresses>
    <routes>
      <assigned-route>
        <destination>0.0.0.0/0</destination>
        <nexthop>
          <gateway>192.168.100.1</gateway>
          <device>eth0</device>
        </nexthop>
        <kern>
          <table>main</table>
          <type>unicast</type>
          <scope>universe</scope>
          <protocol>dhcp</protocol>
        </kern>
        <metrics/>
      </assigned-route>
      <assigned-route>
        <destination>0.0.0.0/0</destination>
        <priority>20101</priority>
        <nexthop>
          <gateway>192.168.100.1</gateway>
          <device>eth0</device>
        </nexthop>
        <kern>
          <table>main</table>
          <type>unicast</type>
          <scope>universe</scope>
          <protocol>dhcp</protocol>
        </kern>
        <metrics/>
      </assigned-route>
      <assigned-route>
        <destination>192.168.100.0/24</destination>
        <pref-source>192.168.100.39</pref-source>
        <priority>101</priority>
        <kern>
          <table>main</table>
          <type>unicast</type>
          <scope>link</scope>
          <protocol>kernel</protocol>
        </kern>
        <metrics/>
      </assigned-route>
      <assigned-route>
        <destination>fe80::/64</destination>
        <priority>101</priority>
        <kern>
          <table>main</table>
          <type>unicast</type>
          <scope>universe</scope>
          <protocol>kernel</protocol>
        </kern>
        <metrics/>
      </assigned-route>
    </routes>
...
  1. 启动或关闭接口
SUSE15:~ # wicked ifdown eth0
eth0            device-ready
SUSE15:~ # wicked ifup eth0
eth0            up
1.1.3 Nanny

Nanny是一个事件和策略驱动的守护进程,负责异步或主动提供的场景,例如热插拔设备。因此,nanny守护进程有助于启动或重新启动延迟或暂时消失的设备。Nanny监控设备和链路的变化,并集成当前策略集定义的新设备。即使ifup由于指定的超时限制已经退出,Nanny也会继续设置。
nanny默认为开启状态,在/etc/wicked/common.xml文件中可以进行定义:

<config>
  ...
  <use-nanny>true</use-nanny>
</config>
1.1.4 处理增量更改

使用wicked,不需要实际取下接口来重新配置它(除非内核需要它)。例如,将另一个IP地址或路由添加到静态配置网络接口,将IP地址添加到接口定义中,并执行另一个“ifup”操作。服务器仅更新那些已更改的设置。这适用于链路级选项,例如设备MTU或MAC地址,以及网络级设置,例如地址、路由,甚至地址配置模式。

1.1.5 wicked扩展:地址配置

wicked被设计为可使用shell脚本进行扩展。这些扩展可以在config.xml文件中定义。目前支持下面几种扩展:

  1. 链路配置:这些脚本负责根据客户端提供的配置设置设备的链路层,并再次将其拆除。
  2. 地址配置:这些脚本负责管理设备的地址配置。通常地址配置和DHCP是通过wicked自身在管理,但可以通过扩展来实现。
  3. 防火墙扩展:这些脚本负责应用防火墙规则。

防火墙扩展的配置文件是/etc/server.xml

<dbus-service interface="org.opensuse.Network.Firewall">
  <action name="firewallUp" command="/etc/wicked/extensions/firewall up"/>
  <action name="firewallDown" command="/etc/wicked/extensions/firewall down"/>
  <!-- default environment for all calls to this extension script -->
  <putenv name="WICKED_OBJECT_PATH" value="$object-path"/>
  <putenv name="WICKED_INTERFACE_NAME" value="$property:name"/>
  <putenv name="WICKED_INTERFACE_INDEX" value="$property:index"/>
</dbus-service>

1.2 IP地址设置

在openSUSE Leap中,永久修改网络配置最直接方式还是直接修改/etc/sysconfig/network中相关接口的配置,然后再通过wicked命令来应用配置。网卡的参数和CentOS有较大的差异,可以参考模板文件ifcfg.template。这里列举最常用的选项:

启用协议
## Type:    list(static,dhcp,dhcp4,dhcp6,autoip,dhcp+autoip,6to4,none)
## Default: static
#
# With BOOTPROTO you can choose in which mode the interface will be set up:
# - static:      Set up static address(es)
# - dhcp:        Start a dhcp client (IPV4 and IPv6) on that interface.
# - dhcp4:       Start a dhcp client (IPv4 only) on that interface.
# - dhcp6:       Start a dhcp client (IPv6 only) on that interface.
# - autoip:      Automatic search for a free address and assign it statically.
# - dhcp+autoip: Try dhcp4 and use autoip if dhcp fails.
# - 6to4:        Set up ipv6 over ipv4 tunnel (see man ifcfg-tunnel)
# - none:        Do not set up the link or ip, a (bonding) master will do it.
# If you use dhcp or autoip you may additionally specify static address(es).
#
BOOTPROTO=
IP地址及掩码
## Type:    string
## Default: ""
#
# If using a static configuration you have to set an IP address and a netmask or prefix length. The following examples are equivalent:
#
# 1) IPADDR=192.168.1.1/24     # NETMASK and PREFIXLEN will be ignored
# 2) IPADDR=192.168.1.1
#    PREFIXLEN=24              # NETMASK will be ignored
# 3) IPADDR=192.168.1.1
#    NETMASK=255.255.255.0
#
# For multiple addresses use this variable multiple times and extend them with different suffixes. For example IPADDR_1=, IPADDR_2=. See section 'Multiple addresses' in manpage ifcfg).
#
IPADDR=


## Type:    string
## Default: ""
#
# Set the network mask for the ip address. This variable will be ignored if a prefixlength is set in variable PREFIXLEN in IPADDR.
# For multiple addresses use the same suffixes as with IPADDR.
#
# Note: Deprecated IPv4 only variable.
#
NETMASK=

## Type:    integer(0,64)
## Default: ""
#
# Set the prefixlength of the ip address. This variable will be ignored if a prefixlength is set in variable IPADDR.
# For multiple addresses use the same suffixes as with IPADDR.
#
PREFIXLEN=
接口名称
## Type:    string
## Default: ""
#
# This string is used as description of the device in YaST.
# This variable is not used in ifup and friends.
#
NAME=
接口启动模式
## Type: list(auto,hotplug,ifplugd,nfsroot,manual,off,onboot)
## Default: auto
#
# STARTMODE tells ifup when a interface should be set up. Possible values are:
# - auto:    start it as soon as the interface is available. Either when booting or when a device is plugged or initialized at runtime
# - hotplug: alias for auto, only difference is that configurations with that startmode are not considered to be mandatory if list of mandatory devices is derived automatically.
# - ifplugd: interface will be controlled by ifplugd daemon. (If you like to use multiple interfaces mutually exclusive you have to set also IFPLUGD_PRIORITY.)
# - nfsroot: Nearly like 'auto'. But interfaces with this startmode will never be shut down via 'rcnetwork stop'. 'ifdown <iface>' still works. Use this when you have a nfs root filesystem or you connect to an iSCSI / FCoE target.
# - manual:  start it only when ifup is called manually
# - off:     will not be started at all
# - onboot:  alias for auto, deprecated, only for backward compliance
STARTMODE=
网卡配置举例
SUSE15:/etc/sysconfig/network # vim ifcfg-eth1

NAME=''
BOOTPROTO='static'
STARTMODE='auto'
IPADDR=192.168.19.145
PREFIXLEN=24
ZONE=''

SUSE15:/etc/sysconfig/network # wicked ifreload eth1
eth1            device-ready
eth1            up

1.3 路由设置

从上面的例子中可以看到,在openSUSE中如果手工配置地址,是没有网关选项的,这需要我们手工设置路由,路由的配置同样在/etc/sysconfig/network文件夹中,一个叫ifroute-IFNAME的文件中,格式如下:

# Destination Gateway Netmask Interface Options
配置举例
SUSE15:~ # vim /etc/sysconfig/network/ifroute-eth1

192.168.20.0 192.168.19.1 255.255.255.0    eth1

SUSE15:~ # systemctl restart wicked
SUSE15:~ # wicked ifstatus eth1
eth1            up
      link:     #3, state up, mtu 1500
      type:     ethernet, hwaddr 00:0c:29:76:10:36
      config:   compat:suse:/etc/sysconfig/network/ifcfg-eth1
      leases:   ipv4 static granted
      addr:     ipv4 192.168.19.145/24 [static]
      route:    ipv4 192.168.20.0/24 via 192.168.19.1 proto boot

另外还有一种配置方法,就是直接指定默认网关:

default 192.168.1.1

1.4 DNS设置

DNS设置在/var/run/netconfig/resolv.conf中,格式如下:

nameserver 8.8.8.8

在这个文件中,可以进行DNS域名解析的配置。主要有如下四个参数:
nameserver #定义DNS服务器的IP地址(必选)
domain #定义本地域名(可选)
search #定义域名的搜索列表(可选)
sortlist #对返回的域名进行排序(可选)

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

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

相关文章

段,页,段页,三种内存(RAM)管理机制分析

段&#xff0c;页&#xff0c;段页 是为实现虚拟内存而产生的技术。直接使用物理内存弊端&#xff1a;地址空间不隔离&#xff0c;内存使用效率低。 段 段&#xff1a;就是按照二进制文件的格式&#xff0c;在内存给进程分段&#xff08;包括堆栈、数据段、代码段&#xff09;。…

Python 算法交易实验72 QTV200第一步: 获取原始数据并存入队列

说明 最近的数据流往前进了一步&#xff0c;我觉得基本可以开始同步的推进QTV200了。上次规划了整体的数据流&#xff0c;现在开始第一步。 内容 1 结构位置 这是上次的总体图&#xff1a; 以下是这次要实现的一小部分&#xff1a; 从结构上&#xff0c;这个是整体数据流的…

每日AI资讯-20240622

1. 可灵AI全新功能上线&#xff01; 可灵AI全新功能上线&#xff01;图生视频和视频续写来啦&#xff01; 图生视频&#xff1a;上传任意图片&#xff0c;生成5秒精彩视频。支持添加提示词控制图像运动视频续写&#xff1a;对生成视频一键续写4&#xff5e;5秒&#xff0c;支持…

LeetCode:经典题之1491、896 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

基于uni-app和图鸟UI开发上门服务小程序

一、技术栈选择 uni-app&#xff1a;我们选择了uni-app作为开发框架&#xff0c;因为它基于Vue.js&#xff0c;允许我们编写一次代码&#xff0c;发布到多个平台&#xff0c;包括iOS、Android、Web以及各种小程序。uni-app的丰富组件库、高效的状态管理以及便捷的预览调试功能&…

LightGBM算法详解

LightGBM算法详解 LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是由微软开发的高效梯度提升决策树&#xff08;GBDT&#xff09;实现。它以速度和效率著称&#xff0c;特别适用于大规模数据集和高维特征的场景。本文将详细介绍LightGBM的原理、特点、常用…

用于世界上最先进的医疗应用的精密电阻器

EAK的高性能电阻器使医疗产品设计人员能够继续改善全球患者的生活质量。我们的电阻器专为用于医疗诊断、治疗和预防的各种产品而设计。从小型植入式和非侵入性设备到大型诊断成像设备&#xff0c;医疗制造商之所以选择EAK 电阻器&#xff0c;是因为操作环境是高电压和磁场&…

AI-算力产业链之存力

在数字经济大潮下&#xff0c;数据已经成为新型的生产资料。 目前数据中心有三大力量&#xff1a;计算的力量——算力、存储的力量——存力、运输的力量——运力&#xff0c;即网络的力量。 算力产业链正在火热发展的同时&#xff0c;存力的需求也大幅度提升。2023年上半年&…

总结 CSS 选择器的常见用法

一&#xff0c;什么是css 在前端网页中&#xff0c;css就相当于化妆术&#xff0c;把一个很生硬的网页页面变得排版有序起来。 CSS可以对网页中的元素位置进行像素级精准控制&#xff0c;实现美化页面的效果&#xff0c;也能做到页面的样式和结构分离。 二&#xff0c;css的基…

MySQL中的ibd2sdi—InnoDB表空间SDI提取实用程序

ibd2sdi 是一个用于从 InnoDB 表空间文件中提取序列化字典信息&#xff08;Serialized Dictionary Information, SDI&#xff09;的实用程序。这个实用程序可以用于提取存储在持久化 InnoDB 表空间文件中的 SDI 数据。 可以对以下类型的表空间文件使用 ibd2sdi&#xff1a; 每…

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术&#xff0c;取三个单词的首字母&#xff0c;简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥&#xff0c;它可以输出固定长度的数据&#x…

C语言之详解预处理

前言&#xff1a; 预处理也叫预编译&#xff0c;是编译代码时的第一步&#xff0c;经过预处理后生成一个.i文件&#xff0c;如果不明白编译与链接作用的小伙伴可以先看看博主的上一篇博客—— &#xff0c;不然知识连贯性可能会显得很差哦。 正文目录&#xff1a; 预定义符号#…

discuz迪恩cul!教育课程培训网站模板

Discuz x3.2模板 迪恩cul!教育课程培训 GBK&#xff0c;程序包中内附详细的安装教程&#xff0c;下载后按照教程安装即可 discuz迪恩cul!教育课程培训网站模板

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

tar -xjf xxx.tar.bz2 1&#xff0c;预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount u…

星闪指向遥控,做家电交互的破壁人

“面壁者罗辑&#xff0c;我是你的破壁人。” 科幻小说《三体》中&#xff0c;当人类的基础科学被三体人封锁&#xff0c;变得停步不前&#xff0c;人类启动了自救的面壁计划&#xff0c;通过一次又一次破壁&#xff0c;找到战胜三体人的办法。 现实中&#xff0c;有一点已经成…

html--好看的手机充值单页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>线上充值-首页</title><meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0" name"viewport&…

【Vue-Vben-Admin】1、初次运行和介绍

【Vue-Vben-Admin】1、初次运行和介绍 Vben-Admin 初次运行和介绍 小小的介绍规定版本文件树安装依赖运行项目 小小的介绍 一款 Vue3 Typescript4 Vite2 后台管理项目&#xff0c;功能挺多的&#xff0c;还有组件库 规定版本 此个人文档规定版本为 2.8.0&#xff0c;可能版本…

AI大模型企业应用实战(16)-langchain核心组件

1 stuff 将文档列表插入到提示词中&#xff0c;适合文档较小或少量文档的应用。 2 refine 通过循环输入文档并迭代更新答案来构建响应&#xff0c;一次只传递给LLM一个文档&#xff0c;适合LLM上下文大小不能容纳的小文档。 参考&#xff1a; https://js.langchain.com/v0.1…

QT中利用qss来创建一个圆角矩形窗口,并利用Qt::WA_TranslucentBackground属性解决留白问题

1、效果 2、实现 QWidget#centralwidget {border-radius: 30px solid default;border-image: url(:/images/bk<

【Golang - 90天从新手到大师】Day06 - 数组

系列文章合集 Golang - 90天从新手到大师 数组是golang中最常用的一种数据结构,数组就是同一类型数据的有序集合 定义一个数组 格式: var name [n]type n为数组长度,n>0 且无法修改,type为数组的元素类型如: var a [2]int上面的例子定义了一个长度为2,元素类型为int的数组…