Skip to Content
Technical Articles
Author's profile photo Samuel Davies

Install ABAP Platform 1909 – Dev Edition on an Azure Ubuntu instance using docker – Part 2

Welcome to the second instalment of this tutorial series. In this part, we are going to focus on the installation and access to the ABAP platform.

I will reiterate the process blueprint to help follow the steps we need to achieve to complete this installation. Since we tackled Step 1 of the blueprint inPart 1of this series, we will continue from step 2 in this part.

Process blueprint

  1. Create and login into an ubuntu instance on Azure.
  2. Prepare the data drive on your ubuntu instance.
  3. Install docker and move docker data directory to the prepared data drive.
  4. Install ABAP Platform 1909 Dev Edition with docker.
  5. Open the necessary ports on Azure.
  6. Access your ABAP instance in SAP GUI and generate a new license.

Step 2: Prepare the data drive on your ubuntu instance.

To render the disk we created inPart 1usable, we will have to partition, format, and mount this disk on our virtual machine. To start this process, let us first find out which disks are available on our system and their mount points. After you have successfully created an SSH connection to the virtual machine as we did in the last step ofPart 1, run the command

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

The output should look like the image below. The highlighted line with the 256G size is our line of interest. Take a note of the letters (sdb) as we will need it for the next few commands.

Image%201%3A%20List%20all%20drives%20and%20mount%20points

Image 1: List all drives and mount points

Now that we have found our disk of interest, it is now time to partition and format our disk.

Run the following commands and substitute the letters in the command according to what you received in your output. So if your disk had letterssdcon the line of interest, you have to placesdcin place ofin the commands below

sudo parted /dev/ --script mklabel gpt mkpart xfspart xfs 0% 100% sudo mkfs.xfs /dev/1 sudo partprobe /dev/1

This is how it should look in your terminal

Image%202%3A%20Partition%20and%20format%20disk

Image 2: Partition and format disk

Now that our disk is partitioned and formatted, let us mount the disk on our virtual machine.

To mount the disk, run the following commands.

sudo mkdir /datadrive sudo mount /dev/1 /datadrive

上面的命令应该在t是这个样子erminal

Image%203%3A%20Create%20and%20mount%20datadrive%20directory

Image 3: Create and mount datadrive directory

To make our mount permanent so that it persists after subsequent reboots, we will have to edit thefstabwith the UUID of our drive. To find out the UUID, we will have to run the command:

sudo blkid

The output should look like the image below. Note down the UUID on the line that matched the letters of your drive as demonstrated.

Image%204%3A%20Note%20down%20UUID%20of%20disk

Image 4: Note down UUID of disk

With the UUID copied, edit the line below with your UUID and keep it in a notepad to be used in the next step.

UUID= /datadrive xfs defaults,nofail 1 2

And example of what should be in your notepad is

UUID=19060fbb-68f1-42b3-9849-90ba57085d89 /datadrive xfs defaults,nofail 1 2

Now that you have your UUID line in your notepad, let us move ahead to edit thefstabfile.

Type the command below in your terminal

sudo nano /etc/fstab

Image%205%3A%20Open%20fstab%20file

Image 5: Open fstab file

In the second line of the file that opens in your terminal, paste the line in your notepad as demonstrated in the terminal below.

Image%206%3A%20Exit%20by%20CTRL+X

Image 6: Exit by CTRL+X

You can now exit by hitting theCTRL+Xkey combination on your keyboard. When asked to “Save the modified buffer?”, hit the ‘y’ key on your keyboard.

Image%207%3A%20Save%20buffer%20by%20hitting%20y%20key

Image 7: Save buffer by hitting y key

Finally you can hit the ‘Enter’ key on your keyboard to save the file when you see ‘File Name to write: /etc/fstab’.

Image%208%3A%20Write%20fstab

Image 8: Write fstab

We have now successfully mounted our drive to persist after reboots. Our next step is to verify if our mount was successful. To ensure this, run the command below in the terminal:

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

The output should look like what is shown in the image

Image%209%3A%20Check%20permanent%20mount%20point

Image 9: Check permanent mount point

Finally, let us change the ownership of the datadrive to our current user. You do this by running the command below:

sudo chown -R $USER /datadrive

图像% 3 2010% % 20改变% 20 datadrive % 20 o % 20目录wner

Image 10: Change datadrive directory owner

