2026-01-27 12:43:29,091: INFO: Building opensdn-external-haproxy 2026-01-27 12:43:29,442: INFO: Building args: --network host --build-arg PIP_REPOSITORY=http://localhost:6667/pip/simple --build-arg CONTRAIL_REGISTRY=nexus.gz1.opensdn.io:5101 --build-arg CONTRAIL_CONTAINER_TAG=master-2_4_8_6-4 --build-arg SITE_MIRROR=http://nexus.gz1.opensdn.io/repository/external-web-cache --build-arg LINUX_DISTR_VER=9 --build-arg LINUX_DISTR=rockylinux --build-arg CONTAINER_NAME=opensdn-external-haproxy --build-arg UBUNTU_DISTR_VERSION=24.04 --build-arg UBUNTU_DISTR=ubuntu --build-arg VENDOR_NAME=OpenSDN-IO --build-arg VENDOR_DOMAIN=io.opensdn --build-arg BUILD_IMAGE=tf-dev-sandbox:compile --build-arg BUILD_ROOT=/buildroot #0 building with "default" instance using docker driver #1 [internal] load build definition from Dockerfile #1 transferring dockerfile: #1 transferring dockerfile: 1.55kB done #1 DONE 0.5s #2 [internal] load metadata for docker.io/library/haproxy:3.3-dev #2 DONE 1.7s #3 [internal] load .dockerignore #3 transferring context: #3 transferring context: 2B done #3 DONE 0.7s #4 [internal] load build context #4 DONE 0.0s #5 [1/5] FROM docker.io/library/haproxy:3.3-dev@sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf #5 resolve docker.io/library/haproxy:3.3-dev@sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf #5 resolve docker.io/library/haproxy:3.3-dev@sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf 0.6s done #5 sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf 10.20kB / 10.20kB done #5 sha256:332172c9158b20f951fba841aefb485937c120c27ff5b27e45f11d2023159b17 2.10kB / 2.10kB done #5 sha256:a6c1c5c2236cf1158aa01889c0f0ae8a9cf512460237f7fda70e73fe4bc7a4b2 4.83kB / 4.83kB done #5 ... #4 [internal] load build context #4 transferring context: 49.25kB 0.0s done #4 DONE 0.6s #5 [1/5] FROM docker.io/library/haproxy:3.3-dev@sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 0B / 29.78MB 3.5s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 2.10MB / 29.78MB 3.6s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 1.05MB / 1.58MB 3.6s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 4.19MB / 29.78MB 3.7s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 1.58MB / 1.58MB 3.6s done #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 9.44MB / 29.78MB 3.9s #5 sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 1.16kB / 1.16kB 3.9s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 0B / 12.00MB 3.9s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 12.58MB / 29.78MB 4.0s #5 sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 1.16kB / 1.16kB 3.9s done #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 1.05MB / 12.00MB 4.0s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 14.68MB / 29.78MB 4.1s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 5.24MB / 12.00MB 4.1s #5 sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B 4.1s #5 sha256:1e70ca6be0de8b2a496ed9b04f54bfae2d5eb39ea3c553309a74019c8270b761 449B / 449B 4.0s done #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 19.92MB / 29.78MB 4.3s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 12.00MB / 12.00MB 4.3s #5 sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B 4.1s done #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 27.26MB / 29.78MB 4.4s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 12.00MB / 12.00MB 4.3s done #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 29.78MB / 29.78MB 4.6s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 29.78MB / 29.78MB 4.6s done #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 5.0s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 10.1s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 15.7s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 17.7s done #5 extracting sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 #5 extracting sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 0.6s done #5 extracting sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 done #5 extracting sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd #5 extracting sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 1.2s done #5 extracting sha256:1e70ca6be0de8b2a496ed9b04f54bfae2d5eb39ea3c553309a74019c8270b761 done #5 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 #5 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done #5 DONE 30.3s #6 [2/5] RUN mkdir /licenses #6 DONE 0.7s #7 [3/5] COPY __licensing.txt /licenses/licensing.txt #7 DONE 0.8s #8 [4/5] COPY *.sh / #8 DONE 0.4s #9 [5/5] RUN /bin/bash -c 'for item in `ls /__*` ; do mv $item /${item:3} ; done' ; export DEBIAN_FRONTEND=noninteractive ; apt-get update || /bin/true ; apt-get -y install python3-minimal ; apt-get clean && rm -rf /var/lib/apt/lists/* #9 0.484 /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory #9 0.635 Get:1 http://deb.debian.org/debian trixie InRelease [140 kB] #9 0.961 Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB] #9 1.086 Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] #9 1.319 Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9670 kB] #9 90.61 Get:5 http://deb.debian.org/debian trixie-updates/main amd64 Packages [5412 B] #9 90.68 Get:6 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [97.9 kB] #9 91.97 Fetched 10.0 MB in 1min 31s (109 kB/s) #9 91.97 Reading package lists... #9 92.63 Reading package lists... #9 93.25 Building dependency tree... #9 93.40 Reading state information... #9 93.57 The following additional packages will be installed: #9 93.57 libexpat1 libffi8 libgpm2 libncursesw6 libpython3.13-minimal #9 93.57 libpython3.13-stdlib libreadline8t64 media-types netbase python3.13 #9 93.57 python3.13-minimal readline-common #9 93.57 Suggested packages: #9 93.57 gpm python3.13-venv python3.13-doc binutils binfmt-support readline-doc #9 93.70 The following NEW packages will be installed: #9 93.70 libexpat1 libffi8 libgpm2 libncursesw6 libpython3.13-minimal #9 93.70 libpython3.13-stdlib libreadline8t64 media-types netbase python3-minimal #9 93.70 python3.13 python3.13-minimal readline-common #9 94.81 0 upgraded, 13 newly installed, 0 to remove and 6 not upgraded. #9 94.81 Need to get 6388 kB of archives. #9 94.81 After this operation, 24.3 MB of additional disk space will be used. #9 94.81 Get:1 http://deb.debian.org/debian trixie/main amd64 libexpat1 amd64 2.7.1-2 [108 kB] #9 95.17 Get:2 http://deb.debian.org/debian trixie/main amd64 libpython3.13-minimal amd64 3.13.5-2 [862 kB] #9 103.5 Get:3 http://deb.debian.org/debian trixie/main amd64 python3.13-minimal amd64 3.13.5-2 [2224 kB] #9 126.6 Get:4 http://deb.debian.org/debian trixie/main amd64 python3-minimal amd64 3.13.5-1 [27.2 kB] #9 126.7 Get:5 http://deb.debian.org/debian trixie/main amd64 netbase all 6.5 [12.4 kB] #9 126.8 Get:6 http://deb.debian.org/debian trixie/main amd64 readline-common all 8.2-6 [69.4 kB] #9 127.8 Get:7 http://deb.debian.org/debian trixie/main amd64 media-types all 13.0.0 [29.3 kB] #9 128.1 Get:8 http://deb.debian.org/debian trixie/main amd64 libffi8 amd64 3.4.8-2 [24.1 kB] #9 128.3 Get:9 http://deb.debian.org/debian trixie/main amd64 libgpm2 amd64 1.20.7-11+b2 [14.4 kB] #9 128.3 Get:10 http://deb.debian.org/debian trixie/main amd64 libncursesw6 amd64 6.5+20250216-2 [135 kB] #9 130.2 Get:11 http://deb.debian.org/debian trixie/main amd64 libreadline8t64 amd64 8.2-6 [169 kB] #9 132.5 Get:12 http://deb.debian.org/debian trixie/main amd64 libpython3.13-stdlib amd64 3.13.5-2 [1956 kB] #9 153.8 Get:13 http://deb.debian.org/debian trixie/main amd64 python3.13 amd64 3.13.5-2 [757 kB] #9 162.9 perl: warning: Setting locale failed. #9 162.9 perl: warning: Please check that your locale settings: #9 162.9 LANGUAGE = "en_US.UTF-8", #9 162.9 LC_ALL = "en_US.UTF-8", #9 162.9 LC_CTYPE = (unset), #9 162.9 LC_NUMERIC = (unset), #9 162.9 LC_COLLATE = (unset), #9 162.9 LC_TIME = (unset), #9 162.9 LC_MESSAGES = (unset), #9 162.9 LC_MONETARY = (unset), #9 162.9 LC_ADDRESS = (unset), #9 162.9 LC_IDENTIFICATION = (unset), #9 162.9 LC_MEASUREMENT = (unset), #9 162.9 LC_PAPER = (unset), #9 162.9 LC_TELEPHONE = (unset), #9 162.9 LC_NAME = (unset), #9 162.9 LANG = "en_US.UTF-8" #9 162.9 are supported and installed on your system. #9 162.9 perl: warning: Falling back to the standard locale ("C"). #9 163.7 Fetched 6388 kB in 1min 9s (92.3 kB/s) #9 163.7 Selecting previously unselected package libexpat1:amd64. #9 163.7 (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 5563 files and directories currently installed.) #9 163.7 Preparing to unpack .../libexpat1_2.7.1-2_amd64.deb ... #9 163.7 Unpacking libexpat1:amd64 (2.7.1-2) ... #9 163.7 Selecting previously unselected package libpython3.13-minimal:amd64. #9 163.8 Preparing to unpack .../libpython3.13-minimal_3.13.5-2_amd64.deb ... #9 163.8 Unpacking libpython3.13-minimal:amd64 (3.13.5-2) ... #9 163.8 Selecting previously unselected package python3.13-minimal. #9 163.8 Preparing to unpack .../python3.13-minimal_3.13.5-2_amd64.deb ... #9 163.9 Unpacking python3.13-minimal (3.13.5-2) ... #9 164.0 Setting up libpython3.13-minimal:amd64 (3.13.5-2) ... #9 164.0 Setting up libexpat1:amd64 (2.7.1-2) ... #9 164.0 Setting up python3.13-minimal (3.13.5-2) ... #9 164.8 Selecting previously unselected package python3-minimal. #9 164.8 (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 5897 files and directories currently installed.) #9 164.8 Preparing to unpack .../0-python3-minimal_3.13.5-1_amd64.deb ... #9 164.8 Unpacking python3-minimal (3.13.5-1) ... #9 164.9 Selecting previously unselected package netbase. #9 164.9 Preparing to unpack .../1-netbase_6.5_all.deb ... #9 164.9 Unpacking netbase (6.5) ... #9 164.9 Selecting previously unselected package readline-common. #9 164.9 Preparing to unpack .../2-readline-common_8.2-6_all.deb ... #9 164.9 Unpacking readline-common (8.2-6) ... #9 164.9 Selecting previously unselected package media-types. #9 164.9 Preparing to unpack .../3-media-types_13.0.0_all.deb ... #9 164.9 Unpacking media-types (13.0.0) ... #9 165.0 Selecting previously unselected package libffi8:amd64. #9 165.0 Preparing to unpack .../4-libffi8_3.4.8-2_amd64.deb ... #9 165.0 Unpacking libffi8:amd64 (3.4.8-2) ... #9 165.0 Selecting previously unselected package libgpm2:amd64. #9 165.0 Preparing to unpack .../5-libgpm2_1.20.7-11+b2_amd64.deb ... #9 165.0 Unpacking libgpm2:amd64 (1.20.7-11+b2) ... #9 165.0 Selecting previously unselected package libncursesw6:amd64. #9 165.0 Preparing to unpack .../6-libncursesw6_6.5+20250216-2_amd64.deb ... #9 165.1 Unpacking libncursesw6:amd64 (6.5+20250216-2) ... #9 165.1 Selecting previously unselected package libreadline8t64:amd64. #9 165.1 Preparing to unpack .../7-libreadline8t64_8.2-6_amd64.deb ... #9 165.1 Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8 to /lib/x86_64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' #9 165.1 Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8.2 to /lib/x86_64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' #9 165.1 Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8 to /lib/x86_64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' #9 165.1 Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8.2 to /lib/x86_64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' #9 165.1 Unpacking libreadline8t64:amd64 (8.2-6) ... #9 165.2 Selecting previously unselected package libpython3.13-stdlib:amd64. #9 165.2 Preparing to unpack .../8-libpython3.13-stdlib_3.13.5-2_amd64.deb ... #9 165.2 Unpacking libpython3.13-stdlib:amd64 (3.13.5-2) ... #9 165.3 Selecting previously unselected package python3.13. #9 165.3 Preparing to unpack .../9-python3.13_3.13.5-2_amd64.deb ... #9 165.3 Unpacking python3.13 (3.13.5-2) ... #9 165.3 Setting up media-types (13.0.0) ... #9 165.4 Setting up libgpm2:amd64 (1.20.7-11+b2) ... #9 165.4 Setting up libncursesw6:amd64 (6.5+20250216-2) ... #9 165.4 Setting up libffi8:amd64 (3.4.8-2) ... #9 165.4 Setting up netbase (6.5) ... #9 165.4 Setting up python3-minimal (3.13.5-1) ... #9 165.6 Setting up readline-common (8.2-6) ... #9 165.6 Setting up libreadline8t64:amd64 (8.2-6) ... #9 165.6 Setting up libpython3.13-stdlib:amd64 (3.13.5-2) ... #9 165.6 Setting up python3.13 (3.13.5-2) ... #9 166.5 Processing triggers for libc-bin (2.41-12) ... #9 DONE 166.9s #10 exporting to image #10 exporting layers #10 exporting layers 0.3s done #10 writing image sha256:4ebbad6de2bd37958745254cb61f509b5f8f3a4a70dc19c252f8fc25aaffcac6 done #10 naming to nexus.gz1.opensdn.io:5101/opensdn-external-haproxy:master-2_4_8_6-4 done #10 DONE 0.3s 2026-01-27 12:46:52,527: INFO: Docker build duration: 203 seconds The push refers to repository [nexus.gz1.opensdn.io:5101/opensdn-external-haproxy] ac2750bc5d18: Preparing fe5631e062fd: Preparing e124e9b10c55: Preparing 2a96e7e71b13: Preparing 5f70bf18a086: Preparing 6041a3f8e882: Preparing 72bc242dd702: Preparing ab42a1a6742d: Preparing 9122132eabc5: Preparing 70a290c5e58b: Preparing 5f70bf18a086: Waiting 6041a3f8e882: Waiting ab42a1a6742d: Waiting 72bc242dd702: Waiting 9122132eabc5: Waiting 70a290c5e58b: Waiting fe5631e062fd: Pushed e124e9b10c55: Pushed 2a96e7e71b13: Pushed 6041a3f8e882: Layer already exists 5f70bf18a086: Layer already exists 72bc242dd702: Layer already exists ab42a1a6742d: Layer already exists 9122132eabc5: Layer already exists ac2750bc5d18: Pushed 70a290c5e58b: Pushed master-2_4_8_6-4: digest: sha256:d39f18570667e6bebb3ffd4e2bd2394e1d56b4c9fde1d674b5d1f76bc261643e size: 2409 2026-01-27 12:46:57,158: INFO: Building opensdn-external-haproxy finished successfully, duration: 208 seconds REPOSITORY TAG IMAGE ID CREATED SIZE nexus.gz1.opensdn.io:5101/opensdn-external-haproxy master-2_4_8_6-4 4ebbad6de2bd 5 seconds ago 144MB nexus.gz1.opensdn.io:5101/opensdn-external-redis master-2_4_8_6-4 41596b456e58 50 seconds ago 171MB opensdn-test-test master-2_4_8_6-4 43fa4a0eef9c About a minute ago 1.74GB nexus.gz1.opensdn.io:5101/opensdn-test-test master-2_4_8_6-4 43fa4a0eef9c About a minute ago 1.74GB nexus.gz1.opensdn.io:5101/opensdn-external-zookeeper master-2_4_8_6-4 b522b3f991cf About a minute ago 301MB nexus.gz1.opensdn.io:5101/opensdn-controller-webui-base master-2_4_8_6-4 d34a17a079cd 2 minutes ago 858MB nexus.gz1.opensdn.io:5101/opensdn-external-stunnel master-2_4_8_6-4 f17217a488af 2 minutes ago 398MB nexus.gz1.opensdn.io:5101/opensdn-external-rabbitmq master-2_4_8_6-4 ce1e5f7ac701 2 minutes ago 363MB nexus.gz1.opensdn.io:5101/opensdn-external-cassandra master-2_4_8_6-4 c8c73f041f8b 2 minutes ago 331MB nexus.gz1.opensdn.io:5101/opensdn-analytics-snmp-base master-2_4_8_6-4 1b2af53ed2c6 2 minutes ago 830MB nexus.gz1.opensdn.io:5101/opensdn-vrouter-base master-2_4_8_6-4 2e5da996c801 2 minutes ago 682MB nexus.gz1.opensdn.io:5101/opensdn-external-rsyslogd master-2_4_8_6-4 8785486716dd 2 minutes ago 359MB nexus.gz1.opensdn.io:5101/opensdn-controller-control-base master-2_4_8_6-4 086fa27add93 2 minutes ago 673MB nexus.gz1.opensdn.io:5101/opensdn-base master-2_4_8_6-4 8ebfd78960fa 3 minutes ago 612MB nexus.gz1.opensdn.io:5101/opensdn-analytics-base master-2_4_8_6-4 f9a2d70a20ee 3 minutes ago 612MB nexus.gz1.opensdn.io:5101/opensdn-controller-config-base master-2_4_8_6-4 cc2637ae6038 3 minutes ago 612MB nexus.gz1.opensdn.io:5101/opensdn-general-base master-2_4_8_6-4 73b4dffdb82f 5 minutes ago 348MB nexus.gz1.opensdn.io:5101/opensdn-container-builder-src master-2_4_8_6-4 d485c61ef771 5 minutes ago 2.38MB tf-dev-sandbox compile b301d543645f 5 minutes ago 24.2GB nexus.gz1.opensdn.io:5101/opensdn-charms-src master-2_4_8_6-4 83decf7ad757 6 minutes ago 6.04MB nexus.gz1.opensdn.io:5101/opensdn-ansible-deployer-src master-2_4_8_6-4 817493da132b 6 minutes ago 1.4MB nexus.gz1.opensdn.io:5101/opensdn-container-builder-src 061ff3e5eaa5 6 minutes ago 2.36MB nexus.gz1.opensdn.io:5101/opensdn-kolla-ansible-src master-2_4_8_6-4 b72ee5839029 6 minutes ago 32.7MB nexus.gz1.opensdn.io:5101/opensdn-build-manifest-src master-2_4_8_6-4 3589515b57b8 6 minutes ago 4.17kB nexus.gz1.opensdn.io:5101/tf-dev-sandbox frozen 664f87813fad 21 hours ago 23.5GB