Ceci est une suite de Utilisation de VRF avec SONiC.
SONiC est un système d'exploitation pour les commutateurs en boîte blanche basé sur Debian / GNU Linux. Il est actuellement basé sur Debian 9.0 (stretch). La version du noyau est 4.9.189-3 + deb9u2.
Étant donné que SONiC est un système d'exploitation pour les commutateurs à boîte blanche, il fournit des paramètres, des références et des vérifications de fonctionnement pour les fonctions liées au réseau. Cependant, vous ne pouvez pas utiliser la commande ʻip vrf` pour vérifier la fonctionnalité de VRF (Virtual Routing and Forwarding).
Pourquoi ne puis-je pas utiliser la commande ʻip vrf`?
Ce sera. Le paquet iproute2 lui-même est fourni par stretch-backports avec une version qui prend en charge ʻip vrf, donc l'installation résoudra le problème. Cependant, si le noyau est encore ancien, ʻip vrf exec
ne peut pas être exécuté.
J'ai décidé de l'essayer immédiatement car il semble être résolu si je peux mettre à jour le noyau.
sudo apt-get -t stretch-backports install linux-image-4.19.0-0.bpo.6-amd64
Lorsque vous redémarrez, c'est sûr ... 4.9.0, qui était initialement inclus, démarrera. cette?
Hmm. Est-ce GRUB? Donc, quand j'ai redémarré à nouveau et appuyé sur «e» sur l'écran du menu GRUB, c'était toujours 4.9.0. Bien qu'il s'agisse d'une modification temporaire, réécrivez-la en 4.19 et démarrez-la.
Cela a commencé. Le port de gestion est actif. Connectez-vous avec ssh et vérifiez la version. Yoshi!
Lançons ʻip vrf exec, eh bien, vérifions l'adresse IP avec
show ip interfaces…… Vous ne voyez pas d'Ethernet *? Regardons le journal.
show logging | less`
Puis
INFO pmon#supervisord: 2020-02-21 07:59:43.276 INFO exited: syseepromd (exit status 1; not expected)
Ahhhh. En parlant de cela, SONiC a un module de noyau pour le contrôle autour du commutateur ASIC et SFP, donc j'ai complètement oublié que cela ne fonctionnera que si la version correspond. Il n'est pas inclus dans le noyau Linux standard, vous ne pouvez donc pas vous aider sans commencer par la construction. Malheureusement, c'est la fin du processus.
SONiC vous permet de créer une image contenant le noyau Linux à partir du code source. À ce stade, il est possible d'obtenir une image binaire de l'extérieur pour raccourcir le temps de construction, mais généralement le noyau Linux lui-même est également construit à partir du code source. Puisque cette partie est ciblée pour 4.9, j'ai pensé que cela fonctionnerait si je la remplaçais par une nouvelle version telle que 4.19, alors je l'ai essayée.
src / sonic-linux-kernel / Makefile
(insuffisant)sonic-linux-kernel
est un sous-module. La source du noyau est développée sous ceci, et il y a aussi Makefile
, donc il est bon de changer cela.
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
Je pense que c'est bien. J'essaierai de faire.
"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
cette?
Si vous regardez de plus près, il y a une description de l'obtention du paquet au bas de build_debian.sh
, et l'URL y indique pour obtenir 4.9. Préparez des correctifs supplémentaires.
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
Pour beaucoup d'autres, s / 4 \\ .9 \\ .0-11-2 / 4.19.0-0.bpo.6 /
convient généralement, alors remplacez-le par perl -pi
à la fois.
Le reste est 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
Maintenant que vous ne devriez plus aller voir 4.9, essayez à nouveau de construire.
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
cette?
Il y a un patch pour le noyau dans src / sonic-linux-kernel / patch
, mais il y a 105 fichiers. Regardant à l'intérieur,
Il s'avère que vous devez décider individuellement du patch dont vous avez besoin. Certains d'entre eux ont dit: «Ceci est pour les commutateurs Mellanox», et il semblait que certains correctifs ne pouvaient pas être appliqués en fonction de la cible.
Si vous nettoyez un patch par jour, vous pouvez en faire 105 en 105 jours, et si vous nettoyez 10 patchs par jour, vous pouvez en faire 105 en 11 jours. J'ai abandonné le remplacement de. J'ai peur de ne pas pouvoir m'en empêcher.
Je vais laisser l'épave du travail sur github, donc si vous pouvez faire de votre mieux, vous pouvez commencer par ceci. https://github.com/iMasaruOki/sonic-buildimage/tree/linux-kernel-4.19
Après avoir erré, j'ai trouvé que je pouvais réussir à utiliser des groupes de contrôle comme alternative. J'ai fait un script shell. Puisqu'il est jeté dans l'essentiel, veuillez le copier et l'utiliser librement. https://gist.github.com/iMasaruOki/a4e4cf03f4b754cb5d5f17633276a381
L'opération est comme ça.
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:~$
Alors j'ai réussi à le faire. Yoshi!
Si vous pouvez envoyer un ping, vous pouvez simplement faire ping -I Vrf1 172.21.1.0
sans faire de groupe de contrôle. En parlant de cela, netdev grandissait, je vois, c'était un angle mort.
Il y avait une page officielle sur le développement du remplacement du noyau ou la transformation de la base Debian en un buster. C'est un travail en cours, mais je pense qu'il vaut mieux y faire référence.
Recommended Posts