Mirroring gitolite

A long time ago I wrote an article about how to install gitolite. Yesterday an article popped up in my feed reader that shows a short script on how to mirroring gitolite servers.

Since I wrote my custom script once I had set up gitolite, I was a bit curious about the differences to my script today. So I checked the referred script and noticed some problems that probably occur over the time:

  • New branches on the remote are not fetched
  • New tags on the remote are not fetched
  • Using working copies results in way larger mirrors

As one can see, the script lacks some major features.

#!/bin/bash
# Copyright (c) 2011-2013 Markus Holtermann
# MIT License: http://download.markusholtermann.eu/MIT.txt

BACKUP_DIR=/data/git-mirror/
REMOTE=git@git.example.com

if [ ! -d "${BACKUP_DIR}" ] ; then
    mkdir -p "${BACKUP_DIR}"
fi

cd "${BACKUP_DIR}"

for repo in $(ssh ${REMOTE} 2> /dev/null | grep -e "^\s\+R" | sed -e 's/\r//g' | awk '{print $3}')
do
    if [[ -d ${repo}.git ]] ; then
        cd ${repo}.git
        echo "Updating ${REMOTE}:${repo} ..."
        git fetch --all
        echo " ... done"
        cd -
    else
        echo "Cloning ${REMOTE}:${repo} ..."
        git clone --mirror ${REMOTE}:${repo}.git
        echo " ... done"
    fi
done

The magic to prevent working directories ...

 

Pictures from NYC

Yesterday a friend of mine asked around if someone has ever been in New York City. I replied and promised him to show some of my favorite pictures from my last trip to NYC in summer 2009. Looking through the more than 1000 photos from those days, I picked the following 8.

Enjoy them!

View from the Empire State Building to Midtown Manhattan and Central Park:

View from the Staten Island Ferries to Downtown Manhattan:

View from the Staten Island Ferries to the Statue of Liberty:

View from the Staten Island Ferries to the Statue of Liberty:

View from the Staten Island Ferries to Downtown Manhattan:

View from the Staten Island Ferries to Downtown Manhattan:

View from the Staten Island Ferries to Downtown Manhattan:

View from a Circle Line Harbor Cruise towards Ellis Island:

Creative Commons License

These images are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

 

KDE 4.10 RC1 is out

Two days ago the KDE team released the first release candidate of the Plasma Workspaces towards version 4.10. The biggest changes that directly catches ones eyes are the graphical modifications and improvements. For me they look much more seamless. I also like the new wallpaper. Looking under to hood, there are many changes. I just want to point out my most favorite ones:

  • A new QtQuick based screen locker.
  • Scriptable effects – One can easily write desktop effects without knowledge of C/C++
  • The notification applet is now based on QML and feels much smoother
  • The Nepomuk Indexer has been rewritten and is much faster as far as I can see.

Of course there are many, many more changes.

 

[CloudRAID] 6. Conclusion and Outlook

This post is the last post of the blog series about the student research paper CloudRAID.

This is the last part of the student research paper about CloudRAID. Florian summarizes the pros and cons of our implementation. Furthermore he shows some ideas that could make CloudRAID more convenient, e.g. adding a search possibility.

 

[CloudRAID] 5. Benchmarks

This post is a continuation of the blog series about the student research paper CloudRAID.

5. Benchmarks

Since the performance is an integral part and a key aspect of the software and even more one of the most important piece, the following chapter will show some performance tests and benchmark results.

5.1. Environment

In order to make the benchmarks reproducible this chapter will set up some benchmark environments. They define the hardware as well as the software that is used for the benchmark tests.

Environment 1:

  • CPU: Intel® Core™ 2 Duo CPU P8600 @ 2.40 GHz
  • RAM: 4 GiB
  • Hard disk: Samsung HM320II, 16 MiB Cache
  • File system: ext4, Block size: 4096 Byte
  • Disk Encryption: LUKS, cipher: aes-xts-plain, 512 bits
  • Disk Management: LVM: 2.02.88(2), Library: 1.02.67 Driver: 4.22.0
  • Operating System: Arch Linux 64bit

