Invalid command ‘Header’, perhaps misspelled or defined by a module not included in the server configuration

You have this error message on your apache logs

/home/www/.htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

Check the .htaccess file and there is no Header command…

<FilesMatch "\.(xml|jpg)$">
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>

In fact, this issue is due to the header apache’s module whose’s missing.
To install it, run

a2enmod headers

And don’t forget to restart apache

service apache2 restart

Installing pear beta packages

You are trying to install a new pear package but get an error because pear is configured as stable and the package is beta ?

pear install Spreadsheet_Excel_Writer
Failed to download pear/Spreadsheet_Excel_Writer within preferred state "stable", latest release is version 0.9.3, stability "beta", use "channel://pear.php.net/Spreadsheet_Excel_Writer-0.9.3" to install
install failed

Here some tips to help you :
– force installation with -f

pear install -f Spreadsheet_Excel_Writer-0.9.3

– change pear preferences

pear config-set preferred_state beta
pear install Spreadsheet_Excel_Writer-0.9.3
pear config-set preferred_state stable

or do it directly within the same command

pear -d preferred_state=beta install Spreadsheet_Excel_Writer-0.9.3

– add the shorcut -beta at the end of the package name

pear install Spreadsheet_Excel_Writer-0.9.3-beta

SSH scp error no hostkey alg

ssh works well but when you try to copy a file via scp you get this error

no hostkey alg

Go on your server and check if you have /etc/ssh/ssh_host_rsa_key and /etc/ssh/ssh_host_dsa_key files, if not, generate them

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

SSH Read from socket failed: Connection reset by peer

After installing a container with lxc I wasn’t able to connect via ssh to my container, I get the following message :

root@ns313:~# ssh 10.50.10.10
Read from socket failed: Connection reset by peer

Network works normally, I can ping, hotst both direction and I can get pages from apache’s container from the dom0.

I tried to connect to ssh from container, in local and I get the same error.

root@container:/etc/ssh#ssh 10.50.10.10 -l root
Read from socket failed: Connection reset by peer

Strange, first time ssh doesn’t work on any machine.
Try restart sshd

root@container:/etc/ssh# /etc/init.d/ssh restart
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
[....] Restarting OpenBSD Secure Shell server: sshdCould not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
. ok 

SSH keys are missing, to fix it, run this command :

root@container:/etc/ssh# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

SSH How to connect without password

A classic hack for linux users, connect via ssh without password.

First, on your client, generate public key

ssh-key-gen -t rsa

keep ~/.ssh/id_rsa by default.

Copy public key (~/.ssh/id_rsa.pub) from your client to the file ~/.ssh/authorized_keys2 on the server with the ssh-copy-id binary.

Then edit your ~/.ssh/config file on client side to custom your params:

Host dev
  HostName dev.domain.com
  Port 22
  User root

Finaly, you can add an alias in your ~/.bashrc

alias dev='ssh dev'

Now, to launche a ssh connection, just run

dev

Développement d’un module magento avec Git et Modman

Ca fait donc un moment que j’utilise Git dans mes développements quotidiens et jusqu’à présent j’utilisais le fichier .gitignore pour sortir l’ensemble des fichiers de magento de mon repo.

Ensuite il me suffisait d’ajouter les fichiers de mon modules en utilisant le paramètre de forçage ce qui me donnait des trucs du style :

git add -f app/code/community/MonNamespace/MonModule/

Ca fonctionne .. c’est pas optimal et il faut pas oublier d’inclure à la main l’ensemble des fichiers…
Aujourd’hui j’ai décidé d’essayer un outil qui à priori est fait pour faire ce type de développement j’ai nommé modman

En résumé c’est un gros bash qui va s’occuper pour nous :

  • de gérer les interactions avec votre repository git en le clonant dans son répertoire .modman
  • de faire les liens symboliques du repository placé dans .modman et notre instance de Magento

Etape 1 – Création d’un repository git qui va contenir le code de notre module

Donc la première chose à faire est de créer votre nouveau bare repository git avec par exemple le fichier de configuration modman à l’intérieur.

Sur le serveur contenant git

mkdir <monrepot>.git
cd !$
git --bare init

Puis en local chez vous vous préparer à faire votre premier commit

cd /tmp
mkdir temporaire
cd temporaire
git init
git remote add origin <monserveur>/<monrepot>.git
touch modman
git add modman
git commit -f "Initial commit"
git push origin master

et voilà .. fin de la première étape .. votre repo git qui va contenir le module est prêt

Etape 2 – Initialisation de modman et clone

Bon maintenant il vous faut une version toute fraichement installé de magento pour commencer .. je vais pas vous expliquer comment faire .. c’est assez bien décrit ici ou ici

Vous êtes donc désormais dans le DocumentRoot de votre magento et on va commencer par :

  • Initialiser modman
    modman init
  • Cloner notre dépôt git
    modman clone '<monserveur>/<monrepot>.git'

Arrivé ici vous devriez avoir votre repo cloné dans .modman/

Etape 3 – Le fichier de configuration de modman

Le fichier de configuration de modman est relativement simple en gros on a par ligne

 <cible> <source>

Du coup on va commencer avec une configuration basique pour un module à savoir

app/etc/modules/Namespace_Module.xml       app/etc/modules/Namespace_Module.xml
app/code/community/Namespace/Module/       app/code/community/Namespace/Module/

On peut lancer ensuite la commande modman, à la racine de votre documentroot, qui va créer les liens symboliques

modman update <monrepot>

Vous devriez voir apparaître dans les répertoires concernés les liens symboliques mappés sur le repot (dans .modman/xxxx)

Voilà .. pour finir il ne faut pas oublier d’activer la gestion de la prise en compte des liens symboliques dans magento. Ca se passe dans le backend et plus particulièrement dans le menu Système>Configuration>Développeur>Paramètres de gabarit

MySQL custom sort

You are requesting some product on your database and you need to sort results by fixed column values ?
You can use the ORDER BY FIELD() clause.

SELECT * FROM product WHERE product_id IN (4, 2, 8, 9, 5) ORDER BY FIELD(product_id,4, 2, 8, 9, 5)