Jonathan Riddell: Notes from Breakout sessions at Mataro Sessions II
Here's some notes from the breakout sessions we had yesterday for my own recolation.
KWin and Wayland on Kubuntu
- Differences between Wayland and Mir are minimal, only client vs server side buffering, so no benefit from it for a desktop distro
- dri3000 is a project to make X do client side buffering
- KWin won't support Mir, (unless canonical wants to do it) it has no ABI stability
- KWin was working on Wayland suppport, now shifted effort to Qt 5 support before going back to Wayland work.
- KWin in 4.11 might work with Qt 5 but not for distros to use
- X wayland is a rootless X server used in both Wayland and Mir, no use for KWin which needs a rooted X server.
- wayland has libwaylandserver and libwaylandclient libraries, libwaylandclient for use in toolkits like Qt.
- current KWin architecture not fully planned but probably Weston as system compositor and KWin as client compositor
- worry that Canonical might havily patch mesa for Unity/Mir making Kwin/Weston break (more then it already is)
- Only Weston needed for LightDM then Kwin started same as currently by startkde (maybe a bit earlier in the script)
- Change to Wayland for Kubuntu about 14.10 or 15.04
- Wayland & Weston release every 3 months, KWin every 6 months
- Unity will have 1 binary equivalent to X, compiz and unity
- Weston can be run on X for testing
- current thinking is to ensure Debian's Weston packages are in Ubuntu archive and use those for Kubuntu, might make ubuntu-desktop and kubuntu-desktop not easily co-installable
- Installer ubiquity-dm a tricky point
Kubuntu SRUs
- KDE people get frustrated when their point releases don't get into distros or get in very slowly
- ubuntu SRU process is beurocratic for a reason - introducing new bugs is really nasty
- lightdm did introduce a new bug recently in a point release which was caught in the SRU process
- building SRUs in a PPA first to test unnecessary and time wasting, just test it locally then upload to -proposed
- possible scope to have approved from ~ubuntu-sru during the 7 day testing period rather than before to remove one blocker?
- delay in KWin updates causes bug reports to keep coming into KWin bugzilla, very time consuming for upstream
- work items too brief - danger of not understanding later what a point is
- use of trello to be encouraged for work item tracking with enough info to understand each point from someone coming fresh
- UEHS unknown if it works reliably, needs to be investigated and improved to update packaging as much as possible itself, at lp:dehs
- public kde-packager e-mail list (discussion has been done several times in past)
- automated copyright file from upstream?
Steve Langasek: Plymouth is not a bootsplash
Congrats to the Debian release team on the new release of Debian 7.0 (wheezy)!
Leading up to the release, a meme making the rounds on Planet Debian has been to play a #newinwheezy game, calling out some of the many new packages in 7.0 that may be interesting to users. While upstart as a package is nothing new in wheezy, the jump to upstart 1.6.1 from 0.6.6 is quite a substantial change. It does bring with it a new package, mountall, which by itself isn't terribly interesting because it just provides an upstart-ish replacement for some core scripts from the initscripts package (essentially, /etc/rcS.d/*mount*). Where things get interesting (and, typically, controversial) is the way in which mountall leverages plymouth to achieve this.
What is plymouth?There is a great deal of misunderstanding around plymouth, a fact I was reminded of again while working to get a modern version of upstart into wheezy. When Ubuntu first started requiring plymouth as an essential component of the boot infrastructure, there was a lot of outrage from users, particularly from Ubuntu Server users, who believed this was an attempt to force pretty splash screen graphics down their throats. Nothing could be further from the truth.
Plymouth provides a splash screen, but that's not what plymouth is. What plymouth is, is a boot-time I/O multiplexer. And why, you ask, would upstart - or mountall, whose job is just to get the filesystem mounted at boot - need a boot-time I/O multiplexer?
Why use plymouth?The simple answer is that, like everything else in a truly event-driven boot system, filesystem mounting is handled in parallel - with no defined order. If a filesystem is missing or fails an fsck, mountall may need to interact with the user to decide how to handle it. And if there's more than one missing or broken filesystem, and these are all being found in parallel, there needs to be a way to associate each answer from the user to the corresponding question from mountall, to avoid crossed signals... and lost data.
One possible way to handle this would be for mountall to serialize the fsck's / mounts. But this is a pretty unsatisfactory answer; all other things (that is, boot reliability) being equal, admins would prefer their systems to boot as fast as possible, so that they can get back to being useful to users. So we reject the idea of solving the problem of serializing prompts by making mountall serialize all its filesystem checks.
Another option would be to have mountall prompt directly on the console, doing its own serialization of the prompts (even though successful mounts / fscks continue to be run in parallel). This, too, is not desirable in the general case, both because some users actually would like to have pretty splash screens at boot time, and this would be incompatible with direct console prompting; and because mountall is not the only piece of software that need to prompt at boot time (see also: cryptsetup).
Plymouth: not just a pretty faceEnter plymouth, which provides the framework for serializing requests to the user while booting. It can provide a graphical boot splash, yes; ironically, even its own homepage suggests that this is its purpose. But it can also provide a text-only console interface, which is what you get automatically when booting without a splash boot argument, or even handle I/O over a serial console.
Which is why, contrary to the initial intuitions of the s390 porters upon seeing this package, plymouth is available for all of Debian's Linux architectures in wheezy, s390 and s390x included, providing a consistent architecture for boot-time I/O for systems that need it - which is any machine using a modern boot system, such as upstart or systemd.
Room for improvementNow, having a coherent architecture for your boot I/O is one thing; having a bug-free splash screen is another. The experience of plymouth in Ubuntu has certainly not been bug-free, with plymouth making significant demands of the kernel video layer. Recently, the binary video driver packages in Ubuntu have started to blacklist the framebuffer kernel driver entirely due to stability concerns, making plymouth splash screens a non-starter for users of these drivers and regressing the boot experience.
One solution for this would be to have plymouth offload the video handling complexity to something more reliable and better tested. Plymouth does already have an X backend, but we don't use that in Ubuntu because even if we do have an X server, it normally starts much later than when we would want to display the splash screen. With Mir on the horizon for Ubuntu, however, and its clean separation between system and session compositors, it's possible that using a Mir backend - that can continue running even after the greeter has started, unlike the current situation where plymouth has to cede the console to the display manager when it starts - will become an appealing option.
This, too, is not without its downsides. Needing to load plymouth when using crypted root filesystems already makes for a bloated initramfs; adding a system compositor to the initramfs won't make it any better, and introduces further questions about how to hand off between initramfs and root fs. Keeping your system compositor running from the initramfs post-boot isn't really ideal, particularly for low-memory systems; whereas killing the system compositor and restarting it will make it harder to provide a flicker-free experience. But for all that, it does have its architectural appeal, as it lets us use plymouth as long as we need to after boot. As the concept of static runlevels becomes increasingly obsolete in the face of dynamic systems, we need to design for the world where the distinction between "booting" and "booted" doesn't mean what it once did.
Sam Hewitt: Things To Do (Rather, What I Do) After Installing Ubuntu (13.04 or Otherwise)
I do one thing after I install Ubuntu: I run a bash script. Re-importing my music, documents, etc. is all incidental, due to how I partition my drives for upgrades; that being:
/dev/sda1 /home 312 GB /dev/sda2 swap 8.0 GB /dev/sdb1 / 16.0 GB (an mSATA SSD, worth the $30.)I overwrite only the root (/) and swap partitions when I do a fresh upgrade, preserving all my settings and data in the /home directory, just leaving my script to re-install all the software I use.
The third drive usually has a miscellaneous operating system on it (at the time of writing this it’s Fedora 18). Also, it’s my secret how I have three hard drives in my laptop. ;)
Anyway, had you downloaded my script, execute it:
~/Downloads $ ./ubuntu-post-install-script.shThe post Things To Do (Rather, What I Do) After Installing Ubuntu (13.04 or Otherwise) appeared first on Sam Hewitt | Blog.
Sam Hewitt: Ubuntu Post-Install Bash Script
Every now and then –usually around the beginning of an Ubuntu release cycle– I do a fresh install on my computer, and it became quickly tiring trying to remember all my previously-installed programs and settings. Naturally, I developed an ever-evolving bash script to run after every installation.
CAUTION: Continuing is not for the command line phobic!The following script includes some of my favourite applications and preferred settings. Currently, I have it configured for Ubuntu 13.04 –it works for the lower versions as well as with both 32-bit and 64-bit architectures– feel free to copy, improve and distribute.
For those not a fan of copying and paste, you can download the script here –to do with what you will, or you can find it and all revisions over my GitHub.
#!/bin/bash #----------------------------# # UBUNTU POST-INSTALL SCRIPT # #----------------------------# echo '' echo '#-------------------------------------------#' echo '# Ubuntu 13.04 Post-Install Script #' echo '#-------------------------------------------#' # SYSTEM UPGRADE function sysupgrade { # Update Repository Information echo 'Updating repository information...' echo 'Requires root privileges:' sudo apt-get update -qq # Dist-Upgrade echo 'Performing system upgrade...' sudo apt-get dist-upgrade -y echo 'Done.' main } # INSTALL FAVOURITE APPLICATIONS function appinstall { # Install Favourite Applications echo 'Installing selected favourite applications...' echo 'Requires root privileges:' sudo apt-get install -y --no-install-recommends darktable easytag filezilla gimp gimp-plugin-registry grsync inkscape mypaint nautilus-dropbox nautilus-open-terminal pyrenamer xchat echo 'Done.' main } # INSTALL FAVOURITE SYSTEM TOOLS function toolinstall { echo 'Installing system tools...' echo 'Requires root privileges:' sudo apt-get install -y --no-install-recommends aptitude dconf-tools openjdk-7-jdk openssh-server p7zip-full ppa-purge samba ssh synaptic zsync echo 'Done.' main } # INSTALL GNOME SHELL function gnomeextra { INPUT=0 echo '' echo 'What would you like to do? (Enter the number of your choice)' echo '' while [ $INPUT != 1 ] && [ $INPUT != 2 ] && [ $INPUT != 3 ] do echo '1. Add GNOME3 PPA?' echo '2. Add GNOME3 Staging PPA?' echo '3. Install GNOME Shell?' echo '4. Install extra GNOME applications?' echo '5. Configure GNOME Shell Specific Settings?' echo '6. Return.' echo '' read INPUT # Add GNOME3 PPA if [ $INPUT -eq 1 ]; then echo 'Adding GNOME3 PPA to software sources...' echo 'Requires root privileges:' sudo add-apt-repository -y ppa:gnome3-team/gnome3 echo 'Updating repository information...' sudo apt-get update -qq echo 'Performing system upgrade...' sudo apt-get dist-upgrade -y echo 'Done.' gnomeextra # Add GNOME3 Staging PPA elif [ $INPUT -eq 2 ]; then echo 'Adding GNOME3 Staging PPA to software sources...' echo 'Requires root privileges:' sudo add-apt-repository -y ppa:gnome3-team/gnome3-staging echo 'Updating repository information...' sudo apt-get update -qq echo 'Performing system upgrade...' sudo apt-get dist-upgrade -y echo 'Done.' gnomeextra # Install GNOME Shell elif [ $INPUT -eq 3 ]; then echo 'Installing GNOME Shell...' echo 'Requires root privileges:' sudo apt-get install -y fonts-cantarell gnome-shell echo 'Done.' gnomeextra # Install Extra GNOME Apps elif [ $INPUT -eq 4 ]; then echo 'Installing extra GNOME applications...' echo 'Requires root privileges:' sudo apt-get install -y bijiben gnome-clocks gnome-contacts gnome-documents gnome-sushi gnome-tweak-tool gnome-weather echo 'Done.' gnomeextra # Configure Shell Specific Settings elif [ $INPUT -eq 5 ]; then # Font Sizes echo 'Setting font preferences...' gsettings set org.gnome.desktop.interface text-scaling-factor '1.0' gsettings set org.gnome.desktop.interface document-font-name 'Cantarell 10' gsettings set org.gnome.desktop.interface font-name 'Cantarell 10' gsettings set org.gnome.nautilus.desktop font 'Cantarell 10' gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Cantarell Bold 10' gsettings set org.gnome.settings-daemon.plugins.xsettings antialiasing 'rgba' gsettings set org.gnome.settings-daemon.plugins.xsettings hinting 'slight' # GNOME Shell Settings echo 'Setting GNOME Shell preferences...' gsettings set org.gnome.shell.overrides button-layout 'close:' # Return elif [ $INPUT -eq 6 ]; then clear && main else # Invalid Choice echo 'Not an option, choose again.' gnomeextra fi done } # INSTALL MULTIMEDIA CODECS function codecinstall { # Install Ubuntu Restricted Extras Applications echo 'Installing Ubuntu Restricted Extras...' echo 'Requires root privileges:' sudo apt-get install -y ubuntu-restricted-extras echo 'Done.' main } # INSTALL DEV TOOLS function devinstall { # Install Development Tools echo 'Installing development tools...' echo 'Requires root privileges:' sudo apt-get install -y bzr git glade qtcreator ruby echo 'Done.' main } # EXTRA INSTALLATION function thirdparty { INPUT=0 echo '' echo 'What would you like to do? (Enter the number of your choice)' echo '' while [ $INPUT != 1 ] && [ $INPUT != 2 ] && [ $INPUT != 3 ] do echo '1. Install Google Chrome (Unstable)?' echo '2. Install Google Talk Plugin?' echo '3. Install Steam?' echo '4. Install Unity Tweak Tool?' echo '5. Install DVD playback tools?' echo '6. Return' echo '' read INPUT # Google Chrome if [ $INPUT -eq 1 ]; then echo 'Downloading Google Chrome (Unstable)...' # Make tmp directory if [ -e $HOME/tmp ]; then mkdir -p $HOME/tmp else continue fi cd $HOME/tmp # Download Debian file that matches system architecture if [ $(uname -i) = 'i386' ]; then wget https://dl.google.com/linux/direct/google-chrome-unstable_current_i386.deb elif [ $(uname -i) = 'x86_64' ]; then wget https://dl.google.com/linux/direct/google-chrome-unstable_current_amd64.deb fi # Install the package echo 'Installing Google Chrome...' sudo dpkg -i google*.deb sudo apt-get install -fy # Cleanup and finish rm *.deb cd echo 'Done.' thirdparty # Google Talk Plugin elif [ $INPUT -eq 2 ]; then echo 'Downloading Google Talk Plugin...' # Make tmp directory if [ -e $HOME/tmp ]; then mkdir -p $HOME/tmp else continue fi cd $HOME/tmp # Download Debian file that matches system architecture if [ $(uname -i) = 'i386' ]; then wget https://dl.google.com/linux/direct/google-talkplugin_current_i386.deb elif [ $(uname -i) = 'x86_64' ]; then wget https://dl.google.com/linux/direct/google-talkplugin_current_amd64.deb fi # Install the package echo 'Installing Google Talk Plugin...' sudo dpkg -i google*.deb sudo apt-get install -fy # Cleanup and finish rm *.deb cd echo 'Done.' thirdparty # Steam elif [ $INPUT -eq 3 ]; then echo 'Downloading Steam...' # Make tmp directory if [ -e $HOME/tmp ]; then mkdir -p $HOME/tmp else continue fi cd $HOME/tmp # Download Debian file that matches system architecture if [ $(uname -i) = 'i386' ]; then wget http://repo.steampowered.com/steam/archive/precise/steam_latest.deb elif [ $(uname -i) = 'x86_64' ]; then wget http://repo.steampowered.com/steam/archive/precise/steam_latest.deb fi # Install the package echo 'Installing Steam...' sudo dpkg -i steam*.deb sudo apt-get install -fy # Cleanup and finish rm *.deb cd echo 'Done.' thirdparty # Unity Tweak Tool elif [ $INPUT -eq 4 ]; then # Add repository echo 'Adding Unity Tweak Tool repository to sources...' echo 'Requires root privileges:' sudo add-apt-repository ppa:freyja-dev/unity-tweak-tool-daily # Update Repository Information echo 'Updating repository information...' sudo apt-get update -qq # Install the package echo 'Installing Unity Tweak Tool...' sudo apt-get install -y unity-tweak-tool echo 'Done.' thirdparty # Medibuntu elif [ $INPUT -eq 5 ]; then echo 'Adding Medibuntu repository to sources...' echo 'Requires root privileges:' sudo -E wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && sudo apt-get update -qq && sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && sudo apt-get update -qq echo 'Done.' echo 'Installing libdvdcss2...' sudo apt-get install -y libdvdcss2 echo 'Done.' # Return elif [ $INPUT -eq 6 ]; then clear && main else # Invalid Choice echo 'Not an option, choose again.' thirdparty fi done } # CONFIG function config { INPUT=0 echo '' echo 'What would you like to do? (Enter the number of your choice)' echo '' while [ $INPUT != 1 ] && [ $INPUT != 2 ] && [ $INPUT != 3 ] do echo '1. Set preferred application-specific settings?' echo '2. Show all startup applications?' echo '3. Return' echo '' read INPUT # GSettings if [ $INPUT -eq 1 ]; then # Font Sizes echo 'Setting font preferences...' gsettings set org.gnome.desktop.interface text-scaling-factor '1.0' gsettings set org.gnome.desktop.interface document-font-name 'Ubuntu 9' gsettings set org.gnome.desktop.interface font-name 'Ubuntu 9' gsettings set org.gnome.desktop.interface monospace-font-name 'Ubuntu Mono 11' gsettings set org.gnome.nautilus.desktop font 'Ubuntu 9' gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Ubuntu Bold 9' gsettings set org.gnome.settings-daemon.plugins.xsettings antialiasing 'rgba' gsettings set org.gnome.settings-daemon.plugins.xsettings hinting 'slight' # Unity Settings echo 'Setting Unity preferences...' gsettings set com.canonical.Unity.ApplicationsLens display-available-apps false gsettings set com.canonical.unity-greeter draw-user-backgrounds true gsettings set com.canonical.indicator.power icon-policy 'charge' gsettings set com.canonical.Unity.Lenses remote-content-search 'none' # Nautilus Preferences echo 'Setting Nautilus preferences...' gsettings set org.gnome.nautilus.preferences sort-directories-first true # Gedit Preferences echo 'Setting Gedit preferences...' gsettings set org.gnome.gedit.preferences.editor display-line-numbers true gsettings set org.gnome.gedit.preferences.editor create-backup-copy false gsettings set org.gnome.gedit.preferences.editor auto-save true gsettings set org.gnome.gedit.preferences.editor insert-spaces true gsettings set org.gnome.gedit.preferences.editor tabs-size 4 # Rhythmbox Preferences echo 'Setting Rhythmbox preferences...' gsettings set org.gnome.rhythmbox.rhythmdb monitor-library true gsettings set org.gnome.rhythmbox.sources browser-views 'artists-albums' gsettings set org.gnome.rhythmbox.sources visible-columns '['post-time', 'artist', 'duration', 'genre', 'album']' # Totem Preferences echo 'Setting Totem preferences...' gsettings set org.gnome.totem active-plugins '['save-file', 'media_player_keys', 'screenshot', 'chapters', 'ontop', 'screensaver', 'movie-properties', 'skipto']' config # Startup Applications elif [ $INPUT -eq 2 ]; then echo 'Changing display of startup applications.' echo 'Requires root privileges:' cd /etc/xdg/autostart/ && sudo sed --in-place 's/NoDisplay=true/NoDisplay=false/g' *.desktop cd echo 'Done.' config # Return elif [ $INPUT -eq 3 ]; then clear && main else # Invalid Choice echo 'Not an option, choose again.' config fi done } # CLEANUP SYSTEM function cleanup { INPUT=0 echo '' echo 'What would you like to do? (Enter the number of your choice)' echo '' while [ $INPUT != 1 ] && [ $INPUT != 2 ] && [ $INPUT != 3 ] do echo '' echo '1. Remove unused pre-installed packages?' echo '2. Remove old kernel(s)?' echo '3. Remove orphaned packages?' echo '4. Remove residual config files?' echo '5. Clean package cache?' echo '6. Return?' echo '' read INPUT # Remove Unused Pre-installed Packages if [ $INPUT -eq 1 ]; then echo 'Removing selected pre-installed applications...' echo 'Requires root privileges:' sudo apt-get purge echo 'Done.' cleanup # Remove Old Kernel elif [ $INPUT -eq 2 ]; then echo 'Removing old Kernel(s)...' echo 'Requires root privileges:' sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge echo 'Done.' cleanup # Remove Orphaned Packages elif [ $INPUT -eq 3 ]; then echo 'Removing orphaned packages...' echo 'Requires root privileges:' sudo apt-get autoremove -y echo 'Done.' cleanup # Remove residual config files? elif [ $INPUT -eq 4 ]; then echo 'Removing residual config files...' echo 'Requires root privileges:' sudo dpkg --purge $(COLUMNS=200 dpkg -l | grep '^rc' | tr -s ' ' | cut -d ' ' -f 2) echo 'Done.' # Clean Package Cache elif [ $INPUT -eq 5 ]; then echo 'Cleaning package cache...' echo 'Requires root privileges:' sudo apt-get clean echo 'Done.' cleanup # Return elif [ $INPUT -eq 6 ]; then clear && main else # Invalid Choice echo 'Not an option, choose again.' cleanup fi done } # END function end { echo '' read -p 'Are you sure you want to quit? (Y/n) ' if [ '$REPLY' == 'n' ]; then clear && main else exit fi } # MAIN FUNCTION function main { INPUT=0 echo '' echo 'What would you like to do? (Enter the number of your choice)' echo '' while [ $INPUT != 1 ] && [ $INPUT != 2 ] && [ $INPUT != 3 ] do echo '1. Perform system update & upgrade?' echo '2. Install favourite applications?' echo '3. Install favourite system tools?' echo '4. Install extra GNOME components?' echo '5. Install development tools?' echo '6. Install Ubuntu Restricted Extras?' echo '7. Install third-party applications?' echo '8. Configure system?' echo '9. Cleanup the system?' echo '10. Quit?' echo '' read INPUT # System Upgrade if [ $INPUT -eq 1 ]; then clear && sysupgrade # Install Favourite Applications elif [ $INPUT -eq 2 ]; then clear && appinstall # Install Favourite Tools elif [ $INPUT -eq 3 ]; then clear && toolinstall # Install GNOME components elif [ $INPUT -eq 4 ]; then clear && gnomeextra # Install Dev Tools elif [ $INPUT -eq 5 ]; then clear && devinstall # Install Ubuntu Restricted Extras elif [ $INPUT -eq 6 ]; then clear && codecinstall # Install Third-Party Applications elif [ $INPUT -eq 7 ]; then clear && thirdparty # Configure System elif [ $INPUT -eq 8 ]; then clear && config # Cleanup System elif [ $INPUT -eq 9 ]; then clear && cleanup # End elif [ $INPUT -eq 10 ]; then end else # Invalid Choice echo 'Not an option, choose again.' main fi done } # CALL MAIN FUNCTION main #-----------------------------------# # END OF UBUNTU POST-INSTALL SCRIPT # #-----------------------------------#The post Ubuntu Post-Install Bash Script appeared first on Sam Hewitt | Blog.
Rick Spencer: Ugly Duckling to Beautiful Swan, or How an App Developer Benefits from Designer/Developer Collabaration
Last week I snatched an hour here and there to work on my Feedzilla app. I like Feedzilla because it has an api that is free for me to use, so it's easy to write the app. However, I'm not totally enamored with the content, it seems like it is often out of date, though I suppose I can apply a filter to limit the content to new stuff from this week, or whatever.
However, what really stopped me working on it was that my implementation was just depressingly ugly. I'd look at all the cool and beautiful things that other people were doing with their apps, and be totally unmotivated to work on TechNews. Last week, I decided to ask for some help in how to improve my app, and I was told about ListItems. For TechNews, it was like the sun coming out from behind the clouds.
Now, the thing abut Ubuntu.Components is that the project is fundamentally a design project. Yes, the components need, and have, an awesome development team that makes them "real", but the components are really about providing developers with the tools for making a well designed "Ubuntu App". This couldn't be more clear than when using ListItems.
For an example, to turn the categories list from this:
My very ugly list which was my honest best effort without design help.
to this:
My now lovely list that I got to be that way just by using the right components and inheriting all of the designers' knowledge and talents.
I just had to use Standard list items. First, I went ahead and imported the ListItem namespace:
import Ubuntu.Components.ListItems 0.1
Then this is what my delegate for each list item looks like. The "progression: true" declares that the item will navigate somewhere. The designers ensured that this means the list item adds that ">", so it is standard navigation in all apps!
delegate: Standard { progression: true; text: articlesListView.model[index]["title"] onClicked: { articleSelected(articlesListView.model[index]["url"]) } }
So my app went from ugly duckling to beautiful swan just by using the right components and getting all the benefit of the designers' abilities that I so sorely lack. Thanks SDK team!
Jo Shields: Windows 8: Blood from a Stone
Ordinarily, I’m a big believer that it is important to keep up to date with what every piece of software which competes with yours is doing, to remain educated on the latest concepts. Sometimes, there are concepts that get added which are definitely worth ripping off. We’ve ripped off plenty of the better design choices from Windows or Mac OS, over the years, for use in the Free Desktop.
So, what about Windows 8, the hip new OS on everyone’s lips?
Well, here’s the thing… I’ve been using it on and off for a few months now for running legacy apps, and I can’t for the life of me find anything worth stealing.
Let’s take the key change – Windows 8 has apps built with a new design paradigm which definitely isn’t called Metro. Metro apps don’t really have “windows” in the traditional sense – they’re more modeled on full-screen apps from smartphones or tablets than on Windows 1.0 -> 7. Which is fine, really, if you’re running Windows 8 on a tablet or touchscreen device. But what if you’re not? What about the normal PC user?
As Microsoft themselves ask:
The answer to that is, well, you sorta don’t.
Metro apps can exist in three states – fullscreen, almost fullscreen, or vertical stripe. You’re allowed to have two apps at most at the same time – one mostly full screen, and one vertical stripe. So what happens if you try to *use* that? Let’s take a fairly common thing I do – watch a video and play Minesweeper. In this example, the video player is the current replacement for Windows Media Player, and ships by default. The Minesweeper game isn’t installed by default, but is the only Minesweeper game in the Windows 8 app store which is gratis and by Microsoft Game Studios.
Here’s option A:
And for contrast, here’s option B:
Which of these does a better job of letting me play Minesweeper and watch a video at the same time?
Oh, here’s option C, dumping Microsoft’s own software, and using a third-party video player and third party Minesweeper implementation:
It’s magical – almost as if picking my own window sizes makes the experience better.
So, as you can see above, the “old” OS is still hiding there, in the form of a Windows 8 app called “Desktop”. Oh, sorry, didn’t I say? Metro apps, and non-Metro apps, are segregated. You can run both (the Desktop app can also be almost-fullscreen or a vertical strip), but they get their own lists of apps when multitasking. Compare the list on the left with the list at the bottom:
And it’s even more fun for apps like Internet Explorer, which can be started in both modes (and you often need both modes). Oh, and notice how the Ribbon interface from Office 2007 has invaded Explorer, filling the view with large buttons to do things you never want to do under normal circumstances.
So, that’s a short primer on why Windows 8 is terrible.
Is there really nothing here worth stealing? Actually, yes, there is! After much research, I have discovered Windows 8′s shining jewel:
The new Task Manager is lovely. I want it on my Linux systems. But that’s it.
Ian Weisser: Brainstorm Big 5 - May 2013
If you want to leave Developer Feedback on a Brainstorm Idea, but lack permissions, then please contact me. I can assign you permission, or simply add your response for you. (ian dash weisser at ubuntu dot com)
The all-time top four:
The current top four all-time Brainstorm Ideas. They change from time to time as new ideas overtake old ideas, or as ideas get merged or implemented or closed.
You may see a common theme among them:
1) Restoring the bootloader by Ubuntu Live media
2) Graphical frontend to edit GRUB menu
3) Provide a simple interface for labeling partitions and external drives
4) Better Hardware Profile Manager
Here is what I see: None of these seem like features requested by unskilled users.
Instead, these seem more likely to be used by migrating power-users who have imprinted upon previous systems...and then discovered their first hurdle on the learning curve.
Now, I'm not proposing that we should implement any of these ideas. Instead, consider it a data point - here is one measure of how Ubuntu is perceived by rather skilled new users. Not what they actually need to be productive, but what they spend their time looking for fruitlessly.
And when they don't find it, some of them rant about Ubuntu. Goodness, just look at some of those comments.
- Do we want these issues to be the first hurdles for this type of user?
- Is there an easy alternative we can draw them into?
- Is there a better message that Ubuntu, Launchpad, the forums, the Teams, etc. should be communicating to them?
- Are these opportunities to begin their learning curve in a kinder, gentler way?
- I wonder why those users, after overcoming the hurdle, did not write a solution to help those who came after them?
Monetization by committee
To round out the Big 5 this month,
Alternative Sources of Income
The top Idea of the past six months, this is a crazy-quilt of monetization ideas. I've been -among other things- a banker and a real-business-with-employees owner and a QA inspector, so I completely understand how unrealistic some of the money-handling-and-administration Solutions really are. But like the all-time top-four (above), the real message is the intent and the context.
- People are still really frustrated by [what they think are] bugs.
Frustrated enough that some are willing to pay [small amounts] for bug bounties.
Yet apparently not frustrated enough to actually get involved. - There is also a lot of FUD still floating around about unity-lens-shopping, and some new users are still getting attracted to the tinfoil-hat crowd's message.
- Is this an opportunity to recruit for the Bug Squad? LoCos? Teams? Upstreams?
- How can we make our commitment to personal data privacy clearer?
- How can we improve the message that Ubuntu users are participants, not customers?
Feel free to discuss in the appropriate Brainstorm Idea page, or in the comments section of this blog, or by e-mail...or anywhere else you like. Like at UDS.
Yeah, at UDS.
See you on IRC at UDS!
Aurélien Gâteau: Homerun 0.2.3
As announced two weeks ago, here is another release of Homerun.
This new release comes with many more translations (16 complete translations, and 4 more than 80% complete). It also includes some fixes:
- The "Alt-Up" shortcut key to go up one level when navigating is back
- The "Power" source no longer uses internal DBus APIs, making it work again with upcoming KDE SC 4.11 (Thanks to Hrvoje Senjan for this fix)
That's about it. As usual, you can get the tarball from download.kde.org.
Timo Jyrinki: Qt 5 in Debian and Ubuntu, patches upstreaming
There will remain some delta, as pkg-kde plans to ask for a complete transition to qtchooser so that all Qt using packages would declare the Qt version either by QT_SELECT environment variable (preferable) or a package dependency (qt5-default or qt4-default). As a temporary change related to that, Debian will have a debhelper modification that defaults QT_SELECT to qt4 for the duration of the transition. Meanwhile, Ubuntu already shipped the 13.04 release with Qt 5, and a shortcut was taken there instead to prevent any Qt 4 package breakage. However, after the transition period in Debian is over, that small delta can again be removed.
I will also need to continue pushing any useful packaging I do to Debian. I pushed qtimageformats and qtdoc last week, but I know I'm still behind with some "possibly interesting" git snapshot modules like qtsensors and qtpim.
PatchesMore delta exists in the form of multiple patches related to the recent Ubuntu Touch efforts. I do not think they are of immediate interest to Debian – let's start packaging Qt 5 apps to Debian first. However, about all of those patches have already been upstreamed to be part of Qt 5.1 or Qt 5.2, or will be later on. Some already were for 5.0.2.
A couple of months ago Ubuntu did have some patches hanging around with no clear author information. This was a result of the heated preparation for the Ubuntu Touch launches, and the fact that patches flew (too) quickly in place into various PPA:s. I started hunting down the authors, and the situation turned out to be better than I thought. About half of the patches were already upstreamed, and work on properly upstreaming the other ones was swiftly started after my initial contact. Proper DEP3 fields do help understanding the overall situation. There are now 10 Canonical individuals in the upstream group of contributors, and in the last week's sprint it turned out more people will be joining them to upstream their future patches.
Nowadays about all the requests I get for including patches from developers are stuff that was already upstreamed, like the XEmbed support in qtbase. This is how it should be.
One big patch still being Ubuntu only is the Unity appmenu support. There was a temporary solution for 13.04 that forward-ported the Qt 4 way of doing it. This will be however removed from the first 13.10 ('saucy') upload, as it's not upstreamable (the old way of supporting Unity appmenus was deliberately dropped from Qt 5). A re-implementation via QPA plugin support is on its way, but it may be that the development version users will be without appmenu support for some duration. Another big patch is related to qtwebkit's device pixel ratio, which will need to be fixed. Apart from these two areas of work that need to be followed through, patches situation is quite nice as mentioned.
ConclusionFree software will do world domination, and I'm happy to be part of it.
The Fridge: Ubuntu Weekly Newsletter Issue 315
Welcome to the Ubuntu Weekly Newsletter. This is issue #315 for the week April 29 – May 5, 2013, and the full version is available here.
In this issue we cover:
- Welcome New Members and Developers
- Ubuntu Stats
- CFT – 13.05 vUDS – Cloud & Server Track
- Jorge Castro: 13 Reasons to Deploy With Ubuntu Server , Parts 2 & 3
- Jorge Castro: Juju Charm Store updates for 1 May
- Canonical Design Team: Weather & Clock app visual exploration
- Ben Howard: Windows Azure Cloud Image Dailies
- Nicholas Skaggs: Meet the Ubuntu Quality Community!
- Mathieu Trudel: Protocol stacks on Ubuntu Touch
- Ubuntu Ohio – Burning Circle: Podcast Production Suspension
- Other Community News
- Whether you love or loathe Ubuntu, 13.04 ‘Raring Ringtail’ won’t change your mind
- The Ubuntu Home Screen
- Shuttleworth: Ubuntu Cloud & Mobile Equally Important; Android Alternative Needed
- In The Blogosphere
- In Other News
- Other Articles of Interest
- Featured Audio and Video
- Upcoming Meetings and Events
- Updates and Security for 8.04, 10.04, 11.10, 12.04, 12.10 and 13.04
- And much more!
The issue of The Ubuntu Weekly Newsletter is brought to you by:
- Amber Graner
- Jose Antonio Rey
- Tiago Carrondo
- Mathias Hellsten
- 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
Lubuntu Blog: Get extra apps for Lubuntu
Marcin Juszkiewicz: Looks like it is time for me to say good bye again
Good things have one ugly part in common — they have to end one day… For me that day will be 31st May 2013 when contract between Canonical and Linaro will end.
Those 3 years were great. I wrote a lot about it half year ago so those of you who are new – go to my previous “good bye Linaro” post before reading rest of this post.
Half year ago I was going to Canonical but got hold at Linaro for longer. Then I made a mistake by agreeing to postpone my move to Linaro instead of joining as soon as possible — my fault…
Last 6 months were full of interesting things. We went from just bootstrapped AArch64 port to fully working LAMP and SDK images built with OpenEmbedded. I integrated all Linaro layers into one repository and reorganized in a way that those who want only our toolchains can have them without using any of our changes. This move was greeted by lot of maintainers and users from OpenEmbedded community. Wherever new toolchain components were provided for tests I had them checked on first day to see how AArch64 situation got improved and provided fixes when they were needed.
Recent release of Yocto Project has several changes done by me and Riku Voipio integrated. OpenEmbedded project also made release and has even more our changes in it. Most of those were AArch64 related, some were software updates or fixes to low level stuff.
Linaro Enterprise Group has Owen Yamauchi from Facebook working on porting HipHopVM. He is using SDK created by OpenEmbedded to not worry about any build dependencies or missing libraries. With my work (and work from porters like Riku Voipio, Steve McIntyre, Yvan Roux and others) he got not only libraries but also tools he needed for his job.
Andy Johnson started OpenJDK porting — also with OpenEmbedded. Riku provided instructions which I merged into our ‘jenkins-setup’ scripts to make live easier for Andy.
Due to all that work I am often contacted by random people (not only from Linaro) wherever they have some AArch64 related questions. Sometimes even with ARMv4/EABI related like post from Nicolas Pitre a day after RMK wrote that FPU emulator has to be removed from the Linux kernel. I provided him instructions how to make such build and just to be sure that I did not made any mistakes I tried one on my machine. IIRC none of main distributions support EABI for ARMv4 (no thumb) processors.
But looks like all that has to end. Unless someone from Linaro member companies (or who knows, maybe even Linaro itself) wants to hire me. I am open for offers.
If I go outside of @linaro.org then I would like to stay around and check how things go — probably as ‘community member’ or how it is called.
And one more thing at the end. As usual when I end my work at one place I gather recommendations on LinkedIn. If you have few spare minutes and want to write something then it will be appreciated.
Related content:
- 3 years at Canonical
- So long, and thanks for all the fish
- AArch64 porting update
- AArch64 for everyone
- ARM 64-bit porting for OpenEmbedded
All rights reserved © Marcin Juszkiewicz
Looks like it is time for me to say good bye again was originally posted on Marcin Juszkiewicz website
Fabián Rodríguez: Debian Quebec is here :)
As many of you already know by now, Debian 7 is here!
I’ve been using Debian as my primary work environment for a few months now and Trisquel at home for the past year and a half or so. My advocacy work has changed as a result, and I stopped focusing on Ubuntu, while still recommending version 12.04 LTS that just works for many. There’s also Ubuntu Gnome (or is it Gnome Ubuntu) now, so there is still a good array of choices for those like me that like the GNOME 3 environment and find it productive. Oh, did I mention Cinnamon 1.8 was just released?
I am happy to announce that there is now a Debian Quebec group, and we just got our mailing list approved in the Debian project. This was not as fast an easy as in Ubuntu-land, and I took the time to fully document the process to get the mailing list going, in case others may want to do the same. It may all seem too slow or difficult, but every step of the way several people helped and I learned a lot. I took this as an opportunity to contribute to the project and at the same time I found that it may be hard for new GNU/Linux users to get started in Debian – or even for experienced ones like me, coming from Ubuntu.
That’s why after a few IRC messages I started working on a Welcome to Debian resource (and team) aimed at people that use other distributions and come to Debian for the first time. It’s still very new and incomplete, but it’s what I wished was around when I started dedicating serious time to this distribution a few months ago.
As luck would have it, Debian 7 was just around the corner, just a few days/weeks after Ubuntu 13.04 and Trisquel 6 were released. This called for an all-distributions Debian 7 release party (we’ll have two locations, Montreal and Quebec City). There will be workshops and presentations from 12:30 to 5:30 PM and then a happy hour with CLibre and Libre Planet. Check the Agenda du Libre if you’re in Montreal this week (or any time soon), perhaps we can cross paths.
Tony Whitmore: A precious jewel, untarnished by the passing centuries
The story chosen to represent the Peter Davison era of Doctor Who at the BFI’s 50th anniversary screenings was Caves of Androzani. It’s an odd choice, as it is unlike other stories being produced at the time. It’s a excellent story, an excellent script and very well directed. But it’s not fun. The few quips and jokes in the script raised only muted laughter from the audience and, apart from the two leads, every character is flawed. There are no heroes in the story and almost every character dies, an ignominious end awaiting each of them. There are no blazes of glory here. The Doctor doesn’t influence events particularly, he doesn’t right any wrongs. He just wants to cure Peri and get out of there alive. Even then, he only half manages it.
The story was introduced by Mark Gatiss. Half way through. composer Roger Limb talked about his time at the Radiophonic Workshop. By a happy coincidence, the music from Caves of Androzani has just been released on CD.
The discussion panel afterwards was lively. To say the least. After his brief appearance at last month’s screening, I hadn’t expected to see Matthew Waterhouse this month, but there he was. The BFI even showed Adric’s death scene while the panel was on the stage. There was a fair bit of good natured ribbing between Peter and Janet, and some less good natured ribbing of Matthew. But things settled down and Matthew raised some interesting points. A refreshing number of questions from the audience were directed at Graeme Harper, and a fair few people who thanked Peter for being “their Doctor”.
Afterwards a small group of podcasters gathered in the by-now-traditional car park stairwell to review the story and the panel. It will be available from The Doctor Who Podcast Facebook page very soon. You can still download our review of “Robots of Death”, the 4th Doctor BFI screening.
Pin ItTed Gould: Application Centric User Experience
One of the design goals of Unity was to have an Application-centric user experience. Components like the Launcher consolidate all of the windows into a single icon instead of a set like the GNOME 2 panel. Nothing else in Ubuntu thinks about applications in this way making it a difficult user experience to create. X11 worries about windows. DBus worries about connections. The kernel focuses on PIDs. None of these were focused on applications, just parts of applications. We created the BAMF Application Matching Framework (BAMF) to try and consolidate these, and while it has done a heroic job, its task is simply impossible. We need to push this concept lower into the stack.
First we looked at the display server and started thinking about how it could be more application centric. That effort resulted in Mir. Mir gets connections from applications and manages their associated windows together. They can have multiple windows, but they always get tracked back to the application that created them. Unity can then always associate and manage them together, as an application, without any trickery.
Application confinement also provides another piece of this puzzle. It creates a unified set of security policies for the application independent of how many submodules or processes exist for it. One cache directory, set of settings and policies follow the application around. Apparmor provides a consistent and flexible way of managing the policies along with the security that we need to keep users safe.
To start to look at the process management aspect of this I started talking to James Hunt about using Upstart, our process manager in Ubuntu. Working together we came up with a small little upstart user session job that can start and stop applications, and also track them. I've pushed the first versions of that to a test repository in Launchpad. What this script provides is the simple semantics of doing:
$ start application APP_ID=gedit $ stop application APP_ID=gedit to manage the application. Of course, the application lifecycle is also important, but Upstart provides us an guaranteed way of making sure the application stops at the end of the session.Upstart can also help us to guarantee application uniqueness. If you try and start an application twice you get this:
$ start application APP_ID=inkscape application (inkscape) start/running, process 30878 $ start application APP_ID=inkscape start: Job is already running: application (inkscape) This way we can ensure that a single icon on the launcher associates to a set of processes, managed by the process manager itself. In the past libraries like libunique have accomplished this using DBus name registration. Which, for the most part, works. Using DBus registration relies on well behaving applications, which basically guarantee their own uniqueness. By using Upstart we can have misbehaving applications, and still guarantee their uniqueness for the Unity to show the user.We're just getting started on getting this setup and working. The schedule isn't yet final for vUDS next week, but I imagine we'll get a session for it. Come and join in and help us define this feature if it interests you.
Chris Johnston: Virtual Ubuntu Developer Summit 13.05
Next Tuesday, May 14 starts the second Virtual Ubuntu Developer Summit. Based on feedback, this vUDS will be three days long. Don’t forget to register for the event. A list of currently approved blueprints is available on Launchpad. If you find that one is missing, you can create your own. Keep an eye out this week for scheduling to start.
Tracks…- App Development: Alan Pope, David Planella & Michael Hall
- Community: Daniel Holbach, Nick Skaggs & Jono Bacon
- Client: Jason Warner & Sebastien Bacher
- Server & Cloud: Dave Walker & Antonio Rosales
- Foundations: Steve Langasek
One of the bugs that has long effected Summit has been that a blueprint had to have a specific status. This will finally no longer effect us! If a blueprint is marked anything other than Obsolete or Superseded it will now show up on the schedule as long as it is approved by a track lead. A huge thanks to Steve Kowalik and William Grant for getting this fixed!
Another issue that seemed to confuse people is having to register attendance in Launchpad in order to be able to use the features of Summit. This is no longer the case! You are now able to register as attending in Summit without any need to visit Launchpad (a Launchpad account is still required).
If you find that you have any issues with Summit or vUDS you can contact the track leads or you can contact me. If you find any bugs in Summit, please tell us about it!
See you next week!
Nicholas Skaggs: People behind ubuntu quality: Javier
1) Could you provide a bit of background about yourself?
My name is Javier Lopez, I'm a random 2x years old guy living in Mexico city.
2) How did you become invovled with the Ubuntu community?
I become involved because I believe in the Ubuntu and open source philosophy.
3) What attracted you to the quality team?
Nicholas's blog, I used to be a Daniel Holbach super fan, but since I started reading Nicholas one, Daniel has fallen one spot, I like seeing all that energy spread over the community and its never ending enthusiasm. I'll hunt you and hug you both of you guys! ¬_¬
Contributing some iso testing results4) What would you say to folks new to ubuntu and/or testing?
I'd encourage anyone to join any of the Ubuntu teams, you'll learn more about the system, will meet nice people and will help to build one of the most awesome and biggest projects around.
5) How would you describe the community and the experience of using ubuntu?
I'd say that the Ubuntu community is one of the most friendly communities I've ever meet, that feels great in addition to the nice system which comes with it.
As alpha tester, there are times where the ubuntu experience is not as great as an LTS ubuntu system, but I also enjoy seeing how the bugs reported get fixed and how the few patches I've sent get integrated.
6) What would you like to see in the future for ubuntu?
I'd like to see more loco teams awesomeness, people going crazy about it (something like a randall ross clone program), designers all over the place, companies funding more community programmers, more ubuntu woman members, an ubuntu skynet..
7) Do you have a favorite experience to share from being a part of ubuntu?
I like seeing people's face when they first meet an Ubuntu system, specially when they like it and they're not computer gangsters.
Javier enjoys playing the violin8) What is your favorite activity or interest outside of computing (including ubuntu!)?
I like going out with my friends, and learning new things, I also like talking with other foreign people and traveling around my country, specially small towns. I'm trying to setup a couple of companies, so I'll be able to spend more time enjoying life en less working in an office.
Valorie Zimmerman: Contribute joy
"Kindness" covers all of my political beliefs....I believe that if, at the end, according to our abilities, we have done something to make others a little happier, and something to make ourselves a little happier, that is about the best we can do. To make others less happy is a crime. To make ourselves unhappy is where all crime starts. We must try to contribute joy to the world. That is true no matter what our problems, our health, our circumstances. We must try. I didn't always know this and am happy I lived long enough to find out.We in free and open source software are making the world a better place, and making others happier; often people whom we don't know and will never meet. Roger Ebert shared his love of movies with the world, and I'll miss his voice now that he's gone.
We get to share our love with the world too.
Serge Hallyn: Introducing lxc-snap
lxc-snap: lxc container snapshot management tool
BACKGROUND
Lxc supports containers backed by overlayfs snapshots. The way this is
typically done is to create a container backed by a regular directory,
then create a new container which mounts the first container’s rootfs
as a read-only lower mount, with a new private delta directory as
its read-write upper mount. For instance, you could
sudo lxc-create -t ubuntu -n r0 # create a normal directory
sudo lxc-clone -B overlayfs -s r0 o1 # create overlayfs clone
The second container, o1, when started up will mount /var/lib/lxc/o1/delta0
as a writeably overlay on top of /var/lib/lxc/r0/rootfs, and use that as its
root filesystem.
From here you can clone o1 to a new container o2. This simply copies the
the overlayfs delta from o1 to o2, and you is done with
sudo lxc-clone -s o1 o2
LXC-SNAP
One of the obvious use cases of these snapshot clones is to support
incremental development of rootfs images. Make some changes, snapshot,
make some more changes, snapshot, revert…
lxc-snap is a small program using the lxc API to more easily support
this use case. You begin with a overlayfs backed container, make some
changes, snapshot, make some changes, snapshot… This is a simpler
model than manually using clone because you continue developing the same
container, o1, while the snapshots are kept away until you need them.
EXAMPLE
Create your first container
sudo lxc-create -t ubuntu -n base
sudo lxc-clone -s -B overlayfs base mysql
Now make initial customizations, and snapshot:
sudo lxc-snap mysql
This will create a snapshot container /var/lib/lxcsnaps/mysql_0. You can actually
start it up if you like using ‘sudo lxc-start -P /var/lib/lxcsnaps -n mysql_0′.
(However, that is not recommended, as it will cause changes in the rootfs)
Next, make some more changes. Write a comment about the changes you made in this
version,
echo “Initial definition of table doomahicky” > /tmp/comment
sudo lxc-snap -c /tmp/comment mysql
Do this a few times. Now you realize you lost something you needed. You can
see the list of containers which have snapshots using
lxc-snap -l
and the list of versions of container mysql using
lxc-snap -l mysql
Note that it shows you the time when the snapshot was created, and any comments
you logged with the snapshot. You see that what you wanted was version 2, so
recover that snapshot. You can destroy container mysql and restore version 2
to it, or (I would recommend) use a different name to restore the snapshot to.
Use a different name with:
sudo lxc-snap -r mysql_2 mysql_tmp
or destroy mysql and restore the snapshot to it using
sudo lxc-destroy -n mysql
sudo lxc-snap -r mysql_2 mysql
When you’d like to export a container, you can clone it back to a directory
backed container and tar it up:
sudo lxc-clone -B dir mysql mysql_ship
sudo tar zcf /srv/mysql_ship.tar.gz /var/lib/lxc/mysql_ship
BUILD AND INSTALL
To use lxc-snap, you currently need to be using lxc from the ubuntu-lxc
daily ppa. On an ubuntu system (12.04 or later) you can
sudo add-apt-repository ppa:ubuntu-lxc/daily
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install lxc
lxc-snap will either become a part of thelxc-snap: lxc container snapshot management tool
BACKGROUND
Lxc supports containers backed by overlayfs snapshots. The way this is
typically done is to create a container backed by a regular directory,
then create a new container which mounts the first container’s rootfs
as a read-only lower mount, with a new private delta directory as
its read-write upper mount. For instance, you could
sudo lxc-create -t ubuntu -n r0 # create a normal directory
sudo lxc-clone -B overlayfs -s r0 o1 # create overlayfs clone
The second container, o1, when started up will mount /var/lib/lxc/o1/delta0
as a writeably overlay on top of /var/lib/lxc/r0/rootfs, and use that as its
root filesystem.
From here you can clone o1 to a new container o2. This simply copies the
the overlayfs delta from o1 to o2, and you is done with
sudo lxc-clone -s o1 o2
LXC-SNAP
One of the obvious use cases of these snapshot clones is to support
incremental development of rootfs images. Make some changes, snapshot,
make some more changes, snapshot, revert…
lxc-snap is a small program using the lxc API to more easily support
this use case. You begin with a overlayfs backed container, make some
changes, snapshot, make some changes, snapshot… This is a simpler
model than manually using clone because you continue developing the same
container, o1, while the snapshots are kept away until you need them.
EXAMPLE
Create your first container
sudo lxc-create -t ubuntu -n base
sudo lxc-clone -s -B overlayfs base mysql
Now make initial customizations, and snapshot:
sudo lxc-snap mysql
This will create a snapshot container /var/lib/lxcsnaps/mysql_0. You can actually
start it up if you like using ‘sudo lxc-start -P /var/lib/lxcsnaps -n mysql_0′.
(However, that is not recommended, as it will cause changes in the rootfs)
Next, make some more changes. Write a comment about the changes you made in this
version,
echo “Initial definition of table doomahicky” > /tmp/comment
sudo lxc-snap -c /tmp/comment mysql
Do this a few times. Now you realize you lost something you needed. You can
see the list of containers which have snapshots using
lxc-snap -l
and the list of versions of container mysql using
lxc-snap -l mysql
Note that it shows you the time when the snapshot was created, and any comments
you logged with the snapshot. You see that what you wanted was version 2, so
recover that snapshot. You can destroy container mysql and restore version 2
to it, or (I would recommend) use a different name to restore the snapshot to.
Use a different name with:
sudo lxc-snap -r mysql_2 mysql_tmp
or destroy mysql and restore the snapshot to it using
sudo lxc-destroy -n mysql
sudo lxc-snap -r mysql_2 mysql
When you’d like to export a container, you can clone it back to a directory
backed container and tar it up:
sudo lxc-clone -B dir mysql mysql_ship
sudo tar zcf /srv/mysql_ship.tar.gz /var/lib/lxc/mysql_ship
BUILD AND INSTALL
To use lxc-snap, you currently need to be using lxc from the ubuntu-lxc
daily ppa. On an ubuntu system (at least 12.04) you can
sudo add-apt-repository ppa:ubuntu-lxc/daily
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install lxc
lxc-snap will either become a part of the lxc package, or will become a
separate package. Currently it is available at
git://github.com/hallyn/lxc-snap. Fetch it using:
git clone git://github.com/hallyn/lxc-snap
Then build lxc-snap by typing ‘make’.
cd lxc-snap
make
Install into /usr/bin by typing
sudo DESTDIR=/usr make install
or install into /home/$USER/bin by typing
mkdir /home/$USER/bin
DESTDIR=/home/$USER make installlxc-snap: lxc container snapshot management tool
BACKGROUND
Lxc supports containers backed by overlayfs snapshots. The way this is
typically done is to create a container backed by a regular directory,
then create a new container which mounts the first container’s rootfs
as a read-only lower mount, with a new private delta directory as
its read-write upper mount. For instance, you could
sudo lxc-create -t ubuntu -n r0 # create a normal directory
sudo lxc-clone -B overlayfs -s r0 o1 # create overlayfs clone
The second container, o1, when started up will mount /var/lib/lxc/o1/delta0
as a writeably overlay on top of /var/lib/lxc/r0/rootfs, and use that as its
root filesystem.
From here you can clone o1 to a new container o2. This simply copies the
the overlayfs delta from o1 to o2, and you is done with
sudo lxc-clone -s o1 o2
LXC-SNAP
One of the obvious use cases of these snapshot clones is to support
incremental development of rootfs images. Make some changes, snapshot,
make some more changes, snapshot, revert…
lxc-snap is a small program using the lxc API to more easily support
this use case. You begin with a overlayfs backed container, make some
changes, snapshot, make some changes, snapshot… This is a simpler
model than manually using clone because you continue developing the same
container, o1, while the snapshots are kept away until you need them.
EXAMPLE
Create your first container
sudo lxc-create -t ubuntu -n base
sudo lxc-clone -s -B overlayfs base mysql
Now make initial customizations, and snapshot:
sudo lxc-snap mysql
This will create a snapshot container /var/lib/lxcsnaps/mysql_0. You can actually
start it up if you like using ‘sudo lxc-start -P /var/lib/lxcsnaps -n mysql_0′.
(However, that is not recommended, as it will cause changes in the rootfs)
Next, make some more changes. Write a comment about the changes you made in this
version,
echo “Initial definition of table doomahicky” > /tmp/comment
sudo lxc-snap -c /tmp/comment mysql
Do this a few times. Now you realize you lost something you needed. You can
see the list of containers which have snapshots using
lxc-snap -l
and the list of versions of container mysql using
lxc-snap -l mysql
Note that it shows you the time when the snapshot was created, and any comments
you logged with the snapshot. You see that what you wanted was version 2, so
recover that snapshot. You can destroy container mysql and restore version 2
to it, or (I would recommend) use a different name to restore the snapshot to.
Use a different name with:
sudo lxc-snap -r mysql_2 mysql_tmp
or destroy mysql and restore the snapshot to it using
sudo lxc-destroy -n mysql
sudo lxc-snap -r mysql_2 mysql
When you’d like to export a container, you can clone it back to a directory
backed container and tar it up:
sudo lxc-clone -B dir mysql mysql_ship
sudo tar zcf /srv/mysql_ship.tar.gz /var/lib/lxc/mysql_ship
BUILD AND INSTALL
To use lxc-snap, you currently need to be using lxc from the ubuntu-lxc
daily ppa. On an ubuntu system (at least 12.04) you can
sudo add-apt-repository ppa:ubuntu-lxc/daily
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install lxc
lxc-snap will either become a part of the lxc package, or will become a
separate package. Currently it is available at
git://github.com/hallyn/lxc-snap. Fetch it using:
git clone git://github.com/hallyn/lxc-snap
Then build lxc-snap by typing ‘make’.
cd lxc-snap
make
Install into /usr/bin by typing
sudo DESTDIR=/usr make install
or install into /home/$USER/bin by typing
mkdir /home/$USER/bin
DESTDIR=/home/$USER make install
Note that lxc-snap is in very early development. It’s usage may
change over time, and as it currently ships a copy of liblxc .h
files it needs, it may occasionally break and need to be updated
from git and rebuilt. Using a package (as soon as it becomes
available) is recommended.
Note that lxc-snap is in very early development. It’s usage may
change over time, and as it currently ships a copy of liblxc .h
files it needs, it may occasionally break and need to be updated
from git and rebuilt. Using a package (as soon as it becomes
available) is recommended.
lxc package, or will become a
separate package. Currently it is available at
git://github.com/hallyn/lxc-snap. Fetch it using:
git clone git://github.com/hallyn/lxc-snap
Then build lxc-snap by typing ‘make’.
cd lxc-snap
make
Install into /usr/bin by typing
sudo DESTDIR=/usr make install
or install into /home/$USER/bin by typing
mkdir /home/$USER/bin
DESTDIR=/home/$USER make install
Note that lxc-snap is in very early development. It’s usage may
change over time, and as it currently ships a copy of liblxc .h
files it needs, it may occasionally break and need to be updated
from git and rebuilt. Using a package (as soon as it becomes
available) is recommended.