Andy Parker <andy <at> puppetlabs.com> writes:
> So the apt provider should uninstall and then reinstall when the
> ensured version is less than the installed version? That sounds
> reasonable on the surface, but seems like it will have a lot of
> unintended consequences. For instance, what should be done with
> dependencies?

Downgrading should result in an error, and not be automatically completed as it
is not supported. Uninstalling and reinstalling a package will not always work
if the configuration format has changed or the data format has changed.
However, the lack of support for downgrading does not negate the value of
specifying the package version. Specifying a package version ensures that your
currently supported version is consistently installed across all nodes.

> Has puppet using --force-yes caused specific problems that could be addressed?

Here is an example of where --force-yes causes problems. This demonstrates two
ways using force-yes can break your system. The first being installing a
package and breaking dependencies. The second being downgrading a package where
the packages configuration or data format is not backward compatible.

I think it is suprising to a user of puppet that merely specifying the version
of a package results in this flag being set, given the dire warning in the
manpage, "Using force-yes can potentially destroy your system!". This flag
should be a separate puppet option on the package type.

1. Install bacula 5.2.6 on Debian Squeeze

    $ sudo apt-get install -t squeeze-backports bacula-server

2. Try to downgrade to 5.0.2, apt-get correctly refuses

    $ sudo apt-get -y install bacula-common=5.0.2-2.2+b1
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer 
required:
      python-minimal bacula-common-sqlite3 sqlite mt-st dbconfig-common
libsqlite0 python bacula-common mtx sqlite3
    Use 'apt-get autoremove' to remove them.
    Suggested packages:
      bacula-doc
    The following packages will be REMOVED:
      bacula bacula-client bacula-console bacula-director-common
bacula-director-sqlite3 bacula-fd bacula-sd bacula-sd-sqlite3 bacula-server
bacula-traymonitor
    The following packages will be DOWNGRADED:
      bacula-common
    0 upgraded, 0 newly installed, 1 downgraded, 10 to remove and 2 not 
upgraded.
    Need to get 635 kB of archives.
    After this operation, 3,817 kB disk space will be freed.
    E: There are problems and -y was used without --force-yes

3. Ignore the warning and downgrade anyway

    $ sudo apt-get -y --force-yes install bacula-common=5.0.2-2.2+b1
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer 
required:
      python-minimal bacula-common-sqlite3 sqlite mt-st dbconfig-common
libsqlite0 python bacula-common mtx sqlite3
    Use 'apt-get autoremove' to remove them.
    Suggested packages:
      bacula-doc
    The following packages will be REMOVED:
      bacula bacula-client bacula-console bacula-director-common
bacula-director-sqlite3 bacula-fd bacula-sd bacula-sd-sqlite3 bacula-server
bacula-traymonitor
    The following packages will be DOWNGRADED:
      bacula-common
    0 upgraded, 0 newly installed, 1 downgraded, 10 to remove and 2 not 
upgraded.
    Need to get 635 kB of archives.
    After this operation, 3,817 kB disk space will be freed.
    Get:1 http://debian.mirrors.tds.net/debian/ squeeze/main bacula-common amd64
5.0.2-2.2+b1 [635 kB]
    Fetched 635 kB in 0s (2,010 kB/s)
    (Reading database ... 22487 files and directories currently installed.)
    Removing bacula ...
    Removing bacula-client ...
    Removing bacula-console ...
    Removing bacula-server ...
    Removing bacula-director-sqlite3 ...
    Stopping Bacula Director...:.
    Removing bacula-director-common ...
    Removing bacula-fd ...
    Stopping Bacula File daemon...:.
    Removing bacula-sd-sqlite3 ...
    Removing bacula-sd ...
    Stopping Bacula Storage daemon... :.
    Removing bacula-traymonitor ...
    Processing triggers for man-db ...
    dpkg: warning: downgrading bacula-common from 5.2.6+dfsg-1~bpo60+1 to
5.0.2-2.2+b1.
    (Reading database ... 22387 files and directories currently installed.)
    Preparing to replace bacula-common 5.2.6+dfsg-1~bpo60+1 (using
.../bacula-common_5.0.2-2.2+b1_amd64.deb) ...
    Unpacking replacement bacula-common ...
    dpkg: warning: unable to delete old directory '/etc/tmpfiles.d': Directory
not empty
    Processing triggers for man-db ...
    Setting up bacula-common (5.0.2-2.2+b1) ...
    Installing new version of config file /etc/bacula/scripts/btraceback.gdb ...

  - Package list

        $ dpkg -l|grep bacula
        ii  bacula-common                       5.0.2-2.2+b1                
network backup, recovery and verification - common support files
        ii  bacula-common-sqlite3               5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - SQLite v3 common files
        rc  bacula-console                      5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - text console
        rc  bacula-director-common              5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - Director common files
        rc  bacula-director-sqlite3             5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - SQLite 3 storage for Director
        rc  bacula-fd                           5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - file daemon
        rc  bacula-sd                           5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - storage daemon
        rc  bacula-traymonitor                  5.2.6+dfsg-1~bpo60+1        
network backup, recovery and verification - tray monitor

4. Result package is broken. If you then install missing dependencies, the
   package will still be broken as the bacula database format has changed
   between 5.0.2 &  5.2.6

Thanks, Jesse



-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to