Category: linux

How to help fixing problems in openSUSE

Posted by – 14. Januar 2010

If you found a problem in your openSUSE system, and know how to fix it, it is very easy now to contribute the fix back to the project.

For example a user had a problem with a boot script erroneously overwriting a file at each system boot. As he already found out how to fix it, I can demonstrate how easy it is to contribute this fix back to the project, so that every openSUSE user can benefit from it.

At first I had to find out which package to fix. This can be done by asking the package management system which package owns the buggy file:

> rpm -qf /etc/init.d/boot.clock

aaa_base-11.2-43.45.1.i586

Now we create a branch of the package in the openSUSE buildservice:

> osc branch openSUSE:Factory aaa_base

Note: Please login to build.opensuse.org first to create your home project. The osc tool can be installed for openSUSE 11.2, 11.1.

The server created a copy of the package in your home project now.
You need to check it out to your local machine to do the changes:

osc co home:digitaltomm:branches:Base:System/aaa_base

You now have a directory ‚home:digitaltomm:branches:Base:System/aaa_base‘ containing the package source files.

You can now either directly change the sources of the package or create a patch file that gets included from the .spec file. Creating a patch file is preferred for source changes, so that the patch can easily be removed when the upstream project has included the fix. Changes to the .spec file can be done directly.

Let’s create a patch. This can be done manually with the patch command, or with the help of the quilt program.

I have to extract the source tarball, create a copy where I fix the code, and create the patch file by using diff to compare the original and the patched sources:

> cd home\:digitaltomm\:branches\:Base\:System/aaa_base
> tar -xf aaa_base.tar.bz2
> cp -r aaa_base aaa_base.orig
> vim aaa_base/etc/init.d/boot.clock
> diff -uNr aaa_base.orig aaa_base > adjtime.patch

Now the patch file needs to be referenced from the .spec file. This is done by adding a reference like this:

Source: aaa_base.tar.bz2
Patch0: adjtime.patch
...
%prep
%setup -n aaa_base
%patch0 -p1

To make sure the patch is applied correctly, and the package builds on openSUSE Factory, I start a local build:

> osc build --no-verify

When everything went fine, I can commit the changes to my branch, add a changelog entry and afterwards submit a request to get the changes included in the openSUSE Factory project:

> osc commit -m "Added adjtime fix from bnc#570245."
> osc vc
> osc submitreq -m 'Added adjtime fix from bnc#570245'
created request id 29474

The request is now pending and waiting to get reviewed by the project maintainers of openSUSE Factory. It’s state can be viewed with:

> osc request show 29474

or in the webinterface.

In my case the request got declined because Rudi was faster in fixing it, and I forgot to add a correct changelog entry first.

openSUSE Buildservice appliances

Posted by – 23. Dezember 2009

The openSUSE Buildservice will be released with version 1.7 soon next year.

We are already building beta packages in the openSUSE:Tools:Unstable project.

I started to build appliances for the OBS with SUSE Studio now:

openSUSE 11.2 released

Posted by – 17. November 2009

openSUSE 11.2 has been released today!

Read more about the included updates, such as:

After upgrading my workstation to 11.2, I already have some workarounds for minor problems:

Tips & Tricks:

Mysql:

It seems the database did not run after upgrading from 11.1 to 11.2.

To fix it I did a: sudo zypper rm mysql; sudo zypper in mysql

Note: This was reported as bug #539148, and is caused by the ‚–skip-federated‘ option in /etc/my.cnf

Kde4 konsole:

My „Home“ and „End“ keys did not work. Go to Settings -> Manage profiles -> edit profile -> Set to „Default (XFree4)“

Privoxy:

Privoxy fails to start, because it is missing a config file. Fix:

sudo ln -s default.action /etc/privoxy/standard.action

X.org:

The X.org config file /etc/X11/xorg.conf is not needed anymore. I just moved it away.

Ideapad S12:

The Atom processor of the S12 seems to have a problem with the 11.2 kernel: It sleeps even if it should work 😉

Solution: adding processor.max_cstate=1 to the kernel line of /boot/grub/menu.lst

Setting up a development buildservice instance

Posted by – 9. September 2009

This article explains how to setup all parts of the openSUSE buildservice.
It will describe the needed steps to get it running with the latest sourcecode from svn, ready to use it and develop it.

