nokia / srlinux-container-image

Freely distributed official SR Linux container image
https://learn.srlinux.dev
BSD 3-Clause "New" or "Revised" License
51 stars 7 forks source link

Does not run in docker as per learn.srlinux.dev #1

Closed tommiyau closed 2 years ago

tommiyau commented 2 years ago

docker run -d -t --privileged -u $(id -u):$(id -g) --name srlinux ghcr.io/nokia/srlinux sudo bash /opt/srlinux/bin/sr_linux

fails to run.

Logs state following

Mon Jun 13 05:12:58 UTC 2022: entrypoint.sh called Mon Jun 13 05:12:58 UTC 2022: renaming docker interface eth0 to mgmt0 Mon Jun 13 05:12:59 UTC 2022: turning off checksum offloading on mgmt0 Actual changes: rx-checksumming: off tx-checksumming: off tx-checksum-ip-generic: off tx-checksum-sctp: off tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp-mangleid-segmentation: off [requested on] tx-tcp6-segmentation: off [requested on] Mon Jun 13 05:12:59 UTC 2022: starting sshd ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 Mon Jun 13 05:12:59 UTC 2022: Calling boot_run script /opt/srlinux/bin/bootscript/05_sr_createuser.sh: line 270: !srl_is_running_on_nokia_rootfs: command not found /opt/srlinux/bin/bootscript/05_sr_createuser.sh: line 282: python: command not found chmod: missing operand after '0666' Try 'chmod --help' for more information. /usr/bin/find: '/var/log/srlinux/file': No such file or directory logmgr_set_env.sh: plain_bootup_start Mon Jun 13 05:13:00 UTC 2022 logmgr_set_env.sh: restart of rsyslogd Failed to set capabilities on file `/usr/sbin/tcpdump' (No such file or directory) usage: setcap [-q] [-v] [-n ] (-r|-|) [ ... (-r|-|) ]

Note must be a regular (non-symlink) file. Mon Jun 13 05:13:00 UTC 2022: entrypoint.sh done, executing sudo bash /opt/srlinux/bin/sr_linux No/Invalid license found! Not starting in a named namespace, giving it the name "srbase" Unix domain socket directory is /opt/srlinux/var/run/ Log directory is /var/log/srlinux/stdout Started supportd: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_supportd --server-mode" >/var/log/srlinux/stdout/supportd.log 2>&1 & Application supportd is running: PID 1384 Started dev_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_device_mgr" >/var/log/srlinux/stdout/dev_mgr.log 2>&1 & Application dev_mgr is running: PID 1405 Found dev_mgr: PID 1405 - killing Found supportd: PID 1384 - killing Failed to kill supportd: PID 1384. Another kill is retried

tommiyau commented 2 years ago

To be able to get the container to execute and for the logs to look correct this needs to have a volume mount to a topology file to run. learn.srlinux.dev and the official nokia documentation appears to be incorrect. I suspect that teh authorized keys may need to be set as well to actually ssh into the router.

https://documentation.nokia.com/cgi-bin/dbaccessfilename.cgi/3HE18305AAAA01_V1_SR%20Linux%20R22.3%20Software%20Installation.pdf#%5B%7B%22num%22%3A214%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C56.692%2C270.1%2Cnull%5D

need to map a volume to the topology file else the container does not run.

docker run -t -d --rm --privileged \ -u $(id -u):$(id -g) \ -v /my/topo/topology.xml:/tmp/topology.yml:ro \ --name srlinux ghcr.io/nokia/srlinux \ sudo bash /opt/srlinux/bin/sr_linux

I used a dump of a router from container lab for the topo. cat /my/topo/topology.xml

Copyright 2020 Nokia

Licensed under the BSD 3-Clause License.

SPDX-License-Identifier: BSD-3-Clause

chassis_configuration: "chassis_type": 65 "base_mac": "1a:b0:00:00:00:00" "cpm_card_type": 176

slot_configuration: 1: "card_type": 176 "mda_type": 195 # imm48-25g-sfp28+8-100g-qsfp28

logs after the mount Mon Jun 13 05:49:57 UTC 2022: entrypoint.sh called Mon Jun 13 05:49:57 UTC 2022: renaming docker interface eth0 to mgmt0 Mon Jun 13 05:49:57 UTC 2022: turning off checksum offloading on mgmt0 Actual changes: rx-checksumming: off tx-checksumming: off tx-checksum-ip-generic: off tx-checksum-sctp: off tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp-mangleid-segmentation: off [requested on] tx-tcp6-segmentation: off [requested on] Mon Jun 13 05:49:57 UTC 2022: starting sshd ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 Mon Jun 13 05:49:57 UTC 2022: Calling boot_run script /opt/srlinux/bin/bootscript/05_sr_createuser.sh: line 270: !srl_is_running_on_nokia_rootfs: command not found /opt/srlinux/bin/bootscript/05_sr_createuser.sh: line 282: python: command not found chmod: missing operand after '0666' Try 'chmod --help' for more information. /usr/bin/find: '/var/log/srlinux/file': No such file or directory logmgr_set_env.sh: plain_bootup_start Mon Jun 13 05:49:58 UTC 2022 logmgr_set_env.sh: restart of rsyslogd Failed to set capabilities on file `/usr/sbin/tcpdump' (No such file or directory) usage: setcap [-q] [-v] [-n ] (-r|-|) [ ... (-r|-|) ]

