>Am 22.04.2010 14:49, schrieb Diane Bruce:
>> On Tue, Apr 20, 2010 at 10:11:24PM -0400, Aryeh M. Friedman wrote:
>>> I acciddentally rm'ed my /var/db/pkg and want to know is it possible to
>>> rgenerate it (I have portmaster and portupgrade installed)
>>
>>
>> You would have to write a script which went through each file in
>> /usr/local/bin and /usr/local/lib (mostly sufficient) and examined
>> every single pkg-plist looking for the corresponding file. Then you
>> know what port the file was generated by. Needless to say, this would
>> be somewhat horrible.
>
>Diane,
>
>it's not *that* bad. Consider this algorithm:
>
>1. scan for files under /usr/local/{bin,include,lib,libexec,sbin} and sort or
>hash the list - perhaps guess just a port name from an executable in 
>/usr/local/bin
>
>2. Repeat:
>
>  2.1 use the next file from the list and search for it
>  2.2 once you have a port name for this file, obtain the packing list and
>remove it from the file list in 1. This cuts down the list from 1 quite a bit.
>
>3. Now print the list of ports found,
>   and print the list of files not found in ports
>
>
>Surely and index of plist files in port default configurations could help big
>time, but even a blunt ( cd /usr/ports && find . -mindepth 3 -maxdepth 3 -name
>pkg-plist -exec egrep FILENAME '{}' + ) might be reasonable given sufficient 
>RAM
>so that it runs from cache for the 2nd file you inquire.
>
>If that is too slow, a step between 1 and 2 could procure all pkg-plists as 
>some
>sort of FILEINDEX file to accelerate searches.
>
>HTH
>Matthias

By the time you account for CONFLICTS, dynamic plists, substitutions
in plists, etc., I'd have to agree with Diane that this is a pain.  It
could be done, and would help to reconstruct most if not all of an
average user's /var/db/pkg, but it's laborious.

b.
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to