[LINUX] Ich möchte ip vrf mit SONiC verwenden

Dies ist eine Fortsetzung von Verwenden von VRF mit SONiC.

ip vrf kann nicht verwendet werden

SONiC ist ein Betriebssystem für White-Box-Switches, das auf Debian / GNU Linux basiert. Es basiert derzeit auf Debian 9.0 (Stretch). Die Kernel-Version ist 4.9.189-3 + deb9u2.

Da SONiC ein Betriebssystem für White-Box-Switches ist, bietet es Einstellungen, Referenzen und Betriebsüberprüfungen für netzwerkbezogene Funktionen. Sie können den Befehl ip vrf jedoch nicht verwenden, um die Funktionalität von VRF (Virtual Routing and Forwarding) zu überprüfen.

Warum kann ich den Befehl ip vrf nicht verwenden?

Es wird sein. Das iproute2-Paket selbst wird von Stretch-Backports mit einer Version bereitgestellt, die "ip vrf" unterstützt. Durch die Installation wird das Problem behoben. Wenn der Kernel jedoch noch alt ist, können Sie "ip vrf exec" nicht ausführen.

Teil 1 Tauschen Sie einfach den Kernel aus (Fehler)

Ich habe beschlossen, es sofort zu versuchen, da es gelöst zu sein scheint, wenn ich den Kernel aktualisieren kann.

Installieren eines neuen Kernels

sudo apt-get -t stretch-backports install linux-image-4.19.0-0.bpo.6-amd64

Wenn Sie neu starten, ist es sicher ... 4.9.0, das ursprünglich enthalten war, wird gestartet. Das?

Geben Sie mit GRUB einen neuen Kernel an

Hmm. Ist es GRUB? Als ich also erneut neu startete und auf dem GRUB-Menübildschirm auf "e" drückte, blieb es sicherlich 4.9.0. Obwohl es sich um eine temporäre Bearbeitung handelt, schreiben Sie sie auf 4.19 um und starten Sie sie.

Funktionsprüfung

Es hat begonnen. Der Verwaltungsport ist aktiv. Melden Sie sich mit ssh an und überprüfen Sie die Version. Yoshi! Lassen Sie uns "ip vrf exec" verschieben. Überprüfen Sie die IP-Adresse mit "show ip interfaces". Sie können kein Ethernet * sehen. Sehen wir uns das Protokoll an. show logging | less Dann

INFO pmon#supervisord: 2020-02-21 07:59:43.276 INFO exited: syseepromd (exit status 1; not expected)

Ahhhh. Apropos, SONiC verfügt über ein Kernelmodul zur Steuerung des Switch-ASIC und des SFP. Daher habe ich völlig vergessen, dass es nur funktioniert, wenn die Version übereinstimmt. Es ist nicht im Standard-Linux-Kernel enthalten, daher können Sie nicht anders, als mit dem Build zu beginnen. Leider ist dies das Ende des Prozesses.

Teil 2 SONiC mit neuem Kernel erstellen (Fehler)

Mit SONiC können Sie aus dem Quellcode ein Image erstellen, das den Linux-Kernel enthält. Zu diesem Zeitpunkt ist es möglich, ein Binärbild von außen zu erhalten, um die Erstellungszeit zu verkürzen. In der Regel wird der Linux-Kernel selbst jedoch auch aus dem Quellcode erstellt. Da dieser Teil für 4.9 vorgesehen ist, dachte ich, dass es funktionieren würde, wenn ich ihn durch eine neue Version wie 4.19 ersetzen würde, also habe ich es versucht.

Src / sonic-linux-kernel / Makefile geändert (unzureichend)

sonic-linux-kernel ist ein Submodul. Die Kernelquelle wird darunter erweitert, und es gibt auch "Makefile", daher ist es gut, dies zu ändern.

Makefile.diff


