Joseph Zikusooka ~ Zik

A software engineer specializing in open source technologies | Very experienced in building and configuring UNIX/Linux systems and servers. Passionate about developing software applications and hardware for the smart home | Currently serving as the CEO of Jambula Labs and the project leader at JambulaTV, a smart home automation and entertainment platform - https://jambulatv.com | This blog focuses on the following areas: Linux How-Tos and Tutorials ::: IT Security News ::: Free and Libre Open Source Software ::: Smart Home Software ::: Digital Innovations in East Africa https://mastodon.social/@jzik | https://github.com/zikusooka

Why SystemD will start your next Linux system

For a long time, the default boot and initialization mechanism in Linux was the System V (SysV) init daemon. Along the way, many Linux distributions have attempted to move away from this primitive form of booting. Why you ask? For one thing, it makes the boot process a lot slower, since processes have to be started one at a time. It is also a nightmare to maintain the scripts that Administrators write to manage these start processes, as each package maintainer or administrator, does ‘their own thing.’

Linux SystemD

 

So Ubuntu, one of the most popular Linux distributions moved to upstart in late 2006, but this init daemon they adopted, was not widely embraced. Debian, OpenSuse, Fedora, and Red Hat at some point in the last five years supported upstart. Red Hat Enterprise Linux (RHEL) version 6 and derivatives such as  CentOS  still use upstart. But all of them are ditching upstart for something better, i.e. SystemD. In fact, the Debian technical committee recently voted and they will switch to SystemD in upcoming releases, leaving Ubuntu no choice but to follow.

It now looks like SystemD will be the default initialization and boot method for Linux systems for many years to come. But what does systemD do different?

What is SystemD?

SystemD, is a system and services manager for Linux that was developed by a team from Red Hat, spearheaded by Lennart Poettering, the creator of pulseaudio, and Avahi. SystemD makes Linux systems boot faster since processes are ran in parallel. Once started, processes are monitored, and restarted if they crash. SystemD also reduces the dependency on shell scripts to do much of the work.

Other systemD features, include a cron-like job scheduler, an integrated login manager, which offers ‘multi-seating’ functions. It also has a new an improved logging mechanism called the journal, that will likely replace syslog, the current logging facility on Linux systems.

Below is some technical information to get you as the administrator started with systemD. Please note that there are several manuals and online resources available that will help you understand systemD, I will mention a few at the end of this post.

How to get started with systemD

SystemD is installed by default on recent versions of Fedora, and Arch Linux. For other distributions like Debian and Ubuntu, you might have to wait a bit for systemd to be packaged as the default init system. It is actually recommended that installation is done by the distribution vendors. But if you are the brave type, you can of course install it from source.

Pick up the source tarball and follow the instructions contained in the README file included with the sources.

After installation is completed, you will need to start converting your old startup scripts to systemD. At this time, only SysV init scripts for commonly used services, have been ported to systemD. So you will need to know how to write a service file for rarely used daemons or for that program you are developing. Below is an example of a systemd service file. By the way, these are what those files in “/etc/init.d” used to be.

How to write a systemD service file

Open up your favorite editor such as vim as follows:
vim /tmp/squid.service Am using squid here as an example, so replace it with the name of your service. Enter the following snippet:

[Unit]
Description=Squid caching proxy
After=syslog.target network.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/squid
ExecStartPre=/usr/libexec/squid/cache_swap.sh
ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF
ExecReload=/usr/sbin/squid $SQUID_OPTS -k reconfigure -f $SQUID_CONF
ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF
PIDFile=/var/run/squid.pid

[Install]
WantedBy=multi-user.target

At a minimum, you will need these three sections; unit, service, install.

Unit definitions
Description: A string describing the service and what it does.
After: If service depends on another one, then indicate that it should come after those targets. Notice in my example that one of the pre-requisites for this service is the network service. You will see that often, as most services expect the network to be already running, so always include it.
You can also add ‘Before’ which does the opposite and starts this service before units listed.
Hint: You can read more about unit definitions by calling up the manpage: man systemd.unit

