Bastion and Octodad giveaway

This time I have a little present for all my readers. Yesterday I started a giveaway on Twitter where you can win a Bastion or Octodad: The Dadliest Catch Steam key. Of course I don’t want to withheld this giveaway to my blog reading only people šŸ™‚

How to participate

Participating to this giveaway is rather easy. You can follow me on Twitter and retweet the following Tweet:

OR you leave a comment on this blog post. Of you do both things you can double your chances šŸ™‚

The giveaway is running until Monday, 6th Febuary 0:00 UTC!

About Bastion

Bastion Logo
Image Source:

From Wikipedia:

Bastion is an action role-playing video game developed by independent developer Supergiant Games and published by Warner Bros. Interactive Entertainment. In the game, the player controls “the Kid” as he moves through floating, fantasy-themed environments and fights enemies of various types. It features a dynamic voiceover from a narrator, and is presented as a two-dimensional game with an isometric camera and a hand-painted, colorful art style. Bastion’s story follows the Kid as he collects special shards of rock to power a structure, the Bastion, in the wake of an apocalyptic Calamity.

I played Bastion a lot myself. It’s a very good action adventure with some new elements which are unique. You should definitly give this game a chance. It runs native on Linux of course šŸ™‚

About Octodad: Deadliest Catch

Octodad Logo
Image Source:

From Wikipedia:

Octodad: Dadliest Catch is an independent adventure video game developed and published by Young Horses. It is a sequel to the 2010 freeware game Octodad. The game consists of controlling the protagonist Octodad in completing chores typical of the mundane suburban father, but complicated by the fact that he is an octopus in disguise.

I didn’t played Octodad that much, but I’veĀ read a lot of good things about it on the internet. Especially if you play this game with a second player on one device. Also fully supported on Linux šŸ™‚


I wish everbody good luck šŸ™‚

LPIC-1: A short overview

Just before 2016 ended I participated in the LPIC Level 1 certification. This post is something like a “overview” of my thoughts and experiences. I want to give you some answers which you might have and some recommendations how to prepare yourself and which tools you can use to learn and get yourself ready for the test.

About LPIC-1

Before I start, I should explain in a few sentences what LPIC-1 actually is.
LPIC-1 stands forĀ Linux Professional Institute Certification Level 1. The Level 1 certification is also known asĀ Linux Server Professional Certification. If you want, you can go on with Level 2 and even a Level 3 certification after you succeded with Level 1. Level 2 has it’s main focus on networking while Level 3 is more security focused. The questions and the definition of the certification itself are defined by theĀ Linux Professional InstituteĀ which is a organizationĀ in Canada and was funded in 1999.
The Level 1, which I have succeeded in, conatins two exams. 101 and 102. 101 is mainly about System architecture, the installation of Linux as well as package management (RPM and DEB!), Unix commands and partitioning and directory / files structures.
102 on the other hand is about scripting, SQL, Desktops, networking basics, system services and security. All exams are mainly multiple choice. Sometimes you have to fill in a missing word by your own but you can excpect round about 90% of the questions to be multiple choice.

To have a fully and valid LPIC-1certification you need both exams 101 and 102. After this the LPI will send you your official certificate which says that you are a official testedĀ Linux Server ProfessionalĀ now šŸ™‚

Why LPIC-1 anyway?

This is a question which has come to my mind several times. I asked myself continuously do I really need a certificate which says “You are good with Linux!”? I mean I know that I’m not that bad in what I’m doing, so why do I need a organization for that? Let me sum this up with some bullet points here:

  • Employers:Ā Here in Europe the demand for this kind of certificate is huge. Almost every free job has a requirement for this or at least there is some hint like “LPIC certification desired”. So this certificate raises your chances here.
  • Your market value:Ā This sound stupid I know, but this is really something you have to keep in mind. A certificate like this (or any other product specific certificate like CCNA from Cisco and so on) raises your market value. You have better arguments when it comes to salary negotiations and (as the bullet point before states this) a lot of employers are interested more into people who have such a certificate.
  • Give yourself a present:Ā This sounds even more ridiculous than increasing your market value but for me it has felt great after the monitor says “You succeed with LPIC-1”. I feel vindicated when an “official establishment” says to me that you’re good even in them eyes. Well, I know a lot of people don’t need this, but for me it is a good feeling.
  • Learning things you might would have skipped:Ā Oh yes! This is definitly a true thing. I would never ever learned things likeĀ at or how to useĀ sedĀ if I haven’t had made this certificate. Sure you can ask yourself “do I really need to learn that old stuffĀ at?”. And yes this question is more than just appropriate, but for me this knowledge is even today worth knowing.
  • Ask your actually employer to take overĀ the costs:Ā For me this was another major reason. My actually employer wants us employees to get trained and certificated over time. We can choose from a wide range of possible certifications and trainings. The costs for this are taken overĀ for 100%. You should also think about to ask your employer to take overĀ the costs or at least a piece of them. You can always argue that this will help the company as well.

