Les packages précompilés pour Windows tels que WAMP ou XAMPP sont livrés avec une petite interface graphique pour gérer les divers services (daemon). Quand on se compile tout soit même on n’a pas cet outil. Que cela ne tienne !
Voici un batch pour gérer les arrêts/démarrages du daemon httpd d’Apache 2. Il est très pratique quand on met au point une configuration et qu’il faut souvent la recharger.
Il faut obligatoirement exécuter ce batch en faisant un clic bouton droit dessus et en choisissant « exécuter en tant qu’administrateur ». Il y a dans le script une tentative d’utiliser « runas » pour le lancer en admin directement en tapant son nom sur la ligne de commande mais il semble que les droits obtenus avec cette méthode ne soient pas suffisants pour installer le service.
Il faut adapter deux variables au début du fichier:
- le path complet de httpd.exe
- le nom de votre compte ayant les droits d’administrateur,
Il est facile d'étendre ce batch en fonction des besoins. On peut ajouter l’ouverture des fichiers de conf dans un éditeur comme notepad++ et l’affichage des logs (facile à faire si on installe la commande tail de gnuwin32)
@echo off
set HTTPD=C:\Path\to\Apache2\bin\httpd.exe
set ADMUSR=admin
if [%USERNAME%] == [%ADMUSR%] goto :init
@echo.
@echo Droits administrateur requis
runas /profile /user:%ADMUSR% %~dpnx0
if ERRORLEVEL 1 pause
goto :eof
:init
rem Fixe la taille visible de la fenêtre
mode con:cols=80 lines=40
rem Fixe la taille du buffer
powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=80;$B.height=300;$W.buffersize=$B;}"
call :do_help
:loop
@echo.
set /P OP="Operation (help): "
2>nul call :do_%OP%
if ERRORLEVEL 1 call :erreur
goto :loop
:do_h
:do_help
@echo.
@echo == Operations :
@echo h = help
@echo i = info
@echo install, uninstall
@echo start, r = restart, stop
@echo on=(install + start) off=(stop + uninstall) info
@echo q = quit
@goto :done
:do_on
@echo on
%HTTPD% -k install
%HTTPD% -k start
@goto :done
:do_off
@echo on
%HTTPD% -k stop
%HTTPD% -k uninstall
@goto :done
:do_i
:do_info
%HTTPD% -v -V
%HTTPD% -l
%HTTPD% -M
@goto :done
:do_r
set OP=restart
:do_install
:do_start
:do_restart
:do_stop
:do_uninstall
@echo on
%HTTPD% -k %OP%
:done
@echo off
rem force le errorlevel à zéro
ver > nul
goto :eof
:erreur
@echo.
@echo ERREUR: "%OP%" n'est une opération valide.
goto :eof
:do_q
:do_quit
:do_exit
exit
Bon, effectivement, il existe le très spartiate Apache Service Monitor mais qui n’est pas extensible comme notre batch. Son avantage est de pouvoir gérer des serveurs Apache s’exécutant sur des machines Windows distantes.
08 août 2014
01 août 2014
DBD-pg ActiveState & MSVC2013
Dernière étape de notre périple : compiler le driver DBI pour postgresql 9.3 sous Windows.
On suppose que sont déjà installés ces 3 logiciels :
- Visual C/C++ (MSVC 2013) (la version gratuite dite 'express' est suffisante)
- Perl d’ActiveState 5.16 (vous devez pouvoir l’exécuter depuis la ligne de commande)
- PostgreSQL 9.3.x (vous devez pouvoir vous y connecter en local)
(les versions sont données à titre indicatif. Il peut y avoir de variations)
puis décompacter les sources de DBD-pg 3.x
Ouvrir une ligne de commande (cmd.exe) à la racine des sources de DBD-pg
et taper ces 3 commandes:(à adapter suivant les versions de Postgres et de VC)
NB: Si vous utilisez Postgresql 9.0 ou + récent, il faut que ce rôle ai les droits de superviseur sur la base ‘test’.
Adaptez si nécessaire et taper ces 3 commandes :
Failed test 'Dollar quotes with invalid characters are not parsed as identifier
C’est parce que les messages d’erreurs de postgresql ne sont pas en Anglais !
Le test attend « syntax error » et il trouve « erreur de syntaxe », et ça lui va pas...
Pour passer les messages du serveur postgresql en anglais :
Éditer le fichier postgresql.conf (il est dans le répertoire data) et remplacer
lc_messages = 'French_France.1252'
par
lc_messages = 'en_EN.utf8'
Truc : Pour passer la console Windows en UTF8 taper la commande
chcp 65001
Pour que le changement dans postgresql.conf prenne effet arrêter/redémarrer le serveur postgresql depuis une console en admin :
* Que faire si vous avez l’erreur suivante ?
error: permission denied for relation pg_largeobject
Depuis PostgreSQL 9.0 il faut être superuser de la base pour accéder à pg_largeobject.
L’erreur est donc normale si le user ‘test’ n’est pas superuser ET si c'est au moins posgres 9. Vous pouvez lui donner ce droit, refaire les tests.
* Si tout se passe bien ça finit par
Partez pas !
Il reste à supprimer la base de donnée et le rôle utilisé pour les tests.
On suppose que sont déjà installés ces 3 logiciels :
- Visual C/C++ (MSVC 2013) (la version gratuite dite 'express' est suffisante)
- Perl d’ActiveState 5.16 (vous devez pouvoir l’exécuter depuis la ligne de commande)
- PostgreSQL 9.3.x (vous devez pouvoir vous y connecter en local)
(les versions sont données à titre indicatif. Il peut y avoir de variations)
1) Préparer le Makefile de DBD-pg
Télécharger ici : http://search.cpan.org/~turnstep/DBD-Pg/puis décompacter les sources de DBD-pg 3.x
Ouvrir une ligne de commande (cmd.exe) à la racine des sources de DBD-pg
et taper ces 3 commandes:(à adapter suivant les versions de Postgres et de VC)
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"Si les environnements VC, Perl et PostgreSQL sont corrects tout se passe bien.
"C:\Program Files (x86)\PostgreSQL\9.3\pg_env.bat"
perl Makefile.PL
2) Compilation de DBD-pg
Taper la commandenmakeSi vous avez l’erreur 'C:\Program' is not recognized as an internal or external command, operable program or batch file. Voir dans l’article sur la compilation de mod_perl comment le corriger.
3) Tests de DBD-pg
Avant de lancer les tests il faut créer un rôle de connexion ‘test’ et une base de donnée ‘test’ appartenant au rôle ‘test’NB: Si vous utilisez Postgresql 9.0 ou + récent, il faut que ce rôle ai les droits de superviseur sur la base ‘test’.
Adaptez si nécessaire et taper ces 3 commandes :
Set DBI_DSN=dbi:Pg:dbname=testPuis lancer les tests :
Set DBI_USER=test
Set DBI_PASS=xxxx
nmake test* Si vous avez des caractères ou des texte bizarres et/ou si vous avez des erreurs du type
Failed test 'Dollar quotes with invalid characters are not parsed as identifier
C’est parce que les messages d’erreurs de postgresql ne sont pas en Anglais !
Le test attend « syntax error » et il trouve « erreur de syntaxe », et ça lui va pas...
Pour passer les messages du serveur postgresql en anglais :
Éditer le fichier postgresql.conf (il est dans le répertoire data) et remplacer
lc_messages = 'French_France.1252'
par
lc_messages = 'en_EN.utf8'
Truc : Pour passer la console Windows en UTF8 taper la commande
chcp 65001
Pour que le changement dans postgresql.conf prenne effet arrêter/redémarrer le serveur postgresql depuis une console en admin :
sc stop postgresql-9.3
sc start postgresql-9.3
* Que faire si vous avez l’erreur suivante ?
error: permission denied for relation pg_largeobject
Depuis PostgreSQL 9.0 il faut être superuser de la base pour accéder à pg_largeobject.
L’erreur est donc normale si le user ‘test’ n’est pas superuser ET si c'est au moins posgres 9. Vous pouvez lui donner ce droit, refaire les tests.
* Si tout se passe bien ça finit par
...
t/99cleanup.t ....... 1/1 Removing test database directory
t/99cleanup.t ....... ok
All tests successful.
Files=16, Tests=2089, 21 wallclock secs
Result: PASS
4) Installation de DBD-pg
Dernière commande:nmake installIl s’agit juste de copier des fichiers donc pas de problèmes attendus.
Partez pas !
Il reste à supprimer la base de donnée et le rôle utilisé pour les tests.