Planet Ubuntu
Subscribe to Planet Ubuntu feed
Planet Ubuntu -
Updated: 54 min 43 sec ago

Ronnie Tucker: Peppermint OS 5: Light, Refreshing Linux

Tue, 2014-08-12 08:00

The Peppermint OS is built around a concept that may be unique among desktop environments. It is a hybrid of traditional Linux desktop applications and cloud-based apps.

Using the Ice technology in the Peppermint OS is much like launching an app on an Android phone or tablet. For example, I can launch Google Docs, Gmail, Twitter, Yahoo Mail, YouTube, Pandora or Facebook as if they were self-contained apps on a mobile device — but these pseudo apps never need updating. Ice easily creates a menu entry to launch any website or application as if it were installed.

This innovative approach puts the latest release of Peppermint OS 5, which appeared in late June, well ahead of the computing curve. It brings cloud apps to the Linux desktop with the ease and flexibility of a Chromebook. It marries that concept to the traditional idea of having installed software that runs without cloud interaction.


Submitted by: Jack M. Germain

The Fridge: Ubuntu Weekly Newsletter Issue 378

Tue, 2014-08-12 01:51

Welcome to the Ubuntu Weekly Newsletter. This is issue #378 for the week August 4 – 10, 2014, and the full version is available here.

In this issue we cover:

The issue of The Ubuntu Weekly Newsletter is brought to you by:

  • Elizabeth K. Joseph
  • Jose Antonio Rey
  • And many others

If you have a story idea for the Weekly Newsletter, join the Ubuntu News Team mailing list and submit it. Ideas can also be added to the wiki!

Except where otherwise noted, content in this issue is licensed under a Creative Commons Attribution 3.0 License BY SA Creative Commons License

Adam Stokes: Containerize juju’s local provider

Mon, 2014-08-11 23:05
Current approach

Juju’s existing providers(except manual) do not allow you to containerize the bootstrap node. However, in the manual provider this is possible using something like this in your environments.yaml file and setting the boostrap-host appropriately:

## manual: type: manual # bootstrap-host holds the host name of the machine where the # bootstrap machine agent will be bootstrap-host: # bootstrap-user specifies the user to authenticate as when # connecting to the bootstrap machine. If defaults to # the current user. # bootstrap-user: joebloggs # storage-listen-ip specifies the IP address that the # bootstrap machine's Juju storage server will listen # on. By default, storage will be served on all # network interfaces. # storage-listen-ip: # storage-port specifes the TCP port that the # bootstrap machine's Juju storage server will listen # on. It defaults to 8040 # storage-port: 8040

Cool, that will allow me to bootstrap juju on something other than my host machine. But, that machine needs to be configured appropriately for a non-interactive deployment (setting ssh keys, passwordless sudo, etc).

A different approach

In my particular case we wanted our Openstack Installer to be fully containerized from juju bootstrap to deploying of compute nodes. In order to achieve this we need to configure an existing container to be our bootstrap agent and still allow for our mixture of kvm/lxc environments for use within the Openstack deployment.


Create a container named joojoo that will be used as our Juju bootstrap agent:

ubuntu@fluffy:~$ sudo lxc-create -t ubuntu -n joojoo

Update the container’s lxcbr0 to be on its own network:

ubuntu@fluffy:~$ cat <<-EOF | sudo tee /var/lib/lxc/joojoo/rootfs/etc/default/lxc-net USE_LXC_BRIDGE="true" LXC_BRIDGE="lxcbr0" LXC_ADDR="" LXC_NETMASK="" LXC_NETWORK="" LXC_DHCP_RANGE="," LXC_DHCP_MAX="253" EOF

Create the necessary character files for kvm support within lxc via mknod, also persist them through reboots.

ubuntu@fluffy:~$ cat <<-EOF | sudo tee /var/lib/lxc/joojoo/rootfs/etc/rc.local #!/bin/sh mkdir -p /dev/net || true mknod /dev/kvm c 10 232 mknod /dev/net/tun c 10 200 exit 0 EOF

Start the container

ubuntu@fluffy:~$ sudo lxc-start -n joojoo -d

Pre-install libvirt and uvtools

ubuntu@fluffy:~$ sudo lxc-attach -n joojoo -- apt-get update ubuntu@fluffy:~$ sudo lxc-attach -n joojoo -- apt-get install -qyf \ libvirt-bin uvtool uvtool-libvirt software-properties-common

Make sure our ubuntu user has the correct libvirtd group associated

ubuntu@fluffy:~$ sudo lxc-attach -n joojoo -- usermod -a -G libvirtd ubuntu Now that you have a containerized environment ready for Juju, lets test!

The LXC container should now be ready for a juju deployment. Lets use our Openstack Cloud Installer to test this setup. I want to make sure everything deploys into its appropriate containers/kvm instances and that I can still access the Horizon dashboard to deploy a compute instance.

First, ssh into your container, you can get the IP with the lxc-ls -f command:

ubuntu@fluffy:~$ sudo lxc-ls -f joojoo NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------- joojoo RUNNING - NO ubuntu@fluffy:~$ ssh ubuntu@

Within the container add our PPA and perform the installation:

ubuntu@joojoo:~$ sudo apt-add-repository ppa:cloud-installer/experimental ubuntu@joojoo:~$ sudo apt-add-repository ppa:juju/stable ubuntu@joojoo:~$ sudo apt update && sudo apt install cloud-installer ubuntu@joojoo:~$ sudo cloud-install

Note I’m using our experimental PPA for Openstack Cloud Installer which will be our next major release and will automate the previous steps for putting juju within a container.

