Place Ghantoos

Specify your Google Maps Javascript API version!

I woke up this morning to find out that the Google maps widget that I used on my ads website was pop-ing out regardless of the block visibility set on the div.

How it is supposed to work: the block is hidden until the user clicks on a specific area that triggers an onClick() and pops-out the map.


The source of this div looks like the following:

<div class="input-group-btn">
    <button type="button" class="btn btn-default dropdown-toggle"><i class="icon-map-marker"></i></button>
    <ul class="dropdown-menu pull-right" style="display:block;visibility:hidden;z-index:999;">
            <div id="location_ed_location_map" class="ed_location_map" style="width:560px;height:270px;"></div>

Read the rest of this entry »

Open management thoughts – Communicate early, communicate often

- updated on October 28th 2014 -


During the past year at eNovance I have had the chance to discover and experiment the joys of managing a multi-continent distributed team of engineers, France and Montreal for now and Asia in the near future. It is on purpose that I did not call the group an “engineering team”, but team of engineers; putting the emphasis on the group of individuals. As I have been managed (and still am) by my managers over the years, I have learned many things that I would like to do and others that I didn’t want to replicate when my time came to manage a team.

Little did I know that the challenge was far from being the easy task that I was expecting from my own management!

I was about  to write an article about the day-to-day rules that I try to live by, but I thought it was important to share one of my team’s major achievements: our weekly open meetings.

This article will explain the tools, steps and rules to follow in order to make these open meetings a reality. But first, let me give you some context…


Read the rest of this entry »

lshell 0.9.16 is out!

I have just released a new version of lshell 0.9.16.

Lots of new code, and code cleanup has been done in this version. Many bugs have been corrected, and some new features.

Here is the complete changelog:

=== v0.9.16   14/08/2013 ===
    * Added support to login script. Thank you Laurent Debacker for the patch.
    * Fixed auto-complete failing with "-"
    * Fixed bug where forbidden commands still execute if strict=1
    * Fixed auto-completion complete of forbidden paths 
    * Fixed wrong parsing &, | or ; characters
    * Added urandom function definition for python 2.3 compat
    * Corrected env variable expansion
    * Add support for cd command in aliases
    * Split lshellmodule in multiple files under the lshell directory
    * Fixed check_secure function to ignore quoted text 
    * Fixed multiple spaces escaping forbidden filtering
    * Fixed log file permissions 644 -> 600
    * Added possibility to override config file option via command-line
    * Enabled job control when executing command
    * Code cleanup

To download lshell please refer to github release here.

Ignace M

Cocktail of PXE, Debian, preseed, IPMI & puppet

A couple of days ago, I had to quickly setup around 60 machines with a standard GNU/Debian install.
The first shot was done using Razor. Razor is a very neat piece of software, developped by puppetlabs, that lets you setup an “intelligent” PXE installation by booting a mini-linux kernel and getting information from the physical machine using facter; giving you the possibility to install/configure the machines depending on their disk configuration/CPU model/RAM size/Model/Serial number/etc. Unfortunately, this project depends on the ipxe project which did not support, at the time of the install, all the network cards that were used (Broadcom and Intel). So I decided to go with an old school PXE/preseed installation coupled with DNS, IPMI and puppet configuration.

The whole idea was to:
1- boot and install the machine
2- reboot on the installed OS
3- use the IPMI ip address of the machine in order to set the hostname
4- launch puppet to setup the machine
Read the rest of this entry »

lshell is out!

Important note: lshell version 0.9.15 contains a serious bug that has been corrected in lshell- Please refrain from using previous versions.

I have just released a new version of lshell.

This release includes many new features and corrects many bugs and one major security bug.

Here is the complete changelog:

=== v0.9.15.1 15/03/2012 ===
    * Corrected security bug allowing user to get out of the restricted
    shell. Thank you bui from NBS System for reporting this grave issue!