Step 3: Install docker and move docker data directory to the prepared data drive.

Since we are installing docker for a test environment and will most likely not be using our system in a production setting, we will be using the get.docker.com official scripts to install docker. To do this, run the commands below in your terminal.

mkdir dockerinstall cd dockerinstall curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh

The commands above and their output should look like this.

Image%2011%3A%20Docker%20installation

Image 11: Docker installation

Ending with

Image%2012%3A%20Ending%20of%20output%20for%20docker%20installation

Image 12: Ending of output for docker installation

Since we would like to use docker with our current user, let us run the usermod command below

sudo usermod -aG docker $USER

Image%2013%3B%20Add%20your%20current%20user%20to%20the%20docker%20group

Image 13; Add your current user to the docker group

Let’s switch our attention now to changing the data directory of docker to the datadrive we created earlier. To achieve this, let us first stop the docker service by running the command below and then create a file calleddaemon.jsonin the /etc/docker directory.

sudo service docker stop cd /etc/docker/ sudo nano daemon.json

Image%2014%3A%20Open%20daemon.json%20file

Image 14: Open daemon.json file

When the file opens up in the nano text editor, copy and paste the following content in the file and save the file by using the key combinationCTRL+Xfollowed by the ‘y’ key and finally the ‘Enter’ key on the keyboard.

{ "data-root": "/datadrive" }

Image%2015%3A%20Paste%20content%20in%20daemon.json%20file

Image 15: Paste content in daemon.json file

After successfully saving thedaemon.jsonfile, we now have to copy everything from the old docker data directory to our new data directory which is/datadrive. To achieve this, run the command

sudo rsync -aP /var/lib/docker/ /datadrive

Image%2016%3A%20Copy%20files%20to%20datadrive%20directory

Image 16: Copy files to datadrive directory

After the copy is completed, we can now safely rename the old docker data directory by running the command and then finally restart the docker service.

sudo mv /var/lib/docker /var/lib/docker.old sudo service docker start

Image%2017%3A%20Start%20docker%20service

Image 17: Start docker service

With this step complete, we have officially installed docker and changed the default data directory to our own drive. Let us now reboot our virtual machine to ensure all the services will run completely after a reboot.

sudo重启

Image%2018%3A%20Reboot%20virtual%20machine

Image 18: Reboot virtual machine

The connection will be closed and you will be returned to your terminal. Wait for about 30 seconds to a minute for your virtual machine to reboot and SSH into the virtual machine again as shown below.

Image%2019%3A%20SSH%20into%20virtual%20machine%20again

Image 19: SSH into virtual machine again

After logging in successfully into the virtual machine, we can now try to login into docker to ensure our installation is still working correctly. To do this, use the command below and enter yourdockerhubusername and password when it is requested.

docker login

Image%2020%3A%20Login%20into%20dockerhub

Image 20: Login into dockerhub

If you are presented Login Succeeded in the terminal, that’s a good sign which means you are on the final stretch to getting your ABAP Platform up and running.

Step 4: Install ABAP Platform 1909 Dev Edition with docker.

After our successful login, we are going to define some limits for our docker installation to prevent us from running into theCannot continue because of insufficient system limits configuration!Error. To do this, copy and paste the following into your terminal. It is recommended you do this step just once to prevent duplication of the lines in thesysctlconfiguration file.

echo 'fs.file-max=20000000' | sudo tee -a sudo /etc/sysctl.conf echo 'fs.aio-max-nr=18446744073709551615' | sudo tee -a sudo /etc/sysctl.conf echo 'vm.max_map_count=2147483647' | sudo tee -a sudo /etc/sysctl.conf sudo sysctl -p

Image%2021%3A%20Configure%20sysctl

Image 21: Configure sysctl

We are now ready to start the actual ABAP platform installation with docker. We will do that by running the command below. It is worth noting that the system expects the host name to bevhcala4hci, all other host names will prevent the system from starting.

docker run \ --stop-timeout 3600 \ --sysctl kernel.shmmax=21474836480 \ --sysctl kernel.shmmni=32768 \ --sysctl kernel.shmall=5242880 \ --sysctl kernel.msgmni=1024 \ --sysctl kernel.sem="1250 256000 100 8192" \ --ulimit nofile=1048576:1048576 \ -i --name a4h -h vhcala4hci \ -p 3200:3200 \ -p 3300:3300 \ -p 8443:8443 \ -p 30213:30213 \ -p 30215:30215 \ -p 50000:50000 \ -p 50001:50001 store/saplabs/abaptrial:1909 -agree-to-sap-license