Environment 2:

  • CPU: Intel® Core™ 2 Duo CPU E6600 @ 2.40 GHz
  • RAM: 2 GiB
  • Hard disk: 2x Samsung SpinPoint HD501LJ, 16 MiB Cache
  • File system: ext4, Block size: 4096 Byte
  • Disk Encryption: LUKS, cipher: aes-xts-plain, 512 bits
  • Disk Management: LVM: 2.02.88(2), Library: 1.02.67 Driver: 4.22.0
  • RAID: Software RAID 1, mdadm 3 ...

 

[CloudRAID] 4. Implementation (Continuation 2)

This post is a continuation of the blog series about the student research paper CloudRAID.

After the implementation of the CloudRAID backend has been introduced and the specification of the REST API endpoints is published, Florian is describing the compression API and the client application on his blog in a new post.

 

[CloudRAID] 4. Implementation (Continuation)

This post is a continuation of the blog series about the student research paper CloudRAID.

4. Implementation

4.2. RESTful API Endpoint Specifications

4.2.1. URL Mapping for API Endpoints

The default CloudRAID package contains a RESTful HTTP API. This is realized using Java Servlets. A Java web and application server will be used to deploy the servlet. To activate the servlet this is bound to a base path that will be required to be prefixed to the Uniform Resource Locator (URL) path. The actual functionality provided by this servlet will then be bound to sub paths as described in chapters 4.2.2 to 4.2.4 (see below). The basic concept of how the mapping between the sub paths and URL parameters is done, has been taken from the Django Project (URL dispatcher: https://docs.djangoproject.com/en/1.4/topics/http/urls/).

The complete pattern and mapping implementation is done in the class RestApiUrlMapping within the package de.dhbw_mannheim.cloudraid.api.impl and is part of the CloudRAID-REST bundle. The RestApiUrlMapping constructor takes two to four parameter of various type as one can see in listing 9 below:

  1. The first parameter must be the pattern ...

 

[CloudRAID] 4. Implementation

This post is a continuation of the blog series about the student research paper CloudRAID.

After Florian's publications about the architecture the concrete implementation design will follow.

4. Implementation

4.1. JNI API

The supplied RAID 5 implementation uses SHA-256 for integrity and validity checks. The hash implementation has been taken from the Apache Portable Runtime Project (APR) that has been published by the Apache Software Foundation under the terms of the Apache License version 2.0.

4.1.1. Pre-compiler Flags and Constants

The native RAID 5 level implementation uses multiple pre-compiler flags and constants to control the split and merge processes:

  1. RAID5BLOCKSIZE specifies how many bytes the library will write at once to each device file (default 1024 bytes). Hence RAID5BLOCKSIZE × 2 bytes are read at once from the input file.
  2. Normally all data will be encrypted before it is being split into the device files. This can be changed by setting ENCRYPT_DATA to 0.
  3. The constant ENCRYPTION_SALT_BYTES specifies the size of the salt in bytes. The default value is 256.
  4. For debugging purposes, the DEBUG constant can be set. There are three debug levels possible, where 1 prints minimum debug information and 3 all. A value ...

 

[CloudRAID] 3. Concept (Continuation)

This post is a continuation of the blog series about the student research paper CloudRAID.

With some delay I can announce the closing chapter for the architectural backgrounds of CloudRAID. Florian published the rest of chapter “3.3. Server Architecture” and the internals of the “3.4. Client Application”.

 

[CloudRAID] 3. Concept

This post is a continuation of the blog series about the student research paper CloudRAID.

I'm happy to announce the next part of our student research paper. Today Florian presents the beginning of the third chapter that is all about the concept behind CloudRAID. His post covers the “Requirements” that need to be fulfilled, the “General Architecture” of the server application and also gives some insight on the “Server Architecture”.