Home Home > Usability
Sign up | Login

Archive for the ‘Usability’ Category

Announcing Li-f-e 42.1

December 21st, 2015 by

The best Linux distribution for education got a whole lot better, your Li-f-e(Linux for Education) takes a “Leap” to 42.1. openSUSE Education community is proud to present this latest edition based on openSUSE 42.1 with all the features, updates and bug fixes available on it till date. This effectively makes it the only enterprise grade long term supported(LTS) distribution for Education.

As with previous releases we have bundled a ton of softwares on this live DVD/USB specially packaged for education, along with the Plasma, GNOME and Mate Desktop Environments, full multimedia experience is also provided out of the box thanks to the Packman repositories. Only x86_64 architecture is supported, if you have a lot of machines that only support x86 then read on to find out how you can extend their Li-f-e.
(more…)

How To Get Superbly Hinted Fonts in openSUSE 13.2

May 10th, 2015 by

Hey geekos,

So, this has been kind of my obsession these past years using openSUSE – I couldn’t get the fonts to be gently hinted in the way I want them to be. Every patch or repo had an issue with displaying a specific group of fonts. Now I finally found a way to get my fonts to look like this:

Font hinting

(more…)

Want Factory Restore/System Rescue for Linux?

June 12th, 2014 by

Considering that My sCool Server will be deployed in many schools, some in remote places and Linux system administration knowledge is quite rare, and users quite new to this whole Linux way of doing thing, there are bound to be instances where some bug between chair and the keyboard, online update gone haywire, or may be “it just happened on it’s own” kind of thing, will make something stop working as configured. We needed a way to get the system in it’s original “Factory” setting easily and quickly. Enter recovery-kit.
(more…)

Tiny Core kiwi-ltsp thin client

May 31st, 2014 by

Couple of days back went to a school here to demonstrate what openSUSE Education Li-f-e with KIWI-LTSP can bring to their lab. We have created a product based on Li-f-e called My sCool Server. It brings together all the goodies that a modern operating system must have and all the softwares required by the state board curriculum in one seamless package.
(more…)

Live USB GUI

February 14th, 2013 by

Here is a new tool that provides a simple zenity based GUI frontend to live-fat-stick script. The live-fat-stick script allows you to create multi boot USB stick/HDD which has vfat partition on it without formatting or removing existing data on it, it uses whole ISO images to boot so the image is still usable to create more live USB sticks or burn CD/DVDs. In live mode the device’s vfat partition can be mounted to access/modify and save files.

Currently live CD/DVD isos of openSUSE 12.2(and derivatives) including all from susestudio, Mint, Ubuntu(and derivatives) and Fedora are supported. Fedora iso is not copied but is extracted on the USB device instead as it does not support booting from iso image yet.

Here is Live USB GUI in action:
(more…)

Optimizing a boot time, aka 2 second boot

July 26th, 2012 by

During the hackweek, I have decided to take a look onto a boot process to realize, how fast can be boot of the system. This metric is considered as a not important, especially in a geek community. But I am sure that this is an important part of user experience. Following text is mean to share my investigations with you – but you should be aware what you are doing, since I have been focused on reducing the boot time as much as possible.

A bit of theory

Basically you have three possibilities how to make your boot fast.

  1. Start things in a parallel.
  2. Start things on demand.
  3. Start less things.

… root of all evil …

“Premature optimization is the root of all evil.”

And I will modestly extend Donald Knuth’s sentence, that the blind optimization as well. So if we have to optimize something, we have to know what to do. Fortunately systemd comes with an excellent tool called systemd-analyze, which show us our boot in several ways.

The simple run of command prints the time we spent in a boot and in which phase.

# systemd-analyze
Startup finished in 8480ms (kernel) + 30873ms (userspace) = 39353ms

That was the default (minimal X system) 12.2 installation on my EEE 701 netbook, which is probably not suitable to work as nowadays cellsmarphone, because is pathetically slow. On the other hand is it a perfect playground, so let’s continue with an investigating.

The overall time is nice, but won’t help to know what’s going on. There are two more subcommands, blame and plot shows us more information about the boot. The first shows the services sorted by the start time. The ones boots so long are those we should kicked off as a first ones.