Image%2022%3A%20Run%20docker%20to%20install%20ABAP

Image 22: Run docker to install ABAP

上面的命令将惠大约一个小时ete and when it’s done, the output will look like the image below. Once the command is complete, the output will look like below.

Image%2023%3A%20End%20of%20output%20for%20docker%20run

Image 23: End of output for docker run

While we wait for the installation to see the output below, let us head on to Azure once again to open the ports necessary to access our system.

Step 5: Open the necessary ports on Azure.

Since we are now waiting for the installation to complete in the terminal, let us switch to the browser and open the azure portal to our virtual machine. Once we are on the virtual machine overview page of azure portal, click on theNetworkinglink as highlighted below.

Image%2024%3A%20Click%20Networking%20link

Image 24: Click Networking link

On the Networking detail page, click theAdd inbound port rulebutton.

Image%2025%3A%20Add%20inbound%20port%20rules

Image 25: Add inbound port rules

A side window will open up and you will have to enter the values pelow both inDestination port rangesand theNametext boxes as shown below. You have to repeat this process for all the ports listed below.

Destination port range 3200 Name: Port_3200 Destination port range 3300 Name: Port_3300 Destination port range 8443 Name: Port_8443 Destination port range 30213 Name: Port_30213 Destination port range 30215 Name: Port_30215 Destination port range 50000 Name: Port_50000 Destination port range 50001 Name: Port_50001

Image%2026%3A%20Fill%20in%20details%20for%20port%20rules

Image 26: Fill in details for port rules

After the process is done for all the ports listed above the final output should look like

Image%2027%3A%20All%20inbound%20ports%20added

Image 27: All inbound ports added

It cannot be stressed enough that for a production system, theSourceof the requests should be limited to prevent unwanted accesses to the system but for our test system. It is fine to play ‘fast and loose’ with it in the spirit of experimentation.

Now that we have successfully opened up our ports, let us head back to the terminal to check up on the progress of the installation.

Step 6: Generate a new license for your installation.

If you can seeHave fun!In the terminal as shown above at the end ofStep 4, and you have your ports open as shown instep 5, let us now try to create a connection to our ABAP instance. To achieve this, open SAP GUI and click theCreatebutton as highlighted below.

Image%2028%3A%20Click%20on%20create%20connection

Image 28: Click on create connection

After clicking the create button, give the descriptiona4h, choose theAdvancedtab and select theExpert Settingscheckbox. You can then fill in the connection parameters textarea. The format is

conn=/H//S/3200

The IP address to be used here is the same IP address you use to SSH into your virtual machine and this can also be found as thePublic IP addressin Azure. Finally you can clickSaveafter filling in the connection parameters.

Image%2029%3A%20Add%20connection%20parameters

Image 29: Add connection parameters

The connection you created should now be visible in your connections page in SAP GUI. Double click thea4hto open the logon screen for the connection.

Image%2030%3A%20Double%20click%20a4h

Image 30: Double click a4h

When the connection opens up in SAP GUI, try to logon with the developer account. Theusernamefor the developer account isDEVELOPERand the password isLdtf5432you can leave the Client as is:001. If you try to logon with these credentials you will see an error in the status bar“Logon not possible (error in license check)”. This is no cause for alarm as we will go through the steps to generate and install a license.

Image%2031%3A%20License%20check%20error

Image 31: License check error

我们仍然可以登录到我们的安装与SAP* user. To do this use the credentials: usernameSAP*and passwordLdtf5432as shown below.

Image%2032%3A%20Login%20with%20SAP*

Image 32: Login with SAP*

Once you are logged in successfully, enter the transactionslicenseas shown in the image below and execute.

Image%2033%3A%20Enter%20slicense%20transaction.

Image 33: Enter slicense transaction.

You will see two expired licenses and anActive Hardware Keywhich is very important for generating our license keys. So go ahead and write down the hardware key in any notepad application available.

Image%2034%3A%20Copy%20hardware%20key

图34:复制硬件的关键

To generate a new license for your installation let us head on over to theminisap license website. Select the license in the Available SAP Systems that matches our installation which isA4H – SAP NetWeaver AS ABAP 7.4 and above (Linux / SAP HANA)in our case.

