ONIE支持多种查找网络操作系统(NOS)镜像的方法,从简单到相对复杂。
简单的方法适合在少量交换机上安装NOS,作为概念验证或演示。这些方法虽然易于设置,但是对复杂网络可能需要的配置支持有限。
相对复杂的方法适用复杂网络和大规模交换机部署的场景。这些方法提供了广泛的灵选项,缺点是你需要了解和配置这些选项。
本节中的示例引用了一个假想的,基于PowerPC的交换机,成为MACHINE,由假定的制造商商VENDOR提供。
1. 使用USB驱动进行安装
要通过USB进行安装,只需要使用文件名称onie-installer将安装程序镜像复制到USB驱动设备的根目录上即可。
假设NOS安装程序镜像名称为ACME_XYZ1234_PowerPC_Installer.bin。假设USB驱动设备显示在Linux下的/dev/sdd1上(可能与您的操作系统有所不同)。
将安装程序文件复制到USB驱动设备的根目录下,如下所示:
linux:~$ sudo mkdir /mnt/usb
linux:~$ sudo mount /dev/sdd1 /mnt/usb
linux:~$ sudo cp ACME_XYZ1234_PowerPC_Installer.bin /mnt/usb/onie-installer
linux:~$ sudo umount /mnt/usb
现在可以从计算机中取出USB设备并将其插入启用ONIE的设备的前(后)面板上的USB插槽。打开设备电源,ONIE将发现USB设备根目录上的onie-installer并执行。
2. 使用网络进行安装
对于所有网络安装场景,ONIE可以通过HTTP从网络上获取NOS安装镜像。本文档假设Web服务器的主机名和IPv4地址如下:
hostname: image-server
IP addr : 203.0.113.10
在继续之前,必须先进行如下操作:
- 安装并配置HTTP服务器
- 拷贝NOS安装镜像到HTTP服务器
2.1. 安装并配置HTTP服务器ss
下载并安装HTTP服务器。Apache httpd 及NGINX HTTP server。
本文中的示例假定Apache httpd安装在具有默认配置选项的Linux计算机上。Web服务器文档的根目录为/var/www。
2.2. 拷贝NOS安装镜像到HTTP服务器s
从NOS安装镜像供应商处购买安装镜像之后,将安装镜像复制到Web服务器的根目录中。在Linux Apache环境下,文档根目录是/var/www,您可能需要root权限才能执行操作。
假定NOS安装镜像的名称为ACME_XYZ1234_PowerPC_Installer.bin,将该文件复制到Web服务器文档根目录之后,/var/www显示的内容如下:
image-server:~$ sudo cp ACME_XYZ1234_PowerPC_Installer.bin /var/www
image-server:~$ ls -l /var/www
-rw-r--r-- 1 root root 17755 Jun 27 16:18 ACME_XYZ1234_PowerPC_Installer.bin
2.3. 测试从HTTP服务器下载NOS安装镜像
在下一步操作之前,最好仔细检查Web服务器的配置和NOS安装镜像的位置。可以尝试从另一台机器上下载NOS安装镜像。您可以使用Web浏览器或者CLI命令如wget或者curl来下载。
需要仔细检查的URL是:
http://203.0.113.10/ACME_XYZ1234_PowerPC_Installer.bin
http://image-server/ACME_XYZ1234_PowerPC_Installer.bin
3.直连场景
最简单的拓扑结构是Web服务器直接连接到交换机上的以太网管理端口,如下图所示。这种简单的方式适用于少量的交换机场景。在生产环境中,需要连接到交换机并执行快速的一次性安装时,就是这种情况。
在这种场景中,没有任何额外的配置,ONIE将发现链路本地Web服务器的IP地址 (IPv6或IPv4)。有关ONIE如何发现链路本地邻居信息,请参阅HTTP IPv4及IPv6邻居章节。
当邻居发现之后,ONIE按照“默认文件名搜索顺序”中的描述,为一系列默认安装镜像文件名发出HTTP请求。
接下来,ONIE应用默认的文件名约定,使用下列的HTTP请求来查找安装镜像:
http://203.0.113.10/onie-installer-powerpc-VENDOR_MACHINE-r0
http://203.0.113.10/onie-installer-powerpc-VENDOR_MACHINE
http://203.0.113.10/onie-installer-VENDOR_MACHINE
http://203.0.113.10/onie-installer-powerpc
http://203.0.113.10/onie-installer
有关用于特定硬件平台的确切文件名称,请联系您的NOS供应商或您的硬件供应商。
配置Web服务器的简单方法是将NOS供应商的镜像名称符号链接(或重命名)为默认的ONIE安装镜像名之一。
image-server:~$ cd /var/www
image-server:/var/www$ sudo ln -s ACME_XYZ1234_PowerPC_Installer.bin ./onie-installer
image-server:/var/www$ ls -l
lrwxrwxrwx 1 root root 104 Jul 22 14:01 onie-installer -> ACME_XYZ1234_PowerPC_Installer.bin
使用符号链接之后,Web服务器会回复完整的安装镜像,以响应onie-installer的请求。现在,ONIE可以下载并执行安装镜像了。ss
4.二层连接场景
在此拓扑中,目标交换机和Web服务器在同一个L2网络中。例如,他们可能都被插入到同一个非托管的交换机中。如下图所示。这种情况就像前面介绍的直连情况一样。ONIE发现Web服务器的IP地址。并尝试从服务器下载一系列默认文件名的文件。
5.基本DHCP场景1 (指定安装镜像URL)
在这种场景中,我们跳过复杂的情况,使用DHCP服务器提供有关安装镜像位置信息。DHCP服务器,目标交换机和Web服务器都位于同一个L2网络上。如下图所示。DHCP服务器负责提供如下信息:
- 从IP地址池中为目标交换机分配IP地址
- Web服务器中安装镜像的URL
下面是ISC DHCP服务器的dhcpd.conf文件示例。更多有关ONIE如何使用DHCP选项的信息,请参阅DHCP请求和响应章节描述。
subnet 203.0.113.0 netmask 255.255.255.0 {
range 203.0.113.20 203.0.113.200;
option default-url = "http://203.0.113.10/customer-abc-onie-installer";
}
使用此配置,ONIE从由range参数定义的地址池中提取IP地址。接下来尝试下载由default-url参数指定的镜像。
使用这个技术,你可以:
- 分配任何对您的网络有意义的IP地址
- 根据需要命名您的安装镜像,包括子目录名称
在此示例中,Web服务器和目标交换机必须位于同一个L2网络上。
6.基本DHCP场景2 (域名服务器)
这种情况类似于场景1 (指定安装镜像URL),但是添加了域名服务器的DNS。通过引入域名服务我,您可以使用Web服务器的逻辑名称,而不使用硬编码的IP地址。
要添加对DNS的支持,请在dhcpd.conf文件中指定域名服务我的DHCP选项:
subnet 203.0.113.0 netmask 255.255.255.0 {
range 203.0.113.20 203.0.113.200;
option domain-name-servers 203.0.113.2;
option default-url = "http://image-server/customer-abc-onie-installer";
}
域名服务器是203.0.113.2,ONIE使用此服务器来解析主机镜像服务器的IP地址。
7.L3网络场景
这种场景中不再使用DHCP场景2,而是添加路由信息的DHCP配置。目标交换机通过网关遍历三层网络到达Web服务器。网络拓扑如下图所示。通过此设置,Web服务器和目标交换机可以驻留在不同的子网上。目标交换机需要通过路由器发送数据包到达Web服务器。
要为目标交换机指定路由,请在DHCP配置中将路由器选项设置为路由器的IP地址:
subnet 203.0.113.0 netmask 255.255.255.0 {
range 203.0.113.20 203.0.113.200;
option domain-name-servers 203.0.113.2;
option routers 203.0.113.3;
option default-url = "http://image-server/customer-abc-onie-installer";
}
当请求安装镜像时,目标交换机将数据发送到203.0.113.3,然后路由器将数据发送到下一跳,最终数据包到达Web服务器,并用安装镜像数据回复。
对于这种场景,DHCP服务器必须与目标交换机位于同一个L2网络,Web服务器可以自由地驻留在路由器可访问的任何子网中。
您可以使用BOOTP代理在不同的L2网络中找到DHCP服务器。配置BOOTP代理的相关操作在本文档中不做描述。ss
8.高级DHCP (匹配供应商类标识符)
当ONIE发出DHCP请求时,它将DHCP供应商 (选项60)设置为特定的字符串。有关如何设置DHCP vendor class,请参阅DHCP相关设置文档。本文中使用PowerPC机器,字符串将是:
onie_vendor:powerpc-VENDOR_MACHINE-r0
对用于特定平台的DHCP Vendor Class Identifier,请联系您的NOS供应商或您的硬件供应商。
ISC DHCP服务器配置文件语法包含基本字符串匹配功能,可以用于识别ONIE DHCP请求。通过解析thedefault-url选项字符串,将返回一个合适的镜像URL。
下面的DHCP配置用于展示在PowerPC交换机中使用不同厂商X和Y的安装镜像:
class "onie-vendor-X-class" {
match if substring(option vendor-class-identifier, 0, 27) = "onie_vendor:powerpc-VendorX";
option default-url = "http://image-server/VendorX-onie-installer";
}
class "onie-vendor-Y-class" {
match if substring(option vendor-class-identifier, 0, 27) = "onie_vendor:powerpc-VendorY";
option default-url = "http://image-server/VendorY-onie-installer";
}
在这种场景中,DHCP服务器根据vendor-class-identifier选项传回不同的URL。
调试这样的结构时,可能会发现有些DHCP日志记录有用。例如,放在class stanza外的log()指令可以帮您理解正在发生的事情:
log(error, concat("vendor-class: ", substring(option vendor-class-identifier, 0, 11)));
log(error, concat("platform : ", substring(option vendor-class-identifier, 12, 999)));
第一个log()显示了vendor-class-identifier的前11个字符,它应该是字符串onie_vendor。第二个log()显示剩余的字符。
一切正常之后,您可以删除日志。
9.高级DHCP 2 (VIVSO)
作为供应商类标识符字符串匹配的替代方案,ONIE也发送Vendor-Identifying Vendor-Specific Information Option (VIVSO – DHCP配置选项125)。
VIVSO方法是识别目标交换机更精确的方法,但是这种方法在DHCP服务器上也需要更多的配置。
有关ONIE如何使用VIVSO的更多信息,请参阅Vendor-Identifying Vendor-Specific Information (VIVSO)。
VIVSO选项是双向的,ONIE DHCP客户端发送设置了identifyin字段,DHCP服务器响应URL字段。
VIVSO只不过是在标准的DHCP选项中封装特定的供应商选项。
为了ISC DHCP服务器解析选项125,我们必须定义要使用的字段和数据类型。以下是ISC DHCP服务器配置的片段,定义了ONIE使用的字段:
# Create an option namespace called ONIE
option space onie code width 1 length width 1;
# Define the code names and data types within the ONIE namespace
option onie.installer_url code 1 = text;
option onie.updater_url code 2 = text;
option onie.machine code 3 = text;
option onie.arch code 4 = text;
option onie.machine_rev code 5 = text;
# Package the ONIE namespace into option 125
option space vivso code width 4 length width 1;
option vivso.onie code 42623 = encapsulate onie;
option vivso.iana code 0 = string;
option op125 code 125 = encapsulate vivso;
I told you this method required more configuration...
其中数字42623是一个32-bit IANA企业码,用于识别其名称空间。由于VIVSO允许多套的供应商选项,每套都必须由IANA作为标识指定。
这些空间配置必须放在全局的dhcpd.conf文件中,而不是任何类定义之外。
现在,在定义选项空间的情况下,我们可以在收到VIVSO选项时使用这些定义。以下是使用选项空间定义来检查目标交换机体系结构和机器类型的代码片段:
class "onie-vendor-classes" {
# Limit the matching to a request we know originated from ONIE
match if substring(option vendor-class-identifier, 0, 11) = "onie_vendor";
# Required to use VIVSO
option vivso.iana 01:01:01;
# generic CPU architecture matching
if option onie.arch = "powerpc" {
option onie.installer_url = "http://image-server/generic-powerpc-onie-installer";
}
# matching on CPU architecture and machine type
if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
option onie.installer_url = "http://image-server/powerpc-xyz1234-onie-installer";
}
# The contents of an option can also be used to create the response text
if exists onie.arch and exists onie.machine and exists onie.machine_rev {
option onie.installer_url = concat("http://image-server/image-installer-",
option onie.arch, "-", option onie.machine,
"-r", option onie.machine_rev);
}
# When operating in ONIE 'update' mode ONIE will check the
# onie.updater_url response option
if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
option onie.updater_url = "http://image-server/onie-updater-VENDOR_XYZ1234-powerpc.bin";
}
}
我们来看看这个配置,并讨论其含义:
class "onie-vendor-classes" {
# Limit the matching to a request we know originated from ONIE
match if substring(option vendor-class-identifier, 0, 11) = "onie_vendor";
此处的想法是将后续的匹配限制为我们所知道的来自支持ONIE的机器请求。
接下来是IANA选项:
# Required to use VIVSO
option vivso.iana 01:01:01;
这与上面定义的选项空间一起解决了ISC DHCP服务器中的一个已知问题。如果没有这个解决方法,服务器将不会发送一个125选项响应。
接下来是通用CPU架构匹配语句:
# generic CPU architecture matching
if option onie.arch = "powerpc" {
option onie.installer_url = "http://image-server/generic-powerpc-onie-installer";
}
这是比较选项字段和字符串的一个例子。如果字符串匹配,则响应中的installer_url被设置为指定的字符串。
接着,在相应字段中使用请求字段的值:
# The contents of an option can also be used to create the response text
if exists onie.arch and exists onie.machine and exists onie.machine_rev {
option onie.installer_url = concat("http://image-server/image-installer-",
option onie.arch, "-", option onie.machine,
"-r", option onie.machine_rev);
}
使用函数concat您可以拼凑几个字符串来组成响应字段。使用option指令从请求中提取字符串并使用结构创建响应。
例如,在上面的代码片段中,我们假设onie.arch = "powerpc",onie.machine = "XYZ1234"且 and onie.machine_rev = "2"。在这种情况下,onie.installer_url将被设置为:
onie.installer_url = "http://image-server/image-installer-powerpc-XYZ1234-r2"
最终,让我们看看updater_url字段:
# When operating in ONIE 'update' mode ONIE will check the
# onie.updater_url response option
if option onie.arch = "powerpc" and option onie.machine = "XYZ1234" {
option onie.updater_url = "http://image-server/onie-updater-VENDOR_XYZ1234-powerpc.bin";
}
ONIE可以在自我更新模式下运行,查找ONIE更新URL。更新URL用于下载ONIE更新二进制文件。
当ONIE以更新模式运行时,我们所讨论的有关安装镜像URL的所有内容都适用于ONIE更新镜像。
有关更多ONIE更新模式的信息,请参考ONIE自更新模式。
10.HTTP头部和脚本
当ONIE发出HTTP请求镜像时,会发送一些ONIE特定的HTTP头部。这些头部可以在高级部署中使用,以支持配置。这些头部包括但不限于:
ONIE-SERIAL-NUMBER:
ONIE-ETH-ADDR:
ONIE-VENDOR-ID:
ONIE-MACHINE:
ONIE-MACHINE-REV:
ONIE-ARCH:
ONIE-OPERATION:
有关HTTP头部的更多信息,请参阅HTTP请求和HTTP头部描述。
例如,由DHCP服务器发出的镜像URL可以是HTTP服务器上的CGI脚本。CGI脚本可以使用头部如ONIE-SERIAL-NUMBER 和ONIE-ETH-ADDR,将部署与库存控制数据库联系起来。
11.调试安装过程
加入您在基于ONIE的安装过程中出现问题,请参考以下几条建议。
11.1.确认Web服务器配置
您是否可以使用Web浏览器从Web服务器下载镜像?请参阅“测试从HTTP服务器下载NOS安装镜像”。
11.2.试试使用直连模式
尝试按照直连场景所描述方式,将交换机直连到Web服务器。
11.3.检查DHCP服务器日志
尝试添加一些日志到您的DHCP服务器配置中,如高级DHCP (匹配供应商类标识)中所描述的那样。
11.4.使用TCPDUMP
如果可能,使用tcpdump来检测DHCP服务器上的网络流量。如果您可以获取对DHCP服务器的root访问权限,运行以下命令来检查网络流量:
dhcp-server:~ # tcpdump -v -e -i ether host
将
将
11.5.简化DHCP配置
尝试将您的DHCP配置降到最简程度。
11.6.添加远程日志服务器
ONIE可以远程登录到系统日志服务器。如果DHCP响应包含日志服务器选项,则ONIE将远程登录到该服务器。以下是指定该远程系统日志服务器的ISC DHCP服务器语法:
option log-servers 203.0.113.2;
11.7.登录目标交换机查询日志
如果你可以确定ONIE从DHCP服务器获取了IP地址,则可以使用ssh或telnet远程登录到目标交换机:
linux:$ ssh [email protected]
The authenticity of host '203.0.113.22 (203.0.113.22)' can't be established.
RSA key fingerprint is 15:05:64:8a:c6:f3:5f:65:41:a6:10:f6:9d:43:9c:49.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.22' (RSA) to the list of known hosts.
ONIE:~ #
ONIE不需要ssh或telnet的密码。登录之后,您可以检查ONIE的日志文件/var/log/onie.log :
ONIE:~ # cat /var/log/onie.log
11.8.连接到串口控制台
如果一切都失败了,您可以连接到目标交换机的串口控制台。ONIE使用115200波特率。