Thursday, November 29, 2012

How To Convert An ext3/ext4 Root File System To btrfs

http://www.howtoforge.com/how-to-convert-an-ext3-ext4-root-file-system-to-btrfs-on-ubuntu-12.10


ext3 and ext4 file systems can be converted to btrfs. For non-root file systems, this can be done online (i.e., without reboot), while for root file systems we need to boot into some kind of rescue system or Live CD. This guide explains how to convert an ext3 or ext4 root file system into btrfs on Ubuntu 12.10 and how to roll back to ext3/ext4 again if desired.
I do not issue any guarantee that this will work for you!

1 Preliminary Note

I'm using a system here with one large / partition (i.e., no /boot partition) and without LVM. During initial installation, it was installed with the option Guided - Use entire disk. For different partition schemes, the procedure might differ.
My hard drive is named /dev/sda in this tutorial, my system partition is /dev/sda1.
I will use an Ubuntu 12.10 Desktop Live-CD as the rescue system throughout this tutorial.
I will show two ways of doing the conversion: one where we simply convert the system partition and change /etc/fstab, and one where we create the subvolumes @ and @home according to Ubuntu's btrfs partition layout (see https://help.ubuntu.com/community/btrfs) - this is slightly more complicated, but a must if you want to use apt-btrfs-snapshot which requires this subvolume layout.
A note for Ubuntu users:
Because we must run all the steps from this tutorial with root privileges, we can either prepend all commands in this tutorial with the string sudo, or we become root right now by typing
sudo su

2 Install btrfs-tools

On the original system, before we boot into the rescue system, install btrfs-tools so that the package is available when we chroot to the system partition in the rescue system (it is possible that we don't have a network connection for installing the package when we are chrooted into the system partition in the rescue system, that's why we should install it now):
apt-get install btrfs-tools
Now we must boot into some kind of rescue system with btrfs support. For example, you can insert the Ubuntu 12.10 Desktop CD into the CD drive (make sure it has the same architecture - i386 or x86_64 - as this system) and reboot:
reboot

3 Doing A Simple Conversion (No @ And @home Subvolumes)

In the rescue system, log in as root. Make sure that btrfs-tools are installed:
apt-get install btrfs-tools
Do a file system check...
fsck -f /dev/sda1
... and then run the conversion tool:
btrfs-convert /dev/sda1
root@ubuntu:~# btrfs-convert /dev/sda1
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
root@ubuntu:~#
Next we mount our system partition and chroot to it:
mount /dev/sda1 /mnt
for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
chroot /mnt
ls -l
As you see, there's now a folder called ext2_saved which contains an image of our system partition before the conversion (with the original ext3 or ext4 file system). This image can be used to do a rollback later on.
root@ubuntu:/# ls -l
total 20
drwxr-xr-x   1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x   1 root root  326 Nov 23 18:38 boot
drwxr-xr-x  14 root root 4060 Nov 23 18:38 dev
drwxr-xr-x   1 root root 2820 Nov 23 18:38 etc
dr-xr-xr-x   1 root root   10 Nov 23 18:40 ext2_saved
drwxr-xr-x   1 root root   26 Nov 22 13:16 home
lrwxrwxrwx   1 root root   32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx   1 root root   33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x   1 root root  982 Nov 22 13:15 lib
drwxr-xr-x   1 root root   40 Nov 22 13:10 lib64
drwx------   1 root root    0 Nov 22 13:10 lost+found
drwxr-xr-x   1 root root   10 Nov 22 13:10 media
drwxr-xr-x   1 root root    0 Oct  9 17:03 mnt
drwxr-xr-x   1 root root    0 Oct 17 18:22 opt
dr-xr-xr-x 186 root root    0 Nov 23 18:38 proc
drwx------   1 root root   68 Nov 23 18:38 root
drwxr-xr-x   1 root root    0 Nov 22 13:16 run
drwxr-xr-x   1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x   1 root root    0 Jun 11 20:36 selinux
drwxr-xr-x   1 root root    0 Oct 17 18:22 srv
dr-xr-xr-x  13 root root    0 Nov 23 18:38 sys
drwxrwxrwt   1 root root    0 Nov 23 18:38 tmp
drwxr-xr-x   1 root root   70 Nov 22 13:10 usr
drwxr-xr-x   1 root root  114 Nov 23 18:38 var
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@ubuntu:/#
Run
blkid /dev/sda1
root@ubuntu:/# blkid /dev/sda1
/dev/sda1: UUID="63accb30-95b9-4268-ae1e-6d0ad3ef3a9d" UUID_SUB="d9521f58-91e5-44a7-a52e-9cfb0b3056ca" TYPE="btrfs"
root@ubuntu:/#
We need the UUID from the output for modifying /etc/fstab:
vi /etc/fstab
Comment out the old / partition line and add a new one. Replace the UUID with the UUID from the blkid output, then replace ext4 (or ext3) with btrfs, and finally replace the mount options (e.g. errors=remount-ro) with the string defaults:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sda1 during installation
#UUID=ad50ef37-797d-44ea-a8fa-ae61abe4d00f /               ext4    errors=remount-ro 0       1
UUID=63accb30-95b9-4268-ae1e-6d0ad3ef3a9d /               btrfs   defaults 0       1
# swap was on /dev/sda5 during installation
UUID=4dc578f3-c65c-4013-b643-72e70455b21b none            swap    sw              0       0
Next open /etc/grub.d/00_header...
vi /etc/grub.d/00_header
... and comment out line 93 (if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi):
[...]
function recordfail {
  set recordfail=1
  #if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
}
[...]
If you don't do this, you will get the error...
error: sparse file not allowed
... when you boot from the btrfs file system, and you have to press ENTER to proceed with the boot process (see Ubuntu 12.10 + btrfs: error: sparse file not allowed).
Next run
update-grub
grub-install /dev/sda
and exit from the chroot:
exit
Reboot into the normal system (make sure you remove the Live CD from the CD drive):
reboot
If everything goes well, the system should come up without problems, now running on btrfs.
ls -l /
As you see, there's still the ext2_saved folder with the image of the original system in case you want to do a rollback:
root@server1:~# ls -l /
total 20
drwxr-xr-x   1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x   1 root root  326 Nov 23 18:38 boot
drwxr-xr-x  14 root root 4080 Nov 23 18:43 dev
drwxr-xr-x   1 root root 2820 Nov 23 18:43 etc
dr-xr-xr-x   1 root root   10 Nov 23 18:40 ext2_saved
drwxr-xr-x   1 root root   26 Nov 22 13:16 home
lrwxrwxrwx   1 root root   32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx   1 root root   33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x   1 root root  982 Nov 22 13:15 lib
drwxr-xr-x   1 root root   40 Nov 22 13:10 lib64
drwx------   1 root root    0 Nov 22 13:10 lost+found
drwxr-xr-x   1 root root   10 Nov 22 13:10 media
drwxr-xr-x   1 root root    0 Oct  9 17:03 mnt
drwxr-xr-x   1 root root    0 Oct 17 18:22 opt
dr-xr-xr-x 100 root root    0 Nov 23 18:43 proc
drwx------   1 root root   84 Nov 23 18:42 root
drwxr-xr-x  17 root root  620 Nov 23 18:43 run
drwxr-xr-x   1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x   1 root root    0 Jun 11 20:36 selinux
drwxr-xr-x   1 root root    0 Oct 17 18:22 srv
dr-xr-xr-x  13 root root    0 Nov 23 18:43 sys
drwxrwxrwt   1 root root    0 Nov 23 18:42 tmp
drwxr-xr-x   1 root root   70 Nov 22 13:10 usr
drwxr-xr-x   1 root root  114 Nov 23 18:38 var
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@server1:~#
ls -l /ext2_saved/
root@server1:~# ls -l /ext2_saved/
total 1594360
-r-------- 1 root root 31137464320 Jan  1  1970 image
root@server1:~#
In fact, this is not a folder, it's a btrfs subvolume:
btrfs subvolume list /
root@server1:~# btrfs subvolume list /
ID 256 top level 5 path ext2_saved
root@server1:~#
If you are sure you want to stay with btrfs and don't want to do a rollback, you can delete that subvolume to free up some space:
btrfs subvolume delete /ext2_saved
Afterwards, the image should be gone:
ls -l /
root@server1:~# ls -l /
total 16
drwxr-xr-x  1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x  1 root root  326 Nov 23 18:38 boot
drwxr-xr-x 14 root root 4080 Nov 23 18:43 dev
drwxr-xr-x  1 root root 2820 Nov 23 18:43 etc
drwxr-xr-x  1 root root   26 Nov 22 13:16 home
lrwxrwxrwx  1 root root   32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx  1 root root   33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x  1 root root  982 Nov 22 13:15 lib
drwxr-xr-x  1 root root   40 Nov 22 13:10 lib64
drwx------  1 root root    0 Nov 22 13:10 lost+found
drwxr-xr-x  1 root root   10 Nov 22 13:10 media
drwxr-xr-x  1 root root    0 Oct  9 17:03 mnt
drwxr-xr-x  1 root root    0 Oct 17 18:22 opt
dr-xr-xr-x 98 root root    0 Nov 23 18:43 proc
drwx------  1 root root   84 Nov 23 18:42 root
drwxr-xr-x 17 root root  620 Nov 23 18:43 run
drwxr-xr-x  1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x  1 root root    0 Jun 11 20:36 selinux
drwxr-xr-x  1 root root    0 Oct 17 18:22 srv
dr-xr-xr-x 13 root root    0 Nov 23 18:43 sys
drwxrwxrwt  1 root root    0 Nov 23 18:42 tmp
drwxr-xr-x  1 root root   70 Nov 22 13:10 usr
drwxr-xr-x  1 root root  114 Nov 23 18:38 var
lrwxrwxrwx  1 root root   29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx  1 root root   29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@server1:~#