Image%2035%3A%20Choose%20a4h%20SAP%20system

Image 35: Choose a4h SAP system

Scroll down to the bottom of the page and you will see a section asking for yourpersonal informationandhardware key. Fill in the personal information and supply thehardware keywe copied earlier. Agree to the license agreement and then click theGeneratebutton.

Image%2036%3A%20Agree%20to%20and%20generate%20license

Image 36: Agree to and generate license

A license text file will automatically be downloaded to your downloads folder. Open your downloads folder and find the download text file most likely namedA4H_Multiple.txt. Once you find the file, open the folder side by side to the SAP GUI as we will be dragging and dropping the license file. After opening the folder containing the license file side by side, click theInstall Licensebutton in SAP GUI, denoted by1in the image below. When the dialog File dialog opens up, drag the license file from the and drop it in the file dialog, denoted by2in the image below. Finally click theOpenbutton to install the license.

Image%2037%3A%20Drag%20and%20drop%20license%20file

Image 37: Drag and drop license file

If everything went smoothly, you should receive a prompt that says “2 SAP license key(s) successfully installed.”

Image%2038%3A%20License%20installed

Image 38: License installed

We now have a valid license and can try logging in with the DEVELOPER account again. To do this, we must first log of from the SAP* user. To log off, selectSystemin SAP GUI and chooseLog Offin the drop down menu as shown in the image below and chooseYeswhen asked to confirm.

Image%2039%3A%20Log%20off%20system

Image 39: Log off system

Finally login in with the developer credentials provided earlier, username:DEVELOPER, password:Ldtf5432as shown below.

Image%2040%3A%20Login%20with%20developer%20account

Image 40: Login with developer account

You should now have access to your ABAP Platform 1909 Developer Edition and a long journey of experimentation ahead of you.

图像% 2041%3A%20Successful%20login%20into%20ABAP%20Platform%201909%20Dev%20Edition

Image 41: Successful login into ABAP Platform 1909 Dev Edition

This brings us to the end of the tutorial series. I had a great time putting this post together and hope to help a reader get up and running in ABAP in little or no time. To find more information regarding logging intoSAP HANA Studioor using theSAP Cloud Connectoryour ABAP instance please visit thedockerhubpage and search for the specific term.

If you run into any issues while following this blog or have any edits or additions please drop a message in the comment section and I will get back to you.

Hope you had a great time following this post.

Happy Coding!!!

Assigned Tags

      3 Comments
      You must beLogged onto comment or reply to a post.
      Author's profile photo Marc Bernard
      Marc Bernard

      Thank you, Samuel, for this exceptional blog! #Excellent

      I was able to follow it all and get it up an running on my Azure environment.

      A couple corrections:

      • Port 30215 must be open as well to connect with HANA studio
      • It should say "client 001" instead of "instance number 001"

      Sizing:

      It looks like 256 GB disk is much more than required. Only 38% used within docker. Any particular reason why you made it so big?

      Security:

      Using Azure makes the environment much more open to threats. Anyone who knows the IP address, will be able to logon to the system since everything else is known. I strongly recommend making changes like

      • Limiting ports to certain IP addresses (instead of "any")
      • Changing passwords of DEVELOPER, SAP*, and DDIC users in ABAP or disabling those and using your own ID
      • Similarly, changing passwords for SYSTEM and SAPA4H users in HANA

      These security topics should definitely be mentioned on the dockerhub as well (ccJulie Plummer)

      Author's profile photo Samuel Davies
      Samuel Davies
      Blog Post Author

      HiMarc Bernardthank you very much for your input. I will make the necessary changes you suggested.

      With regards to the storage, I believe 64GB would have been a squeeze but 128GB should be perfectly fine.

      You're absolutely right, to make the blog very beginner friendly, I took a very relaxed approach with regards to the security in this blog post and only briefly mentioned restricting the IP Addresses in a production Azure environment.

      I am putting together a follow up blogpost to discuss the security measures to be implemented if the user is planning on using the system on a long term basis.

      Your input is very much appreciated.

      Author's profile photo Julie Plummer
      Julie Plummer

      Hi Samuel,

      Thanks a lot for this.

      I will try to incorporate it into a forthcoming Tips and Troubleshooting Guide.

      BR Julie.