Of course this bullet points above are just a quick short overview. Eventually you have other things than are more important toĀ you, or you just want to see your own market value increased, but if you have the time and the money you should definitly consider to get a LPIC-1 certification.

How to pass?

Ok, so I don’t can talk here too much but I can tellĀ you, if you are working with Linux for a decent decade, than grab yourself a good book about LPIC-1, read it from the beginning and I’m pretty sure that you will pass this exams. If you’re are new to Linux or consider yourself a newbie, than you should think about doing a real course with a teacher. There are a lot of coures which are 5 to 10 days long which will let you know everything you need to pass the test. Look around the web.
For the more experienced users the following books are really good rated. Eventually they will help you to pass the test:

  • LPIC-1: Sicher zur erfolgreichen Linux-Zertifizierung
    Well, this is a book in german. If you’re german you should go with that one. It’s from “Rheinwerk Computing” (formerly known as Galileo Books). I’ve used this one by myself. The test questions are great and the simulator, which comes onĀ a CD, prepares you ideal for the exams.
  • LPIC-1: Study Guide
    You will find this book mentioned all over the internet. It seems that this book helped a lot of people to pass the exams. It’s a litte bit pricy but believe me, you don’t want to pay twice to redo the exams šŸ™‚
  • LPI in a Nutshell
    To be honest I’ve never get really in touch with that book. The critics about it are really good and it’s from O’Reilly which is kinda like a legend when it comes down to professional IT books. So I guess this one is also fine. It’s also cheaper than the Study Guide!

The books will contain stuff which is really old. Sometimes the books are talking about Linux Kernel 2.4 and stuff like Floppy disks and PATA devices. But yes, this is still relevant and you will see such questions in the exam, too. So don’t skip these chapters. Learn them šŸ˜‰

Other tips?

Some other tips you wanna know? Well let me sum them up:

  • Learning:Ā I know I’ve mentioned that before, but I really want to repeat this one again. Don’t only rely on things like “Braindumps”. Braindumps can be good in addition, but I’ve found so many wrong and terrible braindumps which are just useless. Buy yourself a book and read it for 15-30 minutes each day and do the examples, than you will beĀ well-prepared for the exams.
  • Keep calm:Ā I’ve read a lot of horrier stories about the exams on the internet. Even if it’s true that they aren’t as easy as you might think, a lot of questions can be answered by pure logic. Especially if you are a more experienced Linux user you will be in a good position to answer some questions with the help of the logical method of elimination.
  • Take your time:Ā If you don’t feel ready, wait another month on do more learning / training. You can do the exams by a plenty ofĀ constitutions a couple of times a week. So this is not running away from you Ā …
  • Dextrose:Ā Use dextrose in the exam if you can. It taste really good, is natural and will give your brain the kick which it needs šŸ™‚

In addition to this “basic” tips I can recommend you the following homepages for preparing yourself:

  • Penguintutor: The Penguintutor is a homepage which concerns with Linux in general, Raspberry Pi and some other Linux specific topics. It also includes a LPIC quiz which you can find on the right hand of the homepage.
  • LPI Academy: The LPI Academy is a german site which contains LPIC questions in german. So this is similar to the Pengiontutor, but it is only for the german speaking people out there.
  • Test Exam 101: This homepages contains a test exam for the LPIC-101 exam. The questions are really looking good so far.
  • Test Exam 102: The same as for the 101 test exam but this time for the LPIC-102 exam šŸ™‚
  • LPI Exam 101 Trainer: This app is really good if you have a smartphone and if you want to learn a little bit on the go. I used it heavily for myself and can just recommend it. The only downside is that this App tries to connect to the internet at every start up. If you don’t have a working internet connection while starting, the App will take some time until it gives up and uses the local cache. Also this App only contains questions for the 101 exam!


