2026-01-29 00:13:12,360: INFO: Building opensdn-external-haproxy 2026-01-29 00:13:12,706: 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_9-5 --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.7s #2 [internal] load metadata for docker.io/library/haproxy:3.3-dev #2 DONE 1.5s #3 [internal] load .dockerignore #3 transferring context: #3 transferring context: 2B done #3 DONE 0.9s #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.7s done #5 sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf 10.20kB / 10.20kB done #5 sha256:332172c9158b20f951fba841aefb485937c120c27ff5b27e45f11d2023159b17 2.10kB / 2.10kB done #5 ... #4 [internal] load build context #4 transferring context: 49.25kB done #4 DONE 0.3s #5 [1/5] FROM docker.io/library/haproxy:3.3-dev@sha256:22fcedee226900a3a80ab9d2d75bf19810b8684db2025944d2b78e1c4b44b0cf #5 sha256:a6c1c5c2236cf1158aa01889c0f0ae8a9cf512460237f7fda70e73fe4bc7a4b2 4.83kB / 4.83kB done #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 0B / 29.78MB 1.5s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 2.10MB / 29.78MB 1.6s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 4.19MB / 29.78MB 1.7s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 6.29MB / 29.78MB 1.8s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 0B / 1.58MB 1.8s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 9.44MB / 29.78MB 2.0s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 1.05MB / 1.58MB 2.0s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 14.68MB / 29.78MB 2.2s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 1.58MB / 1.58MB 2.1s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 18.87MB / 29.78MB 2.3s #5 sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 1.58MB / 1.58MB 2.1s done #5 sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 1.16kB / 1.16kB 2.3s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 22.28MB / 29.78MB 2.5s #5 sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 1.16kB / 1.16kB 2.3s done #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 1.05MB / 12.00MB 2.5s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 24.12MB / 29.78MB 2.6s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 3.15MB / 12.00MB 2.6s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 28.31MB / 29.78MB 2.8s #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 6.29MB / 12.00MB 2.8s #5 sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 29.78MB / 29.78MB 2.9s done #5 sha256:d007da98d4d28f3c978b9d2d75d64e8ac8ac7d52673036e5b190925775d59ddd 12.00MB / 12.00MB 3.0s #5 sha256:1e70ca6be0de8b2a496ed9b04f54bfae2d5eb39ea3c553309a74019c8270b761 449B / 449B 3.0s done #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 5.2s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 10.3s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 16.2s #5 extracting sha256:0e4bc2bd6656e6e004e3c749af70e5650bac2258243eb0949dea51cb8b7863db 18.7s done #5 extracting sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 #5 extracting sha256:a35cbb79fd67774977b78a72b186a533bdb2725cb5202ac0e107879e5cb3a291 0.9s done #5 extracting sha256:564c4e23d8c5e108855ff204c2d4a37767e19482dcf8d216f90779590f6e05b1 #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 27.5s #6 [2/5] RUN mkdir /licenses #6 DONE 1.4s #7 [3/5] COPY __licensing.txt /licenses/licensing.txt #7 DONE 0.9s #8 [4/5] COPY *.sh / #8 DONE 1.7s #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.613 /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory #9 0.965 Get:1 http://deb.debian.org/debian trixie InRelease [140 kB] #9 1.091 Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB] #9 1.133 Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] #9 1.182 Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9670 kB] #9 1.439 Get:5 http://deb.debian.org/debian trixie-updates/main amd64 Packages [5412 B] #9 1.472 Get:6 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [98.2 kB] #9 2.723 Fetched 10.0 MB in 2s (5060 kB/s) #9 2.723 Reading package lists... #9 3.873 Reading package lists... #9 4.905 Building dependency tree... #9 5.118 Reading state information... #9 5.418 The following additional packages will be installed: #9 5.418 libexpat1 libffi8 libgpm2 libncursesw6 libpython3.13-minimal #9 5.418 libpython3.13-stdlib libreadline8t64 media-types netbase python3.13 #9 5.418 python3.13-minimal readline-common #9 5.423 Suggested packages: #9 5.423 gpm python3.13-venv python3.13-doc binutils binfmt-support readline-doc #9 5.658 The following NEW packages will be installed: #9 5.658 libexpat1 libffi8 libgpm2 libncursesw6 libpython3.13-minimal #9 5.658 libpython3.13-stdlib libreadline8t64 media-types netbase python3-minimal #9 5.658 python3.13 python3.13-minimal readline-common #9 5.741 0 upgraded, 13 newly installed, 0 to remove and 9 not upgraded. #9 5.741 Need to get 6388 kB of archives. #9 5.741 After this operation, 24.3 MB of additional disk space will be used. #9 5.741 Get:1 http://deb.debian.org/debian trixie/main amd64 libexpat1 amd64 2.7.1-2 [108 kB] #9 5.877 Get:2 http://deb.debian.org/debian trixie/main amd64 libpython3.13-minimal amd64 3.13.5-2 [862 kB] #9 5.981 Get:3 http://deb.debian.org/debian trixie/main amd64 python3.13-minimal amd64 3.13.5-2 [2224 kB] #9 6.086 Get:4 http://deb.debian.org/debian trixie/main amd64 python3-minimal amd64 3.13.5-1 [27.2 kB] #9 6.086 Get:5 http://deb.debian.org/debian trixie/main amd64 netbase all 6.5 [12.4 kB] #9 6.086 Get:6 http://deb.debian.org/debian trixie/main amd64 readline-common all 8.2-6 [69.4 kB] #9 6.086 Get:7 http://deb.debian.org/debian trixie/main amd64 media-types all 13.0.0 [29.3 kB] #9 6.086 Get:8 http://deb.debian.org/debian trixie/main amd64 libffi8 amd64 3.4.8-2 [24.1 kB] #9 6.088 Get:9 http://deb.debian.org/debian trixie/main amd64 libgpm2 amd64 1.20.7-11+b2 [14.4 kB] #9 6.088 Get:10 http://deb.debian.org/debian trixie/main amd64 libncursesw6 amd64 6.5+20250216-2 [135 kB] #9 6.090 Get:11 http://deb.debian.org/debian trixie/main amd64 libreadline8t64 amd64 8.2-6 [169 kB] #9 6.090 Get:12 http://deb.debian.org/debian trixie/main amd64 libpython3.13-stdlib amd64 3.13.5-2 [1956 kB] #9 6.127 Get:13 http://deb.debian.org/debian trixie/main amd64 python3.13 amd64 3.13.5-2 [757 kB] #9 6.235 perl: warning: Setting locale failed. #9 6.235 perl: warning: Please check that your locale settings: #9 6.235 LANGUAGE = "en_US.UTF-8", #9 6.235 LC_ALL = "en_US.UTF-8", #9 6.235 LC_CTYPE = (unset), #9 6.235 LC_NUMERIC = (unset), #9 6.235 LC_COLLATE = (unset), #9 6.235 LC_TIME = (unset), #9 6.235 LC_MESSAGES = (unset), #9 6.235 LC_MONETARY = (unset), #9 6.235 LC_ADDRESS = (unset), #9 6.235 LC_IDENTIFICATION = (unset), #9 6.235 LC_MEASUREMENT = (unset), #9 6.235 LC_PAPER = (unset), #9 6.235 LC_TELEPHONE = (unset), #9 6.235 LC_NAME = (unset), #9 6.235 LANG = "en_US.UTF-8" #9 6.235 are supported and installed on your system. #9 6.235 perl: warning: Falling back to the standard locale ("C"). #9 7.601 Fetched 6388 kB in 0s (13.3 MB/s) #9 7.642 Selecting previously unselected package libexpat1:amd64. #9 7.642 (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 7.686 Preparing to unpack .../libexpat1_2.7.1-2_amd64.deb ... #9 7.686 Unpacking libexpat1:amd64 (2.7.1-2) ... #9 7.749 Selecting previously unselected package libpython3.13-minimal:amd64. #9 7.749 Preparing to unpack .../libpython3.13-minimal_3.13.5-2_amd64.deb ... #9 7.760 Unpacking libpython3.13-minimal:amd64 (3.13.5-2) ... #9 7.933 Selecting previously unselected package python3.13-minimal. #9 7.933 Preparing to unpack .../python3.13-minimal_3.13.5-2_amd64.deb ... #9 7.955 Unpacking python3.13-minimal (3.13.5-2) ... #9 8.154 Setting up libpython3.13-minimal:amd64 (3.13.5-2) ... #9 8.314 Setting up libexpat1:amd64 (2.7.1-2) ... #9 8.372 Setting up python3.13-minimal (3.13.5-2) ... #9 9.573 Selecting previously unselected package python3-minimal. #9 9.573 (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 9.602 Preparing to unpack .../0-python3-minimal_3.13.5-1_amd64.deb ... #9 9.602 Unpacking python3-minimal (3.13.5-1) ... #9 9.696 Selecting previously unselected package netbase. #9 9.696 Preparing to unpack .../1-netbase_6.5_all.deb ... #9 9.696 Unpacking netbase (6.5) ... #9 9.781 Selecting previously unselected package readline-common. #9 9.781 Preparing to unpack .../2-readline-common_8.2-6_all.deb ... #9 9.781 Unpacking readline-common (8.2-6) ... #9 9.826 Selecting previously unselected package media-types. #9 9.826 Preparing to unpack .../3-media-types_13.0.0_all.deb ... #9 9.846 Unpacking media-types (13.0.0) ... #9 9.927 Selecting previously unselected package libffi8:amd64. #9 9.927 Preparing to unpack .../4-libffi8_3.4.8-2_amd64.deb ... #9 9.934 Unpacking libffi8:amd64 (3.4.8-2) ... #9 10.01 Selecting previously unselected package libgpm2:amd64. #9 10.01 Preparing to unpack .../5-libgpm2_1.20.7-11+b2_amd64.deb ... #9 10.01 Unpacking libgpm2:amd64 (1.20.7-11+b2) ... #9 10.07 Selecting previously unselected package libncursesw6:amd64. #9 10.07 Preparing to unpack .../6-libncursesw6_6.5+20250216-2_amd64.deb ... #9 10.07 Unpacking libncursesw6:amd64 (6.5+20250216-2) ... #9 10.20 Selecting previously unselected package libreadline8t64:amd64. #9 10.20 Preparing to unpack .../7-libreadline8t64_8.2-6_amd64.deb ... #9 10.20 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 10.24 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 10.24 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 10.24 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 10.26 Unpacking libreadline8t64:amd64 (8.2-6) ... #9 10.35 Selecting previously unselected package libpython3.13-stdlib:amd64. #9 10.35 Preparing to unpack .../8-libpython3.13-stdlib_3.13.5-2_amd64.deb ... #9 10.35 Unpacking libpython3.13-stdlib:amd64 (3.13.5-2) ... #9 11.82 Selecting previously unselected package python3.13. #9 11.82 Preparing to unpack .../9-python3.13_3.13.5-2_amd64.deb ... #9 12.01 Unpacking python3.13 (3.13.5-2) ... #9 12.10 Setting up media-types (13.0.0) ... #9 12.12 Setting up libgpm2:amd64 (1.20.7-11+b2) ... #9 12.14 Setting up libncursesw6:amd64 (6.5+20250216-2) ... #9 13.40 Setting up libffi8:amd64 (3.4.8-2) ... #9 13.49 Setting up netbase (6.5) ... #9 13.65 Setting up python3-minimal (3.13.5-1) ... #9 13.99 Setting up readline-common (8.2-6) ... #9 14.06 Setting up libreadline8t64:amd64 (8.2-6) ... #9 14.10 Setting up libpython3.13-stdlib:amd64 (3.13.5-2) ... #9 14.16 Setting up python3.13 (3.13.5-2) ... #9 15.63 Processing triggers for libc-bin (2.41-12) ... #9 DONE 16.0s #10 exporting to image #10 exporting layers #10 exporting layers 2.1s done #10 writing image sha256:cdac95cd845577d42c4fde2cc461a36848e479a7079d573c145bf31efd0f4f80 #10 writing image sha256:cdac95cd845577d42c4fde2cc461a36848e479a7079d573c145bf31efd0f4f80 0.0s done #10 naming to nexus.gz1.opensdn.io:5101/opensdn-external-haproxy:master-2_4_8_9-5 0.0s done #10 DONE 2.8s 2026-01-29 00:14:07,358: INFO: Docker build duration: 55 seconds The push refers to repository [nexus.gz1.opensdn.io:5101/opensdn-external-haproxy] 991990ff11c2: Preparing aea45a61a52c: Preparing 40f11f3b6ff2: Preparing 366359c0a18a: Preparing 5f70bf18a086: Preparing 6041a3f8e882: Preparing 72bc242dd702: Preparing ab42a1a6742d: Preparing 9122132eabc5: Preparing 70a290c5e58b: Preparing 366359c0a18a: Waiting 5f70bf18a086: Waiting 6041a3f8e882: Waiting 72bc242dd702: Waiting ab42a1a6742d: Waiting 9122132eabc5: Waiting 70a290c5e58b: Waiting aea45a61a52c: Pushed 40f11f3b6ff2: Pushed 5f70bf18a086: Layer already exists 6041a3f8e882: Layer already exists 366359c0a18a: Pushed 72bc242dd702: Layer already exists ab42a1a6742d: Layer already exists 9122132eabc5: Layer already exists 991990ff11c2: Pushed 70a290c5e58b: Pushed master-2_4_8_9-5: digest: sha256:a826fd02c2816bff45a020c508c4a6e38a3109f31ba96410aa35429d8647a435 size: 2409 2026-01-29 00:14:26,445: INFO: Building opensdn-external-haproxy finished successfully, duration: 74 seconds REPOSITORY TAG IMAGE ID CREATED SIZE nexus.gz1.opensdn.io:5101/opensdn-external-rabbitmq master-2_4_8_9-5 26f2f1834e58 2 seconds ago 363MB nexus.gz1.opensdn.io:5101/opensdn-external-cassandra master-2_4_8_9-5 e4ee5d012bc6 3 seconds ago 331MB nexus.gz1.opensdn.io:5101/opensdn-external-stunnel master-2_4_8_9-5 1a90745ded57 6 seconds ago 398MB nexus.gz1.opensdn.io:5101/opensdn-external-redis master-2_4_8_9-5 f41f2cf3b64e 17 seconds ago 171MB nexus.gz1.opensdn.io:5101/opensdn-external-zookeeper master-2_4_8_9-5 fd363ab2f397 20 seconds ago 301MB nexus.gz1.opensdn.io:5101/opensdn-external-haproxy master-2_4_8_9-5 cdac95cd8455 23 seconds ago 144MB nexus.gz1.opensdn.io:5101/opensdn-external-kafka master-2_4_8_9-5 4f49551015a7 25 seconds ago 392MB nexus.gz1.opensdn.io:5101/opensdn-analytics-snmp-base master-2_4_8_9-5 74ea8a87d3ba 33 seconds ago 830MB nexus.gz1.opensdn.io:5101/opensdn-vrouter-base master-2_4_8_9-5 2343243c27c1 37 seconds ago 682MB nexus.gz1.opensdn.io:5101/opensdn-controller-control-base master-2_4_8_9-5 19f071ddd1bb 40 seconds ago 673MB nexus.gz1.opensdn.io:5101/opensdn-external-rsyslogd master-2_4_8_9-5 84a5cbd67bf2 44 seconds ago 359MB nexus.gz1.opensdn.io:5101/opensdn-analytics-base master-2_4_8_9-5 1a45660ac1ba About a minute ago 612MB nexus.gz1.opensdn.io:5101/opensdn-base master-2_4_8_9-5 4f22a29656c1 About a minute ago 612MB nexus.gz1.opensdn.io:5101/opensdn-controller-config-base master-2_4_8_9-5 f3abb079f68e About a minute ago 612MB nexus.gz1.opensdn.io:5101/opensdn-general-base master-2_4_8_9-5 f0e6e0d5fdf5 2 minutes ago 348MB nexus.gz1.opensdn.io:5101/opensdn-container-builder-src master-2_4_8_9-5 89d42b79ae57 3 minutes ago 2.47MB tf-dev-sandbox compile c5995eb1f06d 3 minutes ago 24.6GB nexus.gz1.opensdn.io:5101/opensdn-charms-src master-2_4_8_9-5 fc60a5839100 About an hour ago 6.04MB nexus.gz1.opensdn.io:5101/opensdn-ansible-deployer-src master-2_4_8_9-5 04b6d3f90b58 About an hour ago 1.4MB nexus.gz1.opensdn.io:5101/opensdn-kolla-ansible-src master-2_4_8_9-5 832911695e60 About an hour ago 32.7MB nexus.gz1.opensdn.io:5101/opensdn-container-builder-src 05d97e78b906 About an hour ago 2.45MB nexus.gz1.opensdn.io:5101/opensdn-build-manifest-src master-2_4_8_9-5 02d3fc4049be About an hour ago 4.17kB nexus.gz1.opensdn.io:5101/tf-dev-sandbox stable 8a4c055337c4 2 days ago 2.82GB