If you just want to use the buildservice and are not interested in the latest code and it’s development, it is recommended to simply use the openSUSE instance, or install it from
rpm (howto).

The buildservice consists of various parts, mainly the backend, the frontend (API), and different clients that connect to the API, we will set it up with the webclient.

At first we need to check out the buildservice code:

svn co https://forgesvn1.novell.com/svn/opensuse/trunk/buildservice

 

Setting up the backend:

We need to initialize the config file, add a buildservice user, and create the working directories:

cd src/backend
cp BSConfig.pm.template BSConfig.pm
sudo useradd obsrun -s /bin/false
sudo /usr/sbin/groupadd obsrun

sudo mkdir -p /srv/obs/run /srv/obs/projects
sudo chown -R obsrun /srv/obs/

This needs to be done as root or with sudo rights. To change the default directory or the user edit the BSConfig.pm file.

Now we are ready to start the servers. You should start each one in it’s own terminal to see the logfiles.

sudo ./bs_srcserver
sudo ./bs_repserver
sudo ./bs_dispatch
sudo mkdir /tmp/state
sudo ./bs_worker --root /tmp/build --statedir /tmp/state

Setting up the frontend (API):

We can create a config file for the development machine, so we don’t have to change the original one:

cd frontend; pushd config/environments;
cp development_base.rb development.`hostname`.rb;
popd;

Now we need to set up a database for the frontend, simply configure a database user in config/database.yml, crete the database and run:

rake db:migrate

now the database should be correctly initialized. Starting the API server with:

./script/server -p3001

makes it available at: http://127.0.0.1:3001. Using a browser on this address you can change some administrative stuff. The pre-configured admin user has the credentials: Admin:opensuse

The API documentation is now available here: http://127.0.0.1:3001/apidocs/

This API can now be used by different clients, or standard tools like curl (howto).

Setting up the webclient:

Setting up the weblient for usage with the openSUSE.org API is very easy, and explained in the wiki.

To use it with our local frontend, we just need to change some config values:

cd webclient; pushd config/environments/;
cp development_base.rb development.`hostname`.rb;
popd;

and set:

FRONTEND_HOST = "localhost"
FRONTEND_PORT = 3001
FRONTEND_PROTOCOL = 'http'
Let’s start it on default port 3000 with:

./script/server

Link your instance to the openSUSE.org buildservice

As our backend does not yet have any repositories we could build packages against, the easiest way to get started is to link it against the openSUSE buildservice, so we are able to build against all repositories from there. This is unfortunately not yet possible from the admin interface, so we have to use the API directly with curl:

curl -u Admin:opensuse -T opensuse_link
http://localhost:3001/source/openSUSE.org/_meta

with opensuse_link being a file with this content: 

<project name="openSUSE.org" >
<title>openSUSE.org build link</title>
<description>Build against projects from build.opensuse.org</description>
<remoteurl>https://api.opensuse.org/public</remoteurl>
</project>
The linked project shown in the webclient

 

Now I want to create a project that builds against this repository, and build a package inside of it to show that everything is really working. For that, we create a home project for the admin user by clicking on „Home Project“.

We need to use curl again to add a repository from the linked buildservice as a build target:

curl -u Admin:opensuse -T _meta
http://localhost:3001/source/home:Admin/_meta

with _meta being a file with this content: 

<project name="home:Admin">
  <title>Admin's Home Project</title>
  <description></description>
  <repository name="openSUSE_11.1">
  <path project="openSUSE.org:openSUSE:11.1" repository="standard"/>
  <arch>i586
  </repository>
  <person role="maintainer" userid="Admin"/>
  <person role="bugowner" userid="Admin"/>
</project>

 

The project is now ready to build packages against the openSUSE 11.1 repository from the linked buildservice. We could now create new packages and upload the sources and .spec files, but I will just link a package from the openSUSE buildservice to build it unchanged.

 

YAY! After some time we can see that the first package was build by our local buildservice and the RPMs are ready!

Did you get interested in buildservice development, or did you run into some limitations that you want to fix? There also is a wiki page at:
http://en.opensuse.org/Build_Service/Junior_Projects that lists some tasks that can be done.

 

The buildservice community can be found on irc at #opensuse-buildservice at freenode, and on opensuse-buildservice@opensuse.org (subscribe).

 

