Monthly Archives: November 2019

Preps for the Developers Conference 2020…

Preparations for the Developers Conference 2020 have begun. The date, location and theme have been announced.

The next Developers Conference, simply dubbed DevCon 2020, will be held on 2 - 4 April at the Caudan Arts Centre in Port-Louis, Mauritius. This time the conference theme is Comics, which I am pretty sure requires no further explanation as to what to expect.

A few of our regular supporters have already joined as sponsors, while others have expressed their intention to back us financially in the coming days. The conference cannot happen without the help and support of the sponsors and the commitment to support the DevCon organizers every year is really appreciated. May the force be with you & your organizations prosper!

Developers Conference is an event by the community for the community. We should not forget this. Everyone's help is welcomed and appreciated. In fact, next year we're aiming big and the more backers we have the merrier!

If you believe there are organizations out there that can support us please share the conference brochure with them. The brochure explains about the conference, the different sponsorship tiers and ways in which an organization can help in making DevCon 2020 another great & awesome conference!

Meanwhile, you out there, if you've been to the Developers Conference before, then how about submitting a paper this time? Take the leap and do it!

Change the page margins for a single page in a LaTeX document

I've looked for it myself and search results always return complicated hacks to achieve it. Adjusting the top, bottom or right and left margins (only) are not usually a straightforward task if you do not know the right package to use.

Like for example, this StackExchange (TeX) suggestion is definitely NOT recommended.

The reasons to have to modify the page margins in the middle of a document could vary; say if you need to display an almost "full-page" figure in a landscape layout, you'd surely be touching the margins and getting additional blank pages being created if you do not reduce those margins of the current page.

The simplest way I found of doing it is using the changepage package available from While the package provides several commands to adjust the page margins, text blocks or the entire page design, I find the below single line command extremely useful.