=== v0.9.15 13/03/2012 ===
    * Set the hostname to the "short hostname" in the prompt.
    * Corrected traceback when "sudo" command was entered alone. Thank you
      Kiran Reddy for reporting this.
    * Added support for python2.3 as subprocess is not included by default.
    * Corrected the 'strict' behavior when entering a forbidden path.
    * Added short path promp support using the 'prompt_short' variable.
    * Corrected stacktrace when group did not exist.
    * Add support for empty prompt.
    * Fixed bugs when using $() and ``.
    * Corrected strict behavior to apply to forbidden path.
    * Added support for wildcard '*' when using 'cd'.
    * Added support for "cd -" to return to previous directory.
    * Updated security issue with non printable characters permitting user
      to get out of the limited shell.
    * Now lshell automatically reload its configuration if the configuration
      file is modified.
    * Added possibility to have no "intro" when user logs in. (by setting
      the intro configuration field to "")
    * Corrected multiple commands over ssh, and aliases interpretation.
    * Added possibility to use wildcards in path definitions.
    * Finally corrected the alias replacement loop.

To download lshell please refer to the wiki here.

Ignace M

Debian: restore grub on sd{a,b} using grub-mkdevicemap and grub-install

I had to reinstall grub on the MBR of one of machines. After resizing a GPT partition, and actually writing the changes on the disk’s partition table, my MBR was erased (the MBR is controlled by the GTP partition table), thus removing my dear grub.

Anyways, after rebooting my machine using the Debian Installation disk, I discovered that my disk were named differently: /dev/sda was renamed to /dev/sdb (classic!). Unfortunately, I struggled with grub-pc, grub-install, grub-update, update-grub to restore my grub information to the MBR, with no success.

I then found out that the file (/boot/grub/ was pointing to the wrong disk name.
So here is what I did to get over the disk renaming craziness and restore grub to the MBR.
Read the rest of this entry »

Migrating sourceforge CVS source repository to github

As many lshell users showed interest in an git repository to facilitate their contribution, I finally took the time to do the migration.

Lshell’s source code was hosted in CVS repository at As I wanted to keep all the commits history, I had to properly migrate all the information from CVS to GIT.
There are no tricky parts here. But I thought it could be useful to have an post describing a whole migration from a CVS repository to github.
Read the rest of this entry »

requestsync: package sync requests from Debian to Ubuntu

One of the Debian packages I maintain was just uploaded to Unstable (going into Squeeze). As this upload closed a Launchpad bug, and I appear as the maintainer of gip in Ubuntu too [1], I had alert the Ubuntu folks in order for them to synchronize the latest package.

The procedure is well described in the Ubuntu wiki [2]. But I thought I would paste a summary and the output of the different commands.
Read the rest of this entry »

screen(1), /etc/profile, ~/.profile, /etc/bash.bashrc and ~/.bashrc

For a while, I have been having problems with screen(1) on some of my machines. I am not the “colors in my terminal” type of guy. But unfortunately, when you get used to having “some” colors out there, it is disturbing to lose them when going inside a screen.

The problem was that screen(1) did not source neither /etc/profile nor ~/.profile when it spawned a new shell; only /etc/bash.bashrc and ~/.bashrc were sourced.
As I don’t like having my preferences included in bash specific files, they were all added in *profile (specifically in /etc/profile.d/).

In order to find the source of the problem, I just added “echo ” in the different files (the ones in the title on this post ;) ). And launched screen to see which files were actually sourced.

The solution was quite simple. Let screen(1) spawn its shells as your login shell using the $SHELL environment variable. Add the following to /etc/screenrc or ~/.screenrc:

# make the shell in every window as your login shell
shell -$SHELL

À bon entendeur, salut!

Ignace M

FreeBSD: keep root’s shell inside /bin!

I just upgraded my server from FreeBSD 7.2-RELEASE to 8.0-RELEASE.

The upgrade steps are very clearly stated in the FreeBSD 8.0-RELEASE Announcement.

Everything went as planned, until the penultimate step, where I was supposed to follow Colin Percival’s instructions and rebuild all my ports before executing the final: freebsd-update install.

Instead of rebuilding my ports, I just executed the last step (# freebsd-update install), which rendered *all* of my third party application unusable. This of course includes bash(1)! I was now unable to start a new bash session, hence unable to start new ssh connections, as my user’s default shell is /usr/bin/local/bash.

Read the rest of this entry »


  • Pages displayed : 534079
  • Unique visitors : 243487
  • Pages displayed in last 24 hours : 304
  • Unique visitors in last 24 hours : 2