This test I’m using the Single Install method, so select that and enter a Openstack password of your choice. Now sit back and wait for the installation to finish.


First we created a LXC container to be used as our entry point for juju to bootstrap itself too. This required some configuration changes to how the container will handle bridged connections along with making sure the character devices required by KVM are available.

Next we installed some pre-requisites for libvirt and uvtools.

From there we login to the newly created container, install, and run the Openstack Cloud Installer. This will install juju-core and lxc as dependencies along with automatically configuring lxc-net with our predefined lxc-net template, seen in the latest lxc-ls output (showing eth0, lxcbr0, and virbr0):

ubuntu@fluffy:~$ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------------------------------- joojoo RUNNING,, - NO

Once the installer is finished we verify that our LXC container was able to facilitate the deployment of services in both LXC (nested) and KVM (also nested within LXC).

It’s a long list so here is the pastebin. What you’ll notice is that all machines/services are now bound to the 10.0.4.x network which is what was defined in the lxc-net configuration above. We have KVM’s running within our host container which also houses containers for the Openstack deployment.

Just to give a more visual representation of the setup:

Baremetal Machine - LXC Container - Runs juju bootstrap agent - KVM (machine 1) - Houses a bunch of LXC's for the openstack services - KVM (machine 2) - Houses nova-compute - KVM (machine 3) - Houses quantum-gateway Why is this a good thing? ubuntu@fluffy:~$ sudo lxc-stop -n joojoo ubuntu@fluffy:~$ sudo lxc-destroy -n joojoo

And it’s like it never happened …


Thanks to a colleague, Robert Ayres, who provided the necessary information for getting KVM to run within an LXC container.

Costales: Destino Ubuconla 2014 - #0 Welcome on board!

Mon, 2014-08-11 18:17
Comienza uno de mis viajes más esperados... Next station: ¡Colombia! Además, con el honor de haber sido invitado por la Ubuconla para impartir un par de conferencias:
14 Agosto - 14:00: Cómo mantener un ordenador seguro15 Agosto - 9:00: Crear y distribuir webapps en UbuntuPor supuesto, servirá de excusa para conocer a personas tan interesantes como Sergio Meneses o José Luís Ahumada y disfrutaré con el incombustible Fernando Lanero a quien embauqué en esta aventura.

Destino: Ubuconla '14
Y tras meses esperando a que llegue la fecha, a falta de pocos días nos sorprende la huelga de pilotos de la aerolínea TAP, afectando sólo al día de nuestro vuelo :S

Ups! :SReprogramando la salida con TAP y un enlace con LAN, no nos queda otra que cancelar los billetes del ALSA y otro enlace de Avianca. Y tras largas gestiones y unos cuantos euros tirados a la basura, todo queda solucionado. En fin, pequeños gajes de viajar.

El resumen perfecto del viaje de ida es:

Asturies ➠ Bilbao ✈ Lisboa ✈ São Paulo ✈ Bogotá ✈ Cartagena de Indias
42 Horas contínuas de bus + aeropuertos + aviones
Literalmente derrengaos
Y con sensación de Willy Fog...:PY un par de vuelos con las aerolíneas TAP y Avianca sirvieron para demostrar que Linux (una vez más) está en más sitios de los que pensamos ;)

Por fin en tierras colombianas, ¡Comienza la aventura! :D Pero eso será ya parte de otros posts.

Continúa leyendo más posts de este viaje.

Ubuntu Women: 2014 Leadership Poll Results

Mon, 2014-08-11 17:11

Polling has closed, and we are pleased to announce that the new leadership team for Ubuntu Women has been selected.

A. Mani, Svetlana Belkin, and Emma Marshall will be the leadership committee for the next two years!

Please join me in congratulating them and supporting them as we transition into this new term for the Ubuntu Women team!

Harald Sitter: Volume

Mon, 2014-08-11 14:27

Volume controls. Based on PulseAudio. For Plasma 5.

Built in Randa.

Ubuntu Scientists: Who We Are: Willem Ligtenberg,A Member

Mon, 2014-08-11 14:17

I am Willem Ligtenberg.
I have studied Biomedical Engineering and later specialized myself in bioinformatics, which is also
known as computational biology. More specifically, I specialized myself in biomodeling and bioinformatics.
During my PhD thesis I investigated the use of graph theoretic approaches in biology.
I used graph algorithms in combination with machine learning algorithms to reverse engineer gene regulatory networks. If you are interested you can have a
read here:

During this I used a lot of Python and a bit of R for the statistics. I also took a course on
biostatistics for PhD students and although the course was given using Statgraphics, I did using R.
Which the tutors thought was fine, but it was not their expertise. However, they did give me the
e-mail address of a collegue of theirs who used R as well.