\changepage{〈text height〉}{〈text width〉}{〈even-side margin〉}{〈odd-side margin〉}{〈column sep.〉}{〈topmargin〉}{〈headheight〉}{〈headsep〉}{〈footskip〉

Thus, in one single line the entire page can be re-designed in the middle of your LaTeX document.

The changepage command takes nine arguments, which can either be blank or contain a value of a length. The length value is added to the current length. If a length value is not supplied then a zero value is assigned which is then added to the current length, therefore, resulting in no change. A negative value is used to reduce the current length.

अगला openSUSE Asia Summit भारत में होगा

पिचले सितंबर को Bali, Indonesia के Udayana University में openSUSE Asia Summit 2019 घटित हुआ। लगातार दो दिनों तक दुनिया के कोने कोने से आए हुए इंजीनियरों, डेवलपर्स, डिजाइनरों और कइ तरह के openSUSE योगदानकर्ताओं ने मिलकर तकनीकी प्रदर्शन तथा अन्य कार्यशालाएँ आयोजित कीं।

इस सम्मेलन के द्वारा openSUSE समुदाय अपने उपयोगकर्ताओं और योगदानकर्ताओं को एक साथ लाता हें ताकि इन में openSUSE प्रोजैक्ट को लेकर बातचीत हो सके। बोर्ड के सदस्य समुदाय को प्रोजैक्ट से संबंधित जानकारी देते हैं। नए उपयोगकर्ता इस सम्मेलन से बहुत लाभ उठा सकते हैं।

सम्मेलन के समापन समारोह से पहले यह घोषित कि गइ की अगला सम्मेलन, याने कि openSUSE Asia Summit 2020, मानव रचना इंटरनेशनल इंस्टिट्यूट ऑफ़ रिसर्च एंड स्टडीस (Manav Rachna Int'l Institute of Research & Studies), फरीदाबाद, हरियाणा, भारत (Faridabab, Haryana, India) में होगा। इंस्टिट्यूट की प्रतिनिधि, शोभा त्यागी, ने विस्तार से अपना प्रस्ताव बाताया जोकी सम्मेलन के आयोजकों ने स्वीकार किया।

Debugging on MicroOS made easier with toolbox

Until now, it was not easy to run debugging tools on openSUSE MicroOS or Kubic for the simple reason that installing any package using the transactional-update in package_name command would require a reboot for the program to be available on the system. Why so? MicroOS & Kubic use transactional updates and thus, the root filesystem is mounted as read-only. Packages that are installed are available in a "snapshot" which is selected at the next boot. openSUSE MicroOS & Kubic fall in the category of immutable operating systems.

One couldn't just reboot the system every time a simple program was needed - e.g using Vi to edit a YAML config or using database client utils for a rapid inspection.

But now we have a toolbox script available in MicroOS & Kubic that allows us to launch a container and use debugging utilities that can interact with the host. The script is written in Bash and it is based on CoreOS/toolbox.

Thorsten Kukuk, SUSE Engineer & Architect (SLES / MicroOS), announced the availability of the toolbox container on the openSUSE Kubic mailing list in October.

The toolbox script resides in the system $PATH and thus can be called directly. On its first execution, the script will pull the toolbox container from the openSUSE Container Registry.

microos:~ # toolbox
Trying to pull
Getting image source signatures
Copying blob 92a022f7c0d8 [>-------------------------------------] 2.8MiB / 122.9MiB
Copying blob f0c8107beec9 [==>-----------------------------------] 3.0MiB / 36.4MiB

The host root filesystem can be accessed at /media/root/ and since the toolbox container is spawned as the root user, the files will be modifiable.

toolbox:/ # ls /media/root/
bin   dev  home  lib64	opt   root  sbin     srv  tmp  var
boot  etc  lib	 mnt	proc  run   selinux  sys  usr

Non-root toolbox containers will have read-only access to the host files, unless the --root flag is provided.

ish@microos:~> toolbox --root

Next, use zypper to install the required utilities and interact with the host and other containers.

Exiting toolbox will stop and the container and next time the script is called, the container is started again. Therefore, previously installed utilities remain available.

Each toolbox container is named by appending the username calling it, e.g toolbox-ish.

microos:~ # podman ps --format "{{.ID}} {{.Status}} {{.Names}}"
7f61fba95487 Up 10 minutes ago toolbox-ish
00ada606ec4f Up 33 minutes ago toolbox-root

Elections & Propaganda in Mauritius

It's not a new thing that opponents spread rumours during an election period to mislead the population in favor or against something. Such tactics predates the use of Internet & social media campaigns.

Image by Tayeb MEZAHDIA from Pixabay

I recall rumours about the so-called "Macarena" VHS that contributed to the fall of the Labour Party in 2000. I don't know whether the VHS existed or not but it's mere mention was enough to get people murmur.

During the 2014 General Elections, the "Viré Mam" video clip made people not just laugh but also changed a lot minds in favour of the then Lepep Alliance. The video clip was made from short edits from various political meetings featuring P. R. Bérenger, Leader of the MMM Party and Dr. N. C. Ramgoolam, Leader of the Labour Party, who back then formed the PTR/MMM alliance. The video was edited in such a way that it appeared both party leaders were slurring at each other in a synchronous manner and the groovy background music only made it funnier.

This year, two days after the General Elections, one that many thought to be a tough battle among three major political parties in Mauritius, a friend sent me a video clip of Dr. N. C. Ramgoolam speaking at a political meeting. The clip appears to have been carefully edited to give the impression that the Labour Party leader is saying that Hindus living in the rural areas adore money and that when they're dying, a bank note needs to be put in a "katori" (i.e copper, brass or stainless steel cup) of water and the same given to drink to the dying person for the soul to be able to leave the body. This propaganda video worked. A day before the elections and on the election day I heard about the circulation of this "Katori" clip that is supposedly offending Hindus.

While the "Viré Mam" clip could be regarded as parody, the "Katori" clip on the other hand is not. The title of the video says that the Labour Party leader is insulting Hindus and thus the creator of this video clip incites communal unrest. This whole thing could have legal implications.

The Labour Party for the past few weeks appeared to have led a successful campaign on the Internet through Google, YouTube and Facebook ads. Most of them were messages of Dr. N. C. Ramgoolam while some of the ads were interesting facts explaining about the economy, national debt and our Gross Domestic Product (GDP).

However, it seems that the party was not ready to tackle propaganda.

Thus, "Katori" clip wins and Dr. N. C. Ramgoolam could not win a seat to be in the National Assembly of Mauritius.

This blog post is not an endorsement of the Labour Party but simply an analysis of how propaganda videos affect election results.

Understand networking in Podman

I received a message on Twitter on 17 October from a fellow who attended the openSUSE Asia Summit 2019. Strangely, I didn't get any notification about it and it's only today that I read the message. He also attended my workshop on openSUSE MicroOS and had some questions regarding inter-Pod communication.

As a quick response, I explained him very breifly about "container networking" and pointed him to the Kubernetes documentation on IP allocation. I do realize though, that most of the times, documenation can be lengthy and {boring}, and that you would just want a simple article or blog post that clears your doubts.

Tell me about Podman networks

Rootless containers (i.e containers started using Podman as a regular user) do not obtain an IP address. Podman uses slirp4netns to allow Internet connectivity inside the container.

Communication with a rootless container is achieved by mapping the container ports to the host, e.g using -p 8080:80 to map a webserver port 80 to the host on port port 8080.

$ podman run -dt --name webserver -p 8080:80 nginx
$ curl http://localhost:8080

Therefore, two rootless containers can communicate over their published ports on the host. Let's experiment this by starting an openSUSE Leap container and installing the telnet package.

$ podman run -dt --name leap leap
$ podman exec -it leap bash

4a0f95e011b9:/ # zypper in telnet

We run ip a s on the host to find its IP address. Say the IP address is Now, from within Leap container let's telnet port 8080 over the host IP.

4a0f95e011b9:/ # telnet 8080
Connected to
Escape character is '^]'.

The connection went through successfully, meaning from the Leap container we've been able to access the Nginx container through it's mapped port on the host.

This same experiment can be repeated using two different pods, say you have a pod that contains your web services and another pod that contains your databases.

$ podman pod create --name webservice -p 8080:80
$ podman run -dt --name webserver --pod webservice nginx

$ podman pod create --name db -p 3306:3306
$ podman run -dt --name mariadb --pod db -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" mariadb

The Nginx container will be able to reach the MariaDB database over as the same port is mapped on the host.

Ideally, these two containers could have been created in the same pod and therefore share the same network space. Then, the Nginx container would reach the database over localhost:3306 easily.

I used the above Nginx/MariaDB example to explain rootless inter-Pod communication, which was the question that was asked to me initially.

What about rootfull containers?

Rootfull containers are those that are created using Podman with root privileges, either by the root user itself or using sudo privilege.

Containers created using Podman with root privileges obtain an IP address. Podman then uses the Container Network Interfec (CNI) instead of slirp4netns for networking provisioning.

Details about the network subnet is found in the CNI config file.

$ cat /etc/cni/net.d/87-podman-bridge.conflist

    "cniVersion": "0.3.0",
    "name": "podman",
    "plugins": [
        "type": "bridge",
        "bridge": "cni0",
        "isGateway": true,
        "ipMasq": true,
        "ipam": {
            "type": "host-local",
            "subnet": "",
            "routes": [
                { "dst": "" }
        "type": "portmap",
        "capabilities": {
          "portMappings": true

So, let's start a container with root privileges and see.

$ sudo podman run -dt --name db postgres

$ sudo podman inspect -f "{{.NetworkSettings.IPAddress}}" db

The podman inspect ... command returns the container's IP address and the same is ranged within the subnet specified in the CNI config. The PostgreSQL database can be accessed over from the host or from within any other container started using root privileges.

$ telnet 5432
Connected to
Escape character is '^]'.