The LPIC-1 is definitly worth it. Especially in the United States where the exams are much more cheaper than in Europe. If your employer is paying anyway for the exams than you can just go straight for it. It will help you on the market in the future.
If you have the opportunity to do the exams in english than do it! For example the german translations are not really that good.
If you take your time to learn for the exams (eventually with a good book about LPIC-1) than you will succeed the exam and you can hold the exam in your hand while looking as happyĀ as the good old Tux šŸ™‚

Being that said, happy learning and good luck with your exam. And if you have any questions, let me know. I will help you as much as I can šŸ™‚

Image source:

Error inside a LXC container: bash: fork: retry: No child processes

LXC Logo
Image source:

I’ve started to migrate all my OpenVZ Containers to the LXC container virtualisation. This is because of several reasons which I don’t want to write down in this post. This time I just want to give you a fix for a problem which has bumped up for several containers after their migration on my system.

The error in summary

This error is not a problem of LXC. SystemD is causing this and it’s causing this for a good reason. SystemD wants to protect your system that one or multiple processes are able to spawn other processes without limitation. Now, if you use LXC you will get of course a enormous amount of processes which are started by your container. The container itself is a process on your host system. And this is where the problems of the limitation begins.

The Fix

The fix is rather easy and doesn’t even require a restart of your system or of your containers. As root open the file /etc/systemd/system.conf and enable / set the following value:


after you’ve done this, simply let the SystemD reload itself:

root@system:~# systemctl daemon-reload

That’s it. Your containers should now run as expected without the bash: fork error.

Have fun with your containers šŸ™‚

Rocket League under Linux: “There has been an error connecting to the Rocket Leauge servers please try again later”


One of my favorite games actually is Rocket League. It’s competitive, supports splitscreen (yes, even on PC), makes a lot of fun and now it’s also available for Linux. I played Rocket League before as it was a part of the PS Plus monthly free games months ago. Now that Rocket League has official arrived for Linux, I decided to buy this game on Steam as well.

Unable to connect to servers

Well, the bad thing was, after I started the game, the following message appeared:

There has been an error connecting to the Rocket Leauge servers please try again later

I started to check my network connection, was googeling if the Rocket League server were down and so on. Then I started to feel that this has something to do with my distribution (for the records, I’m actually using openSUSE Tumbleweed, a rolling release distribution). After a short time of searching the web I found the solution for the problem. For openSUSE you simply have to issue the following command as root or with the //sudo// command:

user@opensuse:~$ sudo ln -s /etc/ssl/ca-bundle.pem /etc/ssl/certs/ca-certificates.crt

This command creates a symbolic link which can later be found in ///etc/ssl/certs/ca-certificates.crt//. The link itself points to ///etc/ssl/ca-bunble.pem//. Rocket League needs this certificate to connect to their servers. It’s looking in the directory ///etc/ssl/certs// for the certificate which can’t be found. To solve this, we need the symbolic link of the certificate file where it is originally stored in openSUSE Tumbleweed (which is ///etc/ssl//).
The solution for this problem was originally discussed at the Steam community site: Link.