Note must be a regular (non-symlink) file. Mon Jun 13 05:49:58 UTC 2022: entrypoint.sh done, executing sudo bash -c touch /.dockerenv && /opt/srlinux/bin/sr_linux No/Invalid license found! Not starting in a named namespace, giving it the name "srbase" Unix domain socket directory is /opt/srlinux/var/run/ Log directory is /var/log/srlinux/stdout Started supportd: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_supportd --server-mode" >/var/log/srlinux/stdout/supportd.log 2>&1 & Application supportd is running: PID 1385 Started dev_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_device_mgr" >/var/log/srlinux/stdout/dev_mgr.log 2>&1 & Application dev_mgr is running: PID 1406 Started idb_server: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_idb_server" >/var/log/srlinux/stdout/idb_server.log 2>&1 & Application idb_server is running: PID 1427 Started aaa_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_aaa_mgr" >/var/log/srlinux/stdout/aaa_mgr.log 2>&1 & Started acl_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_acl_mgr" >/var/log/srlinux/stdout/acl_mgr.log 2>&1 & Started arp_nd_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_arp_nd_mgr" >/var/log/srlinux/stdout/arp_nd_mgr.log 2>&1 & Started chassis_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_chassis_mgr" >/var/log/srlinux/stdout/chassis_mgr.log 2>&1 & Started dhcp_client_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_dhcp_client_mgr" >/var/log/srlinux/stdout/dhcp_client_mgr.log 2>&1 & Started evpn_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_evpn_mgr" >/var/log/srlinux/stdout/evpn_mgr.log 2>&1 & Started fhs_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_fhs_mgr" >/var/log/srlinux/stdout/fhs_mgr.log 2>&1 & Started fib_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_fib_mgr" >/var/log/srlinux/stdout/fib_mgr.log 2>&1 & Started l2_mac_learn_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_l2_mac_learn_mgr" >/var/log/srlinux/stdout/l2_mac_learn_mgr.log 2>&1 & Started l2_mac_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_l2_mac_mgr" >/var/log/srlinux/stdout/l2_mac_mgr.log 2>&1 & Started lag_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_lag_mgr" >/var/log/srlinux/stdout/lag_mgr.log 2>&1 & Started linux_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_linux_mgr" >/var/log/srlinux/stdout/linux_mgr.log 2>&1 & Started log_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_log_mgr" >/var/log/srlinux/stdout/log_mgr.log 2>&1 & Started mcid_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_mcid_mgr" >/var/log/srlinux/stdout/mcid_mgr.log 2>&1 & Started mgmt_server: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_mgmt_server" >/var/log/srlinux/stdout/mgmt_server.log 2>&1 & Started net_inst_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_net_inst_mgr" >/var/log/srlinux/stdout/net_inst_mgr.log 2>&1 & Started sdk_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_sdk_mgr" >/var/log/srlinux/stdout/sdk_mgr.log 2>&1 & Started sflow_sample_mgr: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "./sr_sflow_sample_mgr" >/var/log/srlinux/stdout/sflow_sample_mgr.log 2>&1 & Started xdp_lc_1: source /etc/profile.d/sr_app_env.sh &>/dev/null; bash -c "exec -a sr_xdp_lc_1 ./sr_xdp_lc --slot_num 1" >/var/log/srlinux/stdout/xdp_lc_1.log 2>&1 & Application aaa_mgr is running: PID 1438 Application acl_mgr is running: PID 1449 Application arp_nd_mgr is running: PID 1460 Application chassis_mgr is running: PID 1471 Application dhcp_client_mgr is running: PID 1482 Application evpn_mgr is running: PID 1493 Application fhs_mgr is running: PID 1504 Application fib_mgr is running: PID 1515 Application l2_mac_learn_mgr is running: PID 1526 Application l2_mac_mgr is running: PID 1540 Application lag_mgr is running: PID 1561 Application linux_mgr is running: PID 1572 Application log_mgr is running: PID 1583 Application mcid_mgr is running: PID 1594 Application mgmt_server is running: PID 1605 Application net_inst_mgr is running: PID 1616 Application sdk_mgr is running: PID 1627 Application sflow_sample_mgr is running: PID 1638 Application xdp_lc_1 is running: PID 1650

hellt commented 2 years ago

the culprit is in disabling tx offload on the docker bridge, as srlinux validates crc checksums in incoming packets

what you need to do is the following

sudo ethtool --offload docker0 tx off - to disable tx offload on a default docker bridge and then you deploy a container

docker run -t -d -v $(pwd)/topology.yml:/tmp/topology.yml --rm --privileged \
  -u $(id -u):$(id -g) \
  --name srlinux ghcr.io/nokia/srlinux:21.11.3 \
  sudo bash /opt/srlinux/bin/sr_linux

the topology.yml file that I used in the example above is

chassis_configuration:
  "chassis_type": 72
  "base_mac": "1a:b0:00:00:00:00"
  "cpm_card_type": 187

slot_configuration:
  1:
    "card_type": 187
    "mda_type": 200

Give it a go

I will update learn.srlinux.dev with these clarifications