{"id":1851,"date":"2025-05-28T09:54:30","date_gmt":"2025-05-28T08:54:30","guid":{"rendered":"https:\/\/nas01.tallpaul.net\/wordpress\/?p=1851"},"modified":"2025-05-29T12:42:48","modified_gmt":"2025-05-29T11:42:48","slug":"deploy-use-net-on-ibm-power-101","status":"publish","type":"post","link":"https:\/\/nas01.tallpaul.net\/wordpress\/2025\/05\/deploy-use-net-on-ibm-power-101\/","title":{"rendered":".NET on IBM Power Hands-on Lab Guide"},"content":{"rendered":"\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/nas01.tallpaul.net\/wordpress\/2024\/11\/deploy-llm-on-power10-for-inferencing\/#Introduction\">Introduction<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nas01.tallpaul.net\/wordpress\/2024\/11\/deploy-llm-on-power10-for-inferencing\/#Getting-Started\">Getting-Started<\/a><\/li>\n\n\n\n<li><a href=\"#Install-&amp;-Execute-.NET-application\">Install &amp; Execute .NET application<\/a><\/li>\n\n\n\n<li><a href=\"#Explore-GitHub\">Explore-GitHub<\/a><\/li>\n\n\n\n<li><a href=\"#Explore-Quay.io\">Explore-Quay.io<\/a><\/li>\n\n\n\n<li><a href=\"#Explore-Podman\">Explore-Podman<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/Deploy-Message-App-Manually\">Deploy-Message-App-Manually<\/a><\/li>\n\n\n\n<li><a href=\"#Deploy-Message-App-with-S2I\">Deploy-Message-App-with-S2I<\/a><\/li>\n\n\n\n<li><a href=\"#Deploy-Website-with-ASP.Net-Core-&amp;-Blazor\">Deploy-Website-with-ASP.Net-Core-&amp;-Blazor<\/a><\/li>\n\n\n\n<li><a href=\"#Deploy-the-.NET-game-using-Shift-tool\">Deploy-the-.NET-game-using-Shift-tool<\/a><\/li>\n\n\n\n<li><a href=\"#Deploy-.NET-game-with-build-image\">Deploy-.NET-game-with-build-image<\/a><\/li>\n\n\n\n<li><a href=\"#Optional-Unguided-Exercises\">Optional-Unguided-Exercises<\/a><\/li>\n\n\n\n<li><a href=\"#Summary-and-Next-Steps\">Summary-and-Next-Steps<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Introduction\">1 Introduction<\/h2>\n\n\n\n<p>Welcome to the .NET on IBM Power hands-on lab guide. This workshop demonstrates development, deployment, and migration paths for .NET applications on IBM Power systems, covering both Red Hat Enterprise Linux (RHEL) and Red Hat OpenShift Container Platform (OCP) environments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lab Environments<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">RHEL Bastion Server<\/h4>\n\n\n\n<p>You&#8217;ll work with a RHEL-based Bastion server where you&#8217;ll:<\/p>\n\n\n\n<p>&#8211; Install and configure .NET SDK 7.0<\/p>\n\n\n\n<p>&#8211; Create and run basic .NET applications directly on Linux<\/p>\n\n\n\n<p>&#8211; Test applications in a traditional server environment<\/p>\n\n\n\n<p>&#8211; Build container images using Podman<\/p>\n\n\n\n<p>&#8211; Perform version upgrades and migrations<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">OpenShift Container Platform<\/h4>\n\n\n\n<p>You&#8217;ll explore OpenShift capabilities including:<\/p>\n\n\n\n<p>&#8211; Container-based deployments of .NET applications<\/p>\n\n\n\n<p>&#8211; Source-to-Image (S2I) builds<\/p>\n\n\n\n<p>&#8211; Automated deployment workflows<\/p>\n\n\n\n<p>&#8211; Container orchestration and scaling<\/p>\n\n\n\n<p>&#8211; Web-based application access through OpenShift routes<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What You&#8217;ll Learn<\/h3>\n\n\n\n<p>Throughout this lab, you&#8217;ll gain hands-on experience with:<\/p>\n\n\n\n<p>&#8211; Setting up development environments for .NET on IBM Power<\/p>\n\n\n\n<p>&#8211; Creating and testing basic .NET applications<\/p>\n\n\n\n<p>&#8211; Working with source code using Git and GitHub<\/p>\n\n\n\n<p>&#8211; Building and deploying applications using various methods:<\/p>\n\n\n\n<p>&nbsp; &#8211; Direct execution on RHEL<\/p>\n\n\n\n<p>&nbsp; &#8211; Manual containerization with Podman<\/p>\n\n\n\n<p>&nbsp; &#8211; OpenShift S2I deployment<\/p>\n\n\n\n<p>&nbsp; &#8211; Deployment using specialized tools (dotnet-shift and build-image)<\/p>\n\n\n\n<p>&#8211; Migrating applications through .NET versions:<\/p>\n\n\n\n<p>&nbsp; &#8211; Understanding the migration path from .NET 7.0 to 8.0 and 9.0<\/p>\n\n\n\n<p>&nbsp; &#8211; Handling breaking changes and compatibility issues<\/p>\n\n\n\n<p>&nbsp; &#8211; Testing and validating migrations<\/p>\n\n\n\n<p>&nbsp; &#8211; Updating container images and deployments<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites<\/h3>\n\n\n\n<p>Before starting the lab, ensure you have access to:<\/p>\n\n\n\n<p>&#8211; A RHEL-based Bastion LPAR (Logical Partition)<\/p>\n\n\n\n<p>&#8211; An OpenShift Container Platform (OCP) environment running on IBM Power<\/p>\n\n\n\n<p>&#8211; OpenShift user credentials (default username: cecuser)<\/p>\n\n\n\n<p>&#8211; Basic familiarity with Linux commands and container concepts<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lab Structure<\/h3>\n\n\n\n<p>The lab progresses through several sections:<\/p>\n\n\n\n<p>1. Getting Started: Environment setup and configuration<\/p>\n\n\n\n<p>2. Basic .NET Application Development on RHEL<\/p>\n\n\n\n<p>3. Source Code Management with GitHub<\/p>\n\n\n\n<p>4. Container Registry Exploration with Quay.io<\/p>\n\n\n\n<p>5. OpenShift Deployment Methods<\/p>\n\n\n\n<p>6. Advanced Deployment Tools and Techniques<\/p>\n\n\n\n<p>7. Version Migration Procedures:<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Assessing application readiness for migration<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Updating code and dependencies<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Testing on new .NET versions<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Deploying upgraded applications<\/p>\n\n\n\n<p>8. Optional Extended Exercises<\/p>\n\n\n\n<p>Each section provides detailed instructions with expected outputs to help you verify your progress. The migration section will be particularly valuable for organizations planning their .NET upgrade strategy on IBM Power systems.<\/p>\n\n\n\n<p>The lab concludes with optional unguided exercises for further exploration of .NET development, deployment, and migration scenarios on IBM Power systems.<\/p>\n\n\n\n<p>Let&#8217;s begin by setting up your environments and getting familiar with the tools you&#8217;ll be using throughout this lab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Getting-Started\">2 Getting Started<\/h2>\n\n\n\n<p><strong>Please Note<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code><strong>Commands that you should execute are displayed in bold blue txt. Left click within this area to copy the command to you clipboard.<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Example output from commands that have been executed are displayed with white txt with black background.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bullet items are required actions<\/li>\n<\/ul>\n\n\n\n<p>Standard paragraphs are for informational purposes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Assumptions\">2.1 Assumptions<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You have access to an OpenShift Container Platform (OCP) environment running on IBM Power10\n<ul class=\"wp-block-list\">\n<li><strong>Make a note of the OCP Console URL<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>You have access to a RHEL based Bastion LPAR\n<ul class=\"wp-block-list\">\n<li><strong>Make a note of the Bastion IP address<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>The OCP user that you use is \u201ccecuser\u201d, if not, then just substitute \u201ccecuser\u201d for your own OCP user name\n<ul class=\"wp-block-list\">\n<li><strong>Make a note the OCP user name, if not using \u201ccecuser\u201d<\/strong><\/li>\n\n\n\n<li><strong>Make a note of the \u201ccecuser\u201d password<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Connect-to-the-Bastion-CLI\">2.2 Connect to the Bastion CLI<\/h3>\n\n\n\n<p>Now we will go over the steps to connect to the CLI for the environment.<\/p>\n\n\n\n<p>I typically use the Putty application, but you are free to use your favourite terminal.<\/p>\n\n\n\n<p>Putty is available for download&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.putty.org\/\" target=\"_blank\">HERE<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install Putty from the above link if desired.<\/li>\n\n\n\n<li>Open the Putty application.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"894\" height=\"367\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-icon.jpg\" alt=\"\" class=\"wp-image-1418\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-icon.jpg 894w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-icon-300x123.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-icon-768x315.jpg 768w\" sizes=\"auto, (max-width: 894px) 100vw, 894px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fill the hostname with the IP address of your Bastion. This may be found in your assigned Project Kit if using IBM TechZone resources.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"573\" height=\"566\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty.jpg\" alt=\"\" class=\"wp-image-1419\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty.jpg 573w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-300x296.jpg 300w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Press Open<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"554\" height=\"546\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Open.jpg\" alt=\"\" class=\"wp-image-1420\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Open.jpg 554w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Open-300x296.jpg 300w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click Accept<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"607\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Accept.jpg\" alt=\"\" class=\"wp-image-1421\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Accept.jpg 810w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Accept-300x225.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-Accept-768x576.jpg 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You will see a \u201clogin as:\u201d prompt, type cecuser and press enter:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"948\" height=\"473\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-login.jpg\" alt=\"\" class=\"wp-image-1424\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-login.jpg 948w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-login-300x150.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Putty-login-768x383.jpg 768w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter the password for the \u201ccecuser\u201d user. This will be the same for both the CLI and for the GUI.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Login-to-OpenShift\">2.3 Login to OpenShift<\/h3>\n\n\n\n<p>You can watch a silent recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 1 login\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/K-ddfdKFNBA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>To login to the OpenShift environment from the command line, find the&nbsp;<strong><em>oc login<\/em><\/strong>&nbsp;command from your OpenShift GUI.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Point your browser to your OpenShift web console<\/li>\n\n\n\n<li>Accept the certificate warning if certificates have not been configured correctly on demo equipment.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"672\" height=\"541\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Warning.jpg\" alt=\"\" class=\"wp-image-1426\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Warning.jpg 672w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Warning-300x242.jpg 300w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on the htpasswd option:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"441\" height=\"218\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1.jpg\" alt=\"\" class=\"wp-image-1397\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1.jpg 441w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1-300x148.jpg 300w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add your user and password contained on the step 1 and Click login.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"206\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-2-1.jpg\" alt=\"\" class=\"wp-image-1399\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Familiarize yourself with the navigation for approximately 10 minutes if it\u2019s your first time. You can easily switch between Developer and Administrator views using the menu option located at the top left corner.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-1024x481.jpg\" alt=\"\" class=\"wp-image-1400\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-1024x481.jpg 1024w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-300x141.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-768x360.jpg 768w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-1536x721.jpg 1536w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Admin-Dev-2048x961.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Copy-login-command-for-CLI-use\">2.4 Copy login command for CLI use<\/h3>\n\n\n\n<p>You may watch a silent recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 1 login\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/K-ddfdKFNBA?list=PLfJ-244JZEg_Ge0sS9PSafvol_eXpY7xb\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>If you need to login again to the CLI, for any reason, you can find the login command on main OpenShift web console page.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On the top right side, you will see the cecuser drop down click on it and then on \u201cCopy login command\u201d<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"478\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-1024x478.jpg\" alt=\"\" class=\"wp-image-1402\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-1024x478.jpg 1024w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-300x140.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-768x359.jpg 768w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-1536x718.jpg 1536w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Copy-Login-Cmd-2048x957.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once again click on the htpasswd option:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"441\" height=\"218\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1.jpg\" alt=\"\" class=\"wp-image-1397\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1.jpg 441w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-1-300x148.jpg 300w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add your user and password contained on the step 1 and Click login.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"206\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/OCP-Login-2-1.jpg\" alt=\"\" class=\"wp-image-1399\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on Display Token on the top left<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"155\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-1024x155.jpg\" alt=\"\" class=\"wp-image-1404\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-1024x155.jpg 1024w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-300x45.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-768x116.jpg 768w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-1536x232.jpg 1536w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/display-token-2048x310.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can use the oc login command whenever your Authorization is expired. You may need to use the API token for login in into the registry.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"242\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-1024x242.jpg\" alt=\"\" class=\"wp-image-1405\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-1024x242.jpg 1024w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-300x71.jpg 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-768x181.jpg 768w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-1536x362.jpg 1536w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/10\/Token-2048x483.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As cecuser, copy and paste the oc login command from the web page into your Putty Session.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc login --token=&#91;Add your own token] server=&#91;Add you own server]<\/code><\/pre>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>oc login --token=sha256~8HzJyuecqujfeCXsaDnAeUUJ9VMsLafr-cJk5yn8tGk --server=https:\/\/api.p1289.cecc.ihost.com:6443\n\nLogged into \"https:\/\/api.p1289.cecc.ihost.com:6443\" as \"cecuser\" using the token provided.You have access to 71 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project \"default\".<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Install-&amp;-Execute-.NET-application\">3 Install &amp; Execute .NET application<\/h2>\n\n\n\n<p>You can watch a recording of this lab <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 2 install execute dotnet\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/CVt8N01KY7w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the dnf command to install .NET as the root user. You can copy and paste the commands in bold below. Enter Y to continue with installation when asked.<\/li>\n\n\n\n<li><\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install dotnet-sdk-7.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little en 96 kB\/s | 3.8 kB 00:00\nRed Hat Enterprise Linux 8 for Power, little en 72 kB\/s | 2.9 kB 00:00\nRed Hat Enterprise Linux 8 for Power, little en 90 kB\/s | 4.1 kB 00:00\nDependencies resolved.\n================================================================================\nPackage Arch Version Repository Size\n================================================================================\nInstalling:\ndotnet ppc64le 7.0.105-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 18 k\nInstalling dependencies:\naspnetcore-runtime-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 2.8 M\naspnetcore-targeting-pack-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 1.6 M\ndotnet-apphost-pack-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 100 k\ndotnet-host ppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 199 k\ndotnet-hostfxr-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 174 k\ndotnet-runtime-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 7.8 M\ndotnet-sdk-7.0 ppc64le 7.0.105-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 52 M\ndotnet-targeting-pack-7.0\nppc64le 7.0.5-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 2.9 M\ndotnet-templates-7.0\nppc64le 7.0.105-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 3.9 M\nnetstandard-targeting-pack-2.1\nppc64le 7.0.105-2.el8_8 rhel-8-for-ppc64le-appstream-rpms 1.5 M\nTransaction Summary\n================================================================================\nInstall 11 Packages\nTotal download size: 73 M\nInstalled size: 308 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/11): dotnet-7.0.105-2.el8_8.ppc64le.rpm 203 kB\/s | 18 kB 00:00\n(2\/11): dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm 1.8 MB\/s | 100 kB 00:00\n(3\/11): aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm 10 MB\/s | 1.6 MB 00:00\n(4\/11): aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm 14 MB\/s | 2.8 MB 00:00\n(5\/11): dotnet-host-7.0.5-2.el8_8.ppc64le.rpm 3.4 MB\/s | 199 kB 00:00\n(6\/11): dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le.rpm 2.8 MB\/s | 174 kB 00:00\n(7\/11): dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm 16 MB\/s | 2.9 MB 00:00\n(8\/11): dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm 22 MB\/s | 7.8 MB 00:00\n(9\/11): dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le.rpm 18 MB\/s | 3.9 MB 00:00\n(10\/11): netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le.rpm 14 MB\/s | 1.5 MB 00:00\n(11\/11): dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le.rpm 48 MB\/s | 52 MB 00:01\n----------------------------------------------------------------------------------------------------------------------\nTotal 56 MB\/s | 73 MB 00:01\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\nPreparing : 1\/1\nInstalling : dotnet-host-7.0.5-2.el8_8.ppc64le 1\/11\nInstalling : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le 2\/11\nInstalling : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le 3\/11\nInstalling : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le 4\/11\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n11\nInstalling : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le 5\/11\nInstalling : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le 6\/11\nInstalling : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le 7\/11\nInstalling : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le 8\/11\nInstalling : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le 9\/11\nInstalling : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le 10\/11\nInstalling : dotnet-7.0.105-2.el8_8.ppc64le 11\/11\nRunning scriptlet: dotnet-7.0.105-2.el8_8.ppc64le 11\/11\nVerifying : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le 1\/11\nVerifying : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le 2\/11\nVerifying : dotnet-7.0.105-2.el8_8.ppc64le 3\/11\nVerifying : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le 4\/11\nVerifying : dotnet-host-7.0.5-2.el8_8.ppc64le 5\/11\nVerifying : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le 6\/11\nVerifying : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le 7\/11\nVerifying : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le 8\/11\nVerifying : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le 9\/11\nVerifying : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le 10\/11\nVerifying : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le 11\/11\nInstalled products updated.\nInstalled:\naspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le\ndotnet-7.0.105-2.el8_8.ppc64le dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le\ndotnet-host-7.0.5-2.el8_8.ppc64le dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le\ndotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le\ndotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le\nnetstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le\nComplete!<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the version of .NET installed. .NET was made available from Red Hat at version 7 in Nov \u201922. Version 8 is currently target GA Nov \u201923. Both .NET 8.0 and 9.0 have been released since the creation of this lab. <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet --version<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>7.0.105<\/code><\/pre>\n\n\n\n<p>Create basic .NET application<\/p>\n\n\n\n<p>In this section we will create a \u201cHello World\u201d project.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a new project called \u201chello\u201d to host a \u201chello world\u201d simple application. We can use new console to do that.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet new console -o MyApp -f net7.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>The template \"Console App\" was created successfully.\nProcessing post-creation actions...\nRestoring \/home\/cecuser\/MyApp\/MyApp.csproj:\nDetermining projects to restore...\nRestored \/home\/cecuser\/MyApp\/MyApp.csproj (in 240 ms).\nRestore succeeded.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change into the project directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd MyApp<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The main file in the MyApp folder is called Program.cs. By default, it already contains the necessary code to write Hello, World! to the console. Take a look at the Hello World code<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cat Program.cs<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>\/\/ See https:\/\/aka.ms\/new-console-template for more information\nConsole.WriteLine(\"Hello, World!\");<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now let\u2019s run the app and make a note of the runtime.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>time dotnet run<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Hello, World!\nreal 0m4.547s\nuser 0m4.717s\nsys 0m0.121s<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the Program.cs file in any text or code editor, (I use vi). The Program.cs file is located on the newly created MyApp directory. Then, add the additional line to print the current time.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>vi Program.cs<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>Console.WriteLine(\"The current time is \" + DateTime.Now);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cat Program.cs<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>\/\/ See https:\/\/aka.ms\/new-console-template for more information\nConsole.WriteLine(\"Hello, World!\");\nConsole.WriteLine(\"The current time is \" + DateTime.Now);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now let\u2019s run the app again and note the change.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>time dotnet run<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Hello, World!\nThe current time is 6\/6\/2023 2:46:52 PM\nreal 0m8.838s\nuser 0m4.926s\nsys 0m0.130s<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now let\u2019s publish the application. dotnet publish compiles the application, reads through its dependencies specified in the project file (*.csproj), and publishes the resulting set of files to a directory. The dotnet publish command&#8217;s output is ready for deployment to a hosting system.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet publish<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>MSBuild version 17.4.3+7e646be43 for .NET\nDetermining projects to restore...\nAll projects are up-to-date for restore.\nMyApp -&gt; \/home\/cecuser\/MyApp\/bin\/Debug\/net7.0\/MyApp.dll\nMyApp -&gt; \/home\/cecuser\/MyApp\/bin\/Debug\/net7.0\/publish\/<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now let\u2019s run the compiled version and compare the run time from before. Note how much faster that was than before the publish!<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>time dotnet .\/bin\/Debug\/net7.0\/MyApp.dll<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Hello, World!\nThe current time is 6\/6\/2023 3:06:47 PM\nreal 0m0.256s\nuser 0m0.246s\nsys 0m0.011s<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Explore-GitHub\">4. Explore GitHub<\/h2>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 3 explore GitHub\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/KIV2UVzr4so?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Install git on Power with RHEL 8<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the dnf command to install git as the root user. Enter Y, to continue with installation.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little endian - Supplementary (RPMs) 80 kB\/s | 3.8 kB 00:00\nRed Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs) 77 kB\/s | 2.9 kB 00:00\nRed Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs) 103 kB\/s | 4.1 kB 00:00\nDependencies resolved.\n======================================================================================================================\nPackage Architecture Version Repository Size\n======================================================================================================================\nInstalling:\ngit ppc64le 2.39.3-1.el8_8 rhel-8-for-ppc64le-appstream-rpms 104 k\nInstalling dependencies:\ngit-core ppc64le 2.39.3-1.el8_8 rhel-8-for-ppc64le-appstream-rpms 12 M\ngit-core-doc noarch 2.39.3-1.el8_8 rhel-8-for-ppc64le-appstream-rpms 3.0 M\nperl-Error noarch 1:0.17025-2.el8 rhel-8-for-ppc64le-appstream-rpms 46 k\nperl-Git noarch 2.39.3-1.el8_8 rhel-8-for-ppc64le-appstream-rpms 79 k\nperl-TermReadKey ppc64le 2.37-7.el8 rhel-8-for-ppc64le-appstream-rpms 42 k\nTransaction Summary\n======================================================================================================================\nInstall 6 Packages\nTotal download size: 15 M\nInstalled size: 53 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/6): git-2.39.3-1.el8_8.ppc64le.rpm 2.1 MB\/s | 104 kB 00:00\n(2\/6): perl-Error-0.17025-2.el8.noarch.rpm 1.7 MB\/s | 46 kB 00:00\n(3\/6): perl-Git-2.39.3-1.el8_8.noarch.rpm 2.3 MB\/s | 79 kB 00:00\n(4\/6): git-core-doc-2.39.3-1.el8_8.noarch.rpm 20 MB\/s | 3.0 MB 00:00\n(5\/6): perl-TermReadKey-2.37-7.el8.ppc64le.rpm 1.0 MB\/s | 42 kB 00:00\n(6\/6): git-core-2.39.3-1.el8_8.ppc64le.rpm 41 MB\/s | 12 MB 00:00\n----------------------------------------------------------------------------------------------------------------------\nTotal 51 MB\/s | 15 MB 00:00\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\nPreparing : 1\/1\nInstalling : git-core-2.39.3-1.el8_8.ppc64le 1\/6\nInstalling : git-core-doc-2.39.3-1.el8_8.noarch 2\/6\nInstalling : perl-TermReadKey-2.37-7.el8.ppc64le 3\/6\nInstalling : perl-Error-1:0.17025-2.el8.noarch 4\/6\nInstalling : perl-Git-2.39.3-1.el8_8.noarch 5\/6\nInstalling : git-2.39.3-1.el8_8.ppc64le 6\/6\nRunning scriptlet: git-2.39.3-1.el8_8.ppc64le 6\/6\nVerifying : git-2.39.3-1.el8_8.ppc64le 1\/6\nVerifying : git-core-2.39.3-1.el8_8.ppc64le 2\/6\nVerifying : git-core-doc-2.39.3-1.el8_8.noarch 3\/6\nVerifying : perl-Error-1:0.17025-2.el8.noarch 4\/6\nVerifying : perl-Git-2.39.3-1.el8_8.noarch 5\/6\nVerifying : perl-TermReadKey-2.37-7.el8.ppc64le 6\/6\nInstalled products updated.\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n15\nInstalled:\ngit-2.39.3-1.el8_8.ppc64le git-core-2.39.3-1.el8_8.ppc64le git-core-doc-2.39.3-1.el8_8.noarch\nperl-Error-1:0.17025-2.el8.noarch perl-Git-2.39.3-1.el8_8.noarch perl-TermReadKey-2.37-7.el8.ppc64le\nComplete!<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the level version of git installed<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git --version<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>git version 2.39.3<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explore GitHub repositories containing .NET source<\/h3>\n\n\n\n<p>In this section we will four GitHub repositories containing .NET application source.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul Chapman\u2019s overview page on GitHub.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"324\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image.png\" alt=\"\" class=\"wp-image-1852\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-300x152.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Paul&#8217;s Github Overview Page<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul\u2019s Repositories page on GitHub<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm?tab=repositories<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"308\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-1.png\" alt=\"\" class=\"wp-image-1854\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-1.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-1-300x145.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Paul&#8217;s Github Repositories<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul\u2019s SignalRChat repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm\/SignalRChat<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"308\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-2.png\" alt=\"\" class=\"wp-image-1855\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-2.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-2-300x145.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">SignalRChat<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul\u2019s stayingalive repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm\/stayingalive<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"312\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-3.png\" alt=\"\" class=\"wp-image-1856\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-3.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-3-300x146.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Stayingalive<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul\u2019s Blazor1App1 repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm\/BlazorApp1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"288\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-4.png\" alt=\"\" class=\"wp-image-1857\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-4.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-4-300x135.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">BlazorApp1<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore Paul\u2019s Blazor1App1 repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm\/myMLApp<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"293\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-5.png\" alt=\"\" class=\"wp-image-1858\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-5.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-5-300x138.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Blazor1App<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Clone SignalRchat source<\/h3>\n\n\n\n<p>In this section we will clone .NET application using SignalR library.<br>ASP.NET Core SignalR is an open-source library that simplifies adding real-time web functionality to apps. Realtime web functionality enables server-side code to push content to clients instantly. Good candidates for SignalR: Apps that require high frequency updates from the server.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to cecuser home directory.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a build directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>mkdir build<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the new build directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd build<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now let\u2019s clone the SignalRchat source code from GitHub to our Power server<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/SignalRChat.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'SignalRChat'...\nremote: Enumerating objects: 158, done.\nremote: Counting objects: 100% (158\/158), done.\nremote: Compressing objects: 100% (104\/104), done.\nremote: Total 158 (delta 60), reused 139 (delta 46), pack-reused 0\nReceiving objects: 100% (158\/158), 906.94 KiB | 9.45 MiB\/s, done.\nResolving deltas: 100% (60\/60), done.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Next, clone the stayingalive repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/stayingalive.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'stayingalive'...\nremote: Enumerating objects: 136, done.\nremote: Counting objects: 100% (136\/136), done.\nremote: Compressing objects: 100% (88\/88), done.\nremote: Total 136 (delta 54), reused 114 (delta 42), pack-reused 0\nReceiving objects: 100% (136\/136), 865.36 KiB | 14.42 MiB\/s, done.\nResolving deltas: 100% (54\/54), done.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Next, clone the BlazorApp1 repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/BlazorApp1<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Finally, clone the myMLApp repository<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/myMLApp.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'myMLApp'...\nremote: Enumerating objects: 39, done.\nremote: Counting objects: 100% (39\/39), done.\nremote: Compressing objects: 100% (26\/26), done.\nremote: Total 39 (delta 10), reused 26 (delta 7), pack-reused 0\nReceiving objects: 100% (39\/39), 238.10 KiB | 8.21 MiB\/s, done.\nResolving deltas: 100% (10\/10), done.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now, take some time to review the directory structure of the cloned repositories<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls -lR SignalRChat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>SignalRChat:\ntotal 20\n-rw-rw-r--. 1 cecuser cecuser 1243 Jun 6 16:44 Dockerfile\n-rw-rw-r--. 1 cecuser cecuser 1243 Jun 6 16:44 Dockerfile.ppc64le\n-rw-rw-r--. 1 cecuser cecuser 705 Jun 6 16:44 Dockerfile.x86\n-rw-rw-r--. 1 cecuser cecuser 2032 Jun 6 16:44 README.md\ndrwxrwxr-x. 6 cecuser cecuser 251 Jun 6 16:44 SignalRChat\n-rw-rw-r--. 1 cecuser cecuser 1114 Jun 6 16:44 SignalRChat.sln\nSignalRChat\/SignalRChat:\ntotal 28\n-rw-rw-r--. 1 cecuser cecuser 145 Jun 6 16:44 appsettings.Development.json\n-rw-rw-r--. 1 cecuser cecuser 142 Jun 6 16:44 appsettings.json\ndrwxrwxr-x. 2 cecuser cecuser 24 Jun 6 16:44 Hubs\n-rw-rw-r--. 1 cecuser cecuser 274 Jun 6 16:44 libman.json\ndrwxrwxr-x. 3 cecuser cecuser 205 Jun 6 16:44 Pages\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n21\n-rw-rw-r--. 1 cecuser cecuser 430 Jun 6 16:44 Program.cs\ndrwxrwxr-x. 2 cecuser cecuser 33 Jun 6 16:44 Properties\n-rw-rw-r--. 1 cecuser cecuser 210 Jun 6 16:44 SignalRChat.csproj\n-rw-rw-r--. 1 cecuser cecuser 210 Jun 6 16:44 SignalRChat.csproj.ppc64le\n-rw-rw-r--. 1 cecuser cecuser 475 Jun 6 16:44 SignalRChat.csproj.x86\ndrwxrwxr-x. 5 cecuser cecuser 57 Jun 6 16:44 wwwroot\nSignalRChat\/SignalRChat\/Hubs:\ntotal 4\n-rw-rw-r--. 1 cecuser cecuser 274 Jun 6 16:44 ChatHub.cs\nSignalRChat\/SignalRChat\/Pages:\ntotal 32\n-rw-rw-r--. 1 cecuser cecuser 856 Jun 6 16:44 Error.cshtml\n-rw-rw-r--. 1 cecuser cecuser 708 Jun 6 16:44 Error.cshtml.cs\n-rw-rw-r--. 1 cecuser cecuser 814 Jun 6 16:44 Index.cshtml\n-rw-rw-r--. 1 cecuser cecuser 371 Jun 6 16:44 Index.cshtml.cs\n-rw-rw-r--. 1 cecuser cecuser 164 Jun 6 16:44 Privacy.cshtml\n-rw-rw-r--. 1 cecuser cecuser 378 Jun 6 16:44 Privacy.cshtml.cs\ndrwxrwxr-x. 2 cecuser cecuser 94 Jun 6 16:44 Shared\n-rw-rw-r--. 1 cecuser cecuser 104 Jun 6 16:44 _ViewImports.cshtml\n-rw-rw-r--. 1 cecuser cecuser 32 Jun 6 16:44 _ViewStart.cshtml\nSignalRChat\/SignalRChat\/Pages\/Shared:\ntotal 12\n-rw-rw-r--. 1 cecuser cecuser 2240 Jun 6 16:44 _Layout.cshtml\n-rw-rw-r--. 1 cecuser cecuser 876 Jun 6 16:44 _Layout.cshtml.css\n-rw-rw-r--. 1 cecuser cecuser 174 Jun 6 16:44 _ValidationScriptsPartial.cshtml\nSignalRChat\/SignalRChat\/Properties:\ntotal 4\n-rw-rw-r--. 1 cecuser cecuser 876 Jun 6 16:44 launchSettings.json\nSignalRChat\/SignalRChat\/wwwroot:\ntotal 8\ndrwxrwxr-x. 2 cecuser cecuser 22 Jun 6 16:44 css\n-rw-rw-r--. 1 cecuser cecuser 5430 Jun 6 16:44 favicon.ico\ndrwxrwxr-x. 3 cecuser cecuser 51 Jun 6 16:44 js\ndrwxrwxr-x. 6 cecuser cecuser 99 Jun 6 16:44 lib\nSignalRChat\/SignalRChat\/wwwroot\/css:\ntotal 4\n-rw-rw-r--. 1 cecuser cecuser 177 Jun 6 16:44 site.css\nSignalRChat\/SignalRChat\/wwwroot\/js:\ntotal 8\n-rw-rw-r--. 1 cecuser cecuser 1193 Jun 6 16:44 chat.js\ndrwxrwxr-x. 3 cecuser cecuser 18 Jun 6 16:44 signalr\n-rw-rw-r--. 1 cecuser cecuser 226 Jun 6 16:44 site.js\nSignalRChat\/SignalRChat\/wwwroot\/js\/signalr:\ntotal 0\ndrwxrwxr-x. 3 cecuser cecuser 21 Jun 6 16:44 dist\nSignalRChat\/SignalRChat\/wwwroot\/js\/signalr\/dist:\ntotal 0\ndrwxrwxr-x. 2 cecuser cecuser 46 Jun 6 16:44 browser\nSignalRChat\/SignalRChat\/wwwroot\/js\/signalr\/dist\/browser:\ntotal 184\n-rw-rw-r--. 1 cecuser cecuser 139734 Jun 6 16:44 signalr.js\n-rw-rw-r--. 1 cecuser cecuser 43394 Jun 6 16:44 signalr.min.js\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n22\nSignalRChat\/SignalRChat\/wwwroot\/lib:\ntotal 0\ndrwxrwxr-x. 3 cecuser cecuser 33 Jun 6 16:44 bootstrap\ndrwxrwxr-x. 3 cecuser cecuser 37 Jun 6 16:44 jquery\ndrwxrwxr-x. 3 cecuser cecuser 36 Jun 6 16:44 jquery-validation\ndrwxrwxr-x. 2 cecuser cecuser 105 Jun 6 16:44 jquery-validation-unobtrusive\nSignalRChat\/SignalRChat\/wwwroot\/lib\/bootstrap:\ntotal 4\ndrwxrwxr-x. 4 cecuser cecuser 27 Jun 6 16:44 dist\n-rw-rw-r--. 1 cecuser cecuser 1131 Jun 6 16:44 LICENSE\nSignalRChat\/SignalRChat\/wwwroot\/lib\/bootstrap\/dist:\ntotal 8\ndrwxrwxr-x. 2 cecuser cecuser 4096 Jun 6 16:44 css\ndrwxrwxr-x. 2 cecuser cecuser 4096 Jun 6 16:44 js\nSignalRChat\/SignalRChat\/wwwroot\/lib\/bootstrap\/dist\/css:\ntotal 4896\n-rw-rw-r--. 1 cecuser cecuser 204136 Jun 6 16:44 bootstrap.css\n-rw-rw-r--. 1 cecuser cecuser 536547 Jun 6 16:44 bootstrap.css.map\n-rw-rw-r--. 1 cecuser cecuser 70538 Jun 6 16:44 bootstrap-grid.css\n-rw-rw-r--. 1 cecuser cecuser 196535 Jun 6 16:44 bootstrap-grid.css.map\n-rw-rw-r--. 1 cecuser cecuser 51319 Jun 6 16:44 bootstrap-grid.min.css\n-rw-rw-r--. 1 cecuser cecuser 117439 Jun 6 16:44 bootstrap-grid.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 70612 Jun 6 16:44 bootstrap-grid.rtl.css\n-rw-rw-r--. 1 cecuser cecuser 196539 Jun 6 16:44 bootstrap-grid.rtl.css.map\n-rw-rw-r--. 1 cecuser cecuser 51394 Jun 6 16:44 bootstrap-grid.rtl.min.css\n-rw-rw-r--. 1 cecuser cecuser 117516 Jun 6 16:44 bootstrap-grid.rtl.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 162720 Jun 6 16:44 bootstrap.min.css\n-rw-rw-r--. 1 cecuser cecuser 449111 Jun 6 16:44 bootstrap.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 5850 Jun 6 16:44 bootstrap-reboot.css\n-rw-rw-r--. 1 cecuser cecuser 105138 Jun 6 16:44 bootstrap-reboot.css.map\n-rw-rw-r--. 1 cecuser cecuser 4646 Jun 6 16:44 bootstrap-reboot.min.css\n-rw-rw-r--. 1 cecuser cecuser 35330 Jun 6 16:44 bootstrap-reboot.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 5827 Jun 6 16:44 bootstrap-reboot.rtl.css\n-rw-rw-r--. 1 cecuser cecuser 105151 Jun 6 16:44 bootstrap-reboot.rtl.css.map\n-rw-rw-r--. 1 cecuser cecuser 4718 Jun 6 16:44 bootstrap-reboot.rtl.min.css\n-rw-rw-r--. 1 cecuser cecuser 41570 Jun 6 16:44 bootstrap-reboot.rtl.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 203803 Jun 6 16:44 bootstrap.rtl.css\n-rw-rw-r--. 1 cecuser cecuser 536461 Jun 6 16:44 bootstrap.rtl.css.map\n-rw-rw-r--. 1 cecuser cecuser 162825 Jun 6 16:44 bootstrap.rtl.min.css\n-rw-rw-r--. 1 cecuser cecuser 661035 Jun 6 16:44 bootstrap.rtl.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 71584 Jun 6 16:44 bootstrap-utilities.css\n-rw-rw-r--. 1 cecuser cecuser 192271 Jun 6 16:44 bootstrap-utilities.css.map\n-rw-rw-r--. 1 cecuser cecuser 53479 Jun 6 16:44 bootstrap-utilities.min.css\n-rw-rw-r--. 1 cecuser cecuser 111875 Jun 6 16:44 bootstrap-utilities.min.css.map\n-rw-rw-r--. 1 cecuser cecuser 71451 Jun 6 16:44 bootstrap-utilities.rtl.css\n-rw-rw-r--. 1 cecuser cecuser 192214 Jun 6 16:44 bootstrap-utilities.rtl.css.map\n-rw-rw-r--. 1 cecuser cecuser 53407 Jun 6 16:44 bootstrap-utilities.rtl.min.css\n-rw-rw-r--. 1 cecuser cecuser 111710 Jun 6 16:44 bootstrap-utilities.rtl.min.css.map\nSignalRChat\/SignalRChat\/wwwroot\/lib\/bootstrap\/dist\/js:\ntotal 2440\n-rw-rw-r--. 1 cecuser cecuser 208492 Jun 6 16:44 bootstrap.bundle.js\n-rw-rw-r--. 1 cecuser cecuser 425643 Jun 6 16:44 bootstrap.bundle.js.map\n-rw-rw-r--. 1 cecuser cecuser 78468 Jun 6 16:44 bootstrap.bundle.min.js\n-rw-rw-r--. 1 cecuser cecuser 327261 Jun 6 16:44 bootstrap.bundle.min.js.map\n-rw-rw-r--. 1 cecuser cecuser 139019 Jun 6 16:44 bootstrap.esm.js\n-rw-rw-r--. 1 cecuser cecuser 288320 Jun 6 16:44 bootstrap.esm.js.map\n-rw-rw-r--. 1 cecuser cecuser 72016 Jun 6 16:44 bootstrap.esm.min.js\n-rw-rw-r--. 1 cecuser cecuser 222508 Jun 6 16:44 bootstrap.esm.min.js.map\n-rw-rw-r--. 1 cecuser cecuser 148168 Jun 6 16:44 bootstrap.js\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n23\n-rw-rw-r--. 1 cecuser cecuser 289522 Jun 6 16:44 bootstrap.js.map\n-rw-rw-r--. 1 cecuser cecuser 59511 Jun 6 16:44 bootstrap.min.js\n-rw-rw-r--. 1 cecuser cecuser 217145 Jun 6 16:44 bootstrap.min.js.map\nSignalRChat\/SignalRChat\/wwwroot\/lib\/jquery:\ntotal 4\ndrwxrwxr-x. 2 cecuser cecuser 66 Jun 6 16:44 dist\n-rw-rw-r--. 1 cecuser cecuser 1605 Jun 6 16:44 LICENSE.txt\nSignalRChat\/SignalRChat\/wwwroot\/lib\/jquery\/dist:\ntotal 508\n-rw-rw-r--. 1 cecuser cecuser 287630 Jun 6 16:44 jquery.js\n-rw-rw-r--. 1 cecuser cecuser 89476 Jun 6 16:44 jquery.min.js\n-rw-rw-r--. 1 cecuser cecuser 137974 Jun 6 16:44 jquery.min.map\nSignalRChat\/SignalRChat\/wwwroot\/lib\/jquery-validation:\ntotal 4\ndrwxrwxr-x. 2 cecuser cecuser 124 Jun 6 16:44 dist\n-rw-rw-r--. 1 cecuser cecuser 1095 Jun 6 16:44 LICENSE.md\nSignalRChat\/SignalRChat\/wwwroot\/lib\/jquery-validation\/dist:\ntotal 136\n-rw-rw-r--. 1 cecuser cecuser 42027 Jun 6 16:44 additional-methods.js\n-rw-rw-r--. 1 cecuser cecuser 18464 Jun 6 16:44 additional-methods.min.js\n-rw-rw-r--. 1 cecuser cecuser 48676 Jun 6 16:44 jquery.validate.js\n-rw-rw-r--. 1 cecuser cecuser 23261 Jun 6 16:44 jquery.validate.min.js\nSignalRChat\/SignalRChat\/wwwroot\/lib\/jquery-validation-unobtrusive:\ntotal 32\n-rw-rw-r--. 1 cecuser cecuser 19366 Jun 6 16:44 jquery.validate.unobtrusive.js\n-rw-rw-r--. 1 cecuser cecuser 5868 Jun 6 16:44 jquery.validate.unobtrusive.min.js\n-rw-rw-r--. 1 cecuser cecuser 575 Jun 6 16:44 LICENSE.txt<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls -l \/home\/cecuser\/build<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>total 0\ndrwxrwxr-x. 5 cecuser cecuser 148 Jun 6 16:47 BlazorApp1\ndrwxrwxr-x. 7 cecuser cecuser 185 Jun 6 16:49 myMLApp\ndrwxrwxr-x. 5 cecuser cecuser 216 Jun 6 16:44 SignalRChat\ndrwxrwxr-x. 5 cecuser cecuser 218 Jun 6 16:45 stayingalive<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Explore-Quay.io\">5 Explore Quay.io<\/h2>\n\n\n\n<p>This part of the Lab will guide you through initial exploration of the Quay.io site.<\/p>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 4 Explore Quay io\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/UwLcvgMvLa8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Explore the Quay.io site<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigate your browser to <a rel=\"noreferrer noopener\" href=\"https:\/\/quay.io\" target=\"_blank\">https:\/\/quay.io<\/a> and spend a little time to navigate the site.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"334\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-6.png\" alt=\"\" class=\"wp-image-1859\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-6.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-6-300x157.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Quay.io<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select explore or follow the <a rel=\"noreferrer noopener\" href=\"https:\/\/quay.io\/search\" target=\"_blank\">https:\/\/quay.io\/search<\/a> link and search for container images.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/search<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Search for anything you like, but here\u2019s some ideas for you to try ppc64le, .net, dotnet, signalrchat, blazor1, stayingalive<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/search?q=stayingalive<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"330\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-7.png\" alt=\"\" class=\"wp-image-1860\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-7.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-7-300x155.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">Search Quay.io &#8211; stayingalive<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There is also a specific Quay.io tutorial provided by Red Hat that you may follow when time allows. <a href=\"https:\/\/quay.io\/tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/quay.io\/tutorial\/<\/a> <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/tutorial\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"334\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-8.png\" alt=\"\" class=\"wp-image-1861\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-8.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-8-300x157.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Pull .NET application containers from Quay.io to local Power server running RHEL<\/h3>\n\n\n\n<p>In this section we will pull .NET based application containers from the Quay.io registry.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Look at Paul\u2019s Quay.io repository, hosting .NET based containers used in this class. Note that I have created containers for both x86 and ppc64le, using the same source code.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/user\/paulchapmanibm\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"309\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-9.png\" alt=\"\" class=\"wp-image-1862\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-9.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-9-300x145.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log into the bastion server using Putty, or favorite terminal as cecuser and change directory to the build directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>pwd<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>\/home\/cecuser<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd build<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>BlazorApp1 myMLApp SignalRChat stayingalive<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You will find the docker and podman commands to pull a container from Quay.io in the container\u2019s information area. We will use the podman command to pull the container images to our local Power server<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/repository\/paulchapmanibm\/ppc64le\/stayingalive<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"331\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-10.png\" alt=\"\" class=\"wp-image-1863\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-10.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-10-300x155.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/quay.io\/repository\/paulchapmanibm\/ppc64le\/stayingalive\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/quay.io\/repository\/paulchapmanibm\/ppc64le\/signalrchat<\/a><\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/repository\/paulchapmanibm\/ppc64le\/signalrchat<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"323\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-11.png\" alt=\"\" class=\"wp-image-1864\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-11.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-11-300x152.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\">https:\/\/quay.io\/repository\/paulchapmanibm\/ppc64le\/signalrchat<\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;quay.io\/repository\/paulchapmanibm\/ppc64le\/blazor1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"322\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-12.png\" alt=\"\" class=\"wp-image-1865\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-12.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-12-300x151.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/quay.io\/repository\/paulchapmanibm\/ppc64le\/blazor1\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/quay.io\/repository\/paulchapmanibm\/ppc64le\/blazor1<\/a><\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy, paste and execute each of the three podman commands from the relevant container image information areas to pull the container image to your server.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman pull quay.io\/paulchapmanibm\/ppc64le\/stayingalive<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Trying to pull quay.io\/paulchapmanibm\/ppc64le\/stayingalive:latest...\nGetting image source signatures\nCopying blob 88208a270532 done\nCopying blob e99a72e50597 done\nCopying blob d3ed8aa0df2d done\nCopying blob ae222cd8449d done\nCopying config b07b0d97a4 done\nWriting manifest to image destination\nStoring signatures\nb07b0d97a4e418b4a89fb803387546538a8f45c918151b8c8907495ce8441098<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman pull quay.io\/paulchapmanibm\/ppc64le\/signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Trying to pull quay.io\/paulchapmanibm\/ppc64le\/signalrchat:latest...\nGetting image source signatures\nCopying blob e3cbbedef2d9 done\nCopying blob ae222cd8449d skipped: already exists\nCopying blob e99a72e50597 skipped: already exists\nCopying blob d3ed8aa0df2d skipped: already exists\nCopying config 9733a78ecb done\nWriting manifest to image destination\nStoring signatures\n9733a78ecb79e58065c4c28ee12f5977138cc08c1679158991e480e4c47e8292<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman pull quay.io\/paulchapmanibm\/ppc64le\/blazor1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Trying to pull quay.io\/paulchapmanibm\/ppc64le\/blazor1:latest...\nGetting image source signatures\nCopying blob c5787e03b7df done\nCopying blob ae222cd8449d skipped: already exists\nCopying blob e99a72e50597 skipped: already exists\nCopying blob d3ed8aa0df2d skipped: already exists\nCopying config 4a74cdf9c4 done\nWriting manifest to image destination\nStoring signatures<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm local access to the container images using the podman images command <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE\nquay.io\/paulchapmanibm\/ppc64le\/blazor1 latest 4a74cdf9c4ea 3 months ago 621 MB\nquay.io\/paulchapmanibm\/ppc64le\/stayingalive latest b07b0d97a4e4 3 months ago 629 MB\nquay.io\/paulchapmanibm\/ppc64le\/signalrchat latest 9733a78ecb79 5 months ago 629 MB<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Explore-Podman\">6 Explore Podman<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Start and stop containers<\/h3>\n\n\n\n<p>In this section we will start and stop a container, recently pulled from Quay.io.<\/p>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 5 Explore Podman\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/_DqmbfQjjLo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Explore Podman<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm local access to the container images using the podman images command<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE\nquay.io\/paulchapmanibm\/ppc64le\/blazor1 latest 4a74cdf9c4ea 3 months ago 621 MB\nquay.io\/paulchapmanibm\/ppc64le\/stayingalive latest b07b0d97a4e4 3 months ago 629 MB\nquay.io\/paulchapmanibm\/ppc64le\/signalrchat latest 9733a78ecb79 5 months ago 629 MB<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start one or more of the containers to run the .NET application<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman run blazor1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository&#91;60]\nStoring keys in a directory '\/opt\/app-root\/.aspnet\/DataProtection-Keys' that may not be\npersisted outside of the container. Protected data will be unavailable when container is\ndestroyed.\nwarn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager&#91;35]\nNo XML encryptor configured. Key {3d8e4a67-1017-4e69-a5b7-a0de5692bb59} may be\npersisted to storage in unencrypted form.\ninfo: Microsoft.Hosting.Lifetime&#91;14]\nNow listening on: http:\/\/&#91;::]:8080\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nApplication started. Press Ctrl+C to shut down.\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nHosting environment: Production\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nContent root path: \/opt\/app-root\/app<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now stop the container with CTRL +C<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>info: Microsoft.Hosting.Lifetime&#91;14]\nNow listening on: http:\/\/&#91;::]:8080\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nApplication started. Press Ctrl+C to shut down.\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n31\nHosting environment: Production\ninfo: Microsoft.Hosting.Lifetime&#91;0]\nContent root path: \/opt\/app-root\/app\n^Cinfo: Microsoft.Hosting.Lifetime&#91;0]\nApplication is shutting down...<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm local access to the container images using the podman images command<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE\nquay.io\/paulchapmanibm\/ppc64le\/blazor1 latest 4a74cdf9c4ea 3 months ago 621 MB\nquay.io\/paulchapmanibm\/ppc64le\/stayingalive latest b07b0d97a4e4 3 months ago 629 MB\nquay.io\/paulchapmanibm\/ppc64le\/signalrchat latest 9733a78ecb79 5 months ago 629 MB<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Remove container images using podman<\/h3>\n\n\n\n<p>In this section we will remove the previously obtained container images using the podman command.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify the containers to remove using the podman images command. Note the IMAGE ID of each container.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE\nquay.io\/paulchapmanibm\/ppc64le\/blazor1 latest 4a74cdf9c4ea 3 months ago 621 MB\nquay.io\/paulchapmanibm\/ppc64le\/stayingalive latest b07b0d97a4e4 3 months ago 629 MB\nquay.io\/paulchapmanibm\/ppc64le\/signalrchat latest 9733a78ecb79 5 months ago 629 MB<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now remove the container images using the podman command. Note that the ID\u2019s for your containers may be different, and that I have forced the removal of multiple containers at the same time in the example below<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman rmi &lt;add_your-id&gt; &lt;add_your-id&gt; &lt;add_your-id&gt; -f<\/code><\/pre>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>podman rmi 4a74cdf9c4ea b07b0d97a4e4 9733a78ecb79 -f<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Untagged: quay.io\/paulchapmanibm\/ppc64le\/blazor1:latest\nUntagged: quay.io\/paulchapmanibm\/ppc64le\/stayingalive:latest\nUntagged: quay.io\/paulchapmanibm\/ppc64le\/signalrchat:latest\nDeleted: 4a74cdf9c4ead4056e21633db16ff26b40eced1f0bfb6b3803141d9a30c2e53e\nDeleted: b07b0d97a4e418b4a89fb803387546538a8f45c918151b8c8907495ce8441098\nDeleted: 9733a78ecb79e58065c4c28ee12f5977138cc08c1679158991e480e4c47e8292<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm the containers are no longer available<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Deploy-Message-App-Manually\">7 Deploy Message App Manually<\/h2>\n\n\n\n<p>This part of the lab will guide you through process of cloning the code hosted on GitHub, inspecting the files to understand how the code is organized to build container images. This part of the lab will be completed using the user \u201ccecuser\u201d.<\/p>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 6 Deploy Msg App Manually\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/oRcaBL9_htM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Deploy Message App Manually<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Obtain the dotnet container image<\/h3>\n\n\n\n<p>Quay.io is a registry for storing and building container images as well as distributing other OCI artifacts.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check you have the correct user. The whoami command should return cecuser<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>whoami<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>cecuser<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Obtain the dotnet image from Quay.io registry<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman pull quay.io\/paulchapmanibm\/ppc64le\/dotnet-70<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Trying to pull quay.io\/paulchapmanibm\/ppc64le\/dotnet-70:latest...\nGetting image source signatures\nCopying blob ae222cd8449d done   |\nCopying blob d3ed8aa0df2d done   |\nCopying blob e99a72e50597 done   |\nCopying config f579cd2fc8 done   |\nWriting manifest to image destination\nf579cd2fc8b3b2cccf68aea14afb1b04770bda24d4de5e395031a278f3e6283a\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Clone ASP &amp; SignalR application source from GitHub<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a build directory. It\u2019s fine if the directory already exists<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>mkdir \/home\/cecuser\/build<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the newly created Directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd \/home\/cecuser\/build<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check you are on the correct Directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install git<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install git. It\u2019s fine if already installed<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>$ Is this ok &#91;y\/N]:<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>Y<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clone the application source from github<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/SignalRchat.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'SignalRchat'...\nremote: Enumerating objects: 158, done.\nremote: Counting objects: 100% (158\/158), done.\nremote: Compressing objects: 100% (104\/104), done.\nremote: Total 158 (delta 60), reused 139 (delta 46), pack-reused 0 (from 0)\nReceiving objects: 100% (158\/158), 906.94 KiB | 13.95 MiB\/s, done.\nResolving deltas: 100% (60\/60), done.\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You should see a new folder created<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls -la<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>total 16\ndrwxr-xr-x.  7 cecuser cecuser   97 Dec 20 06:01 .\ndrwx------. 14 cecuser cecuser 4096 Dec 20 05:49 ..\ndrwxr-xr-x.  5 cecuser cecuser 4096 Dec 20 06:01 SignalRchat<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Build the application container, for use on Power<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the new application directory<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd \/home\/cecuser\/build\/SignalRchat<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy the ppc64le dockerfile, which will be used to build the application container. Note I include one for ppc64le and another for x86. Compare the two with the diff command if you like.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cp Dockerfile.ppc64le Dockerfile<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy the ppc64le csproj file, which will be used to build the application container. Take a look but don\u2019t change anything. Again, I provide one for x86 and another for ppc64le. Run a diff on the two files if you like. I simply use .NET 7, rather than .NET 6 for ppc64le.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cp .\/SignalRChat\/SignalRChat.csproj.ppc64le\/SignalRChat\/SignalRChat.csproj<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build the application container using Podman<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman build . -t signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>&#91;2\/4] STEP 1\/8: FROM dotnet-70 AS build\n&#91;2\/4] STEP 2\/8: WORKDIR \/src\n--&gt; 515aad83b66c\n&#91;2\/4] STEP 3\/8: COPY --chown=1001 &#91;\"SignalRChat\/SignalRChat.csproj\", \"SignalRChat\/\"]\n--&gt; 9aee5688368d\n&#91;2\/4] STEP 4\/8: RUN dotnet restore \"SignalRChat\/SignalRChat.csproj\"\n  Determining projects to restore...\n  Restored \/src\/SignalRChat\/SignalRChat.csproj (in 147 ms).\n--&gt; 0ee5a49e91a2\n&#91;2\/4] STEP 5\/8: COPY --chown=1001 . .\/\n--&gt; 66617d4073f1\n&#91;2\/4] STEP 6\/8: WORKDIR \"\/src\/SignalRChat\"\n--&gt; 4b1254dd191b\n&#91;2\/4] STEP 7\/8: USER root\n--&gt; ecaa6eda3da6\n&#91;2\/4] STEP 8\/8: RUN dotnet build \"SignalRChat.csproj\" -c Release -o \/app\/build\nMSBuild version 17.4.0+18d5aef85 for .NET\n  Determining projects to restore...\n  All projects are up-to-date for restore.\n  SignalRChat -&gt; \/app\/build\/SignalRChat.dll\n\nBuild succeeded.\n    0 Warning(s)\n    0 Error(s)\n\nTime Elapsed 00:00:10.00\n--&gt; df54899c921d\n&#91;3\/4] STEP 1\/2: FROM df54899c921dffc3f5f5bea1cee4c1b57934bbae1c05529e5d5963dccc058f76 AS publish\n&#91;3\/4] STEP 2\/2: RUN dotnet publish \"SignalRChat.csproj\" -c Release -o \/app\/publish \/p:UseAppHost=false\nMSBuild version 17.4.0+18d5aef85 for .NET\n  Determining projects to restore...\n  All projects are up-to-date for restore.\n  SignalRChat -&gt; \/src\/SignalRChat\/bin\/Release\/net7.0\/SignalRChat.dll\n  SignalRChat -&gt; \/app\/publish\/\n--&gt; b4d2398e6117\n&#91;4\/4] STEP 1\/4: FROM dotnet-70 AS final\n&#91;4\/4] STEP 2\/4: WORKDIR \/app\n--&gt; 705ddd7c3d30\n&#91;4\/4] STEP 3\/4: COPY --chown=1001 --from=publish \/app\/publish .\n--&gt; 23c7fd957c8c\n&#91;4\/4] STEP 4\/4: ENTRYPOINT &#91;\"dotnet\", \"SignalRChat.dll\"]\n&#91;4\/4] COMMIT signalrchat\n--&gt; ea3406e5cdcd\nSuccessfully tagged localhost\/signalrchat:latest\nea3406e5cdcdadbee74e8c22bb4cb21441bd1bfde8e0b3e1b24739cd81e40d36<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm that both dotnet and application containers are available.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY                                TAG         IMAGE ID      CREATED         SIZE\n&lt;none&gt;                                    &lt;none&gt;      b4d2398e6117  40 seconds ago  648 MB\nlocalhost\/signalrchat                     latest      ea3406e5cdcd  40 seconds ago  629 MB\nquay.io\/paulchapmanibm\/ppc64le\/dotnet-70  latest      f579cd2fc8b3  2 years ago     621 MB\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Create New Project &amp; Transfer Container to OCP registry<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Login to OCP as the cecuser user<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc login -u cecuser<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Logged into \"https:\/\/api.p1324.cecc.ihost.com:6443\" as \"cecuser\" using existing credentials.\n\nYou have access to 71 projects, the list has been suppressed. You can list all projects with 'oc projects'\n\nUsing project \"default\".<\/code><\/pre>\n\n\n\n<p>By default, the OpenShift Container Platform registry is secured during cluster installation so that it serves traffic through TLS. Unlike previous versions of OpenShift Container Platform, the registry is not exposed outside of the cluster at the time of installation.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Expose the OCP default registry.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>REGHOST=`oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}'`<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check the variable has been set correctly. You may need to ensure that you are still logged into OpenShift via the command line interface, as carried out in chapter 2. The variable should be similar, but different to the below. If not, then log back into OpenShift using the oc login command with your token as described in chapter 2.  <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>echo $REGHOST<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>default-route-openshift-image-registry.apps.p1324.cecc.ihost.com<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Login to the OCP default registry<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman login --tls-verify=false -u cecuser -p $(oc whoami -t) ${REGHOST}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Login Succeeded!<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create new OCP namespace for the application<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc new-project signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Now using project \"signalrchat\" on server \"https:\/\/api.p1324.cecc.ihost.com:6443\".\n\nYou can add applications to this project with the 'new-app' command. For example, try:\n\n    oc new-app rails-postgresql-example\n\nto build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:\n\n    kubectl create deployment hello-node --image=registry.k8s.io\/e2e-test-images\/agnhost:2.43 -- \/agnhost serve-hostname<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Push the application container into the OCP default registry<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman push --tls-verify=false $(podman images | grep signalrchat | awk '{print $3}') $REGHOST\/signalrchat\/signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Getting image source signatures\nCopying blob f8d00697cd3d done   |\nCopying blob c34048e29ca6 done   |\nCopying blob c38c6791c82e done   |\nCopying blob 669f475e58c3 done   |\nCopying config ea3406e5cd done   |\nWriting manifest to image destination\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Create and expose OCP application<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create the new OCP application expose (create external route to) the application.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc new-app --image-stream=signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>--&gt; Found image ea3406e (11 minutes old) in image stream \"signalrchat\/signalrchat\" under tag \"latest\" for \"signalrchat\"\n\n    .NET 7\n    ------\n    Platform for building and running .NET 7 applications\n\n    Tags: builder, .net, dotnet, dotnetcore, dotnet-70\n\n\n--&gt; Creating resources ...\n    deployment.apps \"signalrchat\" created\n    service \"signalrchat\" created\n--&gt; Success\n    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:\n     'oc expose service\/signalrchat'\n    Run 'oc status' to view your app.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Expose (create external route to) the new OCP application<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc expose service\/signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>route\/signalrchat exposed<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Obtain the application URL<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Obtain the application Url, (your url will be different to that shown below)<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc status | grep 8080 | awk '{print $1}'<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Warning: apps.openshift.io\/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+\nhttp:&#47;&#47;signalrchat-signalrchat.apps.p1324.cecc.ihost.com\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Start-Web-Browsers-and-send-messages\">Start Web Browsers and send messages<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start multiple browsers, size and position them so you can see them all at same time. I have used Firefox, Chrome and Edge browsers for this demonstration, but you may use any number of alternatives.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"345\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-14.png\" alt=\"\" class=\"wp-image-1870\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-14.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-14-300x162.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy the URL obtained from 3. Section 1, and paste into each browser. Remember that the URL for your application will be different from the example below.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"345\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-15.png\" alt=\"\" class=\"wp-image-1871\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-15.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-15-300x162.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter username and message into the first browser and click \u201cSend Message\u201d button<\/li>\n<\/ul>\n\n\n\n<p>IBM says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"344\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-16.png\" alt=\"\" class=\"wp-image-1872\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-16.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-16-300x162.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Continue entering and sending messages as desired<\/li>\n<\/ul>\n\n\n\n<p>Red Hat says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"344\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-17.png\" alt=\"\" class=\"wp-image-1873\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-17.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-17-300x162.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<p>IBM says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"344\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-18.png\" alt=\"\" class=\"wp-image-1874\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-18.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-18-300x162.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<p>Microsoft says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"639\" height=\"343\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-19.png\" alt=\"\" class=\"wp-image-1875\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-19.png 639w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-19-300x161.png 300w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Cleanup-SignalRChat-deployment\">Cleanup SignalRChat deployment<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ensure you are logged in to OpenShift as cecuser<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc login -u cecuser<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Logged into \"https:\/\/api.p1382.cecc.ihost.com:6443\" as \"cecuser\" using existing credentials.\nYou have access to 71 projects, the list has been suppressed. You can list all projects with\n'oc projects'\nUsing project \"signalrchat\".<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove Git &#8211; Optional<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf remove git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nDependencies resolved.\n======================================================================================================================\nPackage Architecture Version Repository Size\n======================================================================================================================\nRemoving:\ngit ppc64le 2.39.3-1.el8_8 @rhel-8-for-ppc64le-appstream-rpms 133 k\nIBM TechXchange 2024 \/ \u00a9 2024 IBM Corporation\n43\nRemoving unused dependencies:\ngit-core ppc64le 2.39.3-1.el8_8 @rhel-8-for-ppc64le-appstream-rpms 39 M\ngit-core-doc noarch 2.39.3-1.el8_8 @rhel-8-for-ppc64le-appstream-rpms 14 M\nperl-Error noarch 1:0.17025-2.el8 @rhel-8-for-ppc64le-appstream-rpms 70 k\nperl-Git noarch 2.39.3-1.el8_8 @rhel-8-for-ppc64le-appstream-rpms 65 k\nperl-TermReadKey ppc64le 2.37-7.el8 @rhel-8-for-ppc64le-appstream-rpms 108 k\nTransaction Summary\n======================================================================================================================\nRemove 6 Packages\nFreed space: 53 M\nIs this ok &#91;y\/N]: y\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\nPreparing : 1\/1\nErasing : git-2.39.3-1.el8_8.ppc64le 1\/6\nErasing : git-core-doc-2.39.3-1.el8_8.noarch 2\/6\nErasing : perl-Git-2.39.3-1.el8_8.noarch 3\/6\nErasing : perl-Error-1:0.17025-2.el8.noarch 4\/6\nErasing : git-core-2.39.3-1.el8_8.ppc64le 5\/6\nErasing : perl-TermReadKey-2.37-7.el8.ppc64le 6\/6\nRunning scriptlet: perl-TermReadKey-2.37-7.el8.ppc64le 6\/6\nVerifying : git-2.39.3-1.el8_8.ppc64le 1\/6\nVerifying : git-core-2.39.3-1.el8_8.ppc64le 2\/6\nVerifying : git-core-doc-2.39.3-1.el8_8.noarch 3\/6\nVerifying : perl-Error-1:0.17025-2.el8.noarch 4\/6\nVerifying : perl-Git-2.39.3-1.el8_8.noarch 5\/6\nVerifying : perl-TermReadKey-2.37-7.el8.ppc64le 6\/6\nInstalled products updated.\nRemoved:\ngit-2.39.3-1.el8_8.ppc64le git-core-2.39.3-1.el8_8.ppc64le git-core-doc-2.39.3-1.el8_8.noarch\nperl-Error-1:0.17025-2.el8.noarch perl-Git-2.39.3-1.el8_8.noarch perl-TermReadKey-2.37-7.el8.ppc64le\nComplete!<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Delete the signalrchat project<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc delete project signalrchat<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Project.project.openshift.io \"signalrchat\" deleted<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove the project directory<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd ..; rm -rdf \/home\/cecuser\/build\/SignalRchat<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove the container images.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>for i in $(podman images | grep -E \"dotnet-70|signalrchat|none\" | grep -v \"IMAGE\" | awk '{print $3}')<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>(Press Enter\/Return, then the following four commands to complete the loop)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>do\npodman rmi $i -f\ndone<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Untagged: localhost\/signalrchat:latest\nDeleted: 05a243df6ce2490106170e3d7f3aa3f3ff8df5350bd70c663578b75680d93a38\nDeleted: 1f0b2ff28347c0964d0748f8ea6bf8411d11fe8d933aaa3e89797879aa251efe\nDeleted: 5a401155fe567b4203174d9a2d69569f4a6ec535e90fb307bca4b4f7b3fc5abb\nDeleted: dd0cf37540fb39fcb0f7056a16ef700cf3df6a7f33bd1e3cefd8c29909321c95\nDeleted: 6d0a1afe8a9b05e3174e178c780c1c7e087a20f745088f47e9b48647706d63c6\nDeleted: a115b350501bddb210dd91d1868ee769a130fd0ba2327515f0c2609ecc6e0cfd\nDeleted: d714fc70e7afa346d5103b5de4a5abe85fd06f8ae3d3f0fb0ee815c60b67dbae\nDeleted: 62476fee74ee15ff4ae6b3a3172621100198dbb9ceab74d77dc2343cd0f41f3d\nDeleted: 925b7c0cd37669e82d1d72d719265588755f43ca84d6d1a98e572b07b8572995\nDeleted: 29492640f6bf49dadecd41076f8bcc738b9542347b58973c0f77f3e15c8b9fb5\nDeleted: 6f0edee35c6313272107cca81bcf60ecf4c50ff292f597fe6959a49f35fcf0cd\nUntagged: quay.io\/paulchapmanibm\/ppc64le\/dotnet-70:latest\nDeleted: f579cd2fc8b3b2cccf68aea14afb1b04770bda24d4de5e395031a278f3e6283a<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY TAG IMAGE ID CREATED SIZE<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Deploy-Message-App-with-S2I\">8 Deploy Message App with S2I<\/h2>\n\n\n\n<p>This part of the lab will guide you through process of creating a new project, cloning the code hosted on GitHub, and building the .Net application using S2I. This part of the lab will be completed using the cecuser user.<\/p>\n\n\n\n<p>You can watch a recording of the exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 7 Deploy Msg App with S2I GUI\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/MiAhW658VFU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Deploy Message App with S2I<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Deploy the application using Source to Image<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log in to the TechZone OCP using a browser as user, cecuser<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"230\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-22.png\" alt=\"\" class=\"wp-image-1883\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-22.png 482w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-22-300x143.png 300w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"231\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-23.png\" alt=\"\" class=\"wp-image-1884\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-23.png 484w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-23-300x143.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Switch to Developer view<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"239\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-24.png\" alt=\"\" class=\"wp-image-1886\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-24.png 482w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-24-300x149.png 300w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"238\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-25.png\" alt=\"\" class=\"wp-image-1887\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-25.png 484w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-25-300x148.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the \u201cProject: All Projects\u201d drop down list and create new \u201csignalrchat\u201d project<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"477\" height=\"236\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-26.png\" alt=\"\" class=\"wp-image-1888\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-26.png 477w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-26-300x148.png 300w\" sizes=\"auto, (max-width: 477px) 100vw, 477px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"471\" height=\"234\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-27.png\" alt=\"\" class=\"wp-image-1889\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-27.png 471w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-27-300x149.png 300w\" sizes=\"auto, (max-width: 471px) 100vw, 471px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select \u201c+ Add\u201d, and \u201cImport from Git\u201d<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"234\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-28.png\" alt=\"\" class=\"wp-image-1890\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-28.png 476w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-28-300x147.png 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"234\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-29.png\" alt=\"\" class=\"wp-image-1891\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-29.png 476w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-29-300x147.png 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <a href=\"https:\/\/github.com\/paulchapmanibm\/SignalRChat\">https:\/\/github.com\/paulchapmanibm\/SignalRChat<\/a> using another browser window or tab, then select the \u201c&lt;&gt; Code button and copy the url that points to the application source code using HTTPS. This is where OCP will clone the source code from when building the application container image later.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>https:&#47;&#47;github.com\/paulchapmanibm\/SignalRChat.git<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"466\" height=\"239\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-30.png\" alt=\"\" class=\"wp-image-1892\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-30.png 466w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-30-300x154.png 300w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Return to the OCP Console browser window or tab and paste the url copied from above step into the Git Repo URL field. Notice the new Validated notice underneath.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"465\" height=\"231\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-31.png\" alt=\"\" class=\"wp-image-1893\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-31.png 465w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-31-300x149.png 300w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now, left click on \u201cEdit Import Strategy\u201d, followed by \u201cBuilder Image\u201d buttons<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"243\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-32.png\" alt=\"\" class=\"wp-image-1894\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-32.png 493w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-32-300x148.png 300w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"490\" height=\"242\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-33.png\" alt=\"\" class=\"wp-image-1895\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-33.png 490w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-33-300x148.png 300w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select .Net when you are presented with a list of available Builder Images. You previously added the \u201c.Net\u201d option at \u201c2. Section 1 Add the .net Builder Image\u201d<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"247\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-34.png\" alt=\"\" class=\"wp-image-1896\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-34.png 502w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-34-300x148.png 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scroll down and select Builder Image version &#8216;IST 7.0-ubi8&#8217; <\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"553\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59-1024x553.png\" alt=\"\" class=\"wp-image-1947\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59-1024x553.png 1024w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59-300x162.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59-768x415.png 768w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59-1536x829.png 1536w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-59.png 1611w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scroll down and left click Create Image<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"505\" height=\"248\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-35.png\" alt=\"\" class=\"wp-image-1897\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-35.png 505w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-35-300x147.png 300w\" sizes=\"auto, (max-width: 505px) 100vw, 505px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You will see the application resource added to the projects Topology. Notice the light blue circle around the .NET logo, which means that the application\/container is being built.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-36.png\" alt=\"\" class=\"wp-image-1898\" width=\"507\" height=\"249\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-36.png 507w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-36-300x147.png 300w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you are quick, you can select the Build icon, which shows you the logs during the build. If you are not so quick, you will still see and be able to scroll through the build log.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"487\" height=\"239\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-37.png\" alt=\"\" class=\"wp-image-1899\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-37.png 487w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-37-300x147.png 300w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"238\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-38.png\" alt=\"\" class=\"wp-image-1900\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-38.png 480w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-38-300x149.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once the build is complete, select \u201cTopology\u201d and you will see that the previous light blue circle has now turned dark blue, which indicates the build has completed.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"239\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-39.png\" alt=\"\" class=\"wp-image-1901\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-39.png 480w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-39-300x149.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"239\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-40.png\" alt=\"\" class=\"wp-image-1902\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-40.png 486w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-40-300x148.png 300w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clicking on the \u201cOpen url\u201d icon will open a browser to the application front end.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"475\" height=\"234\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-41.png\" alt=\"\" class=\"wp-image-1903\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-41.png 475w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-41-300x148.png 300w\" sizes=\"auto, (max-width: 475px) 100vw, 475px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"453\" height=\"233\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-42.png\" alt=\"\" class=\"wp-image-1904\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-42.png 453w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-42-300x154.png 300w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Start Web Browsers and send messages<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start multiple browsers, size and position them so you can see them all at same time. I have used Firefox, Chrome and Edge browsers for this demonstration, but you may use any number of alternatives.&nbsp;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"540\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-43.png\" alt=\"\" class=\"wp-image-1905\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-43.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-43-300x162.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-43-768x415.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy the URL obtained from 3. Section 1 and paste into each browser. Remember that the URL for your application will be different from the example below.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"539\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-44.png\" alt=\"\" class=\"wp-image-1906\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-44.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-44-300x162.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-44-768x414.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter username and message into the first browser and click \u201cSend Message\u201d button.<\/li>\n<\/ul>\n\n\n\n<p>IBM says<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"539\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-45.png\" alt=\"\" class=\"wp-image-1907\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-45.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-45-300x162.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-45-768x414.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Continue entering and sending messages as desired.<\/li>\n<\/ul>\n\n\n\n<p>Red Hat says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"538\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-46.png\" alt=\"\" class=\"wp-image-1908\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-46.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-46-300x161.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-46-768x413.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p>IBM says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"539\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-47.png\" alt=\"\" class=\"wp-image-1909\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-47.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-47-300x162.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-47-768x414.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p>Microsoft says:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"537\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-48.png\" alt=\"\" class=\"wp-image-1910\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-48.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-48-300x161.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-48-768x412.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Remove signalrchat project<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select the Developer view Project, Actions and Delete Project&nbsp;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"478\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-49.png\" alt=\"\" class=\"wp-image-1911\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-49.png 999w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-49-300x144.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-49-768x367.png 768w\" sizes=\"auto, (max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter the project name, signalrchat and click delete. That was easier, wasn\u2019t it \ud83d\ude0a<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"485\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-50.png\" alt=\"\" class=\"wp-image-1912\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-50.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-50-300x146.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-50-768x372.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Deploy-Website-with-ASP.Net-Core-&amp;-Blazor\">9 Deploy Website with ASP.Net Core &amp; Blazor<\/h2>\n\n\n\n<p>This lab will guide you through process of creating a new project, cloning the code hosted on GitHub, and building the .Net application using S2I via command line interface. This lab will be completed using the cecuser user.<\/p>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 8 Deploy Website with S2I CLI\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/jJAoVeIiRu4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Add the .Net Builder image<\/h3>\n\n\n\n<p>Follow the below steps to add the .Net 7 builder image to OCP.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log in to the OCP Bastion Server as the cecuser. Check you have the correct user. The whoami command should return cecuser.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>whoami<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>cecuser<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Switch to the openshift project<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc project openshift<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Logged into \"https:\/\/api.p1324.cecc.ihost.com:6443\" as \"cecuser\" using the token provided.\n\nYou have access to 71 projects, the list has been suppressed. You can list all projects with 'oc projects'\n\nUsing project \"openshift\".\n&#91;cecuser@p1324-bastion ~]$ whoami\ncecuser\n&#91;cecuser@p1324-bastion ~]$ oc project openshift\nAlready on project \"openshift\" on server \"https:\/\/api.p1324.cecc.ihost.com:6443\".<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Deploy the application using Source to Image<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log into the OCP RHEL Bastion using cecuser credentials and install git command line interface<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nLast metadata expiration check: 0:41:26 ago on Fri 20 Dec 2024 07:00:21 AM EST.\nDependencies resolved.\n================================================================================\n Package        Arch    Version         Repository                         Size\n================================================================================\nInstalling:\n git            ppc64le 2.43.5-2.el9_5  rhel-9-for-ppc64le-appstream-rpms  54 k\nInstalling dependencies:\n emacs-filesystem\n                noarch  1:27.2-10.el9_4 rhel-9-for-ppc64le-appstream-rpms 9.3 k\n git-core       ppc64le 2.43.5-2.el9_5  rhel-9-for-ppc64le-appstream-rpms 4.8 M\n git-core-doc   noarch  2.43.5-2.el9_5  rhel-9-for-ppc64le-appstream-rpms 2.9 M\n perl-DynaLoader\n                ppc64le 1.47-481.el9    rhel-9-for-ppc64le-appstream-rpms  26 k\n perl-Error     noarch  1:0.17029-7.el9 rhel-9-for-ppc64le-appstream-rpms  46 k\n perl-File-Find noarch  1.37-481.el9    rhel-9-for-ppc64le-appstream-rpms  26 k\n perl-Git       noarch  2.43.5-2.el9_5  rhel-9-for-ppc64le-appstream-rpms  39 k\n perl-TermReadKey\n                ppc64le 2.38-11.el9     rhel-9-for-ppc64le-appstream-rpms  41 k\n\nTransaction Summary\n================================================================================\nInstall  9 Packages\n\nTotal size: 8.0 M\nInstalled size: 41 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n&#91;SKIPPED] perl-Error-0.17029-7.el9.noarch.rpm: Already downloaded\n&#91;SKIPPED] perl-TermReadKey-2.38-11.el9.ppc64le.rpm: Already downloaded\n&#91;SKIPPED] perl-DynaLoader-1.47-481.el9.ppc64le.rpm: Already downloaded\n&#91;SKIPPED] perl-File-Find-1.37-481.el9.noarch.rpm: Already downloaded\n&#91;SKIPPED] emacs-filesystem-27.2-10.el9_4.noarch.rpm: Already downloaded\n&#91;SKIPPED] git-2.43.5-2.el9_5.ppc64le.rpm: Already downloaded\n&#91;SKIPPED] git-core-2.43.5-2.el9_5.ppc64le.rpm: Already downloaded\n&#91;SKIPPED] git-core-doc-2.43.5-2.el9_5.noarch.rpm: Already downloaded\n&#91;SKIPPED] perl-Git-2.43.5-2.el9_5.noarch.rpm: Already downloaded\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                        1\/1\n  Installing       : git-core-2.43.5-2.el9_5.ppc64le                        1\/9\n  Installing       : git-core-doc-2.43.5-2.el9_5.noarch                     2\/9\n  Installing       : emacs-filesystem-1:27.2-10.el9_4.noarch                3\/9\n  Installing       : perl-File-Find-1.37-481.el9.noarch                     4\/9\n  Installing       : perl-DynaLoader-1.47-481.el9.ppc64le                   5\/9\n  Installing       : perl-TermReadKey-2.38-11.el9.ppc64le                   6\/9\n  Installing       : perl-Error-1:0.17029-7.el9.noarch                      7\/9\n  Installing       : git-2.43.5-2.el9_5.ppc64le                             8\/9\n  Installing       : perl-Git-2.43.5-2.el9_5.noarch                         9\/9\n  Running scriptlet: perl-Git-2.43.5-2.el9_5.noarch                         9\/9\n  Verifying        : perl-Error-1:0.17029-7.el9.noarch                      1\/9\n  Verifying        : perl-TermReadKey-2.38-11.el9.ppc64le                   2\/9\n  Verifying        : perl-DynaLoader-1.47-481.el9.ppc64le                   3\/9\n  Verifying        : perl-File-Find-1.37-481.el9.noarch                     4\/9\n  Verifying        : emacs-filesystem-1:27.2-10.el9_4.noarch                5\/9\n  Verifying        : git-2.43.5-2.el9_5.ppc64le                             6\/9\n  Verifying        : git-core-2.43.5-2.el9_5.ppc64le                        7\/9\n  Verifying        : git-core-doc-2.43.5-2.el9_5.noarch                     8\/9\n  Verifying        : perl-Git-2.43.5-2.el9_5.noarch                         9\/9\nInstalled products updated.\n\nInstalled:\n  emacs-filesystem-1:27.2-10.el9_4.noarch   git-2.43.5-2.el9_5.ppc64le\n  git-core-2.43.5-2.el9_5.ppc64le           git-core-doc-2.43.5-2.el9_5.noarch\n  perl-DynaLoader-1.47-481.el9.ppc64le      perl-Error-1:0.17029-7.el9.noarch\n  perl-File-Find-1.37-481.el9.noarch        perl-Git-2.43.5-2.el9_5.noarch\n  perl-TermReadKey-2.38-11.el9.ppc64le\n\nComplete!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create new OpenShift Project<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc new-project blazorapp1 --description=\"Simple .NET example using Blazor with Power\" --display-name=\"blazorapp1\"\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Now using project \"blazorapp1\" on server \"https:\/\/api.p1324.cecc.ihost.com:6443\".\n\nYou can add applications to this project with the 'new-app' command. For example, try:\n\n    oc new-app rails-postgresql-example\n\nto build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:\n\n    kubectl create deployment hello-node --image=registry.k8s.io\/e2e-test-images\/agnhost:2.43 -- \/agnhost serve-hostname<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create the application<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc new-app --image-stream=\"openshift\/dotnet:7.0-ubi8\"~https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git \n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>--&gt; Found image a570ba8 (6 months old) in image stream \"openshift\/dotnet\" under tag \"7.0-ubi8\" for \"openshift\/dotnet:7.0-ubi8\"\n\n    .NET 7\n    ------\n    Platform for building and running .NET 7 applications\n\n    Tags: builder, .net, dotnet, dotnetcore, dotnet-70\n\n    * A source build using source code from https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git will be created\n      * The resulting image will be pushed to image stream tag \"blazorapp1:latest\"\n      * Use 'oc start-build' to trigger a new build\n\n--&gt; Creating resources ...\n    imagestream.image.openshift.io \"blazorapp1\" created\n    buildconfig.build.openshift.io \"blazorapp1\" created\n    deployment.apps \"blazorapp1\" created\n    service \"blazorapp1\" created\n--&gt; Success\n    Build scheduled, use 'oc logs -f buildconfig\/blazorapp1' to track its progress.\n    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:\n     'oc expose service\/blazorapp1'\n    Run 'oc status' to view your app.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Track the progress of the build<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc logs -f buildconfig\/blazorapp1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning \"https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git\" ...\n        Commit: 0a6979a044c27b12a5dda800fb71bec86b36e590 (Update Dockerfile.ppc64le)\n        Author: Paul Chapman &lt;paulchapman@uk.ibm.com&gt;\n        Date:   Thu Dec 22 19:40:51 2022 +0000\ntime=\"2024-12-20T12:43:02Z\" level=info msg=\"Not using native diff for overlay, this may cause degraded performance for building images: kernel has CONFIG_OVERLAY_FS_REDIRECT_DIR enabled\"\nI1220 12:43:02.806910       1 defaults.go:112] Defaulting to storage driver \"overlay\" with options &#91;mountopt=metacopy=on].\nCaching blobs under \"\/var\/cache\/blobs\".\nTrying to pull image-registry.openshift-image-registry.svc:5000\/openshift\/dotnet@sha256:a00254763ebe989e70df3fce146edd5a46eb0a84c103c4e3fcad52e2dcde450b...\nGetting image source signatures\nCopying blob sha256:cbc66c19910e3c1532b3ed790e2c46ff551ef718b378aeaa163643db9af77b30\nCopying blob sha256:02821430ac1875e4cc0ff7f0b59484161bc05db0822a68ebed0630ec94cca2c7\nCopying blob sha256:abfba1df8b7596a37fa71d2279323b21eeb9fdf171adbc929573e212afde27fc\nCopying config sha256:a570ba8238bef09096bd998f2b6c980feb47ff063c31a5e7a4ff9b552f008592\nWriting manifest to image destination\nGenerating dockerfile with builder image image-registry.openshift-image-registry.svc:5000\/openshift\/dotnet@sha256:a00254763ebe989e70df3fce146edd5a46eb0a84c103c4e3fcad52e2dcde450b\nAdding transient rw bind mount for \/run\/secrets\/rhsm\nSTEP 1\/9: FROM image-registry.openshift-image-registry.svc:5000\/openshift\/dotnet@sha256:a00254763ebe989e70df3fce146edd5a46eb0a84c103c4e3fcad52e2dcde450b\nSTEP 2\/9: LABEL \"io.openshift.build.source-location\"=\"https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git\"       \"io.openshift.build.image\"=\"image-registry.openshift-image-registry.svc:5000\/openshift\/dotnet@sha256:a00254763ebe989e70df3fce146edd5a46eb0a84c103c4e3fcad52e2dcde450b\"       \"io.openshift.build.commit.author\"=\"Paul Chapman &lt;paulchapman@uk.ibm.com&gt;\"       \"io.openshift.build.commit.date\"=\"Thu Dec 22 19:40:51 2022 +0000\"       \"io.openshift.build.commit.id\"=\"0a6979a044c27b12a5dda800fb71bec86b36e590\"       \"io.openshift.build.commit.ref\"=\"master\"       \"io.openshift.build.commit.message\"=\"Update Dockerfile.ppc64le\"\nSTEP 3\/9: ENV DOTNET_STARTUP_PROJECT=\"BlazorApp1\/BlazorApp1.csproj\"     OPENSHIFT_BUILD_NAME=\"blazorapp1-1\"     OPENSHIFT_BUILD_NAMESPACE=\"blazorapp1\"     OPENSHIFT_BUILD_SOURCE=\"https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git\"     OPENSHIFT_BUILD_COMMIT=\"0a6979a044c27b12a5dda800fb71bec86b36e590\"\nSTEP 4\/9: USER root\nSTEP 5\/9: COPY upload\/src \/tmp\/src\nSTEP 6\/9: RUN chown -R 1001:0 \/tmp\/src\nSTEP 7\/9: USER 1001\nSTEP 8\/9: RUN \/usr\/libexec\/s2i\/assemble\n---&gt; Installing application source...\nUsing SDK: 7.0.119\n---&gt; Restoring application dependencies...\n  Determining projects to restore...\n  Restored \/opt\/app-root\/src\/BlazorApp1\/BlazorApp1.csproj (in 1.38 sec).\n---&gt; Publishing application...\nMSBuild version 17.4.8+6918b863a for .NET\n  BlazorApp1 -&gt; \/opt\/app-root\/src\/BlazorApp1\/bin\/Release\/net7.0\/BlazorApp1.dll\n  BlazorApp1 -&gt; \/opt\/app-root\/app\/\nSTEP 9\/9: CMD \/usr\/libexec\/s2i\/run\nCOMMIT temp.builder.openshift.io\/blazorapp1\/blazorapp1-1:490e13ee\ntime=\"2024-12-20T12:43:25Z\" level=warning msg=\"archive: skipping \\\"\/var\/lib\/containers\/storage\/overlay\/7379dad0c855850c43cdcdf46f197876aa14af2ceeb3ad7c218cb62a59ddf686\/merged\/tmp\/_f7KucZirGgg2dsv9fzkypOiyT+0Ds5wYg0teFehqcM\\\" since it is a socket\"\ntime=\"2024-12-20T12:43:25Z\" level=warning msg=\"archive: skipping \\\"\/var\/lib\/containers\/storage\/overlay\/7379dad0c855850c43cdcdf46f197876aa14af2ceeb3ad7c218cb62a59ddf686\/merged\/tmp\/dotnet-diagnostic-84-9362357-socket\\\" since it is a socket\"\nGetting image source signatures\nCopying blob sha256:87bb6c622b3397c1ff23f61d7e37a21632d34adc76a83a6a79ac950a7a198d7c\nCopying blob sha256:b5c318a41ced1ded48a9637793eeb005d1f79fc8292fe6975531fc933a012ac0\nCopying blob sha256:2a6a4ea6b3489ca5f7d62e548f3c4b5de84c8e6a7797bb11f4c83540a240b788\nCopying blob sha256:5b2f1e46642c690c2340dbf323d676a333395a916985d7521420f09e481fd2f9\nCopying config sha256:26b0f0bf2ebe7a1a782bae54bee32849f21398cb38048b3acb8b6d4ba11f1e62\nWriting manifest to image destination\n--&gt; 26b0f0bf2ebe\nSuccessfully tagged temp.builder.openshift.io\/blazorapp1\/blazorapp1-1:490e13ee\n26b0f0bf2ebe7a1a782bae54bee32849f21398cb38048b3acb8b6d4ba11f1e62\n\nPushing image image-registry.openshift-image-registry.svc:5000\/blazorapp1\/blazorapp1:latest ...\nGetting image source signatures\nCopying blob sha256:5b2f1e46642c690c2340dbf323d676a333395a916985d7521420f09e481fd2f9\nCopying blob sha256:cbc66c19910e3c1532b3ed790e2c46ff551ef718b378aeaa163643db9af77b30\nCopying blob sha256:02821430ac1875e4cc0ff7f0b59484161bc05db0822a68ebed0630ec94cca2c7\nCopying blob sha256:abfba1df8b7596a37fa71d2279323b21eeb9fdf171adbc929573e212afde27fc\nCopying config sha256:26b0f0bf2ebe7a1a782bae54bee32849f21398cb38048b3acb8b6d4ba11f1e62\nWriting manifest to image destination\nSuccessfully pushed image-registry.openshift-image-registry.svc:5000\/blazorapp1\/blazorapp1@sha256:44bae6e8aae67e399c33a83ab36169254a0610b3cfbe48965429a64b81c3baf6\nPush successful\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Once the build is complete and the resulting image has successfully pushed to your registry, check the status of your application:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc status <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Warning: apps.openshift.io\/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+\nIn project blazorapp1 on server https:\/\/api.p1324.cecc.ihost.com:6443\n\nsvc\/blazorapp1 - 172.30.35.196:8080\n  deployment\/blazorapp1 deploys istag\/blazorapp1:latest &lt;-\n    bc\/blazorapp1 source builds https:\/\/github.com\/paulchapmanibm\/BlazorApp1.git on openshift\/dotnet:7.0-ubi8\n    deployment #2 running for 2 minutes - 1 pod\n    deployment #1 deployed 3 minutes ago\n\n\n1 info identified, use 'oc status --suggest' to see details.\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a Route. An OpenShift Container Platform route exposes a service at a host name, so that external clients can reach it by name. To create an external route to your new application, expose the application service.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc expose service blazorapp1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>route\/blazorapp1 exposed<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>View your new route<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc get route <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>NAME         HOST\/PORT                                         PATH   SERVICES     PORT       TERMINATION   WILDCARD\nblazorapp1   blazorapp1-blazorapp1.apps.p1324.cecc.ihost.com          blazorapp1   8080-tcp                 None<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Verify and test the application<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify the Application is Running. To view your new application, paste the application route URL into the address bar of your web browser and hit enter.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>echo \"The url to your new application is $(oc status | grep \"http:\/\/blazorapp1-blazorapp1\" | awk '{print $1}')\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Warning: apps.openshift.io\/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+\nThe url to your new application is http:\/\/blazorapp1-blazorapp1.apps.p1324.cecc.ihost.com<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"536\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-51.png\" alt=\"\" class=\"wp-image-1916\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-51.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-51-300x161.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-51-768x412.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Increase the counter by clicking the \u201cClick me\u201d button. Notice the increment of 10 each click.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"274\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-52.png\" alt=\"\" class=\"wp-image-1918\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-52.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-52-300x82.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-52-768x210.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select + Counter from the left side menu to see another counter.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"159\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-53.png\" alt=\"\" class=\"wp-image-1919\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-53.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-53-300x48.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-53-768x122.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click this other \u201cClick me\u201d button to increment counter by 1 each click.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"158\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-54.png\" alt=\"\" class=\"wp-image-1920\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-54.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-54-300x47.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-54-768x121.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Return to the \u201cHome\u201d page<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"257\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-55.png\" alt=\"\" class=\"wp-image-1921\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-55.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-55-300x77.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-55-768x197.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click the \u201cbrief survey\u201d link to complete the survey<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"530\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-56.png\" alt=\"\" class=\"wp-image-1922\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-56.png 1000w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-56-300x159.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-56-768x407.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Remove the Blazor project<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove the Blazor project.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>oc delete project blazorapp1<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>project.project.openshift.io \"blazorapp1\" deleted<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Deploy-the-.NET-game-using-Shift-tool\">10 Deploy the .NET game using Shift tool<\/h2>\n\n\n\n<p>This part of the demo will guide you through process of creating a new project and building the .Net based game using the dotnet Shift tool available from <a href=\"https:\/\/github.com\/paulchapmanibm\/dotnet-shift\">https:\/\/github.com\/paulchapmanibm\/dotnet-shift<\/a><\/p>\n\n\n\n<p>This part of the demo will be completed using the cecuser user.<\/p>\n\n\n\n<p>You can watch a recording of this exercise<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 9 shift\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/iATlRkmF09Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Install\/provide prerequisites<\/h3>\n\n\n\n<p>Follow the below steps to add the .Net 7 builder image to OCP.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log in to the OCP Bastion Server as the cecuser. Check you have the correct user. The whoami command should return cecuser.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>whoami<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>cecuser<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the build directory.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd \/home\/cecuser\/build<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update Git.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little endian - Supplementary (RPMs)             83 kB\/s | 3.8 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs)                 69 kB\/s | 2.9 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs)                   105 kB\/s | 4.1 kB     00:00\nDependencies resolved.\n======================================================================================================================\n Package                   Architecture     Version                  Repository                                  Size\n======================================================================================================================\nInstalling:\n git                       ppc64le          2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms          104 k\nInstalling dependencies:\n git-core                  ppc64le          2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms           12 M\n git-core-doc              noarch           2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms          3.0 M\n perl-Error                noarch           1:0.17025-2.el8          rhel-8-for-ppc64le-appstream-rpms           46 k\n perl-Git                  noarch           2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms           79 k\n perl-TermReadKey          ppc64le          2.37-7.el8               rhel-8-for-ppc64le-appstream-rpms           42 k\n\nTransaction Summary\n======================================================================================================================\nInstall  6 Packages\n\nTotal download size: 15 M\nInstalled size: 53 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/6): git-2.39.3-1.el8_8.ppc64le.rpm                                                 1.2 MB\/s | 104 kB     00:00\n(2\/6): perl-Error-0.17025-2.el8.noarch.rpm                                            992 kB\/s |  46 kB     00:00\n(3\/6): git-core-doc-2.39.3-1.el8_8.noarch.rpm                                          16 MB\/s | 3.0 MB     00:00\n(4\/6): perl-Git-2.39.3-1.el8_8.noarch.rpm                                             1.4 MB\/s |  79 kB     00:00\n(5\/6): perl-TermReadKey-2.37-7.el8.ppc64le.rpm                                        949 kB\/s |  42 kB     00:00\n(6\/6): git-core-2.39.3-1.el8_8.ppc64le.rpm                                             34 MB\/s |  12 MB     00:00\n----------------------------------------------------------------------------------------------------------------------\nTotal                                                                                  43 MB\/s |  15 MB     00:00\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                                                              1\/1\n  Installing       : git-core-2.39.3-1.el8_8.ppc64le                                                              1\/6\n  Installing       : git-core-doc-2.39.3-1.el8_8.noarch                                                           2\/6\n  Installing       : perl-TermReadKey-2.37-7.el8.ppc64le                                                          3\/6\n  Installing       : perl-Error-1:0.17025-2.el8.noarch                                                            4\/6\n  Installing       : perl-Git-2.39.3-1.el8_8.noarch                                                               5\/6\n  Installing       : git-2.39.3-1.el8_8.ppc64le                                                                   6\/6\n  Running scriptlet: git-2.39.3-1.el8_8.ppc64le                                                                   6\/6\n  Verifying        : git-2.39.3-1.el8_8.ppc64le                                                                   1\/6\n  Verifying        : git-core-2.39.3-1.el8_8.ppc64le                                                              2\/6\n  Verifying        : git-core-doc-2.39.3-1.el8_8.noarch                                                           3\/6\n  Verifying        : perl-Error-1:0.17025-2.el8.noarch                                                            4\/6\n  Verifying        : perl-Git-2.39.3-1.el8_8.noarch                                                               5\/6\n  Verifying        : perl-TermReadKey-2.37-7.el8.ppc64le                                                          6\/6\nInstalled products updated.\n\nInstalled:\n  git-2.39.3-1.el8_8.ppc64le             git-core-2.39.3-1.el8_8.ppc64le      git-core-doc-2.39.3-1.el8_8.noarch\n  perl-Error-1:0.17025-2.el8.noarch      perl-Git-2.39.3-1.el8_8.noarch       perl-TermReadKey-2.37-7.el8.ppc64le\n\nComplete!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update dotnet<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install dotnet-sdk-7.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little endian - Supplementary (RPMs)             89 kB\/s | 3.8 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs)                 57 kB\/s | 2.9 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs)                    88 kB\/s | 4.1 kB     00:00\nDependencies resolved.\n======================================================================================================================\n Package                             Architecture Version                Repository                              Size\n======================================================================================================================\nInstalling:\n dotnet                              ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms       18 k\nInstalling dependencies:\n aspnetcore-runtime-7.0              ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      2.8 M\n aspnetcore-targeting-pack-7.0       ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      1.6 M\n dotnet-apphost-pack-7.0             ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      100 k\n dotnet-host                         ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      199 k\n dotnet-hostfxr-7.0                  ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      174 k\n dotnet-runtime-7.0                  ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      7.8 M\n dotnet-sdk-7.0                      ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms       52 M\n dotnet-targeting-pack-7.0           ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      2.9 M\n dotnet-templates-7.0                ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms      3.9 M\n netstandard-targeting-pack-2.1      ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms      1.5 M\n\nTransaction Summary\n======================================================================================================================\nInstall  11 Packages\n\nTotal download size: 73 M\nInstalled size: 308 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/11): dotnet-7.0.105-2.el8_8.ppc64le.rpm                                            220 kB\/s |  18 kB     00:00\n(2\/11): aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                        15 MB\/s | 1.6 MB     00:00\n(3\/11): dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                             1.8 MB\/s | 100 kB     00:00\n(4\/11): aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm                               17 MB\/s | 2.8 MB     00:00\n(5\/11): dotnet-host-7.0.5-2.el8_8.ppc64le.rpm                                         3.3 MB\/s | 199 kB     00:00\n(6\/11): dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le.rpm                                  2.3 MB\/s | 174 kB     00:00\n(7\/11): dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                            14 MB\/s | 2.9 MB     00:00\n(8\/11): dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm                                   16 MB\/s | 7.8 MB     00:00\n(9\/11): dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le.rpm                               13 MB\/s | 3.9 MB     00:00\n(10\/11): netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le.rpm                    11 MB\/s | 1.5 MB     00:00\n(11\/11): dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le.rpm                                    29 MB\/s |  52 MB     00:01\n----------------------------------------------------------------------------------------------------------------------\nTotal                                                                                  38 MB\/s |  73 MB     00:01\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                                                              1\/1\n  Installing       : dotnet-host-7.0.5-2.el8_8.ppc64le                                                           1\/11\n  Installing       : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                         2\/11\n  Installing       : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le                                               3\/11\n  Installing       : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le                                                    4\/11\n  Installing       : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                    5\/11\n  Installing       : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                6\/11\n  Installing       : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                             7\/11\n  Installing       : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le                                                8\/11\n  Installing       : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le                                      9\/11\n  Installing       : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le                                                     10\/11\n  Installing       : dotnet-7.0.105-2.el8_8.ppc64le                                                             11\/11\n  Running scriptlet: dotnet-7.0.105-2.el8_8.ppc64le                                                             11\/11\n  Verifying        : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                1\/11\n  Verifying        : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                         2\/11\n  Verifying        : dotnet-7.0.105-2.el8_8.ppc64le                                                              3\/11\n  Verifying        : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le                                               4\/11\n  Verifying        : dotnet-host-7.0.5-2.el8_8.ppc64le                                                           5\/11\n  Verifying        : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le                                                    6\/11\n  Verifying        : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                    7\/11\n  Verifying        : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le                                                      8\/11\n  Verifying        : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                             9\/11\n  Verifying        : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le                                               10\/11\n  Verifying        : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le                                     11\/11\nInstalled products updated.\n\nInstalled:\n  aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-7.0.105-2.el8_8.ppc64le                              dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-host-7.0.5-2.el8_8.ppc64le                           dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                    dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le\n  dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le             dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le\n  netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le\n\nComplete!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update the Shift tool<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet tool update -g dotnet-shift --version 1 --add-source https:\/\/www.myget.org\/F\/tmds\/api\/v3\/index.json<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>You can invoke the tool using the following command: dotnet-shift\nTool 'dotnet-shift' (version '1.0.0') was successfully installed.\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add dotnet tools to PATH<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>export PATH=\"$PATH:\/home\/cecuser\/.dotnet\/tools\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Review the Shift usage and help information.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet shift --help<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Description:\n  A .NET tool for working with OpenShift\n\nUsage:\n  dotnet-shift &#91;command] &#91;options]\n\nOptions:\n  -?, -h, --help  Show help and usage information\n  --version       Show version information\n\nCommands:\n  login             Log in to a server\n  deploy &lt;PROJECT&gt;  Deploy a .NET application to OpenShift &#91;default: .]\n  list              List deployments\n  delete &lt;APP&gt;      Delete an application\n  context           Operate on connection contexts\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create or clone a .NET project.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/stayingalive.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'stayingalive'...\nremote: Enumerating objects: 136, done.\nremote: Counting objects: 100% (136\/136), done.\nremote: Compressing objects: 100% (88\/88), done.\nremote: Total 136 (delta 54), reused 114 (delta 42), pack-reused 0\nReceiving objects: 100% (136\/136), 865.36 KiB | 15.18 MiB\/s, done.\nResolving deltas: 100% (54\/54), done.\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To log into the OpenShift cluster, copy the <code>oc login<\/code> command from the OpenShift Web Console and replace <code>oc<\/code> by <code>dotnet shift. See Section 2.4 Copy login command for CLI use<\/code> <code>if necessary. Your token will be different to below.<\/code><\/li>\n\n\n\n<li><code>Note, say yes to insecure connections.<\/code><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"946\" height=\"428\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-60.png\" alt=\"\" class=\"wp-image-1953\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-60.png 946w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-60-300x136.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-60-768x347.png 768w\" sizes=\"auto, (max-width: 946px) 100vw, 946px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet shift login --token=&lt;your_token&gt; --server=&lt;your_server_url&gt; <\/code><\/pre>\n\n\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>The connection is not trusted: The remote certificate is invalid because of errors in the certificate chain:\nUntrustedRoot.\nYou can bypass the certificate check, but any data you send to the server could be intercepted by others.\n\nUse insecure connections? &#91;y\/n] (n): y\n\nLogged into 'https:\/\/api.p1382.cecc.ihost.com:6443' as 'cecuser' using the provided token.\n\nWhat namespace would you like to use? default\n\nHow would you like to name this context? (default\/api-p1382-cecc-ihost-com:6443\/cecuser): default\/api-p1382-cecc-ihost-com:6443\/cecuser\n\nThe login context 'default\/api-p1382-cecc-ihost-com:6443\/cecuser' was updated.\n\nUsing namespace 'default' on server 'api.p1382.cecc.ihost.com'.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Deploy the application using Shift<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the project directory.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd \/home\/cecuser\/build\/stayingalive\/stayingalive<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy the .NET application with a single command!<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet shift deploy --expose<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Deploying 'stayingalive' to namespace 'default' at 'https:\/\/api.p1382.cecc.ihost.com:6443'.\n\nRetrieving existing resources...\nUpdating resources...\n\nUploading sources from directory '\/home\/cecuser\/build\/stayingalive'...\nThe build is running:\nReceiving source from STDIN as archive ...\ntime=\"2023-06-08T10:46:48Z\" level=info msg=\"Not using native diff for overlay, this may cause degraded performance for\nbuilding images: kernel has CONFIG_OVERLAY_FS_REDIRECT_DIR enabled\"\nI0608 10:46:48.353951       1 defaults.go:102] Defaulting to storage driver \"overlay\" with options\n&#91;mountopt=metacopy=on].\nCaching blobs under \"\/var\/cache\/blobs\".\nTrying to pull\nimage-registry.openshift-image-registry.svc:5000\/default\/dotnet@sha256:123a4c2b812ab5b63017022e1c7a77051e8ccef7e7a96af\nf5f2e27f9034049c7...\nGetting image source signatures\nCopying blob sha256:5a9dd0ea9aa0c53ebdfe8b13b96e6a8dc23df3c41161b4a2d5d75d42bfbf20fb\nCopying blob sha256:cdc1eeb2ff7c0d91b77fc7380905c609f5e592eabc334cd45216394ae60a5759\nCopying blob sha256:b7b266c137a567c08c67af32f48be66dca2e37779310a4f0f11254fb200547a1\nCopying config sha256:2fcc920557a621073fdfce570202f901eb120832bc331e60a639417c65ed1b4e\nWriting manifest to image destination\nStoring signatures\nGenerating dockerfile with builder image\nimage-registry.openshift-image-registry.svc:5000\/default\/dotnet@sha256:123a4c2b812ab5b63017022e1c7a77051e8ccef7e7a96af\nf5f2e27f9034049c7\nAdding transient rw bind mount for \/run\/secrets\/rhsm\nSTEP 1\/9: FROM\nimage-registry.openshift-image-registry.svc:5000\/default\/dotnet@sha256:123a4c2b812ab5b63017022e1c7a77051e8ccef7e7a96af\nf5f2e27f9034049c7\nSTEP 2\/9: LABEL\n\"io.openshift.build.image\"=\"image-registry.openshift-image-registry.svc:5000\/default\/dotnet@sha256:123a4c2b812ab5b6301\n7022e1c7a77051e8ccef7e7a96aff5f2e27f9034049c7\"       \"io.openshift.build.source-location\"=\"\/tmp\/build\/inputs\"\nSTEP 3\/9: ENV &lt;&lt;MASKED&gt;&gt;\nSTEP 4\/9: USER root\nSTEP 5\/9: COPY upload\/src \/tmp\/src\nSTEP 6\/9: RUN chown -R 1001:0 \/tmp\/src\nSTEP 7\/9: USER 1001\nSTEP 8\/9: RUN \/usr\/libexec\/s2i\/assemble\n---&gt; Installing application source...\nUsing SDK: 7.0.105\n---&gt; Restoring application dependencies...\n  Determining projects to restore...\n  Restored \/opt\/app-root\/src\/stayingalive\/stayingalive.csproj (in 2.03 sec).\n---&gt; Publishing application...\nMSBuild version 17.4.3+7e646be43 for .NET\n  stayingalive -&gt; \/opt\/app-root\/src\/stayingalive\/bin\/Release\/net7.0\/stayingalive.dll\n  stayingalive -&gt; \/opt\/app-root\/app\/\nSTEP 9\/9: CMD \/usr\/libexec\/s2i\/run\nCOMMIT temp.builder.openshift.io\/default\/stayingalive-binary-1:fad46cbc\ntime=\"2023-06-08T10:47:35Z\" level=warning msg=\"Adding metacopy option, configured globally\"\nGetting image source signatures\nCopying blob sha256:5bfc4c1df46878869c2bc45286a02af61b5fec97e6170c1d76e00c3aa80f1518\nCopying blob sha256:b0bef5d376466d102731266fe5c6f0cac3ac69b72b821f7dbd51b30d44825cef\nCopying blob sha256:3cb02a08cd6f7d1b9afca0c90e5afa6be2a70df77389cd1435e8148ebad4ee52\nCopying blob sha256:c330f42c61b5973d3537f5d63f3753af1d851ee28f86573e9a6e4910c09cdb58\nCopying config sha256:6da4149c4c3472c6f8b9be280e8435a494a2a857907df257bcbb87352e36c0ef\nWriting manifest to image destination\nStoring signatures\n--&gt; 6da4149c4c3\nSuccessfully tagged temp.builder.openshift.io\/default\/stayingalive-binary-1:fad46cbc\n6da4149c4c3472c6f8b9be280e8435a494a2a857907df257bcbb87352e36c0ef\nPushing image image-registry.openshift-image-registry.svc:5000\/default\/stayingalive:latest ...\nGetting image source signatures\nCopying blob sha256:c330f42c61b5973d3537f5d63f3753af1d851ee28f86573e9a6e4910c09cdb58\nCopying blob sha256:5a9dd0ea9aa0c53ebdfe8b13b96e6a8dc23df3c41161b4a2d5d75d42bfbf20fb\nCopying blob sha256:b7b266c137a567c08c67af32f48be66dca2e37779310a4f0f11254fb200547a1\nCopying blob sha256:cdc1eeb2ff7c0d91b77fc7380905c609f5e592eabc334cd45216394ae60a5759\nCopying config sha256:6da4149c4c3472c6f8b9be280e8435a494a2a857907df257bcbb87352e36c0ef\nWriting manifest to image destination\nStoring signatures\nSuccessfully pushed\nimage-registry.openshift-image-registry.svc:5000\/default\/stayingalive@sha256:6e0a65a47c775e14ad156c64ad20f65c403d71148\n8d3241af59404c32f37994a\nPush successful\n\nThe image is being deployed.\nThe deployment finished successfully. There is 1 available pod.\n\nThe application is exposed at 'http:\/\/stayingalive-default.apps.p1382.cecc.ihost.com'.\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Verify the application &amp; play the game<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify the Application is Running. To view your new application, paste the URL from the last line of output from earlier \u201c<strong>dotnet shift deploy\u201d <\/strong>command into the address bar of your web browser and hit enter.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Push successful\n\nThe image is being deployed.\nThe deployment finished successfully. There is 1 available pod.\n\nThe application is exposed at 'http:\/\/stayingalive-default.apps.p1382.cecc.ihost.com'\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Left click on the Accelerate button to gain height and navigate through obstacles for as long as you can.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"608\" height=\"621\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-57.png\" alt=\"\" class=\"wp-image-1927\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-57.png 608w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-57-294x300.png 294w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Try out other Shift features<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Try dotnet shift to list applications<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet shift list<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>APP           DEPLOYMENT          BUILD                SERVICE       ROUTE         POD\nstayingalive  stayingalive (1\/1)  stayingalive-binary  stayingalive  stayingalive  stayingalive-54548d599-fckw7 (R)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Try dotnet shift to delete applications<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet shift delete stayingalive<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Deleting ImageStream 'stayingalive'\nDeleting ConfigMap 'stayingalive'\nDeleting Route 'stayingalive'\nDeleting Service 'stayingalive'\nDeleting Deployment 'stayingalive'\nDeleting BuildConfig 'stayingalive-binary' \n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Deploy-.NET-game-with-build-image\">11 Deploy .NET game with build-image<\/h2>\n\n\n\n<p>This part of the demo will guide you through process of creating a new project and building the .Net based game using the <a href=\"https:\/\/github.com\/tmds\/build-image\">dotnet build-image<\/a><\/p>\n\n\n\n<p>This part of the demo will be completed using the cecuser user.<\/p>\n\n\n\n<p>You can watch a recording of this exercise <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"dotnet 10 build image\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/pK2F9ztT65Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Install\/provide prerequisites<\/h3>\n\n\n\n<p>Follow the below steps to add the .Net 7 builder image to OCP.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log in to the OCP Bastion Server as the cecuser. Check you have the correct user. The whoami command should return cecuser.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>whoami<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>cecuser<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change to the build directory.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd \/home\/cecuser\/build<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update Git.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little endian - Supplementary (RPMs)             83 kB\/s | 3.8 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs)                 69 kB\/s | 2.9 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs)                   105 kB\/s | 4.1 kB     00:00\nDependencies resolved.\n======================================================================================================================\n Package                   Architecture     Version                  Repository                                  Size\n======================================================================================================================\nInstalling:\n git                       ppc64le          2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms          104 k\nInstalling dependencies:\n git-core                  ppc64le          2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms           12 M\n git-core-doc              noarch           2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms          3.0 M\n perl-Error                noarch           1:0.17025-2.el8          rhel-8-for-ppc64le-appstream-rpms           46 k\n perl-Git                  noarch           2.39.3-1.el8_8           rhel-8-for-ppc64le-appstream-rpms           79 k\n perl-TermReadKey          ppc64le          2.37-7.el8               rhel-8-for-ppc64le-appstream-rpms           42 k\n\nTransaction Summary\n======================================================================================================================\nInstall  6 Packages\n\nTotal download size: 15 M\nInstalled size: 53 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/6): git-2.39.3-1.el8_8.ppc64le.rpm                                                 1.2 MB\/s | 104 kB     00:00\n(2\/6): perl-Error-0.17025-2.el8.noarch.rpm                                            992 kB\/s |  46 kB     00:00\n(3\/6): git-core-doc-2.39.3-1.el8_8.noarch.rpm                                          16 MB\/s | 3.0 MB     00:00\n(4\/6): perl-Git-2.39.3-1.el8_8.noarch.rpm                                             1.4 MB\/s |  79 kB     00:00\n(5\/6): perl-TermReadKey-2.37-7.el8.ppc64le.rpm                                        949 kB\/s |  42 kB     00:00\n(6\/6): git-core-2.39.3-1.el8_8.ppc64le.rpm                                             34 MB\/s |  12 MB     00:00\n----------------------------------------------------------------------------------------------------------------------\nTotal                                                                                  43 MB\/s |  15 MB     00:00\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                                                              1\/1\n  Installing       : git-core-2.39.3-1.el8_8.ppc64le                                                              1\/6\n  Installing       : git-core-doc-2.39.3-1.el8_8.noarch                                                           2\/6\n  Installing       : perl-TermReadKey-2.37-7.el8.ppc64le                                                          3\/6\n  Installing       : perl-Error-1:0.17025-2.el8.noarch                                                            4\/6\n  Installing       : perl-Git-2.39.3-1.el8_8.noarch                                                               5\/6\n  Installing       : git-2.39.3-1.el8_8.ppc64le                                                                   6\/6\n  Running scriptlet: git-2.39.3-1.el8_8.ppc64le                                                                   6\/6\n  Verifying        : git-2.39.3-1.el8_8.ppc64le                                                                   1\/6\n  Verifying        : git-core-2.39.3-1.el8_8.ppc64le                                                              2\/6\n  Verifying        : git-core-doc-2.39.3-1.el8_8.noarch                                                           3\/6\n  Verifying        : perl-Error-1:0.17025-2.el8.noarch                                                            4\/6\n  Verifying        : perl-Git-2.39.3-1.el8_8.noarch                                                               5\/6\n  Verifying        : perl-TermReadKey-2.37-7.el8.ppc64le                                                          6\/6\nInstalled products updated.\n\nInstalled:\n  git-2.39.3-1.el8_8.ppc64le             git-core-2.39.3-1.el8_8.ppc64le      git-core-doc-2.39.3-1.el8_8.noarch\n  perl-Error-1:0.17025-2.el8.noarch      perl-Git-2.39.3-1.el8_8.noarch       perl-TermReadKey-2.37-7.el8.ppc64le\n\nComplete!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update dotnet.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>sudo dnf install dotnet-sdk-7.0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Updating Subscription Management repositories.\nRed Hat Enterprise Linux 8 for Power, little endian - Supplementary (RPMs)             89 kB\/s | 3.8 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs)                 57 kB\/s | 2.9 kB     00:00\nRed Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs)                    88 kB\/s | 4.1 kB     00:00\nDependencies resolved.\n======================================================================================================================\n Package                             Architecture Version                Repository                              Size\n======================================================================================================================\nInstalling:\n dotnet                              ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms       18 k\nInstalling dependencies:\n aspnetcore-runtime-7.0              ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      2.8 M\n aspnetcore-targeting-pack-7.0       ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      1.6 M\n dotnet-apphost-pack-7.0             ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      100 k\n dotnet-host                         ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      199 k\n dotnet-hostfxr-7.0                  ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      174 k\n dotnet-runtime-7.0                  ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      7.8 M\n dotnet-sdk-7.0                      ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms       52 M\n dotnet-targeting-pack-7.0           ppc64le      7.0.5-2.el8_8          rhel-8-for-ppc64le-appstream-rpms      2.9 M\n dotnet-templates-7.0                ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms      3.9 M\n netstandard-targeting-pack-2.1      ppc64le      7.0.105-2.el8_8        rhel-8-for-ppc64le-appstream-rpms      1.5 M\n\nTransaction Summary\n======================================================================================================================\nInstall  11 Packages\n\nTotal download size: 73 M\nInstalled size: 308 M\nIs this ok &#91;y\/N]: y\nDownloading Packages:\n(1\/11): dotnet-7.0.105-2.el8_8.ppc64le.rpm                                            220 kB\/s |  18 kB     00:00\n(2\/11): aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                        15 MB\/s | 1.6 MB     00:00\n(3\/11): dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                             1.8 MB\/s | 100 kB     00:00\n(4\/11): aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm                               17 MB\/s | 2.8 MB     00:00\n(5\/11): dotnet-host-7.0.5-2.el8_8.ppc64le.rpm                                         3.3 MB\/s | 199 kB     00:00\n(6\/11): dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le.rpm                                  2.3 MB\/s | 174 kB     00:00\n(7\/11): dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le.rpm                            14 MB\/s | 2.9 MB     00:00\n(8\/11): dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le.rpm                                   16 MB\/s | 7.8 MB     00:00\n(9\/11): dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le.rpm                               13 MB\/s | 3.9 MB     00:00\n(10\/11): netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le.rpm                    11 MB\/s | 1.5 MB     00:00\n(11\/11): dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le.rpm                                    29 MB\/s |  52 MB     00:01\n----------------------------------------------------------------------------------------------------------------------\nTotal                                                                                  38 MB\/s |  73 MB     00:01\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                                                              1\/1\n  Installing       : dotnet-host-7.0.5-2.el8_8.ppc64le                                                           1\/11\n  Installing       : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                         2\/11\n  Installing       : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le                                               3\/11\n  Installing       : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le                                                    4\/11\n  Installing       : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                    5\/11\n  Installing       : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                6\/11\n  Installing       : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                             7\/11\n  Installing       : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le                                                8\/11\n  Installing       : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le                                      9\/11\n  Installing       : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le                                                     10\/11\n  Installing       : dotnet-7.0.105-2.el8_8.ppc64le                                                             11\/11\n  Running scriptlet: dotnet-7.0.105-2.el8_8.ppc64le                                                             11\/11\n  Verifying        : aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                1\/11\n  Verifying        : aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                         2\/11\n  Verifying        : dotnet-7.0.105-2.el8_8.ppc64le                                                              3\/11\n  Verifying        : dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le                                               4\/11\n  Verifying        : dotnet-host-7.0.5-2.el8_8.ppc64le                                                           5\/11\n  Verifying        : dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le                                                    6\/11\n  Verifying        : dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                                                    7\/11\n  Verifying        : dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le                                                      8\/11\n  Verifying        : dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le                                             9\/11\n  Verifying        : dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le                                               10\/11\n  Verifying        : netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le                                     11\/11\nInstalled products updated.\n\nInstalled:\n  aspnetcore-runtime-7.0-7.0.5-2.el8_8.ppc64le                aspnetcore-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-7.0.105-2.el8_8.ppc64le                              dotnet-apphost-pack-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-host-7.0.5-2.el8_8.ppc64le                           dotnet-hostfxr-7.0-7.0.5-2.el8_8.ppc64le\n  dotnet-runtime-7.0-7.0.5-2.el8_8.ppc64le                    dotnet-sdk-7.0-7.0.105-2.el8_8.ppc64le\n  dotnet-targeting-pack-7.0-7.0.5-2.el8_8.ppc64le             dotnet-templates-7.0-7.0.105-2.el8_8.ppc64le\n  netstandard-targeting-pack-2.1-7.0.105-2.el8_8.ppc64le\n\nComplete!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install\/update the dotnet build-image tool.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet tool install -g dotnet-build-image<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>You can invoke the tool using the following command: dotnet-build-image\nTool 'dotnet-build-image' (version '0.5.2') was successfully installed.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add dotnet tools to PATH<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>export PATH=\"$PATH:\/home\/cecuser\/.dotnet\/tools\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Review the tool help information.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet build-image --help<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Description:\n  Build a container image from a .NET project.\n\nUsage:\n  build-image &#91;&lt;PROJECT&gt;] &#91;options]\n\nArguments:\n  &lt;PROJECT&gt;  .NET project to build &#91;default: .]\n\nOptions:\n  -b, --base &lt;base&gt;    Flavor of the base image\n  -t, --tag &lt;tag&gt;      Name for the built image\n  -a, --arch &lt;arch&gt;    Target architecture ('x64'\/'arm64'\/'s390x'\/'ppc64le')\n                       The base image needs to support the selected architecture\n  --push               After the build, push the image to the repository\n  --portable           Avoid using features that make the Containerfile not\n                       portable\n  --context &lt;context&gt;  Context directory for the build &#91;default: .]\n  --as-file &lt;as-file&gt;  Generates a Containerfile with the specified name\n  --print              Print the Containerfile\n  --version            Show version information\n  -?, -h, --help       Show help and usage information\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create or clone a .NET project.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>git clone https:\/\/github.com\/paulchapmanibm\/stayingalive.git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Cloning into 'stayingalive'...\nremote: Enumerating objects: 136, done.\nremote: Counting objects: 100% (136\/136), done.\nremote: Compressing objects: 100% (88\/88), done.\nremote: Total 136 (delta 54), reused 114 (delta 42), pack-reused 0\nReceiving objects: 100% (136\/136), 865.36 KiB | 15.18 MiB\/s, done.\nResolving deltas: 100% (54\/54), done. \n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove any existing Dockerfiles<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd stayingalive<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Dockerfile  Dockerfile.ppc64le  Dockerfile.x86  README.md  stayingalive  stayingalive.sln<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>rm Dockerfil*<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>README.md  stayingalive  stayingalive.sln <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Move to the directory containing the project file *.csproj<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>cd stayingalive<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>ls<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>appsettings.Development.json  Pages       Properties           stayingalive.csproj.ppc64le  wwwroot\nappsettings.json              Program.cs  stayingalive.csproj  stayingalive.csproj.x86\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Build and run the application using build-image<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We now have a .NET source project without a Dockerfile, which is required to build a container. We will now build a container from the .NET project and the Dockerfile will be automatically created by the build-image tool.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>dotnet build-image -t game:latest --arch ppc64le --base ubi<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>Building image 'game:latest' from project '\/home\/cecuser\/build\/stayingalive\/stayingalive\/stayingalive.csproj'.\n&#91;1\/2] STEP 1\/13: FROM registry.access.redhat.com\/ubi8\/dotnet-70:latest AS build-env\ntime=\"2023-06-09T05:50:45-04:00\" level=warning msg=\"missing \\\"UID\\\" build argument. Try adding \\\"--build-arg UID=&lt;VALUE&gt;\\\" to the command line\"\ntime=\"2023-06-09T05:50:45-04:00\" level=warning msg=\"missing \\\"GID\\\" build argument. Try adding \\\"--build-arg GID=&lt;VALUE&gt;\\\" to the command line\"\ntime=\"2023-06-09T05:50:45-04:00\" level=warning msg=\"missing \\\"UID\\\" build argument. Try adding \\\"--build-arg UID=&lt;VALUE&gt;\\\" to the command line\"\ntime=\"2023-06-09T05:50:45-04:00\" level=warning msg=\"missing \\\"GID\\\" build argument. Try adding \\\"--build-arg GID=&lt;VALUE&gt;\\\" to the command line\"\nTrying to pull registry.access.redhat.com\/ubi8\/dotnet-70:latest...\nGetting image source signatures\nChecking if image destination supports signatures\nCopying blob sha256:b7b266c137a567c08c67af32f48be66dca2e37779310a4f0f11254fb200547a1\nCopying blob sha256:5a9dd0ea9aa0c53ebdfe8b13b96e6a8dc23df3c41161b4a2d5d75d42bfbf20fb\nCopying blob sha256:cdc1eeb2ff7c0d91b77fc7380905c609f5e592eabc334cd45216394ae60a5759\nCopying config sha256:2fcc920557a621073fdfce570202f901eb120832bc331e60a639417c65ed1b4e\nWriting manifest to image destination\nStoring signatures\n&#91;1\/2] STEP 2\/13: ARG UID\n--&gt; e12b1a78092\n&#91;1\/2] STEP 3\/13: ARG GID\n--&gt; 8a73d9f1f2f\n&#91;1\/2] STEP 4\/13: USER 0\n--&gt; f1906ee1d0a\n&#91;1\/2] STEP 5\/13: COPY --from=registry.access.redhat.com\/ubi8\/dotnet-70-runtime:latest \/etc\/passwd \/etc\/group \/scratch\/etc\nTrying to pull registry.access.redhat.com\/ubi8\/dotnet-70-runtime:latest...\nGetting image source signatures\nChecking if image destination supports signatures\nCopying blob sha256:cdc1eeb2ff7c0d91b77fc7380905c609f5e592eabc334cd45216394ae60a5759\nCopying blob sha256:5a9dd0ea9aa0c53ebdfe8b13b96e6a8dc23df3c41161b4a2d5d75d42bfbf20fb\nCopying config sha256:dc6c5afa3a2cc506822888e8898444ba6b5402e7d7503afe041bf5f3c74b9ddc\nWriting manifest to image destination\nStoring signatures\n--&gt; ae3bd9007cd\n&#91;1\/2] STEP 6\/13: RUN grep \":$GID:\" \/scratch\/etc\/group || echo \"app:x:$GID:\" &gt;&gt;\/scratch\/etc\/group &amp;&amp; mkdir -p \/rootfs\/etc &amp;&amp; cp \/scratch\/etc\/group \/rootfs\/etc &amp;&amp;     grep \":x:$UID:\" \/scratch\/etc\/passwd || echo \"app:x:$UID:$GID::\/home\/app:\/usr\/sbin\/nologin\" &gt;&gt;\/scratch\/etc\/passwd &amp;&amp; mkdir -p \/rootfs\/etc &amp;&amp; cp \/scratch\/etc\/passwd \/rootfs\/etc\nroot:x:0:\ndefault:x:1001:0:Default Application User:\/opt\/app-root:\/sbin\/nologin\n--&gt; aa2950d1e8c\n&#91;1\/2] STEP 7\/13: RUN mkdir -p \/rootfs\/home\/app\n--&gt; 84ce742a52e\n&#91;1\/2] STEP 8\/13: ENV HOME=\/home\/build\n--&gt; c02495b765f\n&#91;1\/2] STEP 9\/13: WORKDIR \/src\n--&gt; 48346f76b12\n&#91;1\/2] STEP 10\/13: COPY . .\/\n--&gt; 02a024a860a\n&#91;1\/2] STEP 11\/13: RUN --mount=type=cache,id=nuget,target=\/home\/build\/.nuget\/packages,Z dotnet restore .\n  Determining projects to restore...\n  Restored \/src\/stayingalive.csproj (in 494 ms).\n--&gt; 5375a8314d9\n&#91;1\/2] STEP 12\/13: RUN --mount=type=cache,id=nuget,target=\/home\/build\/.nuget\/packages,Z dotnet publish --no-restore -c Release -o \/rootfs\/app .\nMSBuild version 17.4.3+7e646be43 for .NET\n  stayingalive -&gt; \/src\/bin\/Release\/net7.0\/stayingalive.dll\n  stayingalive -&gt; \/rootfs\/app\/\ntime=\"2023-06-09T05:51:33-04:00\" level=warning msg=\"archive: skipping \\\"\/home\/cecuser\/.local\/share\/containers\/storage\/overlay\/2724961b3c9ac0ddff71db351299bdaafcb3bbab498647ee9ef44b4faba56099\/diff\/tmp\/dotnet-diagnostic-36-4413582-socket\\\" since it is a socket\"\ntime=\"2023-06-09T05:51:33-04:00\" level=warning msg=\"archive: skipping \\\"\/home\/cecuser\/.local\/share\/containers\/storage\/overlay\/2724961b3c9ac0ddff71db351299bdaafcb3bbab498647ee9ef44b4faba56099\/diff\/tmp\/zzi6tW1mhG_JriOOInfq8ZYXj96AzWfNu_SpKAdhwrc\\\" since it is a socket\"\n--&gt; 3e1468996b2\n&#91;1\/2] STEP 13\/13: RUN chgrp -R $GID \/rootfs\/app \/rootfs\/home\/app &amp;&amp; chmod -R g=u \/rootfs\/app \/rootfs\/home\/app &amp;&amp; chown -R $UID:$GID \/rootfs\/app \/rootfs\/home\/app\n--&gt; b19f9dce269\n&#91;2\/2] STEP 1\/8: FROM registry.access.redhat.com\/ubi8\/dotnet-70-runtime:latest\n&#91;2\/2] STEP 2\/8: ARG UID\n--&gt; 1df1ba65315\n&#91;2\/2] STEP 3\/8: ARG GID\n--&gt; 9a3dcbeac18\n&#91;2\/2] STEP 4\/8: COPY --from=build-env \/rootfs \/\n--&gt; 4959b146e17\n&#91;2\/2] STEP 5\/8: USER $UID:$GID\n--&gt; 4dc2e2e5c30\n&#91;2\/2] STEP 6\/8: ENV ASPNETCORE_URLS=http:\/\/*:8080     HOME=\/home\/app\n--&gt; 775637f875c\n&#91;2\/2] STEP 7\/8: WORKDIR \/app\n--&gt; 9ddac22e413\n&#91;2\/2] STEP 8\/8: ENTRYPOINT &#91;\"dotnet\", \"\/app\/stayingalive.dll\"]\n&#91;2\/2] COMMIT game:latest\n--&gt; b74188c029d\nSuccessfully tagged localhost\/game:latest\nb74188c029dfb0c6449be4c7a4ca7f67cc33d045547202d8a3414b4fcbc3c791\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We can see that the build-image tool has built the container from source, automatically creating it\u2019s own Dockerfile, from a Universal Base Image obtained from the Red Hat registry.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman images<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>REPOSITORY                                         TAG         IMAGE ID      CREATED        SIZE\nlocalhost\/game                                     latest      b74188c029df  2 minutes ago  261 MB\n&lt;none&gt;                                             &lt;none&gt;      b19f9dce2695  2 minutes ago  662 MB\nregistry.access.redhat.com\/ubi8\/dotnet-70          latest      2fcc920557a6  4 weeks ago    627 MB\nregistry.access.redhat.com\/ubi8\/dotnet-70-runtime  latest      dc6c5afa3a2c  4 weeks ago    253 MB\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Now start the container, specifying the network ports to be used.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>podman run -p 8080:8080 game<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository&#91;60]\n      Storing keys in a directory '\/home\/app\/.aspnet\/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.\nwarn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager&#91;35]\n      No XML encryptor configured. Key {2c358c35-8bdf-4181-af85-1cc3024cd7f3} may be persisted to storage in unencrypted form.\ninfo: Microsoft.Hosting.Lifetime&#91;14]\n      Now listening on: http:\/\/&#91;::]:8080\ninfo: Microsoft.Hosting.Lifetime&#91;0]\n      Application started. Press Ctrl+C to shut down.\ninfo: Microsoft.Hosting.Lifetime&#91;0]\n      Hosting environment: Production\ninfo: Microsoft.Hosting.Lifetime&#91;0]\n      Content root path: \/app  \n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Verify and play the game<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify the Application is Running. To view your new application, browse to the previously specified network ports and IP address of your bastion server.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-vivid-cyan-blue-color has-contrast-background-color has-text-color has-background\"><code>http:&#47;&#47;&lt;your_IP_address:8080\/<\/code><\/pre>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-contrast-background-color has-text-color has-background\"><code>http:&#47;&#47;129.40.95.217:8080\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"750\" src=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-58.png\" alt=\"\" class=\"wp-image-1929\" srcset=\"https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-58.png 757w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-58-300x297.png 300w, https:\/\/nas01.tallpaul.net\/wordpress\/wp-content\/uploads\/2024\/12\/image-58-150x150.png 150w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Optional-Unguided-Exercises\">12 Optional Unguided Exercises<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>IBM Power Development<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Review the PDEX .NET Blog of Blogs <\/h4>\n\n\n\n<p><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/linda-alkire-kinnunen\/2023\/01\/14\/dotnet-on-ibm-power-resources-for-developers\">https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/linda-alkire-kinnunen\/2023\/01\/14\/dotnet-on-ibm-power-resources-for-developers<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Hello World<\/h4>\n\n\n\n<p><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2022\/12\/19\/net-hello-world-app-on-ibm-power\">https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2022\/12\/19\/net-hello-world-app-on-ibm-power<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><a rel=\"noreferrer noopener\" href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2023\/01\/13\/cross-build-dotnet7-on-x86-ibm-power\" target=\"_blank\">Cross build .NET 7 on x86 for IBM Power<\/a><\/h4>\n\n\n\n<p>This blog shows you how to take the upstream .NET code and build an SDK for ppc64le on the distro of your choice, which is a longer, more complex task.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Lift &amp; shift your existing .NET 7 applications to Linux on Power<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2023\/06\/09\/demystifying-nuget-package-compatibility-on-power\" target=\"_blank\">Demystifying .NET NuGet package compatibility on IBM Power<\/a>. In this blog, you&#8217;ll get a crash course on NuGet, the official package manager for .NET that empowers developers to seamlessly package and distribute their software crafted using .NET framework.<\/li>\n\n\n\n<li>This blog, <a rel=\"noreferrer noopener\" href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/alhad-deshpande\/2023\/01\/13\/identityserver-sqlite-db-on-net-7\" target=\"_blank\">IdentityServer (SQLite DB) on .NET 7<\/a>, shows you how to migrate a .NET 3.1 application (IdentityServer) with a SQLite backend to .NET 7 on a Power system running Red Hat Enterprise Linux (RHEL) 8.7 or 9.1.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Connect your .NET application to a database.<\/h4>\n\n\n\n<p>A .NET application can connect to backend database servers using Entity Framework (EF) Core, ADO.NET, ODBC, or native drivers. The following blogs cover several of these scenarios based on whether the database is on the same server as the .NET app or not:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Connect to a backend database on the SAME system<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2022\/12\/27\/connecting-a-net-application-to-mariadb-using-an-o\" target=\"_blank\" rel=\"noreferrer noopener\">C# program that connects to MariaDB using an ODBC connector<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/janani-janakiraman\/2023\/01\/13\/develop-c-program-connect-to-mongodb\" target=\"_blank\" rel=\"noreferrer noopener\">C# program that connects to a NoSQL database<\/a> (MongoDB using native drivers)<\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/alhad-deshpande\/2023\/01\/17\/c-to-postgresql-using-efcore-crud-operations\" target=\"_blank\" rel=\"noreferrer noopener\">C# program that connects to Postgres using EF Core<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/alhad-deshpande\/2023\/01\/17\/c-to-sqlite-using-efcore-crud-operations\" target=\"_blank\" rel=\"noreferrer noopener\">C# program that connects to SQLite database using EF Core<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2023\/01\/16\/connecting-mysql-database-using-ado-net\" target=\"_blank\" rel=\"noreferrer noopener\">C# program that connects to MySQL server using ADO.Net<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sapana-khemkar\/2023\/03\/28\/connect-dotnet-app-sql-db-on-ibm-power\" target=\"_blank\" rel=\"noreferrer noopener\">C# application that connects to Microsoft SQL database<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/vikas-gupta\/2023\/04\/06\/connect-dotnet-app-to-edb-postgresql-on-power\" target=\"_blank\" rel=\"noreferrer noopener\">C# application that connects to EDB PostgreSQL<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/janani-janakiraman\/2023\/07\/12\/connect-dotnet-app-to-cassandra-on-power\" target=\"_blank\" rel=\"noreferrer noopener\">C# application that connects to Apache Cassandra<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Connect to a backend database on a DIFFERENT system.<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/janani-janakiraman\/2022\/12\/15\/dotnet7-power-linux-to-ibmi-odbc\" target=\"_blank\" rel=\"noreferrer noopener\">C# program on Linux partition connects to remote database server on IBM i using ODBC<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/janani-janakiraman\/2023\/02\/02\/connect-dotnet-app-on-linux-to-oracle-on-aix\" target=\"_blank\" rel=\"noreferrer noopener\">C# program on Linux partition that connects to Oracle on an AIX partition<\/a>.&nbsp;<\/li>\n\n\n\n<li>Advanced Use Cases<\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/sachin-itagi\/2023\/03\/03\/developing-net-applications-on-ibm-power-using-vis\" target=\"_blank\" rel=\"noreferrer noopener\">Develop .NET applications on IBM Power using Virtual Studio Code with OpenShift Dev Spaces<\/a>. In this blog, you&#8217;ll learn to install and use Red Hat OpenShift Dev Spaces to code, build, test, run, and debug your .NET applications on Power.<\/li>\n\n\n\n<li><a href=\"https:\/\/community.ibm.com\/community\/user\/powerdeveloper\/blogs\/janani-janakiraman\/2023\/05\/04\/grpctools-package-for-c-on-power\" target=\"_blank\" rel=\"noreferrer noopener\">Grpc.Tools package for C# on Power<\/a>. In this blog, you&#8217;ll learn how to build the Grpc.Tools package for C# on IBM Linux on Power. We&#8217;ll walk you through the process of verifying the port of the Grpc.Tools package on Power, using a sample gRPC application written in C# giving you a better understanding of how to leverage this package to create efficient APIs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Microsoft .NET Documentation<\/h3>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/\">https:\/\/learn.microsoft.com\/en-us\/dotnet\/<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\" type=\"A\">\n<li>Microsoft .NET Tutorials<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/core\/tutorials\/\">https:\/\/learn.microsoft.com\/en-us\/dotnet\/core\/tutorials\/<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build your first web app with ASP.NET Core using <strong>Blazor<\/strong><\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/dotnet.microsoft.com\/en-us\/learn\/aspnet\/blazor-tutorial\/intro\">https:\/\/dotnet.microsoft.com\/en-us\/learn\/aspnet\/blazor-tutorial\/intro<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Get started with ASP.NET Core <strong>SignalR<\/strong><\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/aspnet\/core\/tutorials\/signalr?view=aspnetcore-8.0&amp;tabs=visual-studio\">https:\/\/learn.microsoft.com\/en-us\/aspnet\/core\/tutorials\/signalr?view=aspnetcore-8.0&amp;tabs=visual-studio<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Summary-and-Next-Steps\">13. Summary and Next Steps<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What You&#8217;ve Accomplished<\/h3>\n\n\n\n<p>Throughout this hands-on lab, you&#8217;ve successfully:<\/p>\n\n\n\n<p>1. Set up and configured development environments for .NET on IBM Power, including:<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Installing .NET SDK 7.0 on RHEL<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Configuring OpenShift for .NET deployments<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Setting up necessary tools like Git and Podman<\/p>\n\n\n\n<p>2. Created and deployed .NET applications using multiple approaches:<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Direct deployment on RHEL<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Manual containerization with Podman<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; OpenShift S2I (Source-to-Image) deployment<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Using specialized tools like dotnet-shift and build-image<\/p>\n\n\n\n<p>3. Worked with different application types:<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Console applications<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Web applications using ASP.NET Core<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Real-time communication apps using SignalR<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Interactive game applications<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Blazor web applications<\/p>\n\n\n\n<p>4. Gained practical experience with:<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Source code management using GitHub<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Container registry operations with Quay.io<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; OpenShift deployment workflows<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Container orchestration and management<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Key Takeaways<\/h3>\n\n\n\n<p>1. Deployment Flexibility<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; .NET applications can be deployed directly on RHEL or containerized<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Multiple deployment methods are available to suit different needs<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; OpenShift provides enterprise-grade orchestration capabilities<\/p>\n\n\n\n<p>2. Development Tools<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Rich ecosystem of tools available for Power platform<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Seamless integration with standard development workflows<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Various options for building and managing containers<\/p>\n\n\n\n<p>3. Enterprise Readiness<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Production-grade deployment options<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Scalable container-based solutions<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Integration with enterprise systems and tools<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Next Steps<\/h3>\n\n\n\n<p>To continue your journey with .NET on IBM Power, consider:<\/p>\n\n\n\n<p>1. Advanced Development<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Explore more complex application architectures<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Implement microservices using .NET &#8211; <a href=\"https:\/\/nas01.tallpaul.net\/wordpress\/sock-shop-lab\" target=\"_blank\" rel=\"noreferrer noopener\">This lab includes .NET microservices<\/a><\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Integrate with databases and other backend services<\/p>\n\n\n\n<p>2. Production Deployment<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Set up CI\/CD pipelines<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Implement monitoring and logging<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Configure high availability and scaling<\/p>\n\n\n\n<p>3. Additional Resources<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; IBM Power Development Community<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Microsoft .NET Documentation<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Red Hat OpenShift Documentation<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Community forums and support channels<\/p>\n\n\n\n<p>4. Optional Learning Paths<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Database connectivity<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Performance optimization<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Security hardening<\/p>\n\n\n\n<p>&nbsp;&nbsp; &#8211; Advanced OpenShift features<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Getting Help<\/h3>\n\n\n\n<p>Remember that you can always refer to:<\/p>\n\n\n\n<p>&#8211; Official IBM Power documentation<\/p>\n\n\n\n<p>&#8211; Microsoft .NET documentation<\/p>\n\n\n\n<p>&#8211; Red Hat OpenShift documentation<\/p>\n\n\n\n<p>&#8211; IBM Power Developer community forums<\/p>\n\n\n\n<p>&#8211; Red Hat customer support<\/p>\n\n\n\n<p>You&#8217;ve now completed the foundational steps for developing and deploying .NET applications on IBM Power systems. This knowledge provides a solid base for building and running enterprise .NET applications on the Power platform.<\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter has-huge-icon-size has-icon-color is-style-default is-layout-flex wp-block-social-links-is-layout-flex\"><li style=\"color: #ffffff; \" class=\"wp-social-link wp-social-link-wordpress  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/nas01.tallpaul.net\/wordpress\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.158,12.786L9.46,20.625c0.806,0.237,1.657,0.366,2.54,0.366c1.047,0,2.051-0.181,2.986-0.51 c-0.024-0.038-0.046-0.079-0.065-0.124L12.158,12.786z M3.009,12c0,3.559,2.068,6.634,5.067,8.092L3.788,8.341 C3.289,9.459,3.009,10.696,3.009,12z M18.069,11.546c0-1.112-0.399-1.881-0.741-2.48c-0.456-0.741-0.883-1.368-0.883-2.109 c0-0.826,0.627-1.596,1.51-1.596c0.04,0,0.078,0.005,0.116,0.007C16.472,3.904,14.34,3.009,12,3.009 c-3.141,0-5.904,1.612-7.512,4.052c0.211,0.007,0.41,0.011,0.579,0.011c0.94,0,2.396-0.114,2.396-0.114 C7.947,6.93,8.004,7.642,7.52,7.699c0,0-0.487,0.057-1.029,0.085l3.274,9.739l1.968-5.901l-1.401-3.838 C9.848,7.756,9.389,7.699,9.389,7.699C8.904,7.67,8.961,6.93,9.446,6.958c0,0,1.484,0.114,2.368,0.114 c0.94,0,2.397-0.114,2.397-0.114c0.485-0.028,0.542,0.684,0.057,0.741c0,0-0.488,0.057-1.029,0.085l3.249,9.665l0.897-2.996 C17.841,13.284,18.069,12.316,18.069,11.546z M19.889,7.686c0.039,0.286,0.06,0.593,0.06,0.924c0,0.912-0.171,1.938-0.684,3.22 l-2.746,7.94c2.673-1.558,4.47-4.454,4.47-7.771C20.991,10.436,20.591,8.967,19.889,7.686z M12,22C6.486,22,2,17.514,2,12 C2,6.486,6.486,2,12,2c5.514,0,10,4.486,10,10C22,17.514,17.514,22,12,22z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">WordPress<\/span><\/a><\/li>\n\n<li style=\"color: #ffffff; \" class=\"wp-social-link wp-social-link-mail  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"mailto:paulchapman@uk.ibm.com\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19,5H5c-1.1,0-2,.9-2,2v10c0,1.1.9,2,2,2h14c1.1,0,2-.9,2-2V7c0-1.1-.9-2-2-2zm.5,12c0,.3-.2.5-.5.5H5c-.3,0-.5-.2-.5-.5V9.8l7.5,5.6,7.5-5.6V17zm0-9.1L12,13.6,4.5,7.9V7c0-.3.2-.5.5-.5h14c.3,0,.5.2.5.5v.9z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Mail<\/span><\/a><\/li>\n\n<li style=\"color: #ffffff; \" class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/@paulchapman1280\/videos\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li style=\"color: #ffffff; \" class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/in\/chapmanp\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comprehensive .NET on IBM Power hands-on lab covering RHEL deployment, OpenShift containerization, GitHub integration, and Podman workflows.<\/p>\n","protected":false},"author":1,"featured_media":2044,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83,12,125,5,1],"tags":[],"class_list":["post-1851","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-conference","category-dotnet","category-guided-hands-on-lab","category-open-source","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/posts\/1851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/comments?post=1851"}],"version-history":[{"count":0,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/posts\/1851\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/media\/2044"}],"wp:attachment":[{"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/media?parent=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/categories?post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nas01.tallpaul.net\/wordpress\/wp-json\/wp\/v2\/tags?post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}