Fast-forward a couple of years, and currently I am working as a consultant for Open Analytics
(, which is a company that helps with the data analysis from start to finish. As the name suggests
the company believes in openness and therefore focusses on the use of (fibre/libre) open source software (FLOSS).
The FLOSS aspect of the company was a big plus for me, since I have been using Ubuntu since Warty (2004).
For the data analysis part we mainly use R, but we will use other languages if they are more
appropriate. So I still get to use Python now and then.

I have written and contributed to a few R packages that are on Bioconductor: (reactome.db,
the a4 packages and MLP). I am currenty working on an Object Relational Mapper in R, which
I hope to publish soon. Feel free to reach out to me if you want to know more about data analysis
using open source software, specifically bioinformatics and databases.


Willem Ligtenberg

Filed under: Who We Are

Valorie Zimmerman: Randa Meetings sprint: KDE Frameworks Cookbook progress

Mon, 2014-08-11 14:06
We groaned and suffered with the up-and-down network, and had to abandon our plan to write and edit the book on Booki at Flossmanuals. So we began to create text files on Kate or Kwrite, but how to share our work?

The best answer seemed to be a git repository, and our success began there. Once created, we consulted again and again with the Frameworks developers in the room across the hall, and brainstormed and wrote, and even created new tools (Mirko). Our repo is here: kde:scratch/garg/book. If you want to see the live code examples, you will need this tool: .

I'm so happy with what we have so far! The texts are just great, and the code examples will be updated as they are updated in their repositories. So if people planning a booth at a Qt Contributor Conference, for instance, wanted to print up some copies of the book, it will be completely up-to-date. Our goal is committing every part of the book so that it can be auto-fetched for reading as an epub, pdf, text file or printed as a book.

It is a tremendous help to be in the same place. Thank you KDE community for sending me here, all the way from Seattle. Thank you for bringing all the other developers here as well. We are eating well, meeting, coding, writing, walking, drinking coffee and even some Free Beer, and sometimes sleeping too. Mario brings around a huge box of chocolate every night. We're all going to arrive home somewhat tired from working so hard, and somewhat fat from eating so well!

Paul Tagliamonte: DebConf 14

Mon, 2014-08-11 01:06

I’ll be giving a short talk on Debian and Docker!

I’ll prepare some slides to give a brief talk about Debian and Docker, then open it up to have a normal session to talk over what Docker is and isn’t, and how we can use it in Debian better.

Hope to see y’all in Portland!

Stuart Langridge: Reverse SSH tunnels

Sun, 2014-08-10 22:49

My dad’s got a computer. Infrequently, it goes wrong and I need to fix it. Slightly more frequently, it doesn’t go wrong but it does something which is confusing, and I need to try to fix it until I realise what the confusing thing was and then either fix that or explain it. So, being able to connect to his machine is useful.

His ADSL router, from TalkTalk1, allows one to set up a port forward2 so that I can connect to his external IP and have that routed to port 22 on his machine, thus allowing me SSH access, and with SSH I can do everything else3. However, that router also controls the DHCP addresses for things on the network, and it does not always give the same address out to the same machine. So, every now and again, it’ll give his machine a different IP, and then the port forward stops working.4

So, after mithering about this a bit, Daviey Walker suggested5 that I use a reverse SSH tunnel. That is to say: I have his machine ssh into one of mine, and then port forward a port on my machine back along the SSH tunnel to port 22 on his machine, meaning that I can ssh into it and don’t have to care about IPs or anything.

This was a dead clever idea. It relies on me having a machine which is sshable from the outside world, but I do, so that’s OK.

Obviously, something needs to set the tunnel up. So, first I set things up so that his machine could ssh into mine with key authentication and without a password needed (see ssh-copy-id or a guide for that), and then I wrote this little script:

#!/bin/bash createTunnel() { date ssh -N -o BatchMode=yes -R 9102:localhost:22 mylogin@mysshablemachine if [[ $? -eq 0 ]]; then echo Tunnel created successfully else echo An error occurred creating a tunnel. RC was $? fi } /bin/pidof ssh > /dev/null if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnel fi

which creates this ssh tunnel connection. There’s a hack there: it assumes that if there’s an ssh process, it’s our ssh process. If you regularly ssh from the box you’re doing this on, you’ll want to do something cleverer. In this case I don’t, so I keep it easy. Couple of little tricks in the script: there’s a date command, so the output mentions when this happened, which is useful for the log file in the next bit (and this is also why the script generates no output if the tunnel is already up). Secondly, -o BatchMode=yes in the ssh options means that it’ll instantly fail if you haven’t got key auth set up right, rather than hanging forever waiting for a password, and it’ll send server keepalives every 300 seconds and kill the connection if they break, which means that if the connection hangs but doesn’t terminate, it’ll get terminated. This is what we want, because we want some monitoring process to restart the tunnel if it dies. There are all sorts of clever ways to do this: upstart, systemd, whatever6, but I just put this line in the crontab7:

*/1 * * * * /path/to/above/ >> /path/to/tunnel.log 2>&1

which just reruns the above script every minute and sticks any output into a logfile so if it’s not working I can, at a push, ask dad to read the logfile. Inefficient and low-budget, but it works. So once all this is set up, I can, from my sshable machine, do ssh -p 9012 dadlogin@localhost and I then get to log in to his machine. Then I can fix it. And never deal with his horrid router’s horrid web UI ever again.

  1. a Huawei HG533 with the most annoying web config UI I’ve ever seen ever, which gets even more annoying if you try and control it from curl because it’s all JavaScript-dependent. Why? You are a router, not gmail! Grrrr!
  2. hooray
  3. hooray
  4. Also, I really really don’t like static IPs, so I don’t want to configure it with one.
  5. that is, I was mithering about it. Not Daviey.
  6. not /etc/init.d though. This is a user-level process. It should not be being run by system-level stuff. System level belongs to apt.
  7. a file which defines jobs to be run at specific times; it’s like a super-techie Scheduled Tasks wizard, and it usefully will run things even when you’re not logged in. You can edit yours from the command line with crontab -e.

Diego Turcios: How I miss you Synaptic!

Sun, 2014-08-10 01:03
Several years  have passed since we saw the Synaptic included in Ubuntu. You can found reasons here .
So in a clear english the reason was to have a better add/remove program for users. A friendly application. The explanation sounds good, I didn't complain about that, until right now. Ubuntu has change a lot, it's really a friendly user OS.

I have use CLI when necessary, but today I couldn't believe it.
I'm a Google Chrome user, I know you will tell me it's not open source or I should use Chromium or FF. But no. I'm a user of Google Chrome, and many people also prefer Chrome over Chromium, so why it should be quite complex remove it? If Ubuntu wants to be more friendly user why you should use the terminal for removing one of the most popular web browsers? I could understand if is a browser few people use, a good reason. But not a popular browser, Chrome is one of the most popular browsers on the world!

A screen shot of the Ubuntu Software Center, trying to remove Google Chrome.
No results, not even a message telling no results found. This is not a friendly user application!

So, I decided to check Synaptic to see if it was possible to remove Google Chrome yes it's so simple.

So please tell me, I'm wrong or I'm right. What's your opinion?

Daniel Pocock: Help needed reviewing Ganglia GSoC changes

Fri, 2014-08-08 20:14

The Ganglia project has been delighted to have Google's support for 5 students in Google Summer of Code 2014. The program officially finishes in ten more days, on 18 August.

If you are a user of Ganglia, Nagios, RRDtool or R or just an enthusiastic C or Python developer, you may be able to use and provide feedback for the students while benefitting from the cool new features they have been working on.

Student Technology Comments Chandrika Parimoo Python, Nagios and some Syslog Chandrika generalized some of my ganglia-nagios-bridge code into the PyNag library. I then used it as the basis for syslog-nagios-bridge. Chandrika has also done some work on improving the ganglia-nagios-bridge configuration file format. Oliver Hamm C Oliver has been working on metrics about Ganglia infrastructure. If you have a large and dynamic Ganglia cloud, this is for you. Plamen Dimitrov R, RRDtool Plamen has been building an R plugin for inspecting RRD files from Ganglia or any other type of RRD. Rana NVIDIA, C Rana has been working on improvements to Ganglia monitoring of NVIDIA GPUs, especially in HPC clusters Zhi An Java, JMX Zhi An has been extending the JMXetric and gmetric4j projects to provide more convenient monitoring of Java server processes.

If you have any feedback or questions, please feel free to discuss on the Ganglia-general mailing list and CC the student and their mentor.

Canonical Design Team: Ubuntu 14.10 wallpapers – we needs ‘em!

Fri, 2014-08-08 09:12

Verónica Sousa’s Cul de sac

Ubuntu was once described to me by a wise(ish ;) ) man as a train that was leaving whether you’re on it or not. That’s the beauty of a 6 month release cycle. As many of you will already know, each release we include photos and illustrations produced by community members. We ask that you submit your images using free photo sharing site Flickr and that you limit your images this time to 2. The group won’t let you submit more than that but if you change your mind after you’ve submitted, fear not, simply remove one and it’ll let you add another.