openFATE updated

Posted by – 20. März 2009

We updated the openSUSE feature tracking tool openFATE yesterday.
The update includes:

  • A nice browser search engine plugin, so you can search for features directly in your browsers search field.
  • Notifications over hermes. You can now
    subscribe to feature changes by email or RSS. There is also feed available with
    all feature changes.
  • The query results now have a sortable column for the score
  • External references such as bugzilla links or other features can be added,
    the products can be edited.

The full changelog is available here.

Creating a DVD from youtube videos

Posted by – 9. März 2008

I wanted to create DVDs from youtube videos
in an easy way, to be able to watch them on my TV.

At first, you need to download the videos.
This can be done with youtube-dl (1-click install for opensuse)

By calling: youtube-dl.py -l <youtube-url> the videos will be stored to your local disk.

The next step is to encode these video files to DVD compatible mpeg files, create a DVD navigation menu and
build the DVD image for burning.

For this I wrote a script that automates these steps by making use of tovid (1-click) and ffmpeg (1-click).

So, I’m going to create a DVD with some guitar lessons from youtube. It’s as easy as this:

> mkdir /tmp/flv; cd /tmp/flv;
> youtube-dl.py -l  http://www.youtube.com/watch?v=lJw4hMjlRYw
> youtube-dl.py -l http://www.youtube.com/watch?v=njPMjKUWnZ0
> youtube-dl.py -l http://www.youtube.com/watch?v=JdIjuTAiWtI
> youtube-dl.py -l http://www.youtube.com/watch?v=RhdItoEqaRU

> flvtodvd -i /tmp/flv -o /tmp/dvdout -t "Pink Floyd"

To finally burn the DVD, you can use a burning application of your choice and use the created DVD structure at:
/tmp/dvdout/dvdxml,
or call:

makedvd -burn /tmp/dvdout/dvdxml.xml

 

Note: The created mpegs have a data rate of about 10mb/min.

Save battery with fglrx and ipw3495 drivers

Posted by – 7. Mai 2007

The fglrx driver is able to throttle the internal frequency of the gfx card. To see the available modes use:

aticonfig --lsp

The setting can be changed with:

aticonfig --set-powerstate=NUMBER

For my t60p, aticonfig –set-powerstate=1 saves about 5W.

Another device that can be set to another powersave mode is the wireless device:

iwpriv eth1 get_power

shows the current setting, and

iwpriv eth1 set_power 7

sets it into „BATTERY“ mode.

A good resource for Linux on Thinkpads is the thinkwiki,
it also has a page for installing openSUSE 10.2 on a T60.

Blinkenled

Posted by – 1. Mai 2007

Toms BlinkenLED installation:

BlinkenLED is a miniature rebuild of CCC’s blinkenlights installation in Berlin.
It is a 144 (18*8) pixel matrix of LEDs. Connected to a PC via the parallel port and powered by a 5V power supply.
I build it with help of the excellent manual from the BlinkenLED Project.
As there was only Windows software available for controlling the display, I had to write my own for a solid operating system such as openSUSE.
The software includes scripts for displaying texts and Blinkenlights (*.blm) movies on the display. This way I am able to play all the movies that were originally displayed on the Blinkenlights building.

BlinkenLED software:

The software package includes the following tools:

bin/blinkenmovie (plays a movie in *.blm format)
bin/blinkentext (scrolls a text)
bin/blinkentest (makes tests, useful for debugging your blinken hardware)

examples/heat.sh (grepping the current temperature from the karamba weather applet and display it)
examples/loop_movie.sh (endless loop of a *.blm movie)
examples/loop_text.sh (endless scrolling of a text)
examples/now_playing.sh (read output of mp3blaster and display the current and next song)
examples/play_movies.sh (play all movies of a directory in a loop)

BlinkenLED – Downloads:

The blinkenled sourcecode has been released on sourceforge.net.
Download tarball: [blinkenled.tar.gz]
or checkout from subversion:
svn co https://svn.sourceforge.net/svnroot/blinkenled blinkenled

BlinkenLED – Photos:

blinkenledblinkenledblinkenled
blinkenledblinkenledblinkenled

BlinkenLED – related Links:

Blinkenlights
Wiki and Forum for Blinken projects
BlinkenLED Project
Parapin Linux parallelport library