Service definitions
Type: You must always have a type, which can either be forking, simple, oneshot, dbus, or notify. For most daemons, forking should suffice, as it forks the processes by putting them in the background after start.
EnvironmentFile:This is the file which contains the options used by your service daemon. This can be omitted, but can be a life saver occasionally
ExecStartPre: This is the command that is called before the main process – see ExecStart
ExecStart: This is the command that the daemon runs. You can also point to a script on your system e.g. =/bin/sh -c “/usr/sbin/my-cool-script.sh”
ExecStartPost: This is the command that is called after the main process – see ExecStart
ExecReload: This is the command that is called in order to reload the daemon’s configuration file.
ExecStop: This is the command that is used to stop your service.
PIDFile: Enter the file path containing the process ID of your service. SystemD reads this file after startup.
Hint: You can read more about service definitions by calling up the manpage: man systemd.service

Install definitions
This section is optional, but can be used to set the target level
WantedBy: Set a target where this service will be grouped. Like run levels in SysV language.
Hint: You can read more about various special targets by calling up the manpage: man systemd.special

Activating your systemd service

When you are done writing the service file, copy it to: /usr/lib/systemd/system/
cp -v /tmp/squid.service /usr/lib/systemd/system/

You will need reload the systemd daemon:
systemctl --system daemon-reload
In order for the service to start automatically at boot time, enable your systemd service as follows:
systemctl enable squid.service
Now when you want to start, stop, reload or check the status of this service; do the following:

systemctl COMMAND squid.service ; where COMMAND is either {start|stop|reload|status}

This how-to barely scratches the surface. There are lots of neat tricks you can perform with systemD that your old dog SysV and upstart could not. So take the time to learn it.

Resources:
SystemD website: http://www.freedesktop.org/wiki/Software/systemd
Lennart’s Blog: http://0pointer.de/blog(Look for the SystemD series for Administrators)
Mailing List: http://lists.freedesktop.org/archives/systemd-devel
Man pages: systemd- (Use tab completion to see all available man pages)

Uganda’s Digital TV migration: Still a messy, on and off affair

digital_tv_migration_ug_1

With the June 2015 international deadline for TV migration only a year away, Uganda’s digital TV migration process is still very much a messy affair. Very few Ugandans know that in a few months, they could find themselves not able to watch their favorite TV programs.

The pilot testing phase in the greater Kampala area continues to be an on and off affair. Not all TV stations currently broadcasting in analogue format are on board the digital train. For example, only the following are currently being transmitted via DVB-Terrestrial.

Bukedde2
EATV
LTV
NBS
NTV
Record
UBC
Urban
WBS

For all channels broadcasting, the reception has somewhat degraded when compared to last year. The audio and video quality is also generally poor. For a complete status, please check out the Digital TV in Uganda Status page.

As for consumer awareness, there are very few Ugandans who are aware of the migration process. Uganda Communications Commission(UCC) (UCC), the body in charge of steering the digital TV migration, has in the past few months been running Ads on local TV, but it looks like even those Ads, have not had a change in the awareness and preparedness of the masses.

Compounding the problem is the lack of Analogue-to-Digital TV converter boxes (or decoders) on the market. As of today, the only providers of these boxes have been the pay TV providers such as Star Times and Go TV. Yet, these providers require you to subscribe to their services on a monthly basis. It seems the providers, have ignored the call by UCC, that they de-scramble the Free-to-Air channels on their boxes. This effectively means that for the ordinary Ugandan, moving to digital TV today means subscribing to a pay TV provider.

It is hoped that in a few months, the decoders will be available on the market.  This after five firms were approved to import and sell these devices.

My advice to early migrants, is that while not available locally, take a look at hardware known to work on the Digital TV Uganda site. We’ll continue to update the list as more people come on board.

