Man Linux: Main Page and Category List

Name

       Cache::Apt::Lookup - Cache handler for apt-cross and related tools

Description

       Extensively modified portion of NorthernCross using only the Config and
       Cache modules and exposing the package details using a dedicated
       struct.

       Includes code from apt-rdepends to get the Depends info efficiently.

Example

        use Cache::Apt::Lookup;
        use Cache::Apt::Config;
        use Cache::Apt::Package;
        use Debian::DpkgCross;   # for check_arch
        use Data::Dumper;

        my $verbose = 0;    # usually read a command line option to set an integer
        my $arch = "arm";   # usually read a command line string parameter for this.
        my $suite = "unstable";  # or use &get_suite();
        &set_verbose ($verbose);
        &check_arch($arch) if (defined ($arch));

        &setup_config;
        &update_sources;
        my $config = &init_cache($verbose);

Copyright and Licence

        Copyright (C) 2006, 2007  Neil Williams <codehelp@debian.org>

        Copyright (c) 2006, 2007  Alexander Shishkin <alexander.shishkin@siemens.com>

        Copyright (C) 2002-2005  Simon Law <sfllaw@debian.org>

        This package is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>.

compare (A, B)

       Direct link to the apt perl binding for version comparison.

       Compare package version A with B, returning a negative value if A is an
       earlier version than B, zero if the same or a positive value if A is
       later.

init_host_cache($verbose)

       Alternative function that initialises a copy of the host cache in the
       apt-cross directory to provide data on cross packages available for
       installation.

       If $verbose >=4, the full Apt configuration is dumped to STDOUT before
       the call returns.

       The cache lists are not removed when switching from one architecture to
       another.

       Remember which cache has been initialised! Queries are made against
       whichever cache was initialised most recently.

init_cache($verbose)

       Loads the currently configured cache into memory.

       Accepts a verbosity level to support debugging modes.

       If $verbose >=4, the full Apt configuration is dumped to STDOUT before
       the call returns.

clear_config

       Completely clears the current config in preparation for a new set of
       &check_cache_arch, &set_suite and &init_cache;

srclookup($package_name)

       Look up a package name in the source cache and return the raw apt-pkg-
       perl data or undef on error.

binlookup($package_name)

       Look up a package name in the Packages cache and return the raw apt-
       pkg-perl data or undef on error.

deplookup($AptCrossPackage_struct)

       Expects an AptCrossPackage and populates that variable with the
       dependency information for that package using the current cache
       configuration. Returns an array of AptCrossDependency instances
       suitable to be dropped into the AptCrossPackage::Depends variable.

get_cache_iter

       Provides an iterator over all package names.

       Example: (listing of all unique package names)

        my $iter = &lookup();
        my $pkg;
        my @package_names = ();
        my %hash = ();
        my $c = 0;

        do {
               $pkg = $iter->next;
               $hash{$pkg}++ if ($pkg);
        } while ($pkg);

        @package_names = sort (keys %hash);
        foreach my $p (@package_names)
        {
               print "$p ";
               $c++;
        }

        print "\nTotal of $c package names\n";

set_cachedir($dir)

       Override the default apt_cross_dir with a specified directory that must
       already exist. This directory is also expected to contain any
       sources.list files that your script will later specify to Config.

get_aptcross_dir

       Sets and returns the location of ~/.apt-cross or uses .apt-cross if no
       home could be found. Note that when running under sudo (e.g. in a
       chroot) $home will be the home directory of the SUDO_USER within the
       chroot.

       If cachedir has been set and is usable, returns $cachedir.

get_cachedir

       Replacement for get_aptcross_dir to distance the modules from the apt-
       cross package. get_aptcross_dir may be removed in future versions so
       use this function to get the location of the cache.

get_verbose

       Return the current verbosity setting.

set_verbose($verbose)

       Used by scripts to pass a command-line verbose level to the module to
       be used to create debugging output to the console.

        0 == quiet
        1 == normal
        2 == add some progress output or user-level messages.
        3 == add debug messages to level 2.
        4 == add detailed configuration dumps to level 3.

set_mirror($mirror)

       Supports the apt-cross -m option by adding a specific mirror to the
       sources for the currently configured cache. An update will be needed to
       load the cache data from the mirror.

force_update

       Removes the timestamp file for the current user-specific cache and
       forces an update of the apt cache. Supports the apt-cross -u command.

check_update

       Non-intrusive way to ensure the user-specific cache for the current
       configuration is up to date without force. If the cache has been
       updated within the last 24hrs, no update is performed.

setup_config

       Init function for the ~/.apt-cross directory that prepares a directory
       tree suitable for each suite and architecture combination.  Copies your
       apt sources for use with the cross caches and manages the timestamp
       file to ensure the configured cache is up to date using update_sources.

update_sources

       Actually performs the apt-get update for the currently configured
       cache. Called by setup_config, force_update and check_update.

cache_update

       Update the user-specific apt-cross cache using the current
       configuration. Errors are directed to /dev/null because switching
       architectures and configurations can cause misleading and unnecessary
       error messages from apt.

prepare_sources_list

       Collates your various apt sources into one array that can be used to
       provide sources for your cross caches.

get_provides

       Retrieves the ProvidesList for the specified package.

       The AptPkg bindings index the ProvidesList under what is provided, not
       what the specified package provides, so this routine iterates over the
       cache and creates a suitable index. Subsequent queries are made against
       the new hash.

       e.g. When querying apt-cache, you may expect to see:
        $ apt-cache show cdebconf | grep Provides
        Provides: debconf-2.0

       However, in the AptPkg bindings, this relationship is indexed under
       debconf-2.0, not under cdebconf. i.e.
        $cache->{"debconf-2.0"}{ProvidesList}[0]{Name} eq "cdebconf" actually
       returns true when Cache::Apt::Lookup expects:
        $cache->{"cdebconf"}{ProvidesList}[0]{Name} eq "debconf-2.0" to be
       true.

       Returns a comma-separated list of packages that are provided by the
       specified package or undef.

update_multiarch

       Calculates the Packages file for the requested suite and architecture
       and uses that to update the multiarch lists. Warns if the calculated
       file does not exist - in which case, use the "--suite" or "-S" options
       to apt-cross to explicitly state which suite to use. (This can happen
       if you use codenames in your /etc/apt/sources.list rather than suite
       names (sid instead of unstable). Apart from sid, the mapping from a
       codename to a suite name changes with each release and this module does
       not attempt to keep up with these changes.

       Once found, the routine checks for
       /usr/share/apt-cross/update-multiarch.pl and passes the Packages file
       to it.