initramfs script's to backup system's (also raid1) and restore from a usb stick 
These are scripts to backup system's and build an image for an usb stick or kvm for testing:


The only thing to configure is the backup-script:

All your partition's must have an UUID.

With "uuidgen | xargs mkswap /dev/sda1 -U" and "uuidgen | xargs tune2fs /dev/sda1 -U" you can generate one.

This is an example of a backup of a system with two partitions:

cat >root_exclude <<EOF

cat >var_exclude <<EOF

sudo tar -cSp --one-file-system --numeric-owner --atime-preserve \
--exclude-from=root_exclude -f $(hostname).root.tar /

sudo tar -cjSp --one-file-system --numeric-owner --atime-preserve \
--exclude-from=var_exclude -f $(hostname).var.tar.bz2 --directory /var .

uuid() { sudo blkid -o value -s UUID /dev/$1; }
fstype() { sudo blkid -o value -s TYPE /dev/$1; }
inodesize() { sudo tune2fs -l /dev/$1 | grep "Inode size" | sed -e 's/[^0-9]//g'; }
raiduuid() { sudo sed -n "s/^.*$1.*UUID=\(.*\)/\1/p" /etc/mdadm/mdadm.conf; }
partitioninfo() { echo "$(echo $1|sed -e 's/[^0-9]//g') $(uuid $1) $(fstype $1)"; }

cat >$(hostname).cfg <<EOF
ARCHIVES="$(partitioninfo sda2) $(hostname).root.tar.bz2
$(partitioninfo sda3) $(hostname).var.tar.bz2"
SWAP="1 $(uuid sda1)"
GRUB1_INODESIZE=$(inodesize sda2)
* for each tar an exlude-file can be defined
* files are named HOSTNAME.root.tar.bz2, HOSTNAME.var.tar.bz2 and HOSTNAME.cfg
* this backup needs a small config-file (HOSTNAME.cfg)

DISK_PARTITIONS is used by sfdisk and has to be definded in its INPUT FORMAT
ARCHIVES takes a config line for each partition with an optional tar archive at the end
SWAP starts with the number of the partition and the uuid of it
GRUB needs the version of grub
GRUB1_PARTITION is only needed for grub 1 and is the boot partition (counting starts with 0)
GRUB1_INODESIZE is needed because older grub1 can not boot with a filesystem of different inode size

For a raid1 system with only one filesystem the config looks like
DISK_PARTITIONS=",8000,S;,,L,* ,8000,S;,,L,*"
RAID_UUIDS="$(raiduuid md0) $(raiduuid md1)"
ARCHIVES="$(partitioninfo md1) $(hostname).root.tar.bz2"
SWAP="0 $(uuid md0)"
GRUB1_INODESIZE=$(inodesize md1)
After running the backup script HOSTNAME.root.tar.bz2, HOSTNAME.var.tar.bz2 and HOSTNAME.cfg are build.
Now you can run ./ or copy these files to your backup server (where you put the files from other systems) and run there ./ Now you got a directory called image with all your archives, your running kernel and a configured initrd (initramfs).
With ./ /dev/STICKDEVICE your stick to restore is prepared (Warning all data on the stick is erased!).

With kvm you can test the restore process:

Therefore run sudo ./
The build image can be mounted with sudo ./ to ./mnt and unmounted with sudo ./
Test the image with and test the restored image with ./

[ view entry ] ( 1079 views )   |  print article
How to recompile / rebuild a debian package 
$ sudo apt-get install build-essential fakeroot dpkg-dev
$ mkdir build
$ cd build
$ sudo apt-get source foo
$ sudo apt-get build-dep foo
$ cd foo
$ dpkg-buildpackage -rfakeroot -b -us -uc -nc

-nc does not clean, usefull if you change something and rebuild ... y-package/

[ view entry ] ( 1076 views )   |  print article
Show installed packages sorted by disc usage 
dpkg-query --show --showformat='${Installed-Size}\t${Package}\t${Status}\n' | grep -v deinstall | sort -nr | less

adapted from Martins Blog

Clear dpkg status file

dpkg-Status sorted:
grep Status /var/lib/dpkg/status|sort|uniq -c

purge rc packages:
dpkg -P $(dpkg -l \*|grep ^rc|awk '{print $2}')

purge for other status:
grep -B 2 'deinstall ok config-files' /var/lib/dpkg/status|sed /^$/d |grep Package|awk '{print $2}'

[ view entry ] ( 853 views )   |  print article
apt-get on many hosts with clusterssh 
Clusterssh opens for each connection a xterm and sends a keystroke to each window.

You can also work in only one xterm.

#> apt-get install clusterssh

I use approxd for caching .deb's using port 9999. This port is not reachable by all my hosts,
therefore i use remote port forwarding from ssh.

I can type

#> cssh -o "-R9999:approxy:9999" host1 host2 host3

or create a default config

#> cssh -u > $HOME/.csshrc

You can define different clusters aliases. Each alias consists of some hosts:
clusters = apt mon
apt = host1 host2 host3
ssh_args= -x -o ConnectTimeout=10 -R9999:approxy:9999
now i only type

#> cssh apt

a small patch makes "retile windows" working for me:

--- 2010-09-27 13:23:02.561375883 +0200
+++ /usr/share/perl5/App/ 2010-09-27 13:09:27.011375882 +0200
@@ -1319,7 +1319,7 @@
logmsg( 3,
"x:$current_x y:$current_y, r:$current_row c:$current_col" );

- $xdisplay->req( 'UnmapWindow', $servers{$server}{wid} );
+# $xdisplay->req( 'UnmapWindow', $servers{$server}{wid} );

if ( $config{unmap_on_redraw} =~ /yes/i ) {
$xdisplay->req( 'UnmapWindow', $servers{$server}{wid} );

[ view entry ] ( 739 views )   |  print article
hardy ubuntu-vm-builder with kvm and virtio 
First get ubuntu-vm-builder from

#> dpkg -i ubuntu-vm-builder_0.6_all.deb

I suggest to use approx for caching packages

#> sudo apt-get kvm libvirt-bin

#> sudo adduser `id -un` libvirtd (and relogin)

To have a working virio inside the guest i patched:
--- /usr/share/ubuntu-vm-builder/templates/libvirt.tmpl.orig
+++ /usr/share/ubuntu-vm-builder/templates/libvirt.tmpl
@@ -18,13 +18,14 @@
<interface type='network'>
<mac address='%MAC%'/>
<source network='default'/>
+ <model type='virtio'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' listen=''/>
<disk type='file' device='disk'>
<source file='%img%'/>
- <target dev='hd%curdisk%'/>
+ <target dev='hd%curdisk%' bus='virtio'/>

#> ubuntu-vm-builder

[ view entry ] ( 2079 views )   |  print article

<<First <Back | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Next> Last>>