As with previous submissions processes we’ve run, and in conjunction with the designers at Canonical we’ve come up with the following tips for creating wallpaper images.

  1. Images shouldn’t be too busy and filled with too many shapes and colours, a similar tone throughout is a good rule of thumb.
  2. A single point of focus, a single area that draws the eye into the image, can also help you avoid something too cluttered.
  3. The left and top edges are home to Ubuntu’s Launcher and Panel so be careful to consider how your images look in place so as not to clash with the user interface. Try them out on your own desktop, see how they feel.
  4. Try your image at different aspect ratios to make sure something important isn’t cropped out on smaller/ larger screens at different resolutions.
  5. Take a look at the wallpapers guidance on the Ubuntu Wiki regarding the size of images. Our target resolution is 2560 x 1600.
  6. Break all the rules except the resolution one! :D

To shortlist from this collection we’ll be going to the contributors whose images were selected last time around to act as our selection judges. In doing this we’ll hold a series of public IRC meetings on Freenode in #1410wallpaper to discuss the selection. In those sessions we’ll get the selection team to try out the images on their own Ubuntu machines to see what they look like on a range of displays and resolutions.

Anyone is welcome to come to these sessions but please keep in mind that an outcome is needed from the time that people are volunteering and there’s usually a lot of images to get through so we’d appreciate it if there isn’t too much additional debate.

Based on the Utopic release schedule, I think our schedule for this cycle should look like this:

  • 08/08/14 – Kick off 14.10 wallpaper submission process.
  • 22/08/14 – First get together on #1410wallpaper at 19:30 GMT.
  • 29/08/14 – Submissions deadline at 18:00 GMT – Flickr group will be locked and the selection process will begin.
  • 09/09/14 – Deliver final selection in zip format to the appropriate bug on Launchpad.
  • 11/09/14 – UI freeze for latest version of Ubuntu with our fantastic images in it!

As always, ping me if you have any questions, I’ll be lurking in #1410wallpaper on freenode or leave a question in the Flickr group for wider discussion, that’s probably the fastest way to get an answer to a question.

I’ll be posting updates on our schedule here from time to time but the Flickr group will serve as our hub.

Happy snapping and scribbling and on behalf of the community, thanks for contributing to Ubuntu! 

The Fridge: Ubuntu 12.04.5 LTS released

Fri, 2014-08-08 01:05

The Ubuntu team is pleased to announce the release of Ubuntu 12.04.5 LTS (Long-Term Support) for its Desktop, Server, Cloud, and Core products, as well as other flavours of Ubuntu with long-term support.

As with 12.04.4, 12.04.5 contains an updated kernel and X stack for new installations on x86 architectures.

