Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Jun 2017 15:40:07 +0200
From:      Luca Pizzamiglio <luca.pizzamiglio@gmail.com>
To:        freebsd-pkg@freebsd.org
Subject:   pkg rollback
Message-ID:  <CAB88xy_%2BTC4ErxY9UVSkoLH1eeiWNO7Ho%2B_848b09Z_GmDTU-A@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi all,

I'm trying to figure out how an automatic process to upgrade packages
on production machines can look like.

A kind of:
# pkg upgrade
# restart services
# if everything not OK
#   rollback
#   restart services

I'm considering a package repository that is not guaranteeing 100%
stability, like `latest`.
Even intercepting events needing manual intervention (i.e. reported by
UPDATING), a blind pkg upgrade can break the web application running
on top.
So, I was thinking if it's possible to perform some kind of rollback.

to proof if it's possible, I wrote a shell scripts with two features
(it helped me a lot to understand how pkg works):
# backup
## backup the repo sqlite database
## run `pkg update` and determine all actions would be performed by
`pkg upgrade` (a kind of `pkg upgrade` simulation)
## backup all packages from the cache that would be replaced by `pkg upgrade`
## download all new packages to determine potentially conflicts
## backup all packages from the cache that would be replaced by `pkg
upgrade` (after determined conflicts)
## restore the repo sqlite database
# rollback
## restore the repo sqlite database
## install all previously backup'ed packages

Another approach, less complex, but I guess even valid, could be:
# backup (or snapshot)
## backup of the repo sqlite database
## take a snapshot of all installed packages
# rollback (a previously stored snapshot)
## restore the repo sqlite database
## reinstall all previously backup'ed packages

Adding two features [snapshot and rollback] to pkg(8), the automated
upgrade process would become:
# pkg snapshot
# pkg upgrade
# restart services
# if everything not OK
#   rollback
#   restart services

What do you think?
What am I missing?
Ideas, suggestions and feedback are welcome, so, please, feel free to reply.

Best regards,
Luca

PS: I'd use `pkg snapshot`, because `pkg backup` already exist and it
has another meaning.
PS2: In some case, `zfs snapshot` could work as well, but it's not
always possible
PS3: if feebacks are positive, I'd like to implement those features



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB88xy_%2BTC4ErxY9UVSkoLH1eeiWNO7Ho%2B_848b09Z_GmDTU-A>