Restart Rocket League and you should be able ready to go. Please keep in mind that the path of the certificate can differ if you use another distribution. Anyway the target path (which is ///etc/ssl/certs///) is always the same.

Good luck and have fun with a working Rocket League šŸ™‚

Post Script for OpenVPN clients

OpenVPN Logo
Image source:Ā

Did you ever wanted to automatically do something after you OpenVPN client has successful connected to your OpenVPN server? To do so you can just add 2 simple lines to your client OpenVPN file:

script-security 2

This 2 lines above are doing the following:

  • script-security 2: Allows the calling of built-in executables (ip, route, ifconfig, …) and user-defined scripts (see next line). A script-security of 1 would mean that only built-in executables are allowed to be called.
  • up This line defines the script which should be started after the client successfully connected to the server. In this case the script is called If you don’t define the total path to the script here, the script has to be in the same directory as the OpenVPN client configuration.

And that’s it. After you are connected to your OpenVPN Server the given script will be fired up. Don’t forget to make the script executable for course.
For e.g. I use this to create a route on specific clients after they connected to the OpenVPN server. Of course you can do whatever you want inside the script.

How To get your Realtek RTL8111/RTL8168 working (updated guide)

Realtek Logo
Image Source:

A lot of people will remember my guide how to get a RTL8111/RTL8168 running under your Linux box. This guide is almost 5 years old now and I wanted to make a complete overhaul, because a lot of things has changed since then.

Why do I need this driver anyway?

Some people asked me, “Why do I need this driver anyway? Doesn’t the Linux Kernel ship it?”. This is of course a valid question. As far as I can see this, the RTL8111/RTL8168 is not Open Source and this would be of course the reason why the driver isn’t included into the Linux Kernel. As long as the driver isn’t Open Sourced, we have to build it on our own.

The installation methods

A lot of things have changed since I written the initial article about how to compile the driver under Ubuntu / Debian. Today we can use 2 methods for installing the driver. The following lines describes both of them.

The automatic way

NOTE: Thanks to the user “Liyu” who gave me this hint!
NOTE2: For this way you need a working internet connection. You could use WLAN or a USB ethernet card like this one to get a temporary internet connection. You could also download every needed single package onto USB from another PC and install them in the right order.

As I said ealier, 5 years is a long time. And today Ubuntu and Debian have the driver included in it’s repository. For Debian you have to enable the non-free package sources. For Ubuntu you have to enable the universe package sources. You can easily do this by open your /etc/apt/sources.list as root with your editor of choice and add for each line starting with “deb” non-free or universe at the end. So for example, if you use Debian a line like:

deb jessie main contrib

would become to

deb jessie main contrib non-free

The same for Ubuntu:

deb xenial main restricted

would become to

deb xenial main restricted universe

After this you have to do a:

sudo apt-get update

You can of course use graphical ways to enable non-free or universe. After you enabled the missing package repository, you will be ready to install the driver. This can be easily done with the following command:

sudo apt-get install r8168-dkms

The procedure will take some time, depending on your CPU because the driver will be build for your working Kernel. The good side is, that if any Kernel update happens on your machine, the kernel will be rebuild against the new Kernel automatically after the update because of the use of dkms.
After the procedure is finished, you should be able to use your network card instantly. If not, you should consider a reboot of your PC then.

The manual way

Well, the manual way is almost the same as it was before in the initial article. Anyway, I want to rewrite the steps here again. This is also tested against newer Kernels ( >= 4.0) which caused a lot of trouble for some people in the past.

  • 1. Install dependencies: Once more you need a working internet connection for this. You could also use the Debian or Ubuntu DVD which includes the needed packages. To install the dependencies just enter the following command:
    sudo apt-get install build-essentials
  • 2. Download the driver: You can download the driver from the official Realtek homepage. This is the link: click me. From the table, select the “LINUX driver for kernel 3.x and 2.6.x and 2.4.x” for download.
  • 3. Blacklisting the r8169 driver: The r8169 is loaded when the r8168 is not found on your system. This will give you a network and internet connection, but with the r8169 driver your RTL8168 card will be very unstable. This means slow download rates, homepages taking hours to load and so on. To avoid that the r8169 is loaded, we blacklist it. This is be done by entering the following command:
    user@linux:~$ sudo sh -c 'echo blacklist r8169 >> /etc/modprobe.d/blacklist.conf'
  • 4. Untar the archive: After you successfully downloaded the driver, cd into the directory where the driver is downloaded and untar the driver with the following command:
    user@linux:~$ tar xfvj 0005-r8168-8.042.00.tar.bz2

    NOTE: Your tar filename can of course differs if you download a newer version in the future for e.g.

  • 5. Compiling and installing the driver: Now we have to start compiling the driver. For this you cd into the extracted directory:
    user@linux:~$ cd r8168-8.042.00

    NOTE: Don’t forget to change your version number in the future here.
    Now that you are in the right directory, we can start with the real compiling process. For this Realtek brings an easy to use script which is called So, to start compiling and installing the driver enter:

    user@linux:~/r8168-8.042.000$ sudo ./

    You should see a output which looks like this:

    Check old driver and unload it.
    rmmod r8168
    Build the module and install
    At main.c:222:
    - SSL error:02001002:system library:fopen:No such file or directory: bss_file.c:175
    - SSL error:2006D080:BIO routines:BIO_new_file:no such file: bss_file.c:178
    sign-file: certs/signing_key.pem: No such file or directory
    Backup r8169.ko
    rename r8169.ko to r8169.bak
    DEPMOD 4.4.0-31-generic
    load module r8168
    Updating initramfs. Please wait.
    update-initramfs: Generating /boot/initrd.img-4.4.0-31-generic

    You can ignore the SSL error for now. The driver should be successfully compiled and installed into your system. The driver is already loaded and should work.

  • 6. Check the driver: As a final step, you could start checking if the driver is really loaded into your Kernel. For this you can use the command lsmod. lsmod lists all drivers, which are usable by your Kernel. So, if everything was successful, you should see an output like this:
    user@linux:~/r8168-8.042.000$ lsmod | grep r8168
    r8168                 491520  0

    You can also check as well your ethernet device directly to see if the correct driver is loaded (special thanks goes to Tim which posted this in the comment section):

    user@linux:~$ sudo ethtool -i enp1s0
    driver: r8168
    version: 8.042.00-NAPI
    bus-info: 0000:07:00.0
    supports-statistics: yes
    supports-test: no
    supports-eeprom-access: yes
    supports-register-dump: yes
    supports-priv-flags: no

    NOTE: You have to the change enp1s0 to the device name of your network card of course. This can be eth0, eth1, enp2s0, and so on.

    If your driver isn’t loaded until now, you should go with a reboot before further investigation.

That’s it

And that’s it. Now you’re ready to use your RTL8168/RTL8111 with the official Realtek drivers. If you have any questions and / or suggestions, please let me know in the comments.

My new helper Ansible

Ansible Logo
Image source:

For some weeks ago, I decided to use Ansible as my central configuration tool of choice. The following text should give you a short intro in how to deploy files with Ansible.

What exactly is Ansible?

Now, what exactly is Ansible? Ansible is an auto configuration tool, which helps you to keep your configuration files central managed. You will benefit from easier configuration and you will save a lot of time. For example, if you have 3 DNS servers and you want to ensure that all this systems have the same db and configuration files used, you could use either a network storage (which is obviously something over the top here) or keep them central and push them to all DNS servers.

And Ansible is exactly doing that. It pushes your configuration files on given hosts. Another really pro for Ansible is, that it uses SSH to do so. This means that you don’t have to install a service to get your machines configured. Ansible is agent-less.

How to install Ansible

For almost every distribution out there in the wild, Ansible is available in the system repositories. For Ubuntu / Debian you can easily do:

sudo apt-get install ansible

as well as for openSUSE you can just do:

sudo zypper install ansible

After this, you can find the standard Ansible configuration underĀ /etc/ansible.

Make SSH ready for Ansible

Every host which will be managed via Ansible needs to have a Public Key and a user which is allowed to use this Public Key to connect to the Host.

For my personal purposes I created a user which is allowed to change the files which are coming from Ansible. This is of course optional. You could also do this with the userĀ rootĀ even if that means a little bit more of a security risk. Anyway, you have to generate a Public Key which is done with the following command for the userĀ ant:

ant@ansible:~$ ssh-keygen -t rsa -b 4096

For our scenario, you shouldn’t set a password for the key. The other questions can be confirmed with pressingĀ ENTER without any changes. After this your SSH Key is ready and you can push them to your Host which will be configured with Ansible later. After the following command is issued, the userĀ ant on your Ansible system will be able to login as userĀ ant on the systemĀ targetĀ without entering a password. As described above, you could also do this with the user root here:

ant@ansible:~$ ssh-copy-id -i ~/.ssh/ ant@target

Now you should be able to login via ssh as the userĀ ant on the systemĀ target without entering a password.

Configure Ansible

Now that you have the target System fedĀ with an Public Key, you are able to make the target System known in Ansible. The Ansible configuration files are locatedĀ atĀ /etc/ansible. First of all you should add the target system in theĀ /etc/ansible/hostsĀ file:


Let me explain this file a little bit. You could enter a hostname per line in this file. Ansible then knows them and will deploy the given files. To make it much easier configuration wise and for the human eye to read it, there are groups available. A group start with [ and ends with ]. So in this case the hostĀ target.local.dom would be in the groupĀ testsystems. It is possible to get one host into multiple groups.

So nowĀ the host is known for Ansible. As next we need to define the files which will be pushed and where their going to be deployed at the root filesystem of the target host.
For this, Ansible is using so calledĀ Playbooks. As itsĀ name implies, theĀ PlaybookĀ is a collection of things which has to be done on the target system. You can do almost everything here which you also would be able to do by hand in the console. There a plenty of modules which can be used for e.g. Update your system, set file permission, and so on. And even if there is no module available which fits your needs, you can always use theĀ bash module and write down what the system should do by yourself. A complete list of the modules and how to use them can be found at the official documentation of Ansible. In this example we will push files to the target system. So we have to define this in the Playbook. You can either use theĀ copyĀ or theĀ synchronizeĀ function within the file module to push the wanted files to the target. The following example will use the synchronize function:

- hosts: testsystems
files: /etc/ansible/files/testsystems/
gather_facts: false
become: false

- name: copy files
synchronize: src={{ files }} dest=/opt
notify: restart ssh

- include: handlers.yml

So what does this Playbook do now? Let me explain this file step by step:

  • hosts:Ā Here we insert the group(s) which has been declared in theĀ /etc/ansible/hosts file. You can name here single hosts as well as groups. It’s always recommended to use groups here.
  • vars:Ā In vars we can declare variables which are used within thisĀ Playbook configuration. There is actually one variable defined which is calledĀ files. This variable is used later in theĀ tasks section.
  • gather_facts:Ā This is true or false. The standard is true. gather_facts is collecting informations about your system which can be used within the modules. Here it is disabled because we know that thisĀ Playbook will running well with the settings we give Ansible.
  • become:Ā In earlier versions of Ansible this was calledĀ sudo. Become decides wether this Playbook needs root /sudo privileges to run, or not. The way how the system willĀ become the root is defined in the central ansible.cfg. If set to true, you have to ensure that the “become user”, is available on the target system and has sudo permissions.
  • tasks:Ā In tasks we define what to do on the target system. In this case we have one task, which is named “copy files”. It usesĀ synchronize which is provided by theĀ fileĀ module. The source path is the path which is defined in the variableĀ files at the beginning of the Playbook-file. The Destination is the absolute path on the target system. In this case “/opt”. At the end, we use a notifier. This notifier is calling “restart ssh” if a file has really changed on the target system. “restart ssh” is written down in the “handlers.yml” file. This file has to be in the same directory as thisĀ Playbook.

This is a really short and easy example of the capabilitys of Ansible. As I said earlier, you can do a lot of more stuff. For this you should consider to read the official documentation of Ansible.

You can now save the file where ever you want. I recommend a place likeĀ /etc/ansible/conf.d. The filename ending should beĀ .yml. So for e.g. we could save the file “testservers.yml” underĀ /etc/ansible/conf.d.

The handlers.yml file

As mentioned before, the handlers.yml file is just an addition to your existingĀ Playbook. In the handlers file you can write down commands which can be reused a lot of more times. For example the “restart ssh” command, which has been called in ourĀ Playbook, can be also needed by other upcoming hosts. To prevent for writing down the same commands again and again, we use an external extra file, which holds all the reusable commands. This file is here called handlers.yml and has to be stored in the same directory as yourĀ Playbooks. An example handlers file looks like this:

- name: restart bind
service: name=named state=restarted

- name: restart ssh
service: name=ssh state=restarted

So as you can see, we use the module service to restart the services ssh and bind. The services are restarted on the target system, when they get called in a Playbook. In our Playbook-example above, the “restart ssh” command is triggered after copying files.

Testing our new configuration

We have a valid hosts and Playbook file and our target system has the needed Public Key. So we should be ready to go. To start or “call” a Playbook you have to issue the following command on your command line:

ant@ansible:~$ ansible-playbook /etc/ansible/conf.d/testservers.yml

NOTE: Don’t forget, that you have to issue the command on your Ansible system, with the user which has the Public Key stored on the target system.
Now your Ansible server system should start pushing the data to the target system. A output like this should be shown to you:

PLAY [testservers] ************************************************************

TASK: [copy files] **************************************************
changed: [target.dom.local ->]

NOTIFIED: [restart ssh] ******************************************************
changed: [target.dom.local]

PLAY RECAP ********************************************************************
target.dom.local : ok=2 changed=0 unreachable=0 failed=0

This means the files are successfully copied and the ssh service was restarted. This means your first Ansible Playbook is running fine without issues. Now you can go on in adding more tasks.
Don’t for get the official documentation to do so šŸ™‚