web-dev-qa-db-fra.com

Comment épingler une version MySQL particulière pour éviter les mises à niveau inutiles?

J'utilise un serveur MySQL et je souhaite le maintenir à jour avec apt-upgrades. Je ne veux pas que MySQL soit mis à jour à moins que je ne le fasse pendant les temps morts planifiés! Comment modifier mes préférences apt pour que cela ne se produise pas?

J'ai essayé d'ajouter ceci à un fichier en tant que /etc/apt/preferences.d/pin-mysql

Package: mysql-client-5.1
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Package: mysql-client-core-5.1
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Package: mysql-common
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Package: mysql-server
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Package: mysql-server-5.1
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Package: mysql-server-core-5.1
Pin: version 5.1.41-3ubuntu12.7
Pin-Priority: 1001

Cela indique ensuite que les paquets sont épinglés avec "apt-cache policy":

... all package sources here
 500 http://security.ubuntu.com/ubuntu/ lucid-security/universe Packages
     release v=10.04,o=Ubuntu,a=lucid-security,n=lucid,l=Ubuntu,c=universe
     Origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ lucid-security/restricted Packages
     release v=10.04,o=Ubuntu,a=lucid-security,n=lucid,l=Ubuntu,c=restricted
     Origin security.ubuntu.com
... etc
Pinned packages:
     mysql-server -> 5.1.41-3ubuntu12.7
     mysql-server-core-5.1 -> 5.1.41-3ubuntu12.7
     mysql-client-core-5.1 -> 5.1.41-3ubuntu12.7
     mysql-common -> 5.1.41-3ubuntu12.7
     mysql-server-5.1 -> 5.1.41-3ubuntu12.7
     mysql-client-5.1 -> 5.1.41-3ubuntu12.7

Cependant ... lancer aptitude safe-upgrade vient de mettre à jour MySQL ... qu'est-ce que je fais de travers?

4
asparagino

Si vous souhaitez empêcher la mise à niveau d'un paquet, épingler n'est pas la solution. Ce dont vous avez besoin s’appelle attente, et vous pouvez savoir comment le faire sur cette page de l’aide en ligne Ubunt

3
user9521

Holding semble être la voie à suivre, bien que je ne sois pas tout à fait sûr de la différence entre dpkg et aptitude.

Quoi qu'il en soit, le script suivant fait ce que je veux et exclut une liste de paquets d'une mise à niveau d'aptitude safe.

#!/bin/bash

# Stop the mysql packages from upgrading!
# Must run as root! Check presence of the packages-hold.log file to avoid running repeatedly.

PACKAGES="mysql-client-5.1 mysql-client-core-5.1 mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1 linux-image-server linux-image-2.6.32-28-server"

for PACKAGE in $PACKAGES;
do
    /bin/echo $PACKAGE hold | /usr/bin/dpkg --set-selections
done
/usr/bin/aptitude hold $PACKAGES
echo $PACKAGES > /var/log/packages-hold.log

Sans faire la ligne de maintien aptitude, aptitude essaierait toujours de mettre à jour les paquets marqués avec la commande dpkg --set-selections et je pense l'inverse s'applique également.

FYI - cela empêche également l’image du noyau de se mettre à jour tout le temps. Cette mise à jour ne m'intéresse que si c'est pour des raisons de sécurité hautement prioritaires car elle est toujours accompagnée d'un redémarrage attaché.

2
asparagino