[LINUX] Je souhaite utiliser ip vrf avec SONiC

Ceci est une suite de Utilisation de VRF avec SONiC.

ʻIp vrf` ne peut pas être utilisé

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é.

Partie 1 Remplacez simplement le noyau (échec)

J'ai décidé de l'essayer immédiatement car il semble être résolu si je peux mettre à jour le noyau.

Installer un nouveau 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?

Spécifiez un nouveau noyau avec GRUB

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.

Contrôle de fonctionnement

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.

Partie 2 Construire SONiC avec un nouveau noyau (échec)

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.

Changement de 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?

Changer la partie désignée 4.9 restante

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?

Conclusion: abandonner les mises à jour du noyau

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

Première question: qu'arrive-t-il à ʻip vrf exec`?

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!

Parler plus tard

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.

Parler plus tard 2

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

Je souhaite utiliser ip vrf avec SONiC
Je veux utiliser MATLAB feval avec python
Je souhaite utiliser le répertoire temporaire avec Python2
Je ne veux pas utiliser -inf avec np.log
Je veux faire ○○ avec les Pandas
Je veux déboguer avec Python
Je souhaite utiliser facilement les fonctions R avec le notebook ipython
[Python] Je souhaite utiliser l'option -h avec argparse
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Je veux détecter des objets avec OpenCV
Je veux écrire un blog avec Jupyter Notebook
Je veux utiliser Linux sur mac
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Je souhaite utiliser la console IPython Qt
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je souhaite utiliser une bibliothèque externe avec IBM Cloud Functions
Je veux vraiment utiliser GitHub Flavored Markdown (GFM) avec Pelican!
Je veux moquer datetime.datetime.now () même avec pytest!
Je souhaite afficher plusieurs images avec matplotlib.
Je veux frapper 100 sciences des données avec Colaboratory
Je veux faire un jeu avec Python
Je veux être OREMO avec setParam!
Je veux utiliser le solveur ceres de python
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux recommencer avec Migrate de Django
Je veux écrire dans un fichier avec Python
Je souhaite utiliser la fonction d'activation Mish
Je veux utiliser mkl avec numpy et scipy sous l'environnement pyenv + poetry
Je veux convertir une image en WebP avec sucette
Je souhaite détecter une connexion non autorisée à Facebook avec Jubatus (1)
Je veux faire la transition avec un bouton sur le ballon
Je veux utiliser self avec Backpropagation (tf.custom_gradient) (tensorflow)
Je veux gérer l'optimisation avec python et cplex
Je veux escalader une montagne avec l'apprentissage par renforcement
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana
Je veux AWS Lambda avec Python sur Mac!
Je souhaite créer manuellement une légende avec matplotlib
[TensorFlow] Je souhaite traiter des fenêtres avec Ragged Tensor
Je souhaite utiliser OpenJDK 11 avec Ubuntu Linux 18.04 LTS / 18.10
Je veux utiliser le jeu de données R avec python
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux lier une variable locale avec lambda
Je veux résoudre SUDOKU
[Python] Je veux ajouter un répertoire statique avec Flask [Je veux utiliser autre chose que statique]
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Je veux pouvoir analyser des données avec Python (partie 3)
Je veux utiliser la dernière version de gcc même si je n'ai pas les privilèges sudo! !!
Je souhaite supprimer l'avertissement d'importation non résolue de Python avec vsCode
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux créer un éditeur de blog avec l'administrateur de django
[NetworkX] Je souhaite rechercher des nœuds avec des attributs spécifiques
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller