pkg_trans progress

Ivan Voras ivoras at freebsd.org
Wed Oct 8 21:46:30 UTC 2008


Hi,

Some time ago I've written about an idea to extend the standard
ports/package infrastructure with "transactions". Here are some notes on it:

http://wiki.freebsd.org/IvanVoras/PkgTransProposal

I've been working on it, and the code itself appears to have severely
bad karma, being twice almost completely lost in hardware or software
failures, so I'm publishing it now so it doesn't get lost again :)

The build tree is at

http://people.freebsd.org/~ivoras/big/pkg_install.tgz

To use it:

* Extract it somewhere
* Run make in the created directory
* su to root
* Run make install

Now you have a new utility, pkg_trans, and additions to existing pkg_add
and pkg_delete utilities. It's highly recommended you also add
pkg_trans_save_deleted_packages="YES" to /etc/rc.conf (suggestions for
better placement of this configurable is welcome). To undo this, run
make install from the normal build tree (at
/usr/src/usr.sbin/pkg_install) and manually remove the pkg_trans utility.

The additional pkg_trans utility is called by patched pkg_add and
pkg_delete, to isolate transaction functionality and minimize changes to
pkg_add and pkg_delete. It also serves to query transactions and undo them.

The man pages are not yet updated, but the wiki page above has simple
descriptions of new options. Here's what currently works:

* Recording pkg_add and pkg_delete transactions (one invocation of
pkg_add/pkg_delete is one transaction, no matter how many packages it
touches).
* Backing up of packages in pkg_delete transactions
* Undoing those transactions
* Querying transaction records.

The transaction records are installed in /var/db/pkgtrans and
/usr/ports/pkgtrans .

For illustration, here's a sample console session with the new
utilities. Note that sqlcached requires sqlite as a dependancy.
Arguments to pkg_trans do the following: -l : list all recorded
transactions, -i : show info about a particular transaction, -u : undo a
transaction. The rest should be self-explanatory.

----

v8:/home/ivoras/temp# ll
total 1
-rw-r--r--  1 root  ivoras   14896 Aug  1 10:17 sqlcached-r4.tbz
-rw-r--r--  1 root  ivoras  639829 Aug  1 07:26 sqlite-2.8.17_1.tbz

v8:/home/ivoras/temp# pkg_info|grep sql

v8:/home/ivoras/temp# pkg_trans -l
0 transaction records found.

v8:/home/ivoras/temp# pkg_add sqlcached-r4.tbz
pkg_add: warning: package 'sqlite-2.8.17_1' requires
'pkg-config-0.23_1', but 'pkg-config-0.22_1' is installed
pkg_add: warning: package 'sqlcached-r4' requires 'pkg-config-0.23_1',
but 'pkg-config-0.22_1' is installed

v8:/home/ivoras/temp# pkg_trans -l
000000001 (2 pkgs added) Wed Oct  8 23:07:04 2008
1 transaction records found.

v8:/home/ivoras/temp# pkg_trans -i -z 1
Transaction 000000001, started on Wed Oct  8 23:07:16 2008
ADD sqlcached-r4
ADD sqlite-2.8.17_1

v8:/home/ivoras/temp# pkg_delete sqlcached-r4 sqlite-2.8.17_1

v8:/home/ivoras/temp# pkg_trans -l
000000001 (2 pkgs added) Wed Oct  8 23:07:04 2008
000000002 (2 pkgs removed) (2 pkgs backed up) Wed Oct  8 23:07:40 2008
2 transaction records found.

v8:/home/ivoras/temp# pkg_trans -i -z 2
Transaction 000000002, started on Wed Oct  8 23:07:55 2008
DEL,B sqlite-2.8.17_1
DEL,B sqlcached-r4

v8:/home/ivoras/temp# pkg_info|grep sql

v8:/home/ivoras/temp# pkg_trans -u -z 2
pkg_add: warning: package 'sqlite-2.8.17_1' requires
'pkg-config-0.23_1', but 'pkg-config-0.22_1' is installed
pkg_add: warning: package 'sqlcached-r4' requires 'pkg-config-0.23_1',
but 'pkg-config-0.22_1' is installed

v8:/home/ivoras/temp# pkg_info | grep sql
sqlcached-r4        A cache daemon using SQL for data manipulation
sqlite-2.8.17_1     An SQL database engine in a C library w/ Tcl wrapper

v8:/home/ivoras/temp# pkg_trans -l
000000001 (2 pkgs added) Wed Oct  8 23:07:04 2008
1 transaction records found.

v8:/home/ivoras/temp# pkg_trans -u -z 1

v8:/home/ivoras/temp# pkg_trans -l
0 transaction records found.

v8:/home/ivoras/temp# pkg_info|grep sql

v8:/home/ivoras/temp#

----

In addition, the utilities now create a file called +USER_INSTALLED in
the install package database for all packages explicitely installed by
the user (i.e. not pulled in as a dependancy). At least this is how it
should work, I'm not sure I tracked down all cases when dependancies are
pulled.

There's currently little "smart" behaviour WRT undoing transactions
depending on other transactions, etc. This is planned but seeing how I'm
little short on time, patches are also welcome.

Also, to make this truly usable, the "make install" infrastructure will
have to be aware of this, and also the utilities like portupgrade. As
I've said before, I cannot work on these so I'm hereby officially
requesting help for those parts.

Testers are welcome for this work, please report back even if it works
well :)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 258 bytes
Desc: OpenPGP digital signature
Url : http://lists.freebsd.org/pipermail/freebsd-ports/attachments/20081008/0c2a560a/signature.pgp


More information about the freebsd-ports mailing list