How to setup a 3G Wireless Hotspot using Linux

The prevalent and most used type of Internet in Uganda currently is 3G via a USB modem or dongle. Have you found yourself somewhere; may be on travel, or at home, and you need to share your Internet connection with a friend or family members via WiFi? Do you wish you could just plug in your laptop, and just use your WiFi-enabled phone or tablet to surf? Are you a Linux user? Well its very easy to setup a WiFi hotspot for yourself using free and open source software.

hotspot_via_3g

There are several ways to do this, however, if you use Linux say on your laptop (or server), what you need is an application called hostapd. It is already installed in most Linux distributions like Redhat/Fedora, CentOS, Ubuntu, Debian, etc. If not simply install it as follows:

yum install hostapd (or use apt get for Debian based systems like Ubuntu)

Of course, you will need to have a Wireless device enabled on your laptop (or server box), and the chipset should support AP (Access Point) mode. To test this:

iw list (Look for modes section to see if AP mode is supported on your Wireless device

Also, you need to setup the Wireless interface device. In this post I am using an IP address of 172.16.0.1 for my Hotspot and ‘wlan0’ as the device name e.g.

ifconfig wlan0 172.16.0.1 Please remember that the above will not survive a reboot, so you need to permanently add it to your network configuration. On Redhat based systems:

vim /etc/sysconfig/network-scripts/ifcfg-wlan0Add these parameters:
TYPE=Wireless
BOOTPROTO=static
IPADDR0=172.16.0.1
NAME=”wlan0″
ONBOOT=yes

Now edit the configuration file for hostapd to suit your needs.

vim /etc/hostapd/hostapd.conf A typical hostapd.conf file looks like this:
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_passphrase=AVERYSECRETPASSPHRASE
interface=wlan1
ssid=MY-HOTSPOT
hw_mode=g
channel=6
driver=nl80211

The most important changes to make in the above file are:
ssid: The name you want your hotspot to be called
wpa: The encryption type. Use WPA2 and above always
wpa_passphrase: the password users will need to access your hotspot

After you have modified and saved the above file, enable hostapd services, so they also start during boot time.

systemctl enable hostapd.service or chkconfig hostapd on (old way)
systemctl start hostapd.service or service hostapd start (old way)

You will need some facility to dynamically offer IP addresses to clients of your hotspot. One very useful tool is called dnsmasq. Dnsmasq is a lighweight DHCP and DNS server. You can install it using your package manager e.g.

yum install dnsmasq Once installed, edit the configuration file for dnsmasq to suit your environment:

vim /etc/dnsmasq.confThe most important changes to make in the above file are:
interface=wlan0
domain=example.com
dhcp-range=172.16.0.10,172.16.0.199,12h
dhcp-option=3,172.16.0.1

Enable dnsmasq to start now and at boot time:

systemctl enable dnsmasq.service or chkconfig dnsmasq on (old way)
systemctl restart dnsmasq.service or service dnsmasq restart (old way)

The next step is to dial your ISP using either the GUI (NetworkManager) or the CLI tools like the ones I wrote about earlier. If you use the GUI tools, you will need to allow the laptop (server) to act as a gateway. This can be achieved simply:

/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE (NOTE: This assumes you are connected using a 3G modem with an assigned interface node of ppp0)

Once you are connected, and gateway has been setup, your clients should be able to connect to your Hotspot using the SSID and passphrase you setup above.

That’s it. Happy New year!

DVB-T tuning data for Uganda

I recently submitted initial DVB-T scan data for Kampala to the dvb-apps package upstream. If you are testing DVB-T2 in Uganda using Linux, please go ahead and clone the latest git sources at:
http://git.linuxtv.org/dtv-scan-tables.git

Its still early, but at least with the latest sources, you do not have to tinker around in your app.

Also, I’m looking for testers in the region. If you’re already using DVB-T with Linux, please contact me.

Uganda’s Digital TV migration has stalled

For nearly a month now, Uganda’s Free-To-Air digital TV signals have been off. After many followers of this project breathed a sigh of relief when the transmission began a couple of months ago, it has once again become clear why the transition to digital TV in Uganda will really be messy.

To date, the testing phase for the greater kampala area has really been nothing short of a gimmick. The channels allotted to free over-the-air broadcasters have been intermittent, and when off, no communication has been provided. Also, there’s no publicly available schedule – just press statements from officials.

Most perplexing is the fact that the body in charge of migration i.e. Uganda Communication Commission (UCC) has been running adverts on local media announcing Digital TV and its benefits. Even, for someone who understands what digital TV is all about, I find these ads very unhelpful considering that they’s really no concrete migration schedule or ‘call to action.’ Also, why advertise at this point if no test or pilot program is even available. All I see that the adverts are doing is simply creating anxiety as opposed to informing the public.

I would like to suggest the following to UCC:

A signal test period with start and end dates be advertised to the public. This can be done on website, social media, and the local papers.

Notify the public when the channels are switched off such as during maintenance, upgrades etc

Furthermore, there ought to be a forum where TV owners and especially early adopters can provide feedback on TV quality signals etc. The current web pages on the UCC’s website on Digital TV migration do not provide any updates whatsoever.

Also, there’s currently no recommended manufacturer list of DVB-T2 converters that TV owners should buy. How about outlets where these tuners can be purchased? I know there are the pay TV providers, but that is not enough.

In summary, I highly recommend that UCC come out with regular updates on TV migration. Where exactly are we? The deadline date is really too close for such a venture!

OK, I know with all the issues being experienced with procurement, politics etc this may be too much to ask of Uganda Communications Commission to do.

But come on guys, Ugandans deserve better, and would want to know what exactly is going on with this important project. If you have issues tell us, we understand the environment!

How to create your own Linux install image

I was reading this google+ post by Linux’ very own Linus Torvalds. One of the comments reads “I feel like Mom and Dad are fighting. I love Fedora and I love Linux :)” Clearly, Linux distributions come with their own specific set of packaging rules and guidelines. Sometimes, it does not make sense to everyone. And when that someone else is Linus, people will go ‘bonkers’ to either agree or disagree with him. But why the noise?

