Using The Bazaar Version Control System (VCS) On Debian Etch

Version 1.0
Author: Falko Timme

Bazaar is a distributed version control system (VCS) available under the GPL; it's similar to Subversion (svn). Bazaar is sponsored by Canonical, Ltd., the company that develops the Ubuntu Linux distribution, and therefore the Ubuntu project is the most prominent user of Bazaar. This article explains how to set up and use Bazaar on a Debian Etch system, and how to configure an SFTP-/HTTP server to host your Bazaar repository.

I do not issue any guarantee that this will work for you!


1 Preliminary Note

In this tutorial I will use two Debian Etch systems:

  • IP address the workstation where Bazaar will be installed and software will be developed (that will be managed by Bazaar); I'll refer to it as workstation throughout this article;
  • IP address the server that will keep the Bazaar repository and that offers SFTP and HTTP services; I'll refer to it as server in this article. I'll use lighttpd here as the web server, but you can use any other web server as well (e.g. Apache).

I'll use the username falko on both systems.

Most Bazaar usage examples are taken from this guide:, but in addition to that this guide explains exactly how to install SFTP and lighttpd on the server and Bazaar on the workstation to make the Bazaar experience a little bit smoother for not-so-experienced Linux users.


2 Installing SFTP And Lighttpd On The Server


(All the steps in this chapter have to be done as the root user!)

Let's install SFTP and lighttpd on the server:

apt-get install ssh openssh-server lighttpd

Next we create a user account - falko in this case - that uses the /usr/lib/sftp-server shell instead of /bin/bash or any other shell:

useradd -m -s /usr/lib/sftp-server falko

This creates the user falko with the home directory /home/falko.

Assign a password to falko:

passwd falko

Then make /usr/lib/sftp-server a valid login shell by adding it to /etc/shells:

echo '/usr/lib/sftp-server' >> /etc/shells

Now I create the directory /home/falko/public_html which will be lighttpd's document root and will contain our Bazaar repository:

mkdir /home/falko/public_html
chown falko:falko /home/falko/public_html

To tell lighttpd that the document root has changed to /home/falko/public_html, open /etc/lighttpd/lighttpd.conf and modify the server.document-root line:

vi /etc/lighttpd/lighttpd.conf

server.document-root       = "/home/falko/public_html"

Restart lighttpd afterwards:

/etc/init.d/lighttpd restart


3 Installing Bazaar On The Workstation


Run the following command as root:

apt-get install bzr python-paramiko

If you don't already have a normal user account on the workstation, create one now:

useradd -m -s /bin/bash falko

passwd falko


4 Using Bazaar


Now log in as the normal user, or, if you are logged in as root, run

su falko

to become the normal user (in this case falko).

Then go to your home directory:

cd ~

The following examples are more or less taken from

First, tell Bazaar who you are:

bzr whoami "Falko Timme <[email protected]>"

Check that Bazaar has correctly stored your identity:

bzr whoami

[email protected]:~$ bzr whoami
Falko Timme <[email protected]>
[email protected]:~$

Now let's create a test directory with some test files:

mkdir myproject
cd myproject
mkdir subdirectory
touch test1.txt test2.txt test3.txt subdirectory/test4.txt

The myproject directory is the base folder for our software project that we want to manage with Bazaar. It's important that you run all bzr commands in that directory! If you are not sure in which directory you are, run


Bazaar must initialize itself in the project directory:

bzr init

This creates some hidden files that Bazaar needs to manage your project. You can see the hidden folder .bzr in the myproject directory when you run

ls -la

[email protected]:~/myproject$ ls -la
total 16
drwxr-xr-x 4 falko falko 4096 2007-12-19 16:14 .
drwxr-xr-x 4 falko falko 4096 2007-12-19 16:13 ..
drwxr-xr-x 6 falko falko 4096 2007-12-19 16:14 .bzr
drwxr-xr-x 2 falko falko 4096 2007-12-19 16:13 subdirectory
-rw-r--r-- 1 falko falko    0 2007-12-19 16:13 test1.txt
-rw-r--r-- 1 falko falko    0 2007-12-19 16:13 test2.txt
-rw-r--r-- 1 falko falko    0 2007-12-19 16:13 test3.txt
[email protected]:~/myproject$

Now run

bzr add

to make all files/directories in the myproject folder versioned. The output is as follows:

[email protected]:~/myproject$ bzr add
added subdirectory
added test1.txt
added test2.txt
added test3.txt
added subdirectory/test4.txt
[email protected]:~/myproject$

Next add the files/directories to your branch (with a small comment so that you know what this commit is about):

bzr commit -m "Initial import"

The output is as follows:

[email protected]:~/myproject$ bzr commit -m "Initial import"
added subdirectory
added subdirectory/test4.txt
added test1.txt
added test2.txt
added test3.txt
Committed revision 1.
[email protected]:~/myproject$

Now let's modify the (yet empty) file test1.txt:

vi test1.txt

some text...


bzr diff

and Bazaar will show you the changes:

[email protected]:~/myproject$ bzr diff
=== modified file 'test1.txt'
--- test1.txt   2007-12-19 15:19:42 +0000
+++ test1.txt   2007-12-19 15:20:39 +0000
@@ -0,0 +1,1 @@
+some text...

[email protected]:~/myproject$

To commit the changes (again with a comment), run

bzr commit -m "Added first line of text"

[email protected]:~/myproject$ bzr commit -m "Added first line of text"
modified test1.txt
Committed revision 2.
[email protected]:~/myproject$

The command

bzr log

displays a history of the latest actions:

[email protected]:~/myproject$ bzr log
revno: 2
committer: Falko Timme <[email protected]>
branch nick: myproject
timestamp: Wed 2007-12-19 16:22:52 +0100
  Added first line of text
revno: 1
committer: Falko Timme <[email protected]>
branch nick: myproject
timestamp: Wed 2007-12-19 16:19:42 +0100
  Initial import
[email protected]:~/myproject$

Share this page:

1 Comment(s)

Add comment



After following the instructions on my Xen DomU, trying to su falko reported /dev/null: Permission denied, after changing the perms it just hung.

Insted I used adduser, and it worked..

Thanks for the great howto!