Construction paquet .deb pour php5.4

Bonjour,

Je dispose d’un serveur web sur lequel php5.5 est installé. Je souhaite y ajouter une version 5.4 car j’ai des sites en cours de migration qui ne supporte pas la version 5.5.

Je dois donc recompiler un php5.4 depuis les sources. Je ne souhaite pas recompiler directement sur le serveur web de prod. J’ai donc une copie de ce serveur en local.

J’arrive a exécuter le configure ainsi que le make sur ma machine locale. L’idée maintenant de packager la version php5.4 dans un .deb que je pourrais ensuite installer sur le serveur de prod.

J’ai pour cela suivi un tuto d’introduction sur la génération d’un paquet debian, mais je bloque sur un point particulier.

Pour que le configure fonctionne correctement, j’ai besoin de faire des liens symboliques, par exemple celui ci:

Malheureusement j’obtiens systématiquement un permission denied dans l’environnement chrooté.

Voici le contenu de mon fichier debian/rules:

[code]export DH_VERBOSE=1
DESTDIR=
CONFIGURE = CFLAGS=’$(CFLAGS)’ ./configure --with-jpeg-dir=/usr/local/php5438-cgi
–with-config-file-scan-dir=/usr/local/php5438-cgi/php.d
–with-png-dir=/usr/local/php5438-cgi
–prefix=/usr/local/php5438-cgi

configure: configure-stamp
configure-stamp:
dh_testdir -a
@echo "Doing $@"
if test -f Makefile; then make clean; fi
ln -sf /usr/share/misc/config.sub .
ln -sf /usr/share/misc/config.guess .
rm -f config.cache
#mkdir -p $(DESTDIR)/usr/include/
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h
$(CONFIGURE)
touch configure-stamp

build: build-stamp
build-stamp: configure-stamp
dh_testdir -a

    # Add here commands to compile the package.
    make all
    #docbook-to-man debian/nagios.sgml > nagios.1

    touch $@

clean:
dh_testdir
dh_testroot
rm -f build-stamp

    # Add here commands to clean up after the build process.
    [ ! -f Makefile ] || $(MAKE) distclean
    rm -f config.sub config.guess

    dh_clean

install: build
@echo "Doing $@"
dh_testdir -a
dh_testroot -a
dh_clean -k
dh_installdirs -a -i
$(MAKE) install
[/code]

J’ai essayé pas mal de syntaxe différente, mais soit j’ai permission denied ou alors j’ai No such file or directory

Sauriez vous me filer un coup de main pour m’expliquer ce que j’ai raté ?

Merci d’avance,
Nico

Hello,

Je n’arrive toujours pas à packager, personne n’a une idée ? Je ne pense pas que je sois le premier à vouloir faire un package debian :blush:

Merci de votre aide
Nico

Salut,

Lances une recherche en section T&A (Trucs et Astuces).

Hello,

Merci de ton retour.

J’avais déjà vu l’article de FranB. Je l’ai repris à tête reposée.
Ce que je note c’est qu’apparemment il y a plusieurs façons de faire un .deb. Je m’y perds un peu.

J’ai cru entrevoir que je pouvais me passer de l’étape ./configure, et la faire de manière classique (dans l’environnement non chrooté). Est-ce exact ? Si oui, comment dire alors au process de build de ne pas faire le ./configure ?

Merci.
Nico

Hello,

J’ai fais autrement, mais je bloque toujours.

J’ai fais mon ./configure normalement, ensuite j’ai exécuté la commande suivante:

et j’obtiens pour (je pense) chaque lib le message suivant:

dpkg-source: erreur: impossible d'identifier les changements de ext/date/lib/unixtime2tm.o : contenu d'un fichier binaire modifié
dpkg-source: erreur: Ajoutez ext/date/lib/unixtime2tm.o dans debian/source/include-binaries si vous souhaitez conserver le binaire modifié dans le ficher tar debian

Normalement à l’issue de cette commande je dois obtenir mon .deb, or ce n’est pas le cas. Bref je suis paumé :open_mouth:

Je vous rappelle ce que je souhaite faire:

Je dois compiler plusieurs versions de php avec un prefix différent à chaque fois. J’ai donc récupéré les sources de php sur le site officiel. J’arrive parfaitement à faire le configure, make et make install. Mais lorsqu’il s’agit de faire ces opérations dans le but de créer un paquet debian, et bien cela ne fonctionne plus.

Votre aide et vos conseils avisés me seraient très utiles
Merci de votre aide

Nico

Hello,

Bon vraiment je sèche, ça fait une semaine…

Je ne comprends pas cette erreur:

if test -f /usr/lib/libc-client.a; then echo "libc client exists"; fi
libc client exists
if test -d /usr/lib64; then echo "lib64 exists"; fi
ln -s /usr/lib/libc-client.a /usr/lib64/
ln: target '/usr/lib64/' is not a directory: No such file or directory

Le fichier libc-client.a existe, le répertoire /usr/lib64 existe mais pourtant /usr/lib64 n’est pas un répertoire !?

Personne n’a jamais tenté de faire un paquet debian un peu évolué par ici ?

Merci vraiment de l’aide que vous pourriez m’apporter
Nico

J’ai une question :

Une alternative sinon : phpfarm. Cela permet d’avoir plusieurs versions de php apparemment.

Hello

Merci pour ton retour.

Plutôt côté phpfarm car il me faut installer plusieurs versions en parallèle.

Nico

Hello,

Bon, concernant phpfarm, ça ne répond pas à mon besoin dans le sens où il faut l’installer sur la machine de prod. Les versions de php sont alors compilées directement sur la cible, ce que je ne souhaite pas.

En revanche, j’ai avancé sur le process de création du paquet debian. J’ai résolu tous les problèmes liés au configure, en adaptant le script configure. De ce fait je n’ai plus aucun lien symbolique ou répertoire à créer. Cela résout donc le problème permission denied.

Enfin, c’est ce que je pensais…

J’arrive maintenant à l’étape du make install, mais voici les erreurs que j’obtiens:

Installing with make install...

========================= Installation results ===========================
make[1]: Entering directory `/tmp/buildd/php-5.3.29'
Installing PHP SAPI module:       cgi
mkdir: cannot create directory '/usr/local/php5438-cgi': Permission denied
mkdir: cannot create directory '/usr/local/php5438-cgi/bin': No such file or directory

Finalement j’ai le même problème que lors de l’étape de configuration…

Il doit y avoir un truc qui me manque sur la création de répertoires/fichiers.

J’ai donc lister dans un fichier debian/dirs les répertoires qui sont créés par le make install, mais ça ne change rien. J’ai alors créé l’arborescence des répertoires sous le répertoire debian, mais ça ne fonctionne pas non plus. Bref, je sais pas ce qu’il manque pour pbuilder puisse créer des fichiers/répertoires.

Merci d’avance encore pour l’aide que vous pourriez m’apporter.
Nico

Autre question : après avoir créé ton paquet deb, l’installer sur ta machine de prod va bien remplacer et non se placer à côté de ton php 5.5 non ?

Hello,

Pour que j’installe le paquet debian, il faut réussir à le créer :slightly_smiling: ce que je cherche encore à faire :017

Et le paquet ne remplace pas la version actuelle de PHP, mais s’installe à côté, ici dans le rep /usr/local/php5438 pour la version 5.4.38.

Nico

Hello,

Bon bon bon :smiley:

J’ai pas mal avancé, et j’arrive maintenant à passer l’étape de l’install. Il fallait en fait modifier le prefix, car au sein de l’environnement chrooté, on ne peut pas installer à l’emplacement cible.

Maintenant je bloque sur l’étape dpkg-genchanges

dpkg-genchanges error cannot fstat file no such file or directory

Je ne trouve pas l’origine du problème. L’archi est bien positionnée à any dans le fichier debian/control. J’ai essayé de créer le fichier moi même mais toujours la même erreur.

Bref je tourne en rond depuis 3 jours avec cette erreur qui je pense doit être la dernière…

Any idea :017

Merci,
Nico

Pour info, j’ai suivi ce tuto : compilation et création du .deb réussie sur une wheezy et une squeeze.

Hello,

En effet Flavien, la méthode dans le tuto fonctionne. Seulement, avec cette méthode on ne vérifie pas si il manque des dépendances ou pas. C’est tout l’intérêt de la solution chrooté qui de base n’a rien, on est alors certain d’ajouter la liste exhaustive des dépendances lors de la construction du paquet.

Du coup je suis toujours bloqué sur le dpkg-genchanges, et je ne trouve toujours pas la solution. Cela commence à m’inquiéter, pourtant je pense que je ne suis pas le seul à avoir rencontré ce problème j’imagine.

Les différentes solutions que j’ai trouvé sur le net ne fonctionnent pas, du coup je ne sais pas quoi faire.

Merci de l’aide que vous pourriez m’apporter
Nico

et le backport dans anciennes version de php?
backports.debian.org/

Hello

Oui mais ça va desinstaller la version actuellement installée non ?

Nico

Oui si tu veux les deux versions en même temps tu peux t’orienter aussi vers d’autres outils qui le proposent comme phpswitch jubianchi.github.io/phpswitch/ il y en a un autre mais je ne me rappel pas son nom sinon la recompilation du langage est faisable mais quelques fois compliqué dépendant des extensions dont tu as besoins.

Généralement il y est conseillé de tout désactivé et de n’activer que le nécessaire.

Pour la création de .deb je n’ai jamais donc dsl je ne pourrais pas t’aider d’avantage sur le sujet.

Hello,

Ok merci, j’ai déjà regardé de ce côté, mais ça ne répond pas à mon besoin. Il me faut impérativement construire un paquet deb en environnement complètement isolé, je n’y arrive toujours pas. Ca fait un mois que je galère pfiou. Je comprends pas que je sois le seul à vouloir essayer de faire cela.

Nico

Tu sais que php 5.4 est dans les dépôts ?