As usual, this point release includes many updates, and updated installation media has been provided so that fewer updates will need to be downloaded after installation. These include security updates and corrections for other high-impact bugs, with a focus on maintaining stability and compatibility with Ubuntu 12.04 LTS.

Kubuntu 12.04.5 LTS, Edubuntu 12.04.5 LTS, and Ubuntu Studio 12.04.5 LTS are also now available. For some of these, more details can be found in their announcements:



Ubuntu Studio:

To get Ubuntu 12.04.5

In order to download Ubuntu 12.04.5, visit:

It may take a little while before the 12.04.5 images show up at the link above, if they aren’t there yet, you can also download them directly from the URL below or from a nearby mirror:

Users of Ubuntu 10.04 will be offered an automatic upgrade to 12.04.5 via Update Manager. For further information about upgrading, see:

As always, upgrades to the latest version of Ubuntu are entirely free of charge.

We recommend that all users read the 12.04.5 release notes, which document caveats and workarounds for known issues, as well as more in-depth notes on the release itself. They are available at:

If you have a question, or if you think you may have found a bug but aren’t sure, you can try asking in any of the following places:

#ubuntu on

Help Shape Ubuntu

If you would like to help shape Ubuntu, take a look at the list of ways you can participate at:

About Ubuntu

Ubuntu is a full-featured Linux distribution for desktops, laptops, clouds and servers, with a fast and easy installation and regular releases. A tightly-integrated selection of excellent applications is included, and an incredible variety of add-on software is just a few clicks away.

Professional services including support are available from Canonical and hundreds of other companies around the world. For more information about support, visit:

More Information

You can learn more about Ubuntu and about this release on our website listed below:

To sign up for future Ubuntu announcements, please subscribe to Ubuntu’s very low volume announcement list at:

Originally posted to the ubuntu-announce mailing list on Fri Aug 8 00:06:15 UTC 2014 by Stéphane Graber

Kubuntu: Kubuntu Precise LTS Release 12.04.5

Fri, 2014-08-08 00:58
Our current LTS release has had an update, 12.04.5. It adds all the current bugfixes and security updates to keep your LTS systems fresh. Download now.

Edubuntu: Edubuntu 12.04.5 Release Announcement

Thu, 2014-08-07 22:25
Edubuntu Long-Term Support Edubuntu 12.04.5 LTS is the fifth Long Term Support (LTS) version of Edubuntu as part of Edubuntu 12.04's 5 years support cycle. Edubuntu's Fifth LTS Point Release The Edubuntu team is proud to announce the release of Edubuntu 12.04.5. This is the last of five LTS point releases for this LTS lifecycle. The point release includes all the bug fixes and improvements that have been applied to Edubuntu 12.04 LTS since it has been released. It also includes updated hardware support and installer fixes. If you have an Edubuntu 12.04 LTS system and have applied all the available updates, then your system will already be on 12.04.5 LTS and there is no need to re-install. For new installations, installing from the updated media is recommended since it will be installable on more systems than before and will require drastically less updates than installing from the original 12.04 LTS media. This release ships with a backported kernel and X stack. This enables users to make use of more recently released hardware. Current users of Edubuntu 12.04 won't be automatically updated to this back-ported stack, you can however manually install the packages as well.
  • Information on where to download the Edubuntu 12.04.5 LTS media is available from the Downloads page.
  • We do not ship free Edubuntu discs at this time, however, there are 3rd party distributors available who ship discs at reasonable prices listed on the Edubuntu Martketplace
Although Edubuntu 10.04 systems will ask for upgrade to 12.04.5, it's not an officially supported upgrade path. Testing however indicated that this usually works if you're ready to make some minor adjustments afterwards. To ensure that the Edubuntu 12.04 LTS series will continue to work on the latest hardware as well as keeping quality high right out of the box, we will release another point release before the next long term support release is made available in 2014. More information is available on the release schedule page on the Ubuntu wiki. The release notes are available from the Ubuntu Wiki. Thanks for your support and interest in Edubuntu!

Ubuntu Podcast from the UK LoCo: S07E19 – The One Where No One’s Ready

Thu, 2014-08-07 22:15

Tony Whitmore, Laura Cowen, Alan Pope, and Mark Johnson are all together in Studio L for Season Seven, Episode Seventeen of the Ubuntu Podcast!

 Download OGG  Download MP3 Play in Popup

In this week’s show:-

We’ll be back next week, when we’ll be discussing whether it is the Year of the Linux Desktop (via the Chromebook), and we’ll go through your feedback.

Please send your comments and suggestions to:
Join us on IRC in #uupc on Freenode
Leave a voicemail via phone: +44 (0) 203 298 1600, sip: and skype: ubuntuukpodcast
Follow us on Twitter
Find our Facebook Fan Page
Follow us on Google+

Julian Andres Klode: Configuring an OpenWRT Router as a repeater for a FRITZ!Box with working Multicast

Wed, 2014-08-06 23:01

Since some time, those crappy Fritz!Box devices do not support WDS anymore, but rather a proprietary solution created by AVM. Now what happens if you have devices in another room that need/want wired access (like TVs, Playstations) or if you want to extend the range of your network? Buying another Fritz!Box is not very cost efficient – What I did was to buy a cheap TP-Link TL-WR841N (can be bought for 18 euros) and installed OpenWRT on it. Here’s how I configured it to act as a WiFi bridge.

Basic overview: You configure OpenWRT into station mode (that is, as a WiFi client) and use relayd to relay between the WiFi network and your local network. You also need igmpproxy to proxy multicast packages between those networks, other UPnP stuff won’t work.