diff --git a/Makefile b/Makefile
index 4d3a28a..6bf651f 100644
--- a/Makefile
+++ b/Makefile
@@ -2,11 +2,10 @@
 SHELL = /bin/bash
 .SHELLFLAGS += -e
 
-KERNEL_ABI_MINOR_VERSION = 2
-KVERSION_SHORT ?= 4.9.0-11-$(KERNEL_ABI_MINOR_VERSION)
+KVERSION_SHORT ?= 4.19.0-0.bpo.6
 KVERSION ?= $(KVERSION_SHORT)-amd64
-KERNEL_VERSION ?= 4.9.189
-KERNEL_SUBVERSION ?= 3+deb9u2
+KERNEL_VERSION ?= 4.19.67
+KERNEL_SUBVERSION ?= 2+deb10u2~bpo9+1
 kernel_procure_method ?= build
 
 LINUX_HEADER_COMMON = linux-headers-$(KVERSION_SHORT)-common_$(KERNEL_VERSION)-$(KERNEL_SUBVERSION)_all.deb
@@ -20,11 +19,11 @@ ifneq ($(kernel_procure_method), build)
 # Downloading kernel
diff --git a/Makefile b/Makefile
index 4d3a28a..6bf651f 100644
--- a/Makefile
+++ b/Makefile
@@ -2,11 +2,10 @@
 SHELL = /bin/bash
 .SHELLFLAGS += -e
 
-KERNEL_ABI_MINOR_VERSION = 2
-KVERSION_SHORT ?= 4.9.0-11-$(KERNEL_ABI_MINOR_VERSION)
+KVERSION_SHORT ?= 4.19.0-0.bpo.6
 KVERSION ?= $(KVERSION_SHORT)-amd64
-KERNEL_VERSION ?= 4.9.189
-KERNEL_SUBVERSION ?= 3+deb9u2
+KERNEL_VERSION ?= 4.19.67
+KERNEL_SUBVERSION ?= 2+deb10u2~bpo9+1
 kernel_procure_method ?= build
 
 LINUX_HEADER_COMMON = linux-headers-$(KVERSION_SHORT)-common_$(KERNEL_VERSION)-$(KERNEL_SUBVERSION)_all.deb
@@ -20,11 +19,11 @@ ifneq ($(kernel_procure_method), build)
 # Downloading kernel

Ich denke das ist in Ordnung. Ich werde versuchen zu machen.

"SONIC_DEBUGGING_ON"              : ""
"SONIC_PROFILING_ON"              : ""
"KERNEL_PROCURE_METHOD"           : "build"
"BUILD_TIMESTAMP"                 : "20200221.131016"
"BLDENV"                          : "stretch"
"VS_PREPARE_MEM"                  : "yes"
"ENABLE_SFLOW"                    : "y"

