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 192.168.0.100: 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 192.168.0.101: 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: http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html, 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

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

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

workstation:

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 http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html.

First, tell Bazaar who you are:

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

Check that Bazaar has correctly stored your identity:

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

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

pwd

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
falko@server1:~/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
falko@server1:~/myproject$

Now run

bzr add

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

falko@server1:~/myproject$ bzr add
added subdirectory
added test1.txt
added test2.txt
added test3.txt
added subdirectory/test4.txt
falko@server1:~/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:

falko@server1:~/myproject$ bzr commit -m "Initial import"
added subdirectory
added subdirectory/test4.txt
added test1.txt
added test2.txt
added test3.txt
Committed revision 1.
falko@server1:~/myproject$

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

vi test1.txt
some text...

Run

bzr diff

and Bazaar will show you the changes:

falko@server1:~/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...

falko@server1:~/myproject$

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

bzr commit -m "Added first line of text"
falko@server1:~/myproject$ bzr commit -m "Added first line of text"
modified test1.txt
Committed revision 2.
falko@server1:~/myproject$

The command

bzr log

displays a history of the latest actions:

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

1 Comment(s)