I did this on the recent Barrier Braker RC2. It should work on older versions as well, but I cannot promise it (I did not get igmpproxy to work in Attitude Adjustment, but that was probably my fault).

Note: I don’t know if it works with IPv6, I only use IPv4.

You might want to re-start (or start) services after the steps, or reboot the router afterwards.

Configuring WiFi connection to the FRITZ!Box

Add to: /etc/config/network

config interface 'wwan' option proto 'dhcp'

(you can use any other name you want instead of wwan, and a static IP. This will be your uplink to the Fritz!Box)

Replace wifi-iface in: /etc/config/wireless:

config wifi-iface option device 'radio0' option mode 'sta' option ssid 'FRITZ!Box 7270' option encryption 'psk2' option key 'PASSWORD' option network 'wwan'

(adjust values as needed for your network)

Setting up the pseudo-bridge

First, add wwan to the list of networks in the lan zone in the firewall. Then add a forward rule for the lan network (not sure if needed). Afterwards, configure a new stabridge network and disable the built-in DHCP server.

Diff for /etc/config/firewall

@@ -10,2 +10,3 @@ config zone list network 'lan' + list network 'wwan' option input 'ACCEPT' @@ -28,2 +29,7 @@ config forwarding +# Not sure if actually needed +config forwarding + option src 'lan' + option dest 'lan' + config rule

Add to /etc/config/network

config interface 'stabridge' option proto 'relay' option network 'lan wwan' option ipaddr ''

(Replace with the IP address your OpenWRT router was given by the Fritz!Box on wlan0)

Also make sure to ignore dhcp on the lan interface, as the DHCP server of the FRITZ!Box will be used:

Diff for /etc/config/dhcp

@@ -24,2 +24,3 @@ config dhcp 'lan' option ra 'server' + option ignore '1'

Proxying multicast packages

For proxying multicast packages, we need to install igmpproxy and configure it:

Add to: /etc/config/firewall

# Configuration for igmpproxy config rule option src lan option proto igmp option target ACCEPT config rule option src lan option proto udp option dest lan option target ACCEPT

(OpenWRT wiki gives a different 2nd rule now, but this is the one I currently use)

Replace /etc/config/igmpproxy with:

config igmpproxy option quickleave 1 config phyint option network wwan option direction upstream list altnet config phyint option network lan option direction downstream list altnet

(Assuming Fritz!Box uses the network)

Don’t forget to enable the igmpproxy script:

# /etc/init.d/igmpproxy enable

Optional: Repeat the WiFi signal

If you want to repeat your WiFi signal, all you need to do is add a second wifi-iface to your /etc/config/wireless.

config wifi-iface option device 'radio0' option mode 'ap' option network 'lan' option encryption 'psk2+tkip+ccmp' option key 'PASSWORD' option ssid 'YourForwardingSSID'

Known Issues

If I was connected via WiFi to the OpenWRT AP and switch to the FRITZ!Box AP, I cannot connect to the OpenWRT router for some time.

The igmpproxy tool writes to the log about changing routes.

Future Work

I’ll try to get the FRITZ!Box replaced by something that runs OpenWRT as well, and then use OpenWRT’s WDS support for repeating; because the FRITZ!Box 7270v2 is largely crap – loading a page in its web frontend takes 5 (idle) – 20 seconds (1 download), and it’s WiFi speed is limited to about 20 Mbit/s in WiFi-n mode (2.4 GHz (or 5 GHz, does not matter), 40 MHz channel). It seems the 7270 has a really slow CPU.

Filed under: OpenWRT

Stephan Adig: Python and JavaScript?

Wed, 2014-08-06 20:38

Is it possible to combine the worlds amazing prototyping language (aka Python) with JavaScript?

Yes, it is. Welcome to PyV8!


So, first we some libraries and modules:

  1. Boost with Python Support

    • On Ubuntu/Debian you just do apt-get install libboost-python-dev, for Fedora/RHEL use your package manager.
    • On MAC OSX:
      • When you are on Homebrew do this:

        brew install boost --with python

  2. PyV8 Module

    (You need Subversion installed for this)

    mkdir pyv8 cd pyv8 svn co cd trunk

    When you are on Mac OS X you need to add this first:

    export CXXFLAGS='-std=c++11 -stdlib=libc++ -mmacosx-version-min=10.8' export LDFLAGS=-lc++

    Now just do this:

    python ./ install

    And wait !

    (Some words of advise: When you are installing boost from your OS, make sure you are using the python version which boost was compiled with)

  3. Luck ;)

    Means, if this doesn’t work, you have to ask Google.

Now, how does it work?

Easy, easy, my friend.

The question is, why should we use JavaScript inside a Python tool?

Well, while doing some crazy stuff with our ElasticSearch cluster, I wrote a small python script to do some nifty parsing and correlation. After not even 30 mins I had a commandline tool, which read in a YAML file, with ES Queries written in YAML Format, and an automated way to query more than one ES cluster.

So, let’s say you have a YAML like this:

Example YAML Query File lineos:true 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 title: name: &ldquo;Example YAML Query File&rdquo; esq: hosts:</p> <pre><code>es_cluster_1: fqdn: "localhost" port: 9200 es_cluster_2: fqdn: "localhost" port: 10200 es_cluster3: fqdn: "localhost" port: 11200_ </code></pre> <p>indices: &ndash; index:</p> <pre><code> id: "all" name: "_all" all: true </code></pre> <ul> <li>index: id: &ldquo;events_for_three_days&rdquo; name: &ldquo;[events-]YYYY-MM-DD&rdquo; type: &ldquo;failover&rdquo; days_from_today: 3</li> <li>index: id: &ldquo;events_from_to&rdquo; name: &ldquo;[events-]YYYY-MM-DD&rdquo; type: &ldquo;failover&rdquo; interval: from: &ldquo;2014-08-01&rdquo; to: &ldquo;2014-08-04&rdquo; query: on_index: all: filtered: filter: term: code: &ldquo;INFO&rdquo; events_for_three_days_: filtered: filter: term: code: &ldquo;ERROR&rdquo; events_from_to: filtered: filter: term: code: &ldquo;DEBUG&rdquo;