4 Doing A Conversion According To Ubuntu Subvolume Layout (With @ And @home Subvolumes)

 
This is a bit more complicated and took me some time to figure out. It is absolutely necessary to follow each step in the same order as described!
In the rescue system, log in as root. Make sure that btrfs-tools are installed:
apt-get install btrfs-tools
Do a file system check...
fsck -f /dev/sda1
... and then run the conversion tool:
btrfs-convert /dev/sda1
root@ubuntu:~# btrfs-convert /dev/sda1
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
root@ubuntu:~#
Next we mount our system partition and chroot to it:
mount /dev/sda1 /mnt
for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
chroot /mnt
ls -l
As you see, there's now a folder called ext2_saved which contains an image of our system partition before the conversion (with the original ext3 or ext4 file system). This image can be used to do a rollback later on.
root@ubuntu:/# ls -l
total 20
drwxr-xr-x   1 root root 1938 Nov 22 13:15 bin
drwxr-xr-x   1 root root  326 Nov 23 18:38 boot
drwxr-xr-x  14 root root 4060 Nov 23 18:38 dev
drwxr-xr-x   1 root root 2820 Nov 23 18:38 etc
dr-xr-xr-x   1 root root   10 Nov 23 18:40 ext2_saved
drwxr-xr-x   1 root root   26 Nov 22 13:16 home
lrwxrwxrwx   1 root root   32 Nov 22 13:11 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx   1 root root   33 Nov 22 13:11 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x   1 root root  982 Nov 22 13:15 lib
drwxr-xr-x   1 root root   40 Nov 22 13:10 lib64
drwx------   1 root root    0 Nov 22 13:10 lost+found
drwxr-xr-x   1 root root   10 Nov 22 13:10 media
drwxr-xr-x   1 root root    0 Oct  9 17:03 mnt
drwxr-xr-x   1 root root    0 Oct 17 18:22 opt
dr-xr-xr-x 186 root root    0 Nov 23 18:38 proc
drwx------   1 root root   68 Nov 23 18:38 root
drwxr-xr-x   1 root root    0 Nov 22 13:16 run
drwxr-xr-x   1 root root 3094 Nov 23 18:38 sbin
drwxr-xr-x   1 root root    0 Jun 11 20:36 selinux
drwxr-xr-x   1 root root    0 Oct 17 18:22 srv
dr-xr-xr-x  13 root root    0 Nov 23 18:38 sys
drwxrwxrwt   1 root root    0 Nov 23 18:38 tmp
drwxr-xr-x   1 root root   70 Nov 22 13:10 usr
drwxr-xr-x   1 root root  114 Nov 23 18:38 var
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
lrwxrwxrwx   1 root root   29 Nov 22 13:11 vmlinuz.old -> boot/vmlinuz-3.5.0-17-generic
root@ubuntu:/#
Run
blkid /dev/sda1
root@ubuntu:/# blkid /dev/sda1
/dev/sda1: UUID="d6c9b57b-caa1-4a88-b659-930c130b337f" UUID_SUB="ea7b087e-683f-4f43-8007-bb5281f64e4c" TYPE="btrfs"
root@ubuntu:/#
We need the UUID from the output for modifying /etc/fstab:
vi /etc/fstab
Comment out the old / partition line and add a new one. Replace the UUID with the UUID from the blkid output, then replace ext4 (or ext3) with btrfs, and finally replace the mount options (e.g. errors=remount-ro) with the string defaults,subvol=@ - this makes the system boot from the subvolume @ (which is to e created yet) instead of the top-level volume:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sda1 during installation
#UUID=ad50ef37-797d-44ea-a8fa-ae61abe4d00f /               ext4    errors=remount-ro 0       1
UUID=d6c9b57b-caa1-4a88-b659-930c130b337f /               btrfs   defaults,subvol=@ 0       1
# swap was on /dev/sda5 during installation
UUID=4dc578f3-c65c-4013-b643-72e70455b21b none            swap    sw              0       0
Next open /etc/grub.d/00_header...
vi /etc/grub.d/00_header
... and comment out line 93 (if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi):
[...]
function recordfail {
  set recordfail=1
  #if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
}
[...]
If you don't do this, you will get the error...
error: sparse file not allowed
... when you boot from the btrfs file system, and you have to press ENTER to proceed with the boot process (see Ubuntu 12.10 + btrfs: error: sparse file not allowed).
Before we update the GRUB boot loader, we must make sure that it will include the boot option rootflags=subvol=@. Check the output of
grub-mkconfig | grep " ro "
If it looks like this (i.e., it contains rootflags=subvol=@), everything is ok, and you can proceed with the update-grub command a few lines below:
root@ubuntu:/# grub-mkconfig | grep " ro "
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-17-generic
Found initrd image: /boot/initrd.img-3.5.0-17-generic
        linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro rootflags=subvol=@
                linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro rootflags=subvol=@
                linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro recovery nomodeset rootflags=subvol=@
