switch mellanox с sonic community
readme
Sonic community это софт, который можно установить на коммутатор и использовать на свой страх и риск. Установка ежедневной сборки master уже риск. Лучше собрать самому другую версию софта. Функционала, который есть в sonic enterpise от производителей оборудования, в community версии нет и скорее всего не будет. Читать документацию вендоров и искать такой же функционал, например, sonic-cli, SAG, VRRP бессмысленно. Фактически такой коммутатор с sonic community можно использовать как платформу, где работает FRR c BGP и где можно реализовать то, что можно сделать в линунксе стандартными пакетами программ для debian.
https://opencomputeproject.github.io/onie/developers/building.html
https://thedxt.ca/2023/08/onie-and-onyx-mlnx-os-install/
https://github.com/sonic-net/sonic-buildimage/
https://github.com/sonic-net/sonic-utilities/blob/master/doc/Command-Reference.md
https://qiita.com/masru0714
https://github.com/iMasaruOki/sonic-custom-build
https://techblog.rtbhouse.com/2021/11/25/L2-EVPN-to-L3-concept-part2/
https://github.com/sonic-net/SONiC/blob/master/doc/mgmt/sonic_stretch_management_vrf_design.md
https://netbergtw.com/top-support/netberg-sonic/virtual-routing-and-forwarding-vrf/
serial
speed: 115200, databit: 8m, stop: 1, parity:none, flowcontrol: none.
ONIE
Нужен для случаев, когда неудачное обновление ОС на коммутаторе удалило загрузчик.
Собирается по инструкции командами в докере.
Каких-то пакетов может не хватать, их понадобится устрановить дополнительно и обязательно указать переменную PATH
.
В итоге получается файл onie/build/images/onie-recovery-x86_64-mlnx_x86-r0.iso
. Его нужно записать на флешку.
BIOS
Чтобы загрузиться с флешки с ONIE, понадобиться при загрузке нажать Ctrl+B, ввести пароль bios admin
и выбрать загрузку с флешки в меню Save \ Boot Override.
Далее выбрать ONIE: Embed ONIE и дождаться установки.
build sonic
Ниже замечания к инструкции, т.к нужна ubuntu 22.x, не 20. Как-то более-менее еще ветка 202305. В ОС создан пользователь sonic
.
Установить докер
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh
sudo gpasswd -a ${USER} docker
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
sudo reboot
Установить venv, j2cli
sudo apt install python3-pip python3-venv
python3 -m venv base
source base/bin/activate
pip3 install wheel j2cli
Отредактировать rules/config
чтобы выключить разное.
diff --git a/rules/config b/rules/config
index 8ac564dea..3fd9b2e16 100644
--- a/rules/config
+++ b/rules/config
@@ -55,7 +55,7 @@ DEFAULT_PASSWORD = YourPaSsWoRd
# ENABLE_DHCP_GRAPH_SERVICE = y
# ENABLE_ZTP - installs Zero Touch Provisioning support.
-# ENABLE_ZTP = y
+ENABLE_ZTP = n
# INCLUDE_PDE - Enable platform development enviroment
# INCLUDE_PDE = y
@@ -92,8 +92,8 @@ ENABLE_ORGANIZATION_EXTENSIONS = y
# as includes symbols information. Given that 'profiling' option is a superset
# of 'debugging' one, user should only enable either one option or the other --
# if both options are enabled, the 'profiling' one will prevail.
-#SONIC_DEBUGGING_ON = y
-#SONIC_PROFILING_ON = y
+SONIC_DEBUGGING_ON = n
+SONIC_PROFILING_ON = n
# DEFAULT_KERNEL_PROCURE_METHOD - default method for obtaining kernel
# build: build kernel from source
@@ -129,13 +129,13 @@ DEFAULT_VS_PREPARE_MEM = yes
INCLUDE_SYSTEM_EVENTD = y
# INCLUDE_SYSTEM_TELEMETRY - build docker-sonic-telemetry for system telemetry support
-INCLUDE_SYSTEM_TELEMETRY = y
+INCLUDE_SYSTEM_TELEMETRY = n
# INCLUDE_ICCPD - build docker-iccpd for mclag support
INCLUDE_ICCPD = n
# INCLUDE_SFLOW - build docker-sflow for sFlow support
-INCLUDE_SFLOW = y
+INCLUDE_SFLOW = n
# ENABLE_SFLOW_DROPMON - support of drop packets monitoring feature for sFlow deamon
ENABLE_SFLOW_DROPMON = n
@@ -151,16 +151,16 @@ ENABLE_HOST_SERVICE_ON_START = y
INCLUDE_RESTAPI = n
# INCLUDE_NAT - build docker-nat for nat support
-INCLUDE_NAT = y
+INCLUDE_NAT = n
# INCLUDE_DHCP_RELAY - build and install dhcp-relay package
-INCLUDE_DHCP_RELAY = y
+INCLUDE_DHCP_RELAY = n
# INCLUDE_P4RT - build docker-p4rt for P4RT support
INCLUDE_P4RT = n
# ENABLE_AUTO_TECH_SUPPORT - Enable the configuration for event-driven techsupport & coredump mgmt feature
-ENABLE_AUTO_TECH_SUPPORT = y
+ENABLE_AUTO_TECH_SUPPORT = n
# ENABLE_TRANSLIB_WRITE - Enable translib write/config operations via the gNMI interface.
# Uncomment to enable:
@@ -171,7 +171,7 @@ ENABLE_AUTO_TECH_SUPPORT = y
ENABLE_NATIVE_WRITE = y
# INCLUDE_MACSEC - build docker-macsec for macsec support
-INCLUDE_MACSEC = y
+INCLUDE_MACSEC = n
# INCLUDE_GBSYNCD - build docker-gbsyncd-* for gearbox support
INCLUDE_GBSYNCD ?= y
Когда в составе ОС нужны дополнительные пакеты, то отредактировать build_debian.sh
diff --git a/build_debian.sh b/build_debian.sh
index f8de45c7f..ecaad2a51 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -352,6 +352,7 @@ fi
## Note: don't install python-apt by pip, older than Debian repo one
## Note: fdisk and gpg are needed by fwutil
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install \
+ keepalived \
file \
ifmetric \
iproute2 \
@@ -557,6 +558,7 @@ sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install 'docke
# Install scapy
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install 'scapy==2.4.4'
+sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install 'j2cli'
Сборка.
sudo mkdir /var/cache/sonic
sudo chown sonic /var/cache/sonic
git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git -b 202305
cd sonic-buildimage/
sudo modprobe overlay
make init
make configure PLATFORM=mellanox
make SONIC_BUILD_JOBS=4 all
sudo docker rmi -f $(docker images -a -q)
install sonic
Когда ОС не установлена автоматически запускается ONIE-install. Включить менедж в eth0, прописать адрес, установить с веб-сервера собранный софт.
ONIE:/ # onie-discovery-stop
ONIE:/ # ifconfig eth0 10.0.0.100 netmask 255.255.255.0
ONIE:/ # ip route add default via 10.0.0.1
ONIE:/ # onie-nos-install http://10.1.2.3/sonic-mellanox-202305.bin
default password
Логин admin
пароль YourPaSsWoRd
. Смена пароля без проверки на символы sudo passwd admin
feature
Ниже есть iccpd, т.к. это попытка сборки с mclag
$ sudo show feature status
Feature State AutoRestart
-------------- --------------- --------------
bgp enabled enabled
database always_enabled always_enabled
dhcp_relay disabled enabled
eventd enabled enabled
iccpd enabled enabled
lldp enabled enabled
mgmt-framework enabled enabled
mux always_disabled enabled
pmon enabled enabled
radv enabled enabled
snmp enabled enabled
swss enabled enabled
syncd enabled enabled
teamd enabled enabled
config save
sudo config save -y
hostname
Требуется перезагрузка
sudo config hostname sonic01
management
sudo config vrf add mgmt
sudo config save -y
sudo config interface ip add Ethernet0 172.18.0.10/24
sudo config route add prefix vrf mgmt 0.0.0.0/0 nexthop 172.18.0.1
show mgmt-vrf
show mgmt-vrf routes
sudo ip vrf exec mgmt ping 172.18.0.1
sudo config save -y
date ntp
Дата руками
sudo config clock timezone Europe/Moscow
sudo config clock date 2024-02-09 14:00:00
sudo config ntp add 10.0.0.10
sudo config ntp add 10.0.1.10
sudo ip vrf exec mgmt ntpq -p
monitorig
https://github.com/tynany/frr_exporter
https://github.com/mehdy/keepalived-exporter
https://github.com/vinted/sonic-exporter
Скопировать frr_exporter в докер
root@sonic:/etc/sonic/frr# docker cp /tmp/frr_exporter 70113ad4f31b:/usr/local/bin/
root@sonic:/etc/sonic/frr# docker exec -it 70113ad4f31b bash
root@sonic:/# /usr/local/bin/frr_exporter
При наличии sonic-exporter мониторить по snmp смысла мало
sudo config feature state snmp disable
vrrp
По умолчанию никаких команд нет, пакета нет. Только в проекте использование keepalived. Поэтому, по совету masru0714 ставил пакет, настраивал примерно так. С мультикастовым mac-адресом ничего не получилось.
$ cat /etc/keepalived/keepalived.conf
global_defs
{
router_id sonic01
}
vrrp_instance i25 {
state BACKUP
interface Vlan25
priority 99
advert_int 1
virtual_router_id 25
virtual_ipaddress { 10.10.25.254 }
unicast_src_ip 10.10.25.252
unicast_peer { 10.10.25.251 }
}
mclag
Настроить можно, но если указывать интерфейс mclag как в примере ниже, то на одном из коммутаторов периодически будет сломан LAG.
sudo config mclag add 1 192.168.10.2 192.168.10.1 PortChannel00
Вывод, где LAG сломан.
admin@sonic01:~$ mclagdctl -i 1 dump state
The MCLAG's keepalive is: OK
MCLAG info sync is: completed
Domain id: 1
Local Ip: 192.168.10.2
Peer Ip: 192.168.10.1
Peer Link Interface: PortChannel01
Keepalive time: 1
sesssion Timeout : 15
Peer Link Mac: 1c:34:da:f2:17:00
Role: Standby
MCLAG Interface:
Loglevel: NOTICE
admin@sonic01:~$ show interfaces portchannel
Flags: A - active, I - inactive, Up - up, Dw - Down, N/A - not available,
S - selected, D - deselected, * - not synced
No. Team Dev Protocol Ports
----- ------------- ---------- -------
01 PortChannel01 N/A
admin@sonic01:~$
admin@sonic02:~$ mclagdctl -i 1 dump state
The MCLAG's keepalive is: OK
MCLAG info sync is: completed
Domain id: 1
Local Ip: 192.168.10.1
Peer Ip: 192.168.10.2
Peer Link Interface: PortChannel01
Keepalive time: 1
sesssion Timeout : 15
Peer Link Mac: 04:3f:72:2f:34:80
Role: Active
MCLAG Interface:
Loglevel: NOTICE
admin@sonic02:~$ show interfaces portchannel
Flags: A - active, I - inactive, Up - up, Dw - Down, N/A - not available,
S - selected, D - deselected, * - not synced
No. Team Dev Protocol Ports
----- ------------- ----------- -----------------------------
01 PortChannel01 LACP(A)(Up) Ethernet196(S) Ethernet192(S)
admin@sonic02:~$
ipv6
Отключение.
sudo config ipv6 disable link-local