Re: How to check applications vs. libraries
On Wednesday 03 October 2007 14:49:41 RW wrote: > On Wed, 3 Oct 2007 14:25:18 +0200 > > Mel <[EMAIL PROTECTED]> wrote: > > On Tuesday 02 October 2007 22:53:20 RW wrote: > > > On Tue, 2 Oct 2007 19:23:29 +0200 > > > > > > Daniel Tourde <[EMAIL PROTECTED]> wrote: > > > > I am used to install FreeBSD applications by using the port > > > > collection. I also update regularly (twice a month or something) > > > > the apps, using 'portupgrade -a -N' on a refreshed port > > > > collection. > > > > > > > > Here are my questions: > > > > - How can I check that the apps that have been build with certain > > > > libraries still work when some of the libs have been updated? > > > > - Is it possible then to rebuild the selected set of apps that > > > > have been 'corrupted' by the library upgrade (classicaly from > > > > liba.1 to liba.2)? If yes, how? > > > > > > Generally this doesn't cause a problem as when portupgrade upgrades > > > a library through a major revision, it puts a copy of the old > > > library into a compatibility directory. > > > > True. /usr/local/lib/compat/pkg > > > > > Applications that depend on updated libraries get version-bumped > > > when the library major version gets changed > > > > Not true. Only direct dependants get version bumped and not > > consistently either. > > It only matters where there is a direct library dependency. And even > then it doesn't matter all that much because of the back-up libraries. It matters when a build machine links with a stale version, but packages it with the current version dep in +CONTENTS. This will not happen with direct dependant, but will happen if the dependency is further down the chain. > If you follow the UPDATING instructions for when to do `portupgrade > -fr' and keep you ports up to date, you shouldn't need to worry. Except that portupgrade -fr ignores HOLD_PKGS and I'll risk getting a non-working Xorg installation. Also, I think with the introduction of UPDATING the need to not break things got less important and at the same time more people started to automate upgrading ports, because we got spoiled with a stable almost never breaking ports tree and multi-core machines. This now bites eachother. > Any > residual paranoia beyond that is better satisfied by running > portmanager in pristine mode IMO. Yeah, I'm slowly coming to realize that recompiling all dependants isn't such a bad idea in distributed environments (build machine and slaves). -- Mel ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How to check applications vs. libraries
On Wed, 3 Oct 2007, Mel wrote: I use the following little php script to identify programs/libraries still using old libs: #!/usr/local/bin/php -q /dev/null| grep compat/pkg'; $search_paths = array('bin', 'sbin', 'lib', 'libexec'); chdir($localbase); foreach($search_paths AS $path) { echo("==> $path\n"); $files = glob("$path/*"); foreach($files AS $file) { $check = shell_exec(sprintf($cmd_fmt, $file)); if( empty($check) ) continue; // pretty print reformat $check = preg_replace('/^.*?=>/m', "\t\t=>", $check); echo("\t$file depends on:\n$check"); } } ?> Interesting. Here's a Ruby version, which shows either I have no old dependencies or that I just didn't translate it correctly: #!/usr/local/bin/ruby localbase = ENV["LOCALBASE"] || '/usr/local' Dir.chdir(localbase) %w( bin sbin lib libexec ).each do |path| puts path Dir.glob(path + '/*').each do |file| check = `/usr/bin/ldd "#{file}" 2>/dev/null | grep compat/pkg` next if check.empty? check.sub!(/^.*?=>/m, "\t\t=>") puts "\t#{file} depends on:\n#{check}" end end -Warren Block * Rapid City, South Dakota USA ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How to check applications vs. libraries
On Wed, 3 Oct 2007 14:25:18 +0200 Mel <[EMAIL PROTECTED]> wrote: > On Tuesday 02 October 2007 22:53:20 RW wrote: > > On Tue, 2 Oct 2007 19:23:29 +0200 > > > > Daniel Tourde <[EMAIL PROTECTED]> wrote: > > > I am used to install FreeBSD applications by using the port > > > collection. I also update regularly (twice a month or something) > > > the apps, using 'portupgrade -a -N' on a refreshed port > > > collection. > > > > > > Here are my questions: > > > - How can I check that the apps that have been build with certain > > > libraries still work when some of the libs have been updated? > > > - Is it possible then to rebuild the selected set of apps that > > > have been 'corrupted' by the library upgrade (classicaly from > > > liba.1 to liba.2)? If yes, how? > > > > Generally this doesn't cause a problem as when portupgrade upgrades > > a library through a major revision, it puts a copy of the old > > library into a compatibility directory. > > True. /usr/local/lib/compat/pkg > > > Applications that depend on updated libraries get version-bumped > > when the library major version gets changed > > Not true. Only direct dependants get version bumped and not > consistently either. It only matters where there is a direct library dependency. And even then it doesn't matter all that much because of the back-up libraries. If you follow the UPDATING instructions for when to do `portupgrade -fr' and keep you ports up to date, you shouldn't need to worry. Any residual paranoia beyond that is better satisfied by running portmanager in pristine mode IMO. > To recompile all dependants against the latest > version of a library, one has to find out which port the older > version in /usr/local/lib/compat/pkg belongs to and forcibly upgrade > all deps of that package, using `portupgrade -fr'. > ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How to check applications vs. libraries
On Tuesday 02 October 2007 22:53:20 RW wrote: > On Tue, 2 Oct 2007 19:23:29 +0200 > > Daniel Tourde <[EMAIL PROTECTED]> wrote: > > I am used to install FreeBSD applications by using the port > > collection. I also update regularly (twice a month or something) the > > apps, using 'portupgrade -a -N' on a refreshed port collection. > > > > Here are my questions: > > - How can I check that the apps that have been build with certain > > libraries still work when some of the libs have been updated? > > - Is it possible then to rebuild the selected set of apps that have > > been 'corrupted' by the library upgrade (classicaly from liba.1 to > > liba.2)? If yes, how? > > Generally this doesn't cause a problem as when portupgrade upgrades a > library through a major revision, it puts a copy of the old library > into a compatibility directory. True. /usr/local/lib/compat/pkg > Applications that depend on updated libraries get version-bumped when > the library major version gets changed Not true. Only direct dependants get version bumped and not consistently either. To recompile all dependants against the latest version of a library, one has to find out which port the older version in /usr/local/lib/compat/pkg belongs to and forcibly upgrade all deps of that package, using `portupgrade -fr'. I use the following little php script to identify programs/libraries still using old libs: #!/usr/local/bin/php -q /dev/null| grep compat/pkg'; $search_paths = array('bin', 'sbin', 'lib', 'libexec'); chdir($localbase); foreach($search_paths AS $path) { echo("==> $path\n"); $files = glob("$path/*"); foreach($files AS $file) { $check = shell_exec(sprintf($cmd_fmt, $file)); if( empty($check) ) continue; // pretty print reformat $check = preg_replace('/^.*?=>/m', "\t\t=>", $check); echo("\t$file depends on:\n$check"); } } ?> Given time, I could probably come up with something fully automated, but in practice, it boils down to 2 or 3 libraries, usually of the sort gettext, expat, vorbis, xml/xslt. It's not full-proof, because some paths aren't searched, for example /usr/local/openoffice, just adjust the search_paths array if you need to. -- Mel ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How to check applications vs. libraries
On Tue, 2 Oct 2007 19:23:29 +0200 Daniel Tourde <[EMAIL PROTECTED]> wrote: > I am used to install FreeBSD applications by using the port > collection. I also update regularly (twice a month or something) the > apps, using 'portupgrade -a -N' on a refreshed port collection. > > Here are my questions: > - How can I check that the apps that have been build with certain > libraries still work when some of the libs have been updated? > - Is it possible then to rebuild the selected set of apps that have > been 'corrupted' by the library upgrade (classicaly from liba.1 to > liba.2)? If yes, how? > Generally this doesn't cause a problem as when portupgrade upgrades a library through a major revision, it puts a copy of the old library into a compatibility directory. Applications that depend on updated libraries get version-bumped when the library major version gets changed, so just keeping your ports up-to-date is all you normally need to make sure everything is using the latest libraries. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"