Nous constatons à plusieurs reprises que lorsqu'une mise à jour de apache2 arrive et est installée, cela entraîne la suppression du package libapache2-mod-php5 et ne le réinstalle pas automatiquement par la suite.
Nous devons ensuite réinstaller manuellement le libapache2-mod-php5 pour restaurer la fonctionnalité de notre serveur web.
Veuillez consulter le gist github suivant, c'est une section continue du dpkg.log de notre serveur montrant la mise à jour du 14 novembre 2011 à apache2:
https://gist.github.com/1368361
elle inclut
2011-11-14 11:22:18 supprimer libapache2-mod-php5 5.3.2-1ubuntu4.10 5.3.2-1ubuntu4.10
S'agit-il d'un problème connu? D'autres personnes le voient-elles aussi? Je n'ai trouvé aucun rapport de bug sur launchpad à ce sujet.
Détails de la plateforme:
$ lsb\_release -ds
Ubuntu 10.04.3 LTS
$ uname -srvm
Linux 2.6.38-12-virtual #51~lucid1-Ubuntu SMP Thu Sep 29 20:27:50 UTC 2011 x86\_64
$ dpkg -l | awk '/ii.\*apache/ {print $2 " " $3 }'
apache2 2.2.14-5ubuntu8.7
apache2-mpm-prefork 2.2.14-5ubuntu8.7
apache2-utils 2.2.14-5ubuntu8.7
apache2.2-bin 2.2.14-5ubuntu8.7
apache2.2-common 2.2.14-5ubuntu8.7
libapache2-mod-authnz-external 3.2.4-2+squeeze1build0.10.04.1
libapache2-mod-php5 5.3.2-1ubuntu4.10
Merci
À un niveau supérieur, le processus de mise à jour ressemble à :
package package\_name do
action :upgrade
case node\[:platform\]
when 'centos', 'redhat', 'scientific'
options '--disableplugin=fastestmirror'
when 'ubuntu'
options '-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"'
end
end
Mais à un niveau inférieur
def install\_package(name, version)
run\_command\_with\_systems\_locale(
:command => "apt-get -q -y#{expand\_options(@new\_resource.options)} install #{name}=#{version}",
:environment => {
"DEBIAN\_FRONTEND" => "noninteractive"
}
)
end
def upgrade\_package(name, version)
install\_package(name, version)
end
Ainsi, Chef utilise "install" pour faire "update".
Cela déplace un peu la question vers "comment apt-get safe-upgrade se souvient de réinstaller libapache-mod-php5?"
La séquence exacte des packages qui ont déclenché ceci était :
apache2
apache2-mpm-prefork
apache2-mpm-worker
apache2-utils
apache2.2-bin
apache2.2-common
Mais le code essaie de vérifier que les packages de cette liste sont déjà installés avant de tenter de les "mettre à jour".
case node\[:platform\]
when 'debian', 'centos', 'fedora', 'redhat', 'scientific', 'ubuntu'
# première façon primitive est de définir les mises à jour dans la recette
# des data bags seront utilisés plus tard
%w/
apache2
apache2-mpm-prefork
apache2-mpm-worker
apache2-utils
apache2.2-bin
apache2.2-common
/.each{ |package\_name|
Chef::Log.debug("est-ce que #{package\_name} est parmi les packages locaux disponibles pour les changements?")
next unless node\[:packages\]\[:changes\].keys.include?(package\_name)
Chef::Log.debug("est-ce que #{package\_name} est disponible pour la mise à jour?")
next unless node\[:packages\]\[:changes\]\[package\_name\]\[:action\] == 'upgrade'
package package\_name do
action :upgrade
case node\[:platform\]
when 'centos', 'redhat', 'scientific'
options '--disableplugin=fastestmirror'
when 'ubuntu'
options '-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"'
end
end
tag('upgraded')
}
# après avoir mis à jour tout, exécutez le mise à jour du cache yum
if tagged?('upgraded')
# Supprimer les anciennes dépendances orphelines et les images du noyau et les en-têtes de noyau, etc.
# Supprimer les fichiers deb mis en cache.
case node\[:platform\]
when 'ubuntu'
execute 'apt-get -y autoremove'
execute 'apt-get clean'
# Re-vérifier bientôt quelles mises à jour sont disponibles.
when 'centos', 'fedora', 'redhat', 'scientific'
node\[:packages\]\[:last\_time\_we\_looked\_at\_yum\] = 0
end
untag('upgraded')
end
end
Mais il est clair que cela échoue puisque le dpkg.log a
2011-11-14 11:22:25 installer apache2-mpm-worker 2.2.14-5ubuntu8.7
sur un système qui n'a pas actuellement apache2-mpm-worker. Je vais devoir discuter de cela avec l'auteur, encore merci.