Found memtest86+ image: /boot/memtest86+.bin
done
root@ubuntu:/#
But if the output looks as follows (no appearance of rootflags=subvol=@)...
root@ubuntu:/# grub-mkconfig | grep " ro "
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-17-generic
Found initrd image: /boot/initrd.img-3.5.0-17-generic
        linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro
                linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro
                linux   /boot/vmlinuz-3.5.0-17-generic root=UUID=d6c9b57b-caa1-4a88-b659-930c130b337f ro recovery nomodeset
Found memtest86+ image: /boot/memtest86+.bin
done
root@ubuntu:/#
... we must modify /etc/grub.d/10_linux:
vi /etc/grub.d/10_linux
Comment out lines 67 and 68 and add rootsubvol="@" in line 69:
[...]
case x"$GRUBFS" in
    xbtrfs)
        #rootsubvol="`make_system_path_relative_to_its_root /`"
        #rootsubvol="${rootsubvol#/}"
        rootsubvol="@"
        if [ "x${rootsubvol}" != x ]; then
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
        fi;;
    xzfs)
        rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
        bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
        LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
        ;;
esac
[...]
Now we continue with updating the GRUB boot loader:
update-grub
grub-install /dev/sda
Now we create the @ subvolume as a snapshot of the top level volume:
btrfs subvolume snapshot / /@
Then we create the @home subvolume...
btrfs subvolume create /@home
... and copy the contents from /home to it and make sure that /home and /@/home (which contains the same contents as /home because /@ is a snapshot of /) are empty so that the @home subvolume can be mounted to /home when we reboot the system:
rsync --progress -aHAX /home/* /@home
rm -fr /home/*
rm -fr /@/home/*
Then open /etc/fstab...
vi /etc/fstab
... and add the line UUID=d6c9b57b-caa1-4a88-b659-930c130b337f /home btrfs defaults,subvol=@home 0 2 (make sure you use the same UUID as for the / partition!) to it:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sda1 during installation
#UUID=ad50ef37-797d-44ea-a8fa-ae61abe4d00f /               ext4    errors=remount-ro 0       1
UUID=d6c9b57b-caa1-4a88-b659-930c130b337f /               btrfs   defaults,subvol=@ 0       1
UUID=d6c9b57b-caa1-4a88-b659-930c130b337f /home               btrfs   defaults,subvol=@home 0       2
# swap was on /dev/sda5 during installation
UUID=4dc578f3-c65c-4013-b643-72e70455b21b none            swap    sw              0       0
Next copy the modifed fstab to our @ subvolume:
cp /etc/fstab /@/etc/fstab
Leave the chroot:
exit
Unmount /mnt and mount the @ subvolume to it:
umount /mnt/dev/pts
umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt
mount -o subvol=@ /dev/sda1 /mnt
for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
chroot /mnt
grub-mkconfig | grep " ro "

Top 8 Web Hosting Control Panels

http://www.linuxlinks.com/article/20121123193717390/WebHostingControlPanels.html


A Web hosting control panel is a web-based interface that enables users to manage hosted services in a single location. Control panels can manage email account configuration, databases, FTP users' accounts, monitor webspace and bandwidth consumed, provide file management functionality, create backups, create subdomains and much more.

Web hosting control panels offer an attractive solution to developers and designers that host multiple web sites on virtual private servers and dedicated servers. This type of server management software simplifies the process of managing servers. By offering an easy to user interface, the control panels avoid the need to have expert knowledge of server administration.

Two of the most popular control panels are Plesk and cPanel. These are web-based graphical control panels that allow you to easily and intuitively administer websites, DNS, e-mail accounts, SSL certificates and databases.

However, they are both proprietary software. Hosting providers will charge a monthly fee for these control panels to be installed on a server. Fortunately, there is a wide range of open source software available to download at no cost that offers a real alternative to these proprietary solutions.
To provide an insight into the quality of software that is available, we have compiled a list of 8 high quality web hosting control panels tools that let users take full control of a web hosting account. We give our highest recommendations to Virtualmin, ISPConfig, and Kloxo.

Now, let's explore the 8 web hosting control panels at hand. For each title we have compiled its own portal page, a full description with an in-depth analysis of its features, a screenshot of the software in action, together with links to relevant resources and reviews.

Web Hosting Control Panels
Virtualmin Powerful and flexible web hosting control panel based on Webmin
ISPConfig BSD-licensed, hosting control panel supporting many Linux distributions
Kloxo Scriptable, distributed and object oriented Hosting Platform
OpenPanel User friendly, modular platform for developers
ZPanelX Complete control panel written in PHP
GNUPanel Debian-centric web hosting automation software
ispCP Multi Server Control and Administration Panel
DTC Offers every day server administration over the web

Wednesday, November 28, 2012

64 Open Source Tools for the Mobile Workforce

http://www.datamation.com/open-source/64-open-source-tools-for-the-mobile-workforce-1.html


Many within the open source community have recently bemoaned the lack of open source apps for mobile devices. However, their contention that open source has ignored the ongoing transition to a post-PC world isn't entirely accurate.
While it's true that the number open source mobile apps haven't kept pace with the exponential growth of mobile apps in general, open source developers are slowly but steadily adding to the library of open source apps for smartphones and tablets.
In addition, many apps that aren't open source themselves have been created using open source development tools. Arguably, some of the best mobile development tools out there are available under open source licenses, and this category continues to grow quickly.
Also, many existing open source projects have updated their feature set to add mobile capabilities and access from mobile devices.
Thanks to all of this progress, we were been able to extend our list of open source tools for the mobile workforce from the 50 projects we featured last year to 64 this year. The section on mobile development tools alone doubled as many notable projects are growing in popularity.
As always, if you'd like to recommend other open source mobility tools to our list, feel free to note them in the comments section below.

Mobile Development Tools

1. PhoneGap
Used by more than 400,000 developers, PhoneGap boasts that it's the "the only free open source framework that supports 7 mobile platforms": iOS, Android, Blackberry, Windows Phone, Palm WebOS, Bada and Symbian. With it, developers can build cross-platform mobile apps using HTML, CSS and Javascript. Operating System: Windows, iOS, Android, Blackberry, Windows Phone, others.
2. Rhodes
Ruby-based Rhodes allows developers to write code once and turn it into native mobile applications for multiple platforms. An enterprise version with a commercial license and support is available for a fee. Operating System: Windows, Linux, OS X, iPhone, Android, BlackBerry, Symbian, Windows Phone.
3. ZK
Downloaded more than 1.5 million times, ZK calls itself the "leading enterprise Java Web framework." It's known for allowing developers to build Web apps in Java alone--without knowing Ajax or JavaScript--and it can also be used to build mobile apps. Operating System: OS Independent.
4. Appcelerator Titanium
Appcelerator claims that Titanium is "the first mobile platform to combine the flexibility of open source development technologies with the power of cloud services." It supports the development of iOS, Android and mobile Web apps using JavaScript. Operating System: Windows, Linux, OS X, iOS, Android.
5. IPFaces
Designed to make it easier for experienced Web developers build mobile apps, IPFaces excels at the creation of form-heavy mobile applications. Enterprise support and other professional services are available. Operating System: OS Independent for the developer; creates apps for iOS, Android, BlackBerry, others.
6. JQuery Mobile
This HTML 5-based framework offers a simple drag-and-drop interface for creating cross-platform mobile Web applications and websites. Notable features include a theme roller and a download builder. Operating System: iOS, Android, BlackBerry, Windows Phone, others.
7. JQTouch
Want to do Web development from your iOS or Android device? JQTouch makes it possible. Notable features include easy setup, native WebKit animations, callback events, flexible themes, swipe detection and more. Operating System: iOS, Android.
8. Jo
Jo describes itself as a "simple app framework for HTML5." It allows you to build native-like apps in JavaScript and CSS. Operating System: iOS, Android, webOS, BlackBerry, Chrome OS.
9. Sencha Touch
Another JavaScript-based HTML5 framework, Sencha Touch is used by more than 500,000 mobile developers, including more than half of the Fortune 100 and 8 of the world's top 10 financial institutions. In addition to the free open source license, Sencha also offers a free commercial license and paid support. Operating System: OS Independent.
10. Qt
Used for both mobile and desktop development, Qt is a cross-platform application and UI framework that supports both C++ and a JavaScript-like language called QML. Commercially licensed versions are available from Digia. Operating System: Windows, OS X, Linux.
11. MoSync SDK
This cross-platform software development kit allows you write mobile apps in C/C++ or HTML5/JavaScript--or a combination of both. Developers can use it alongside MoSync Reload, an open source development tool that makes it easy to see how apps will look on various mobile platforms. Operating System: Windows, OS X, Android, iOS, Windows Mobile, Symbian.
12. Restkit
Restkit aims to simplify the process of building apps that interact with RESTful Web services. Features include a simple HTTP request/response system, integration with Apple’s Core Data framework, database seeding, object mapping system, pluggable parsing layer and more. Operating System: iOS.
13. Molly
This rapid development framework has a goal of making the creation of mobile portals as quick and painless as possible. Developed by Oxford University, it's a good option for other universities that also use the Sakai Virtual Learning Environment. Operating System: Linux.
14. OpenMEAP
An enterprise-class HTML5 mobile application development platform, OpenMEAP boasts top-notch end-to-end security. It enables rapid application development and supports multiple mobile OSes. Operating System: Android, iOS, BlackBerry.
15. Kurogo
Created by Modo Labs, Kurogo is a mobile-optimized middleware platform that was based on the MIT Mobile Framework. It makes is easy to create portals, mobile websites and apps that aggregate data and content from multiple sources. Operating System: Windows, Linux, iOS.
16. Mobl
Based on HTML5 and JavaScript, mobl is a programming language designed specifically for creating mobile apps. It's statically typed and comes with an Eclipse-based IDE. Operating System: Windows, Linux, OS X.
17. AML
This XML-based language aim to makes it possible to build cross-platform, data-driven applications that run natively. However, currently it only supports Android. Operating System: Android.
18. AllJoyn
AllJoyn allows developers to create applications with OS-agnostic, proximity-based device-to-device communications. The company behind the project is currently running a contest where they plan to give away $170,000 in cash and prizes for great apps built with AllJoyn's framework. Operating System: Windows, OS X, iOS, Android.


19. Moai
Describing itself as "the mobile platform for pro game developers," Moai offers both an SDK for game development and cloud-based services like leaderboards, achievements, etc. In addition to the free open source version, it's also available in a number of fee-based versions, with prices depending on usage. Operating System: Windows, OS X, iOS, Android, Chrome.
20. QuickConnectFamily Hybrid
Boasting that it can speed mobile development by up to ten times, this app claims to be the "first full framework for JavaScript, CSS, and HTML development of installable, application store ready apps." It's highly modular and includes a built-in library for SQLite database calls. Operating System: Windows, Linux, OS X, iOS, Android.

Device Syncing

21. Funambol
The open source Funambol software is a client-server solution for syncing contacts, calendars, tasks and notes. The company also offers commercial, cloud-based syncing solutions for mobile operators and personal use. Operating System: Android, iOS, Windows Mobile, Symbian.

Enterprise Mobile Management

22. OpenMobster
OpenMobster offers an open source mobile backed-as-a-service for enterprises and includes capabilities like syncing, HTML5 hybrid app development tools(based on PhoneGap) and push notifications. Fee-based consulting and integration services are also available. Operating System: Windows, Linux, OS X.
23. Knappsack
This mobile application management platform offers tools for securely uploading, managing and sharing apps among a group of users. The open source version is free, and the company also offers both free and paid hosted versions. Operating System: Windows, Linux, OS X, iOS, Android.
24. ForgeRock
ForgeRock offers a platform of mobile identity management solutions for enterprises. The tools are also available on a subscription basis, which adds support and real-time access to software updates. Operating System: Linux.

M-Commerce

25. MobileCartly
This open source mobile shopping cart boasts PayPal integration, advanced management features, real-time statistics and "no programming skills required." It's also available as a WordPress plugin. Operating System: OS Independent.

Mobile Ad Server

26. mAdserve
The self-proclaimed "world's most powerful open source ad server," mAdserve offers tools for managing ad campaigns across 30 different ad networks. Premium services are also available. Operating System: Windows, Linux, OS X, iOS, Android.

Mobile App Management

27. QuincyKit
This helpful kit collects and reports crash data and user feedback on your mobile apps. It's also available as a hosted service from HockeyApp. Operating System: OS X, iOS.

Mobile App Repository

28. F-Droid
This collection makes it easy to download and stay up to date with dozens of open source apps for Android. It provides details about all of the versions of the apps that are available and allows you to choose which apps you use. Operating System: Android.

Mobile Blogging

29. WordPress for Android, WordPress for iOS, WordPress for BlackBerry, World Press for Windows Phone
Update your blog from your smartphone or tablet with one of WordPress's mobile clients. Versions for Nokia phones and WebOS are also available. Operating System: Android, iOS, BlackBerry, Windows Phone.

Mobile Content Management

30. Joomla
Downloaded more than 35 million times, Joomla is the content management system for around 2.7 percent of the Web. The project offers a number of extensions that can help you optimize your site for mobile viewing or manage your site from your smartphone or tablet. Operating System: Windows, Linux, OS X.
31. Drupal
The link above offers a guide for those who want to use Drupal for mobile app and website development. The project is also currently working on a mobile initiative to expand the capabilities of this popular content management system in its next major release. Operating System: Windows, Linux, OS X.
32. Plone
One of the most popular open source projects of any kind, Plone is another widely used content management system. It has a reputation for excellent security features and can be used to create mobile Websites. Operating System: Windows, Linux, OS X.

Mobile CRM

33. SugarCRM
An open source alternative to Salesforce.com, SugarCRM counts Coca-Cola, Chevrolet, Men's Wearhouse and other well-known brands among its users. The open source community version includes a mobile web interface, and the paid cloud-based versions come with native apps for Andriod, iOS and BlackBerry. Operating System: Windows, Linux, OS X, Android, iOS, BlackBerry.
34. vtiger CRM
Downloaded more than 2.8 million times, this CRM suite for small businesses can be accessed from any device at any time. Commercial versions are also available, and paid native mobile clients can be downloaded from the App Store or Google Play. Operating System: Windows, Linux, iOS, Android.
35. openCRX
OpenCRX combines Web-based customer relationship management capabilities with groupware that will sync with smartphones and tablets. Track your sales and accounts from any browser. Operating System: OS Independent.

Mobile Groupware

36. Zarafa
The self-proclaimed "best open source email and collaboration software," Zarafa is an alternative to Microsoft Exchange that can sync with mobile devices. In addition, it has a mobile device management plug-in that includes remote wipe capabilities. Paid support and hosted versions are also available. Operating System: Linux.
37. K-9
Based on the original Android email client, K-9 is designed to "make it easy to chew through large volumes of email." Key features include push IMAP support, attachment saving, BCC to self, signatures, message flagging, multiple identities and more. Operating System: Android.


38. EGroupware
This open source groupware solution offers Web-based calendar, mail, project management and basic CRM that can be synced with most mobile devices via ActiveSync. Host the open source version yourself or use the fee-based cloud version. Operating System: OS Independent.
39. Zimbra
One of the most popular open source alternatives to Microsoft Exchange, Zimbra's mobile capabilities include groupware access via the mobile Web, syncing capabilities through ActiveSync, mobile administration and securities, and native support for iOS and BlackBerry. Operating System: OS Independent.
40. Group-Office
Another Web-based open source groupware and collaboration suite, Group-Office can sync with mobile devices running Android, iOS, BlackBerry and most other mobile operating systems. Paid support and a hosted option are also available. Operating System: OS Independent.
41. Simple Groupware
This project takes a standards-based approach to groupware, allowing for easy syncing with smartphones and tablets, as well as interoperability with Microsoft Outlook. The project developers claim you can deploy Simple Groupware and get up and running in less than ten minutes. Operating System: Windows, Linux.

Mobile ERP

42. ERP5
This full-featured ERP solution offers template skins that allow workers to access the suite from mobile devices. In addition to the open source version, the software is also available in a paid hosted version or a locally hosted version with paid support. Operating System: Linux.
43. mBravo
Web-based OpenBravo ERP can be accessed from any browser--including those on modern smartphones and tablets. The project also has an extensive plug-in library which includes the mBravo mobile client (see link above). In addition to the free community edition, numerous paid versions and services are available. Operating System: Android.
44. Open ERP
A combination ERP and CRM app, Open ERP offers modules for accounting, point of sale, warehouse management, human resources, purchasing and much more. It syncs with iOS and Android devices, and paid online and enterprise versions are also available. Operating System: Windows, Linux.
45. opentaps
This self-proclaimed "most advanced Open Source ERP + CRM solution" offers optional modules which add mobility features. Professional subscriptions are for sale, and the project also offers pre-configured images for using opentaps on Amazon Web Services' cloud. Operating System: Windows, Linux.

Mobile File Transfer

46. Connectbot
Need to transfer files to an Android device? This SSH client will allow to move your files securely. Operating System: Android.

Mobile Office Productivity

47. OI Notepad
This note-taking app allows users to create, edit and share notes with other users. It also has an extension that allows users to add audio to the text. Operating System: Android.
48. Edhita
Edhita is a simple text editor for iPad only. It doesn't have advanced word processing capabilities or the highlighting features you would see in a good code editor, but it does a solid job of text editing. Operating System: iPad.
49. OpenOffice Document Reader
This helpful app lets you view and read OpenOffice and LibreOffice documents from Android devices. It doesn't have editing capabilities, but does support spreadsheets. Operating System: Android.
50. NeoOffice Mobile
NeoOffice is a version of OpenOffice optimized for Macs. This version allows you to access and share files on iPhone and iPads as well. Operating System: OS X, iOS.


Mobile Operating Systems

51. Android
Currently the most popular mobile operating system available, Google's Android is an open source project. Numerous manufacturers, including Samsung, LG, HTC and Motorola, offer Android-based smartphones and tablets.
52. Firefox OS
Made by Mozilla, the group behind the Firefox browser, the Firefox OS promises to incorporate new Web standards and "free mobile platforms from the encumbrances of the rules and restrictions of existing proprietary platforms." The operating system isn't available on any handsets yet, but Mozilla has released an emulator that lets you try out the OS from a Web browser.
53. Tizen
Governed by the Linux Foundation, this project aims to develop a mobile operating system that relies primarily on HTML5 technology. The code is currently an alpha release.

Mobile Security Tools

54. ASEF
Short for "Android Security Evaluation Framework," ASEF analyzes Android apps from a security standpoint. It can test multiple apps at once to determine if they include malware or aggressive adware or if they are using excessive amounts of bandwidth. Operating System: Android.
55. The Guardian Project
This project has developed multiple security-focused Android apps, including Orbot (a version of Tor for secure mobile Web browsing), Orweb (an enhanced browser that supports proxies), Gibberbot (private, secure IM), OscuraCam (private, secure camera app) and Ostel (encrypted phone calls). Operating System: Android.
56. Csipsimple
Csipsimple offers secure calling and SIP features for Android devices. Video calling features are currently under development. Operating System: Android.
57. Droidwall
As you might guess from the name, Droidwall is a firewall for Android devices. It's based on IPtables and can also help you improve your battery life. Note that this app requires root access. Operating System: Android.
58. APG
APG (a.k.a. Android Privacy Guard) is an implementation of the OpenGPG encryption standard for Android. It's a work in progress, but already it allows users to encrypt, decrypt and sign messages, as well as to manage keys. Operating System: Windows.
59. KeePassDroid, 7Pas (KeePass for Windows Phone 7), iKeePass, KeePass for BlackBerry
A perennial favorite among open source fans, KeePass is a password safe that allows users to utilize different passwords for every website or service they access, while only remembering a single master password. Versions are now available for every major mobile operating system--and some of the minor ones as well. You can find a complete list of mobile versions at keepass.info/download. Operating System: Android, iOS, Windows Phone, BlackBerry.
60. Secrets for Android
Similar to KeePass, Secrets for Android also stores all your passwords in an encrypted password safe behind a master password. However, this app also lets you store other "secrets" in encrypted notes. Operating System: Android.

Mobile Testing

61. Akamai Mobitest
Want to know how quickly your website will load on an iPhone 4 in Cambridge, Mass.? This testing tool lets you check website performance on various smartphones in different locations. You can use it for free directly from the website or download the source code and run it from your own server. Operating System: OS Independent.

Mobile Utilities

62. Barnacle
Barnacle allows you to use your Android device as a WiFi hotspot, so that you can connect your PCs to the Internet via your wireless data connection. Note that this app requires root access. Operating System: Android.
63. Open Manager
This project offers an alternative file manager for Android that makes it easy to cut, copy, paste, delete, rename, backup and zip files, as well as to install apps that don't come from Google Play. It comes in both smartphone and tablet versions. Operating System: Android.

Remote Access

64. Android-VNC-Viewer
This VNC client allows you to use an Android device to connect to a VNC server. It allows you to view another system screen remotely. Operating System: Windows, Linux.

Top ten open source gifts for the holidays

http://opensource.com/life/12/11/top-ten-open-source-gifts-holidays

It's the most wonderful time of the year: time to give open source presents. The opensource.com team gathered ten of our favorite gadgets to help you pick out that perfect present for that special (open source) someone.
Some of these items will be a part of our 2012 open source gift guide giveaway.
Check them out:

Raspberry Pi

Image from Adafruit websiteThe Raspberry Pi is the popular credit-card sized Linux computer that was recently updated to come with 512 MB RAM. Use it as a media center, a tiny game station, or for anything you might want to do with a very small computer running any of several Linux distros. You can buy them from Element14 or Adafruit for $39.95



Arduino

Image from Adafruit websiteArduino is the well-known, open source prototyping board intended for artists, designers, and hobbyists. Use any of a myriad of shields with it to control lights, motors, sensors, and actuators. Arduinos are programmed using the Arduino programming language (based on C++) and can be used for standalone projects or with other devices and software. You can get them and accessories from several suppliers for $29.95.



MaKey MaKey

MaKey MaKey is an invention kit for makers of all levels. It works with multiple operating systems, and there are open source programs you can run that turn different materials into buttons and keys. Watch this video to see how:

You can buy them from JoyLabz for $49.95


BeagleBone

Image from BeagleBone websiteBeagleBone is another low-cost, credit-card-sized development board with a 720 MHz processor and 256 MB of RAM. BeagleBone can be complemented with "capes," stackable plug-in boards that augment BeagleBone's functionality. Currently, BeagleBoard (maker of BeagleBone) is running a contest for the best BeagleBone cape design. The deadline is December 31, so start developing now! You can get one here for $89.



Ice Tube Clock

Image from Adafruit websiteThe Adafruit Ice Tube Clock is a clock kit housed in a retro Russian display tube. It features a glowing blue tube with eight digits and an alarm. The clock is open source, so you can program the chip/firmware. You can get one from Adafruit for $85.



SparkFun Inventor's Kit for Arduino Image from Sparkfun website

This kit includes an Arduino Uno R3, the new baseplate, and lots of sensors, so it's great for beginners to get started with programmable electronics. You can get it from SparkFun for $94.95.



i-Racer

Image from Sparkfun websiteThe i-Racer is a remote-controlled car that's ready to drive right out of the box. The Bluetooth radio allows you to pair it with an Android device as the controller (or you can build your own controller). Get it from SparkFun for $29.95.



NanoNote

Image from Wikimedia pageThe NanoNote is a small-form-factor computing device. It has a 336 MHz processor, 2GB flash memory, a microSD slot, headphone jack, USB device and battery. According to its website, it's the perfect companion for open content. Their vision for the NanoNote is developers turning the device into an open content device like an ogg-video player or MIT OpenCourseWare gadget. The NanoNote boots Linux out of the box, and it's targeted at developers who love open hardware. Get it from Sharism for $149.



Flora

The Flora was just released by Adafruit for wearable electronics. Check out this video to see the Flora in action:

Get it from Adafruit for $24.95.



MintyBoost

Image from Adafruit websiteThe MintyBoost is a very small, simple kit by Adafruit to make a small USB charger for your mp3 player, camera, cell phone, or anything that charges over USB. Get one from Adafruit for $19.50.



This gift list was currated by the moderator team for opensource.com with help and suggestions from coworkers at Red Hat.

Tuesday, November 27, 2012

Rollback To A Working State With btrfs + apt-btrfs-snapshot On Ubuntu 12.10

http://www.howtoforge.com/rollback-to-a-working-state-with-btrfs-plus-apt-btrfs-snapshot-on-ubuntu-12.10


This tutorial explains how you can revert failed apt operations (like apt-get upgrade) and roll back to the previous system state with apt-btrfs-snapshot on an Ubuntu 12.10 system that uses the btrfs file system. apt-btrfs-snapshot creates a snapshot of the system before the apt operation. Being able to easily restore the previous system state after a failed apt operation takes away much of the pain system administrators have to deal with normally and is one of the greatest features of the btrfs file system.
I do not issue any guarantee that this will work for you!

1 Preliminary Note

In this tutorial I have installed the whole system on a btrfs file system, i.e., there's no separate /boot partition on an ext file system. If you use a separate /boot partition and apt installs anything in that partition (like a new kernel), you cannot undo changes to the /boot partition with apt-btrfs-snapshot- only changes on the btrfs partition can be reverted.
My hard drive is named /dev/sda in this tutorial, my system partition is /dev/sda1.
A note for Ubuntu users:
Because we must run all the steps from this tutorial with root privileges, we can either prepend all commands in this tutorial with the string sudo, or we become root right now by typing
sudo su

2 Install apt-btrfs-snapshot

apt-btrfs-snapshot can be installed as follows:
apt-get install apt-btrfs-snapshot
To check if apt-btrfs-snapshot is able to create snapshots on apt operations, run
apt-btrfs-snapshot supported
It should display:
root@server1:~# apt-btrfs-snapshot supported
Supported
root@server1:~#
If it doesn't, your btrfs subvolume layout probably differs from Ubuntu's default layout which is as follows:
  • @ subvolume: mounted to /.
  • @home subvolume: mounted to /home.
This is the default Ubuntu subvolume layout:
btrfs subvolume list /
root@server1:~# btrfs subvolume list /
ID 256 top level 5 path @
ID 258 top level 5 path @home
root@server1:~#
If apt-btrfs-snapshot supports your system, you can proceed to chapter 3.

3 Do An apt Operation

Now let's do some apt operation like apt-get upgrade to test if we can rollback to the previous state.
Update your package database...
apt-get update
... and upgrade your system:
apt-get upgrade
root@server1:~# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  linux-headers-generic linux-image-generic
The following packages will be upgraded:
  apport base-files isc-dhcp-client isc-dhcp-common libwhoopsie0 linux-generic lsb-base lsb-release python3-apport python3-distupgrade python3-problem-report python3.2 python3.2-minimal
  ubuntu-release-upgrader-core vim vim-common vim-runtime vim-tiny whoopsie
19 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Need to get 14.4 MB of archives.
After this operation, 3,072 B of additional disk space will be used.
Do you want to continue [Y/n]?
 <-- nbsp="nbsp" span="span">
Get:1 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main base-files amd64 6.5ubuntu12 [69.6 kB]
Get:2 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main whoopsie amd64 0.2.7 [25.1 kB]
Get:3 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main libwhoopsie0 amd64 0.2.7 [7,054 B]
Get:4 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main lsb-base all 4.0-0ubuntu26.1 [10.3 kB]
Get:5 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main isc-dhcp-client amd64 4.2.4-1ubuntu10.1 [775 kB]
Get:6 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main isc-dhcp-common amd64 4.2.4-1ubuntu10.1 [836 kB]
Get:7 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main lsb-release all 4.0-0ubuntu26.1 [10.7 kB]
Get:8 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main python3.2 amd64 3.2.3-6ubuntu3.1 [2,585 kB]
Get:9 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main python3.2-minimal amd64 3.2.3-6ubuntu3.1 [1,798 kB]
Get:10 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main vim amd64 2:7.3.547-4ubuntu1.1 [1,051 kB]
Get:11 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main vim-tiny amd64 2:7.3.547-4ubuntu1.1 [413 kB]
Get:12 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main vim-runtime all 2:7.3.547-4ubuntu1.1 [6,317 kB]
Get:13 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main vim-common amd64 2:7.3.547-4ubuntu1.1 [85.7 kB]
Get:14 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main ubuntu-release-upgrader-core all 1:0.190.4 [27.7 kB]
Get:15 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main python3-distupgrade all 1:0.190.4 [141 kB]
Get:16 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main python3-problem-report all 2.6.1-0ubuntu6 [9,578 B]
Get:17 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main python3-apport all 2.6.1-0ubuntu6 [85.7 kB]
Get:18 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main apport all 2.6.1-0ubuntu6 [164 kB]
Get:19 http://de.archive.ubuntu.com/ubuntu/ quantal-updates/main linux-generic amd64 3.5.0.18.21 [1,714 B]
Fetched 14.4 MB in 2s (5,465 kB/s)

Supported
Create a snapshot of '/tmp/apt-btrfs-snapshot-mp-jnW7I_/@' in '/tmp/apt-btrfs-snapshot-mp-jnW7I_/@apt-snapshot-2012-11-22_11:50:38'

(Reading database ... 52666 files and directories currently installed.)
Preparing to replace base-files 6.5ubuntu11 (using .../base-files_6.5ubuntu12_amd64.deb) ...
Unpacking replacement base-files ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Processing triggers for plymouth-theme-ubuntu-text ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.5.0-17-generic
Setting up base-files (6.5ubuntu12) ...
(Reading database ... 52666 files and directories currently installed.)
Preparing to replace whoopsie 0.2.5 (using .../whoopsie_0.2.7_amd64.deb) ...
whoopsie stop/waiting
Unpacking replacement whoopsie ...
Preparing to replace libwhoopsie0 0.2.5 (using .../libwhoopsie0_0.2.7_amd64.deb) ...
Unpacking replacement libwhoopsie0 ...
Preparing to replace lsb-base 4.0-0ubuntu26 (using .../lsb-base_4.0-0ubuntu26.1_all.deb) ...
Unpacking replacement lsb-base ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up lsb-base (4.0-0ubuntu26.1) ...
(Reading database ... 52666 files and directories currently installed.)
Preparing to replace isc-dhcp-client 4.2.4-1ubuntu10 (using .../isc-dhcp-client_4.2.4-1ubuntu10.1_amd64.deb) ...
Unpacking replacement isc-dhcp-client ...
Preparing to replace isc-dhcp-common 4.2.4-1ubuntu10 (using .../isc-dhcp-common_4.2.4-1ubuntu10.1_amd64.deb) ...
Unpacking replacement isc-dhcp-common ...
Preparing to replace lsb-release 4.0-0ubuntu26 (using .../lsb-release_4.0-0ubuntu26.1_all.deb) ...
Unpacking replacement lsb-release ...
Preparing to replace python3.2 3.2.3-6ubuntu3 (using .../python3.2_3.2.3-6ubuntu3.1_amd64.deb) ...
Unpacking replacement python3.2 ...
Preparing to replace python3.2-minimal 3.2.3-6ubuntu3 (using .../python3.2-minimal_3.2.3-6ubuntu3.1_amd64.deb) ...
Unpacking replacement python3.2-minimal ...
Preparing to replace vim 2:7.3.547-4ubuntu1 (using .../vim_2%3a7.3.547-4ubuntu1.1_amd64.deb) ...
Unpacking replacement vim ...
Preparing to replace vim-tiny 2:7.3.547-4ubuntu1 (using .../vim-tiny_2%3a7.3.547-4ubuntu1.1_amd64.deb) ...
Unpacking replacement vim-tiny ...
Preparing to replace vim-runtime 2:7.3.547-4ubuntu1 (using .../vim-runtime_2%3a7.3.547-4ubuntu1.1_all.deb) ...
Unpacking replacement vim-runtime ...
Preparing to replace vim-common 2:7.3.547-4ubuntu1 (using .../vim-common_2%3a7.3.547-4ubuntu1.1_amd64.deb) ...
Unpacking replacement vim-common ...
Preparing to replace ubuntu-release-upgrader-core 1:0.190.1 (using .../ubuntu-release-upgrader-core_1%3a0.190.4_all.deb) ...
Unpacking replacement ubuntu-release-upgrader-core ...
Preparing to replace python3-distupgrade 1:0.190.1 (using .../python3-distupgrade_1%3a0.190.4_all.deb) ...
Unpacking replacement python3-distupgrade ...
Preparing to replace python3-problem-report 2.6.1-0ubuntu3 (using .../python3-problem-report_2.6.1-0ubuntu6_all.deb) ...
Unpacking replacement python3-problem-report ...
Preparing to replace python3-apport 2.6.1-0ubuntu3 (using .../python3-apport_2.6.1-0ubuntu6_all.deb) ...
Unpacking replacement python3-apport ...
Preparing to replace apport 2.6.1-0ubuntu3 (using .../apport_2.6.1-0ubuntu6_all.deb) ...
apport stop/waiting
Unpacking replacement apport ...
Preparing to replace linux-generic 3.5.0.17.19 (using .../linux-generic_3.5.0.18.21_amd64.deb) ...
Unpacking replacement linux-generic ...
Processing triggers for man-db ...
Processing triggers for mime-support ...
Processing triggers for ureadahead ...
Setting up libwhoopsie0 (0.2.7) ...
Setting up whoopsie (0.2.7) ...
whoopsie start/running, process 7859
Setting up isc-dhcp-common (4.2.4-1ubuntu10.1) ...
Setting up isc-dhcp-client (4.2.4-1ubuntu10.1) ...
Setting up lsb-release (4.0-0ubuntu26.1) ...
Setting up python3.2-minimal (3.2.3-6ubuntu3.1) ...
Setting up python3.2 (3.2.3-6ubuntu3.1) ...
Setting up vim-common (2:7.3.547-4ubuntu1.1) ...
Setting up vim-runtime (2:7.3.547-4ubuntu1.1) ...
Processing /usr/share/vim/addons/doc
Setting up vim (2:7.3.547-4ubuntu1.1) ...
Setting up vim-tiny (2:7.3.547-4ubuntu1.1) ...
Setting up python3-distupgrade (1:0.190.4) ...
Setting up ubuntu-release-upgrader-core (1:0.190.4) ...
Setting up python3-problem-report (2.6.1-0ubuntu6) ...
Setting up python3-apport (2.6.1-0ubuntu6) ...
Setting up apport (2.6.1-0ubuntu6) ...
apport start/running
Setting up linux-generic (3.5.0.18.21) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
root@server1:~#

As you see, apt-btrfs-snapshot has automatically created as snapshot of our system (called @apt-snapshot-2012-11-22_11:50:38 in this example) before the upgrade. You can check that with...
btrfs subvolume list /
root@server1:~# btrfs subvolume list /
ID 256 top level 5 path @
ID 258 top level 5 path @home
ID 260 top level 5 path @apt-snapshot-2012-11-22_11:50:38
root@server1:~#
... and:
apt-btrfs-snapshot list
root@server1:~# apt-btrfs-snapshot list
Available snapshots:
@apt-snapshot-2012-11-22_11:50:38
root@server1:~#

4 Rollback

Now let's assume the last apt operation turned our working system into one that isn't working as expected anymore. That's why we want to restore the previous system state, i.e., we want to do a rollback.
Therefore we mount the btrfs filesystem to a separate location, e.g. /mnt:
mount /dev/sda1 /mnt
We can now see our subvolumes in the output of:
ls -l /mnt/
root@server1:~# ls -l /mnt/
total 0
drwxr-xr-x 1 root root 230 Nov 22 10:46 @
drwxr-xr-x 1 root root 230 Nov 22 10:46 @apt-snapshot-2012-11-22_11:50:38
drwxr-xr-x 1 root root  26 Nov 22 10:57 @home
root@server1:~#
@apt-snapshot-2012-11-22_11:50:38 is a snapshot of our working root filesystem (@) before the apt operation. In order to make the system boot from that working snapshot instead of from the current subvolume, we rename @ to something else and then @apt-snapshot-2012-11-22_11:50:38 to @:
mv /mnt/@ /mnt/@_badroot
mv /mnt/@apt-snapshot-2012-11-22_11:50:38 /mnt/@
Now reboot:
reboot

5 Check If The Rollback Was Successful

After the reboot we should check if the rollback was successful. To do this, we repeat the apt operation which made our system unusable, e.g.:
apt-get update
apt-get upgrade
If the rollback was successful, apt-get upgrade should show the same packages available for update as before (as this is just a check if the rollback was successful, don't install the updates again):
root@server1:~# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  linux-headers-generic linux-image-generic
The following packages will be upgraded:
  apport base-files isc-dhcp-client isc-dhcp-common libwhoopsie0 linux-generic lsb-base lsb-release python3-apport python3-distupgrade python3-problem-report python3.2 python3.2-minimal
  ubuntu-release-upgrader-core vim vim-common vim-runtime vim-tiny whoopsie
19 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Need to get 0 B/14.4 MB of archives.
After this operation, 3,072 B of additional disk space will be used.
Do you want to continue [Y/n]?
 <-- n="n" nbsp="nbsp" span="span">

6 Delete The @ Subvolume (Optional)

If you are sure the rollback was successful and you don't need the old @ subvolume (now named @_badroot) anymore, you can delete it to free up some space.
mount /dev/sda1 /mnt
ls -l /mnt/
root@server1:~# ls -l /mnt/
total 0
drwxr-xr-x 1 root root 230 Nov 22 10:46 @
drwxr-xr-x 1 root root 230 Nov 22 10:46 @_badroot
drwxr-xr-x 1 root root  26 Nov 22 10:57 @home
root@server1:~#
btrfs subvolume delete /mnt/@_badroot
umount /mnt

7 Links

Monday, November 26, 2012

Use the Gimp to create color photos from black and white photos

http://tutorialgeek.blogspot.com/2012/11/use-gimp-to-create-color-photos-from.html?bcsi-ac-f0560950746ba05d=1FB0A49E0000000635ThFr26GnHt9sZuLMmR115AtREHAAAABgAAAPwWGgAgvwIAAgAAADAsAAA=

Recently I have been seeing a bunch of black and white photos being colorized. I thought it looked pretty neat, so I set out to see how to do it using The Gimp. Below is the tutorial for how I did it.



-->




Before I begin, I would like to give credit where it is due. The main concepts of doing this I got from a Photoshop tutorial in madtuts.com (click for the original tutorial).

The first thing you will need to do is find a black and white photo. I decided to try using the most famous black and white photo I know of, "Migrant Mother" taken by Dorothea Lange in 1936. Open the image in The Gimp.



The first thing I like to do with all my projects is make a copy of the layer. This way if I mess up, I can always go back to the original.


I also like giving the layers appropriate names to make things less confusing in the future.

Next, you will want to right click on the image and create a layer mask.


--> Set the background as white.


Go ahead and make a copy of this as well.

You will need to make sure that the image is not in Grayscale mode. Go to Image>Mode>RGB and set the mode to RGB.

Now go to colors and select either Color Balance, Hue-Saturation, or Colorize. I tend to prefer Colorize.


For the Colorize dialog to actually come up, we need to make sure our image is selected and not the layer mask (look below). The image is on the left and layer mask is on the right.
-->

With Color Balance or Colorize, we will now want to try to get the image to be same color of the object we want to color. I started with the collar. I made sure I created a copy of the image and layer mask I could use specifically for the collar.


If you use Colorize, it will start out bluish. Adjust the hue until you find the color you like.


I eventually got it to a red color I liked.


After you have the color you want, you will now need to select the layer mask by clicking on it.
Click on the right rectangle. This is the layer mask.
Now go to Colors and Invert the colors. Once the colors are inverted, it will look like the original without any color.


Next I used the selection tool to select the collar (I don't suggest doing this... it is much easier to just use the paintbrush and select the white color and paint).

Once I selected the collar, I used the paint bucket tool to fill it as white. Again... painting is easier.




Once you have that layer how you want it, create a new copy and repeat the process.


For my next layer I did the skin on the mother. I used the paintbrush tool this time. Much easier.


Keep on repeating the process for every object that is a different color (can be quite tedious but it quite fun).

One thing I should mention; don't worry too much about getting the colors correct. Close enough is good enough. Changing the colors later is quite easy.

Here you can see my different layers.


It is hard to get the colors right because it changes the colors for everything until you invert... don't worry; we will adjust later if you don't like the colors.




If you decide you want to go back and change a color, just select the layer and go back to colorize (make sure the layer mask is NOT selected).



I didn't like the orange sweater I did, so I made it a more brownish color. I did this using colorize and dropped the saturation down quite a bit.


After I had done all the layers, I started going back and adjusted the opacity on the layers to make it look a bit more natural and not over saturated.


Once you adjust the opacity on the layers, you are done!


Fun times!

Original


Colorized version.