Thanks to the hard work of Jeremy Bicha and others Ubuntu GNOME is now an official Ubuntu flavour. Flavours get some infrastructure and support benefits such as ISO creation that make it easier to release and support.
Bob's development blog
Musings on open-source, GNOME, Ubuntu etc
Tuesday, March 12, 2013
More information on Mir
With the recent announcement of Mir there's been some concern about what this means for Ubuntu and the wider Linux ecosystem. Christopher Halse Rogers who is on the Mir team has written some excellent posts covering some of the major questions: why Mir and not Wayland/Weston, what does this mean for other desktops on Ubuntu and what does this mean for Linux graphics drivers.
Well worth the read.
Well worth the read.
Tuesday, March 05, 2013
Mir
Today
we go public with the Ubuntu graphics stack for the post X world. Since
the beginning Ubuntu has relied on the X server to support the user
experience and while it has worked generally well; it’s time for
something new. My team is working on a big new component for this - Mir. Mir is a graphics technology
that allows us to implement user experience we want for Ubuntu across
all devices we support.
In
many ways, Mir will be completely transparent to the user. Applications
that use toolkits (e.g. Qt, GTK+) will not need to be recompiled. Unity
will still look like Unity. We will support legacy X applications for
the foreseeable future.
This
is a big task. A lot of work has already been done and there’s a lot
more to go. We’re aiming to do incremental improvements, and you can
find more about this on the Wiki page and in the blueprints. You can help.
From today our project is public, it’s GPL licensed and you’re welcome
to use the source and propose changes.
It’s exciting times, and I hope you enjoy the results of this work!
Thursday, January 10, 2013
Vala support for Protocol Buffers
Recently I was playing around with Protocol Buffers, a data interchange format from Google. In the past I have spent quite a bit of time working with ASN.1 which is a similar format that has been around for many years. Protocol buffers seem to me to be a nice distillation of the useful parts of efficient data interchange and a welcome relief to the enormous size of the ASN.1 specifications.
With Vala being my favourite super-productive language I felt the need to add support to it. Solution: protobuf-vala.
Let's see it in action. Say you have the following protocol in rating.proto:
message Rating {
required string thing = 1;
required uint32 n_stars = 2 [default = 3];
optional string comment = 3;
}
Run it through the protocol buffer compiler with:
$ protoc rating.proto --vala_out=.
This will create a Vala file rating.pb.vala with a class like this:
public class Rating
{
string thing;
uint32 n_stars;
string comment;
etc
}
You can use this class to encode a rating, e.g. for storing to a file or sending over a network protocol:
var rating = new Rating ();
rating.thing = "Vala";
rating.comment = "Vala is super awesome!";
rating.n_stars = 5;
var buffer = new Protobuf.EncodeBuffer ();
rating.encode (buffer);
do_something_with_data (buffer.data);
And decode it:
var data = get_data_from_somewhere ();
var buffer = new Protobuf.DecodeBuffer (data);
var rating = new Rating ();
rating.decode (buffer);
stderr.printf ("%s is %d stars\n", rating.thing, rating.n_stars);
That's pretty much it!
If you're using Ubuntu (12.04 LTS, 12.10 or 13.04) then you can install Vala protocol buffer support with:
$ sudo apt-add-repository ppa:protobuf- vala-team/ ppa
$ sudo apt-get update
$ sudo apt-get install protobuf-compiler-vala libprotobuf-vala-dev
Have fun!
With Vala being my favourite super-productive language I felt the need to add support to it. Solution: protobuf-vala.
Let's see it in action. Say you have the following protocol in rating.proto:
message Rating {
required string thing = 1;
required uint32 n_stars = 2 [default = 3];
optional string comment = 3;
}
Run it through the protocol buffer compiler with:
$ protoc rating.proto --vala_out=.
This will create a Vala file rating.pb.vala with a class like this:
public class Rating
{
string thing;
uint32 n_stars;
string comment;
etc
}
You can use this class to encode a rating, e.g. for storing to a file or sending over a network protocol:
var rating = new Rating ();
rating.thing = "Vala";
rating.comment = "Vala is super awesome!";
rating.n_stars = 5;
var buffer = new Protobuf.EncodeBuffer ();
rating.encode (buffer);
do_something_with_data (buffer.data);
And decode it:
var data = get_data_from_somewhere ();
var buffer = new Protobuf.DecodeBuffer (data);
var rating = new Rating ();
rating.decode (buffer);
stderr.printf ("%s is %d stars\n", rating.thing, rating.n_stars);
That's pretty much it!
If you're using Ubuntu (12.04 LTS, 12.10 or 13.04) then you can install Vala protocol buffer support with:
$ sudo apt-add-repository ppa:protobuf-
$ sudo apt-get update
$ sudo apt-get install protobuf-compiler-vala libprotobuf-vala-dev
Have fun!
Thursday, December 27, 2012
A script for supporting multiple Ubuntu releases in a PPA
Something I find time consuming is uploading to a PPA when you want to support multiple Ubuntu releases. For my projects I generally want to support the most recent LTS release, the current stable release and the current development release (precise, quantal and raring when this was written).
I have my program in a branch and release that with make distcheck and lp-project-upload. The packaging is stored in another branch.
For each release I update the packaging with dch -i and add a new entry, e.g.
myproject (0.1.5-0ubuntu1) precise; urgency=low
* New upstream release:
- New exciting stuff
-- Me<me@canonical.com> Thu, 27 Dec 2012 16:52:22 +1300
I then run release.sh and this generates three source packages and uploads them to the PPA:
NAME=myproject
PPA=ppa:myteam/myproject
RELEASES="raring quantal precise"
VERSION=`head -1 debian/changelog | grep -o '[0-9.]*' | head -1`
ORIG_RELEASE=`head -1 debian/changelog | sed 's/.*) \(.*\);.*/\1/'`
for RELEASE in $RELEASES ;
do
cp debian/changelog debian/changelog.backup
sed -i "s/${ORIG_RELEASE}/${RELEASE}/;s/0ubuntu1/0ubuntu1~${RELEASE}1/" debian/changelog
bzr-buildpackage -S -- -sa
dput ${PPA} ../${NAME}_${VERSION}-0ubuntu1~${RELEASE}1_source.changes
mv debian/changelog.backup debian/changelog
done
Hope this is useful for someone!
Note I don't use source recipes as I want just a single package uploaded for each release.
I have my program in a branch and release that with make distcheck and lp-project-upload. The packaging is stored in another branch.
For each release I update the packaging with dch -i and add a new entry, e.g.
myproject (0.1.5-0ubuntu1) precise; urgency=low
* New upstream release:
- New exciting stuff
-- Me
I then run release.sh and this generates three source packages and uploads them to the PPA:
NAME=myproject
PPA=ppa:myteam/myproject
RELEASES="raring quantal precise"
VERSION=`head -1 debian/changelog | grep -o '[0-9.]*' | head -1`
ORIG_RELEASE=`head -1 debian/changelog | sed 's/.*) \(.*\);.*/\1/'`
for RELEASE in $RELEASES ;
do
cp debian/changelog debian/changelog.backup
sed -i "s/${ORIG_RELEASE}/${RELEASE}/;s/0ubuntu1/0ubuntu1~${RELEASE}1/" debian/changelog
bzr-buildpackage -S -- -sa
dput ${PPA} ../${NAME}_${VERSION}-0ubuntu1~${RELEASE}1_source.changes
mv debian/changelog.backup debian/changelog
done
Hope this is useful for someone!
Note I don't use source recipes as I want just a single package uploaded for each release.
Wednesday, November 21, 2012
Testing Kerberos in Ubuntu
In fixing a LightDM bug recently I needed to set up Kerberos authentication for testing. Now, Kerberos comes with quite a reputation for complexity so this was not a task I was looking forward to. And googling around to get some simple Ubuntu instructions only ended up confirming my expectations. But in the end, I was able to get it to work [1] and here is what I did. You should probably not rely on this information for an actual Kerberos implementation.
I start with two machines running Ubuntu, one as the Kerberos server [2] and one as a client. The client is already installed with a user account called test.
I start with two machines running Ubuntu, one as the Kerberos server [2] and one as a client. The client is already installed with a user account called test.
Server configuration
Edit /etc/krb5.conf to set the default realm [3]:
[libdefaults]
default_realm = TEST
Install the Kerberos server:
$ sudo apt-get install krb5-kdc krb5-admin-server
Create the realm. You will be prompted for a master password for the realm:
$ sudo krb5_newrealm
Add a new user (called a principal in Kerberos language) into the realm with the same username as on the client. You will be prompted for a password for this user [4]:
$ sudo kadmin.local
kadmin.local: add_principal test
And now the server should be running. You can check things are working by watching the log:
$ tail -f /var/log/auth.log
Client configuration
The client is a lot easier, as the packages do most of the work for you:
$ sudo apt-get install krb5-user
You will be prompted for the following information:
- Set "Default Kerberos version 5 realm" to TEST
- Set "Kerberos server for your realm" to address / hostname of your server
- Set "Administrative server for your Kerberos realm" to address / hostname of your server
$ kinit
$ kdestroy
If that worked then you're ready to go. Have a look at the auth.log on the sever if it didn't work (the error messages are a bit cryptic though).
The next step is to setup PAM [6] to allow authentication with Kerberos. There's no configuration required, just install it:
$ sudo apt-get install libpam-krb5
Now you can log into your client machine (e.g. from LightDM/Unity Greeter) using the Kerberos password you setup on the server. Remember if something went wrong you can still use the local password to get in [7].
The reason I set all this up was to test Kerberos accounts which need password changes. You can control this feature from the server using the following:
$ sudo kadmin.local
kadmin.local: modify_principal +needchange test
[1] on Ubuntu 13.04 (server) and 12.04 (client). I don't know which other combinations will work.
[2] Called a Key Distribution Centre in Kerberos jargon.
[3] Kerberos calls different authentication domains realms. I've used the realm TEST though in proper usage this would be a domain name e.g. EXAMPLE.COM to avoid name collision.
[4] You will already have a password set for this user on the client machine. Pick a different password as this allows you log in with either Kerberos or local passwords - both passwords will work.
[5] A ticket is the name for an authentication token provided by the server. In a real implementation this ticket will allow you to access services without re-entering your password.
[6] PAM is the library that does authentication when logging into Ubuntu.
[7] The PAM configuration that the packages setup first tries your password with the Kerberos server, then the local passwords (/etc/shadow) if that fails.
Thursday, February 09, 2012
So You Want to Write a LightDM Greeter…
Matt Fischer wrote a great post about writing a greeter for LightDM. Runs through an example of a Python greeter and how it works.
Thursday, December 08, 2011
Gnome Games Modernisation
The GNOME Games project maintains fifteen small "five-minute" games for the GNOME desktop.
Unfortunately over time the games have struggled to keep up with the latest GNOME technology due to the time required to do this. And the further behind we've got the harder it is for new developers to get involved as the code is hard to work with.
So the time has come for a great modernising. And here's where you fit it :)
We've picked eight of the games we think are the best and we want to focus on bringing them up to modern standards. The games are Chess, Five or More, Mines, Iagno, Mahjongg, Sudoku and Swell Foop. These games all have been or are in progress of being ported to Vala. Vala is a modern programming language that will be familiar to anyone who has used Java or C#.
We have a Matrix of things to do:
with the goal being to turn everything to green.
So, if you're interested in helping out follow any of the bug links and start fixing the bugs! All the tasks should be able to be completed independently and shouldn't be too complex to achieve. Anyone is welcome to attempt these and there are non-coding tasks (documentation and design).
Unfortunately over time the games have struggled to keep up with the latest GNOME technology due to the time required to do this. And the further behind we've got the harder it is for new developers to get involved as the code is hard to work with.
So the time has come for a great modernising. And here's where you fit it :)
We've picked eight of the games we think are the best and we want to focus on bringing them up to modern standards. The games are Chess, Five or More, Mines, Iagno, Mahjongg, Sudoku and Swell Foop. These games all have been or are in progress of being ported to Vala. Vala is a modern programming language that will be familiar to anyone who has used Java or C#.
We have a Matrix of things to do:
with the goal being to turn everything to green.
So, if you're interested in helping out follow any of the bug links and start fixing the bugs! All the tasks should be able to be completed independently and shouldn't be too complex to achieve. Anyone is welcome to attempt these and there are non-coding tasks (documentation and design).
Subscribe to:
Posts (Atom)