To any one who’s not ventured into the murky waters of Linux kernel building and packaging, you may be wondering why a topic like this one solicits such responses even if its not coming from the man who invented Linux. Believe me – it is a big deal.

Due to the rapid development of open-source software, the Linux kernel and packages on the original CD/DVD images tend to become outdated over a short period of time. Sometimes, those packages become insecure and vulnerable. Furthermore, with all the latest and cool hardware devices that vendors are producing every other day, the Linux kernel has to be upgraded so as to be fully usable by those devices.

So in my opinion, Linus Torvalds is half right, since non-techie users need to get Linux working straight out of the box. My feeling though is that the main distros are really not meant for the Linux newbies. That is why re-spins seem to be a lot popular with new Linux users. So if you made it this far and are still reading this, how do you go about creating a re-spin? Here is one way:

Lately, I’ve been spending sometime, creating customized versions of the Fedora Linux images. I use these Fedora re-spins for the embedded products I’ve been working on such as the JambulaPi, TV STB etc. BTW, these re-spins of Fedora are open source and free, so I plan on posting them to a public site in a not too distant future!

A very useful tool for creating custom images for Fedora Linux is called livemedia-creator. Livemedia-creator uses Anaconda, kickstart and Lorax to create bootable media such as live iso’s that use the same install path as a normal system install.

To install it:

sudo yum install lorax

Then, take a look at the readme file located at /usr/share/doc/lorax-*/README.livemedia-creator. There you will find examples on how to set up your very own customized Linux distribution. A kickstart file is highly recommended as you can add other repositories for installing software that is not originally included in the Fedora releases. Also, it lets you do things like adding initial users, etc. Take a look at Kickstarting Fedora Linux installations.