[ 01 ] [ target/debs/stretch/linux-headers-4.9.0-11-2-common_4.9.189-3+deb9u2_al

Das?

Ändern Sie das verbleibende 4.9 bezeichnete Teil

Wenn Sie genau hinschauen, finden Sie eine Beschreibung, wie Sie das Paket am Ende von "build_debian.sh" erhalten, und die dort angegebene URL lautet "4.9". Bereiten Sie zusätzliche Patches vor.

build_debian.sh.diff


diff --git a/build_debian.sh b/build_debian.sh
index 37db2bde..bb58d7ab 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -37,7 +37,7 @@ if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then
 else
     DOCKER_VERSION=5:18.09.8~3-0~debian-stretch
 fi
-LINUX_KERNEL_VERSION=4.9.0-11-2
+LINUX_KERNEL_VERSION=4.19.0-0.bpo.6
 
 ## Working directory to prepare the file system
 FILESYSTEM_ROOT=./fsroot
@@ -139,9 +139,7 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/initramfs-tools_*.deb || \
 sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/linux-image-${LINUX_KERNEL_VERSION}-*_${CONFIGURED_ARCH}.deb || \
     sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
 sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install acl
-if [[ $CONFIGURED_ARCH == amd64 ]]; then
-    sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install dmidecode hdparm
-fi
+[[ $CONFIGURED_ARCH == amd64 ]] && sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install dmidecode
 
 ## Update initramfs for booting with squashfs+overlay
 cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null

Für viele andere ist s / 4 \\ .9 \\ .0-11-2 / 4.19.0-0.bpo.6 / normalerweise in Ordnung, also ersetzen Sie es sofort durch perl -pi.

Der Rest ist rules / linux-kernel.mk.

linux-kernel.mk.diff


diff --git a/rules/linux-kernel.mk b/rules/linux-kernel.mk
index e6742bdf..ec36b382 100644
--- a/rules/linux-kernel.mk
+++ b/rules/linux-kernel.mk
@@ -1,9 +1,9 @@
 # linux kernel package
 
-KVERSION_SHORT = 4.9.0-11-2
+KVERSION_SHORT = 4.19.0-0.bpo.6
 KVERSION = $(KVERSION_SHORT)-$(CONFIGURED_ARCH)
-KERNEL_VERSION = 4.9.189
-KERNEL_SUBVERSION = 3+deb9u2
+KERNEL_VERSION = 4.19.67
+KERNEL_SUBVERSION = 2+deb10u2~bpo9+1
 ifeq ($(CONFIGURED_ARCH), armhf)
 # Override kernel version for ARMHF as it uses arm MP (multi-platform) for short version
 KVERSION = $(KVERSION_SHORT)-armmp

Jetzt, da Sie 4.9 nicht mehr sehen sollten, versuchen Sie es erneut.


Initialized empty Git repository in /sonic/src/sonic-linux-kernel/linux-signed-amd64-4.19.67+2+deb10u2~bpo9+1/.git/
error: patch failed: debian/changelog:1248
error: debian/changelog: patch does not apply
stg import: Diff does not apply cleanly
Makefile:52: recipe for target '/sonic/target/debs/stretch/linux-headers-4.19.0-0.bpo.6-common_4.19.67-2+deb10u2~bpo9+1_all.deb' failed
make[1]: *** [/sonic/target/debs/stretch/linux-headers-4.19.0-0.bpo.6-common_4.19.67-2+deb10u2~bpo9+1_all.deb] Error 2

Das?

Fazit: Kernel-Updates abbrechen

Es gibt einen Patch für den Kernel in "src / sonic-linux-kernel / patch", aber es gibt 105 Dateien. Blick hinein,

Es stellt sich heraus, dass Sie individuell entscheiden müssen, welchen Patch Sie benötigen. Einige von ihnen sagten: "Dies ist für Mellanox-Switches", und es schien, dass es einige Patches gab, die je nach Ziel nicht angewendet werden konnten.

Wenn Sie einen Patch pro Tag bereinigen, können Sie 105 in 105 Tagen ausführen, und wenn Sie 10 Patches pro Tag bereinigen, können Sie 105 in 11 Tagen ausführen. Ich habe den Ersatz von aufgegeben. Ich fürchte, ich kann nicht anders.

Ich werde die Trümmer der Arbeit am Github hinterlassen. Wenn Sie also Ihr Bestes geben können, können Sie damit beginnen. https://github.com/iMasaruOki/sonic-buildimage/tree/linux-kernel-4.19

Erste Frage: Was passiert mit ip vrf exec?

Nachdem ich herumgewandert war, stellte ich fest, dass ich es schaffen konnte, cgroups als Alternative zu verwenden. Ich habe ein Shell-Skript erstellt. Da es in den Kern geworfen wird, kopieren Sie es bitte und verwenden Sie es frei. https://gist.github.com/iMasaruOki/a4e4cf03f4b754cb5d5f17633276a381

Die Bedienung ist wie folgt.

admin@sonic:~$ ip addr show Ethernet0
8: Ethernet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9100 qdisc pfifo_fast master Vrf1 state UP group default qlen 1000
    link/ether 6c:b9:c5:16:88:cc brd ff:ff:ff:ff:ff:ff
    inet 172.21.1.1/31 scope global Ethernet0
       valid_lft forever preferred_lft forever
    inet6 fe80::6eb9:c5ff:fe16:88cc/64 scope link
       valid_lft forever preferred_lft forever
admin@sonic:~$ ping 172.21.1.0
PING 172.21.1.0 (172.21.1.0) 56(84) bytes of data.

--- 172.21.1.0 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1006ms

admin@sonic:~$ sudo ./ip-vrf-exec Vrf1 ping 172.21.1.0
PING 172.21.1.0 (172.21.1.0) 56(84) bytes of data.
64 bytes from 172.21.1.0: icmp_seq=1 ttl=64 time=0.421 ms

--- 172.21.1.0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.421/0.421/0.421/0.000 ms

admin@sonic:~$

Also habe ich es geschafft. Yoshi!

Später reden

Wenn Sie pingen können, können Sie einfach "ping -I Vrf1 172.21.1.0" ausführen, ohne cgroup auszuführen. Apropos, netdev wuchs, ich verstehe, es war ein blinder Fleck.

Späteres Gespräch 2

Es gab eine offizielle Seite über die Entwicklung, den Kernel zu ersetzen oder die Basis Debian zu einem Buster zu machen. Es ist in Arbeit, aber ich denke, es ist besser, sich darauf zu beziehen.

Recommended Posts

Ich möchte ip vrf mit SONiC verwenden
Ich möchte MATLAB feval mit Python verwenden
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Ich möchte -inf nicht mit np.log verwenden
Ich möchte ○○ mit Pandas machen
Ich möchte mit Python debuggen
Ich möchte R-Funktionen einfach mit ipython notebook verwenden
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!
Ich möchte Objekte mit OpenCV erkennen
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte Linux auf dem Mac verwenden
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich möchte IPython Qt Console verwenden
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte eine externe Bibliothek mit IBM Cloud-Funktionen verwenden
Ich möchte wirklich GitHub Flavored Markdown (GFM) mit Pelican verwenden!
Ich möchte datetime.datetime.now () auch mit pytest verspotten!
Ich möchte mehrere Bilder mit matplotlib anzeigen.
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich möchte OREMO mit setParam sein!
Ich möchte Ceres Solver aus Python verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte mit Djangos Migrate von vorne beginnen
Ich möchte mit Python in eine Datei schreiben
Ich möchte die Aktivierungsfunktion Mish verwenden
Ich möchte mkl mit numpy und scipy unter pyenv + Poesie verwenden
Ich möchte ein Bild mit Lollipop in WebP konvertieren
Ich möchte mit Jubatus (1) eine nicht autorisierte Anmeldung bei Facebook erkennen.
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mich mit Backpropagation (tf.custom_gradient) (Tensorflow) selbst verwenden.
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen
Ich möchte Lambda mit Python auf Mac AWS!
Ich möchte manuell eine Legende mit matplotlib erstellen
[TensorFlow] Ich möchte Fenster mit Ragged Tensor verarbeiten
Ich möchte OpenJDK 11 mit Ubuntu Linux 18.04 LTS / 18.10 verwenden
Ich möchte R-Datensatz mit Python verwenden
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine lokale Variable mit Lambda binden
Ich möchte SUDOKU lösen
[Python] Ich möchte mit Flask ein statisches Verzeichnis hinzufügen. [Ich möchte etwas anderes als statisch verwenden.]
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte das neueste gcc verwenden, auch wenn ich keine Sudo-Berechtigungen habe! !!
Ich möchte Pythons ungelöste Importwarnung mit vsCode entfernen
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
[NetworkX] Ich möchte nach Knoten mit bestimmten Attributen suchen
Ich möchte nur die SudachiPy-Normalisierungsverarbeitung verwenden
Verwenden Sie aggdraw, wenn Sie mit Kissen schön zeichnen möchten