Git directory outside working directory

I have an old PHP website that I wanted to have its code/content versioned with Git, normally Git setup the repo directory in the “.git” directory inside the working directory, but I faced a problem, if the working directory is accessible from the web server it means “.git” is also accessible too.

Luckily git have an option to have the repo directory located somewhere else using the GIT_DIR environment variable, so here what I did:

$ vi .profile
export GIT_DIR

You notice that the web site is located in “/var/www/my_website” but the repo is located under totally different directory “/home/rayed/my_website_git”, so the web server can’t access it by mistake.

Configuring IPv6 in your server

Getting IPv6 connectivity to your server isn’t very hard in fact if you have a decent provier you might already have it configured.

Do you have IPv6 already configured?

First try this command

$ ifconfig -a 

You will have result like this:

eth0      Link encap:Ethernet  HWaddr 00:1e:0b:d6:7b:b8  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::21e:bff:fed6:7bb8/64 Scope:Link

he-ipv6   Link encap:IPv6-in-IPv4  
          inet6 addr: 2001:470:1f08:1160::2/64 Scope:Global
          inet6 addr: fe80::5855:f52b/64 Scope:Link

lo        Link encap:Local Loopback  
          inet addr:  Mask:
          inet6 addr: ::1/128 Scope:Host

Look for lines starting with “inet6”, they indicate IPv6 address, but they have different meaning depend on the scoop.


Scope host means IPv6 is configured in your OS and you can connect to your own machine using IPv6, the address would be “::1” which is the equivalent to “” in IPv4 world, try ping to your own machine:

$ ping6 ::1


Scope Link means IPv6 is configured on the given interface with auto configured “Link-local addresses”, in our example “fe80::21e:bff:fed6:7bb8” is configured on the interface “eth0”.

Have a look at the MAC (HWaddr) address for interface “eth0”, and compare it to the IPv6 Link-Local address:


This is how IPv6 auto configuration works, it generate a unique IPv6 address from you MAC address (insert ff fe in the middle of the mac address).

Link local address are used only inside a LAN, i.e. can’t be routed from segment to segment, this enable IPv6 machines to communicate without the need for any configuration (you need away to discover IP address for other machines in the LAN of course).

Pinging another machine in LAN using IPv6 would work like this:

$ ping6 fe80::21e:bff:fed6:7bb8
connect: Invalid argument

It didn’t work, IPv6 sucks, not really, remember Link Local address can’t be routed and your OS can’t use the default gateway to send packets to, this why you have to specify the exact interface you want to use with “-I” option, try this:

$ ping6 -I eth0 fe80::21e:bff:fed6:7bb8
PING fe80::21e:bff:fed6:7bb8(fe80::21e:bff:fed6:7bb8) from fe80::21e:bff:fed6:7bb8 eth0: 56 data bytes
64 bytes from fe80::21e:bff:fed6:7bb8: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from fe80::21e:bff:fed6:7bb8: icmp_seq=2 ttl=64 time=0.008 ms

That worked fine!


Here’s where it gets interesting, global address is used to reach other IPv6 network and hosts and they use back to reach you, it can be configured in many ways:

  • Stateless autoconfiguration: the Os will use router discovery packet to build its own IP, using its MAC address again.
  • DHCPv6 (aka statefull autoconfiguration): same old DHCP update for IPv6.
  • Manual (aka static configuration)

In my server I didn’t have an IPv6 address, and my provider didn’t plan to provide it in the near future, so what to do …. use a tunnel broker to tunnel your IPv6 traffic over IPv4, of course this a temporary solution until my provider arrange for IPv6 upstream connection.

No IPv6, provider don’t have IPv6 upstream connection … tunnel it

Fortunately the Internet full of free IPv6 tunnel broker providers, I signed up with Hurricane Electric Free IPv6 Tunnel Broker, after signing up click on “Create Regular Tunnel”, it will ask you about your IPv4 address to create the tunnel, and that is it, it will create your tunnel for you, it will even give you steps on how configure it on different OSs.

In my ubuntu server I added the following line to my network configuration file:

$ sudo vi /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     address  2001:470:1f08:1160::2
     netmask  64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

and to activate it I ran:

sudo ifup he-ipv6

and to try it:

$ ping6
PING 56 data bytes
64 bytes from 2a00:1450:8006::93: icmp_seq=1 ttl=57 time=97.1 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=2 ttl=57 time=97.2 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=3 ttl=57 time=97.2 ms
64 bytes from 2a00:1450:8006::93: icmp_seq=4 ttl=57 time=97.2 ms

IPv6 is configured and working 🙂

Fun Fact

HE tunnel broker not only tunnel one IPv6 address they tunnel /64 network to your address, this means you can have 2^64 addresses on this tunnel, in contrast all IPv4 address space is only 2^32 of addresses for the whole world!!!

nginx [Engine X] enters webserver top 5

nginx [Engine X] became the world 4th most popular web server, according to the latest Netcraft survey.
It is an event based web server, which makes really scalable especially for static files, so if you are serving many images, audio files, video, you might consider it.
It can also configured to work as HTTP and mail proxy.
Of course you should look also at Lighttpd [Lighty] which work with the same principle, and I have been using it for around 2 years for