Digital (Free-To-Air) TV now available in Uganda

Finally, Digital TV broadcasting has started in Uganda. Below is a list of channels I was able to scan for the Kampala area. See my previous post on how to scan for these channels.

service = UBC TV (UCC)
service = UBC STAR TV (UCC)
service = East AFRICA TV (UCC)
service = ITV (UCC)
service = CITIZEN TV (UCC)
service = WBS TV (UCC)
service = BUKEDDE TV 1 (UCC)
service = BUKEDDE TV 2 (UCC)
service = URBAN TV (UCC)
service = RECORD TV (UCC)
service = TOP TV (UCC)
service = NTV (UCC)
service = UBC TV (UCC)
service = LIGHT TV (UCC)
service = MIRACLE TV (UCC)
service = CCTV (UCC)
service = NBS (UCC)
service = CAPITAL TV (UCC)
service = BOUQUET SERVER 1 (UCC)
service = BOUQUET SERVER 2 (UCC)
service = RTV (UCC)
service = KBC (UCC)
service = TBC 1 (UCC)
service = BBC WORLD (UCC)

Of these, only six (TV: UBC, EATV, ITV, WBS, BUKEDDE-1, and NTV) are currently broadcasting via DVB-T.

And the fun part for the Linux people out there – How to play these channels.

If using VLC, create a channels.conf file (i.e. scan using Xine format). When done, simply run:

#> vlc .xine/channels.conf

All the channels will be populated as a playlist. Then select your favorite channel to watch.

NOTE: If you are playing using a remote SSH session i.e. embedded device: something like this will work:

vlc -I dummy -V xv -f --width 1024 --height 768 dvb-t:// :dvb-caching=300 :dvb-frequency=474000000 :dvb-inversion=-1 :dvb-bandwidth=8 :dvb-a-fec=2/3 :dvb-transmission=8 :dvb-b-modulation=QPSK :dvb-guard=1/4 :dvb-hierarchy :program=ENTER_PROGRAM_NUMBER_HERE e.g. for UBC enter 1 (see channels.conf file)

Initial observations: Audio quality is a bit off for some channels like NTV – I guess this will improve over time as the broadcasters get their act together.

Uganda’s Digital Free-to-Air TV is almost here

With testing for digital TV transmission for the greater Kampala area under way, Uganda’s migration to digital TV is back on.

For the open source geeks out there, I have re-published a script I wrote some years back to scan for DVB-T channels. If you live in the greater Kampala area; feel free to check it out from my GitHub repositories.

To use this tool, you will need a DVB-T2 tuner – USB dongle or PCI-based card.

So far, Broadcasting is currently on the frequency 674000000; in addition to the already existing pay tv frequencies of 490000000 , 498000000 , 522000000, 538000000, 546000000, 570000000, 586000000, 634000000, and 690000000.

We are really in the initial stages, as most broadcasters are not yet on at this time. Also analogue TV users should expect to be temporarily switched off this week as transmission masts are re-fitted with new panels.

Happy testing

Do the NSA revelations matter for developing nations?

I never thought I would comment on the continuing NSA revelations by Edward Snowden on this blog.
Considering how deprived most developing nations like Uganda are when it comes to ICT, one would brush off such leaks as a problem for the west.

But then again, due to our dependence on IT products and services (think Google, Microsoft, etc) from the US, IT users need to seriously reconsider what services and products they use.

If you are still using any of Microsoft’s products e.g. Windows, I recommend you take a look at this and other articles on Microsoft and the NSA.

Why We Can No Longer Trust Microsoft – John C Dvorak

Turns out Microsoft has been helping out the NSA and its surveillance work – confirming what a lot of us in the open source community always thought.
This might be a good time to migrate your systems away from those proprietary vendors unless of-course you don’t mind having ‘back-doors’ in your software and possibly being monitored.

Scroll to top