Let see what slow the boot down a most

$ systemd-analyze blame | head
 11385ms network.service
  5664ms SuSEfirewall2_init.service
  5575ms systemd-vconsole-setup.service
  3032ms ntp.service
  2840ms remount-rootfs.service
  2230ms postfix.service
  2021ms network-remotefs.service
  1925ms cpufreq.service
  1661ms SuSEfirewall2_setup.service
  1506ms xdm.service

And take look at the output of systemd-analyze plot command

openSUSE 12.2 boot diagram

You can see, that there is a long chain of SuSEfirewall2_init -> network -> network-remotefs -> SuSEfirewall2_setup tooks several dozen seconds to be finished. And nothing is wrong with that, but that is the server solution, not what I want to have on my tiny laptop.

Making a laptop boot twice more faster

So having the complex dependencies of several services in mind, I decided to mask some of them. Masking in systemd world means the service cannot be started using systemd, so it becomes invisible for it. I masked those

  • network.service – will be replaced by NetworkManager, which is more suitable for laptops usage
  • SuSEfirewall2_init and SuSEfirewall2_setup – even if it’s a security feature, a risc for laptop, which is mostly offline and running only sshd is pretty small.
  • ntp.service, network-remotefs.service – those does not makes a sense on my laptop
  • postfix.service – I do not want to send emails via /usr/bin/sendmail
  • cpufreq.service – it is even not supported by my CPU (grep rc.cpufreq /var/log/messages)

Do not forget to install NetworkManager and the applet and change the /etc/sysconfig/network/config and reboot.

Now we have

$ systemd-analyze
Startup finished in 8528ms (kernel) + 11123ms (userspace) = 19652ms

Using an strace with systemd

Now we have a list of worse services

$ systemd-analyze blame | head -n 10
  5476ms xdm.service
  4172ms systemd-vconsole-setup.service
  3950ms systemd-modules-load.service
  2781ms remount-rootfs.service
  1848ms NetworkManager.service
  1439ms media.mount
  1426ms systemd-remount-api-vfs.service
  1419ms dev-hugepages.mount
  1411ms dev-mqueue.mount
  1371ms sys-kernel-debug.mount

and a proper boot chart

bootchart w/o network.service

It shows us an another botleneck, which is the systemd-vconsole-setup.service, because it delay the sysinit.target, which is very early boot stage. In case like this, we can only use strace to know, what is taking too long. And debugging is pretty straightforward in systemd world. All we have to do is copy service file to /etc/systemd/system and change the ExecStart

ExecStart=/usr/bin/strace -f -tt -o /run/%N.strace /lib/systemd/systemd-vconsole-setup

and reboot. Then you will find the output in /run/systemd-vconsole-setup.strace with a timestamps. Looking there it’s obvious calling hwinfo --bios is extremely expensive in this stage. You can speedup the unit by setting the KBD_NUMLOCK to yes or no in /etc/sysconfig/keyboard, or you can try to mask it completely I did.

The next service needs to closer look was system-modules-load – then strace says that it spent 2(!) in init_module() for module microcode. I disabled it as well, even for CPUs needs it can’t be recommended.

Native systemd units

There is one tiny init script called purge-kernels, which starts for 300ms according blame. And in this particular case systemd alternative will be way more effective

$ cat /etc/systemd/system/purge-kernels.service
[Unit]
Description=Purge old kernels
After=local_fs.target
ConditionPathExists=/boot/do_pure_kernels

[Service]
Type=oneshot
ExecStart=/sbin/purge-kernels

because systemd only do one stat on the file and do not run it at all, so this service disappears from the blame at all.

The kernel time

There is one interesting thing about kernel time – 8 seconds spent there seems to be a lot to me. Simple ls on /boot gave me a pointer

$ ls -lh /boot/vmlinuz-* /boot/initrd-*
-rw-r--r-- 1 root root  14M Jul 24 11:03 /boot/initrd-3.4.4-1.1-desktop
-rw-r--r-- 1 root root 4.7M Jul 10 15:48 /boot/vmlinuz-3.4.4-1.1-desktop

The initrd is huge, around three times bigger than kernel? So let’s try to find what caused that. Every package can add it’s own setup script into /lib/mkinitrd/scripts/ thus let ask rpm whose did that

$ rpm -qf /lib/mkinitrd/scripts/setup-* | sort -u
cifs-utils-5.5-2.2.2.i586
cryptsetup-1.4.2-3.2.1.i586
device-mapper-1.02.63-26.1.1.i586
dmraid-1.0.0.rc16-18.2.1.i586
kpartx-0.4.9-3.1.1.i586
lvm2-2.02.84-26.1.1.i586
mdadm-3.2.5-3.3.2.i586
mkinitrd-2.7.0-62.2.1.i586
multipath-tools-0.4.9-3.1.1.i586
plymouth-scripts-0.8.5.1-1.3.1.noarch
splashy-0.3.13-35.1.1.i586

So I went through a list and try to uninstall things I do not need

  • cifs-utils – if you do not have any windows disc to mount, you can remove, but no impact on initrd size
  • cryptsetup – this is a popular service for laptops, but I do not have any luks device, so let skip that. It removes a half of Yast as well, so I saved 18M of space, but a little in initrd.
  • device-mapper, dmraid, kpartx and lvm2 – cannot be easily removed as too much low-level stuff depends on it
  • mdadm – no linux md devides, skip that
  • mkinitrd – removal can reduce initrd to zero, but we would need own kernel
  • multipath-tools – no multipath device, let skip that

  • plymouth-scripts – who would need the “fancy” boot when booting so fast? – reducing initrd to 8.9M
  • splashy – the same – and reducing initrd to 6.6M

So the things intended to provide fancy boot actually bloats the system. Let’s measure the impact of those changes

$ systemd-analyze
2781ms (kernel) + 4999ms (userspace) = 7780ms

bootchart w/o network.service

And that’s all folks …?

There are a lot of factors slowing our boot – reducing it to 8 seconds is not that bad. One have to go carefully through blame and plot output to see what delays his computer in start. I would say making NetworkManager default one at least when installing laptop pattern would be nice and simple change as well as continue on “systemdifization” of openSUSE.

There are few other tricks, which get us closer to the target time, but I’ll post them next day.

The Exo Typeface Family

December 8th, 2011 by

Some week ago, I’ve stumbled upon a very promising font project. It’s called the Exo Typeface Family and I think this could be a valuable addition to our distribution:
(more…)

New Style for YaST2

October 24th, 2011 by

YaST2 got a lot of improvements which will be available in openSUSE 12.1. YaST doesn’t accidentally overwrite configuration files anymore (last bug fixed 😉 ) and snapper provides a rollback function for configuration options, just to mention a few. Therefore it’s time to give YaST2 a new and fresh style. As YaST Qt supports Stylesheets it’s simple to influence YaST’s style.

Screenshot of YaST's New Style

FACTORY contains the new style already. Packages for older releases are also available in my build service project: http://software.opensuse.org/download.html?project=home:tgoettlicher:Factory&package=branding-openSUSE.

I hope you like it. You can use YaST’s Stylesheet Editor to play around the the stylesheet as described in my this blog post. Please send me improvements you want to share. Thanks.

Unity 2D to enter GNOME:Ayatana soon…

May 19th, 2011 by

In the past days I’ve been packaging and fixing some issues on Unity 2D for inclusion on the GNOME:Ayatana repository in the openSUSE Build Service.

This gave me an excellent opportunity to test a few components share by both, Unity and Unity 2D, which is the case of ‘unity-place-applications’ and ‘unity-place-files’, both using Zeitgeist which is already in Factory for the upcoming openSUSE 12.1. We thank the integration of this packages to Federico Quintero. Thanks Fred.

A few more additional packages need some care and once they get updated and tested they will be uploaded to GNOME:Ayatana, at which time I will provide an installer (1-Click) for those willing to test Unity-2D. Unity 2D will be the first application to use the indicators I have prepared in the past which all all found working, except 1, the AppMenu (strangely it works on GNOME2 panel without issues).