No, this is not really what we are doing :) But I think you get the idea.

Now, in this example, we have 3 different ElasticSearch Clusters to search in, and all three have different data, but all are sharing the same Event format. So, my idea was to generate reports of the requested data, but eventually for a single ES Cluster, or correlated over all three. I wanted to have the functionality inside the YAML file, so everybody who is writing such a YAML file can also add some processing code. Well, the result set of an ES search query is a JSON blob, and thanks to it will be converted to a Python dictionary.

Huu…so, why don’t you use python code inside YAML and eval it inside your Python Script?

Well, when you ever wrote Front/Backend Web Apps, you know it’s pretty difficult to write Frontend Python Scripts which are running inside your browser. So, JavaScript here for the rescue. And everybody knows how easy it is, to deal with JSON object structures inside JavaScript. So, why don’t we use this knowledge and invite users who are not familiar with Python, to participate?

Now, think about an idea like this:

Example YAML Query File lineos:true 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 title: name: &ldquo;Example YAML Query File&rdquo; esq: hosts:</p> <pre><code>es_cluster_1: fqdn: "localhost" port: 9200 es_cluster_2: fqdn: "localhost" port: 10200 es_cluster3: fqdn: "localhost" port: 11200_ </code></pre> <p>indices: &ndash; index:</p> <pre><code> id: "all" name: "_all" all: true </code></pre> <ul> <li>index: id: &ldquo;events_for_three_days&rdquo; name: &ldquo;[events-]YYYY-MM-DD&rdquo; type: &ldquo;failover&rdquo; days_from_today: 3</li> <li>index: id: &ldquo;events_from_to&rdquo; name: &ldquo;[events-]YYYY-MM-DD&rdquo; type: &ldquo;failover&rdquo; interval: from: &ldquo;2014-08-01&rdquo; to: &ldquo;2014-08-04&rdquo; query: on_index: all: filtered: filter: term: code: &ldquo;INFO&rdquo; events_for_three_days_: filtered: filter: term: code: &ldquo;ERROR&rdquo; events_from_to: filtered: filter: term: code: &ldquo;DEBUG&rdquo; processing: for: report1: | function find_in_collection(collection, search_entry) { for (entry in collection) { if (search_entry[entry][&lsquo;msg&rsquo;] == collection[entry][&lsquo;msg&rsquo;]) { return collection[entry]; } } return null; } function correlate_cluster_1_and_cluster_2(collections) { collection_cluster_1 = collections[&ldquo;cluster_1&rdquo;][&ldquo;hits&rdquo;][&ldquo;hits&rdquo;]; collection_cluster_2 = collections[&ldquo;cluster_2&rdquo;][&ldquo;hits&rdquo;][&ldquo;hits&rdquo;]; similar_entries = []; for (entry in collection_cluster_1) { similar_entry = null; similar_entry = find_in_collection(collection_cluster_2, collection_cluster_1[entry]); if (similar_entry != null) { similar_entries.push(similar_entry); } } result = {&lsquo;similar_entries&rsquo;: similar_entries}; return(result) } var result = correlate_cluster_1_and_cluster_2(collections); // this will return the data to the python method result result output: reports; report1: |

(This is not my actual code, I just scribbled it down, so don’t lynch me if this fails)

So, actually, I am passing a python dict with all the query resulsets from the ES clusters (defined at the top of the YAML file) towards a PyV8 Context Object, can access those collections inside my JavaScript and return a JavaScript HASH / Object. In the end, after JavaScript Processing, there could be a Jinja Template inside the YAML file, and we can pass the JavaScript results into this template, for printing a nice report. There are many things you can do with this.

So, let’s see it in python code:

Example Python Code (shorted) lineos: true 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 </p> <h1>&ndash;<em>&ndash; coding: utf-8 &ndash;</em>&ndash;</h1> <h1>This will be a short form of this,</h1> <h1>so don&rsquo;t expect that this code will do the reading and validation</h1> <h1>of the YAML file</h1> <p>from elasticsearch import Elasticsearch import PyV8 from jinja2 import Template</p> <p>class JSCollections(PyV8.JSClass):</p> <pre><code>def __init__(self, *args, **kwargs): super(JSCollections, self).__init__() self.collections = {} if 'collections' in kwargs: self.collections=kwargs['collections'] def write(self, val): print(val) </code></pre> <p>if <strong>name</strong> == &lsquo;<strong>main</strong>&rsquo;:</p> <pre><code>es_cluster_1 = Elasticsearch({"host":"localhost", port: 9200}) es_cluster_2 = Elasticsearch({"host":"localhost", port: 10200}) collections = {} collections['cluster_1] ="_all", body={"query": { "filtered": {"filter": {"term": {"code": "DEBUG"}}}}}, size=100) collections['cluster_2] ="_all", body={"query": { "filtered": {"filter": {"term": {"code": "DEBUG"}}}}}, size=100) js_ctx = PyV8.JSContext(JSCollection(collections=collections)) js_ctx.enter() # # here comes the javascript code # process_result = js_ctx.eval(""" function find_in_collection(collection, search_entry) { for (entry in collection) { if (search_entry[entry]['msg'] == collection[entry]['msg']) { return collection[entry]; } } return null; } function correlate_cluster_1_and_cluster_2(collections) { collection_cluster_1 = collections["cluster_1"]["hits"]["hits"]; collection_cluster_2 = collections["cluster_2"]["hits"]["hits"]; similar_entries = []; for (entry in collection_cluster_1) { similar_entry = null; similar_entry = find_in_collection(collection_cluster_2, collection_cluster_1[entry]); if (similar_entry != null) { similar_entries.push(similar_entry); } } result = {'similar_entries': similar_entries}; return(result) } var result = correlate_cluster_1_and_cluster_2(collections); // this will return the data to the python method result result """) # back to python print("RAW Process Result".format(process_result)) # create a jinja2 template and print it with the results from javascript processing template = Template(""" """) print(template.render(process_result)) </code></pre> <p>

Again, just wrote it down, not the actual code, so dunno if it really works.

But still, this is pretty simple.

You can even use JavaScript Events, or JS debuggers, or create your own Server Side Browsers. You can find those examples in the demos directory of the PyV8 Source Tree.

So, this was all a 30 mins Prove of Concept, and last night I refactored the code and this morning, I thought, well, let’s write a real library for this. So, eventually there is some code on github over the weekend. I’ll let you know.

Oh, before I forget, the idea of writing all this in a YAML file came from work with Junipers JunOS PyEZ Library, which has a similar way. But they are using the YAML file as description for autogenerated Python Classes. Very Nifty.

Costales: Jugando con MAME: Recreativas en Ubuntu

Wed, 2014-08-06 15:30
En mi infancia tener un ordenador en el hogar era un auténtico privilegio. Sólo el padre de un amigo de la pandilla de la calle tenía un sobremesa con pantalla verde fluorescente, sin disco duro, suplido por 2 disqueteras de 5 1/4 y creo recordar que con un procesador 8086.

Yo tiraba millas con mi Spectrum. Un ordenador que compré con la mayor ilusión del mundo y avergüenza confesar que sólo me sirvió para jugar a juegos que costaban unas 1.200 ptas y que poco tenían que ver con la recreativa. También por supuesto, para probar la montonera de demos que incluía la revista Micromanía en cómodas casettes.

Explicado esto, podréis comprender cómo me impresionaban las arcade de las salas de máquinas.

Tron plasmó la esencia de una sala de máquinasGráficos extraordinarios para aquella época, un montón de colores, animaciones, un joystick y botones magníficos (tengo pendiente comprar uno así para el PC, o al menos comprarme un miniarcade), sonidos que incluso sintetizaban extraordinariamente la voz... pero... pero, no sólo era eso... Había algo más en aquellos videojuegos...

Apelotonadas en la penumbra, como nosotros alrededor del mejor jugador cuando llegaba al enemigo finalCon el paso de los años me dejaron de atraer los videojuegos. A pesar de que cada vez había mejor hardware y los juegos ya no tenían limitaciones técnicas, se convirtieron en... ¿Cómo decirlo? ¿Aburridos? Cada vez más obras de arte con intros que poco envidian a una película, historias largas, rebuscadas... pero les falta lo que encontré en los arcade: la adicción.
Puede que la dosificación de pagar las 25 ptas de cada partida provocara el mono de otra dosis al día siguiente, pero estos juegos permitían que ese mañana llegarás un poco (sólo un poco) más lejos en el juego. Cada día descubrías un enemigo final nuevo y tras llegar a él durante varias partidas, conseguías el 'truco' de dónde colocarte para matarlo...

Ahora tenemos los juegazos de Steam para Ubuntu, pero los que siguen atrayéndome son los antiguos arcade; aún recuerdo girando los volantes de Super Gran Prix a ritmo de acelerador, haciendo malabarismos con Metal Slug, estrellándome en OutRun, pateando a los gnomos en Golden Axe ávido de pócimas o pegando codazos a todo un M.A. en Double Dragon...

Y encima, estos juegos son gratis... sí, has oído bien, te descargas una ROM (que es el juego) y pista.

¿Quieres probar? Abre una terminal y copia y pega estos comandos:
sudo apt-get install mame -y
Cierra MAME.
cd ~/.mame && mame -cc
gedit ~/.mame/mame.ini
Graba el fichero y cierra el editor.
mkdir  ~/.mame/nvram memcard roms inp comments sta snap diff
nautilus ~/.mame/roms
Copia aquí en formato .zip las ROMs que bajes.
Y cuidado, la ROM tiene que estar hecha para la versión de MAME que tengas: Esto ocurre porque MAME, además de un emulador, pretende ser un proyecto histórico que documente las recreativas fielmente, y además de los juegos y clones nuevos que se añaden a cada versión hay muchos otros juegos que se cambian por versiones más "correctas", aunque ya antes funcionaran bien. Por esto, si un juego te dice que le falta ficheros, es que estás usando una versión distinta al de la MAME ;)

Una vez con las roms copiadas en el directorio ~/.mame/roms, ejecutamos de nuevo el emulador desde la terminal con:
Y escogemos el juego.

Y si os da pereza tener que buscar/instalar MAME y sus Roms, tenéis disponible distros como Advance que automatizan todo, incluso ya traen cientos de juegos. Arrancáis desde CD y a jugar :P
... bueno... os dejo, hora de otro cara a cara con Mr. Bison... después de tantos años... snif!

¿Comenzamos?Fuentes: UPUbuntu & Emulatronia.