This is how Unity 2D looks like. There are transparencies because I enabled ‘composite’ on metacity, which works very nicely. As far as I could understand, the developers of Unity 2D are also looking into implementing Compiz with Unity 2D, which would be sweet.

Unity introduces the ‘dash’ which is pretty much the following screen. Transparencies are enabled (though metacity composite) and the notification bubble belongs to NotifyOSD (already present in openSUSE 11.4 as optional). This is one of the three issues I have to fix, the icons displayed on the dash should have text underneath, it’s not showing. The top icons are quick links to Program Categories and the ones bellow are the default applications which are setup in GNOME.

The launcher panel on the side auto-hides, and seems to be working. The three icons displayed in last are respectively: Workspace selector, applications menu and files. Everything seems to be working with them, and the 2 last are components shared with Unity, and they both rely on Zeitgeist. Here’s a few captures of what they do…

There’s also a feature from Unity which is cute… The title artifact of the decorator window (metacity, which required a few patches) is removed and implemented on the top bar when the window is maximized. Sadly for me the AppMenu (menu proxy) isn’t working properly, this is another thing that needs fixing…

This should cover pretty much the functionality that is available currently. There’s a few issues still remaining before I can push this to GNOME:Ayatana:

– I tried not to have the need to patch gnome-session, but since Unity relies on the Session Indicator to have this functionality, gnome-session will need to be patched (should be ok, because it also requires the backport patch for  defining –sessions for openSUSE 11.4).

– Unity 2D itself relies on a few gconf hacks that should be on a schema file. I’ve talked to upstream and this is planned already, so once it’s release, that’s when it will be published.

– There’s one issue also with backgrounds and workspace switcher… unfortunatly the workspace switcher only renders wallpapers if they are in image format (no .xml stuff), so this can turn some wallpapers not to render, which eventually ends up in the background of the switcher being the one defined in GNOME as solid color.

So the order of TODO’s for GNOME:Ayatana is pretty much this one:

1. Implement dependencies and then Unity 2D;
2. Make sure Compiz is well implemented, because Unity will require Compiz at it’s best shape;
3. Make sure nux and other twisted dependencies are properly implemented;
4. Implement Unity itself;

This are the latest news for GNOME:Ayatana…

Where our bugzilla needs improvement

April 15th, 2011 by

update 2012-02-07: Success: after bnc#732504 you can now open Advanced Search and find RESOLVED/DUPLICATE bugs by default. When bugs are finally solved and fixes released, those can then be moved to CLOSED state to no more appear in search results.

 

bugzilla.novell.com aka bnc is the central tool to track bugs of openSUSE.

It has a guided bug submission form that helps & encourages reporters to search for existing reports on an issue.

However, the integrated search function only shows open bugs. In principle that is nice, but bugs marked as duplicates of open bugs do not count as open. Also it is common that developers mark a bug as RESOLVED/FIXED as soon as they uploaded a patch into the OBS devel-project. Such a patch then needs some days until it gets into Factory or the Update repos where normal users would benefit from the fix. During that time, there will still be people with all regular updates installed hitting the bug and not finding it on bugzilla because it is no more marked open. Of course, one could also search for RESOLVED bugs, but this brings up a huge list of issues that are long solved, but never were marked CLOSED (e.g. openSUSE-11.3 has 453 CLOSED vs 2727 RESOLVED).

This wastes time of reporters writing a duplicate bug-report and wastes time of developers having to figure out that it really is a dup. This is probably why other projects recommend setting bugs to ASSIGNED/FIXED until the patch is released. Unfortunately bnc lacks this state.

Also bugzilla has an UNCONFIRMED state for new bugs that need triaging to get into the NEW state (named “Reproducible but not assigned” in other projects). Such a state is unavailable on bnc, so that people can not tell apart bugs that have been forgotten from bugs that are known to exist, but just wait for a developer to fix.

There was also little integration between OBS and bnc. I have therefore written scripts to update bugzilla entries with links to submit requests on OBS mentioning e.g. bnc#685133 (<=see link for how it looks like). But it still could be made a lot more useful.

Overall, there is some room for improvement to make people’s lives easier, and allow us having a lot of fun…