mirror of
https://github.com/fspc/dswim.git
synced 2025-04-04 08:13:24 -04:00
*** empty log message ***
This commit is contained in:
commit
26c15dd62f
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
# CVS default ignores begin
|
||||
tags
|
||||
TAGS
|
||||
.make.state
|
||||
.nse_depinfo
|
||||
*~
|
||||
#*
|
||||
.#*
|
||||
,*
|
||||
_$*
|
||||
*$
|
||||
*.old
|
||||
*.bak
|
||||
*.BAK
|
||||
*.orig
|
||||
*.rej
|
||||
.del-*
|
||||
*.a
|
||||
*.olb
|
||||
*.o
|
||||
*.obj
|
||||
*.so
|
||||
*.exe
|
||||
*.Z
|
||||
*.elc
|
||||
*.ln
|
||||
core
|
||||
# CVS default ignores end
|
8
BUGS
Normal file
8
BUGS
Normal file
@ -0,0 +1,8 @@
|
||||
* Permissions of some directories are weird using mkdir().
|
||||
* ftp()/qftp() doesn't handle timeout problems very well, if alarm()
|
||||
and SIG{ALRM} are used program quits with stdout "Alarm Bell".
|
||||
* Debian md5sum program has different output than non-Debian md5sum
|
||||
programs, will probably switch to MD5 module.
|
||||
* --ftp, swimz.list, for non-US using the dists/arch/ notation doesn't
|
||||
work on all sites, normal notation works if the site is set-up
|
||||
this way.
|
340
COPYING
Normal file
340
COPYING
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program 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 2 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, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
672
Conf.pm
Normal file
672
Conf.pm
Normal file
@ -0,0 +1,672 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Conf;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
|
||||
@EXPORT = qw($my_number $tmp $architecture $distribution @user_defined_section
|
||||
$default_directory $default_root_directory $permission $dpkg
|
||||
$dpkg_deb $ar $gcc $apt_get $apt_cache $sources @FTP $spl $cat
|
||||
$sort $md5sum $zcat $tar $grep $gzip $fastswim $slowswim $longswim
|
||||
$mount $umount $mke2fs $copy $pager $base $pwd $parent $library
|
||||
$splt $mv $imswim $swim_conf $debug $port $timeout
|
||||
$firewall $passive $apt_sources $HISTORY $alt);
|
||||
%EXPORT_TAGS = (
|
||||
Path => [ qw($tmp $parent $base $library) ],
|
||||
Deb => [ qw($pwd $dpkg_deb $ar $tar $grep $tmp $md5sum $cat $mv) ],
|
||||
Qftp => [ qw($default_root_directory $permission @FTP
|
||||
$default_directory $swim_conf) ],
|
||||
Info => [ qw($parent $base $zcat) ]
|
||||
);
|
||||
|
||||
|
||||
|
||||
#############################
|
||||
# DEFAULT PROGRAM VARIABLES #
|
||||
#############################
|
||||
|
||||
# You can change this to how many lines you would like "swim -qf <>" to
|
||||
# print out, before asking for -t or --total, it will automatically ask
|
||||
# though, if there is more than one package and you used the option -i.
|
||||
# Remember -t can be used with --scripts family members to view the
|
||||
# title of the script file regardless of this setting, and if -t has to be
|
||||
# used, the titles will be displayed, which makes sense.
|
||||
$my_number = 23;
|
||||
|
||||
# Just like a shell, you can keep a history of whatever length you want.
|
||||
$HISTORY = 10;
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --arch.
|
||||
#
|
||||
# You can determine the default architecture used when -n is
|
||||
# called or a not-installed database is made. Architectures are always
|
||||
# being added so check with Debian to find a list. There is alpha, arm,
|
||||
# hurd (alternative kernel to linux), i386, m68k, powerpc, sparc. Just use
|
||||
# the arch found after the hyphen in the Contents-(arch) file.
|
||||
$architecture = "i386";
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --dists.
|
||||
#
|
||||
# The default distribution can be either stable, unstable, frozen, or
|
||||
# experimental (rare). These represent the state of development that the
|
||||
# packages are under. The unstable distribution can have lot's of changes
|
||||
# within a very short time period, and frozen may or may not be available.
|
||||
$distribution = "unstable";
|
||||
|
||||
|
||||
#For not-installed:
|
||||
#This part supplies the default value for --main, --contrib, --non-free,
|
||||
#and --non-us.
|
||||
|
||||
# Distributions are divided into the sections. These sections are called
|
||||
# distributions in the version 2.4.1.0 packaging manual, because they were at
|
||||
# one time separate distributions, but this has since changed. You can
|
||||
# determine which of these sections (main, non-free, contrib or non-US) to
|
||||
# pull out of the Contents file if you don't want to use --main, --contrib,
|
||||
# --non-free, and --non-us to selectively pick sections. Basically, whatever
|
||||
# you pull out should match the Package(s) file(s) you are targetting, this
|
||||
# program is friendly if you make a mistake, but it's more effecient to pull
|
||||
# out just what you want. If the same package happens to exist in two
|
||||
# different sections, main and non-us for example (which is really a
|
||||
# situation that shouldn't exist, yet it does), you will still be able to
|
||||
# find this package in the non-us group, but its section and locations will be
|
||||
# the one which main recognizes assuming that you use the order in the example
|
||||
# below.
|
||||
|
||||
# Setting it up:
|
||||
# Example: You just want to pull out main and contrib every time you run
|
||||
# --initndb, --rebuildndb, or --ndb.
|
||||
# @user_defined_section = qw(main contrib non-US);
|
||||
# remember "non-US" not "non-us".
|
||||
|
||||
# untill non-US is fixed the second is better
|
||||
#@user_defined_section = qw(main contrib non-free non-US);
|
||||
@user_defined_section = qw(main contrib non-free);
|
||||
|
||||
# Usually, this is
|
||||
$alt = "debian";
|
||||
|
||||
################
|
||||
# DF LOCATION #
|
||||
################
|
||||
|
||||
# A little philosophy:
|
||||
# swim was developed for maximum versatility, so whether you are just
|
||||
# interested in researching, and keeping tabs on the newest packages,
|
||||
# or maintaining a Debian virtual distribution on a non-Debian real
|
||||
# distribution, or you are a using swim for distribution development, swim
|
||||
# provides a way. The default directory (DF - which can also mean
|
||||
# directory/file) keeps track of Contents and Packages files downloaded
|
||||
# using --ftp, and gives the files names specific to the distribution and
|
||||
# architectures they represent. But, you also have the freedom not to use
|
||||
# the default directory in this case swim will still do the renaming and
|
||||
# keeping track of the mtime, but you will have to remember where you put
|
||||
# the files. On the other hand, if you use apt, you won't even have to use
|
||||
# the DF directory for Packages files because you can get the ones specific
|
||||
# to your own systems architecture from apt, but if you want to look at
|
||||
# other architectures you will need to use the DF directory or one of your
|
||||
# own choice.
|
||||
# Naming Convention: Contents = Contents-dist.gz
|
||||
# Packages = Packages-arch-dist-section.gz
|
||||
$default_directory = '/root/.swim';
|
||||
|
||||
|
||||
# The default root directory is the key to easy management of packages
|
||||
# downloaded through --ftp and --file, and provides an easy way to put together
|
||||
# a personalized distribution. Future implementations of swim will provide
|
||||
# a distribution called personal..Packages and Contents files specific to
|
||||
# this distribution will automatically be made. This directory can be a
|
||||
# real ftp site on your computer, or put where ever else you are allowed
|
||||
# to have directories. dists/distribution/section/architecture/subject will be
|
||||
# placed above this directory. No matter what, debian must be the final
|
||||
# directory before dists. Other distributions are placed alongside debian,
|
||||
# like debian-non-US or personal.
|
||||
# Feel free to change the permissions. This directory is above your default_
|
||||
# directory.
|
||||
$default_root_directory = '/pub/debian';
|
||||
|
||||
# Because you may be using a real ftp site, this configuration allows you
|
||||
# to determine what permissions swim will set for directories it creates
|
||||
# above the default root directory.
|
||||
$permission = '0755';
|
||||
|
||||
|
||||
###############
|
||||
# AR or DPKG? #
|
||||
###############
|
||||
|
||||
# NOTE: users set these next two with the $package_tool variable.
|
||||
|
||||
# packaging friends dpkg and dpkg-deb come from the essential and
|
||||
# required dpkg package. ar from the package binutils can also be used (below).
|
||||
# This is the archival program used for deb packages, but binutils is just
|
||||
# a standard non-essential package, and the ar capabilities are built into
|
||||
# dpkg-deb, and it's better not to assume that the standard packages are
|
||||
# even established, yet.
|
||||
$dpkg = ();
|
||||
$dpkg_deb = ();
|
||||
|
||||
|
||||
# If you don't have the dpkg package on your system then you can use ar
|
||||
# from the package binutils. This would be a standard, but not an essential
|
||||
# package in Debian, but this package is also fairly standard amongst all
|
||||
# distributions, and can even be found in the free djgpp for M$ Oses.
|
||||
# Since people who have both dpkg and ar may want to try the ar method,
|
||||
# rather than creating an automatic check, just assign a value to either
|
||||
# ($dpkg & $dpkg_deb) or just $ar.
|
||||
#my $ar = '/usr/bin/ar'; # same for RH
|
||||
$ar = '/usr/bin/ar';
|
||||
|
||||
|
||||
#######
|
||||
# APT #
|
||||
#######
|
||||
|
||||
# NOTE: users set apt-get and apt-cache with the $apt variable
|
||||
|
||||
# If you have apt you are in luck.
|
||||
$apt_get = ();
|
||||
$apt_cache = ();
|
||||
$sources = '/etc/apt/sources.list';
|
||||
$apt_sources = '/var/state/apt/lists';
|
||||
|
||||
#########
|
||||
# PAGER #
|
||||
#########
|
||||
|
||||
# less is a nice pager, unless you like more! There is an option
|
||||
# --nopager or -n. Pager is used for --help and swim called without any
|
||||
# options. more comes from the required package util-linux, whereas
|
||||
# less comes from a standard package called less. In the future there is
|
||||
# a possiblity that a large percentage of swim may use an internal pager.
|
||||
# less, more, or most or...
|
||||
#$ENV{PAGER} = "/usr/bin/less"; # same RH
|
||||
$ENV{PAGER} = "less";
|
||||
$pager = $ENV{PAGER};
|
||||
|
||||
|
||||
|
||||
#################
|
||||
# SWIM PROGRAMS #
|
||||
#################
|
||||
|
||||
# This is replaced by the Makefile.
|
||||
$pre="/usr";
|
||||
|
||||
# This is the hash making program fastswim.
|
||||
$fastswim = "$pre/lib/SWIM/fastswim";
|
||||
|
||||
# imswim in an alternative to fastswim for --lowmem
|
||||
$imswim = "$pre/lib/SWIM/imswim";
|
||||
|
||||
# This is the low memory program slowswim.
|
||||
$slowswim = "$pre/lib/SWIM/slowswim";
|
||||
|
||||
# This is the dir/file making program longswim.
|
||||
$longswim = "$pre/lib/SWIM/longswim";
|
||||
|
||||
############
|
||||
# TEMP DIR #
|
||||
############
|
||||
|
||||
# If you want to set an alternative directory for the temporary files
|
||||
# created when the databases are made, change here. You may want to make
|
||||
# $tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
# explanation for making such a disk. There is also
|
||||
# /usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
# things up is a subject of experimentation.
|
||||
$tmp = '/tmp';
|
||||
|
||||
##################
|
||||
# MAIN CONFFILES #
|
||||
##################
|
||||
|
||||
# if configuration files are not kept in /etc change this
|
||||
# and set up the directories by hand.
|
||||
|
||||
$swim_conf = '/etc/swim';
|
||||
|
||||
|
||||
#############
|
||||
# UTILITIES #
|
||||
#############
|
||||
|
||||
|
||||
# This probably never will have to be changed.
|
||||
$pwd = `pwd`;
|
||||
chomp $pwd;
|
||||
|
||||
# If the command split is somewhere else besides /usr/bin change this.
|
||||
# The required package textutils provides this.
|
||||
#my $splt = '/usr/bin/split'; # same RH
|
||||
$splt = 'split';
|
||||
|
||||
# cat comes from the essential and required package textutils.
|
||||
#my $cat = '/bin/cat'; # same RH
|
||||
$cat = 'cat';
|
||||
|
||||
# This command also omes from the required and essential package textutils.
|
||||
#my $sort = '/usr/bin/sort'; # same RH
|
||||
$sort = 'sort';
|
||||
|
||||
# This program uses md5sum from the dpkg package, it can also use md5sum
|
||||
# from the RH package.
|
||||
#my $md5sum = '/usr/bin/md5sum'; # same RH
|
||||
$md5sum = 'md5sum';
|
||||
|
||||
# If you want to view compressed files make sure this is correct.
|
||||
# The required package gzip provides this.
|
||||
#my $zcat = '/bin/zcat'; # same RH
|
||||
$zcat = 'zcat';
|
||||
|
||||
# tar comes from the essential and required package tar.
|
||||
#my $tar = '/bin/tar'; # same RH
|
||||
$tar = 'tar';
|
||||
|
||||
# grep comes from the essential and required package grep. This seems
|
||||
# to require a path.
|
||||
$grep = '/bin/grep'; # same RH
|
||||
|
||||
# gzip comes from the essential and required package gzip.
|
||||
#my $gzip = "/bin/gzip"; # same RH
|
||||
$gzip = "gzip";
|
||||
|
||||
# mount comes from the essential and required package mount.
|
||||
#my $mount = '/bin/mount'; # same RH
|
||||
#my $umount = '/bin/umount'; # same RH
|
||||
$mount = 'mount';
|
||||
$umount = 'umount';
|
||||
|
||||
# If your file system isn't an ext2 filesystem, you may want to change
|
||||
# this. mke2fs comes from the essential and required package e2fsprogs.
|
||||
#my $mke2fs = '/sbin/mke2fs'; # same RH
|
||||
$mke2fs = 'mke2fs';
|
||||
|
||||
# cp and mv from the essential and required package fileutils
|
||||
#my $copy = '/bin/cp'; # same RH
|
||||
$copy = 'cp';
|
||||
$mv = 'mv';
|
||||
|
||||
# Your system definitely has gcc if you have ar. gcc is a standard package
|
||||
# in debian.
|
||||
$gcc = 'gcc';
|
||||
|
||||
|
||||
######
|
||||
# FTP #
|
||||
#######
|
||||
|
||||
# Major mode --ftp and --file automates the download of Contents and Packages
|
||||
# files. Even if you have apt installed, you may still want to download Packages
|
||||
# from alternative architectures, and the Contents file for your own architecture
|
||||
# or other architectures. If you want virtual and/or -ld capabilities you need
|
||||
# the Contents file. You specify a list of ftp or file sites using urls (like
|
||||
# apt). For your system's architecture specify the type deb, for other
|
||||
# architectures specify deb(hyphen)architecture (ex: deb-alpha). Regardless of
|
||||
# whether or not you specify an architecture, deb implies /dist* found under the
|
||||
# base directory specified by the ftp url, except in the case of experimental,
|
||||
# and to a degree non-us. minor mode --ftp, and --file will use the sites in this
|
||||
# configuration as well, on a fifo (first in first out) basis, so choose the
|
||||
# order of sites based on which are closest, most current, as well as fast.
|
||||
|
||||
# IMPORTANT: It is a BIG MISTAKE to use the distributions name (slink,po,etc)
|
||||
# anywhere in the sources list, or in swim's configuration file..in fact swim
|
||||
# won't work properly, not to mention the fact that someday your favorite name
|
||||
# will suddenly disappear. This is because swim thinks in terms of the real
|
||||
# distribution name (stable,unstable,frozen, experimental). The problem goes
|
||||
# like this - slink remains slink, but goes from unstable to frozen to stable.
|
||||
# At first, using the distributions alias may seem appropriate, but the
|
||||
# purpose of swim is to keep tabs on the dists, and not to ignore changes in
|
||||
# the states, this also makes managing swim's databases much easier and
|
||||
# intuitive...more about this later.
|
||||
|
||||
# Fun experiments: Swim uses the naming conventions of apt, but leaves the
|
||||
# Package files compressed in the DF directory. So you can always decompress
|
||||
# the databases and move them to /var/state/apt/lists. This ofcourse assumes
|
||||
# that the appropriate changes to the sources.list reflecting these Packages
|
||||
# (need to be the same architecture as your system) existed before you
|
||||
# update. (author needs to do this experiment :*)
|
||||
|
||||
$ftp1 = "deb ftp://localhost/pub/debian unstable main contrib non-free non-US";
|
||||
$ftp2 = "deb ftp://localhost/pub/debian unstable main contrib non-free";
|
||||
$ftp3 = "deb ftp://localhost/pub/debian project/experimental/";
|
||||
@FTP = ($ftp1,$ftp2,$ftp3);
|
||||
|
||||
# These next variables allow some characteristics of the ftp client
|
||||
# to be altered. See Net::FTP for ways of altering some of these
|
||||
# variables through the environment.
|
||||
|
||||
$firewall = 0;
|
||||
$port = 0;
|
||||
$timeout = 120;
|
||||
$debug = 0;
|
||||
$passive = 0;
|
||||
|
||||
|
||||
########################################
|
||||
# STUFF THAT NEVER NEEDS TO BE CHANGED #
|
||||
########################################
|
||||
|
||||
# You will never need to change this unless for some weird reason all the
|
||||
# files under dpkg are somewhere else (including /info*) , see --dbpath as
|
||||
# an alternative if you decide to access or make the databases somewhere
|
||||
# else.
|
||||
$base = '/var/lib/dpkg';
|
||||
|
||||
# --dbpath takes care of this so don't touch.
|
||||
$parent = '/';
|
||||
$library = '/var/lib/dpkg';
|
||||
|
||||
|
||||
#############################
|
||||
# LOAD CUSTOM CONFIGURATION #
|
||||
#############################
|
||||
|
||||
|
||||
# Here we load in the customized configuration which override the defaults
|
||||
# Might as well use do, let the world learn Perl ... compare this to apt's
|
||||
# configuation file with scopes. Swim's sources.list file (/etc/swim/swimz.list),
|
||||
# will be grabbed at SWIM::Apt and SWIM::Qftp if it exists.
|
||||
|
||||
do "$swim_conf/swimrc";
|
||||
do "$ENV{HOME}/.swim/swimrc";
|
||||
if ((defined $dpkg && !defined $dpkg_deb) ||
|
||||
(!defined $dpkg && defined $dpkg_deb)) {
|
||||
print "swim: need to give both \$dpkg and \$dpkg_deb a value if you want dpkg\n";
|
||||
exit;
|
||||
}
|
||||
if (defined $package_tool) {
|
||||
if ($package_tool =~ /ar/) {
|
||||
$ar = $ar;
|
||||
}
|
||||
else {
|
||||
$dpkg = 'dpkg';
|
||||
$dpkg_deb = 'dpkg-deb';
|
||||
undef $ar;
|
||||
}
|
||||
}
|
||||
if (defined $apt) {
|
||||
$apt_get = 'apt-get';
|
||||
$apt_cache = 'apt-cache';
|
||||
}
|
||||
|
||||
|
||||
###############################
|
||||
# MAKE ANY NEEDED DIRECTORIES #
|
||||
###############################
|
||||
|
||||
# make sure all the appropriate directories are made
|
||||
if (!-d $default_directory) {
|
||||
if (-e $default_directory) {
|
||||
print "swim: can not create default directory because a file exists\n";
|
||||
exit;
|
||||
}
|
||||
my @DRD = split(m,/,,$default_directory);
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
-d $placement or mkdir("$placement",0755);
|
||||
}
|
||||
}
|
||||
|
||||
if (!-d "$default_directory$default_root_directory") {
|
||||
my @DRD = split(m,/,,$default_root_directory);
|
||||
print "swim: debian must be the final directory before dists\n"
|
||||
if $DRD[$#DRD] ne "debian";
|
||||
exit if $DRD[$#DRD] ne "debian";
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
unless (-d "$default_directory$placement") {
|
||||
mkdir("$default_directory$placement",0755)
|
||||
or die "swim: could not create root default directory\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Makefile will make sure these directories exist, unless for some strange
|
||||
# reason you have to change them.
|
||||
|
||||
if (!-d $library) {
|
||||
mkdir($library,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $base) {
|
||||
mkdir($base,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $swim_conf) {
|
||||
mkdir($swim_conf,0666) or die "Couldn't create configuration file directory,
|
||||
please make the directories which are needed.\n";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
swimrc - swim configuration file
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
B<swimrc> is the configuartion file for swim allowing many default values
|
||||
to be set so that they do not have to be mentioned on the command line.
|
||||
Swimrc interacts directly with Perl allowing a wide variety of variables
|
||||
found in B<SWIW::Conf> to be altered.
|
||||
|
||||
=cut
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
Values for variable can be altered for B<swim> by assigning different
|
||||
values enclosed in quotes or quoted whitespace (qw()), and ended with a
|
||||
semi-colon.
|
||||
|
||||
$variable = "value";
|
||||
$variable = "qw(value1 value2 ..)";
|
||||
|
||||
=head1 VARIABLES
|
||||
|
||||
This is a list of variables with explanations. The default values for
|
||||
B<swim> are shown.
|
||||
|
||||
=head2 OUTPUT VARIABLE
|
||||
|
||||
$my_number can be changed to how many lines you would like "swim -qf <>"
|
||||
to print out, before the program asks for C<-t> or C<--total>. Exception:
|
||||
If C<-i> is used in the query and there is more than one package then the
|
||||
total will be presented.
|
||||
|
||||
Hint: C<-t> can be used with all the various C<--scripts> family members
|
||||
to view the title of the script file regardless of this variable setting,
|
||||
and if C<-t> has to be used, the titles will be displayed, which makes
|
||||
sense.
|
||||
|
||||
B<$my_number = 23;>
|
||||
|
||||
=head2 HISTORY
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when C<--stdin> is used.
|
||||
|
||||
B<$HISTORY = 10;>
|
||||
|
||||
=head2 AR or DPKG?
|
||||
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign "dpkg" to $package_tool, otherwise assign "ar" to $package_tool.
|
||||
|
||||
B<$package_tool = "/usr/bin/ar";>
|
||||
|
||||
=head2 APT
|
||||
|
||||
B<Swim> does not assign a value for apt. To use C<--apt> and C<-xyz>
|
||||
assign $apt the value "yes".
|
||||
|
||||
Example: B<$apt = "yes";>
|
||||
|
||||
=head2 PAGER
|
||||
|
||||
less is a nice pager, unless you like more! Pager is used for C<--help>
|
||||
and B<swim> called without any options. There is an option C<--nopager> or
|
||||
C<-n>. more comes from the required package util-linux, whereas less
|
||||
comes from a standard package called less. Values: "less", "more", or
|
||||
"most" or...
|
||||
|
||||
B<$ENV{PAGER} = "less";>
|
||||
|
||||
=head2 NOT-INSTALLED VARIABLES
|
||||
|
||||
Assign values for $architecture and/or $distribution to avoid having to
|
||||
use C<--arch> and C<--dists> everytime the not-installed databases are
|
||||
accessed with C<-n> or made or altered.
|
||||
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is I<alpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc>. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
|
||||
B<$architecture = "i386";>
|
||||
|
||||
The distribution can be either I<stable, unstable, frozen, or experimental
|
||||
(rare)>. These represent the state of development that the packages are
|
||||
under. The unstable distribution can have lot's of changes within a very
|
||||
short time period, and frozen may or may not be available.
|
||||
|
||||
B<$distribution = "unstable";>
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at one time separate distributions, but this has since changed.
|
||||
|
||||
You can determine which of the sections I<main, non-free, contrib or
|
||||
non-US> to pull out of the Contents file if you don't want to use
|
||||
C<--main>, C<--contrib>, C<--non-free>, and C<--non-us> to selectively
|
||||
pick the sections.
|
||||
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages file(s) being targetted.
|
||||
|
||||
Rule: Use "non-US" not "non-us".
|
||||
|
||||
B<@user_defined_section = qw(main contrib non-free non-US);>
|
||||
|
||||
=head2 DF LOCATION
|
||||
|
||||
A little philosophy: B<swim> was developed for maximum versatility, so
|
||||
whether you are just interested in researching, and keeping tabs on the
|
||||
newest packages, or maintaining a Debian virtual distribution on a
|
||||
non-Debian distribution, or you are a using B<swim> for distribution
|
||||
development, B<swim> provides a way.
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release
|
||||
file are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim will still do the renaming and keeping track of the mtime, but you
|
||||
will have to remember where you put the files.
|
||||
|
||||
B<$default_directory = '/root/.swim';>
|
||||
|
||||
The default root directory (DRD) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be a real ftp site on your computer, or put wherever else you are
|
||||
allowed to have directories. The DRD is always placed below the value
|
||||
assigned to $default_directory. According to the previous assignment to
|
||||
$default_directory, if the DRD is "/pub/a/debian" then the full path
|
||||
would be "/root/.swim/pub/a/debian".
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
B<$default_root_directory = '/pub/debian';>
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions B<swim> will assign for directories it creates
|
||||
below the DRD.
|
||||
|
||||
B<$permission = '0755';>
|
||||
|
||||
=head2 TEMPORARY DIRECTORY
|
||||
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
$tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
|
||||
B<$tmp = "/tmp";>
|
||||
|
||||
=head2 FTP
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by providing
|
||||
arguments to these variables. All variables but $timeout are set to untrue
|
||||
by default.
|
||||
|
||||
$firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)
|
||||
|
||||
=head1 OTHER VARIABLES
|
||||
|
||||
see SWIM::Conf
|
||||
|
||||
=head1 FILES
|
||||
|
||||
/etc/swim/swimrc
|
||||
~/.swim/swimrc
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
swim(8), Net::FTP(3pm)
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jonathan D. Rosenbaum <mttrader@access.mountain.net>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
Copyright (c) 1999 Jonathan Rosenbaum. All rights reserved. This program
|
||||
is free software; you can redistribute it and/or modify it under the GPL.
|
||||
|
||||
=cut
|
672
Conf.pm.alternative
Normal file
672
Conf.pm.alternative
Normal file
@ -0,0 +1,672 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Conf;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
|
||||
@EXPORT = qw($my_number $tmp $architecture $distribution @user_defined_section
|
||||
$default_directory $default_root_directory $permission $dpkg
|
||||
$dpkg_deb $ar $gcc $apt_get $apt_cache $sources @FTP $spl $cat
|
||||
$sort $md5sum $zcat $tar $grep $gzip $fastswim $slowswim $longswim
|
||||
$mount $umount $mke2fs $copy $pager $base $pwd $parent $library
|
||||
$splt $mv $imswim $swim_conf $debug $port $timeout
|
||||
$firewall $passive $apt_sources $HISTORY $alt);
|
||||
%EXPORT_TAGS = (
|
||||
Path => [ qw($tmp $parent $base $library) ],
|
||||
Deb => [ qw($pwd $dpkg_deb $ar $tar $grep $tmp $md5sum $cat $mv) ],
|
||||
Qftp => [ qw($default_root_directory $permission @FTP
|
||||
$default_directory $swim_conf) ],
|
||||
Info => [ qw($parent $base $zcat) ]
|
||||
);
|
||||
|
||||
|
||||
|
||||
#############################
|
||||
# DEFAULT PROGRAM VARIABLES #
|
||||
#############################
|
||||
|
||||
# You can change this to how many lines you would like "swim -qf <>" to
|
||||
# print out, before asking for -t or --total, it will automatically ask
|
||||
# though, if there is more than one package and you used the option -i.
|
||||
# Remember -t can be used with --scripts family members to view the
|
||||
# title of the script file regardless of this setting, and if -t has to be
|
||||
# used, the titles will be displayed, which makes sense.
|
||||
$my_number = 23;
|
||||
|
||||
# Just like a shell, you can keep a history of whatever length you want.
|
||||
$HISTORY = 10;
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --arch.
|
||||
#
|
||||
# You can determine the default architecture used when -n is
|
||||
# called or a not-installed database is made. Architectures are always
|
||||
# being added so check with Debian to find a list. There is alpha, arm,
|
||||
# hurd (alternative kernel to linux), i386, m68k, powerpc, sparc. Just use
|
||||
# the arch found after the hyphen in the Contents-(arch) file.
|
||||
$architecture = "i386";
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --dists.
|
||||
#
|
||||
# The default distribution can be either stable, unstable, frozen, or
|
||||
# experimental (rare). These represent the state of development that the
|
||||
# packages are under. The unstable distribution can have lot's of changes
|
||||
# within a very short time period, and frozen may or may not be available.
|
||||
$distribution = "unstable";
|
||||
|
||||
|
||||
#For not-installed:
|
||||
#This part supplies the default value for --main, --contrib, --non-free,
|
||||
#and --non-us.
|
||||
|
||||
# Distributions are divided into the sections. These sections are called
|
||||
# distributions in the version 2.4.1.0 packaging manual, because they were at
|
||||
# one time separate distributions, but this has since changed. You can
|
||||
# determine which of these sections (main, non-free, contrib or non-US) to
|
||||
# pull out of the Contents file if you don't want to use --main, --contrib,
|
||||
# --non-free, and --non-us to selectively pick sections. Basically, whatever
|
||||
# you pull out should match the Package(s) file(s) you are targetting, this
|
||||
# program is friendly if you make a mistake, but it's more effecient to pull
|
||||
# out just what you want. If the same package happens to exist in two
|
||||
# different sections, main and non-us for example (which is really a
|
||||
# situation that shouldn't exist, yet it does), you will still be able to
|
||||
# find this package in the non-us group, but its section and locations will be
|
||||
# the one which main recognizes assuming that you use the order in the example
|
||||
# below.
|
||||
|
||||
# Setting it up:
|
||||
# Example: You just want to pull out main and contrib every time you run
|
||||
# --initndb, --rebuildndb, or --ndb.
|
||||
# @user_defined_section = qw(main contrib non-US);
|
||||
# remember "non-US" not "non-us".
|
||||
|
||||
#untill non-US is fixed the second is better
|
||||
#@user_defined_section = qw(main contrib non-free non-US);
|
||||
@user_defined_section = qw(main contrib non-free);
|
||||
|
||||
# Usually, this is
|
||||
$alt = "debian";
|
||||
|
||||
################
|
||||
# DF LOCATION #
|
||||
################
|
||||
|
||||
# A little philosophy:
|
||||
# swim was developed for maximum versatility, so whether you are just
|
||||
# interested in researching, and keeping tabs on the newest packages,
|
||||
# or maintaining a Debian virtual distribution on a non-Debian real
|
||||
# distribution, or you are a using swim for distribution development, swim
|
||||
# provides a way. The default directory (DF - which can also mean
|
||||
# directory/file) keeps track of Contents and Packages files downloaded
|
||||
# using --ftp, and gives the files names specific to the distribution and
|
||||
# architectures they represent. But, you also have the freedom not to use
|
||||
# the default directory in this case swim will still do the renaming and
|
||||
# keeping track of the mtime, but you will have to remember where you put
|
||||
# the files. On the other hand, if you use apt, you won't even have to use
|
||||
# the DF directory for Packages files because you can get the ones specific
|
||||
# to your own systems architecture from apt, but if you want to look at
|
||||
# other architectures you will need to use the DF directory or one of your
|
||||
# own choice.
|
||||
# Naming Convention: Contents = Contents-dist.gz
|
||||
# Packages = Packages-arch-dist-section.gz
|
||||
$default_directory = '/root/.swim';
|
||||
|
||||
|
||||
# The default root directory is the key to easy management of packages
|
||||
# downloaded through --ftp and --file, and provides an easy way to put together
|
||||
# a personalized distribution. Future implementations of swim will provide
|
||||
# a distribution called personal..Packages and Contents files specific to
|
||||
# this distribution will automatically be made. This directory can be a
|
||||
# real ftp site on your computer, or put where ever else you are allowed
|
||||
# to have directories. dists/distribution/section/architecture/subject will be
|
||||
# placed above this directory. No matter what, debian must be the final
|
||||
# directory before dists. Other distributions are placed alongside debian,
|
||||
# like debian-non-US or personal.
|
||||
# Feel free to change the permissions. This directory is above your default_
|
||||
# directory.
|
||||
$default_root_directory = '/pub/debian';
|
||||
|
||||
# Because you may be using a real ftp site, this configuration allows you
|
||||
# to determine what permissions swim will set for directories it creates
|
||||
# above the default root directory.
|
||||
$permission = '0755';
|
||||
|
||||
|
||||
###############
|
||||
# AR or DPKG? #
|
||||
###############
|
||||
|
||||
# NOTE: users set these next two with the $package_tool variable.
|
||||
|
||||
# packaging friends dpkg and dpkg-deb come from the essential and
|
||||
# required dpkg package. ar from the package binutils can also be used (below).
|
||||
# This is the archival program used for deb packages, but binutils is just
|
||||
# a standard non-essential package, and the ar capabilities are built into
|
||||
# dpkg-deb, and it's better not to assume that the standard packages are
|
||||
# even established, yet.
|
||||
$dpkg = ();
|
||||
$dpkg_deb = ();
|
||||
|
||||
|
||||
# If you don't have the dpkg package on your system then you can use ar
|
||||
# from the package binutils. This would be a standard, but not an essential
|
||||
# package in Debian, but this package is also fairly standard amongst all
|
||||
# distributions, and can even be found in the free djgpp for M$ Oses.
|
||||
# Since people who have both dpkg and ar may want to try the ar method,
|
||||
# rather than creating an automatic check, just assign a value to either
|
||||
# ($dpkg & $dpkg_deb) or just $ar.
|
||||
#my $ar = '/usr/bin/ar'; # same for RH
|
||||
$ar = '/usr/bin/ar';
|
||||
|
||||
|
||||
#######
|
||||
# APT #
|
||||
#######
|
||||
|
||||
# NOTE: users set apt-get and apt-cache with the $apt variable
|
||||
|
||||
# If you have apt you are in luck.
|
||||
$apt_get = ();
|
||||
$apt_cache = ();
|
||||
$sources = '/etc/apt/sources.list';
|
||||
$apt_sources = '/var/state/apt/lists';
|
||||
|
||||
#########
|
||||
# PAGER #
|
||||
#########
|
||||
|
||||
# less is a nice pager, unless you like more! There is an option
|
||||
# --nopager or -n. Pager is used for --help and swim called without any
|
||||
# options. more comes from the required package util-linux, whereas
|
||||
# less comes from a standard package called less. In the future there is
|
||||
# a possiblity that a large percentage of swim may use an internal pager.
|
||||
# less, more, or most or...
|
||||
#$ENV{PAGER} = "/usr/bin/less"; # same RH
|
||||
$ENV{PAGER} = "less";
|
||||
$pager = $ENV{PAGER};
|
||||
|
||||
|
||||
|
||||
#################
|
||||
# SWIM PROGRAMS #
|
||||
#################
|
||||
|
||||
# This is replaced by the Makefile.
|
||||
$pre="/usr"; # AUTOREPLACE done by Makefile, do not edit.
|
||||
|
||||
# This is the hash making program fastswim.
|
||||
$fastswim = "$pre/lib/SWIM/bin/fastswim";
|
||||
|
||||
# imswim in an alternative to fastswim for --lowmem
|
||||
$imswim = "$pre/lib/SWIM/bin/imswim";
|
||||
|
||||
# This is the low memory program slowswim.
|
||||
$slowswim = "$pre/lib/SWIM/bin/slowswim";
|
||||
|
||||
# This is the dir/file making program longswim.
|
||||
$longswim = "$pre/lib/SWIM/bin/longswim";
|
||||
|
||||
############
|
||||
# TEMP DIR #
|
||||
############
|
||||
|
||||
# If you want to set an alternative directory for the temporary files
|
||||
# created when the databases are made, change here. You may want to make
|
||||
# $tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
# explanation for making such a disk. There is also
|
||||
# /usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
# things up is a subject of experimentation.
|
||||
$tmp = '/tmp';
|
||||
|
||||
##################
|
||||
# MAIN CONFFILES #
|
||||
##################
|
||||
|
||||
# if configuration files are not kept in /etc change this
|
||||
# and set up the directories by hand.
|
||||
|
||||
$swim_conf = '/etc/swim';
|
||||
|
||||
|
||||
#############
|
||||
# UTILITIES #
|
||||
#############
|
||||
|
||||
|
||||
# This probably never will have to be changed.
|
||||
$pwd = `pwd`;
|
||||
chomp $pwd;
|
||||
|
||||
# If the command split is somewhere else besides /usr/bin change this.
|
||||
# The required package textutils provides this.
|
||||
#my $splt = '/usr/bin/split'; # same RH
|
||||
$splt = 'split';
|
||||
|
||||
# cat comes from the essential and required package textutils.
|
||||
#my $cat = '/bin/cat'; # same RH
|
||||
$cat = 'cat';
|
||||
|
||||
# This command also omes from the required and essential package textutils.
|
||||
#my $sort = '/usr/bin/sort'; # same RH
|
||||
$sort = 'sort';
|
||||
|
||||
# This program uses md5sum from the dpkg package, it can also use md5sum
|
||||
# from the RH package.
|
||||
#my $md5sum = '/usr/bin/md5sum'; # same RH
|
||||
$md5sum = 'md5sum';
|
||||
|
||||
# If you want to view compressed files make sure this is correct.
|
||||
# The required package gzip provides this.
|
||||
#my $zcat = '/bin/zcat'; # same RH
|
||||
$zcat = 'zcat';
|
||||
|
||||
# tar comes from the essential and required package tar.
|
||||
#my $tar = '/bin/tar'; # same RH
|
||||
$tar = 'tar';
|
||||
|
||||
# grep comes from the essential and required package grep. This seems
|
||||
# to require a path.
|
||||
$grep = '/bin/grep'; # same RH
|
||||
|
||||
# gzip comes from the essential and required package gzip.
|
||||
#my $gzip = "/bin/gzip"; # same RH
|
||||
$gzip = "gzip";
|
||||
|
||||
# mount comes from the essential and required package mount.
|
||||
#my $mount = '/bin/mount'; # same RH
|
||||
#my $umount = '/bin/umount'; # same RH
|
||||
$mount = 'mount';
|
||||
$umount = 'umount';
|
||||
|
||||
# If your file system isn't an ext2 filesystem, you may want to change
|
||||
# this. mke2fs comes from the essential and required package e2fsprogs.
|
||||
#my $mke2fs = '/sbin/mke2fs'; # same RH
|
||||
$mke2fs = 'mke2fs';
|
||||
|
||||
# cp and mv from the essential and required package fileutils
|
||||
#my $copy = '/bin/cp'; # same RH
|
||||
$copy = 'cp';
|
||||
$mv = 'mv';
|
||||
|
||||
# Your system definitely has gcc if you have ar. gcc is a standard package
|
||||
# in debian.
|
||||
$gcc = 'gcc';
|
||||
|
||||
|
||||
######
|
||||
# FTP #
|
||||
#######
|
||||
|
||||
# Major mode --ftp and --file automates the download of Contents and Packages
|
||||
# files. Even if you have apt installed, you may still want to download Packages
|
||||
# from alternative architectures, and the Contents file for your own architecture
|
||||
# or other architectures. If you want virtual and/or -ld capabilities you need
|
||||
# the Contents file. You specify a list of ftp or file sites using urls (like
|
||||
# apt). For your system's architecture specify the type deb, for other
|
||||
# architectures specify deb(hyphen)architecture (ex: deb-alpha). Regardless of
|
||||
# whether or not you specify an architecture, deb implies /dist* found under the
|
||||
# base directory specified by the ftp url, except in the case of experimental,
|
||||
# and to a degree non-us. minor mode --ftp, and --file will use the sites in this
|
||||
# configuration as well, on a fifo (first in first out) basis, so choose the
|
||||
# order of sites based on which are closest, most current, as well as fast.
|
||||
|
||||
# IMPORTANT: It is a BIG MISTAKE to use the distributions name (slink,po,etc)
|
||||
# anywhere in the sources list, or in swim's configuration file..in fact swim
|
||||
# won't work properly, not to mention the fact that someday your favorite name
|
||||
# will suddenly disappear. This is because swim thinks in terms of the real
|
||||
# distribution name (stable,unstable,frozen, experimental). The problem goes
|
||||
# like this - slink remains slink, but goes from unstable to frozen to stable.
|
||||
# At first, using the distributions alias may seem appropriate, but the
|
||||
# purpose of swim is to keep tabs on the dists, and not to ignore changes in
|
||||
# the states, this also makes managing swim's databases much easier and
|
||||
# intuitive...more about this later.
|
||||
|
||||
# Fun experiments: Swim uses the naming conventions of apt, but leaves the
|
||||
# Package files compressed in the DF directory. So you can always decompress
|
||||
# the databases and move them to /var/state/apt/lists. This ofcourse assumes
|
||||
# that the appropriate changes to the sources.list reflecting these Packages
|
||||
# (need to be the same architecture as your system) existed before you
|
||||
# update. (author needs to do this experiment :*)
|
||||
|
||||
$ftp1 = "deb ftp://localhost/pub/debian unstable main contrib non-free non-US";
|
||||
$ftp2 = "deb ftp://localhost/pub/debian unstable main contrib non-free";
|
||||
$ftp3 = "deb ftp://localhost/pub/debian project/experimental/";
|
||||
@FTP = ($ftp1,$ftp2,$ftp3);
|
||||
|
||||
# These next variables allow some characteristics of the ftp client
|
||||
# to be altered. See Net::FTP for ways of altering some of these
|
||||
# variables through the environment.
|
||||
|
||||
$firewall = 0;
|
||||
$port = 0;
|
||||
$timeout = 120;
|
||||
$debug = 0;
|
||||
$passive = 0;
|
||||
|
||||
|
||||
########################################
|
||||
# STUFF THAT NEVER NEEDS TO BE CHANGED #
|
||||
########################################
|
||||
|
||||
# You will never need to change this unless for some weird reason all the
|
||||
# files under dpkg are somewhere else (including /info*) , see --dbpath as
|
||||
# an alternative if you decide to access or make the databases somewhere
|
||||
# else.
|
||||
$base = '/var/lib/dpkg';
|
||||
|
||||
# --dbpath takes care of this so don't touch.
|
||||
$parent = '/';
|
||||
$library = '/var/lib/dpkg';
|
||||
|
||||
|
||||
#############################
|
||||
# LOAD CUSTOM CONFIGURATION #
|
||||
#############################
|
||||
|
||||
|
||||
# Here we load in the customized configuration which override the defaults
|
||||
# Might as well use do, let the world learn Perl ... compare this to apt's
|
||||
# configuation file with scopes. Swim's sources.list file (/etc/swim/swimz.list),
|
||||
# will be grabbed at SWIM::Apt and SWIM::Qftp if it exists.
|
||||
|
||||
do "$swim_conf/swimrc";
|
||||
do "$ENV{HOME}/.swim/swimrc";
|
||||
if ((defined $dpkg && !defined $dpkg_deb) ||
|
||||
(!defined $dpkg && defined $dpkg_deb)) {
|
||||
print "swim: need to give both \$dpkg and \$dpkg_deb a value if you want dpkg\n";
|
||||
exit;
|
||||
}
|
||||
if (defined $package_tool) {
|
||||
if ($package_tool =~ /ar/) {
|
||||
$ar = $ar;
|
||||
}
|
||||
else {
|
||||
$dpkg = 'dpkg';
|
||||
$dpkg_deb = 'dpkg-deb';
|
||||
undef $ar;
|
||||
}
|
||||
}
|
||||
if (defined $apt) {
|
||||
$apt_get = 'apt-get';
|
||||
$apt_cache = 'apt-cache';
|
||||
}
|
||||
|
||||
|
||||
###############################
|
||||
# MAKE ANY NEEDED DIRECTORIES #
|
||||
###############################
|
||||
|
||||
# make sure all the appropriate directories are made
|
||||
if (!-d $default_directory) {
|
||||
if (-e $default_directory) {
|
||||
print "swim: can not create default directory because a file exists\n";
|
||||
exit;
|
||||
}
|
||||
my @DRD = split(m,/,,$default_directory);
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
-d $placement or mkdir("$placement",0755);
|
||||
}
|
||||
}
|
||||
|
||||
if (!-d "$default_directory$default_root_directory") {
|
||||
my @DRD = split(m,/,,$default_root_directory);
|
||||
print "swim: debian must be the final directory before dists\n"
|
||||
if $DRD[$#DRD] ne "debian";
|
||||
exit if $DRD[$#DRD] ne "debian";
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
unless (-d "$default_directory$placement") {
|
||||
mkdir("$default_directory$placement",0755)
|
||||
or die "swim: could not create root default directory\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Makefile will make sure these directories exist, unless for some strange
|
||||
# reason you have to change them.
|
||||
|
||||
if (!-d $library) {
|
||||
mkdir($library,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $base) {
|
||||
mkdir($base,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $swim_conf) {
|
||||
mkdir($swim_conf,0666) or die "Couldn't create configuration file directory,
|
||||
please make the directories which are needed.\n";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
swimrc - swim configuration file
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
B<swimrc> is the configuartion file for swim allowing many default values
|
||||
to be set so that they do not have to be mentioned on the command line.
|
||||
Swimrc interacts directly with Perl allowing a wide variety of variables
|
||||
found in B<SWIW::Conf> to be altered.
|
||||
|
||||
=cut
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
Values for variable can be altered for B<swim> by assigning different
|
||||
values enclosed in quotes or quoted whitespace (qw()), and ended with a
|
||||
semi-colon.
|
||||
|
||||
$variable = "value";
|
||||
$variable = "qw(value1 value2 ..)";
|
||||
|
||||
=head1 VARIABLES
|
||||
|
||||
This is a list of variables with explanations. The default values for
|
||||
B<swim> are shown.
|
||||
|
||||
=head2 OUTPUT VARIABLE
|
||||
|
||||
$my_number can be changed to how many lines you would like "swim -qf <>"
|
||||
to print out, before the program asks for C<-t> or C<--total>. Exception:
|
||||
If C<-i> is used in the query and there is more than one package then the
|
||||
total will be presented.
|
||||
|
||||
Hint: C<-t> can be used with all the various C<--scripts> family members
|
||||
to view the title of the script file regardless of this variable setting,
|
||||
and if C<-t> has to be used, the titles will be displayed, which makes
|
||||
sense.
|
||||
|
||||
B<$my_number = 23;>
|
||||
|
||||
=head2 HISTORY
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when C<--stdin> is used.
|
||||
|
||||
B<$HISTORY = 10;>
|
||||
|
||||
=head2 AR or DPKG?
|
||||
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign "dpkg" to $package_tool, otherwise assign "ar" to $package_tool.
|
||||
|
||||
B<$package_tool = "/usr/bin/ar";>
|
||||
|
||||
=head2 APT
|
||||
|
||||
B<Swim> does not assign a value for apt. To use C<--apt> and C<-xyz>
|
||||
assign $apt the value "yes".
|
||||
|
||||
Example: B<$apt = "yes";>
|
||||
|
||||
=head2 PAGER
|
||||
|
||||
less is a nice pager, unless you like more! Pager is used for C<--help>
|
||||
and B<swim> called without any options. There is an option C<--nopager> or
|
||||
C<-n>. more comes from the required package util-linux, whereas less
|
||||
comes from a standard package called less. Values: "less", "more", or
|
||||
"most" or...
|
||||
|
||||
B<$ENV{PAGER} = "less";>
|
||||
|
||||
=head2 NOT-INSTALLED VARIABLES
|
||||
|
||||
Assign values for $architecture and/or $distribution to avoid having to
|
||||
use C<--arch> and C<--dists> everytime the not-installed databases are
|
||||
accessed with C<-n> or made or altered.
|
||||
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is I<alpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc>. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
|
||||
B<$architecture = "i386";>
|
||||
|
||||
The distribution can be either I<stable, unstable, frozen, or experimental
|
||||
(rare)>. These represent the state of development that the packages are
|
||||
under. The unstable distribution can have lot's of changes within a very
|
||||
short time period, and frozen may or may not be available.
|
||||
|
||||
B<$distribution = "unstable";>
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at one time separate distributions, but this has since changed.
|
||||
|
||||
You can determine which of the sections I<main, non-free, contrib or
|
||||
non-US> to pull out of the Contents file if you don't want to use
|
||||
C<--main>, C<--contrib>, C<--non-free>, and C<--non-us> to selectively
|
||||
pick the sections.
|
||||
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages file(s) being targetted.
|
||||
|
||||
Rule: Use "non-US" not "non-us".
|
||||
|
||||
B<@user_defined_section = qw(main contrib non-free non-US);>
|
||||
|
||||
=head2 DF LOCATION
|
||||
|
||||
A little philosophy: B<swim> was developed for maximum versatility, so
|
||||
whether you are just interested in researching, and keeping tabs on the
|
||||
newest packages, or maintaining a Debian virtual distribution on a
|
||||
non-Debian distribution, or you are a using B<swim> for distribution
|
||||
development, B<swim> provides a way.
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release
|
||||
file are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim will still do the renaming and keeping track of the mtime, but you
|
||||
will have to remember where you put the files.
|
||||
|
||||
B<$default_directory = '/root/.swim';>
|
||||
|
||||
The default root directory (DRD) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be a real ftp site on your computer, or put wherever else you are
|
||||
allowed to have directories. The DRD is always placed below the value
|
||||
assigned to $default_directory. According to the previous assignment to
|
||||
$default_directory, if the DRD is "/pub/a/debian" then the full path
|
||||
would be "/root/.swim/pub/a/debian".
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
B<$default_root_directory = '/pub/debian';>
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions B<swim> will assign for directories it creates
|
||||
below the DRD.
|
||||
|
||||
B<$permission = '0755';>
|
||||
|
||||
=head2 TEMPORARY DIRECTORY
|
||||
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
$tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
|
||||
B<$tmp = "/tmp";>
|
||||
|
||||
=head2 FTP
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by providing
|
||||
arguments to these variables. All variables but $timeout are set to untrue
|
||||
by default.
|
||||
|
||||
$firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)
|
||||
|
||||
=head1 OTHER VARIABLES
|
||||
|
||||
see SWIM::Conf
|
||||
|
||||
=head1 FILES
|
||||
|
||||
/etc/swim/swimrc
|
||||
~/.swim/swimrc
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
swim(8), Net::FTP(3pm)
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jonathan D. Rosenbaum <mttrader@access.mountain.net>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
Copyright (c) 1999 Jonathan Rosenbaum. All rights reserved. This program
|
||||
is free software; you can redistribute it and/or modify it under the GPL.
|
||||
|
||||
=cut
|
51
INSTALL
Normal file
51
INSTALL
Normal file
@ -0,0 +1,51 @@
|
||||
To install swim, become root and type "make install".
|
||||
|
||||
To install extra and important documentation, type "make installdoc".
|
||||
|
||||
To remove, type "make remove".
|
||||
|
||||
Pod documentation is found in Conf.pm and swim.pod if you want to make
|
||||
different types of documention using pod translators. There are SGML
|
||||
documents conforming to the debiandoc DTD for swimrc and swim which can be
|
||||
converted using tools from the debiandoc-sgml package.
|
||||
|
||||
(The modules mentioned below can be located at CPAN at www.perl.com.)
|
||||
|
||||
Some distributions may require this module for ftp capabilities.
|
||||
|
||||
Net::FTP from libnet-perl
|
||||
|
||||
This module provides readline libraries. There are other similiar modules
|
||||
which also work with Perl's Term::ReadLine(3pm).
|
||||
|
||||
Term::ReadLine::Gnu from libterm-readline-gnu-perl or
|
||||
Term::ReadLine::Perl from libterm-readline-perl-perl
|
||||
|
||||
Also read QUICKSTART.text or QUICKSTART.html for additional information.
|
||||
_________________________________________________________________
|
||||
|
||||
Alternative Installation
|
||||
|
||||
The modules are put into /usr/lib/perl5/SWIM because this is in Perl's
|
||||
@INC path, and does not violate Debian's Policy, on the other hand the
|
||||
modules are rather specific to swim, although they definitely could be
|
||||
used for other things. To put it in /usr/lib meant either using 'use lib
|
||||
"/usr/lib"' or pushing the alternative directory into @INC doing a
|
||||
'BEGIN{}', or setting the Environment variable PERL5LIB. The first method
|
||||
slowed swim down, the second method caused a bad bug in SWIM::Deb, and the
|
||||
third method involved trying to make a universe of shells happy, but this
|
||||
is the best approach for an alternative @INC path.
|
||||
|
||||
That's why there is Makefile.alternative. If you already did a 'make
|
||||
install', now do a 'make remove'. Change the name of Makefile, and change
|
||||
Makefile.alternative's name to Makefile. You can change PREFIX in this
|
||||
Makefile to /usr/local if you want to. Follow the same steps as for the
|
||||
original Makefile, but add one more step, set the Environment vaiable
|
||||
PERL5LIB to the directory where the modules are. If the PREFIX was not
|
||||
changed, and you are using a bash shell then 'export PERL5LIB=/usr/lib'.
|
||||
|
||||
This alternative Makefile uses the tradition /usr/doc, /usr/man
|
||||
directories whereas the other Makefile uses /usr/share/doc and
|
||||
/usr/share/man, this is because of Debian's adherence to the next
|
||||
generation fsstnd.
|
||||
|
76
Makefile
Normal file
76
Makefile
Normal file
@ -0,0 +1,76 @@
|
||||
# Use Makefile.alternative if you want the modules in /usr or /usr/local,
|
||||
# not in /usr/lib/perl5, see INSTALL.
|
||||
|
||||
PREFIX=/usr
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
-rm build
|
||||
-rm *.bak
|
||||
|
||||
install:
|
||||
install -d $(DESTDIR)/var/lib/dpkg
|
||||
install -d $(DESTDIR)/$(PREFIX)/sbin
|
||||
cp -a swim $(DESTDIR)/$(PREFIX)/sbin/swim
|
||||
install -d $(DESTDIR)/$(PREFIX)/lib/perl5/SWIM
|
||||
cp -f Conf.pm $(DESTDIR)/$(PREFIX)/lib/perl5/SWIM/Conf.pm
|
||||
cp -fa lib/* $(DESTDIR)/$(PREFIX)/lib/perl5/SWIM
|
||||
install -d $(DESTDIR)/$(PREFIX)/lib/SWIM
|
||||
cp -fa bin/* $(DESTDIR)/$(PREFIX)/lib/SWIM
|
||||
install -d $(DESTDIR)/$(PREFIX)/share/man/man8
|
||||
cp -f swim.8 $(DESTDIR)/$(PREFIX)/share/man/man8
|
||||
install -d $(DESTDIR)/$(PREFIX)/share/man/man5
|
||||
cp -f swimrc.5 $(DESTDIR)/$(PREFIX)/share/man/man5
|
||||
install -d $(DESTDIR)/usr/share/doc/swim/swim.html
|
||||
cp -fa swim.html/* $(DESTDIR)/usr/share/doc/swim/swim.html
|
||||
install -d $(DESTDIR)/usr/share/doc/swim/swimrc.html
|
||||
cp -fa swimrc.html/* $(DESTDIR)/usr/share/doc/swim/swimrc.html
|
||||
cp -f QUICKSTART.html $(DESTDIR)/usr/share/doc/swim
|
||||
cp -f REQUIREMENTS.html $(DESTDIR)/usr/share/doc/swim
|
||||
cp -f swim_by_example.html $(DESTDIR)/usr/share/doc/swim
|
||||
install -d $(DESTDIR)/usr/share/doc/swim/examples
|
||||
cp -fa examples/* $(DESTDIR)/usr/share/doc/swim/examples
|
||||
install -d $(DESTDIR)/etc/swim
|
||||
cp -f swimz.list $(DESTDIR)/etc/swim
|
||||
cp -f swimrc $(DESTDIR)/etc/swim
|
||||
|
||||
installdoc:
|
||||
install -d $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a QUICKSTART.text $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a REQUIREMENTS.text $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a swim_by_example.html $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a THEMES $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a TODO $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a BUGS $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a TODO $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a COPYING $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a contact_and_website $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a changelog $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a swim.text $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
cp -a swimrc.text $(DESTDIR)/$(PREFIX)/share/doc/swim
|
||||
|
||||
remove:
|
||||
rm $(PREFIX)/lib/perl5/SWIM/*
|
||||
rmdir $(PREFIX)/lib/perl5/SWIM
|
||||
rm $(PREFIX)/sbin/swim
|
||||
rm /usr/share/doc/swim/swim.html/*
|
||||
rmdir /usr/share/doc/swim/swim.html
|
||||
rm /usr/share/doc/swim/swimrc.html/*
|
||||
rmdir /usr/share/doc/swim/swimrc.html
|
||||
rm /usr/share/doc/swim/examples/*
|
||||
rmdir /usr/share/doc/swim/examples
|
||||
rm /usr/share/doc/swim/*
|
||||
rmdir /usr/share/doc/swim
|
||||
rm $(PREFIX)/share/man/man5/swimrc.5
|
||||
rm $(PREFIX)/share/man/man8/swim.8
|
||||
rm $(PREFIX)/lib/SWIM/*
|
||||
rmdir $(PREFIX)/lib/SWIM
|
||||
|
||||
debian:
|
||||
dpkg-buildpackage -tc -rfakeroot
|
||||
|
||||
|
||||
dist: debian localdist stampede rpm
|
||||
|
||||
.PHONY: debian
|
73
Makefile.alternative
Normal file
73
Makefile.alternative
Normal file
@ -0,0 +1,73 @@
|
||||
# Set this to wherever you want swim to install. Eg, /usr/local or /usr
|
||||
PREFIX=/usr
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
-rm build
|
||||
-rm *.bak
|
||||
|
||||
install:
|
||||
install -d $(DESTDIR)/var/lib/dpkg
|
||||
install -d $(DESTDIR)/$(PREFIX)/sbin
|
||||
cp -a swim $(DESTDIR)/$(PREFIX)/sbin/swim
|
||||
install -d $(DESTDIR)/$(PREFIX)/lib/SWIM/bin
|
||||
perl -pe '$$_="\$$pre=\"$(PREFIX)\";\n" \
|
||||
if /AUTOREPLACE/' Conf.pm.alternative \
|
||||
> $(DESTDIR)/$(PREFIX)/lib/SWIM/Conf.pm
|
||||
chmod 644 $(DESTDIR)/$(PREFIX)/lib/SWIM/Conf.pm
|
||||
cp -fa lib/* $(DESTDIR)/$(PREFIX)/lib/SWIM
|
||||
cp -fa bin/* $(DESTDIR)/$(PREFIX)/lib/SWIM/bin
|
||||
install -d $(DESTDIR)/$(PREFIX)/man/man8
|
||||
cp -f swim.8 $(DESTDIR)/$(PREFIX)/man/man8
|
||||
install -d $(DESTDIR)/$(PREFIX)/man/man5
|
||||
cp -f swimrc.5 $(DESTDIR)/$(PREFIX)/man/man5
|
||||
install -d $(DESTDIR)/usr/doc/swim/swim.html
|
||||
cp -fa swim.html/* $(DESTDIR)/usr/doc/swim/swim.html
|
||||
install -d $(DESTDIR)/usr/doc/swim/swimrc.html
|
||||
cp -fa swimrc.html/* $(DESTDIR)/usr/doc/swim/swimrc.html
|
||||
cp -f QUICKSTART.html $(DESTDIR)/usr/doc/swim
|
||||
cp -f REQUIREMENTS.html $(DESTDIR)/usr/doc/swim
|
||||
cp -f swim_by_example.html $(DESTDIR)/usr/doc/swim
|
||||
install -d $(DESTDIR)/usr/doc/swim/examples
|
||||
cp -fa examples/* $(DESTDIR)/usr/doc/swim/examples
|
||||
install -d $(DESTDIR)/etc/swim
|
||||
cp -f swimz.list $(DESTDIR)/etc/swim
|
||||
cp -f swimrc $(DESTDIR)/etc/swim
|
||||
|
||||
installdoc:
|
||||
install -d $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a QUICKSTART.text $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a REQUIREMENTS.text $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a swim_by_example.html $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a THEMES $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a TODO $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a BUGS $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a TODO $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a COPYING $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a contact_and_website $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a changelog $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a swim.text $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
cp -a swimrc.text $(DESTDIR)/$(PREFIX)/doc/swim
|
||||
remove:
|
||||
rm -rf $(PREFIX)/lib/SWIM/*
|
||||
rmdir $(PREFIX)/lib/SWIM
|
||||
rm $(PREFIX)/sbin/swim
|
||||
rm /usr/doc/swim/swim.html/*
|
||||
rmdir /usr/doc/swim/swim.html
|
||||
rm /usr/doc/swim/swimrc.html/*
|
||||
rmdir /usr/doc/swim/swimrc.html
|
||||
rm /usr/doc/swim/examples/*
|
||||
rmdir /usr/doc/swim/examples
|
||||
rm /usr/doc/swim/*
|
||||
rmdir /usr/doc/swim
|
||||
rm $(PREFIX)/man/man5/swimrc.5
|
||||
rm $(PREFIX)/man/man8/swim.8
|
||||
|
||||
debian:
|
||||
dpkg-buildpackage -tc -rfakeroot
|
||||
|
||||
|
||||
dist: debian localdist stampede rpm
|
||||
|
||||
.PHONY: debian
|
114
Programming_swim
Normal file
114
Programming_swim
Normal file
@ -0,0 +1,114 @@
|
||||
Database Structure
|
||||
|
||||
note: what's below was written for readability, not to
|
||||
indicate complex structures, all databases are normal hashes. stripped
|
||||
implies that the control field was removed, but the data afterwards kept.
|
||||
|
||||
Structure of statusindex.deb
|
||||
|
||||
1). Initially made in SWIM::DB_Init::database
|
||||
2). Updated in SWIM::DB::db
|
||||
3). $sb(packagename) = qw(packagename_version group priority
|
||||
status(separated with :));
|
||||
All fields stripped
|
||||
|
||||
Structure of nstatusindex-arch-dists.deb
|
||||
|
||||
1). Initally made in SWIM::NDB_Init::not_installed
|
||||
2). Updated in SWIM::NDB::update_packages_ndb
|
||||
3). $nsb(packagename) = qw(packagename_version group priority);
|
||||
$nsb{"/."} = qw(packagename_version ...);
|
||||
All fields stripped
|
||||
|
||||
|
||||
Structure of packages.deb
|
||||
|
||||
1). Initally made in SWIM::DB_Init::database
|
||||
2). Updated in SWIM::DB::db
|
||||
3). %db = [ @name => (packagename packagename_version ...),
|
||||
@Tdescriptions => (packagename_version format_info ...),
|
||||
@conf => (packagename_versionCONF
|
||||
every_indented_line_after_Conffiles ...),
|
||||
@REPLACE => (packagename_version(with PRE, DEP, REC, SUG,
|
||||
CON, PRO, or REP appended)
|
||||
package_relationship_field (unstripped) ...)
|
||||
]
|
||||
|
||||
Structure of npackages-arch-dists.deb
|
||||
|
||||
1). Initially made in SWIM::NDB_Init::not_installed
|
||||
2). Updated in SWIM::NDB::update_packages_ndb
|
||||
3). %ndb = [ @name => (packagename packagename_version ...),
|
||||
@Tdescriptions => (packagename_version format_info ...),
|
||||
@conf => (empty),
|
||||
@REPLACE => (packagename_version(with PRE, DEP, REC, SUG,
|
||||
CON, PRO, REP, MD, and FN appended)
|
||||
package_relationship_field (unstripped) ...),
|
||||
@FILENAME => (packagename_versionFN Filename_field(stripped) ...),
|
||||
@MD5SUM => (packagename_versionMD
|
||||
package_MD5_checksum(stripped) ...),
|
||||
@revision => (packagename_versionMD(this comes from the
|
||||
Filename field) "packagename_versionMD REVISION"
|
||||
(this time the version comes from the Version
|
||||
field) ...)
|
||||
]
|
||||
|
||||
The revision field is unusual and occurs in the experimental distribution.
|
||||
The hash is used by -p so that the version can be figured out. (check
|
||||
"revision: situation" in SWIM::Deb).
|
||||
|
||||
Structure of groupindex.deb
|
||||
|
||||
1). Initally made in SWIM::DB_Init::database
|
||||
2). Updated in SWIM::DB::db
|
||||
3). $gb(group) = qw(packagenames ......) group stripped from Section:
|
||||
|
||||
Structure of ngroupindex-arch-dists.deb
|
||||
|
||||
1). Initially made in SWIM::NDB_Init::not_installed
|
||||
2). Updated in SWIM::NDB::update_packages_ndb
|
||||
3). $ngb = qw(packagenames ......) group stripped from Section:
|
||||
|
||||
Structure of searchindex.deb and dirindex.deb
|
||||
|
||||
1). When SWIM::DB_Init::database finishes SWIM::DB_Init::md begins.
|
||||
This writes @dpackage to transfer.deb, which is processed by either
|
||||
fastswim (filedir -> big and long) or imswim (which is like longswim,
|
||||
which produces one large file - filedir.deb), and slowswim (big and
|
||||
long) into the two files big.debian and long.debian and then the
|
||||
databases are finished by SWIM::MD::process_md().
|
||||
2). Rebuilt by SWIM::DB::rebuildflatdb
|
||||
3). searchindex.deb = /path/filename\n ...... (1 package)
|
||||
dirindex.deb = /path/dir\n ...... (> 1 package)
|
||||
|
||||
Structure of nsearchindex-arch-dists.deb and ndirindex-arch-dists.deb
|
||||
|
||||
1). After SWIM::NDB_Init::initndb runs SWIM::NDB_Init::not_installed,
|
||||
SWIM::NDB_Init::nmd runs longswim which produces
|
||||
filedir.deb, then initndb runs slowswim producing big.debian and
|
||||
long.debian. Then the database(s) are finished by
|
||||
SWIM::MD::prcess_md.
|
||||
2).
|
||||
3). nsearchindex-arch-dists.deb = /path/filename\n ...... (1 package)
|
||||
ndirindex-arch-dists.deb = /path/dir\n ...... (> 1 package)
|
||||
Note: nsearch* includes elements which pertain to only one
|
||||
package, this generally implies files, not directories, however
|
||||
the ni often has more than one package sharing a file, so its
|
||||
placed into ndir* (this would be rare with an i system).
|
||||
SWIM::Search::search processes these two files differently,
|
||||
which is more effecient for the much larger nsearch*, for this
|
||||
reason you can't merge the two databases together.
|
||||
|
||||
Structure of ncontentsindex-arch-dists.deb.
|
||||
|
||||
1). A compressed Contents database, no alterations (originally the headers
|
||||
were removed, but this is a waste of time.) If the FDB (flat database
|
||||
option if given) SWIM::Library::compress_contents is called from
|
||||
initndb(), otherwise longswim called from SWIM::NDB_Init::nmd
|
||||
copies and compresses. The longswim method compresses, but
|
||||
compress_contents does a cp (not -a). In both cases the header
|
||||
removal has been depreciated. The important thing is that the utime
|
||||
remains the same.
|
||||
2). The new Contents database is copied (utime) and renamed via
|
||||
compress_contents called from SWIM::NDB.
|
||||
3). Contents format
|
206
QUICKSTART.html
Normal file
206
QUICKSTART.html
Normal file
@ -0,0 +1,206 @@
|
||||
<html>
|
||||
<head><title>Quickstart</title></head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E"
|
||||
alink="#FF0000">
|
||||
|
||||
<br><br><br>
|
||||
|
||||
<h1 align=center>QUICKSTART</h1>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h5>READ THE <A HREF="REQUIREMENTS.html">REQUIREMENTS</A></h5>
|
||||
|
||||
Now you can skip the next three steps if you have an installed Debian
|
||||
distribution and you are in a hurry for a demonstration, but you will miss
|
||||
out on swim's more awesome capabilities. With that said.....
|
||||
|
||||
<p>
|
||||
<b>FIRST GET SWIMRC PREPARED</b>
|
||||
|
||||
<p> Edit the swimrc configution file, you should read <A
|
||||
HREF="swimrc.html/index.html">swimrc(5)</A>, but I'll ask you some
|
||||
question right now. You can find swimrc in /etc/swim, and swimrc can be
|
||||
placed in your home directory in the subdirectory .swim. Entries in the
|
||||
home directory swimrc override ones in /etc/swim.
|
||||
|
||||
<p>
|
||||
Are you using an installed Debian system? If so, you almost definitely
|
||||
have dpkg installed. So uncomment this line in /etc/swim/swimrc by
|
||||
removing the pound sign.
|
||||
|
||||
<p>
|
||||
<code>$package_tool = "/usr/bin/dpkg";</code>
|
||||
|
||||
<p>otherwise
|
||||
|
||||
<p>
|
||||
<code>$package_tool = "/usr/bin/ar";</code>
|
||||
|
||||
<p>
|
||||
Do you have the apt package installed? Configure this, or -xyz will not
|
||||
work.
|
||||
|
||||
<p>
|
||||
<code>$apt = "yes";</code>
|
||||
|
||||
<p>
|
||||
Now you need to decide what architecture you would like to be swim's
|
||||
default value when you download, build, and query the not-installed
|
||||
databases.
|
||||
|
||||
<p>
|
||||
What flavor, do you want alpha, arm, hurd-i386, i386, m68k, powerpc,
|
||||
or sparc? (more coming :*) I decided on .....
|
||||
|
||||
<p>
|
||||
<code>$architecture = "i386";</code>
|
||||
|
||||
<p>
|
||||
What kind of distribution do you want to be your default? stable,
|
||||
unstable, frozen, or experimental (rare) I like the ever changing ...
|
||||
|
||||
<p>
|
||||
<code>$distribution = "unstable";</code>
|
||||
|
||||
<p>
|
||||
Decide which sections you want? You can have this
|
||||
|
||||
<p>
|
||||
<code>@user_defined_section = qw(main contrib non-free);</code>
|
||||
|
||||
<p>
|
||||
or this.
|
||||
|
||||
<p>
|
||||
<code>@user_defined_section = qw(main);</code>
|
||||
|
||||
<p>
|
||||
or .....
|
||||
|
||||
<p>
|
||||
<b>SECOND GET SWIMZ.LIST PREPARED</b>
|
||||
|
||||
<p> Now grab a copy of the <A
|
||||
HREF="http://www.debian.org/misc/README.mirrors">README.mirrors</A> from
|
||||
http://www.debian.org/misc/README.mirrors",
|
||||
you will need this to set-up the configuration file /etc/swim/swimz.list.
|
||||
|
||||
<p> If your using apt make sure to read <A
|
||||
HREF="swim.html/index.html">swim(8)</A> to get the nitty gritty on how you
|
||||
can synchronize swim along with apt :*} using <A
|
||||
HREF="swim.html/ch-important.html#s5.6">swimz.list</A>.
|
||||
|
||||
<p>
|
||||
Humm, you found a site which has the distribution you want, and you know
|
||||
which section you want, and you are happy knowing about packages which can
|
||||
install on the architecture you computer happens to have.
|
||||
|
||||
<p>
|
||||
So what site is that?
|
||||
|
||||
<p>
|
||||
<code>deb ftp://ftp.swimz.org</code>
|
||||
|
||||
<p>
|
||||
What was the directory you happened to notice in the README.mirrors page?
|
||||
|
||||
<p>
|
||||
<code>deb ftp://ftp.swimz.org/pub/debian</code>
|
||||
|
||||
<p>
|
||||
What distribution did you want? Note: You won't want to use the Release
|
||||
code name for the distribution, see
|
||||
<A HREF="swim.html/ch-important.html#s5.6">swimz.list</A>.
|
||||
|
||||
<p>
|
||||
<code>deb ftp://ftp.swimz.org/pub/debian unstable</code>
|
||||
|
||||
<p>
|
||||
What sections did you want?
|
||||
|
||||
<p>
|
||||
<code>deb ftp://ftp.swimz.org/pub/debian unstable main contrib
|
||||
non-free</code>
|
||||
|
||||
<p>
|
||||
Now put this line in the swimz.list, exactly like written, and ofcourse
|
||||
use the values you want.
|
||||
|
||||
<p>
|
||||
<b>THIRD GET THE DEBIAN DATABASE WITH FTP</b>
|
||||
|
||||
<p>
|
||||
Just issue this command.
|
||||
|
||||
<p>
|
||||
<kbd>swim --ftp --Contents DF --Packages DF</kbd>
|
||||
|
||||
<p>
|
||||
and wait a little bit.
|
||||
|
||||
<p>
|
||||
<b>FOURTH BUILD THE DATABASES</b>
|
||||
|
||||
<p>
|
||||
This is for a computer system with a Debian distribution installed.
|
||||
|
||||
<p>
|
||||
<kbd>swim --initdb</kbd>
|
||||
|
||||
<p>
|
||||
This next part applies to people who followed all the steps to get here,
|
||||
and also read the important requirements at the top. This makes the
|
||||
not-installed databases. Go take a walk, or a swim :*}
|
||||
|
||||
<p>
|
||||
<kbd>swim --initndb --Contents DF DF</kbd>
|
||||
|
||||
<p>
|
||||
When either of these commands are complete they will say "<samp>over and
|
||||
out</samp>".
|
||||
|
||||
<p>
|
||||
<b>NOW WHAT?</b>
|
||||
|
||||
<p> Now the real fun begins. If you happen to have some experience with
|
||||
rpm you already know some of the options which swim uses, but be prepared
|
||||
for surpises. <A HREF="swim.html/index.html">swim(8)</A> goes into more detail, the
|
||||
<A HREF="http://www.rpm.org/maximum-rpm.ps.gz">"<cite>Maximum
|
||||
RPM</cite>"</A> book by Edward C. Bailey which is freely available may
|
||||
provide help for swim's <kbd>--query</kbd> option, but you will find that
|
||||
swim greatly diverges from rpm.
|
||||
|
||||
<p> Try something like this, and do not use the <kbd>-n</kbd> unless you
|
||||
made the not-installed databases, on the other hand, <em>REMEMBER</em> to
|
||||
use <kbd>-n</kbd> if you do not have an installed Debian system....
|
||||
|
||||
<p>
|
||||
<kbd>swim -n --search swim</kbd>
|
||||
|
||||
<p>
|
||||
now do this..
|
||||
|
||||
<p>
|
||||
<kbd>swim -qnSi</kbd> or <kbd>swim -hn</kbd>
|
||||
|
||||
<p>
|
||||
go to the directory /usr/bin and do
|
||||
|
||||
<p>
|
||||
<kbd>swim -qnf</kbd> <b>.</b>
|
||||
|
||||
<p>
|
||||
you probably will have to do
|
||||
|
||||
<p>
|
||||
<kbd>swim -qnft</kbd> <b>.</b>
|
||||
|
||||
<p>
|
||||
<b>...the fun is just beginning...</b>
|
||||
|
||||
<p>
|
||||
<em>Where are you swimming to today?</em>
|
||||
|
||||
</body>
|
||||
</html>
|
140
QUICKSTART.text
Normal file
140
QUICKSTART.text
Normal file
@ -0,0 +1,140 @@
|
||||
READ THE REQUIREMENTS
|
||||
|
||||
Now you can skip the next three steps if you have an installed Debian
|
||||
distribution and you are in a hurry for a demonstration, but you will miss
|
||||
out on swim's more awesome capabilities. With that said.....
|
||||
|
||||
FIRST GET SWIMRC PREPARED
|
||||
|
||||
Edit the swimrc configution file, you should read swimrc(5), but I'll ask
|
||||
you some question right now. You can find swimrc in /etc/swim, and in
|
||||
your home directory in the subdirectory .swim. Entries in the home
|
||||
directory swimrc override ones in /etc/swim.
|
||||
|
||||
Are you using an installed Debian system? If so, you almost definitely
|
||||
have dpkg installed. So uncomment this line in /etc/swim/swimrc by
|
||||
removing the pound sign.
|
||||
|
||||
$package_tool = "/usr/bin/dpkg";
|
||||
|
||||
otherwise
|
||||
|
||||
$package_tool = "/usr/bin/ar";
|
||||
|
||||
Do you have the apt package installed? Configure this, or -xyz will not
|
||||
work.
|
||||
|
||||
$apt = "yes";
|
||||
|
||||
Now you need to decide what architecture you would like to be swim's
|
||||
default value when you download, build, and query the not-installed
|
||||
databases.
|
||||
|
||||
What flavor, do you want alpha, arm, hurd-i386, i386, m68k, powerpc,
|
||||
or sparc? (more coming :*) I decided on .....
|
||||
|
||||
$architecture = "i386";
|
||||
|
||||
What kind of distribution do you want to be your default? stable,
|
||||
unstable, frozen, or experimental (rare) I like the ever changing ...
|
||||
|
||||
$distribution = "unstable";
|
||||
|
||||
Decide which sections you want? You can have this
|
||||
|
||||
@user_defined_section = qw(main contrib non-free);
|
||||
|
||||
or this.
|
||||
|
||||
@user_defined_section = qw(main);
|
||||
|
||||
or .....
|
||||
|
||||
|
||||
SECOND GET SWIMZ.LIST PREPARED
|
||||
|
||||
Now grab a copy of the README.mirrors from
|
||||
http://www.debian.org/misc/README.mirrors, you will need this to set-up
|
||||
the configuration file /etc/swim/swimz.list.
|
||||
|
||||
If your using apt make sure to read swim(8) to get the nitty gritty on how
|
||||
you can synchronize swim along with apt :*} using swimz.list.
|
||||
|
||||
Humm, you found a site which has the distribution you want, and you know
|
||||
which section you want, and you are happy knowing about packages which can
|
||||
install on the architecture you computer happens to have.
|
||||
|
||||
So what site is that?
|
||||
|
||||
deb ftp://ftp.swimz.org
|
||||
|
||||
What was the directory you happened to notice in the README.mirrors page?
|
||||
|
||||
deb ftp://ftp.swimz.org/pub/debian
|
||||
|
||||
What distribution did you want? Note: You won't want to use the Release
|
||||
code name for the distribution, see swimz.list.
|
||||
|
||||
deb ftp://ftp.swimz.org/pub/debian unstable
|
||||
|
||||
What sections did you want?
|
||||
|
||||
deb ftp://ftp.swimz.org/pub/debian unstable main contrib non-free
|
||||
|
||||
Now put this line in the swimz.list, exactly like written, and ofcourse
|
||||
use the values you want.
|
||||
|
||||
THIRD GET THE DEBIAN DATABASE WITH FTP
|
||||
|
||||
Just issue this command.
|
||||
|
||||
swim --ftp --Contents DF --Packages DF
|
||||
|
||||
and wait a little bit.
|
||||
|
||||
|
||||
FOURTH BUILD THE DATABASES
|
||||
|
||||
This is for a computer system with a Debian distribution installed.
|
||||
|
||||
swim --initdb
|
||||
|
||||
This next part applies to people who followed all the steps to get here,
|
||||
and also read the important requirements at the top. This makes the
|
||||
not-installed databases. Go take a walk, or a swim :*}
|
||||
|
||||
swim --initndb --Contents DF DF
|
||||
|
||||
When either of these commands are complete they will say "over and out".
|
||||
|
||||
NOW WHAT?
|
||||
|
||||
Now the real fun begins. If you happen to have some experience with rpm
|
||||
you already know some of the options which swim uses, but be prepared for
|
||||
surpises. swim(8) goes into more detail, the "Maximum RPM" book by
|
||||
Edward C. Bailey which is freely available may provide help for swim's
|
||||
--query option, but you will find that swim greatly diverges from rpm.
|
||||
|
||||
Try something like this, and do not use the -n unless you made the
|
||||
not-installed databases, on the other hand, REMEMBER to use -n if you
|
||||
do not have an installed system....
|
||||
|
||||
swim -n --search swim
|
||||
|
||||
now do this..
|
||||
|
||||
swim -qnSi or swim -hn
|
||||
|
||||
go to the directory /usr/bin and do
|
||||
|
||||
swim -qnf .
|
||||
|
||||
you probably will have to do
|
||||
|
||||
swim -qnft .
|
||||
|
||||
...the fun is just beginning...
|
||||
|
||||
Where are you swimming to today?
|
||||
|
||||
|
139
REQUIREMENTS.html
Normal file
139
REQUIREMENTS.html
Normal file
@ -0,0 +1,139 @@
|
||||
<html>
|
||||
<head><title>Requirements</title></head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E"
|
||||
alink="#FF0000">
|
||||
|
||||
<br><br><br>
|
||||
|
||||
|
||||
<h2>REQUIRMENTS:</h2>
|
||||
|
||||
<p>
|
||||
Don't get intimidated, this is just to cover all bases, most computer
|
||||
systems meet the requirements.<p>
|
||||
|
||||
<b>PERL</b>: Yes, preferably Perl 5.004.04 or greater.
|
||||
|
||||
<p> <b>FTP CAPABILITIES (optional)</b>: You may need to get <A
|
||||
HREF="ftp://www.perl.com/pub/perl/CPAN/modules/by-category/05_Networking_Devices_IPC/Net/libnet-1.0606.tar.gz">Net::FTP</A>
|
||||
(Debian libnet-perl package) which depends on Data::Dumper (Debian
|
||||
data-dumper package). You also need <b>gcc</b> if you do not have a
|
||||
Debian system so that <em>swim</em> can figure out what architecture your
|
||||
machine is. You can also find these modules at the <A
|
||||
HREF="http://www.perl.com">CPAN mirrors</A> or the PACKAGES below.
|
||||
|
||||
<p> <b>READLINE CAPABILITIES (optional)</b>: For nice readline
|
||||
cpabilities get <A
|
||||
HREF="ftp://www.perl.com/pub/perl/CPAN/modules/by-module/Term/Term-ReadLine-Gnu-1.03.tar.gz">Term::ReadLine::Gnu</A>
|
||||
or alternatively <A
|
||||
HREF="ftp://www.perl.com/pub/perl/CPAN/modules/by-module/Term/Term-ReadLine-Perl-0.990
|
||||
6.tar.gz">Term::ReadLine::Perl</A> which depends on <A
|
||||
HREF="ftp://www.perl.com/pub/perl/CPAN/modules/by-module/Term/TermReadKey-2.12.tar.gz">Term::ReadKey</A>
|
||||
. <em>Term::ReadLine::Gnu</em> may be tricky to set-up on non Debian
|
||||
systems because it depends on <em>ncurses3.4</em> and the <em>GNU Readline
|
||||
Library version 2.1 or later</em>, but <em>Term::ReadLine::Perl</em> is
|
||||
much easier to set-up and allows a huge amount of package names to be
|
||||
present on the command line without a segmentation fault. You could get
|
||||
swim's ftp capabilities working first, and then just fetch the Debian
|
||||
ReadLine package(s) and then use swim's --extract option to set the
|
||||
package(s) up, but, it is sure fun doing a 'make test' when setting up the
|
||||
ReadLine modules! You can also find these modules at the <A
|
||||
HREF="http://www.perl.com">CPAN mirrors</A> or the PACKAGES below. <p>
|
||||
|
||||
<b>DATABASE CAPABILITIES</b>: DB_File comes standard with Perl. But,
|
||||
this doesn't mean it is compiled for the newer Berkeley Database
|
||||
Libraries. DB 1.85 has
|
||||
known <A
|
||||
HREF="http://www.sleepycat.com/historic.html">
|
||||
bugs</A> which effect SWIM. SWIM can work with
|
||||
1.85, but <kbd>--rebuildflatdb</kbd> and <kbd>--rebuildflatndb</kbd> will
|
||||
not work properly. You can run a test to find out whether or not you need
|
||||
to make the change if you have db_dump available on your system (which
|
||||
db_dump). Enter this:
|
||||
|
||||
<P>
|
||||
<code>perl -e 'use DB_File; tie %testdb,'DB_File',"testdb";';<br>
|
||||
db_dump testdb</code>
|
||||
|
||||
<P>If 'db_dump testdb' produces an error you need to make the change by
|
||||
installing the newest DB_File. If you have a version of libc6 less than
|
||||
2.1, first, install a new version ( 2.3.4 or greater) of the <A
|
||||
HREF="http://www.sleepycat.com">Berkeley DB</A> if you don't already
|
||||
have it installed. If you get
|
||||
<A
|
||||
HREF="ftp://www.perl.com/pub/perl/CPAN/modules/by-module/DB_File/DB_File-1.65.tar.gz">
|
||||
DB_File</A>
|
||||
from CPAN you will need to edit
|
||||
config.in to point to the location of where libdb2 installed db.h, where
|
||||
libdb2 is installed on your system, and the name of the library. For
|
||||
Debian this would be:
|
||||
|
||||
<P><code>INCLUDE = /usr/include/db2<br>
|
||||
LIB = /usr/lib<br>
|
||||
DBNAME = -ldb2</code>
|
||||
|
||||
<p><b>PACKAGES</b>: You can get the CPAN modules in some package formats.
|
||||
Debian 2.1 and Red Hat 5.0 have been tested with these packages:
|
||||
|
||||
<p>
|
||||
<u><em>Debian</em></u><br>
|
||||
<A
|
||||
HREF="http://www.debian.org/Packages/unstable/base/libnet-perl.html">libnet-perl</A>
|
||||
and<br>
|
||||
<A
|
||||
HREF="http://www.debian.org/Packages/unstable/base/data-dumper.html">data-dumper</A>
|
||||
and<br>
|
||||
<A
|
||||
HREF="http://www.debian.org/Packages/unstable/interpreters/libterm-readline-gnu-perl.html">libterm-readline-gnu-perl</A>
|
||||
(plus a lot more) or<br>
|
||||
<A
|
||||
HREF="http://www.debian.org/Packages/unstable/interpreters/libterm-readline-perl-perl.html">libterm-readline-perl-perl</A>
|
||||
and<br>
|
||||
<A
|
||||
HREF="http://www.debian.org/Packages/unstable/libs/libterm-readkey-perl.html">libterm-readkey-perl</A><br>
|
||||
<A HREF="http://www.debian.org/Packages/unstable/libs/libdb2.html">libdb2</A>
|
||||
(dump_db utility is now part of libc6 2.1)<br>
|
||||
|
||||
<p>
|
||||
<u><em>Red Hat</em></u><br>
|
||||
<A
|
||||
HREF="http://filewatcher.org/filename-search/?q=perl-libnet">perl-libnet</A>
|
||||
and<br>
|
||||
<A
|
||||
HREF="http://filewatcher.org/filename-search/?q=perl-Data-Dumper">perl-Data-Dumper</A><br>
|
||||
<A HREF="http://filewatcher.org/description-search/?q=libdb">db-?</a>
|
||||
|
||||
<p>
|
||||
<b>USER</b>: root. Some of swim's most important functions will not work
|
||||
properly unless you are running the program as root.
|
||||
|
||||
<p><b>HARD DRIVE SPACE</b>: Make sure you have enough hard drive space.
|
||||
1500
|
||||
installed packages produces a 10MB fileindex.deb, and the virtual
|
||||
not-installed filesystem database for the unstable distribution is now
|
||||
over 40MB. 100MB of free space on your hard drive is probably a good
|
||||
safety margin, if you run out of hard drive space the program will just
|
||||
hang or quit.
|
||||
|
||||
<p>
|
||||
|
||||
<b>MEMORY</b>: Databases made for an installed Debian system require
|
||||
memory in proportion to the amount of packages actually installed; the
|
||||
<kbd>--lowmem</kbd> option is an excellent alternative for making the
|
||||
databases if the computer system is either overloaded or low on memory.
|
||||
If you get "out of memory" warnings try to free up some memory first then
|
||||
make the databases. You can also avoid making the virtual filesystem by
|
||||
not using the <kbd>--Contents</kbd> option or using the FDB argument for
|
||||
that option. Updating the databases uses very little memory.
|
||||
|
||||
<p> <b>OTHER SWIM FUNCTIONS</b>: Most free operating systems have these
|
||||
packages installed: On a non Debian system, <b>ar</b> from
|
||||
<em>binutils</em> is used to query Debian binary packages. These next
|
||||
packages are essential in a free operating system (Linux) -
|
||||
<em>textutils</em>, <em>fileutils</em>, <em>grep</em>, <em>tar</em>,
|
||||
<em>gzip</em>, and <em>mount</em>.
|
||||
|
||||
<p>
|
||||
|
||||
</body>
|
||||
</html>
|
90
REQUIREMENTS.text
Normal file
90
REQUIREMENTS.text
Normal file
@ -0,0 +1,90 @@
|
||||
REQUIRMENTS:
|
||||
|
||||
Don't get intimidated, this is just to cover all bases, most computer
|
||||
systems meet the requirements.
|
||||
|
||||
PERL: Yes, preferably Perl 5.004.04 or greater.
|
||||
|
||||
FTP CAPABILITIES: (optional) You may need to get Net::FTP (Debian
|
||||
libnet-perl package) which depends on Data::Dumper (Debian data-dumper
|
||||
package). Also check the CPAN mirrors or the PACKAGES below. You also
|
||||
need gcc if you do not have a Debian system so that swim can figure out
|
||||
what architecture your machine is. You can also find these modules at the
|
||||
CPAN mirrors or the PACKAGES below.
|
||||
|
||||
READLINE CAPABILITIES: (optional) For nice readline cpabilities get
|
||||
Term::ReadLine::Gnu or alternatively Term::ReadLine::Perl which depends on
|
||||
Term::ReadKey. Term::ReadLine::Gnu may be tricky to set-up on non Debian
|
||||
systems because it depends on ncurses3.4 and the GNU Readline Library
|
||||
version 2.1 or later, but Term::ReadLine::Perl is much easier to set-up
|
||||
and allows a huge amount of package names to be present on the command
|
||||
line without a segmentation fault. You could get swim's ftp capabilities
|
||||
working first, and then just fetch the Debian ReadLine package(s) and then
|
||||
use swim's --extract option to set the package(s) up, but, it is sure fun
|
||||
doing a 'make test' when setting up the ReadLine modules! You can also
|
||||
find these modules at the CPAN mirrors or the PACKAGES below.
|
||||
|
||||
DATABASE CAPABILITIES: DB_File comes standard with Perl. But, this
|
||||
doesn't mean it is compiled for the newer Berkeley Database Libraries. DB
|
||||
1.85 has known bugs which effect SWIM. SWIM can work with 1.85, but
|
||||
--rebuildflatdb and --rebuildflatndb will not work properly. You can run
|
||||
a test to find out whether or not you need to make the change if you have
|
||||
db_dump available on your system (which db_dump). Enter this:
|
||||
|
||||
perl -e 'use DB_File; tie %testdb,'DB_File',"testdb";';
|
||||
db_dump testdb
|
||||
|
||||
If 'db_dump testdb' produces an error you need to make the change by
|
||||
installing the newest DB_File. If you have a version of libc6 less than
|
||||
2.1, first, install a new version (2.3.4 or greater) of the Berkeley DB if
|
||||
you don't already have it installed. If you get DB_File from CPAN you
|
||||
will need to edit config.in to point to the location of where libdb2
|
||||
installed db.h, where libdb2 is installed on your system, and the name of
|
||||
the library. For Debian this would be:
|
||||
|
||||
INCLUDE = /usr/include/db2
|
||||
LIB = /usr/lib
|
||||
DBNAME = -ldb2
|
||||
|
||||
PACKAGES - You can get the CPAN modules in some package formats. Debian
|
||||
2.1 and Red Hat 5.0 have been tested with these packages:
|
||||
|
||||
Debian -
|
||||
|
||||
libnet-perl and
|
||||
data-dumper and
|
||||
libterm-readline-gnu-perl (plus a lot more) or
|
||||
libterm-readline-perl-perl and
|
||||
libterm-readkey-perl
|
||||
libdb2
|
||||
|
||||
Red Hat -
|
||||
|
||||
perl-libnet and
|
||||
perl-Data-Dumper
|
||||
db-?
|
||||
|
||||
USER: root. Some of swim's most important functions will not work
|
||||
properly unless you are running the program as root.
|
||||
|
||||
HARD DRIVE SPACE: Make sure you have enough hard drive space. 1500
|
||||
installed packages produces a 10MB fileindex.deb, and the virtual
|
||||
not-installed filesystem database for the unstable distribution is now
|
||||
over 40MB. 100MB of free space on your hard drive is probably a good
|
||||
safety margin, if you run out of hard drive space the program will just
|
||||
hang or quit.
|
||||
|
||||
MEMORY: Databases made for an installed Debian system require memory in
|
||||
proportion to the amount of packages actually installed; the --lowmem
|
||||
option is an excellent alternative for making the databases if the
|
||||
computer system is either overloaded or low on memory. If you get "out of
|
||||
memory" warnings try to free up some memory first then make the databases.
|
||||
You can also avoid making the virtual filesystem by not using the
|
||||
--Contents option or using the FDB argument for that option. Updating the
|
||||
databases uses very little memory.
|
||||
|
||||
OTHER SWIM FUNCTIONS: Most free operating systems have these packages
|
||||
installed: On a non Debian system, ar from binutils is used to query
|
||||
Debian binary packages. These next packages are essential in a free
|
||||
operating system (Linux) - textutils, fileutils, grep, tar, gzip, and
|
||||
mount.
|
34
THEMES
Normal file
34
THEMES
Normal file
@ -0,0 +1,34 @@
|
||||
Swim's design gives it the ability to implement features which were once
|
||||
just fiction.
|
||||
|
||||
Most people involved with WM (Window Managers) have heard of themes.
|
||||
Themes have become very popular. You can design a real cool look for your
|
||||
WM and then pass it on to other people to recreate what you have. But,
|
||||
who ever thought that themes could also apply to distributions? The only
|
||||
requirement to develop a theme from the Debian distributions is to create
|
||||
a customized Packages database. Apt can take it from there, by simply
|
||||
clearing the old cache, making a new cache from this Package, and
|
||||
installing everything. This theme can even be installed along with an
|
||||
existing installation because apt will figure out what needs to be done.
|
||||
|
||||
Themes can easily be made using swim. Here's a list of ideas.
|
||||
|
||||
* A module with the capability of taking the output from apt, and creating
|
||||
a database which would correlate to a successful installation without ever
|
||||
installing one package. This would essentially be a not-installed
|
||||
database with one major difference, this database would represent the real
|
||||
state of a successful installation. This would allow a developer to test
|
||||
a hypothetical installation, and look at it's structure. Then a Packages
|
||||
file could be made from this database and tested on a real installation.
|
||||
|
||||
Although this module doesn't exist, yet, it could easily be made with a
|
||||
special designated database interacting with the other functions offered
|
||||
by swim's existing modules.
|
||||
|
||||
* Swim already allows Packages files to be made from *debs placed in the
|
||||
DF - including creating a place for a personalized distribution (coming).
|
||||
A person can make there own real personalized distribution in this
|
||||
manner, and then share their unique Packages file with the rest of the
|
||||
world, allowing other people to recreate the state of your own
|
||||
distribution on their machines.
|
||||
|
126
TODO
Normal file
126
TODO
Normal file
@ -0,0 +1,126 @@
|
||||
* Configuration for --dbpath, --root, --main, --contrib, --non-free,
|
||||
--non-us, --arch, --dists could be automated so that a state could be
|
||||
established on the command line, without needing to enter any of these
|
||||
options again, untill a new state was desired, --default would bring
|
||||
everything back to the default directory /var/lib/dpkg.
|
||||
|
||||
* Non-root users could run all functions if permissions were changed,
|
||||
probably this should be left up to the system administrator.
|
||||
|
||||
* Add --todo --bugs to -q.
|
||||
|
||||
* Looks like --source and --source_only is kind of deprecated now that apt_0.3.6
|
||||
is out, and there are Sources.gz in the appropriate places. But, now
|
||||
there exists three unique ways to get sources, debget which doesn't use
|
||||
databases, apt which uses databases, and swim which combines the
|
||||
approaches of both apt and debget, all three ways have their advantages.
|
||||
Swim isn't dependent on the existence of an up to date Sources.gz.
|
||||
|
||||
* --ftp automatically removes packages with changed upstream-revisions..
|
||||
perhaps move them to a storage location.
|
||||
|
||||
* base-files package has changed it's file/dir listing, eventually
|
||||
SWIM::File can be modified in the future.
|
||||
|
||||
* SWIM::Apt needs to be modified so that when it reads the Packages names
|
||||
in the default directory it will look at the basename to take into
|
||||
account non-Debian distributions. Non-Debian distributions should
|
||||
be presented separately when DF is used as an argument. Probably a new
|
||||
option will be added. This adheres to the swim philosophy of allowing
|
||||
independent distributions with the exact directory structure of a normal
|
||||
Debian distribution to exist.
|
||||
|
||||
* mention netselect to help people find the best mirror site, and maybe
|
||||
automatically use netselect on swimz.list to find which sites are up,
|
||||
and are best to use first, overridding the default sequential order!
|
||||
|
||||
* Yes, you can 'cp -a' and 'gzip -d' sources from swim to sources for
|
||||
apt, then just do a swim --apt --check or vica versa.
|
||||
|
||||
* Make sure this doesn't happen for proposed-updates - "swim:
|
||||
dists/proposed-updates/single/binary-i386/Release does not exist on the
|
||||
server", and make a note of proposed-updates in the manual, no Contents.
|
||||
Incoming can be grabbed by doing something like this, "deb url
|
||||
debian/Incoming" vs experimental "deb url/debian project/experimental/".
|
||||
Packages are available here, too, no Release or Contents. swim is too
|
||||
hardwired and this needs to be changed.
|
||||
|
||||
* For now, a trade-off will be made in respect to updating the n* virtual
|
||||
filesystem, even if Contents hasn't been updated, the versions of C,CR
|
||||
will still be updated with the old Contents, on the other hand if
|
||||
nfile* was version-less this wouldn't be necessary, then the behavior
|
||||
mentioned next could be implemented anyways. If Contents are ever
|
||||
updated on a more consistent basis, this behavior will be changed to
|
||||
wait for these packages untill the next Contents, but basically this
|
||||
should be done anyways, it will mean, quick updates during the week, and
|
||||
one long one when the new Contents becomes available, the lack of
|
||||
versioning would make this viable. Basically, a database will be kept
|
||||
for .packagesdiff-arch-dist.deb, nfile* will remain versioned because
|
||||
this means faster lookups.
|
||||
|
||||
* Implement the "on the fly" distribution creation system.
|
||||
|
||||
* Add the DF virtual system which will allow --apt2df and --df2apt to
|
||||
work.
|
||||
|
||||
* a search for everything found in -T
|
||||
|
||||
* -o DPkg::Options::=--purge once --remove isn't a standard option to dpkg
|
||||
for "remove", and possible --admindir (like --dbpath) --root (like
|
||||
--root) and --instdir (where packages should be installed).
|
||||
|
||||
* add --force-* at least for --purge and depends.
|
||||
|
||||
* an option which would show all packages relationships for a package
|
||||
being --ftp or -xyrz on the --stdin line
|
||||
|
||||
* Complete menuindex() which allows a search of the debian menu system.
|
||||
|
||||
* add the pid (personal information database) editing, and data storage.
|
||||
|
||||
* Use the MD5 module from libmd5-perl for --md5sum?
|
||||
|
||||
* gnupg, pgp, and md5sum checking for source probably using dscverify from
|
||||
package devscripts, this uses the MD5 module
|
||||
|
||||
* Need to add the capability to deal with weird non-standard Filename: .*
|
||||
situations, both in retrieval, and archiving. In situations like this,
|
||||
the distribution may not be apparent, but the package could still be
|
||||
found and placed in a special area, and a special database could store
|
||||
the information. This database could be transparent, and available for
|
||||
quering regardless of the distribution default, or command line
|
||||
specification.
|
||||
|
||||
* Add the --file and --http capabilities or at least the capability to
|
||||
look at Packages from strange directories grabbed by apt using these
|
||||
methods. Meanwhile, swim's ftp capabilities make slow modems happy, and
|
||||
allow for precise downloading versus downloading every package related
|
||||
to -T.
|
||||
|
||||
* Add a hash option so that swim can know that po -> unstable, this would
|
||||
work fine, because swim shows the Release version, but the author is
|
||||
against implementing this ability.
|
||||
|
||||
* Instead of PWD!full_path, allow multiple filenames to be quoted without
|
||||
pathnames for --extract.
|
||||
|
||||
* .., ../, ../../, ../../file-or-dir (not ../../file-or-dir/) ability for
|
||||
-qf|p works, but more complex ../ is not implemented, yet. ../ will
|
||||
also follow a symbolic link, this is a feature.
|
||||
|
||||
* --search by dirs when in place using -f.
|
||||
|
||||
* Add the retro full spectrum of dpkg options, it's nice sometimes to just
|
||||
do a simple install.
|
||||
|
||||
* Gather together all the build children into a giant family including the
|
||||
teacher and the checker.
|
||||
|
||||
* Do the Perl for Non Free OSes thing.
|
||||
|
||||
* Remove a large percentage of the bold and underlining from the
|
||||
documentation.
|
||||
|
||||
* Make needed changes and improvements to the Manual - a constant TODO.
|
||||
|
||||
* swim faster and faster!
|
167
bin/fastswim
Executable file
167
bin/fastswim
Executable file
@ -0,0 +1,167 @@
|
||||
#!/usr/bin/perl -w
|
||||
#use diagnostics;
|
||||
require 5.004;
|
||||
use strict;
|
||||
|
||||
################################################################################
|
||||
# Package administration and research tool for Debian #
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum #
|
||||
# #
|
||||
# This program 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 2 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, write to the Free Software #
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.#
|
||||
################################################################################
|
||||
|
||||
|
||||
# Because it is a better to write to disk, rather than trying to do
|
||||
# everthing in memory, and then it's good to close the process which
|
||||
# accomplished this. I am sure there are better ways.
|
||||
|
||||
# Anyways if you want to test fastswim do something like this:
|
||||
# fastswim --transfer /var/lib/dpkg/info /tmp /var/lib/dpkg and create a
|
||||
# transfer.deb file beforehand in /tmp which has the packagename_version
|
||||
# one to a line.
|
||||
|
||||
my @ppackage;
|
||||
my %repeaters;
|
||||
my $thingy;
|
||||
my $tingy;
|
||||
my $temp;
|
||||
my %HL;
|
||||
my @name;
|
||||
my %version;
|
||||
|
||||
#$| = 1;
|
||||
#$#name = 2000;
|
||||
#$#ppackage = 2000;
|
||||
|
||||
# This way has been de-pre-c-whatever-ated because it lacks version
|
||||
# rememberance, and is just kept for testing purposes
|
||||
if ($#ARGV == -1) {
|
||||
print "swim: fastswim requires option/arguments, see program for instructions\n";
|
||||
exit;
|
||||
chdir("$ARGV[1]");
|
||||
#consider readdir
|
||||
@ppackage = <*.list>;
|
||||
}
|
||||
# This does the work
|
||||
elsif ($ARGV[0] eq "--transfer") {
|
||||
open(TRANSFER, "$ARGV[2]/transfer.deb");
|
||||
while (<TRANSFER>) {
|
||||
chomp $_;
|
||||
if (defined $_) {
|
||||
my @the = split(/_/, $_);
|
||||
push(@ppackage, "$the[0].list");
|
||||
# remember the version.
|
||||
chomp $the[1];
|
||||
$version{$the[0]} = $the[1];
|
||||
}
|
||||
}
|
||||
close(TRANSFER);
|
||||
}
|
||||
|
||||
|
||||
# Make a nice md. I decided on a Hash of Lists, giving all
|
||||
# files/dirs unique name, and then a list of packages which
|
||||
# correspond..because this should be faster than a Hash of Hash
|
||||
# where you'd have to loop through all packages names..find the
|
||||
# files/dir in all packages names which are the same..I'd assume a HL
|
||||
# would be a quicker query, even though the Hash would be enormous.
|
||||
# Possible things: a tree for faster query.
|
||||
|
||||
# Put everything into an array..every other is package name
|
||||
# Better check for packages which don't have /. in their *.list...
|
||||
# which is rare, but does happen. Sometimes *.list(s) don't have
|
||||
# all the parent directories, but we won't worry about that.
|
||||
print " Making the massive hash\n";
|
||||
$| = 1; my $x = 1;
|
||||
foreach $thingy (sort @ppackage) {
|
||||
open(LIST, "$ARGV[1]/$thingy") or die "Humm, strange";
|
||||
# Because of the version..there are sometimes dots
|
||||
$thingy =~ m,(.*)\.list,;
|
||||
my $count = 0;
|
||||
my @count = <LIST>;
|
||||
close(LIST);
|
||||
foreach (@count) {
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
chomp $_;
|
||||
# does /. exist? it should be first.
|
||||
if ($count == 0) {
|
||||
if ($_ !~ m,\/\.,) {
|
||||
my $shifter = $_;
|
||||
my @redolist = @count;
|
||||
push(@count,$shifter);
|
||||
# humm let's rebuild the offending backup list, this
|
||||
# is important for --db.
|
||||
unshift(@redolist,"/.");
|
||||
open(REDOLIST, ">$ARGV[1]/backup/$thingy.bk.bk")
|
||||
or warn "needed to edit $thingy because it lacked /.,
|
||||
but could not open up a backup file\n";
|
||||
my $rd;
|
||||
foreach $rd (@redolist) {
|
||||
chomp $rd;
|
||||
print REDOLIST "$rd\n";
|
||||
}
|
||||
close(REDOLIST);
|
||||
rename
|
||||
("$ARGV[1]/backup/$thingy.bk.bk","$ARGV[1]/backup/$thingy.bk");
|
||||
$_ = "/.";
|
||||
}
|
||||
}
|
||||
$count = 1;
|
||||
$repeaters{$_}++;
|
||||
if ($repeaters{$_} == 1) {
|
||||
$temp = 0;
|
||||
}
|
||||
else {
|
||||
$temp = $repeaters{$_} - 1;
|
||||
}
|
||||
if (defined $version{$1}) {
|
||||
$HL{$_}[$temp] = "$1_$version{$1}";
|
||||
}
|
||||
}
|
||||
}
|
||||
undef @ppackage;
|
||||
|
||||
# We will create one file with the 1..and another with >1..
|
||||
# than split..reverse..and order.accordingly..this makes
|
||||
# things much faster. Remember clean-up routines for kill.
|
||||
print " Starting ... writing to $ARGV[2]!\n";
|
||||
# Create the database
|
||||
open(BIG, ">$ARGV[2]/big.debian") or die;
|
||||
open(LONG, ">$ARGV[2]/long.debian") or die;
|
||||
foreach $thingy (sort keys %HL ) {
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
# Humm, will split or grep be faster?
|
||||
#my $tingy = "@{ $HL{$thingy} }" . " " . @{ $HL{$thingy} };
|
||||
my $tingy = "@{ $HL{$thingy} }";
|
||||
if (@{ $HL{$thingy} } > 1 || @{ $HL{$thingy} } eq "") {
|
||||
print LONG "$thingy -> $tingy\n";
|
||||
}
|
||||
elsif (@{ $HL{$thingy} } == 1) {
|
||||
print BIG "$thingy -> $tingy\n";
|
||||
}
|
||||
}
|
||||
#print "Finished\n";
|
||||
close(BIG);
|
||||
close(LONG);
|
||||
#undef %HL;
|
||||
print " Cleaning up\n";
|
||||
|
||||
__END__
|
99
bin/imswim
Executable file
99
bin/imswim
Executable file
@ -0,0 +1,99 @@
|
||||
#!/usr/bin/perl -w
|
||||
#use diagnostics;
|
||||
require 5.004;
|
||||
use strict;
|
||||
|
||||
################################################################################
|
||||
# Package administration and research tool for Debian #
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum #
|
||||
# #
|
||||
# This program 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 2 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, write to the Free Software #
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.#
|
||||
################################################################################
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
This allows computers with a small amount of memory or overloaded system
|
||||
to succeed in making the databases for SWIM::DB_Init. Instead of using
|
||||
transfer.deb to grab everything into memory and then creating the
|
||||
long.debian and big.debian files right out of memory for processing by
|
||||
SWIM::MD, it works like longswim by creating one large file to the disk
|
||||
(this can use lots of memory, but can swap easily) then it uses slowswim
|
||||
to create long.debian and big.debian using a minimal memory method, then
|
||||
it finishes using SWIM::MD.
|
||||
|
||||
To test supply these arguments - info dir, temporary dir "imswim
|
||||
/var/lib/dpkg/info /tmp" and create a transfer.deb file
|
||||
beforehand in the temporary dir which has the packagename_version one to a
|
||||
line.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
print "swim: imswim requires arguments, see program for instructions\n";
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
$| = 1; my $x = 1;
|
||||
open(FILEDIR, ">$ARGV[1]/filedir.deb")
|
||||
or warn "could not create filedir.deb\n";
|
||||
open(TRANSFER, "$ARGV[1]/transfer.deb") or warn "needs transfer.deb";
|
||||
while (<TRANSFER>) {
|
||||
chomp;
|
||||
my @the = split(/_/, $_);
|
||||
open (LIST, "$ARGV[0]/$the[0].list")
|
||||
or warn "could not file *list";
|
||||
chomp;
|
||||
# better check if /. is missing in any of the *list
|
||||
my $count = 0;
|
||||
my @count = <LIST>;
|
||||
close(LIST);
|
||||
foreach (@count) {
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
chomp $_;
|
||||
# does /. exist? it should be first.
|
||||
if ($count == 0) {
|
||||
if ($_ !~ m,\/\.,) {
|
||||
my $shifter = $_;
|
||||
my @redolist = @count;
|
||||
push(@count,$shifter);
|
||||
# humm let's rebuild the offending backup list, this
|
||||
# is important for --db.
|
||||
unshift(@redolist,"/.");
|
||||
open(REDOLIST, ">$ARGV[0]/backup/$the[0].list.bk.bk")
|
||||
or warn "needed to edit $the[0].list because it lacked /.,
|
||||
but could not open up a backup file\n";
|
||||
my $rd;
|
||||
foreach $rd (@redolist) {
|
||||
chomp $rd;
|
||||
print REDOLIST "$rd\n";
|
||||
}
|
||||
close(REDOLIST);
|
||||
rename("$ARGV[0]/backup/$the[0].list.bk.bk",
|
||||
"$ARGV[0]/backup/$the[0].list.bk");
|
||||
$_ = "/.";
|
||||
}
|
||||
}
|
||||
$count = 1;
|
||||
print FILEDIR "$_ -> $the[0]_$the[1]\n";
|
||||
} # foreach @count
|
||||
} # while TRANSFER
|
||||
close(TRANSFER);
|
||||
close(FILEDIR);
|
||||
} # else
|
591
bin/longswim
Executable file
591
bin/longswim
Executable file
@ -0,0 +1,591 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
#use diagnostics;
|
||||
use strict;
|
||||
use DB_File;
|
||||
|
||||
################################################################################
|
||||
# Package administration and research tool for Debian #
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum #
|
||||
# #
|
||||
# This program 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 2 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, write to the Free Software #
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.#
|
||||
################################################################################
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
This program creates the file filedir.deb using choice() and
|
||||
comma_choice() (which both use timing() in case Contents is newer than
|
||||
Packages). It establishes the file based on --main, --contrib, --non-free,
|
||||
--non-us or the default. This program is quite time consuming and uses
|
||||
more and more memory as it runs. Afterwared, the output can be processed
|
||||
by fastswim (high memory approach) or slowswim (low memory approach),
|
||||
whether either is faster is still subject to experimentation. swim packs
|
||||
everything into the databases. It also produces the report
|
||||
.contentsdiff-arch-dists.deb which shows which packages exist in Contents
|
||||
which don't exist in Packages.
|
||||
|
||||
This program takes a large amount of arguments. Look at nmd() in
|
||||
SWIM::NDB_Init.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
print "swim: longswim requires many arguments, see program for instructions\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
my $Contents;
|
||||
my $contentsindex;
|
||||
my ($main,$contrib,$non_free,$non_us);
|
||||
my $tmp;
|
||||
my (%watch,%ndb);
|
||||
my $npackages;
|
||||
my $gzip;
|
||||
my $place;
|
||||
|
||||
# process @ARGV
|
||||
$Contents = $ARGV[0]; $contentsindex = $ARGV[1];
|
||||
$main = $ARGV[2]; $contrib = $ARGV[3];
|
||||
$non_free = $ARGV[4]; $non_us = $ARGV[5];
|
||||
$tmp = $ARGV[6];
|
||||
$npackages = $ARGV[7];
|
||||
$gzip = $ARGV[8];
|
||||
$place = $ARGV[9];
|
||||
my $Contents_mtime = $ARGV[10];
|
||||
|
||||
# tie it once not a quarter million times
|
||||
tie %ndb, 'DB_File', "$npackages" or die "DB_File: $!";
|
||||
|
||||
# Let's find the arch and dists
|
||||
my @archdist = split(m,/,,$contentsindex);
|
||||
my($arch,$dist) = (split(m,-,,$archdist[$#archdist]))[1,2];
|
||||
$dist =~ s,\.deb,,;
|
||||
|
||||
unlink("$place/.contentsdiff-$arch-$dist.deb")
|
||||
if -e "$place/.contentsdiff-$arch-$dist.deb";
|
||||
|
||||
nmd();
|
||||
|
||||
# main processing program
|
||||
sub nmd {
|
||||
|
||||
my %again;
|
||||
my %all;
|
||||
|
||||
$| = 1; my $x = 1;
|
||||
open(CONTENTS, "$Contents") or die "where is it?\n";
|
||||
open(FILEDIR,">$tmp/filedir.deb");
|
||||
open(CONTENTSDB,">$contentsindex");
|
||||
while (<CONTENTS>) {
|
||||
print CONTENTSDB $_;
|
||||
if (/^FILE\s*LOCATION$/) {
|
||||
while (<CONTENTS>) {
|
||||
s,^(\./)+,,; # filter for Debians altered dir structure
|
||||
print CONTENTSDB $_;
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
chomp $_;
|
||||
# find all directories
|
||||
# split is the way to go.
|
||||
# If it ends with / its a directory
|
||||
my($dirfile,$package,@packs,@dirfile,@package,@comma);
|
||||
|
||||
|
||||
######################
|
||||
# ENDS WITH / #
|
||||
######################
|
||||
if (m,.*/\s+\w*,) {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile); $dirfile =~ s,/$,,;
|
||||
@comma = split(/,/,$package);
|
||||
|
||||
#################
|
||||
# HAS A COMMA #
|
||||
#################
|
||||
if (scalar(@comma) >= 2) {
|
||||
# humm many packages share this file/dir
|
||||
my @choice_package;
|
||||
##########
|
||||
## MAIN ##
|
||||
##########
|
||||
if ($main eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (defined $_) {
|
||||
if ($_ !~ m,^non-free/|^contrib/|^non-us/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice in main
|
||||
############
|
||||
##NON-FREE##
|
||||
############
|
||||
if ($non_free eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^non-free/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice non-free
|
||||
###########
|
||||
##CONTRIB##
|
||||
###########
|
||||
if ($contrib eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^contrib/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice contrib
|
||||
#########
|
||||
#NON-US##
|
||||
#########
|
||||
if ($non_us eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^non-us/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice non-us
|
||||
|
||||
} # scalar @comma >= 2
|
||||
|
||||
# When only one package exists for dir
|
||||
#############
|
||||
##############
|
||||
# NO COMMA #
|
||||
##############
|
||||
elsif (scalar(@comma) == 1) {
|
||||
my $choice_package;
|
||||
##########
|
||||
## MAIN ##
|
||||
##########
|
||||
if ($main eq "yes") {
|
||||
# only one package found related to choice section
|
||||
if (defined $package) {
|
||||
if ($package !~ m,^non-free/|^contrib/|^non-us/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
############
|
||||
##NON-FREE##
|
||||
############
|
||||
if ($non_free eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^non-free/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
###########
|
||||
##CONTRIB##
|
||||
###########
|
||||
if ($contrib eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^contrib/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
#########
|
||||
#NON-US##
|
||||
#########
|
||||
if ($non_us eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^non-us/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
|
||||
} # @comma = 1
|
||||
|
||||
#################
|
||||
# WRITE TO FILE #
|
||||
#################
|
||||
foreach $package (@packs) {
|
||||
my ($count,$holder);
|
||||
for ($count = 0; $count <= $#dirfile; $count++) {
|
||||
if ($count == 0) {
|
||||
$holder = "/$dirfile[$count]";
|
||||
my $again = "$dirfile[$count] -> $package";
|
||||
my $all = "/. -> $package";
|
||||
$again{$again}++;
|
||||
$all{$all}++;
|
||||
if ($all{$all} == 1) {
|
||||
print FILEDIR "/. -> $package\n";
|
||||
##repeaters("/.",$package);
|
||||
}
|
||||
if ($again{$again} == 1) {
|
||||
print FILEDIR "/$dirfile[$count] -> $package\n";
|
||||
##repeaters("/$dirfile[$count]",$package);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$holder = $holder . "/$dirfile[$count]";
|
||||
#print "$holder -> $package\n";
|
||||
#repeaters($holder,$package);
|
||||
my $again = "$holder -> $package";
|
||||
$again{$again}++;
|
||||
if ($again{$again} == 1) {
|
||||
print FILEDIR "$holder -> $package\n";
|
||||
##repeaters($holder,$package);
|
||||
}
|
||||
}
|
||||
} # end for
|
||||
}
|
||||
} # does end with /
|
||||
|
||||
######################
|
||||
# DOESN'T END WITH / #
|
||||
######################
|
||||
# find all files and directories
|
||||
else {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
# watch this
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile);
|
||||
@comma = split(/,/,$package);
|
||||
|
||||
#################
|
||||
# HAS A COMMA #
|
||||
#################
|
||||
if (scalar(@comma) >= 2) {
|
||||
# humm many packages share this file/dir
|
||||
my @choice_package;
|
||||
##########
|
||||
## MAIN ##
|
||||
##########
|
||||
if ($main eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (defined $_) {
|
||||
if ($_ !~ m,^non-free/|^contrib/|^non-us/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice in main
|
||||
############
|
||||
##NON-FREE##
|
||||
############
|
||||
if ($non_free eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^non-free/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice non-free
|
||||
###########
|
||||
##CONTRIB##
|
||||
###########
|
||||
if ($contrib eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^contrib/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice contrib
|
||||
#########
|
||||
#NON-US##
|
||||
#########
|
||||
if ($non_us eq "yes") {
|
||||
foreach (@comma) {
|
||||
if (m,^non-us/,) {
|
||||
push(@choice_package,$_);
|
||||
}
|
||||
}
|
||||
@packs = comma_choice(@choice_package);
|
||||
} # choice non-us
|
||||
|
||||
} # scalar @comma == 2
|
||||
|
||||
# When only one package exists for file
|
||||
#############
|
||||
##############
|
||||
# NO COMMA #
|
||||
##############
|
||||
elsif (scalar(@comma) == 1) {
|
||||
my $choice_package;
|
||||
##########
|
||||
## MAIN ##
|
||||
##########
|
||||
if ($main eq "yes") {
|
||||
# only one package found related to choice section
|
||||
if (defined $package) {
|
||||
if ($package !~ m,^non-free/|^contrib/|^non-us/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
############
|
||||
##NON-FREE##
|
||||
############
|
||||
if ($non_free eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^non-free/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
###########
|
||||
##CONTRIB##
|
||||
###########
|
||||
if ($contrib eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^contrib/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
#########
|
||||
#NON-US##
|
||||
#########
|
||||
if ($non_us eq "yes") {
|
||||
if (defined $package) {
|
||||
if ($package =~ m,^non-us/,) {
|
||||
$choice_package = $package;
|
||||
@package = split(/\//,$choice_package);
|
||||
}
|
||||
}
|
||||
@packs = choice(@package);
|
||||
} # end choice main
|
||||
|
||||
|
||||
} # @comma = 1
|
||||
|
||||
#################
|
||||
# WRITE TO FILE #
|
||||
#################
|
||||
foreach $package (@packs) {
|
||||
my ($count,$holder);
|
||||
for ($count = 0; $count <= $#dirfile; $count++) {
|
||||
if ($count == 0) {
|
||||
$holder = "/$dirfile[$count]";
|
||||
my $again = "$dirfile[$count] -> $package";
|
||||
my $all = "/. -> $package";
|
||||
$again{$again}++;
|
||||
$all{$all}++;
|
||||
if ($all{$all} == 1) {
|
||||
print FILEDIR "/. -> $package\n";
|
||||
}
|
||||
if ($again{$again} == 1) {
|
||||
print FILEDIR "/$dirfile[$count] -> $package\n";
|
||||
}
|
||||
}
|
||||
# Here's where things really start to turn ugly.
|
||||
else {
|
||||
$holder = $holder . "/$dirfile[$count]";
|
||||
my $again = "$holder -> $package";
|
||||
$again{$again}++;
|
||||
if ($again{$again} == 1) {
|
||||
print FILEDIR "$holder -> $package\n";
|
||||
}
|
||||
}
|
||||
} # end for
|
||||
} # @packs - more than one package for this file
|
||||
} # end else not dir
|
||||
}
|
||||
}
|
||||
}
|
||||
close(FILEDIR);
|
||||
close(CONTENTS);
|
||||
|
||||
print "Compress contents\n";
|
||||
system "$gzip", "-9", "$contentsindex";
|
||||
utime(time,$Contents_mtime,$contentsindex);
|
||||
print "Cleaning up\n";
|
||||
# this will add a newline, but better to do a Ctrl-C than to have the
|
||||
# process hang and respawn itself - something which sometimes happens
|
||||
kill INT => $$;
|
||||
print "swim: please press Ctrl-c\n"; # just in case :)
|
||||
|
||||
# probably don't need to do this ends the program
|
||||
#undef %all;
|
||||
#undef %again;
|
||||
|
||||
} # end sub nmd
|
||||
|
||||
# this finds the package or none which equal choice section when a
|
||||
# file/dir is found with one package
|
||||
sub choice {
|
||||
|
||||
my (@package) = @_;
|
||||
my @packs;
|
||||
if ($#package == 1) {
|
||||
my $what = timing($package[1]);
|
||||
if (defined $what) {
|
||||
#$package[1] = version($package[1]);
|
||||
@packs = $what;
|
||||
}
|
||||
}
|
||||
elsif ($#package == 2) {
|
||||
my $what = timing($package[2]);
|
||||
if (defined $what) {
|
||||
#$package[2] = version($package[2]);
|
||||
@packs = $what;
|
||||
}
|
||||
}
|
||||
|
||||
return @packs;
|
||||
|
||||
} # end sub choice
|
||||
|
||||
|
||||
# this finds the package(s) or none which equal choice section when a
|
||||
# file/dir is found with more than one package
|
||||
sub comma_choice {
|
||||
|
||||
my (@choice_package) = @_;
|
||||
my (@package,@packs);
|
||||
|
||||
if (@choice_package) {
|
||||
if ($#choice_package == 0) {
|
||||
@package = split(/\//,$choice_package[0]);
|
||||
if ($#package == 1) {
|
||||
my $what = timing($package[1]);
|
||||
if (defined $what) {
|
||||
#$package[1] = version($package[1]);
|
||||
push(@packs,$what);
|
||||
}
|
||||
}
|
||||
elsif ($#package == 2) {
|
||||
my $what = timing($package[2]);
|
||||
if (defined $what) {
|
||||
#$package[2] = version($package[2]);
|
||||
push(@packs,$what);
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($#choice_package > 0) {
|
||||
# Basically, we will keep all conflicting dirs/files
|
||||
# because often they are related
|
||||
foreach (@choice_package) {
|
||||
@package = split(/\//,$_);
|
||||
if ($#package == 1) {
|
||||
my $what = timing($package[1]);
|
||||
if (defined $what) {
|
||||
push(@packs,$what);
|
||||
}
|
||||
}
|
||||
elsif ($#package == 2) {
|
||||
my $what = timing($package[2]);
|
||||
if (defined $what) {
|
||||
push(@packs,$what);
|
||||
}
|
||||
}
|
||||
}
|
||||
} # else more than 1 for choice
|
||||
} # defined choice
|
||||
return @packs;
|
||||
|
||||
} # end sub comma_choice
|
||||
|
||||
|
||||
# this sub produces a report file..in case Packages is older than Contents
|
||||
# there will be other reports, ofcourse, like if Packages is newer than
|
||||
# Contents. Uses version();
|
||||
sub timing {
|
||||
|
||||
my ($lookup) = @_;
|
||||
|
||||
my $afterlookup = nversion($lookup);
|
||||
if ($afterlookup eq 1) {
|
||||
$watch{$lookup}++;
|
||||
if ($watch{$lookup} == 1) {
|
||||
open(REPORT,">>$place/.contentsdiff-$arch-$dist.deb")
|
||||
or die "can't create a file\n";
|
||||
print REPORT "Found in Contents, not in Packages: $lookup\n";
|
||||
close(REPORT);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
return $afterlookup;
|
||||
}
|
||||
|
||||
} # end my timing
|
||||
|
||||
# checks npackage.deb to find version for package found in Contents
|
||||
sub nversion {
|
||||
|
||||
my ($argument) = @_;
|
||||
#ndb();
|
||||
|
||||
if (defined $argument) {
|
||||
# We will check for more than two..just in case
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $ndb{$argument}) {
|
||||
$argument = $ndb{$argument};
|
||||
return $argument;
|
||||
}
|
||||
# fixed the space packages
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#untie %ndb;
|
||||
|
||||
} # end sub nversion
|
||||
|
||||
sub ndb {
|
||||
#tie %ndb, 'DB_File', "$npackages" or die "DB_File: $!";
|
||||
} # end sub ndb
|
131
bin/slowswim
Executable file
131
bin/slowswim
Executable file
@ -0,0 +1,131 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
#use diagnostics;
|
||||
use strict;
|
||||
|
||||
################################################################################
|
||||
# Package administration and research tool for Debian #
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum #
|
||||
# #
|
||||
# This program 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 2 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, write to the Free Software #
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.#
|
||||
################################################################################
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
This program only takes two argument, a temp directory and the name of the
|
||||
binary sort..sort. You can test a filedir.deb file.
|
||||
|
||||
|
||||
=cut
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
print "swim: slowswim requires arguments, see program for instructions\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
my $tmp = $ARGV[0];
|
||||
my $sort = $ARGV[1];
|
||||
|
||||
pre_md();
|
||||
|
||||
# This is nmd()'s version of fastswim..also a lowmem method, after making
|
||||
# long.debian and big.debian, process_md() finishes the job.
|
||||
sub pre_md {
|
||||
|
||||
my %HL;
|
||||
my $temp;
|
||||
my %repeaters;
|
||||
my $fcount = 0;
|
||||
my @tempholder;
|
||||
|
||||
print "Sorting everything\n";
|
||||
system ("$sort $tmp/filedir.deb > $tmp/sortfiledir.deb");
|
||||
unlink("$tmp/filedir.deb");
|
||||
|
||||
# grab the keys from the sorted file
|
||||
print "Making the massive hash using lowmem\n";
|
||||
$| = 1; my $x = 1;
|
||||
open(FILEDIR, "$tmp/sortfiledir.deb") or die "where is sortfiledir.deb?\n";
|
||||
while (<FILEDIR>) {
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
my ($place, $packname) = split(/ -> /,$_,2);
|
||||
push(@tempholder,"$place -> $packname");
|
||||
if ($fcount != 0) {
|
||||
my($tplace,$tpackname) = split(/ -> /,$tempholder[$fcount - 1],2);
|
||||
chomp $tpackname;
|
||||
# As long as they aren't different add to HL because they
|
||||
# belong to a group.
|
||||
if ($tplace eq $place) {
|
||||
#print "$tplace and $place\n";
|
||||
$repeaters{$tplace}++;
|
||||
if ($repeaters{$tplace} == 1) {
|
||||
$temp = 0;
|
||||
}
|
||||
else {
|
||||
$temp = $repeaters{$tplace} - 1;
|
||||
}
|
||||
$HL{$tplace}[$temp] = $tpackname;
|
||||
}
|
||||
# they new guy is different, but the old guy belongs to the
|
||||
# previous group or not, so finish adding to %HL and then
|
||||
# print out, and undef %HL
|
||||
else {
|
||||
#print "I AM DIFF $tplace\n";
|
||||
# finish adding
|
||||
$repeaters{$tplace}++;
|
||||
if ($repeaters{$tplace} == 1) {
|
||||
$temp = 0;
|
||||
}
|
||||
else {
|
||||
$temp = $repeaters{$tplace} - 1;
|
||||
}
|
||||
$HL{$tplace}[$temp] = $tpackname;
|
||||
|
||||
# print out
|
||||
open(BIG, ">>$tmp/big.debian") or die;
|
||||
open(LONG, ">>$tmp/long.debian") or die;
|
||||
my $thingo;
|
||||
foreach $thingo (sort keys %HL ) {
|
||||
my $tingy = "@{ $HL{$thingo} }";
|
||||
if (@{ $HL{$thingo} } > 1 || @{ $HL{$thingo} } eq "") {
|
||||
print LONG "$thingo -> $tingy\n";
|
||||
}
|
||||
elsif (@{ $HL{$thingo} } == 1) {
|
||||
print BIG "$thingo -> $tingy\n";
|
||||
}
|
||||
}
|
||||
close(BIG);
|
||||
close(LONG);
|
||||
|
||||
# The whole key for lowmem systems
|
||||
undef %repeaters;
|
||||
undef %HL;
|
||||
undef $tempholder[$fcount - 1];
|
||||
|
||||
}
|
||||
} # if fcount ne 0
|
||||
|
||||
$fcount++;
|
||||
}
|
||||
|
||||
# also do this in db() & ndb()
|
||||
unlink("$tmp/sortfiledir.deb");
|
||||
|
||||
|
||||
} # end sub pre_md
|
78
changelog
Normal file
78
changelog
Normal file
@ -0,0 +1,78 @@
|
||||
swim (0.3.6) - October 20 2000
|
||||
|
||||
-- Made swim perl-5.6 happy. Thanks to Douglas du Boulay
|
||||
<ddb@crystal.uwa.edu.au> for pointing this out.
|
||||
|
||||
swim (0.3.5) - January 28 2000
|
||||
|
||||
-- Fixed a minor bug pertaining to the mtime of Contents which occured
|
||||
during initial building of the uninstalled filesystem using FDBDF or
|
||||
DF. This bug arose as a result of a bug fix in 0.3.4.
|
||||
|
||||
swim (0.3.4) - January 23 2000
|
||||
|
||||
-- Made the changelog and copyright option work properly in relation to
|
||||
the fsstnd Debian has adopted with backwards compatibility. Fixed a
|
||||
regexp in Qftp to properly deal with packages which match one another,
|
||||
but aren't the same. Fixed xyzr to work properly with ps. Fixed share
|
||||
-d/l output for p option. Added an indication when extraction
|
||||
succeeds. Now Contents is properly filtered for ndb. Removed extra
|
||||
output from menu for package option. Added example documentation,
|
||||
thanks to John Lapeyre for the suggestion. Also, thanks to Joel Soete
|
||||
for reporting corrupt sources from a faulty upload, and to tucows.com
|
||||
for adding swim to their archive and awarding swim 5 Penguins.
|
||||
|
||||
swim (0.3.3) - January 15 2000
|
||||
|
||||
-- Repaired a bug in longswim causing the uninstalled filesystem to be
|
||||
made with packages which looked like spaces due to a return code error,
|
||||
which caused some trouble for the virtual directories. ncontents is
|
||||
now filtered of ./, though it was cool to look at.
|
||||
|
||||
swim (0.3.2) - January 05 2000
|
||||
|
||||
-- Fixed to properly find documentation in the not-installed new Debian
|
||||
share directories, perl5 in Depends for the new Debian perl policy, and
|
||||
year 2000 in help.
|
||||
|
||||
swim (0.3.1) - January 04 2000
|
||||
|
||||
-- Because of change in Debian's directory structure in Contents, added a
|
||||
filter so that not-installed database is properly made without repeats.
|
||||
Fixed a documentation error in QUICKSTART. Made swim@the.netpedia.net
|
||||
default anonymous login. Minor documentation improvements.
|
||||
|
||||
swim (0.3.0) - June 15 1999
|
||||
|
||||
-- The cleaned up version of 0.2.9. Rebuild databases if you were using
|
||||
version 0.2.8 or less.
|
||||
|
||||
swim (0.2.9) - May 14 1999
|
||||
|
||||
-- This is an interim release until 0.3.0 is released. Major bug fixes,
|
||||
and some new features, including a history, and updating for
|
||||
not-installed db. Rebuild databases if you were using an older version.
|
||||
|
||||
swim (0.2.8) - Mar 13 1999
|
||||
|
||||
-- Fixed a minor bug which was preventing virtual options --xyz and --ftp
|
||||
from working with searches.
|
||||
-- Set the $swim_version variable to the right version number, and
|
||||
automated the release process to avoid problems like the failure to
|
||||
change this variable in the 0.2.7 release from occurring again.
|
||||
|
||||
swim (0.2.7) - Mar 12 1999
|
||||
|
||||
-- Fixed a file test in SWIM::Conf which kept the initial directories from
|
||||
being created on startup, making the program fail. Three names deserve
|
||||
recognition: John Lapeyre, Jonathan P. Tomer, and Cale Epstein who all
|
||||
provided their own perspective to the problem, I combined all three
|
||||
approaches. Shaleh pointed out a packaging error.
|
||||
|
||||
swim (0.2.6)
|
||||
|
||||
-- First initial public offering around the beginning of March, 1999,
|
||||
includes the main swim program, four exercise programs to help with
|
||||
database creation, important swim manuals and twenty-five module
|
||||
members.
|
||||
-- swimmers ... take your mark ... go!
|
7
contact_and_website
Normal file
7
contact_and_website
Normal file
@ -0,0 +1,7 @@
|
||||
email:
|
||||
|
||||
Jonathan D. Rosenbaum <mttrader@access.mountain.net>
|
||||
|
||||
http:
|
||||
|
||||
the.netpedia.net
|
20
examples/Cron
Executable file
20
examples/Cron
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This is a simple approach. You could have a monthly Cron for stable and
|
||||
# then update if any changes were observed, a weekly Cron for frozen, and
|
||||
# a daily Cron for unstable.
|
||||
|
||||
# For this example a default of unstable is assumed.
|
||||
# This downloads only one Contents-arch for the unstable distribution.
|
||||
# Updates the Packages using apt, and grabs the Contents-arch and Packages
|
||||
# for the stable distribution if there are any changes.
|
||||
# Update the sources:
|
||||
swim --ftp --Contents DF --onec >> /var/log/swim.log 2>&1;
|
||||
swim --apt --update >> /var/log/swim.log 2>&1;
|
||||
swim --ftp --dists stable --onec >> /var/log/swim.log 2>&1;
|
||||
|
||||
# This will update the database for the default distribution/architecture
|
||||
# using 'cron' to automatically pick the newest packages.
|
||||
# Update the databases:
|
||||
swim --db >> /var/log/swim.log 2>&1;
|
||||
swim --ndb APT --cron --Contents DF >> /var/log/swim.log 2>&1;
|
263
lib/Ag.pm
Normal file
263
lib/Ag.pm
Normal file
@ -0,0 +1,263 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Ag;
|
||||
use strict;
|
||||
use SWIM::Global qw(:Info $file_now);
|
||||
use SWIM::DB_Library qw(:Xyz);
|
||||
use SWIM::Info;
|
||||
use SWIM::Pn_print;
|
||||
use SWIM::Deps;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(description q_description);
|
||||
|
||||
|
||||
# stuff to query package names, -a, and groups
|
||||
|
||||
# -qi <packages name> Anotherwards that big thing of info...also
|
||||
# -c, -l
|
||||
sub description {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
else {
|
||||
ndb(\%commands);
|
||||
}
|
||||
|
||||
|
||||
if (defined $argument) {
|
||||
# We will check for more than two..just in case
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
}
|
||||
if ($db{"$argument"}){
|
||||
my $package = $db{"$argument"};
|
||||
print $package;
|
||||
}
|
||||
else {
|
||||
print "package $argument is not installed\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
untie %db;
|
||||
|
||||
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
|
||||
if ($commands->{"c"} && !($commands->{"l"} || $commands->{"d"})) {
|
||||
if (conf(\%commands) ne 0) {
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
# here for a reason
|
||||
# if -i because calls from qindexer.
|
||||
if ($commands->{"i"}) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (($commands->{"c"} && ($commands->{"l"} || $commands->{"d"})) ||
|
||||
($commands->{"l"} || $commands->{"d"})) {
|
||||
if ($commands->{"c"} && conf(\%commands) ne 0) {
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
}
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
|
||||
if (!($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"})) {
|
||||
if ($commands->{"x"} || $commands->{"ftp"} || $commands->{"source"} ||
|
||||
$commands->{"source_only"} || $commands->{"remove"} ||
|
||||
$commands->{"r"} || $commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub description
|
||||
|
||||
# Access Descriptions, and other stuff for known <packages>.
|
||||
# This includes -ql(d)c, -qc or plain -q (just the package name and
|
||||
# version). Anotherwards if -i isn't used this sub is called. And
|
||||
# -ql is handled by file. Mostly, this was designed for calling a single
|
||||
# package name on the command line without a known package title except
|
||||
# when -q is called by itself, but using -T is an exception since this is
|
||||
# useful.
|
||||
sub q_description {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
else {
|
||||
ndb(\%commands);
|
||||
}
|
||||
|
||||
|
||||
if (defined $argument) {
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
if ($commands->{"c"} && $commands->{"d"}) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
print "$argument\n" if $commands->{"g"};
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
if (conf(\%commands) ne 0) {
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
}
|
||||
# it's nice to print out -d with -c, so this was added.
|
||||
file(\%commands);
|
||||
}
|
||||
elsif ($commands->{"c"}) {
|
||||
# this produces annoying spaces
|
||||
print "$argument\n" if $commands->{"g"} && conf(\%commands) ne 0;
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
if (conf(\%commands) ne 0) {
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
if ($commands->{"md5sum"}) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($db{$argument} && !$commands->{"c"}) {
|
||||
print "$argument\n" if $commands->{"T"} ||
|
||||
$commands->{"depends"} || $commands->{"pre_depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"conflicts"} || $commands->{"replaces"} ||
|
||||
$commands->{"provides"};
|
||||
singular(\%commands);
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print "\n" if $commands->{"T"} ||
|
||||
$commands->{"depends"} || $commands->{"pre_depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"conflicts"} || $commands->{"replaces"} ||
|
||||
$commands->{"provides"};
|
||||
}
|
||||
else { print "package $argument is not installed\n"; }
|
||||
}
|
||||
elsif ($argument =~ /_/) {
|
||||
if ($commands->{"c"} && $commands->{"d"}) {
|
||||
print "$argument\n" if $commands->{"g"};
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print conf(\%commands) if conf(\%commands) ne 0 && !$commands->{"md5sum"};
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
elsif ($commands->{"c"}) {
|
||||
my $check = conf(\%commands);
|
||||
print "$argument\n" if $commands->{"g"} && $check ne 0 ||
|
||||
$commands->{"l"};
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
if (conf(\%commands) ne 0) {
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
elsif (conf(\%commands) == 0) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
}
|
||||
elsif ($db{$argument} && !$commands->{"c"}) {
|
||||
# watch this
|
||||
##print "$argument\n" if $commands->{"g"};
|
||||
print "$argument\n" if $commands->{"T"} ||
|
||||
$commands->{"depends"} || $commands->{"pre_depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"conflicts"} || $commands->{"replaces"} ||
|
||||
$commands->{"provides"};
|
||||
singular(\%commands);
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print "\n" if $commands->{"T"} ||
|
||||
$commands->{"depends"} || $commands->{"pre_depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"conflicts"} || $commands->{"replaces"} ||
|
||||
$commands->{"provides"};
|
||||
}
|
||||
else { print "package $argument is not installed\n"; }
|
||||
}
|
||||
|
||||
}
|
||||
untie %db;
|
||||
|
||||
if (!defined $file_now &&
|
||||
!($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"})) {
|
||||
if ($commands->{"x"} || $commands->{"ftp"} || $commands->{"source"} ||
|
||||
$commands->{"source_only"} || $commands->{"remove"} ||
|
||||
$commands->{"r"} || $commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
}
|
||||
} # end sub q_description
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
1219
lib/Apt.pm
Normal file
1219
lib/Apt.pm
Normal file
File diff suppressed because it is too large
Load Diff
358
lib/Compare.pm
Normal file
358
lib/Compare.pm
Normal file
@ -0,0 +1,358 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Compare;
|
||||
use strict;
|
||||
use SWIM::Conf qw($dpkg);
|
||||
use SWIM::Library;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(comparison compare_versions);
|
||||
|
||||
# comparison function and checking function (-v) for not-installed databases
|
||||
|
||||
=pod
|
||||
|
||||
DEVELOPMENTAL
|
||||
|
||||
This uses the comparison method mentioned in the packaging manual. It
|
||||
will look for an epoch *: or the absence, and a revision -* or the
|
||||
absence. First the epoch is compared, then the upstream-version, than
|
||||
the debian-revision. The sub will stop and return a value as soon as
|
||||
a difference is found. A look in the dpkg attic helped out (compare_vnumbers)
|
||||
here, but lib.pl used separate subs, and doesn't appear to check for
|
||||
an epoch separately, ofcourse there may have not been an epoch. This
|
||||
uses the special variable $&, but apparently this isn't as big a waste
|
||||
of resources in later versions of Perl, but there will be some
|
||||
experiments and benchmarks for alternatives in the future for this sub.
|
||||
There some rules built into comparison() to deal with patch to non-patch,
|
||||
more than one hyphen (-). This involves a little transformation.
|
||||
You can verify that this sub is working by doing perl -e '$five =\
|
||||
system "dpkg --compare-versions 10 gt 1.0.17"; print "nop\n" if $five\
|
||||
== 256; print "yes\n" if $five == 0', take a look at the scripts, too.
|
||||
Also, use -v (compare_versions()) when using --initndb or --rebuildndb
|
||||
for a report.
|
||||
|
||||
=cut
|
||||
|
||||
sub comparison {
|
||||
|
||||
# $pversion = version from Packages.gz
|
||||
# $eversion = version from nstatusindex-arch-dist.deb
|
||||
|
||||
my($pversion,$eversion) = @_;
|
||||
my($epoch, $upstream, $revision);
|
||||
my($eepoch, $eupstream, $erevision);
|
||||
my($revisiond,$erevisiond);
|
||||
my $result;
|
||||
|
||||
# If the two versions "eq" one another no reason to go on
|
||||
if ($pversion ne $eversion) {
|
||||
|
||||
# check epoch first, go on if the same
|
||||
#########
|
||||
# EPOCH #
|
||||
#########
|
||||
if ($pversion =~ /:/ || $eversion =~ /:/) {
|
||||
if ($pversion =~ /:/) {
|
||||
($epoch,$upstream) = split(/:/,$pversion,2);
|
||||
}
|
||||
else {
|
||||
$epoch = 0; $upstream = $pversion;
|
||||
}
|
||||
if ($eversion =~ /:/) {
|
||||
($eepoch,$eupstream) = split(/:/,$eversion,2);
|
||||
}
|
||||
else {
|
||||
$eepoch = 0; $eupstream = $eversion;
|
||||
}
|
||||
do {
|
||||
|
||||
$epoch =~ s/^\d*//; my $epochd = $&;
|
||||
$eepoch =~ s/^\d*//; my $eepochd = $&;
|
||||
$result = $epochd <=> $eepochd;
|
||||
return "<" if $result == -1;
|
||||
return ">" if $result == 1;
|
||||
|
||||
} while (length ($epoch) && length ($eepoch));
|
||||
#return length ($a) cmp length ($b);
|
||||
} # end if epoch
|
||||
else {
|
||||
$epoch = 0; $upstream = $pversion;
|
||||
$eepoch = 0; $eupstream = $eversion;
|
||||
}
|
||||
|
||||
# Check the upstream-revision next
|
||||
#####################
|
||||
# UPSTREAM-REVISION #
|
||||
#####################
|
||||
if ($upstream || $eupstream) {
|
||||
# we need to run a little test in case hyphens exists more than once
|
||||
if ($upstream =~ /-/) {
|
||||
my $hyphen = ($upstream =~ tr/-//);
|
||||
if ($hyphen > 1) {
|
||||
$upstream =~ m,(^.*)-(.*$),;
|
||||
$upstream = $1;
|
||||
$revision = $2;
|
||||
}
|
||||
else {
|
||||
($upstream,$revision) = split(/-/,$upstream,2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# because the absence is considered earlier, and the convention
|
||||
# is to use -1.
|
||||
$revision = 0;
|
||||
}
|
||||
# we need to run a little test in case hyphens exists more than once
|
||||
if ($eupstream =~ /-/) {
|
||||
my $hyphen = ($eupstream =~ tr/-//);
|
||||
if ($hyphen > 1) {
|
||||
$eupstream =~ m,(^.*)-(.*$),;
|
||||
$eupstream = $1;
|
||||
$erevision = $2;
|
||||
}
|
||||
else {
|
||||
($eupstream,$erevision) = split(/-/,$eupstream,2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# because the absence is considered earlier, and the convention
|
||||
# is to use -1.
|
||||
$erevision = 0;
|
||||
}
|
||||
do {
|
||||
# letters
|
||||
$upstream =~ s/^\D*//; my $upstreamd = $&;
|
||||
$eupstream =~ s/^\D*//; my $eupstreamd = $&;
|
||||
|
||||
# hopefully this handles nasty beta situations
|
||||
if ($upstreamd eq "b" and $eupstreamd eq "." ) {
|
||||
return "<";
|
||||
}
|
||||
elsif ($upstreamd eq "." and $eupstreamd eq "b" ) {
|
||||
return ">";
|
||||
}
|
||||
elsif ($upstreamd eq "beta" and $eupstreamd eq "." ) {
|
||||
return "<";
|
||||
}
|
||||
elsif ($upstreamd eq "." and $eupstreamd eq "beta" ) {
|
||||
return ">";
|
||||
}
|
||||
elsif ($upstreamd eq "." and $eupstreamd eq "-pre-") {
|
||||
return ">";
|
||||
}
|
||||
elsif ($eupstreamd eq "." and $upstreamd eq "-pre-") {
|
||||
return "<";
|
||||
}
|
||||
|
||||
# solves problems when "." is compared to letters, and also a weird
|
||||
# case involving a patched version changing to a non-patched version.
|
||||
if ($upstreamd =~ /\./) {
|
||||
if ($eupstreamd =~ /\w/) {
|
||||
if ($eupstreamd =~ /pl/ && $upstreamd !~ /pl/) {
|
||||
$eupstreamd = "";
|
||||
}
|
||||
elsif ($upstreamd !~ /\.\w{2,10}/) {
|
||||
$eupstreamd = ".";
|
||||
}
|
||||
}
|
||||
elsif ($eupstreamd eq "") {
|
||||
$eupstreamd = ".";
|
||||
}
|
||||
}
|
||||
# the weird -pre situation
|
||||
elsif ($upstreamd =~ /-pre/ || $eupstreamd =~ /-pre/) {
|
||||
$upstreamd = ""; $eupstreamd = "";
|
||||
}
|
||||
|
||||
if ( $eupstreamd =~ /\./) {
|
||||
if ($upstreamd =~ /\w/) {
|
||||
if ($upstreamd =~ /pl/ && $eupstreamd !~ /pl/) {
|
||||
$upstreamd = "";
|
||||
}
|
||||
elsif ($upstreamd !~ /\.\w{2,10}/) {
|
||||
$upstreamd = ".";
|
||||
}
|
||||
}
|
||||
elsif ($upstreamd eq "") {
|
||||
$upstreamd = ".";
|
||||
}
|
||||
}
|
||||
# the weird -pre situation
|
||||
elsif ($upstreamd =~ /-pre/ || $eupstreamd =~ /-pre/) {
|
||||
$upstreamd = ""; $eupstreamd = "";
|
||||
}
|
||||
|
||||
$result = $upstreamd cmp $eupstreamd;
|
||||
return "<" if $result == -1;
|
||||
return ">" if $result == 1;
|
||||
# it's importantant to realize that . & + are being checked for
|
||||
# above. : and - have already been dealt with. cmp seems to deal with
|
||||
# these characters with no problems.
|
||||
|
||||
|
||||
# numbers
|
||||
|
||||
# found a little problem with <=> when number's eq "",
|
||||
# but this doesn't effect cmp.
|
||||
if ($upstream eq "") {
|
||||
if ($eupstream eq ".") {
|
||||
$upstream = ".";
|
||||
}
|
||||
else {
|
||||
$upstream = 0;
|
||||
}
|
||||
}
|
||||
if ( $eupstream eq "") {
|
||||
if ($upstream eq ".") {
|
||||
$eupstream = ".";
|
||||
}
|
||||
else {
|
||||
$eupstream = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$upstream =~ s/^\d*//; $upstreamd = $&;
|
||||
$eupstream =~ s/^\d*//; $eupstreamd = $&;
|
||||
$result = $upstreamd <=> $eupstreamd;
|
||||
return "<" if $result == -1;
|
||||
return ">" if $result == 1;
|
||||
} while (length ($upstream) || length ($eupstream))
|
||||
} # end if upstream
|
||||
else {
|
||||
$revision = 0;
|
||||
$erevision = 0;
|
||||
}
|
||||
|
||||
# Finally, check the revision
|
||||
############
|
||||
# REVISION #
|
||||
############
|
||||
if ($revision || $erevision) {
|
||||
do {
|
||||
# letters
|
||||
$revision =~ s/^\D*//; $revisiond = $&; #$revisiond =~ s/\W/ /g;
|
||||
$erevision =~ s/^\D*//; $erevisiond = $&; #$erevisiond =~ s/\W/ /g;
|
||||
|
||||
# pre in the revision
|
||||
if ($revisiond eq "." and $erevisiond eq "pre") {
|
||||
return "r>";
|
||||
}
|
||||
elsif ($erevisiond eq "." and $revisiond eq "pre") {
|
||||
return "r<";
|
||||
}
|
||||
$result = $revisiond cmp $erevisiond;
|
||||
return "r<" if $result == -1;
|
||||
return "r>" if $result == 1;
|
||||
# it's importantant to realize that . & + are being checked for
|
||||
# above. : and - have already been dealt with. cmp seems to deal with
|
||||
# these characters with no problems.
|
||||
|
||||
# numbers
|
||||
# found a little problem with <=> when number's eq "",
|
||||
# but this doesn't effect cmp.
|
||||
if ($revision eq "") {
|
||||
if ($erevision eq ".") {
|
||||
$revision = ".";
|
||||
}
|
||||
else {
|
||||
$revision = 0;
|
||||
}
|
||||
}
|
||||
if ( $erevision eq "") {
|
||||
if ($revision eq ".") {
|
||||
$erevision = ".";
|
||||
}
|
||||
else {
|
||||
$erevision = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$revision =~ s/^\d*//; $revisiond = $&;
|
||||
$erevision =~ s/^\d*//; $erevisiond = $&;
|
||||
$result = $revisiond <=> $erevisiond;
|
||||
return "r<" if $result == -1;
|
||||
return "r>" if $result == 1;
|
||||
} while (length ($revision) && length ($erevision));
|
||||
} # end if revision
|
||||
|
||||
# still 0? check the remainder..this is just for letters which may have
|
||||
# been mulled over because they looked like words \w.
|
||||
if ($result == 0) {
|
||||
$result = $epoch cmp $eepoch || $upstream cmp $eupstream ||
|
||||
$revision cmp $erevision;
|
||||
return "<" if $result == -1;
|
||||
return ">" if $result == 1;
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub comparison
|
||||
|
||||
|
||||
# This produces a report to make sure that comparison() is up to par, and
|
||||
# is called with -v. It uses dpkg's --compare-versions. The advantage of
|
||||
# not normally running --compare-versions is portability. People using
|
||||
# other distribution's don't need dpkg installed, and people using weird
|
||||
# Oses who can't use dpkg can still explore a virtual installation.
|
||||
sub compare_versions {
|
||||
|
||||
# The test result is put in .version_compare
|
||||
|
||||
# $result = operand (result from comparison)
|
||||
# $virtual = version from Packages.gz
|
||||
# $installed = version from nstatusindex-arch-dist.deb
|
||||
# $name = packagename
|
||||
# $commands = options
|
||||
|
||||
my ($result, $virtual, $installed, $name, $commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my ($cv, $cv_result, $cresult);
|
||||
my $place = finddb(\%commands);
|
||||
|
||||
# usually it will be greater
|
||||
if (defined $dpkg) {
|
||||
$cv = system "$dpkg", "--compare-versions", "$virtual", "gt", "$installed";
|
||||
|
||||
$cv_result = "no" if $cv == 256;
|
||||
$cv_result = "yes" if $cv == 0;
|
||||
#$cresult = "no" if $result =~ m,[r]?<,;
|
||||
#$cresult = "yes" if $result =~ m,[r]?>,;
|
||||
$cresult = "no" if $result eq "<" || $result eq "r<";
|
||||
$cresult = "yes" if $result eq ">" || $result eq "r>";
|
||||
|
||||
open(CV,">>$place/.version_compare")
|
||||
or warn "couldn't create version compare report\n";
|
||||
if ($cresult eq "yes" && $cv_result eq "no") {
|
||||
print CV "$name:\ndpkg - $virtual < $installed\nswim - $virtual > $installed\n\n";
|
||||
}
|
||||
elsif ($cresult eq "no" && $cv_result eq "yes") {
|
||||
print CV "$name:\ndpkg - $virtual > $installed\nswim - $virtual < $installed\n\n";
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
close(CV);
|
||||
}
|
||||
|
||||
} # end sub compare_versions
|
||||
|
||||
|
||||
|
||||
1;
|
672
lib/Conf.pm
Normal file
672
lib/Conf.pm
Normal file
@ -0,0 +1,672 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Conf;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
|
||||
@EXPORT = qw($my_number $tmp $architecture $distribution @user_defined_section
|
||||
$default_directory $default_root_directory $permission $dpkg
|
||||
$dpkg_deb $ar $gcc $apt_get $apt_cache $sources @FTP $spl $cat
|
||||
$sort $md5sum $zcat $tar $grep $gzip $fastswim $slowswim $longswim
|
||||
$mount $umount $mke2fs $copy $pager $base $pwd $parent $library
|
||||
$splt $mv $imswim $swim_conf $debug $port $timeout
|
||||
$firewall $passive $apt_sources $HISTORY $alt);
|
||||
%EXPORT_TAGS = (
|
||||
Path => [ qw($tmp $parent $base $library) ],
|
||||
Deb => [ qw($pwd $dpkg_deb $ar $tar $grep $tmp $md5sum $cat $mv) ],
|
||||
Qftp => [ qw($default_root_directory $permission @FTP
|
||||
$default_directory $swim_conf) ],
|
||||
Info => [ qw($parent $base $zcat) ]
|
||||
);
|
||||
|
||||
|
||||
|
||||
#############################
|
||||
# DEFAULT PROGRAM VARIABLES #
|
||||
#############################
|
||||
|
||||
# You can change this to how many lines you would like "swim -qf <>" to
|
||||
# print out, before asking for -t or --total, it will automatically ask
|
||||
# though, if there is more than one package and you used the option -i.
|
||||
# Remember -t can be used with --scripts family members to view the
|
||||
# title of the script file regardless of this setting, and if -t has to be
|
||||
# used, the titles will be displayed, which makes sense.
|
||||
$my_number = 23;
|
||||
|
||||
# Just like a shell, you can keep a history of whatever length you want.
|
||||
$HISTORY = 10;
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --arch.
|
||||
#
|
||||
# You can determine the default architecture used when -n is
|
||||
# called or a not-installed database is made. Architectures are always
|
||||
# being added so check with Debian to find a list. There is alpha, arm,
|
||||
# hurd (alternative kernel to linux), i386, m68k, powerpc, sparc. Just use
|
||||
# the arch found after the hyphen in the Contents-(arch) file.
|
||||
$architecture = "i386";
|
||||
|
||||
# For not-installed:
|
||||
# This part supplies the default value for --dists.
|
||||
#
|
||||
# The default distribution can be either stable, unstable, frozen, or
|
||||
# experimental (rare). These represent the state of development that the
|
||||
# packages are under. The unstable distribution can have lot's of changes
|
||||
# within a very short time period, and frozen may or may not be available.
|
||||
$distribution = "unstable";
|
||||
|
||||
|
||||
#For not-installed:
|
||||
#This part supplies the default value for --main, --contrib, --non-free,
|
||||
#and --non-us.
|
||||
|
||||
# Distributions are divided into the sections. These sections are called
|
||||
# distributions in the version 2.4.1.0 packaging manual, because they were at
|
||||
# one time separate distributions, but this has since changed. You can
|
||||
# determine which of these sections (main, non-free, contrib or non-US) to
|
||||
# pull out of the Contents file if you don't want to use --main, --contrib,
|
||||
# --non-free, and --non-us to selectively pick sections. Basically, whatever
|
||||
# you pull out should match the Package(s) file(s) you are targetting, this
|
||||
# program is friendly if you make a mistake, but it's more effecient to pull
|
||||
# out just what you want. If the same package happens to exist in two
|
||||
# different sections, main and non-us for example (which is really a
|
||||
# situation that shouldn't exist, yet it does), you will still be able to
|
||||
# find this package in the non-us group, but its section and locations will be
|
||||
# the one which main recognizes assuming that you use the order in the example
|
||||
# below.
|
||||
|
||||
# Setting it up:
|
||||
# Example: You just want to pull out main and contrib every time you run
|
||||
# --initndb, --rebuildndb, or --ndb.
|
||||
# @user_defined_section = qw(main contrib non-US);
|
||||
# remember "non-US" not "non-us".
|
||||
|
||||
# untill non-US is fixed the second is better
|
||||
#@user_defined_section = qw(main contrib non-free non-US);
|
||||
@user_defined_section = qw(main contrib non-free);
|
||||
|
||||
# Usually, this is
|
||||
$alt = "debian";
|
||||
|
||||
################
|
||||
# DF LOCATION #
|
||||
################
|
||||
|
||||
# A little philosophy:
|
||||
# swim was developed for maximum versatility, so whether you are just
|
||||
# interested in researching, and keeping tabs on the newest packages,
|
||||
# or maintaining a Debian virtual distribution on a non-Debian real
|
||||
# distribution, or you are a using swim for distribution development, swim
|
||||
# provides a way. The default directory (DF - which can also mean
|
||||
# directory/file) keeps track of Contents and Packages files downloaded
|
||||
# using --ftp, and gives the files names specific to the distribution and
|
||||
# architectures they represent. But, you also have the freedom not to use
|
||||
# the default directory in this case swim will still do the renaming and
|
||||
# keeping track of the mtime, but you will have to remember where you put
|
||||
# the files. On the other hand, if you use apt, you won't even have to use
|
||||
# the DF directory for Packages files because you can get the ones specific
|
||||
# to your own systems architecture from apt, but if you want to look at
|
||||
# other architectures you will need to use the DF directory or one of your
|
||||
# own choice.
|
||||
# Naming Convention: Contents = Contents-dist.gz
|
||||
# Packages = Packages-arch-dist-section.gz
|
||||
$default_directory = '/root/.swim';
|
||||
|
||||
|
||||
# The default root directory is the key to easy management of packages
|
||||
# downloaded through --ftp and --file, and provides an easy way to put together
|
||||
# a personalized distribution. Future implementations of swim will provide
|
||||
# a distribution called personal..Packages and Contents files specific to
|
||||
# this distribution will automatically be made. This directory can be a
|
||||
# real ftp site on your computer, or put where ever else you are allowed
|
||||
# to have directories. dists/distribution/section/architecture/subject will be
|
||||
# placed above this directory. No matter what, debian must be the final
|
||||
# directory before dists. Other distributions are placed alongside debian,
|
||||
# like debian-non-US or personal.
|
||||
# Feel free to change the permissions. This directory is above your default_
|
||||
# directory.
|
||||
$default_root_directory = '/pub/debian';
|
||||
|
||||
# Because you may be using a real ftp site, this configuration allows you
|
||||
# to determine what permissions swim will set for directories it creates
|
||||
# above the default root directory.
|
||||
$permission = '0755';
|
||||
|
||||
|
||||
###############
|
||||
# AR or DPKG? #
|
||||
###############
|
||||
|
||||
# NOTE: users set these next two with the $package_tool variable.
|
||||
|
||||
# packaging friends dpkg and dpkg-deb come from the essential and
|
||||
# required dpkg package. ar from the package binutils can also be used (below).
|
||||
# This is the archival program used for deb packages, but binutils is just
|
||||
# a standard non-essential package, and the ar capabilities are built into
|
||||
# dpkg-deb, and it's better not to assume that the standard packages are
|
||||
# even established, yet.
|
||||
$dpkg = ();
|
||||
$dpkg_deb = ();
|
||||
|
||||
|
||||
# If you don't have the dpkg package on your system then you can use ar
|
||||
# from the package binutils. This would be a standard, but not an essential
|
||||
# package in Debian, but this package is also fairly standard amongst all
|
||||
# distributions, and can even be found in the free djgpp for M$ Oses.
|
||||
# Since people who have both dpkg and ar may want to try the ar method,
|
||||
# rather than creating an automatic check, just assign a value to either
|
||||
# ($dpkg & $dpkg_deb) or just $ar.
|
||||
#my $ar = '/usr/bin/ar'; # same for RH
|
||||
$ar = '/usr/bin/ar';
|
||||
|
||||
|
||||
#######
|
||||
# APT #
|
||||
#######
|
||||
|
||||
# NOTE: users set apt-get and apt-cache with the $apt variable
|
||||
|
||||
# If you have apt you are in luck.
|
||||
$apt_get = ();
|
||||
$apt_cache = ();
|
||||
$sources = '/etc/apt/sources.list';
|
||||
$apt_sources = '/var/state/apt/lists';
|
||||
|
||||
#########
|
||||
# PAGER #
|
||||
#########
|
||||
|
||||
# less is a nice pager, unless you like more! There is an option
|
||||
# --nopager or -n. Pager is used for --help and swim called without any
|
||||
# options. more comes from the required package util-linux, whereas
|
||||
# less comes from a standard package called less. In the future there is
|
||||
# a possiblity that a large percentage of swim may use an internal pager.
|
||||
# less, more, or most or...
|
||||
#$ENV{PAGER} = "/usr/bin/less"; # same RH
|
||||
$ENV{PAGER} = "less";
|
||||
$pager = $ENV{PAGER};
|
||||
|
||||
|
||||
|
||||
#################
|
||||
# SWIM PROGRAMS #
|
||||
#################
|
||||
|
||||
# This is replaced by the Makefile.
|
||||
$pre="/usr";
|
||||
|
||||
# This is the hash making program fastswim.
|
||||
$fastswim = "$pre/lib/SWIM/fastswim";
|
||||
|
||||
# imswim in an alternative to fastswim for --lowmem
|
||||
$imswim = "$pre/lib/SWIM/imswim";
|
||||
|
||||
# This is the low memory program slowswim.
|
||||
$slowswim = "$pre/lib/SWIM/slowswim";
|
||||
|
||||
# This is the dir/file making program longswim.
|
||||
$longswim = "$pre/lib/SWIM/longswim";
|
||||
|
||||
############
|
||||
# TEMP DIR #
|
||||
############
|
||||
|
||||
# If you want to set an alternative directory for the temporary files
|
||||
# created when the databases are made, change here. You may want to make
|
||||
# $tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
# explanation for making such a disk. There is also
|
||||
# /usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
# things up is a subject of experimentation.
|
||||
$tmp = '/tmp';
|
||||
|
||||
##################
|
||||
# MAIN CONFFILES #
|
||||
##################
|
||||
|
||||
# if configuration files are not kept in /etc change this
|
||||
# and set up the directories by hand.
|
||||
|
||||
$swim_conf = '/etc/swim';
|
||||
|
||||
|
||||
#############
|
||||
# UTILITIES #
|
||||
#############
|
||||
|
||||
|
||||
# This probably never will have to be changed.
|
||||
$pwd = `pwd`;
|
||||
chomp $pwd;
|
||||
|
||||
# If the command split is somewhere else besides /usr/bin change this.
|
||||
# The required package textutils provides this.
|
||||
#my $splt = '/usr/bin/split'; # same RH
|
||||
$splt = 'split';
|
||||
|
||||
# cat comes from the essential and required package textutils.
|
||||
#my $cat = '/bin/cat'; # same RH
|
||||
$cat = 'cat';
|
||||
|
||||
# This command also omes from the required and essential package textutils.
|
||||
#my $sort = '/usr/bin/sort'; # same RH
|
||||
$sort = 'sort';
|
||||
|
||||
# This program uses md5sum from the dpkg package, it can also use md5sum
|
||||
# from the RH package.
|
||||
#my $md5sum = '/usr/bin/md5sum'; # same RH
|
||||
$md5sum = 'md5sum';
|
||||
|
||||
# If you want to view compressed files make sure this is correct.
|
||||
# The required package gzip provides this.
|
||||
#my $zcat = '/bin/zcat'; # same RH
|
||||
$zcat = 'zcat';
|
||||
|
||||
# tar comes from the essential and required package tar.
|
||||
#my $tar = '/bin/tar'; # same RH
|
||||
$tar = 'tar';
|
||||
|
||||
# grep comes from the essential and required package grep. This seems
|
||||
# to require a path.
|
||||
$grep = '/bin/grep'; # same RH
|
||||
|
||||
# gzip comes from the essential and required package gzip.
|
||||
#my $gzip = "/bin/gzip"; # same RH
|
||||
$gzip = "gzip";
|
||||
|
||||
# mount comes from the essential and required package mount.
|
||||
#my $mount = '/bin/mount'; # same RH
|
||||
#my $umount = '/bin/umount'; # same RH
|
||||
$mount = 'mount';
|
||||
$umount = 'umount';
|
||||
|
||||
# If your file system isn't an ext2 filesystem, you may want to change
|
||||
# this. mke2fs comes from the essential and required package e2fsprogs.
|
||||
#my $mke2fs = '/sbin/mke2fs'; # same RH
|
||||
$mke2fs = 'mke2fs';
|
||||
|
||||
# cp and mv from the essential and required package fileutils
|
||||
#my $copy = '/bin/cp'; # same RH
|
||||
$copy = 'cp';
|
||||
$mv = 'mv';
|
||||
|
||||
# Your system definitely has gcc if you have ar. gcc is a standard package
|
||||
# in debian.
|
||||
$gcc = 'gcc';
|
||||
|
||||
|
||||
######
|
||||
# FTP #
|
||||
#######
|
||||
|
||||
# Major mode --ftp and --file automates the download of Contents and Packages
|
||||
# files. Even if you have apt installed, you may still want to download Packages
|
||||
# from alternative architectures, and the Contents file for your own architecture
|
||||
# or other architectures. If you want virtual and/or -ld capabilities you need
|
||||
# the Contents file. You specify a list of ftp or file sites using urls (like
|
||||
# apt). For your system's architecture specify the type deb, for other
|
||||
# architectures specify deb(hyphen)architecture (ex: deb-alpha). Regardless of
|
||||
# whether or not you specify an architecture, deb implies /dist* found under the
|
||||
# base directory specified by the ftp url, except in the case of experimental,
|
||||
# and to a degree non-us. minor mode --ftp, and --file will use the sites in this
|
||||
# configuration as well, on a fifo (first in first out) basis, so choose the
|
||||
# order of sites based on which are closest, most current, as well as fast.
|
||||
|
||||
# IMPORTANT: It is a BIG MISTAKE to use the distributions name (slink,po,etc)
|
||||
# anywhere in the sources list, or in swim's configuration file..in fact swim
|
||||
# won't work properly, not to mention the fact that someday your favorite name
|
||||
# will suddenly disappear. This is because swim thinks in terms of the real
|
||||
# distribution name (stable,unstable,frozen, experimental). The problem goes
|
||||
# like this - slink remains slink, but goes from unstable to frozen to stable.
|
||||
# At first, using the distributions alias may seem appropriate, but the
|
||||
# purpose of swim is to keep tabs on the dists, and not to ignore changes in
|
||||
# the states, this also makes managing swim's databases much easier and
|
||||
# intuitive...more about this later.
|
||||
|
||||
# Fun experiments: Swim uses the naming conventions of apt, but leaves the
|
||||
# Package files compressed in the DF directory. So you can always decompress
|
||||
# the databases and move them to /var/state/apt/lists. This ofcourse assumes
|
||||
# that the appropriate changes to the sources.list reflecting these Packages
|
||||
# (need to be the same architecture as your system) existed before you
|
||||
# update. (author needs to do this experiment :*)
|
||||
|
||||
$ftp1 = "deb ftp://localhost/pub/debian unstable main contrib non-free non-US";
|
||||
$ftp2 = "deb ftp://localhost/pub/debian unstable main contrib non-free";
|
||||
$ftp3 = "deb ftp://localhost/pub/debian project/experimental/";
|
||||
@FTP = ($ftp1,$ftp2,$ftp3);
|
||||
|
||||
# These next variables allow some characteristics of the ftp client
|
||||
# to be altered. See Net::FTP for ways of altering some of these
|
||||
# variables through the environment.
|
||||
|
||||
$firewall = 0;
|
||||
$port = 0;
|
||||
$timeout = 120;
|
||||
$debug = 0;
|
||||
$passive = 0;
|
||||
|
||||
|
||||
########################################
|
||||
# STUFF THAT NEVER NEEDS TO BE CHANGED #
|
||||
########################################
|
||||
|
||||
# You will never need to change this unless for some weird reason all the
|
||||
# files under dpkg are somewhere else (including /info*) , see --dbpath as
|
||||
# an alternative if you decide to access or make the databases somewhere
|
||||
# else.
|
||||
$base = '/var/lib/dpkg';
|
||||
|
||||
# --dbpath takes care of this so don't touch.
|
||||
$parent = '/';
|
||||
$library = '/var/lib/dpkg';
|
||||
|
||||
|
||||
#############################
|
||||
# LOAD CUSTOM CONFIGURATION #
|
||||
#############################
|
||||
|
||||
|
||||
# Here we load in the customized configuration which override the defaults
|
||||
# Might as well use do, let the world learn Perl ... compare this to apt's
|
||||
# configuation file with scopes. Swim's sources.list file (/etc/swim/swimz.list),
|
||||
# will be grabbed at SWIM::Apt and SWIM::Qftp if it exists.
|
||||
|
||||
do "$swim_conf/swimrc";
|
||||
do "$ENV{HOME}/.swim/swimrc";
|
||||
if ((defined $dpkg && !defined $dpkg_deb) ||
|
||||
(!defined $dpkg && defined $dpkg_deb)) {
|
||||
print "swim: need to give both \$dpkg and \$dpkg_deb a value if you want dpkg\n";
|
||||
exit;
|
||||
}
|
||||
if (defined $package_tool) {
|
||||
if ($package_tool =~ /ar/) {
|
||||
$ar = $ar;
|
||||
}
|
||||
else {
|
||||
$dpkg = 'dpkg';
|
||||
$dpkg_deb = 'dpkg-deb';
|
||||
undef $ar;
|
||||
}
|
||||
}
|
||||
if (defined $apt) {
|
||||
$apt_get = 'apt-get';
|
||||
$apt_cache = 'apt-cache';
|
||||
}
|
||||
|
||||
|
||||
###############################
|
||||
# MAKE ANY NEEDED DIRECTORIES #
|
||||
###############################
|
||||
|
||||
# make sure all the appropriate directories are made
|
||||
if (!-d $default_directory) {
|
||||
if (-e $default_directory) {
|
||||
print "swim: can not create default directory because a file exists\n";
|
||||
exit;
|
||||
}
|
||||
my @DRD = split(m,/,,$default_directory);
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
-d $placement or mkdir("$placement",0755);
|
||||
}
|
||||
}
|
||||
|
||||
if (!-d "$default_directory$default_root_directory") {
|
||||
my @DRD = split(m,/,,$default_root_directory);
|
||||
print "swim: debian must be the final directory before dists\n"
|
||||
if $DRD[$#DRD] ne "debian";
|
||||
exit if $DRD[$#DRD] ne "debian";
|
||||
my $placement = "/";
|
||||
for (1 .. $#DRD) {
|
||||
$_ == 1 ? ($placement = "/$DRD[$_]")
|
||||
: ($placement = $placement . "/" . $DRD[$_]);
|
||||
unless (-d "$default_directory$placement") {
|
||||
mkdir("$default_directory$placement",0755)
|
||||
or die "swim: could not create root default directory\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Makefile will make sure these directories exist, unless for some strange
|
||||
# reason you have to change them.
|
||||
|
||||
if (!-d $library) {
|
||||
mkdir($library,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $base) {
|
||||
mkdir($base,0755) or die "Couldn't create default directory\n";
|
||||
}
|
||||
|
||||
if (!-d $swim_conf) {
|
||||
mkdir($swim_conf,0666) or die "Couldn't create configuration file directory,
|
||||
please make the directories which are needed.\n";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
swimrc - swim configuration file
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
B<swimrc> is the configuartion file for swim allowing many default values
|
||||
to be set so that they do not have to be mentioned on the command line.
|
||||
Swimrc interacts directly with Perl allowing a wide variety of variables
|
||||
found in B<SWIW::Conf> to be altered.
|
||||
|
||||
=cut
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
Values for variable can be altered for B<swim> by assigning different
|
||||
values enclosed in quotes or quoted whitespace (qw()), and ended with a
|
||||
semi-colon.
|
||||
|
||||
$variable = "value";
|
||||
$variable = "qw(value1 value2 ..)";
|
||||
|
||||
=head1 VARIABLES
|
||||
|
||||
This is a list of variables with explanations. The default values for
|
||||
B<swim> are shown.
|
||||
|
||||
=head2 OUTPUT VARIABLE
|
||||
|
||||
$my_number can be changed to how many lines you would like "swim -qf <>"
|
||||
to print out, before the program asks for C<-t> or C<--total>. Exception:
|
||||
If C<-i> is used in the query and there is more than one package then the
|
||||
total will be presented.
|
||||
|
||||
Hint: C<-t> can be used with all the various C<--scripts> family members
|
||||
to view the title of the script file regardless of this variable setting,
|
||||
and if C<-t> has to be used, the titles will be displayed, which makes
|
||||
sense.
|
||||
|
||||
B<$my_number = 23;>
|
||||
|
||||
=head2 HISTORY
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when C<--stdin> is used.
|
||||
|
||||
B<$HISTORY = 10;>
|
||||
|
||||
=head2 AR or DPKG?
|
||||
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign "dpkg" to $package_tool, otherwise assign "ar" to $package_tool.
|
||||
|
||||
B<$package_tool = "/usr/bin/ar";>
|
||||
|
||||
=head2 APT
|
||||
|
||||
B<Swim> does not assign a value for apt. To use C<--apt> and C<-xyz>
|
||||
assign $apt the value "yes".
|
||||
|
||||
Example: B<$apt = "yes";>
|
||||
|
||||
=head2 PAGER
|
||||
|
||||
less is a nice pager, unless you like more! Pager is used for C<--help>
|
||||
and B<swim> called without any options. There is an option C<--nopager> or
|
||||
C<-n>. more comes from the required package util-linux, whereas less
|
||||
comes from a standard package called less. Values: "less", "more", or
|
||||
"most" or...
|
||||
|
||||
B<$ENV{PAGER} = "less";>
|
||||
|
||||
=head2 NOT-INSTALLED VARIABLES
|
||||
|
||||
Assign values for $architecture and/or $distribution to avoid having to
|
||||
use C<--arch> and C<--dists> everytime the not-installed databases are
|
||||
accessed with C<-n> or made or altered.
|
||||
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is I<alpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc>. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
|
||||
B<$architecture = "i386";>
|
||||
|
||||
The distribution can be either I<stable, unstable, frozen, or experimental
|
||||
(rare)>. These represent the state of development that the packages are
|
||||
under. The unstable distribution can have lot's of changes within a very
|
||||
short time period, and frozen may or may not be available.
|
||||
|
||||
B<$distribution = "unstable";>
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at one time separate distributions, but this has since changed.
|
||||
|
||||
You can determine which of the sections I<main, non-free, contrib or
|
||||
non-US> to pull out of the Contents file if you don't want to use
|
||||
C<--main>, C<--contrib>, C<--non-free>, and C<--non-us> to selectively
|
||||
pick the sections.
|
||||
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages file(s) being targetted.
|
||||
|
||||
Rule: Use "non-US" not "non-us".
|
||||
|
||||
B<@user_defined_section = qw(main contrib non-free non-US);>
|
||||
|
||||
=head2 DF LOCATION
|
||||
|
||||
A little philosophy: B<swim> was developed for maximum versatility, so
|
||||
whether you are just interested in researching, and keeping tabs on the
|
||||
newest packages, or maintaining a Debian virtual distribution on a
|
||||
non-Debian distribution, or you are a using B<swim> for distribution
|
||||
development, B<swim> provides a way.
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release
|
||||
file are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim will still do the renaming and keeping track of the mtime, but you
|
||||
will have to remember where you put the files.
|
||||
|
||||
B<$default_directory = '/root/.swim';>
|
||||
|
||||
The default root directory (DRD) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be a real ftp site on your computer, or put wherever else you are
|
||||
allowed to have directories. The DRD is always placed below the value
|
||||
assigned to $default_directory. According to the previous assignment to
|
||||
$default_directory, if the DRD is "/pub/a/debian" then the full path
|
||||
would be "/root/.swim/pub/a/debian".
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
B<$default_root_directory = '/pub/debian';>
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions B<swim> will assign for directories it creates
|
||||
below the DRD.
|
||||
|
||||
B<$permission = '0755';>
|
||||
|
||||
=head2 TEMPORARY DIRECTORY
|
||||
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
$tmp a RAM disk. See package loadlin for initrd documentation and an
|
||||
explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
|
||||
B<$tmp = "/tmp";>
|
||||
|
||||
=head2 FTP
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by providing
|
||||
arguments to these variables. All variables but $timeout are set to untrue
|
||||
by default.
|
||||
|
||||
$firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)
|
||||
|
||||
=head1 OTHER VARIABLES
|
||||
|
||||
see SWIM::Conf
|
||||
|
||||
=head1 FILES
|
||||
|
||||
/etc/swim/swimrc
|
||||
~/.swim/swimrc
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
swim(8), Net::FTP(3pm)
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jonathan D. Rosenbaum <mttrader@access.mountain.net>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
|
||||
Copyright (c) 1999 Jonathan Rosenbaum. All rights reserved. This program
|
||||
is free software; you can redistribute it and/or modify it under the GPL.
|
||||
|
||||
=cut
|
947
lib/DB.pm
Normal file
947
lib/DB.pm
Normal file
@ -0,0 +1,947 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::DB;
|
||||
use strict;
|
||||
use SWIM::DB_Library qw(:Db);
|
||||
use SWIM::Format;
|
||||
use SWIM::Conf qw(:Path);
|
||||
use SWIM::Global;
|
||||
use vars qw(@ISA @EXPORT_OK);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(db rebuildflatdb);
|
||||
|
||||
|
||||
# --db --rebuildflatdb db() rebuildflatdb()
|
||||
|
||||
# The goal here is to save some time by just updating the database rather
|
||||
# than rebuilding it. Generally, though, swim -i <package> would be the
|
||||
# favorable way of doing this, and ultimately may become the primary way of
|
||||
# setting up the databases after the required packages for this program are
|
||||
# set-up. This is because --db has to check the status file, whereas -i
|
||||
# uses statusindex.db, and grabs package information right from the
|
||||
# package, there are exceptions to this, certain things like the status
|
||||
# will have to be found from the status file or some other method.
|
||||
sub db {
|
||||
|
||||
# Well, we better check for any changes in the status file, before we
|
||||
# attempt anything. This is made easy by the version reference hash created
|
||||
# when --initdb or --rebuilddb is run, and then comparing this to the new
|
||||
# results when --db is run. Only then will we process, add, and remove
|
||||
# packages when we know what is gone, and what is new (whether its a
|
||||
# new package name, or a package with a new version or older version).
|
||||
# The statusindex.deb could be used for version checking, instead the
|
||||
# important status field is compared, so if we have situations like
|
||||
# "deinstall ok config-file" this will be recognized as a CHANGE. The
|
||||
# update takes place so that the status field remain proper.
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
# description stuff
|
||||
my (@description, @ldescription);
|
||||
# my @dpackage; # not needed here
|
||||
|
||||
# does status exist
|
||||
my $the_status;
|
||||
|
||||
# Keep track of changes to the status file
|
||||
my $rootsky = "/.";
|
||||
my @package;
|
||||
my @name;
|
||||
my $status;
|
||||
my @changed_packages;
|
||||
my @gone;
|
||||
my (@GONE, @CHANGED, @NEW);
|
||||
my @before;
|
||||
my %compare;
|
||||
|
||||
# The mys for NEW
|
||||
my $count = 0;
|
||||
# a special one to deal with package[1] version change.
|
||||
my $packv;
|
||||
my (@essential,$priority,$section,$installed_size,$maintainer,$source);
|
||||
my (%group, $group);
|
||||
|
||||
# Keeps a package->version database
|
||||
# to save time over using status
|
||||
my @status;
|
||||
my ($replaces, $provides, $depends, $pre_depends, $recommends, $suggests,
|
||||
$conflicts);
|
||||
my (@conffiles,$line_before,@conf,@complete,@form,@formly);
|
||||
my $format_deb = "$tmp/format.deb";
|
||||
|
||||
dbi(\%commands); ib(\%commands); sb(\%commands);
|
||||
# Check differences now.
|
||||
print "checking for new, changed, and removed packages\n";
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
open(DIFFERENCE,"$parent$library/status");
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
open(DIFFERENCE,"$parent$base/status");
|
||||
}
|
||||
while (<DIFFERENCE>) {
|
||||
# Package name
|
||||
if (/^Package:/i) {
|
||||
@package = split(/: /,$_);
|
||||
chomp $package[1];
|
||||
}
|
||||
elsif (/^Status:/) {
|
||||
chomp;
|
||||
$status = substr($_,8);
|
||||
# a test
|
||||
#if ($status eq "purge ok not-installed") {
|
||||
# if (defined $db{$package[1]}) {
|
||||
# print "$db{$package[1]}\n";
|
||||
# }
|
||||
#}
|
||||
}
|
||||
# hold ok not-installed - may want to change this just to
|
||||
# non-installed.
|
||||
###########
|
||||
# VERSION #
|
||||
###########
|
||||
elsif (/^Version:/ && $status !~ /not-installed/) {
|
||||
my $version = $_; chomp $version;
|
||||
my $ver = m,Version:\s(.*),; my $statusname;
|
||||
if (defined $sb{$package[1]}) {
|
||||
$statusname = (split(/\s/,$sb{$package[1]}))[3];
|
||||
$statusname =~ s/:/ /g;
|
||||
}
|
||||
########
|
||||
# GONE #
|
||||
########
|
||||
if (defined $db{$package[1]}) {
|
||||
push(@gone,"$package[1]_$1");
|
||||
if ("$package[1]_$1" ne $db{$package[1]}) {
|
||||
$compare{$package[1]} = "$package[1]_$1";
|
||||
}
|
||||
# Version remained the same, but status changed
|
||||
# even though $statusname may be undefined..this
|
||||
# routine is only done when it does exist.
|
||||
######
|
||||
# CR #
|
||||
######
|
||||
elsif ("$package[1]_$1" eq $db{$package[1]} &&
|
||||
$statusname ne $status) {
|
||||
push(@changed_packages, "$package[1]");
|
||||
$compare{$package[1]} = "$package[1]_$1";
|
||||
}
|
||||
}
|
||||
#######
|
||||
# NEW #
|
||||
#######
|
||||
elsif (!defined $db{$package[1]}) {
|
||||
push(@NEW,$package[1]);
|
||||
$compare{$package[1]} = "$package[1]_$1";
|
||||
push(@gone,"$package[1]_$1");
|
||||
}
|
||||
}
|
||||
}
|
||||
close(DIFFERENCE);
|
||||
|
||||
# lets find what existed before, ofcourse mistakes in /. better be
|
||||
# taken care of beforehand, because this ignores those here. Some time
|
||||
# may have been saved by using a separate database rather than /., but,
|
||||
# this keeps things clean.
|
||||
if ($ib{$rootsky}){
|
||||
@before = split(/\s/,$ib{$rootsky});
|
||||
my %tracker;
|
||||
grep($tracker{$_}++,@gone);
|
||||
my @goners = grep(!$tracker{$_},@before);
|
||||
foreach (@goners) {
|
||||
m,(^.*)_.*$,;
|
||||
if (!defined $compare{$1}) {
|
||||
push(@GONE,$1);
|
||||
}
|
||||
else {
|
||||
# these will be process like @GONE for original, and @NEW for
|
||||
# new
|
||||
push(@CHANGED,$1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "swim: missing important database\n"; exit;
|
||||
}
|
||||
|
||||
foreach (@GONE) {
|
||||
print "GONE $_\n";
|
||||
}
|
||||
foreach (@CHANGED) {
|
||||
print "CHANGED $_\n";
|
||||
}
|
||||
foreach (@changed_packages) {
|
||||
push(@CHANGED,$_);
|
||||
print "CHANGED STATUS $_\n";
|
||||
}
|
||||
foreach (@NEW) {
|
||||
print "NEW $_\n";
|
||||
}
|
||||
|
||||
my $new=$#NEW + 1; my $cr=$#changed_packages + 1;
|
||||
my $ch=($#CHANGED + 1) - $cr; my $gon= $#GONE + 1;
|
||||
if ($commands->{"check"}) {
|
||||
print "\n TOTAL\n -----\n";
|
||||
print "NEW $new\n"; print "GONE $gon\n";
|
||||
print "CHANGED $ch\n"; print "CHANGED STATUS $cr\n"; exit;
|
||||
}
|
||||
print "\n TOTAL\n -----\n";
|
||||
print "NEW $new\n"; print "GONE $gon\n";
|
||||
print "CHANGED $ch\n"; print "CHANGED STATUS $cr\n";
|
||||
|
||||
|
||||
@GONE = (@GONE,@CHANGED);
|
||||
@NEW = (@NEW,@CHANGED);
|
||||
|
||||
undef @before; # can use below.
|
||||
untie %db;
|
||||
undef %db;
|
||||
untie %ib;
|
||||
undef %ib;
|
||||
|
||||
# Going to be adding some stuff to nsearchindex.deb and ndirindex.deb
|
||||
# so better remove any compressed versions if they exist
|
||||
if (defined @GONE || defined @NEW) {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/searchindex.deb") {
|
||||
unlink("$parent$library/searchindex.deb.gz");
|
||||
unlink("$parent$library/dirindex.deb.gz");
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/searchindex.deb") {
|
||||
unlink("$parent$base/searchindex.deb.gz");
|
||||
unlink("$parent$base/dirindex.deb.gz");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Time for some fun stuff
|
||||
# There are three states: GONE - all information about this package
|
||||
# needs to be removed from the databases. NEW - all information about
|
||||
# this package needs to be put in the databases. CHANGED - a
|
||||
# combination of the two previous, information could be cross
|
||||
# referenced and checked for changes, but it's probably no saving of
|
||||
# time, so first remove information from the same package of a
|
||||
# different version, then add the information about the package of the
|
||||
# new version (older or newer)
|
||||
|
||||
#############
|
||||
# #
|
||||
# GONE #
|
||||
# #
|
||||
#############
|
||||
# GONE. (reverse applies to NEW)
|
||||
# For package.deb - Delete description
|
||||
# (packagename_version), packagenameREP, packagenamePRO,
|
||||
# packagenameDEP, packagenamePRE, packagenameREC,
|
||||
# packagenameSUG, packagenameCON, packagenameCONF. delete package ->
|
||||
# version.
|
||||
#
|
||||
# for fileindex.deb -
|
||||
# Find all files and directories associated with the package. Delete
|
||||
# these files (keys). Find all directories where the file
|
||||
# exists..delete package name from value, delete whole key if it is the
|
||||
# only package name.
|
||||
#
|
||||
# for groupindex - delete package name (value) from Section
|
||||
# it belonged to..humm, find section package belongs to in
|
||||
# statusuindex.deb, and delete whole Section key if only one.
|
||||
#
|
||||
# for statusindex.deb -
|
||||
# delete package -> version group.
|
||||
#
|
||||
# for flat files dirindex and searchindex -
|
||||
# the removal of files and/or directories can be put on hold, and
|
||||
# done with an option at a later time, since fileindex.deb remembers
|
||||
# current state, at a later time the old state of the flat files can be
|
||||
# compared to the new state of fileindex, and these files can be
|
||||
# rewritten. This is all o.k. because these extra files or directories
|
||||
# will return undef in search() if the packages don't exist.
|
||||
|
||||
ping(\%commands); # uses $ping for package.deb
|
||||
zing(\%commands); # uses $zing for fileindex.deb
|
||||
ging(\%commands); # uses $ging for groupindex.deb
|
||||
sing(\%commands); # uses $sing for statusindex.deb
|
||||
|
||||
$| = 1; my $x = 1;
|
||||
foreach (@GONE) {
|
||||
print "G|C|CS $x $_.list\r";
|
||||
$x++;
|
||||
#first delete keys from package.deb
|
||||
# If I kept this the name_version would be remembered.
|
||||
$ping->del($_);
|
||||
my $orig_argument = $_;
|
||||
my $packname_version = (split(/\s/,$sb{$orig_argument}))[0];
|
||||
$packname_version =~ s,\+,\\\+,g;
|
||||
$argument = "$_";
|
||||
ver(\%commands);
|
||||
$ping->del($argument);
|
||||
my $conf = $argument . "CONF";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "REP";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "PRO";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "DEP";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "PRE";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "REC";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "SUG";
|
||||
$ping->del($conf);
|
||||
$conf = $argument . "CON";
|
||||
$ping->del($conf);
|
||||
untie $ping;
|
||||
|
||||
# next let's go into fileindex.deb and hunt down all directories and
|
||||
# files associated with this package. It would be kind of nice to use
|
||||
# package_name.list, but it's probably more realistic not to depend on
|
||||
# the existence of these file..unless a backup is made. Now if -i is used
|
||||
# this would be a simple matter, but in this case things are different.
|
||||
# A database to accomplish this wasn't realistic, so the backup
|
||||
# files for *.list are in ./info/backup/*.list.bk. We will also have to
|
||||
# deal with those rare cases that forget /. (smail 2.0v). We should remove
|
||||
# this file as well as the packagename-conf.md5sums file below.
|
||||
my $file = "$parent$base/info/backup/$_.list.bk";
|
||||
my $md5sum_file = "$parent$base/info/$_-conf.md5sums";
|
||||
open(LIST,"$file");
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
if (defined $ib{$_}) {
|
||||
my $status = ($ib{$_} =~ s,$packname_version ,,);
|
||||
if ($status eq "") {
|
||||
$status = ($ib{$_} =~ s, $packname_version,,);
|
||||
if ($status eq "") {
|
||||
$ib{$_} =~ s,$packname_version,,;
|
||||
}
|
||||
}
|
||||
if ($ib{$_} eq "") {
|
||||
$zing->del($_);
|
||||
}
|
||||
} # if defined
|
||||
}
|
||||
close(LIST);
|
||||
unlink("$file");
|
||||
|
||||
#######################
|
||||
# deinstall situation #
|
||||
#######################
|
||||
my $yit = (split(/\s/,$sb{$orig_argument}))[3];
|
||||
if ($yit eq "deinstall:ok:config-files" ||
|
||||
$yit eq "purge:ok:config-files") {
|
||||
if (defined $ib{"/."}) {
|
||||
my $status = ($ib{"/."} =~ s,$packname_version ,,);
|
||||
if ($status eq "") {
|
||||
$status = ($ib{"/."} =~ s, $packname_version,,);
|
||||
if ($status eq "") {
|
||||
$ib{"/."} =~ s,$packname_version,,;
|
||||
}
|
||||
}
|
||||
if ($ib{"/."} eq "") {
|
||||
$zing->del($_);
|
||||
}
|
||||
} # if defined
|
||||
} # deinstall situation
|
||||
|
||||
if (-e $md5sum_file) {
|
||||
unlink("$md5sum_file");
|
||||
}
|
||||
|
||||
# remove from the group, and if only one remove the group.
|
||||
# Let's first find out which group this monster belongs to.
|
||||
if (defined $sb{$orig_argument}) {
|
||||
(my $oa = $orig_argument) =~ s,\+,\\\+,g;
|
||||
my($section) = (split(/\s/,$sb{$orig_argument}))[1];
|
||||
if (defined $gb{$section}) {
|
||||
my $status = ($gb{$section} =~ s,$oa ,,);
|
||||
if ($status eq "") {
|
||||
$status = ($gb{$section} =~ s, $oa,,);
|
||||
if ($status eq "") {
|
||||
$gb{$section} =~ s,$oa,,;
|
||||
}
|
||||
}
|
||||
if ($gb{$section} eq "") {
|
||||
$ging->del($section);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Now ditch the package->version group in statusindex.deb
|
||||
$sing->del($orig_argument);
|
||||
untie $sing;
|
||||
|
||||
} # end foreach OLD
|
||||
|
||||
print "\n" if $#GONE != -1 && $#NEW == -1;
|
||||
|
||||
#############
|
||||
# #
|
||||
# NEW #
|
||||
# #
|
||||
#############
|
||||
if (-e "$parent$base/status" && -e "$parent$base/info") {
|
||||
$the_status = "$parent$base/status";
|
||||
}
|
||||
else {
|
||||
print "swim: crucial file(s)/directories are missing in $parent\n";
|
||||
exit;
|
||||
}
|
||||
my %exacts;
|
||||
my $goon;
|
||||
print "\n" if $#NEW != -1; $x = 1;
|
||||
foreach (@NEW) {
|
||||
$exacts{$_} = "yes";
|
||||
}
|
||||
# first let's find the fields to put into packages.deb
|
||||
# We'll have to go through the status file again, something we
|
||||
# wouldn't have had to do with swim -i. As it turns out, a good
|
||||
# percentage of the information can be processed into the database
|
||||
# while going through status.
|
||||
open(PRETTY, ">$format_deb");
|
||||
open(AVAIL, "$the_status");
|
||||
while (<AVAIL>) {
|
||||
# here's the difference with database(), we just find the packages
|
||||
# which belong to the hash %exacts
|
||||
# Package name
|
||||
if (/^Package:|^PACKAGE:/) {
|
||||
@package = split(/: /,$_);
|
||||
chomp $package[1];
|
||||
if (defined $exacts{$package[1]}) {
|
||||
print "N|C|CS $x\r"; $x++;
|
||||
$goon = "yes";
|
||||
}
|
||||
else {
|
||||
$goon = "no";
|
||||
undef @package;
|
||||
next;
|
||||
}
|
||||
}
|
||||
elsif ($goon eq "no") {
|
||||
next;
|
||||
}
|
||||
elsif (/^Status:/) {
|
||||
$status = $_;
|
||||
}
|
||||
elsif (/^Essential/) {
|
||||
@essential = split(/: /,$_);
|
||||
}
|
||||
# missing priority and section will be dealt with below
|
||||
elsif (/^Priority:/) {
|
||||
$priority = $_;
|
||||
}
|
||||
elsif (/^Section:/) {
|
||||
$section = $_;
|
||||
# make the hash for the groupindex.deb
|
||||
$group = substr($section,9);
|
||||
chomp $group;
|
||||
# we will put not-installed in their own group for reference
|
||||
if ($status !~ /not-installed/) {
|
||||
if (!defined $gb{$group}) {
|
||||
$ging->put($group,$package[1]);
|
||||
}
|
||||
else {
|
||||
my $change_group = "$gb{$group} $package[1]";
|
||||
$ging->del($group);
|
||||
$ging->put($group,"$change_group");
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif (/^Installed-Size:/) {
|
||||
$installed_size = $_;
|
||||
}
|
||||
elsif (/^Maintainer:/) {
|
||||
$maintainer = $_;
|
||||
}
|
||||
elsif (/^Source:/) {
|
||||
$source = $_;
|
||||
}
|
||||
# hold ok not-installed - may want to change this just to
|
||||
# non-installed.
|
||||
elsif (/^Version:/ && $status !~ /not-installed/) {
|
||||
my $version = $_;
|
||||
chomp $version;
|
||||
###########
|
||||
# SECTION #
|
||||
###########
|
||||
if (defined $section) {
|
||||
chomp $section;
|
||||
}
|
||||
else {
|
||||
nsb(\%commands);
|
||||
if (defined $nsb{$package[1]}) {
|
||||
my ($nvname,$ngname,$npriorname) =
|
||||
split(/\s/,"$nsb{$package[1]}",3);
|
||||
$group = $ngname;
|
||||
}
|
||||
else {
|
||||
$group = "unavailable";
|
||||
}
|
||||
}
|
||||
$col1 = "Package: $package[1]";
|
||||
$col2 = $status;
|
||||
write PRETTY;
|
||||
$col1 = $version;
|
||||
my $ver = m,Version:\s(.*),;
|
||||
# This creates a name -> version index in package.deb,
|
||||
# and the statusindex.deb database which will serve to
|
||||
# determine if the status has changed when --db or -i is
|
||||
# run.
|
||||
$packv = "$package[1]_$1";
|
||||
$ping->put($package[1],$packv);
|
||||
my ($priory,$statusy);
|
||||
############
|
||||
# PRIORITY #
|
||||
############
|
||||
if (defined $priority) {
|
||||
$priory = substr($priority,10);
|
||||
}
|
||||
else {
|
||||
nsb(\%commands);
|
||||
if (defined $nsb{$package[1]}) {
|
||||
my ($nvname,$ngname,$npriorname) =
|
||||
split(/\s/,"$nsb{$package[1]}",3);
|
||||
$priory = $npriorname;
|
||||
}
|
||||
else {
|
||||
$priory = "unavailable";
|
||||
}
|
||||
}
|
||||
chomp $priory;
|
||||
$statusy = substr($status,8);
|
||||
chomp $statusy;
|
||||
$statusy =~ s/\s/:/g;
|
||||
my $thimk = "$packv $group $priory $statusy";
|
||||
$sing->put($package[1],$thimk);
|
||||
$package[1] = "$packv";
|
||||
if(defined($essential[1])) {
|
||||
$col2 = "Essential: $essential[1]";
|
||||
@essential = ();
|
||||
}
|
||||
else {
|
||||
$col2 = "Essential: no\n";
|
||||
}
|
||||
write PRETTY;
|
||||
######################
|
||||
# SECTION & PRIORITY #
|
||||
######################
|
||||
if (defined $section) {
|
||||
$col1 = $section;
|
||||
}
|
||||
else {
|
||||
nsb(\%commands);
|
||||
$package[1] =~ m,(.*)_.*,;
|
||||
my $packthing = $1;
|
||||
if (defined $nsb{$packthing}) {
|
||||
my ($nvname,$ngname,$npriorname) =
|
||||
split(/\s/,"$nsb{$packthing}",3);
|
||||
$col1 = "Section: $ngname";
|
||||
# we can put it in now, no deletion needed
|
||||
if (!defined $gb{$group}) {
|
||||
$ging->put($group,$packthing);
|
||||
}
|
||||
else {
|
||||
my $change_group = "$gb{$group} $packthing";
|
||||
$ging->del($group);
|
||||
$ging->put($group,"$change_group");
|
||||
}
|
||||
}
|
||||
else {
|
||||
$col1 = "Section: unavailable";
|
||||
}
|
||||
}
|
||||
if (defined $priority) {
|
||||
$col2 = $priority;
|
||||
}
|
||||
else {
|
||||
nsb(\%commands);
|
||||
$package[1] =~ m,(.*)_.*,;
|
||||
my $packthing = $1;
|
||||
if (defined $nsb{$packthing}) {
|
||||
my ($nvname,$ngname,$npriorname) =
|
||||
split(/\s/,"$nsb{$packthing}",3);
|
||||
$col2 = "Section: $npriorname";
|
||||
}
|
||||
else {
|
||||
$col2 = "Priority: unavailable\n";
|
||||
}
|
||||
}
|
||||
write PRETTY;
|
||||
#my $cool = $installed_size . $maintainer;
|
||||
#print PRETTY $cool;
|
||||
$col1 = $installed_size;
|
||||
if (defined $source) {
|
||||
$col2 = $source;
|
||||
}
|
||||
else {
|
||||
$col2 = "";
|
||||
}
|
||||
write PRETTY;
|
||||
undef $source;
|
||||
print PRETTY $maintainer
|
||||
}
|
||||
|
||||
# This stuff will be available with seperate query flags or All
|
||||
elsif (/^Replaces:/) {
|
||||
$replaces = $_;
|
||||
if (defined($replaces)) {
|
||||
$ping->put("$package[1]REP",$replaces);
|
||||
}
|
||||
}
|
||||
elsif (/^Provides:/) {
|
||||
$provides = $_;
|
||||
if (defined($provides)) {
|
||||
$ping->put("$package[1]PRO",$provides);
|
||||
}
|
||||
}
|
||||
elsif (/^Depends:/) {
|
||||
$depends = $_;
|
||||
if (defined($depends)) {
|
||||
$ping->put("$package[1]DEP",$depends);
|
||||
}
|
||||
}
|
||||
elsif (/^Pre-Depends:/) {
|
||||
$pre_depends = $_;
|
||||
if (defined($pre_depends)) {
|
||||
$ping->put("$package[1]PRE",$pre_depends);
|
||||
}
|
||||
}
|
||||
elsif (/^Recommends:/) {
|
||||
$recommends = $_;
|
||||
if (defined($recommends)) {
|
||||
$ping->put("$package[1]REC",$recommends);
|
||||
}
|
||||
}
|
||||
elsif (/^Suggests:/) {
|
||||
$suggests = $_;
|
||||
if (defined($suggests)) {
|
||||
$ping->put("$package[1]SUG",$suggests);
|
||||
}
|
||||
}
|
||||
elsif (/^Conflicts:/) {
|
||||
$conflicts = $_;
|
||||
if (defined($conflicts)) {
|
||||
$ping->put("$package[1]CON",$conflicts);
|
||||
}
|
||||
}
|
||||
# Gather the Configuration Files, Description comes after.
|
||||
# Available with a single flag.
|
||||
elsif (/^Conffiles:/) {
|
||||
my $line = <AVAIL>;
|
||||
while ($line !~ /^Description:/) {
|
||||
push(@conffiles,$line);
|
||||
$line = <AVAIL>;
|
||||
if ($line =~ /^Description/) {
|
||||
$line_before = $line;
|
||||
# put conffiles into one variable
|
||||
if (defined $package[1]) {
|
||||
}
|
||||
my ($c, $cool);
|
||||
if ($#conffiles != 0) {
|
||||
for ($c = $#conffiles; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $conffiles[$c-1] .= $conffiles[$c];
|
||||
}
|
||||
} #end for
|
||||
}
|
||||
else {
|
||||
$cool = $conffiles[0];
|
||||
}
|
||||
@conffiles = ();
|
||||
$ping->put("$package[1]CONF",$cool);
|
||||
} #if ($line =~ /^Desc
|
||||
} # while ($line ! /^Desc
|
||||
} # elsif (/^Conffiles
|
||||
untie %nsb;
|
||||
|
||||
# Only interested in available packages..so this is fine.
|
||||
# To be combined with first fields.
|
||||
if (/Description:|^\s\w*|^\s\.\w*/ ||
|
||||
defined($line_before) =~ /^Description/){
|
||||
my $many_lines;
|
||||
if (defined($line_before)) {
|
||||
push(@ldescription, $line_before);
|
||||
push(@ldescription, $_);
|
||||
$line_before = ();
|
||||
}
|
||||
else {
|
||||
$many_lines = $_;
|
||||
}
|
||||
if ($_ !~ /^\n$/) {
|
||||
$count++;
|
||||
if ($count == 1) {
|
||||
if (defined $package[1]) {
|
||||
#chomp $package[1];
|
||||
#push(@dpackage,$package[1]);
|
||||
push(@description,$package[1]);
|
||||
}
|
||||
}
|
||||
if (defined($many_lines)) {
|
||||
push(@ldescription,$many_lines);
|
||||
}
|
||||
} # end if ($_ !~ /^\n$/
|
||||
else {
|
||||
$count = 0;
|
||||
# let's put each description into one scalar
|
||||
my ($c, $cool);
|
||||
if ($#ldescription != 0) {
|
||||
for ($c = $#ldescription; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $ldescription[$c-1] .= $ldescription[$c];
|
||||
}
|
||||
} #end for
|
||||
} # end if ($#ld
|
||||
else {
|
||||
$cool = $ldescription[0];
|
||||
}
|
||||
if (defined $cool) {
|
||||
push(@description,$cool);
|
||||
}
|
||||
@ldescription = ();
|
||||
} # end else
|
||||
$line_before = ();
|
||||
}
|
||||
untie $ping;
|
||||
untie $ging;
|
||||
untie $sing;
|
||||
} # end while (<AVAIL>)
|
||||
close(PRETTY);
|
||||
|
||||
|
||||
# Let's put together the description with the rest of its fields.
|
||||
open(FIELDS,"$format_deb");
|
||||
while (<FIELDS>) {
|
||||
push(@form,$_);
|
||||
}
|
||||
close(FIELDS);
|
||||
|
||||
foreach (@form) {
|
||||
push(@formly,$_);
|
||||
my ($cool);
|
||||
$count++;
|
||||
if ($count == 5) {
|
||||
my ($c, $cool);
|
||||
if ($#formly != 0) {
|
||||
for ($c = $#formly; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $formly[$c-1] .= $formly[$c];
|
||||
}
|
||||
} #end for
|
||||
} # end if ($#ld
|
||||
else {
|
||||
$cool = $formly[0];
|
||||
}
|
||||
push(@complete,$cool);
|
||||
@formly = ();
|
||||
$count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
my $name_version;
|
||||
foreach (@description) {
|
||||
if ($count == 1) {
|
||||
# -i
|
||||
my $lingo = shift(@complete);
|
||||
$lingo = $lingo . $_;
|
||||
#push(@Tdescription, $lingo);
|
||||
$ping->put($name_version,$lingo);
|
||||
$lingo = ();
|
||||
$count = 1;
|
||||
}
|
||||
else {
|
||||
# packagename_version
|
||||
#push(@Tdescription, $_);
|
||||
$name_version = $_;
|
||||
$count = 0;
|
||||
}
|
||||
$count++;
|
||||
untie $ping;
|
||||
}
|
||||
undef $ping;
|
||||
|
||||
unlink($format_deb);
|
||||
|
||||
# Now time to do some file/dir stuff. A backup of *list needs to be
|
||||
# made, might as well use this. There is a possibility this can be
|
||||
# used instead of fastswim for initial fileindex.deb.
|
||||
my $package_name;
|
||||
if (!-d "$parent$base/info/backup") {
|
||||
mkdir("$parent$base/info/backup",0666);
|
||||
}
|
||||
print "\n" if $#NEW != -1; $x = 1;
|
||||
|
||||
foreach $package_name (@NEW) {
|
||||
open(FILENAME,"$parent$base/info/$package_name.list");
|
||||
open(CP,">$parent$base/info/backup/$package_name.list.bk");
|
||||
while (<FILENAME>) {
|
||||
print CP $_;
|
||||
}
|
||||
close(FILENAME);
|
||||
close(CP);
|
||||
|
||||
my $file = "$parent$base/info/backup/$package_name.list.bk";
|
||||
print "#$x"; print " N|C $package_name.list \r";
|
||||
$x++;
|
||||
open(LIST,"$file");
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
|
||||
# Better add the new stuff to the flat files first
|
||||
if (!defined $ib{$_}) {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
open(SEARCHINDEX,">>$parent$library/searchindex.deb");
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
open(SEARCHINDEX,">>$parent$base/searchindex.deb");
|
||||
}
|
||||
if (!-d) {
|
||||
print SEARCHINDEX "$_\n";
|
||||
}
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
open(DIRINDEX,">>$parent$library/dirindex.deb");
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
open(DIRINDEX,">>$parent$base/dirindex.deb");
|
||||
}
|
||||
if (-d) {
|
||||
print DIRINDEX "$_\n";
|
||||
}
|
||||
} # !defined
|
||||
|
||||
# If the directory already exists we can just append
|
||||
# to the end of the value
|
||||
if (defined $ib{$_}) {
|
||||
dbi(\%commands);
|
||||
my $cvalue = $ib{$_} . " $db{$package_name}";
|
||||
# put overwrites by default!
|
||||
$zing->put($_,$cvalue);
|
||||
} # if defined
|
||||
else {
|
||||
dbi(\%commands);
|
||||
$zing->put($_,$db{$package_name});
|
||||
}
|
||||
untie %db;
|
||||
untie $zing;
|
||||
}
|
||||
close(LIST);
|
||||
close(SEARCHINDEX);
|
||||
close(DIRINDEX);
|
||||
|
||||
my $zit; my ($nit,$yit) = (split(/\s/,$sb{$package_name}))[0,3];
|
||||
if ($yit eq "deinstall:ok:config-files" ||
|
||||
$yit eq "purge:ok:config-files") {
|
||||
($zit = $nit) =~ s,\+,\\\+,;
|
||||
if ($ib{"/."} !~ m,$zit,) {
|
||||
$ib{"/."} = $ib{"/."} . " $zit";
|
||||
}
|
||||
}
|
||||
|
||||
} # end foreach NEW
|
||||
print "\n" if $#NEW != -1;
|
||||
|
||||
} # end sub db
|
||||
|
||||
# Generally, it's unecessary to rebuild the flat databases unless major
|
||||
# changes have occurred to a person's installation, and the database has
|
||||
# become very repetitive, or a file has changed into a directory. This
|
||||
# function has also been tried by tieing the flat file to an array, but
|
||||
# there doesn't seem to be that much of a speed advantage unless ib()
|
||||
# happens to be in memory, but more experimentation will be tried in the
|
||||
# future.
|
||||
sub rebuildflatdb {
|
||||
|
||||
my($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
ib(\%commands);
|
||||
|
||||
print scalar(localtime), "\n";
|
||||
|
||||
my $file;
|
||||
my $dir;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
!($commands->{"dbpath"} && $commands->{"root"})) {
|
||||
if (-e "$parent$library/searchindex.deb") {
|
||||
$dir = "$parent$library/dirindex.deb";
|
||||
$file = "$parent$library/searchindex.deb";
|
||||
unlink($file);
|
||||
unlink("$file.gz") if -e "$file.gz";
|
||||
unlink($dir);
|
||||
unlink("$dir.gz") if -e "$dir.gz";
|
||||
}
|
||||
else {
|
||||
print "swim: operation only implemented for installed system\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/searchindex.deb") {
|
||||
$file = "$parent$base/searchindex.deb";
|
||||
$dir = "$parent$base/dirindex.deb";
|
||||
unlink($file);
|
||||
unlink("$file.gz") if -e "$file.gz";
|
||||
unlink($dir);
|
||||
unlink("$dir.gz") if -e "$dir.gz";
|
||||
}
|
||||
else {
|
||||
print "swim: operation only implemented for installed system\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
open(DIR,">$dir");
|
||||
open(FILE,">$file");
|
||||
# We need to reconstruct long.debian & DEBIAN*, but can't take into account
|
||||
# weirdisms with the database - NEW packages which aren't NEW.
|
||||
foreach (keys %ib) {
|
||||
if (defined $ib{$_}) {
|
||||
my $filedir = $_;
|
||||
my $package = $ib{$_};
|
||||
#$package =~ s/\s/\n/g;
|
||||
my @the_amount = split(/\s/, $package);
|
||||
if ($#the_amount > 0) {
|
||||
print DIR "$filedir\n";
|
||||
}
|
||||
elsif ($#the_amount == 0) {
|
||||
print FILE "$filedir\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
untie %ib;
|
||||
print scalar(localtime), "\n";
|
||||
|
||||
} # end sub rebuildflatdb
|
||||
|
||||
|
||||
|
||||
1;
|
648
lib/DB_Init.pm
Normal file
648
lib/DB_Init.pm
Normal file
@ -0,0 +1,648 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::DB_Init;
|
||||
use strict;
|
||||
use SWIM::Conf qw(:Path $fastswim $imswim $slowswim $sort);
|
||||
#use SWIM::Global;
|
||||
use SWIM::Format;
|
||||
use SWIM::MD;
|
||||
use DB_File;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(database);
|
||||
|
||||
|
||||
# database() md() --initdb --rebuilddb
|
||||
|
||||
# Time to get serious and make a database
|
||||
sub database {
|
||||
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
print scalar(localtime), "\n";
|
||||
|
||||
#my whatever that is
|
||||
my @dpackage; # passes name_version to md()
|
||||
my @Tdescription;
|
||||
my @description;
|
||||
my @ldescription;
|
||||
my @package;
|
||||
my %db;
|
||||
my @name;
|
||||
my $count = 0;
|
||||
|
||||
my $the_status;
|
||||
|
||||
my $status;
|
||||
my @essential;
|
||||
my $priority;
|
||||
my $section;
|
||||
my $installed_size;
|
||||
my $maintainer;
|
||||
my $source;
|
||||
my $version;
|
||||
my $ver;
|
||||
|
||||
my %gb;
|
||||
my %group;
|
||||
my $group;
|
||||
|
||||
# Keeps a package->version database
|
||||
# to save time over using status
|
||||
my %sb;
|
||||
my @status;
|
||||
|
||||
my ($replaces, @REPLACE, $provides, $depends, $pre_depends,
|
||||
$recommends, $suggests, $conflicts);
|
||||
|
||||
my @conffiles;
|
||||
my $line_before;
|
||||
my @conf;
|
||||
my @complete;
|
||||
my @form;
|
||||
my @formly;
|
||||
my $format_deb = "$tmp/format.deb";
|
||||
|
||||
# Let's decide whether we should even go on. If it is --initdb, and
|
||||
# the databases already exist, nothing should be touched, but if it is
|
||||
# --rebuilddb and they exist, then they are removed and remade from
|
||||
# scratch.
|
||||
|
||||
# But first, better clean up any files in $tmp in case of an aborted
|
||||
# database formation
|
||||
unlink(<$tmp/DEBIAN*>) if -e "$tmp/DEBIANaa";
|
||||
unlink("$tmp/transfer.deb") if -e "$tmp/transfer.deb";
|
||||
unlink("$tmp/big.debian") if -e "$tmp/big.debian";
|
||||
unlink("$tmp/long.debian") if -e "$tmp/long.debian";
|
||||
|
||||
|
||||
if (-e "$parent$base/status" && -e "$parent$base/info") {
|
||||
$the_status = "$parent$base/status";
|
||||
}
|
||||
else {
|
||||
print "swim: crucial file(s)/directories are missing in $parent\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if ($commands->{"initdb"}) {
|
||||
if (-e "$parent$library/packages.deb" &&
|
||||
-e "$parent$library/fileindex.deb") {
|
||||
print "swim: use --rebuilddb\n";
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
# if a database happens to be missing
|
||||
if (-e "$parent$library/packages.deb") {
|
||||
unlink("$parent$library/packages.deb");
|
||||
}
|
||||
if (-e "$parent$library/fileindex.deb") {
|
||||
unlink("$parent$library/fileindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/groupindex.deb") {
|
||||
unlink("$parent$library/groupindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/statusindex.deb") {
|
||||
unlink("$parent$library/statusindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/searchindex.deb") {
|
||||
unlink("$parent$library/searchindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/searchindex.deb.gz") {
|
||||
unlink("$parent$library/searchindex.deb.gz");
|
||||
}
|
||||
if (-e "$parent$library/dirindex.deb") {
|
||||
unlink("$parent$library/dirindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/dirindex.deb.gz") {
|
||||
unlink("$parent$library/dirindex.deb.gz");
|
||||
}
|
||||
}
|
||||
}
|
||||
# this only works if all databases exist.
|
||||
elsif ($commands->{"rebuilddb"}) {
|
||||
if (-e "$parent$library/packages.deb" &&
|
||||
-e "$parent$library/fileindex.deb") {
|
||||
unlink("$parent$library/packages.deb");
|
||||
unlink("$parent$library/fileindex.deb");
|
||||
unlink("$parent$library/groupindex.deb");
|
||||
unlink("$parent$library/statusindex.deb");
|
||||
unlink("$parent$library/searchindex.deb");
|
||||
unlink("$parent$library/searchindex.deb")
|
||||
if -e "$parent$library/searchindex.deb";
|
||||
unlink("$parent$library/dirindex.deb");
|
||||
unlink("$parent$library/dirindex.deb")
|
||||
if -e "$parent$library/dirindex.deb.gz";
|
||||
}
|
||||
else {
|
||||
print "swim: use --initdb to create databases\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if ($commands->{"initdb"}) {
|
||||
if (-e "$parent$base/packages.deb" &&
|
||||
-e "$parent$base/fileindex.deb") {
|
||||
print "swim: use --rebuilddb\n";
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
# if a database happens to be missing
|
||||
if (-e "$parent$base/packages.deb") {
|
||||
unlink("$parent$base/packages.deb");
|
||||
}
|
||||
if (-e "$parent$base/fileindex.deb") {
|
||||
unlink("$parent$base/fileindex.deb");
|
||||
}
|
||||
if (-e "$parent$base/groupindex.deb") {
|
||||
unlink("$parent$base/groupindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/statusindex.deb") {
|
||||
unlink("$parent$library/statusindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/searchindex.deb") {
|
||||
unlink("$parent$library/searchindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/searchindex.deb.gz") {
|
||||
unlink("$parent$library/searchindex.deb.gz");
|
||||
}
|
||||
if (-e "$parent$library/dirindex.deb") {
|
||||
unlink("$parent$library/dirindex.deb");
|
||||
}
|
||||
if (-e "$parent$library/dirindex.deb.gz") {
|
||||
unlink("$parent$library/dirindex.deb.gz");
|
||||
}
|
||||
}
|
||||
}
|
||||
# this only works if all databases exist.
|
||||
elsif ($commands->{"rebuilddb"}) {
|
||||
if (-e "$parent$base/packages.deb" &&
|
||||
-e "$parent$base/fileindex.deb") {
|
||||
unlink("$parent$base/packages.deb");
|
||||
unlink("$parent$base/fileindex.deb");
|
||||
unlink("$parent$base/groupindex.deb");
|
||||
unlink("$parent$base/statusindex.deb");
|
||||
unlink("$parent$library/searchindex.deb");
|
||||
unlink("$parent$library/searchindex.deb")
|
||||
if -e "$parent$library/searchindex.deb";
|
||||
unlink("$parent$library/dirindex.deb");
|
||||
unlink("$parent$library/dirindex.deb")
|
||||
if -e "$parent$library/dirindex.deb.gz";
|
||||
}
|
||||
else {
|
||||
print "swim: use --initdb to create databases\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# This makes a backup of all the *.list files in ./backup. When
|
||||
# --initdb/--rebuilddb runs these files should be built or rebuilt,
|
||||
# but if changes have occured and --db(-i wasn't used) wasn't run
|
||||
# this won't cause problems because everything is rebuilt, there may
|
||||
# just be some lingering small files in backup.
|
||||
|
||||
# Seems like both approaches are about the same speed.
|
||||
#use File::Copy;
|
||||
print "Making backups of *.list\n";
|
||||
if (!-d "$parent$base/info/backup") {
|
||||
mkdir("$parent$base/info/backup",0666);
|
||||
}
|
||||
opendir(COPY,"$parent$base/info");
|
||||
foreach (sort grep(/\.list$/, readdir(COPY))) {
|
||||
#copy ("$parent$base/info/$_","$parent$base/info/backup/$_.bk");
|
||||
open(FILENAME,"$parent$base/info/$_");
|
||||
open(CP,">$parent$base/info/backup/$_.bk");
|
||||
while (<FILENAME>) {
|
||||
print CP $_;
|
||||
}
|
||||
}
|
||||
closedir(COPY);
|
||||
|
||||
print "Description Database is being made\n";
|
||||
|
||||
$| = 1; my $x = 0;
|
||||
open(PRETTY, ">$format_deb");
|
||||
open(AVAIL, "$the_status");
|
||||
while (<AVAIL>) {
|
||||
# Package name
|
||||
if (/^Package:|^PACKAGE:/) {
|
||||
@package = split(/: /,$_);
|
||||
chomp $package[1];
|
||||
$x = 1 if $x == 6;
|
||||
print "|\r" if $x == 1 || $x == 4; print "/\r" if $x == 2;
|
||||
print "-\r" if $x == 3 || $x == 6; print "\\\r" if $x == 5;
|
||||
$x++;
|
||||
}
|
||||
# Some other pertinent fields
|
||||
# All this stuff can be placed together..since it is generally nice
|
||||
# to know these things at one glance, in this order.
|
||||
# Package: Status:
|
||||
# Version: Essential: (yes or no)
|
||||
# Section: Priority:
|
||||
# Installed-Size:
|
||||
# Maintainer:
|
||||
# Description:
|
||||
|
||||
elsif (/^Status:/) {
|
||||
$status = $_;
|
||||
}
|
||||
elsif (/^Essential/) {
|
||||
@essential = split(/: /,$_);
|
||||
}
|
||||
elsif (/^Priority:/) {
|
||||
$priority = $_;
|
||||
}
|
||||
elsif (/^Section:/) {
|
||||
$section = $_;
|
||||
# make the hash for the groupindex.deb
|
||||
$group = substr($section,9);
|
||||
chomp $group;
|
||||
# we will put not-installed in their own group for reference
|
||||
if ($status !~ /not-installed/) {
|
||||
if (!defined $group{$group}) {
|
||||
$group{$group} = $package[1];
|
||||
}
|
||||
else {
|
||||
$group{$group} = "$group{$group} $package[1]";
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif (/^Installed-Size:/) {
|
||||
$installed_size = $_;
|
||||
}
|
||||
elsif (/^Maintainer:/) {
|
||||
$maintainer = $_;
|
||||
}
|
||||
elsif (/^Source:/) {
|
||||
$source = $_;
|
||||
}
|
||||
# hold ok not-installed - may want to change this just to
|
||||
# non-installed.
|
||||
elsif (/^Version:/ && $status !~ /not-installed/) {
|
||||
$version = $_;
|
||||
chomp($version, $section);
|
||||
$col1 = "Package: $package[1]";
|
||||
$col2 = $status;
|
||||
write PRETTY;
|
||||
$col1 = $version;
|
||||
$ver = m,Version:\s(.*),;
|
||||
# This creates a name -> version index in package.deb,
|
||||
# and the statusindex.deb database which will serve to
|
||||
# determine if the status has changed when --db or -i is
|
||||
# ran.
|
||||
push(@name, $package[1]);
|
||||
push(@status, $package[1]);
|
||||
$package[1] = "$package[1]_$1";
|
||||
push(@name, $package[1]);
|
||||
my $priory = substr($priority,10);
|
||||
chomp $priory;
|
||||
my $statusy = substr($status,8);
|
||||
chomp $statusy;
|
||||
$statusy =~ s/\s/:/g;
|
||||
my $thimk = "$package[1] $group $priory $statusy";
|
||||
push(@status, $thimk);
|
||||
if(defined($essential[1])) {
|
||||
$col2 = "Essential: $essential[1]";
|
||||
@essential = ();
|
||||
}
|
||||
else {
|
||||
$col2 = "Essential: no\n";
|
||||
}
|
||||
write PRETTY;
|
||||
if (defined $section) {
|
||||
$col1 = $section;
|
||||
}
|
||||
else {
|
||||
$col1 = "Section: unavailable";
|
||||
}
|
||||
if (defined $priority) {
|
||||
$col2 = $priority;
|
||||
}
|
||||
else {
|
||||
$col2 = "Priority: unavailable\n";
|
||||
}
|
||||
write PRETTY;
|
||||
#my $cool = $installed_size . $maintainer;
|
||||
$col1 = $installed_size;
|
||||
if (defined $source) {
|
||||
$col2 = $source;
|
||||
}
|
||||
else {
|
||||
$col2 = "";
|
||||
}
|
||||
write PRETTY;
|
||||
undef $source;
|
||||
print PRETTY $maintainer
|
||||
}
|
||||
|
||||
# This stuff will be available with seperate query flags or All
|
||||
elsif (/^Replaces:/) {
|
||||
$replaces = $_;
|
||||
if (defined($replaces)) {
|
||||
push(@REPLACE, "$package[1]REP");
|
||||
push(@REPLACE, $replaces);
|
||||
}
|
||||
}
|
||||
elsif (/^Provides:/) {
|
||||
$provides = $_;
|
||||
if (defined($provides)) {
|
||||
push(@REPLACE, "$package[1]PRO");
|
||||
push(@REPLACE, $provides);
|
||||
}
|
||||
}
|
||||
elsif (/^Depends:/) {
|
||||
$depends = $_;
|
||||
if (defined($depends)) {
|
||||
push(@REPLACE, "$package[1]DEP");
|
||||
push(@REPLACE, $depends);
|
||||
}
|
||||
}
|
||||
elsif (/^Pre-Depends:/) {
|
||||
$pre_depends = $_;
|
||||
if (defined($pre_depends)) {
|
||||
push(@REPLACE, "$package[1]PRE");
|
||||
push(@REPLACE, $pre_depends);
|
||||
}
|
||||
}
|
||||
elsif (/^Recommends:/) {
|
||||
$recommends = $_;
|
||||
if (defined($recommends)) {
|
||||
push(@REPLACE, "$package[1]REC");
|
||||
push(@REPLACE, $recommends);
|
||||
}
|
||||
}
|
||||
elsif (/^Suggests:/) {
|
||||
$suggests = $_;
|
||||
if (defined($suggests)) {
|
||||
push(@REPLACE, "$package[1]SUG");
|
||||
push(@REPLACE, $suggests);
|
||||
}
|
||||
}
|
||||
elsif (/^Conflicts:/) {
|
||||
$conflicts = $_;
|
||||
if (defined($conflicts)) {
|
||||
push(@REPLACE, "$package[1]CON");
|
||||
push(@REPLACE, $conflicts);
|
||||
}
|
||||
}
|
||||
# Gather the Configuration Files, Description comes after.
|
||||
# Available with a single flag.
|
||||
elsif (/^Conffiles:/) {
|
||||
my $line = <AVAIL>;
|
||||
while ($line !~ /^Description:/) {
|
||||
push(@conffiles,$line);
|
||||
$line = <AVAIL>;
|
||||
if ($line =~ /^Description/) {
|
||||
$line_before = $line;
|
||||
# put conffiles into one variable
|
||||
if (defined $package[1]) {
|
||||
#chomp $package[1];
|
||||
push(@conf,"$package[1]CONF");
|
||||
}
|
||||
my ($c, $cool);
|
||||
if ($#conffiles != 0) {
|
||||
for ($c = $#conffiles; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $conffiles[$c-1] .= $conffiles[$c];
|
||||
}
|
||||
} #end for
|
||||
}
|
||||
else {
|
||||
$cool = $conffiles[0];
|
||||
}
|
||||
@conffiles = ();
|
||||
push(@conf,$cool);
|
||||
} #if ($line =~ /^Desc
|
||||
} # while ($line ! /^Desc
|
||||
} # elsif (/^Conffiles
|
||||
|
||||
# Only interested in available packages..so this is fine.
|
||||
# To be combined with first fields.
|
||||
if (/Description:|^\s\w*|^\s\.\w*/ ||
|
||||
defined($line_before) =~ /^Description/){
|
||||
my $many_lines;
|
||||
if (defined($line_before)) {
|
||||
push(@ldescription, $line_before);
|
||||
push(@ldescription, $_);
|
||||
$line_before = ();
|
||||
}
|
||||
else {
|
||||
$many_lines = $_;
|
||||
}
|
||||
if ($_ !~ /^\n$/) {
|
||||
$count++;
|
||||
if ($count == 1) {
|
||||
if (defined $package[1]) {
|
||||
#chomp $package[1];
|
||||
push(@dpackage,$package[1]);
|
||||
push(@description,$package[1]);
|
||||
}
|
||||
}
|
||||
if (defined($many_lines)) {
|
||||
push(@ldescription,$many_lines);
|
||||
}
|
||||
} # end if ($_ !~ /^\n$/
|
||||
else {
|
||||
$count = 0;
|
||||
# let's put each description into one scalar
|
||||
my ($c, $cool);
|
||||
if ($#ldescription != 0) {
|
||||
for ($c = $#ldescription; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $ldescription[$c-1] .= $ldescription[$c];
|
||||
}
|
||||
} #end for
|
||||
} # end if ($#ld
|
||||
else {
|
||||
$cool = $ldescription[0];
|
||||
}
|
||||
if (defined $cool) {
|
||||
push(@description,$cool);
|
||||
}
|
||||
@ldescription = ();
|
||||
} # end else
|
||||
$line_before = ();
|
||||
}
|
||||
} # end while (<AVAIL>)
|
||||
close(PRETTY);
|
||||
|
||||
# Let's put together the description with the rest of its fields.
|
||||
open(FIELDS,"$format_deb");
|
||||
while (<FIELDS>) {
|
||||
push(@form,$_);
|
||||
}
|
||||
close(FIELDS);
|
||||
|
||||
foreach (@form) {
|
||||
push(@formly,$_);
|
||||
my ($cool);
|
||||
$count++;
|
||||
if ($count == 5) {
|
||||
my ($c, $cool);
|
||||
if ($#formly != 0) {
|
||||
for ($c = $#formly; $c >= 0; $c--) {
|
||||
if ($c > 0) {
|
||||
$cool = $formly[$c-1] .= $formly[$c];
|
||||
}
|
||||
} #end for
|
||||
} # end if ($#ld
|
||||
else {
|
||||
$cool = $formly[0];
|
||||
}
|
||||
push(@complete,$cool);
|
||||
@formly = ();
|
||||
$count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (@description) {
|
||||
if ($count == 1) {
|
||||
my $lingo = shift(@complete);
|
||||
$lingo = $lingo . $_;
|
||||
push(@Tdescription, $lingo);
|
||||
$lingo = ();
|
||||
$count = 1;
|
||||
}
|
||||
else {
|
||||
push(@Tdescription, $_);
|
||||
$count = 0;
|
||||
}
|
||||
$count++;
|
||||
|
||||
}
|
||||
unlink($format_deb);
|
||||
|
||||
# We'll keep databases local so that md() doesn't get confused with
|
||||
# database().
|
||||
|
||||
# Put the groups into the groupindex.deb database.
|
||||
print "Group Database is being made\n";
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
tie %gb, 'DB_File', "$parent$library/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
tie %gb, 'DB_File', "$parent$base/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
|
||||
%gb = %group;
|
||||
|
||||
untie %gb;
|
||||
undef %gb;
|
||||
undef %group;
|
||||
|
||||
# Create the important status database.
|
||||
print "Status Database is being made\n";
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
tie %sb, 'DB_File', "$parent$library/statusindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
tie %sb, 'DB_File', "$parent$base/statusindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
|
||||
%sb = @status;
|
||||
|
||||
untie %sb;
|
||||
undef %sb;
|
||||
undef @status;
|
||||
|
||||
# Put everything into the package.deb database.
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
tie %db, 'DB_File', "$parent$library/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
tie %db, 'DB_File', "$parent$base/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
|
||||
%db = (@name,@Tdescription,@conf,@REPLACE);
|
||||
untie %db;
|
||||
undef @Tdescription;
|
||||
undef @conf;
|
||||
undef @REPLACE;
|
||||
undef %db;
|
||||
|
||||
|
||||
# To the total db thing.
|
||||
if ($commands->{"initdb"} || $commands->{"rebuilddb"}) {
|
||||
md(\@dpackage,\%commands);
|
||||
}
|
||||
|
||||
|
||||
} # end sub database
|
||||
|
||||
|
||||
# Basically, this writes @dpackage to transfer.deb, which is processed by
|
||||
# either fastswim into two files big.debian and long.debian for further
|
||||
# processing by process_md() or is processed by imswim, then slowswim into
|
||||
# the two files big.debian and long.debian then finished by process_md()
|
||||
sub md {
|
||||
|
||||
my($dpackage,$commands) = @_; # creates transfer.deb
|
||||
my %commands = %$commands;
|
||||
|
||||
|
||||
unless (-e "$parent$base/info") {
|
||||
die 'This program requires the /var/lib/dpkg/info directory set-up by dpkg';
|
||||
}
|
||||
|
||||
# Put all file/dir(*.list)->package_name(s) into an massive array.
|
||||
# fastswim runs this process separately.
|
||||
|
||||
# This enables info files to be used from a different root system
|
||||
my $argument2 = "$parent$base/info";
|
||||
|
||||
# This is just for testing purposes, and serves no real purpose.
|
||||
if (!defined(@$dpackage)) {
|
||||
system("$fastswim");
|
||||
}
|
||||
# This is what is used.
|
||||
else {
|
||||
open(TRANSFER, ">$tmp/transfer.deb");
|
||||
foreach (@$dpackage) {
|
||||
print TRANSFER "$_\n";
|
||||
}
|
||||
close(TRANSFER);
|
||||
if (!$commands->{"lowmem"}) {
|
||||
system $fastswim, "--transfer", $argument2, $tmp;
|
||||
}
|
||||
else {
|
||||
print "Gathering the file(s)/dir(s)\n";
|
||||
system $imswim, $argument2, $tmp;
|
||||
system $slowswim, $tmp, $sort;
|
||||
}
|
||||
}
|
||||
undef @$dpackage;
|
||||
process_md(\%commands);
|
||||
|
||||
} # end sub md
|
||||
|
||||
|
||||
|
||||
1;
|
497
lib/DB_Library.pm
Normal file
497
lib/DB_Library.pm
Normal file
@ -0,0 +1,497 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::DB_Library;
|
||||
use strict;
|
||||
use SWIM::Conf;
|
||||
use SWIM::Global;
|
||||
use SWIM::Library;
|
||||
use DB_File;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(ib nib dbi ndb sb exist_sb nsb ping zing nzing ging gb
|
||||
ngb sing ram_on version ver nver nping nzing nging nsing);
|
||||
%EXPORT_TAGS = (
|
||||
Search => [ qw(ib dbi nib nsb ndb gb ram_on version ngb) ],
|
||||
Db => [ qw(sb ib gb nsb ver dbi zing ging ping sing) ],
|
||||
Md => [ qw(sb ib nsb nzing) ],
|
||||
Deb => [ qw(sb nsb ndb) ],
|
||||
NDb => [ qw(ndb nsb ngb nver nping nzing nging nsing
|
||||
exist_sb sb) ],
|
||||
Groups => [ qw(gb ngb) ],
|
||||
Xyz => [ qw(dbi ndb) ]
|
||||
);
|
||||
|
||||
|
||||
# functions which use DB_File
|
||||
|
||||
|
||||
sub ib {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/fileindex.deb") {
|
||||
tie %ib, 'DB_File', "$parent$library/fileindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/fileindex.deb") {
|
||||
tie %ib, 'DB_File', "$parent$base/fileindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
} # end sub ib
|
||||
|
||||
sub dbi {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/packages.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %db, 'DB_File', "$parent$library/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/packages.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %db, 'DB_File', "$parent$base/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
} # end sub dbi
|
||||
|
||||
|
||||
|
||||
sub nib {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (!-e "$parent$library/nfileindex$arch$dist.deb") {
|
||||
return;
|
||||
}
|
||||
tie %ib, 'DB_File', "$parent$library/nfileindex$arch$dist.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (!-e "$parent$base/nfileindex$arch$dist.deb") {
|
||||
return;
|
||||
}
|
||||
tie %ib, 'DB_File', "$parent$base/nfileindex$arch$dist.deb" or die "DB_File: $!";
|
||||
}
|
||||
} # end sub nib
|
||||
|
||||
|
||||
sub ndb {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/npackages$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"} ||
|
||||
$commands->{"ndb"})) {
|
||||
tie %db, 'DB_File', "$parent$library/npackages$arch$dist.deb"
|
||||
or die "swim: use pre-existing databases for this option";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/npackages$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"} ||
|
||||
$commands->{"ndb"})) {
|
||||
tie %db, 'DB_File', "$parent$base/npackages$arch$dist.deb"
|
||||
or die "swim: use pre-existing databases for this option";
|
||||
}
|
||||
}
|
||||
} # end sub ndb
|
||||
|
||||
|
||||
sub sb {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/statusindex.deb") {
|
||||
tie %sb, 'DB_File', "$parent$library/statusindex.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/statusindex.deb") {
|
||||
tie %sb, 'DB_File', "$parent$base/statusindex.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} # end sub sb
|
||||
|
||||
# exist_sb & sb seem to be used primarily in NDB_Init
|
||||
|
||||
# This first looks in the immediate directory for statusindex.deb, if it
|
||||
# isn't found here, it look in the default directory. It then returns
|
||||
# undef, or initializes the database based on its findings.
|
||||
sub exist_sb {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $yep;
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/statusindex.deb") {
|
||||
$yep = "yes";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/statusindex.deb") {
|
||||
$yep = "yes";
|
||||
}
|
||||
}
|
||||
|
||||
if (!defined $yep) {
|
||||
if (-e "$parent$base/statusindex.deb") {
|
||||
tie %sb, 'DB_File', "$parent$base/statusindex.deb"
|
||||
or die "DB_File: $!";
|
||||
return "yes";
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
elsif (defined $yep) {
|
||||
sb(\%commands);
|
||||
return "yes";
|
||||
}
|
||||
|
||||
} # end sub exist_sb
|
||||
|
||||
sub nsb {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/nstatusindex$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"} ||
|
||||
$commands->{"ndb"})) {
|
||||
tie %nsb, 'DB_File', "$parent$library/nstatusindex$arch$dist.deb"
|
||||
or die "swim: use pre-existing databases for this option";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/nstatusindex$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"} ||
|
||||
$commands->{"ndb"})) {
|
||||
tie %nsb, 'DB_File', "$parent$base/nstatusindex$arch$dist.deb" or die
|
||||
or die "swim: use pre-existing databases for this option";
|
||||
}
|
||||
}
|
||||
} # end sub nsb
|
||||
|
||||
sub ping {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$ping = tie %db, 'DB_File', "$parent$library/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$ping = tie %db, 'DB_File', "$parent$base/packages.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
|
||||
sub nping {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$ping = tie %db, 'DB_File', "$parent$library/npackages$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$ping = tie %db, 'DB_File', "$parent$base/npackages$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
} # end sub nping
|
||||
|
||||
|
||||
sub zing {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$zing = tie %ib, 'DB_File', "$parent$library/fileindex.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$zing = tie %ib, 'DB_File', "$parent$base/fileindex.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
} # end sub zing
|
||||
|
||||
sub nzing {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$zing = tie %ib, 'DB_File', "$parent$library/nfileindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$zing = tie %ib, 'DB_File', "$parent$base/nfileindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
} # end sub nzing
|
||||
|
||||
|
||||
sub ging {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$ging = tie %gb, 'DB_File', "$parent$library/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$ging = tie %gb, 'DB_File', "$parent$base/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
} #end sub ging
|
||||
|
||||
|
||||
sub nging {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$ging = tie %gb, 'DB_File',"$parent$library/ngroupindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$ging = tie %gb, 'DB_File', "$parent$base/ngroupindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
} # end sub nging
|
||||
|
||||
|
||||
sub gb {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/groupindex.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %gb, 'DB_File', "$parent$library/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/groupindex.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %gb, 'DB_File', "$parent$base/groupindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub ngb {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
if (-e "$parent$library/ngroupindex$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %gb, 'DB_File', "$parent$library/ngroupindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
if (-e "$parent$base/ngroupindex$arch$dist.deb" ||
|
||||
($commands->{"initndb"} || $commands->{"rebuildndb"})) {
|
||||
tie %gb, 'DB_File', "$parent$base/ngroupindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub sing {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sing = tie %sb, 'DB_File', "$parent$library/statusindex.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sing = tie %sb, 'DB_File', "$parent$base/statusindex.deb" or die "DB_File: $!";
|
||||
}
|
||||
} # sub sing
|
||||
|
||||
sub nsing {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sing = tie %nsb, 'DB_File', "$parent$library/nstatusindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sing = tie %nsb, 'DB_File', "$parent$base/nstatusindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
} # end sub nsing
|
||||
|
||||
|
||||
# This doesn't depend on DB so it can be placed somewhere else if it is used by more
|
||||
# than SWIM::Search.
|
||||
|
||||
# checks to see if ramdisk is on, searchdf() & nfile()-process_nfile()
|
||||
# (used by file()) uses this
|
||||
sub ram_on {
|
||||
|
||||
my $ramdisk;
|
||||
|
||||
# this monster runs for every argument
|
||||
my $rambo = "$cat /proc/mounts|";
|
||||
open(RAM, "$rambo");
|
||||
while (<RAM>) {
|
||||
if (/ram/) {
|
||||
my($device,$mount) = split(/\s/,$_,2);
|
||||
if ($mount =~ /dramdisk/) {
|
||||
$ramdisk = "yes";
|
||||
return $ramdisk;
|
||||
}
|
||||
}
|
||||
}
|
||||
close(RAM);
|
||||
} # end sub ram_on
|
||||
|
||||
|
||||
|
||||
# finds package name and version
|
||||
sub version {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if (!$commands{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
else {
|
||||
ndb(\%commands);
|
||||
}
|
||||
|
||||
if (defined $argument) {
|
||||
# We will check for more than two..just in case
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub version
|
||||
# returns version but and then is untied
|
||||
sub ver {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
dbi(\%commands);
|
||||
|
||||
if (defined $argument) {
|
||||
# We will check for more than two..just in case
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
untie %db;
|
||||
|
||||
} # end sub ver
|
||||
|
||||
sub nver {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
ndb(\%commands);
|
||||
|
||||
if (defined $argument) {
|
||||
# We will check for more than two..just in case
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
untie %db;
|
||||
|
||||
} # end sub nver
|
||||
|
1752
lib/Deb.pm
Normal file
1752
lib/Deb.pm
Normal file
File diff suppressed because it is too large
Load Diff
456
lib/Deps.pm
Normal file
456
lib/Deps.pm
Normal file
@ -0,0 +1,456 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Deps;
|
||||
use strict;
|
||||
use SWIM::Global qw(:Info);
|
||||
use SWIM::DB_Library qw(:Xyz);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(character s_character which_character the_character);
|
||||
|
||||
# the -T and siblings
|
||||
|
||||
# process the database for replaces
|
||||
sub replaces {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "REP";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub replaces
|
||||
|
||||
# process the database for provides
|
||||
sub provides {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "PRO";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub provides
|
||||
|
||||
# process the database for depends
|
||||
sub depends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "DEP";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub depends
|
||||
|
||||
# process the database for replaces
|
||||
sub pre_depends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "PRE";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub pre_depends
|
||||
|
||||
# process the database for replaces
|
||||
sub recommends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "REC";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub recommends
|
||||
|
||||
# process the database for replaces
|
||||
sub suggests {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "SUG";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub suggests
|
||||
|
||||
# process the database for replaces
|
||||
sub conflicts {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "CON";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub conflicts
|
||||
|
||||
#These subroutines are for cases where only packages related to the
|
||||
# characteristics are printed out.
|
||||
# process the database for replaces
|
||||
sub s_replaces {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "REP";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_replaces
|
||||
|
||||
# process the database for provides
|
||||
sub s_provides {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "PRO";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_provides
|
||||
|
||||
# process the database for depends
|
||||
sub s_depends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "DEP";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_depends
|
||||
|
||||
# process the database for replaces
|
||||
sub s_pre_depends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "PRE";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_pre_depends
|
||||
|
||||
# process the database for replaces
|
||||
sub s_recommends {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "REC";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_recommends
|
||||
|
||||
# process the database for replaces
|
||||
sub s_suggests {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "SUG";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_suggests
|
||||
|
||||
# process the database for replaces
|
||||
sub s_conflicts {
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
!$commands->{"n"} ? dbi(\%commands) : ndb(\%commands);
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "CON";
|
||||
if (defined $db{$conf}) {
|
||||
return "$argument\n$db{$conf}";
|
||||
}
|
||||
else { return ""; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub s_conflicts
|
||||
|
||||
|
||||
# This figures out which characteristics (Replaces, Provides, etc) the
|
||||
# options are pointing to. Isn't choosey, prints all packages
|
||||
sub character {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
# for singular cases
|
||||
if ($commands->{"g"} && ($commands->{"T"} || $commands->{"pre_depends"} ||
|
||||
$commands->{"depends"} || $commands->{"recommends"} ||
|
||||
$commands->{"suggests"} || $commands->{"provides"} ||
|
||||
$commands->{"replaces"} || $commands->{"conflicts"}) &&
|
||||
!($commands->{"c"} || $commands->{"d"} || $commands->{"l"} ||
|
||||
$commands->{"i"})) {
|
||||
print "$argument\n";
|
||||
}
|
||||
|
||||
# all the characteristics
|
||||
if (defined $commands->{"T"}) {
|
||||
print pre_depends(\%commands);
|
||||
print depends(\%commands);
|
||||
print recommends(\%commands);
|
||||
print suggests(\%commands);
|
||||
print provides(\%commands);
|
||||
print replaces(\%commands);
|
||||
print conflicts(\%commands);
|
||||
}
|
||||
else {
|
||||
|
||||
if (defined $commands->{"pre_depends"}) {
|
||||
print pre_depends(\%commands);
|
||||
delete $commands{"pre_depends"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"depends"}) {
|
||||
print depends(\%commands);
|
||||
delete $commands{"depends"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"recommends"}) {
|
||||
print recommends(\%commands);
|
||||
delete $commands{"recommends"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"suggests"}) {
|
||||
print suggests(\%commands);
|
||||
delete $commands{"suggests"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"replaces"}) {
|
||||
print replaces(\%commands);
|
||||
delete $commands{"replaces"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"provides"}) {
|
||||
print provides(\%commands);
|
||||
delete $commands{"provides"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
|
||||
if (defined $commands->{"conflicts"}) {
|
||||
print conflicts(\%commands);
|
||||
delete $commands{"conflicts"} if !($commands->{"S"} || $commands->{"g"});
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub character
|
||||
|
||||
# Prints out the characteristics only for the packages which have them.
|
||||
sub s_character {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if ($commands->{"pre_depends"}) {
|
||||
print s_pre_depends(\%commands);
|
||||
delete $commands{"pre_depends"};
|
||||
if (s_pre_depends(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"depends"}) {
|
||||
print s_depends(\%commands);
|
||||
delete $commands{"depends"};
|
||||
if (s_depends(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"recommends"}) {
|
||||
print s_recommends(\%commands);
|
||||
delete $commands{"recommends"};
|
||||
if (s_recommends(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"suggests"}) {
|
||||
print s_suggests(\%commands);
|
||||
delete $commands{"suggests"};
|
||||
if (s_suggests(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"replaces"}) {
|
||||
print s_replaces(\%commands);
|
||||
delete $commands{"replaces"};
|
||||
if (s_replaces(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"provides"}) {
|
||||
print s_provides(\%commands);
|
||||
delete $commands{"provides"};
|
||||
if (s_provides(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
elsif ($commands->{"conflicts"}) {
|
||||
print s_conflicts(\%commands);
|
||||
delete $commands{"conflicts"};
|
||||
if (s_conflicts(\%commands) ne "") {
|
||||
character(\%commands);
|
||||
}
|
||||
# else { s_character(\%commands) }
|
||||
}
|
||||
|
||||
# all the characteristics
|
||||
if ($commands->{"T"}) {
|
||||
print s_pre_depends(\%commands);
|
||||
print s_depends(\%commands);
|
||||
print s_recommends(\%commands);
|
||||
print s_suggests(\%commands);
|
||||
print s_provides(\%commands);
|
||||
print s_replaces(\%commands);
|
||||
print s_conflicts(\%commands);
|
||||
}
|
||||
|
||||
|
||||
} # end sub s_character
|
||||
|
||||
|
||||
# helps to determine if character(\%commands) should be used
|
||||
sub which_character {
|
||||
my ($commands) = @_;
|
||||
if ($commands->{"pre_depends"} || $commands->{"depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"replaces"} || $commands->{"provides"} ||
|
||||
$commands->{"conflicts"}) {
|
||||
return 1;
|
||||
}
|
||||
} # end sub which_character
|
||||
|
||||
# This runs a test to see whether or not the characters being asked for
|
||||
# apply to this package.
|
||||
sub the_character {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if (defined $commands->{"pre_depends"}) {
|
||||
if (pre_depends(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"depends"}) {
|
||||
if (depends(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"recommends"}) {
|
||||
if (recommends(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"suggests"}) {
|
||||
if (suggests(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"replaces"}) {
|
||||
if (replaces(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"provides"}) {
|
||||
if (provides(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
if (defined $commands->{"conflicts"}) {
|
||||
if (conflicts(\%commands) eq "") {
|
||||
print "";
|
||||
}
|
||||
else { return "ok"; }
|
||||
}
|
||||
|
||||
} # end sub the_character
|
||||
|
||||
1;
|
110
lib/Dir.pm
Normal file
110
lib/Dir.pm
Normal file
@ -0,0 +1,110 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Dir;
|
||||
use strict;
|
||||
use SWIM::Global qw($argument);
|
||||
use SWIM::Conf qw($pwd);
|
||||
use vars qw(@ISA @EXPORT @EXPORT_OK);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(dir fir);
|
||||
|
||||
# dir() fir()
|
||||
|
||||
# When --dir is used checks argument (when -f is called) and determines dir
|
||||
# stuff..is it real or not.
|
||||
sub dir {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if ($commands->{"dir"}) {
|
||||
if (! -d $argument) {
|
||||
if (! -e $argument) {
|
||||
print "$argument is not a directory or file\n";
|
||||
}
|
||||
else {
|
||||
print "$argument is not a directory\n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
elsif ($argument =~ m,\/$,) {
|
||||
if ($argument !~ m,^\/,) {
|
||||
if ($pwd =~ m,^\/$,) {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = "$pwd$1";
|
||||
}
|
||||
else {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = "$pwd/$1";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = $1;
|
||||
}
|
||||
}
|
||||
elsif ($argument !~ m,\/$|^\/, && $argument =~ m,\/,) {
|
||||
if ($pwd =~ m,^\/$,) {
|
||||
$argument = "/$argument";
|
||||
}
|
||||
else {
|
||||
$argument = "$pwd/$argument";
|
||||
}
|
||||
}
|
||||
}
|
||||
} # end sub dir
|
||||
|
||||
# when --dir isn't called...does the same thing as dir.
|
||||
sub fir {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
if ($argument =~ m,\/$,) {
|
||||
# Let's test to see whether it really is a file or directory.
|
||||
if (! -d $argument) {
|
||||
print "$argument is not a file\n";
|
||||
exit;
|
||||
}
|
||||
if ($argument !~ m,^\/,) {
|
||||
if ($pwd =~ m,^\/$,) {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = "$pwd$1";
|
||||
}
|
||||
else {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = "$pwd/$1";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$argument =~ m,(.*)\/$,;
|
||||
$argument = $1;
|
||||
}
|
||||
}
|
||||
elsif ($argument !~ m,\/$|^\/, && $argument =~ m,\/,) {
|
||||
if ($pwd =~ m,^\/$,) {
|
||||
$argument = "/$argument";
|
||||
}
|
||||
else {
|
||||
$argument = "$pwd/$argument";
|
||||
}
|
||||
}
|
||||
} # end sub fir
|
||||
|
||||
1;
|
||||
|
92
lib/F.pm
Normal file
92
lib/F.pm
Normal file
@ -0,0 +1,92 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::F;
|
||||
use Carp;
|
||||
use strict;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(get);
|
||||
|
||||
|
||||
# This is Net::FTP::get with minor modifications. Not all the features
|
||||
# are used, but are kept, just in case they will be.
|
||||
|
||||
sub get
|
||||
{
|
||||
my($ftp,$remote,$local,$where) = @_;
|
||||
|
||||
my($loc,$len,$buf,$resp,$localfd,$data);
|
||||
local *FD;
|
||||
$| = 1;
|
||||
$localfd = ref($local) ? fileno($local)
|
||||
: undef;
|
||||
|
||||
($local = $remote) =~ s#^.*/##
|
||||
unless(defined $local);
|
||||
|
||||
${*$ftp}{'net_ftp_rest'} = $where
|
||||
if ($where);
|
||||
|
||||
delete ${*$ftp}{'net_ftp_port'};
|
||||
delete ${*$ftp}{'net_ftp_pasv'};
|
||||
|
||||
$data = $ftp->retr($remote) or
|
||||
return undef;
|
||||
|
||||
if(defined $localfd)
|
||||
{
|
||||
$loc = $local;
|
||||
}
|
||||
else
|
||||
{
|
||||
$loc = \*FD;
|
||||
|
||||
unless(($where) ? open($loc,">>$local") : open($loc,">$local"))
|
||||
{
|
||||
carp "Cannot open Local file $local: $!\n";
|
||||
$data->abort;
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
if($ftp->type eq 'I' && !binmode($loc))
|
||||
{
|
||||
carp "Cannot binmode Local file $local: $!\n";
|
||||
$data->abort;
|
||||
return undef;
|
||||
}
|
||||
|
||||
$buf = ''; my $amt = 0;
|
||||
#print "\n";
|
||||
do
|
||||
{
|
||||
$len = $data->read($buf,1024);
|
||||
$amt = $len + $amt;
|
||||
print "[$amt]\r";
|
||||
}
|
||||
while($len > 0 && syswrite($loc,$buf,$len) == $len);
|
||||
|
||||
close($loc)
|
||||
unless defined $localfd;
|
||||
|
||||
$data->close(); # implied $ftp->response
|
||||
|
||||
return $local;
|
||||
}
|
877
lib/File.pm
Normal file
877
lib/File.pm
Normal file
@ -0,0 +1,877 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::File;
|
||||
use strict;
|
||||
use SWIM::Global;
|
||||
use SWIM::DB_Library qw(:Xyz ram_on nsb);
|
||||
use SWIM::Library;
|
||||
use SWIM::Conf qw(:Path $md5sum);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(file);
|
||||
|
||||
|
||||
#=pod
|
||||
#
|
||||
#This provides the list of files belonging to a package. Although a
|
||||
#database could be used..it's probably faster, and cheaper on space
|
||||
#accessing from the /var/lib/dpkg/info* files. And if --md5sum is
|
||||
#called, the md5sums are shown for the -d ,-l, or -c files they exist for.
|
||||
#md5sums are checked for, and reported back as OK or FAILED. -l or
|
||||
#-d(overrides l). -qd(l) md5sum from RH has a slightly different
|
||||
#output.. filepath/filename: file OK before swim's output..this can be
|
||||
#altered
|
||||
#
|
||||
#=end
|
||||
|
||||
sub file {
|
||||
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $file;
|
||||
my $md5;
|
||||
my @md5;
|
||||
my $path;
|
||||
my @path;
|
||||
my $md5sums;
|
||||
my $md5sums_conf;
|
||||
my %md5sums = ();
|
||||
my $orig_argument;
|
||||
my $count = 0;
|
||||
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
# files/dirs will be found from contents.deb (compressed)
|
||||
else {
|
||||
ndb(\%commands);
|
||||
}
|
||||
|
||||
if (defined $argument) {
|
||||
if ($argument =~ /_/) {
|
||||
my $check;
|
||||
if (defined $db{"$argument"}) {
|
||||
$check = $db{"$argument"};
|
||||
}
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (defined $argument) {
|
||||
if (!$commands->{"n"}) {
|
||||
$file = "$parent$base/info/$argument.list";
|
||||
if (-e "$parent$base/info/$argument.md5sums") {
|
||||
$md5sums = "$parent$base/info/$argument.md5sums";
|
||||
}
|
||||
if (-e "$parent$base/info/$argument-conf.md5sums" && $commands->{"c"}) {
|
||||
$md5sums_conf = "$parent$base/info/$argument-conf.md5sums";
|
||||
}
|
||||
|
||||
|
||||
##################
|
||||
# MD5SUMS FOR -C #
|
||||
##################
|
||||
if ($commands->{"md5sum"} && $commands->{"c"} && !($commands->{"d"} ||
|
||||
$commands->{"l"})) {
|
||||
if (!defined $md5sums_conf && $commands->{"c"}) {
|
||||
$md5sums_conf = make_conf(\%commands);
|
||||
}
|
||||
# now we can process $md5sums and $md5sums_conf assuming one or
|
||||
# both actually exist
|
||||
if (defined $md5sums_conf) {
|
||||
chdir("/");
|
||||
my %path;
|
||||
open (MD5SUM, "$md5sums_conf");
|
||||
open (MD5SUMCHECK, "|$md5sum -c 2>$tmp/md5sumcheck");
|
||||
while (<MD5SUM>) {
|
||||
if ($_ =~ /newconffile/) {
|
||||
$path = substr($_, 13);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 11);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
next;
|
||||
}
|
||||
$path = substr($_, 34);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 32);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
close(MD5SUM);
|
||||
#now check with md5sum from the dpkg package
|
||||
my $check_md5sum;
|
||||
# won't bother going into this while unless there is a reason
|
||||
if (defined "$tmp/md5sumcheck" && $md5 ne "newconffile") {
|
||||
open(MD5SUMFILE, "$tmp/md5sumcheck");
|
||||
while (<MD5SUMFILE>) {
|
||||
if ($_ !~ /no files checked/) {
|
||||
if (/failed/) {
|
||||
# Humm may be two situations watch or due to coding change
|
||||
#$check_md5sum = substr($_,39);
|
||||
$check_md5sum = substr($_,30);
|
||||
$check_md5sum =~ s/'//;
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"$check_md5sum"} = "FAILED";
|
||||
}
|
||||
elsif (/can't open/) {
|
||||
# Humm may be two situations watch or due to coding change
|
||||
#$check_md5sum = substr($_,28);
|
||||
$check_md5sum = substr($_,19);
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"$check_md5sum"} = "MISSING";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
unlink("$tmp/md5sumcheck");
|
||||
# This finishes everything
|
||||
open (LIST,"$md5sums_conf");
|
||||
while (<LIST>) {
|
||||
if ($_ =~ /newconffile/) {
|
||||
$_ = substr($_, 13);
|
||||
chomp;
|
||||
}
|
||||
else {
|
||||
$_ = substr($_, 34);
|
||||
chomp;
|
||||
}
|
||||
if (defined $path{$_}) {
|
||||
# humm file_now() not necessary here
|
||||
if (defined $md5sums{$_}) {
|
||||
print " /$_ $path{$_} $md5sums{$_}\n";
|
||||
}
|
||||
elsif ($path{$_} ne "newconffile") {
|
||||
print " /$_ $path{$_} OK";
|
||||
print "\n";
|
||||
}
|
||||
else {
|
||||
print " /$_ $path{$_}\n";
|
||||
}
|
||||
}
|
||||
} # last while
|
||||
close(LIST);
|
||||
%md5sums = ();
|
||||
%path = ();
|
||||
@path = ();
|
||||
@md5 = ();
|
||||
} # do the md5sum files even exist?
|
||||
}
|
||||
|
||||
########################
|
||||
# MD5SUMS FOR -C &| -L #
|
||||
########################
|
||||
# checking for -e $md5sums is a questionable practice because it
|
||||
# may not exist, but the conf files do.
|
||||
if ($commands->{"md5sum"} && !$commands->{"d"} &&
|
||||
(($commands->{"l"} && $commands->{"c"}) || $commands->{"l"})) {
|
||||
# I decided on three while loops, because it was the most practical
|
||||
# way to handle STDERR from md5sum, and all types of
|
||||
# experimentation didn't yield a better way of doing it, but there
|
||||
# is probably a better way.
|
||||
# first do things normally, and no chomping
|
||||
# but, first grab conf info.
|
||||
if (!defined $md5sums_conf && $commands->{"c"}) {
|
||||
$md5sums_conf = make_conf(\%commands);
|
||||
}
|
||||
# now we can process $md5sums and $md5sums_conf assuming one or
|
||||
# both actually exist
|
||||
if (defined $md5sums || defined $md5sums_conf) {
|
||||
#if ($md5sums_conf ne 1) {
|
||||
chdir("/");
|
||||
my %path;
|
||||
if ($commands->{"c"} && $md5sums_conf) {
|
||||
open (MD5SUM,"$md5sums_conf");
|
||||
}
|
||||
else {
|
||||
open (MD5SUM,"$md5sums");
|
||||
$count = 1;
|
||||
}
|
||||
while ($count <= 1) {
|
||||
if (($count == 1 && defined $md5sums) || $count == 0) {
|
||||
open (MD5SUMCHECK, "|$md5sum -c 2>$tmp/md5sumcheck");
|
||||
while (<MD5SUM>) {
|
||||
if ($_ =~ /newconffile/) {
|
||||
$path = substr($_, 13);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 11);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"/$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
next;
|
||||
}
|
||||
$path = substr($_, 34);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 32);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"/$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
close(MD5SUM);
|
||||
#now check with md5sum from the dpkg package
|
||||
my $check_md5sum;
|
||||
#my $count = 0;
|
||||
# won't bother going into this while unless there is a reason
|
||||
if (defined "$tmp/md5sumcheck" && $md5 ne "newconffile") {
|
||||
open(MD5SUMFILE, "$tmp/md5sumcheck");
|
||||
while (<MD5SUMFILE>) {
|
||||
if ($_ !~ /no files checked/) {
|
||||
if (/failed/) {
|
||||
$check_md5sum = substr($_,30);
|
||||
$check_md5sum =~ s/'//;
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"/$check_md5sum"} = "FAILED";
|
||||
}
|
||||
elsif (/can't open/) {
|
||||
$check_md5sum = substr($_,19);
|
||||
#$check_md5sum =~ s/'//;
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"/$check_md5sum"} = "MISSING";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
unlink("$tmp/md5sumcheck");
|
||||
}
|
||||
# This finishes everything
|
||||
# This prunes stuff out and assumes that *.list and *.md5sums
|
||||
# overlap.
|
||||
open (LIST,"$file");
|
||||
######
|
||||
# -L #
|
||||
######
|
||||
if ($commands->{"l"} && !$commands->{"df"}) {
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
if (!-d $_ && $argument ne "base-files") {
|
||||
my $line = $_;
|
||||
file_now(\%commands);
|
||||
md5_print(\%path,\%md5sums,$line,$count);
|
||||
}
|
||||
##############
|
||||
# BASE-FILES #
|
||||
##############
|
||||
elsif ($argument eq "base-files") {
|
||||
my $line = $_;
|
||||
md5_print(\%path,\%md5sums,$line,$count);
|
||||
}
|
||||
} # last while
|
||||
}
|
||||
#############
|
||||
# -L & --DF #
|
||||
#############
|
||||
elsif ($commands->{"l"} && $commands->{"df"}) {
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
my $line = $_;
|
||||
file_now(\%commands);
|
||||
md5_print(\%path,\%md5sums,$line,$count);
|
||||
} # last while
|
||||
}
|
||||
close(LIST);
|
||||
%md5sums = ();
|
||||
%path = ();
|
||||
@path = ();
|
||||
@md5 = ();
|
||||
$count++;
|
||||
if ($count == 1) {
|
||||
open (MD5SUM,"$md5sums") if $md5sums;
|
||||
}
|
||||
} # loop through -c or not
|
||||
} # do the md5sum files even exist?
|
||||
#}
|
||||
}
|
||||
#@@ got to watch this for -l's called directly, will allow -l to
|
||||
# be seen whether or not --md5sum is used, changed elsif to if.
|
||||
# if already found above don't use below here.
|
||||
# && ||'s tricky here
|
||||
if (-e $file && !$commands->{"d"} && (!defined $md5sums &&
|
||||
!defined $md5sums_conf) || -e $file &&
|
||||
(!$commands->{"md5sum"} && !$commands->{"d"})) {
|
||||
file_now(\%commands) if !$commands->{"f"};
|
||||
open (LIST,"$file");
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
if ($commands->{"l"} && !$commands->{"df"}) {
|
||||
if (!-d $_ && $argument ne "base-files") {
|
||||
print "$_\n";
|
||||
}
|
||||
elsif ($argument eq "base-files") {
|
||||
print "$_\n";
|
||||
}
|
||||
}
|
||||
elsif ($commands->{"l"} && $commands->{"df"}) {
|
||||
if ($argument ne "base-files") {
|
||||
print "$_\n";
|
||||
}
|
||||
elsif ($argument eq "base-files") {
|
||||
print "$_\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
########################
|
||||
# MD5SUMS FOR -C &| -D #
|
||||
########################
|
||||
# for Documentation.
|
||||
elsif ($commands->{"md5sum"} && ($commands->{"d"} || ($commands->{"d"} &&
|
||||
$commands->{"c"}))) {
|
||||
if (!defined $md5sums_conf && $commands->{"c"}) {
|
||||
$md5sums_conf = make_conf(\%commands);
|
||||
}
|
||||
# now we can process $md5sums and $md5sums_conf assuming one or
|
||||
# both actually exist
|
||||
if (defined $md5sums || defined $md5sums_conf) {
|
||||
chdir("/");
|
||||
my %path;
|
||||
if ($commands->{"c"} && $md5sums_conf) {
|
||||
open (MD5SUM,"$md5sums_conf");
|
||||
}
|
||||
else {
|
||||
open (MD5SUM,"$md5sums");
|
||||
$count = 1;
|
||||
}
|
||||
while ($count <= 1) {
|
||||
if (($count == 1 && defined $md5sums) || $count == 0) {
|
||||
open (MD5SUMCHECK, "|$md5sum -c 2>$tmp/md5sumcheck");
|
||||
while (<MD5SUM>) {
|
||||
if ($_ =~ /newconffile/) {
|
||||
$path = substr($_, 13);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 11);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"/$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
next;
|
||||
}
|
||||
$path = substr($_, 34);
|
||||
push(@path,$path);
|
||||
$md5 = substr($_, 0, 32);
|
||||
push(@md5,$md5);
|
||||
chomp $path;
|
||||
chomp $md5;
|
||||
$path{"/$path"} = $md5;
|
||||
print MD5SUMCHECK $_;
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
close(MD5SUM);
|
||||
#now check with md5sum from the dpkg package
|
||||
my $check_md5sum;
|
||||
# won't bother going into this while unless there is a reason
|
||||
if (defined "$tmp/md5sumcheck") {
|
||||
open(MD5SUMFILE, "$tmp/md5sumcheck");
|
||||
while (<MD5SUMFILE>) {
|
||||
if ($_ !~ /no files checked/) {
|
||||
if (/failed/) {
|
||||
$check_md5sum = substr($_,30);
|
||||
$check_md5sum =~ s/'//;
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"/$check_md5sum"} = "FAILED";
|
||||
}
|
||||
elsif (/can't open/) {
|
||||
$check_md5sum = substr($_,19);
|
||||
chomp $check_md5sum;
|
||||
$md5sums{"/$check_md5sum"} = "MISSING";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close(MD5SUMCHECK);
|
||||
unlink("$tmp/md5sumcheck");
|
||||
}
|
||||
# This finishes everything
|
||||
open (LIST,"$file");
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
# humm, checking for existence?
|
||||
#if (-e $_ && $argument ne "base-files") {
|
||||
if ($argument ne "base-files") {
|
||||
#@@
|
||||
######
|
||||
# -D #
|
||||
######
|
||||
if (defined $path{$_}) {
|
||||
if (defined $md5sums{$_}) {
|
||||
if ($count == 0) {
|
||||
print " $_ $path{$_} $md5sums{$_}" if $count == 0;
|
||||
print "$_ $path{$_} $md5sums{$_}" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
elsif (m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, &&
|
||||
$count == 1) {
|
||||
print " $_ $path{$_} $md5sums{$_}" if $count == 0;
|
||||
print "$_ $path{$_} $md5sums{$_}" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
elsif ($path{$_} ne "newconffile") {
|
||||
if ($count == 0) {
|
||||
print " $_ $path{$_} OK" if $count == 0;
|
||||
print "$_ $path{$_} OK" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
elsif (m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, &&
|
||||
$count == 1) {
|
||||
print " $_ $path{$_} OK" if $count == 0;
|
||||
print "$_ $path{$_} OK" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($count == 0) {
|
||||
print " $_ $path{$_}\n" if $count == 0;
|
||||
print "$_ $path{$_}\n" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
elsif (m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, &&
|
||||
$count == 1) {
|
||||
print " $_ $path{$_} OK" if $count == 0;
|
||||
print "$_ $path{$_} OK" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($count == 1) {
|
||||
if (m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, && !-d) {
|
||||
file_now(\%commands);
|
||||
print "$_\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
# humm? treated specially, hopefully.
|
||||
######################
|
||||
# BASE-FILES PACKAGE #
|
||||
######################
|
||||
elsif ($argument eq "base-files") {
|
||||
my $line = $_;
|
||||
if ($line =~ m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, ||
|
||||
defined $path{$line}) {
|
||||
md5_print(\%path,\%md5sums,$line,$count);
|
||||
}
|
||||
}
|
||||
} # another while
|
||||
close(LIST);
|
||||
%md5sums = ();
|
||||
%path = ();
|
||||
@path = ();
|
||||
@md5 = ();
|
||||
$count++;
|
||||
if ($count == 1) {
|
||||
open (MD5SUM,"$md5sums") if $md5sums;
|
||||
}
|
||||
} # loop through -c or not
|
||||
} # do the md5sum files even exist?
|
||||
}
|
||||
#@@ another important change, print --md5sum and -l together
|
||||
if (-e $file && $commands->{"d"} && (!defined $md5sums &&
|
||||
!defined $md5sums_conf) || -e $file &&
|
||||
(!$commands->{"md5sum"} && $commands->{"d"})) {
|
||||
file_now(\%commands) if !$commands->{"f"};
|
||||
#if (-e $file && $commands->{"d"}) {
|
||||
open (LIST,"$file");
|
||||
while (<LIST>) {
|
||||
chomp;
|
||||
if (m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/, && !-d) {
|
||||
print "$_\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
#if (!defined $md5sums || !defined $md5sums_conf) {
|
||||
if (!-e $file) {
|
||||
print "package $argument is not installed\n";
|
||||
}
|
||||
}
|
||||
} # if !--n
|
||||
else {
|
||||
# Let's check first if this package actually exists, files are checked
|
||||
# earlier.
|
||||
if (defined $argument) {
|
||||
if (!defined $db{"$argument"}) {
|
||||
print "package $argument is not installed\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
nfile(\%commands);
|
||||
}
|
||||
} # if defined $argument
|
||||
|
||||
untie %db;
|
||||
|
||||
|
||||
if (defined $file_now && !($commands->{"z"} ||
|
||||
$commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"})) {
|
||||
if ($commands{"x"} || $commands{"ftp"} || $commands{"source"} ||
|
||||
$commands{"source_only"} || $commands{"remove"} ||
|
||||
$commands{"r"} || $commands{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} # end sub file
|
||||
|
||||
# this manages situation involving -qlcx & -qglx
|
||||
sub file_now {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
#if (!$commands->{"g"} && !defined $file_now) {
|
||||
if (!$commands->{"g"}) {
|
||||
if ($arg_count < $#ARGV) {
|
||||
push(@arg_holder,$argument);
|
||||
# humm
|
||||
#@PACKAGES = "DEFINEDONE";
|
||||
#@PACKAGES = "$ARGV[$#ARGV]";
|
||||
$arg_count++;
|
||||
}
|
||||
else {
|
||||
@PACKAGES = @arg_holder;
|
||||
push(@PACKAGES,$argument);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($arg_count < $#stuff) {
|
||||
push(@arg_holder,$argument);
|
||||
#$arg_count++;
|
||||
}
|
||||
else {
|
||||
@PACKAGES = @arg_holder;
|
||||
push(@PACKAGES,$argument);
|
||||
}
|
||||
}
|
||||
|
||||
} # end file_now
|
||||
|
||||
# In order to run a md5sum test on configuration files directly recognized
|
||||
# by dpkg, a file with package_name-conf.md5sums is created, in addition to
|
||||
# any existing package_name.md5sums file.
|
||||
sub make_conf {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $md5sums_conf;
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
# humm, just a trap
|
||||
else {
|
||||
ndb(\%commands);
|
||||
}
|
||||
|
||||
if ($argument !~ /_/ ) {
|
||||
# I guess we can stop here here is there are no configuration
|
||||
# files
|
||||
if (defined $db{$argument}) {
|
||||
require SWIM::Info;
|
||||
SWIM::Info->import(qw(conf));
|
||||
my $orig_argument = $argument;
|
||||
$argument = $db{$argument};
|
||||
my ($conf, @conf, %conf);
|
||||
my ($m5, $dir, $thing);
|
||||
if (conf(\%commands) ne 0) {
|
||||
$conf = conf(\%commands);
|
||||
@conf = split(/\n/, $conf);
|
||||
open(PACKCONF,">$parent$base/info/$orig_argument-conf.md5sums");
|
||||
foreach (@conf) {
|
||||
$_ =~ m,( \/)(.*$),;
|
||||
($dir, $m5) = split(/ /, $2, 2);
|
||||
$thing = "$m5 $dir\n";
|
||||
print PACKCONF $thing;
|
||||
}
|
||||
close(PACKCONF);
|
||||
$md5sums_conf =
|
||||
"$parent$base/info/$orig_argument-conf.md5sums";
|
||||
return $md5sums_conf;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
untie %db;
|
||||
|
||||
} # end sub make_conf
|
||||
|
||||
|
||||
# prints out the results from the md5sum test for -l & -l --df
|
||||
sub md5_print {
|
||||
|
||||
my ($path, $md5sums, $line, $count) = @_;
|
||||
|
||||
if (defined $path->{$line}) {
|
||||
if (defined $md5sums->{$line}) {
|
||||
print " $line $path->{$line} $md5sums->{$line}" if $count == 0;
|
||||
print "$line $path->{$line} $md5sums->{$line}" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
elsif ($path->{$line} ne "newconffile") {
|
||||
print " $line $path->{$line} OK" if $count == 0;
|
||||
print "$line $path->{$line} OK" if $count == 1;
|
||||
print "\n";
|
||||
}
|
||||
else {
|
||||
print " $line $path->{$line}\n" if $count == 0;
|
||||
print "$line $path->{$line}\n" if $count == 1;
|
||||
}
|
||||
}
|
||||
elsif ($count == 1) {
|
||||
print "$line\n";
|
||||
}
|
||||
|
||||
} # end md5_print
|
||||
|
||||
|
||||
# -n The list of files/dirs belonging to a package. No md5sum here.
|
||||
sub nfile {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $ramdisk = ram_on(\%commands);
|
||||
|
||||
# Here's a case where gnu grep is faster than using open.
|
||||
if ($ramdisk eq "yes") {
|
||||
my $what = "yes";
|
||||
process_nfile($what,\%commands);
|
||||
} # if ramdisk
|
||||
|
||||
elsif ($ramdisk eq 1) {
|
||||
my $what = "no";
|
||||
process_nfile($what,\%commands);
|
||||
}
|
||||
|
||||
} # end sub nfile
|
||||
|
||||
# -n figure out --df, -d & -l using the contents db
|
||||
sub process_nfile {
|
||||
|
||||
my ($what,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $contentsdb = finddb(\%commands);
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
my ($Contents,$subject);
|
||||
|
||||
|
||||
# the + solution
|
||||
nsb(\%commands);
|
||||
$subject = (split(/\s/,$nsb{$argument}))[1];
|
||||
$argument =~ s,\+,\\\\+,g if $argument =~ m,\+,;
|
||||
untie %nsb;
|
||||
|
||||
if ($what eq "no") {
|
||||
if (-e "$contentsdb/ncontentsindex$arch$dist.deb.gz") {
|
||||
$Contents = "zgrep -E $argument\ $contentsdb/ncontentsindex$arch$dist.deb.gz|";
|
||||
}
|
||||
else {
|
||||
print "swim: stopping, cannot perform this operation without contents\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
elsif ($what eq "yes") {
|
||||
if (-e "$contentsdb/dramdisk/ncontentsindex$arch$dist.deb.gz") {
|
||||
$Contents = "zgrep -E $argument\ $contentsdb/dramdisk/ncontentsindex$arch$dist.deb.gz|";
|
||||
}
|
||||
else {
|
||||
print "swim: stopping, cannot perform this operation without contents\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
my($dirfile,$package,@dirfile,@comma,%all,%again);
|
||||
open(CONTENTSDB, "$Contents");
|
||||
while (<CONTENTSDB>) {
|
||||
# changed for >= 0.2.9 - will have to watch for these
|
||||
# guys net/sendfile, x11/xscreensaver, x11/xscreensaver,
|
||||
# graphics/ucbmpeg, admin/cfengine .. there is a space before them
|
||||
#if (/^FILE\s*LOCATION$/) {
|
||||
#while (<CONTENTSDB>) {
|
||||
if (!$commands->{"df"}) {
|
||||
# this isn't acurate for groups of packages ,,, so will use the
|
||||
# subject section instead of \b and $
|
||||
$argument =~ s,\\\\+,\\\+,g if $argument =~ m,\+,;
|
||||
if (m,$subject/$argument,) {
|
||||
######################
|
||||
# DOESN'T END WITH / #
|
||||
######################
|
||||
if ($_ !~ m,.*/\s+\w*,) {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
$dirfile = "/$dirfile";
|
||||
######
|
||||
# -L #
|
||||
######
|
||||
if (!$commands->{"d"} && $commands->{"l"}) {
|
||||
print "$dirfile\n";
|
||||
}
|
||||
######
|
||||
# -D #
|
||||
######
|
||||
elsif ($commands->{"d"}) {
|
||||
if ($dirfile =~ m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/,) {
|
||||
print "$dirfile\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
########
|
||||
# --DF #
|
||||
########
|
||||
elsif ($commands->{"df"} && $commands->{"l"} && !$commands->{"d"}) {
|
||||
$argument =~ s,\\\\+,\\\+,g if $argument =~ m,\+,;
|
||||
if (m,$subject/$argument,) {
|
||||
#if (m,\b$argument\b,) {
|
||||
|
||||
######################
|
||||
# ENDS WITH / #
|
||||
######################
|
||||
if (m,.*/\s+\w*,) {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile); $dirfile =~ s,/$,,;
|
||||
}
|
||||
######################
|
||||
# DOESN'T END WITH / #
|
||||
######################
|
||||
else {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile);
|
||||
}
|
||||
###########################
|
||||
# PROCESS INTO FILES/DIRS #
|
||||
###########################
|
||||
my ($count,$holder);
|
||||
for ($count = 0; $count <= $#dirfile; $count++) {
|
||||
if ($count == 0) {
|
||||
$holder = "/$dirfile[$count]";
|
||||
my $again = "$dirfile[$count]";
|
||||
my $all = "/.";
|
||||
$again{$again}++;
|
||||
$all{$all}++;
|
||||
if ($all{$all} == 1) {
|
||||
print "/.\n";
|
||||
}
|
||||
if ($again{$again} == 1) {
|
||||
print "/$dirfile[$count]\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$holder = $holder . "/$dirfile[$count]";
|
||||
my $again = "$holder";
|
||||
$again{$again}++;
|
||||
if ($again{$again} == 1) {
|
||||
print "$holder\n";
|
||||
}
|
||||
}
|
||||
} # end for
|
||||
}
|
||||
}
|
||||
###################
|
||||
# -D & --DF &| -L #
|
||||
###################
|
||||
elsif (($commands->{"d"} && $commands->{"df"}) ||
|
||||
$commands->{"d"} && $commands->{"df"} && $commands->{"l"}) {
|
||||
$argument =~ s,\\\\+,\\\+,g if $argument =~ m,\+,;
|
||||
if (m,$subject/$argument,) {
|
||||
#if (m,\b$argument$,) {
|
||||
|
||||
######################
|
||||
# DOESN'T END WITH / #
|
||||
######################
|
||||
if ($_ !~ m,.*/\s+\w*,) {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
$dirfile = "/$dirfile";
|
||||
######
|
||||
# -D #
|
||||
######
|
||||
if ($dirfile =~ m,/usr/doc/|/usr/share/doc/|/man[\d]/|/usr/info/|/usr/share/info/,) {
|
||||
print "$dirfile\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#}
|
||||
#}
|
||||
} # while
|
||||
close(CONTENTSDB);
|
||||
|
||||
}
|
||||
|
||||
|
||||
1;
|
358
lib/Findex.pm
Normal file
358
lib/Findex.pm
Normal file
@ -0,0 +1,358 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Findex;
|
||||
use strict;
|
||||
use SWIM::Global;
|
||||
use SWIM::Conf qw($my_number);
|
||||
use SWIM::DB_Library qw(:Xyz ib nib nsb);
|
||||
use SWIM::Info;
|
||||
use SWIM::Deps;
|
||||
use SWIM::Dir;
|
||||
use vars qw(@ISA @EXPORT_OK);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(findexer qindexer);
|
||||
|
||||
|
||||
# findexer(\%commands) and qindexer used for -a -n -f
|
||||
|
||||
# query filelist for file name.. -qfl -qal, but not -qfl(d)c ... actually
|
||||
# yes... -qlfd under certain conditions, but not with -c. And -T and
|
||||
# singular capabilities.
|
||||
sub findexer {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my @alot;
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
ib(\%commands);
|
||||
}
|
||||
else {
|
||||
my $return = nib(\%commands);
|
||||
if (!defined $return && $commands->{"a"}) {
|
||||
untie %ib;
|
||||
nsb(\%commands);
|
||||
$ib{"/."} = $nsb{"/."};
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $argument) {
|
||||
if ($commands->{"dir"}) {
|
||||
dir(\%commands);
|
||||
}
|
||||
elsif ($commands->{"f"}) {
|
||||
fir(\%commands);
|
||||
}
|
||||
if ($ib{"$argument"}){
|
||||
my $package = $ib{"$argument"};
|
||||
@alot = split(/\s/, $package);
|
||||
@PACKAGES = @alot;
|
||||
if ($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
@alot = @PACKAGES;
|
||||
if ($commands->{"total"} || $commands->{"t"}) {
|
||||
if ($commands->{"T"}) {
|
||||
foreach (@alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
# nice to print package names before file listings
|
||||
if (!$commands->{"i"} || !$commands->{"d"} || !$commands->{"c"}) {
|
||||
print "$argument\n";
|
||||
}
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
} # if -T
|
||||
elsif (which_character(\%commands)) {
|
||||
foreach (@alot) {
|
||||
my %store_commands = %commands;
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (the_character(\%commands) ne "ok") {
|
||||
print "$argument\n";
|
||||
}
|
||||
if (defined s_character(\%commands)) {}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
%commands = %store_commands;
|
||||
undef %store_commands;
|
||||
}
|
||||
}
|
||||
# no -Ts.
|
||||
foreach (@alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (defined $argument) {
|
||||
print "\n" if $commands->{"l"};
|
||||
print "$argument\n";
|
||||
}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
if ($commands->{"d"} && !$commands->{"T"} && !which_character(\%commands)) {
|
||||
print "\n" if !$commands->{"l"};
|
||||
}
|
||||
} # end not's
|
||||
} # if -t
|
||||
|
||||
|
||||
elsif ($#ARGV > $my_number) {
|
||||
my $total = $#ARGV + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
exit;
|
||||
}
|
||||
elsif ($#alot > $my_number) {
|
||||
my $total = $#alot + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
}
|
||||
|
||||
else {
|
||||
if ($commands->{"T"}) {
|
||||
foreach (@alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
print "$argument\n";
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
} # end -T
|
||||
elsif (which_character(\%commands)) {
|
||||
foreach (@alot) {
|
||||
my %store_commands = %commands;
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (the_character($argument) ne "ok") {
|
||||
print "$argument\n";
|
||||
}
|
||||
if (defined s_character(\%commands)) {}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
%commands = %store_commands;
|
||||
undef %store_commands;
|
||||
}
|
||||
} # which_character
|
||||
foreach (@alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (defined $argument) {
|
||||
print "$argument\n";
|
||||
}
|
||||
file(\%commands);
|
||||
if ($commands->{"d"} && !$commands->{"T"} && !which_character(\%commands)) {
|
||||
print "\n";
|
||||
}
|
||||
} # end not's
|
||||
} # else
|
||||
}
|
||||
else {
|
||||
$argument =~ m,.*\/(.*$),;
|
||||
if (defined $1) {
|
||||
my $file = $1;
|
||||
if (!$commands->{"n"} && -e "/usr/sbin/update-alternatives") {
|
||||
my $it = "update-alternatives --display $1|";
|
||||
open (IT,"$it") or exit;
|
||||
if (<IT> =~ /No alternatives/) {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
else {
|
||||
my @LINES = <IT>;
|
||||
print "For $argument ->\n";
|
||||
$LINES[0] =~ m,(/.*$),; $argument = $1;
|
||||
print "@LINES\n"; findexer(\%commands);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
untie %ib;
|
||||
|
||||
if (!($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"})) {
|
||||
if ($commands->{"x"} || $commands->{"ftp"} || $commands->{"source"} ||
|
||||
$commands->{"source_only"} || $commands->{"remove"} ||
|
||||
$commands->{"r"} || $commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub findexer
|
||||
|
||||
|
||||
# query description of file name..-i (-qfi)
|
||||
sub qindexer {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
require SWIM::Ag;
|
||||
SWIM::Ag->import(qw(description));
|
||||
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
|
||||
my @alot;
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
ib(\%commands);
|
||||
}
|
||||
else {
|
||||
my $return = nib(\%commands);
|
||||
if (!defined $return && $commands->{"a"}) {
|
||||
untie %ib;
|
||||
nsb(\%commands);
|
||||
$ib{"/."} = $nsb{"/."};
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $argument) {
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
|
||||
# this will be moved above for safex(\%commands)
|
||||
if ($ib{"$argument"}){
|
||||
my $package = $ib{"$argument"};
|
||||
@alot = split(/\s/, $package);
|
||||
@PACKAGES = @alot;
|
||||
if ($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
@alot = @PACKAGES;
|
||||
if ($commands->{"total"} || $commands->{"t"}) {
|
||||
foreach (@alot) {
|
||||
$argument = $_;
|
||||
description(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
elsif ($#ARGV > 0) {
|
||||
my $total = $#ARGV + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
exit;
|
||||
}
|
||||
elsif ($#alot > 0) {
|
||||
my $total = $#alot + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
}
|
||||
else {
|
||||
$argument = $package;
|
||||
description(\%commands);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$argument =~ m,.*\/(.*$),;
|
||||
if (defined $1) {
|
||||
my $file = $1;
|
||||
if (!$commands->{"n"} && -e "/usr/sbin/update-alternatives") {
|
||||
my $it = "update-alternatives --display $1|";
|
||||
open (IT,"$it") or exit;
|
||||
if (<IT> =~ /No alternatives/) {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
else {
|
||||
my @LINES = <IT>;
|
||||
print "For $argument ->\n";
|
||||
$LINES[0] =~ m,(/.*$),; $argument = $1;
|
||||
print "@LINES\n"; qindexer(\%commands);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
untie %ib;
|
||||
|
||||
|
||||
|
||||
} # end sub qindexer
|
||||
|
||||
|
||||
1;
|
62
lib/Format.pm
Normal file
62
lib/Format.pm
Normal file
@ -0,0 +1,62 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Format;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(*PRETTY *ALLGROUPS *SUBJECT *CENTER *SDS $col1 $col2 $ag1
|
||||
$ag2 $ag3 $number $subsite $subdate $subsize $subrelease
|
||||
$center $number $sdsite $sdsdate $sdsize $sdsrelease);
|
||||
|
||||
|
||||
# A nice format to make things look prettier, hopefully.
|
||||
format PRETTY =
|
||||
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
$col1, $col2
|
||||
.
|
||||
|
||||
# A format for --allgroups, shouldn't run out of room.
|
||||
format ALLGROUPS =
|
||||
@<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
$ag1, $ag2, $ag3
|
||||
.
|
||||
|
||||
# center for DF|APT call
|
||||
format SUBJECT =
|
||||
@|| @||| @||| @||||||||||| @||||||
|
||||
$number, $subsite, $subdate, $subsize, $subrelease
|
||||
|
||||
.
|
||||
|
||||
|
||||
format CENTER =
|
||||
@|||||||||||||||||||||||
|
||||
$center
|
||||
.
|
||||
|
||||
|
||||
format SDS =
|
||||
@>> @||||||||||||||||||||| @||||||||||||||||||||||||||| @|||||||| @|||||
|
||||
$number, $sdsite, $sdsdate, $sdsize, $sdsrelease
|
||||
.
|
||||
|
||||
|
||||
|
||||
1;
|
62
lib/Global.pm
Normal file
62
lib/Global.pm
Normal file
@ -0,0 +1,62 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Global;
|
||||
#use strict;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(%db $ping %ndb %ib $zing %gb $ging %sb $sing %nsb %commands
|
||||
$argument $save @stuff @PACKAGES @arg_holder $file_now
|
||||
$arg_count $aptor_count $aptor_group $swim_version);
|
||||
%EXPORT_TAGS = (
|
||||
Info => [ qw($argument %db) ]
|
||||
);
|
||||
|
||||
=pod
|
||||
|
||||
Globals used by all program, which are not related to SWIM::Conf globals.
|
||||
Most will probably be placed in SWIM::DB_Library.
|
||||
|
||||
=cut
|
||||
# Nothing to be done here.
|
||||
# these could be put into SWIM::DB_Library
|
||||
my (%db,$ping); # package.deb
|
||||
my %ndb; # npackage.deb
|
||||
my (%ib, $zing, %it); # fileindex.deb
|
||||
my (%gb, $ging); # groupindex.deb
|
||||
my (%sb, $sing); # statusindex.deb
|
||||
my %nsb; # nstatusindex.deb
|
||||
my %commands; # standard for Getopt::Long, but should usually
|
||||
# be passed from ::*, although it can be global to a module
|
||||
my $argument; # standard for package name
|
||||
my $save; #for pager
|
||||
|
||||
# Globals related to -xyz
|
||||
my @stuff; # for -g & x
|
||||
my @PACKAGES; # a replacement for @ARGV
|
||||
my @arg_holder; # helps in tricky situations -> -qxl|d
|
||||
my $file_now; # defined flag for -qlcx & -qglx for file()
|
||||
$arg_count = 0; # helps in tricky situations
|
||||
my $aptor_group; # helps when -z is called for groups
|
||||
|
||||
# Swim's version
|
||||
$swim_version = "0.3.6";
|
||||
|
||||
1;
|
73
lib/Groups.pm
Normal file
73
lib/Groups.pm
Normal file
@ -0,0 +1,73 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Groups;
|
||||
use strict;
|
||||
use SWIM::DB_Library qw(:Groups);
|
||||
use SWIM::Format;
|
||||
use SWIM::Global qw(%gb);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(allgroups);
|
||||
|
||||
|
||||
# show all the groups present on this system and exit
|
||||
sub allgroups {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if (!($commands->{"q"} || $commands->{"query"}) && $commands->{"allgroups"}) {
|
||||
print "swim: --allgroups may only be used during queries\n";
|
||||
exit;
|
||||
}
|
||||
if ($commands->{"q"} && $commands->{"allgroups"}) {
|
||||
$~ = "ALLGROUPS";
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
gb(\%commands);
|
||||
}
|
||||
else {
|
||||
ngb(\%commands);
|
||||
}
|
||||
|
||||
my @complete = sort keys %gb;
|
||||
my $three = 0;
|
||||
while ($three <= $#complete) {
|
||||
if (defined $complete[$three]) {
|
||||
$ag1 = $complete[$three];
|
||||
}
|
||||
if (defined $complete[$three + 1]) {
|
||||
$ag2 = $complete[$three + 1];
|
||||
}
|
||||
if (defined $complete[$three + 2]) {
|
||||
$ag3 = $complete[$three + 2];
|
||||
}
|
||||
write STDOUT;
|
||||
$ag1 = "";
|
||||
$ag2 = "";
|
||||
$ag3 = "";
|
||||
$three = $three + 3;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1;
|
509
lib/Indexer.pm
Normal file
509
lib/Indexer.pm
Normal file
@ -0,0 +1,509 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Indexer;
|
||||
use strict;
|
||||
use SWIM::Global;
|
||||
use SWIM::Conf qw($my_number);
|
||||
use SWIM::DB_Library qw(:Xyz ib nib nsb);
|
||||
use SWIM::Info;
|
||||
use SWIM::Pn_print;
|
||||
use SWIM::Deps;
|
||||
use SWIM::Dir;
|
||||
use vars qw(@ISA @EXPORT_OK);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(indexer);
|
||||
|
||||
|
||||
# The next few subs are provided to shorten indexer
|
||||
# for -d or -l, but not -c when -T
|
||||
sub T_indexer {
|
||||
|
||||
my ($alot,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
foreach (@$alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
# looks o.k.
|
||||
print "$argument\n";
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
if ($commands->{"d"} && !$commands->{"c"}) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
} # end sub T_indexer
|
||||
|
||||
|
||||
sub which_character_indexer {
|
||||
|
||||
my ($alot,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
foreach (@$alot) {
|
||||
my %store_commands = %commands;
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (the_character(\%commands) ne "ok") {
|
||||
print "$argument\n";
|
||||
}
|
||||
if (defined s_character(\%commands)) {}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
if ($commands->{"d"} && !$commands->{"c"}) {
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
file(\%commands);
|
||||
}
|
||||
print "\n";
|
||||
%commands = %store_commands;
|
||||
undef %store_commands;
|
||||
}
|
||||
|
||||
} # end sub which_character_indexer
|
||||
|
||||
sub noT_indexer {
|
||||
|
||||
|
||||
my ($alot,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
|
||||
foreach (@$alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (defined $argument) {
|
||||
# should be o.k., almost everything has documentation
|
||||
print "$argument\n";
|
||||
}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
if ($commands->{"d"} && !$commands->{"T"} && !which_character(\%commands)) {
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub noT_indexer
|
||||
|
||||
# different enough from noT_indexer, used when -c,-d,-l aren't called.
|
||||
sub nonoT_indexer {
|
||||
|
||||
my ($alot,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
foreach (@$alot) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
# package name will print out even if there is no script
|
||||
# definitely useful here
|
||||
singular(\%commands);
|
||||
if ($commands->{"scripts"}) {
|
||||
print "\n";
|
||||
}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
}
|
||||
|
||||
|
||||
} # end sub nonoT_indexer
|
||||
|
||||
|
||||
# when -c is called with or without -l or -d. This sub got rather huge.
|
||||
sub c_indexer {
|
||||
|
||||
my ($alot,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $arg_save;
|
||||
require SWIM::File;
|
||||
SWIM::File->import(qw(file));
|
||||
|
||||
foreach (@$alot) {
|
||||
$argument = $_;
|
||||
if (conf(\%commands) ne 0) {
|
||||
if ($commands->{"T"}) {
|
||||
# covers first argument, but not the rest.
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
print "$argument\n";
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
file(\%commands);
|
||||
#file(\%commands) if $commands->{"md5sum"};
|
||||
if (($commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"}))) {
|
||||
print "\n";
|
||||
}
|
||||
$arg_save = $argument;
|
||||
} # end "T"
|
||||
|
||||
elsif (which_character(\%commands)) {
|
||||
my %store_commands = %commands;
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (the_character(\%commands) ne "ok") {
|
||||
print "$argument\n";
|
||||
}
|
||||
if (defined s_character(\%commands)) {}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
file(\%commands);
|
||||
#file(\%commands) if $commands->{"md5sum"};
|
||||
if (($commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"}))) {
|
||||
print "\n";
|
||||
}
|
||||
%commands = %store_commands;
|
||||
undef %store_commands;
|
||||
$arg_save = $argument;
|
||||
}
|
||||
|
||||
# no Ts.
|
||||
else {
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
print "$argument\n";
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
print conf(\%commands) if !$commands->{"md5sum"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
$arg_save = $argument;
|
||||
} # end if (conf(\%commands)
|
||||
|
||||
# this spot here can determine whether or not -c overrides l&d
|
||||
# in packages which don't have conf files. it's nicer to view
|
||||
# everything. watch this..these are packages which don't have
|
||||
# conf files
|
||||
if ($commands->{"d"} || $commands->{"l"}) {
|
||||
if (defined $arg_save) {
|
||||
if ($argument ne $arg_save) {
|
||||
#if (!defined $arg_save) {
|
||||
if (conf(\%commands) ne 0) {
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
|
||||
# no conf files
|
||||
elsif (conf(\%commands) eq 0) {
|
||||
if ($commands->{"T"}) {
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
print "$argument\n";
|
||||
character(\%commands);
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands) if $commands->{"md5sum"};
|
||||
print "\n";
|
||||
} # end "T"
|
||||
|
||||
elsif (which_character(\%commands)) {
|
||||
my %store_commands = %commands;
|
||||
$argument = $_;
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
if (the_character(\%commands) ne "ok") {
|
||||
print "$argument\n";
|
||||
}
|
||||
if (defined s_character(\%commands)) {}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
%commands = %store_commands;
|
||||
undef %store_commands;
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
|
||||
# no Ts.
|
||||
else {
|
||||
if ($commands->{"scripts"} || $commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"}) {
|
||||
scripts(\%commands);
|
||||
}
|
||||
menu(\%commands) if $commands->{"menu"} || $commands->{"m"};
|
||||
copyright(\%commands) if $commands->{"copyright"};
|
||||
changelog(\%commands) if $commands->{"changelog"};
|
||||
singular(\%commands);
|
||||
if ($commands->{"scripts"}) {
|
||||
print "\n";
|
||||
}
|
||||
shlibs(\%commands) if $commands->{"shlibs"};
|
||||
file(\%commands);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} # end if ($commands->{"d"} ||
|
||||
} # end foreach
|
||||
|
||||
} # end sub c_indexer
|
||||
|
||||
|
||||
# handles -qf by itself or with -l(-d)&-c or -d by itself, and -qa by itself
|
||||
# or with -c with -d and/or -l ...essentially not -i. <file> is the
|
||||
# argument And ofcourse -T or singular capabilities.
|
||||
sub indexer {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my @alot;
|
||||
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
ib(\%commands);
|
||||
}
|
||||
else {
|
||||
my $return = nib(\%commands);
|
||||
if (!defined $return && $commands->{"a"}) {
|
||||
untie %ib;
|
||||
nsb(\%commands);
|
||||
$ib{"/."} = $nsb{"/."};
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $argument) {
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
if ($ib{"$argument"}){
|
||||
my $package = $ib{"$argument"};
|
||||
$package =~ s/\s/\n/g;
|
||||
@alot = split(/\s/, $package);
|
||||
if (defined @alot) {
|
||||
@PACKAGES = @alot;
|
||||
}
|
||||
if ($commands->{"z"} || $commands->{"ftp"}||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
|
||||
|
||||
@alot = @PACKAGES;
|
||||
if ($commands->{"total"} || $commands->{"t"}) {
|
||||
# The whole reason for the complicated if/elsif/else routines
|
||||
# below is to allow simultaneous printing of -c & -d|-l. Other
|
||||
# options can just be included within.
|
||||
|
||||
###########
|
||||
# -D & -t #
|
||||
###########
|
||||
if ($commands->{"d"} && !$commands->{"c"}) {
|
||||
if ($commands->{"T"}) {
|
||||
T_indexer(\@alot,\%commands);
|
||||
}
|
||||
elsif (which_character(\%commands)) {
|
||||
which_character_indexer(\@alot,\%commands);
|
||||
}
|
||||
# no -Ts.
|
||||
noT_indexer(\@alot,\%commands);
|
||||
}
|
||||
|
||||
#######################
|
||||
# -t BUT NOT -C,-D,-L #
|
||||
#######################
|
||||
elsif (!$commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"})) {
|
||||
if ($commands->{"T"}) {
|
||||
T_indexer(\@alot,\%commands);
|
||||
}
|
||||
elsif (which_character(\%commands)) {
|
||||
which_character_indexer(\@alot,\%commands);
|
||||
}
|
||||
# humm smail is missing mysteriously, like it never became part
|
||||
# of /.., basically, fastswim isn't placing it in long.debian.
|
||||
# no -Ts.
|
||||
else {
|
||||
nonoT_indexer(\@alot,\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
#####################
|
||||
# -t -C &| -D || -L #
|
||||
#####################
|
||||
# conf stuf. Will only show stuff related to -a or -f with conf.
|
||||
elsif (($commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"})) ||
|
||||
($commands->{"c"} && ($commands->{"d"} || $commands->{"l"}))) {
|
||||
c_indexer(\@alot,\%commands);
|
||||
} # end elsif
|
||||
}
|
||||
|
||||
#########################
|
||||
# > NUMBER FOR -t #
|
||||
##########################
|
||||
elsif ($#ARGV > $my_number) {
|
||||
my $total = $#ARGV + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
exit;
|
||||
}
|
||||
elsif ($#alot > $my_number) {
|
||||
my $total = $#alot + 1;
|
||||
print "use --total or -t to see all $total packages\n";
|
||||
}
|
||||
|
||||
# without -t
|
||||
else {
|
||||
|
||||
######
|
||||
# -D #
|
||||
######
|
||||
if ($commands->{"d"} && !$commands->{"c"}) {
|
||||
if ($commands->{"T"}) {
|
||||
T_indexer(\@alot,\%commands);
|
||||
}
|
||||
elsif (which_character(\%commands)) {
|
||||
which_character_indexer(\@alot,\%commands);
|
||||
}
|
||||
# the noties
|
||||
noT_indexer(\@alot,\%commands);
|
||||
}
|
||||
|
||||
################
|
||||
# NOT -C,-D,-L #
|
||||
################
|
||||
elsif (!$commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"})) {
|
||||
if ($commands->{"T"}) {
|
||||
T_indexer(\@alot,\%commands);
|
||||
}
|
||||
elsif (which_character(\%commands)) {
|
||||
which_character_indexer(\@alot,\%commands);
|
||||
}
|
||||
else {
|
||||
nonoT_indexer(\@alot,\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
##################
|
||||
# -C &| -D || -L #
|
||||
##################
|
||||
# conf stuf. Will only show stuff related to -a or -f with conf.
|
||||
elsif (($commands->{"c"} && (!$commands->{"d"} || !$commands->{"l"})) ||
|
||||
($commands->{"c"} && ($commands->{"d"} || $commands->{"l"}))) {
|
||||
c_indexer(\@alot,\%commands);
|
||||
}
|
||||
|
||||
} # without -t
|
||||
}
|
||||
else {
|
||||
$argument =~ m,.*\/(.*$),;
|
||||
if (defined $1) {
|
||||
my $file = $1;
|
||||
if (!$commands->{"n"} && -e "/usr/sbin/update-alternatives") {
|
||||
my $it = "update-alternatives --display $1|";
|
||||
open (IT,"$it") or exit;
|
||||
if (<IT> =~ /No alternatives/) {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
else {
|
||||
my @LINES = <IT>;
|
||||
print "For $argument ->\n";
|
||||
$LINES[0] =~ m,(/.*$),; $argument = $1;
|
||||
print "@LINES\n"; indexer(\%commands);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "file $file is not owned by any package\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
untie %ib;
|
||||
|
||||
if (defined @alot) {
|
||||
@PACKAGES = @alot;
|
||||
}
|
||||
if (!($commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"})) {
|
||||
if ($commands->{"x"} || $commands->{"ftp"} || $commands->{"source"} ||
|
||||
$commands->{"source_only"} || $commands->{"remove"} ||
|
||||
$commands->{"r"} || $commands->{"purge"}) {
|
||||
require SWIM::Safex;
|
||||
SWIM::Safex->import(qw(safex));
|
||||
safex(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub indexer
|
||||
|
||||
|
||||
1;
|
586
lib/Info.pm
Normal file
586
lib/Info.pm
Normal file
@ -0,0 +1,586 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Info;
|
||||
use strict;
|
||||
use SWIM::Conf qw(:Info);
|
||||
use SWIM::Global qw(:Info);
|
||||
use SWIM::DB_Library qw(:Xyz);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(scripts copyright changelog menu conf shlibs);
|
||||
|
||||
# scripts() copyright() changelog() menu() conf() shlibs()
|
||||
# the text stuff taken out of info for the installed system, though the
|
||||
# not-installed system in checked for, just in case.
|
||||
|
||||
# This shows all the scripts identified with a package(s). In certain
|
||||
# cases it is valuable to print a script without the name of the package,
|
||||
# so if --scripts, -a, or -t isn't called, the pure script will be
|
||||
# presented.
|
||||
sub scripts {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my ($file, $preinst, $postinst, $prerm,
|
||||
$postrm, $orig_argument);
|
||||
|
||||
|
||||
if ($commands->{"n"}) {
|
||||
print "swim: no scripts for not-installed, consider --diff\n"; exit;
|
||||
}
|
||||
|
||||
dbi(\%commands);
|
||||
|
||||
if ($argument =~ /_/) {
|
||||
$orig_argument = $argument;
|
||||
my $check = $db{"$argument"};
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {};
|
||||
}
|
||||
untie %db;
|
||||
|
||||
|
||||
# here we will print out whatever we find including the file name.
|
||||
if ($commands->{"scripts"} && !($commands->{"preinst"} ||
|
||||
$commands->{"postinst"} || $commands->{"prerm"} ||
|
||||
$commands->{"postrm"})) {
|
||||
if (defined "$parent$base/info/$argument.preinst") {
|
||||
$preinst = "$parent$base/info/$argument.preinst";
|
||||
}
|
||||
if (defined "$parent$base/info/$argument.postinst") {
|
||||
$postinst = "$parent$base/info/$argument.postinst";
|
||||
}
|
||||
if (defined "$parent$base/info/$argument.prerm") {
|
||||
$prerm = "$parent$base/info/$argument.prerm";
|
||||
}
|
||||
if (defined "$parent$base/info/$argument.postrm") {
|
||||
$postrm = "$parent$base/info/$argument.postrm";
|
||||
}
|
||||
|
||||
if (-e $preinst) {
|
||||
print "#####$argument.preinst#####\n\n";
|
||||
open (LIST,"$preinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
if (-e $postinst) {
|
||||
print "#####$argument.postinst#####\n\n";
|
||||
open (LIST,"$postinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
if (-e $prerm) {
|
||||
open (LIST,"$prerm");
|
||||
print "#####$argument.prerm#####\n\n";
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
if (-e $postrm) {
|
||||
open (LIST,"$postrm");
|
||||
print "#####$argument.postrm#####\n\n";
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
} # if scripts
|
||||
|
||||
|
||||
# from here on we just print out the particular script(s) called
|
||||
# literally with no filename, unless -a or -t is called. This is one
|
||||
# situation in which -t has a use apart from the global default. A
|
||||
|
||||
# title is printed out for singular scripts in this case.
|
||||
|
||||
if ($commands->{"preinst"}) {
|
||||
if (defined "$parent$base/info/$argument.preinst") {
|
||||
$preinst = "$parent$base/info/$argument.preinst";
|
||||
}
|
||||
if (-e $preinst) {
|
||||
if ($commands->{"a"} || $commands->{"t"}) {
|
||||
print "#####$argument.preinst#####\n\n";
|
||||
open (LIST,"$preinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
else {
|
||||
open (LIST,"$preinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($commands->{"postinst"}) {
|
||||
if (defined "$parent$base/info/$argument.postinst") {
|
||||
$postinst = "$parent$base/info/$argument.postinst";
|
||||
}
|
||||
if (-e $postinst) {
|
||||
if ($commands->{"a"} || $commands->{"t"}) {
|
||||
print "#####$argument.postinst#####\n\n";
|
||||
open (LIST,"$postinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
else {
|
||||
open (LIST,"$postinst");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($commands->{"prerm"}) {
|
||||
if (defined "$parent$base/info/$argument.prerm") {
|
||||
$prerm = "$parent$base/info/$argument.prerm";
|
||||
}
|
||||
if (-e $prerm) {
|
||||
if ($commands->{"a"} || $commands->{"t"}) {
|
||||
print "#####$argument.prerm#####\n\n";
|
||||
open (LIST,"$prerm");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
else {
|
||||
open (LIST,"$prerm");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($commands->{"postrm"}) {
|
||||
if (defined "$parent$base/info/$argument.postrm") {
|
||||
$postrm = "$parent$base/info/$argument.postrm";
|
||||
}
|
||||
if (-e $postrm) {
|
||||
if ($commands->{"a"} || $commands->{"t"}) {
|
||||
print "#####$argument.postrm#####\n\n";
|
||||
open (LIST,"$postrm");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
else {
|
||||
open (LIST,"$postrm");
|
||||
while (<LIST>) {
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$commands->{"i"}) {
|
||||
if (defined $orig_argument) {
|
||||
$argument = $orig_argument;
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub scripts
|
||||
|
||||
# show the scripts for /usr/lib/menu
|
||||
sub menu {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $filelist;
|
||||
my $orig_argument = $argument;
|
||||
my %parent;
|
||||
|
||||
if ($commands->{"n"}) {
|
||||
print "swim: no menu for not-installed, consider --diff\n"; exit;
|
||||
}
|
||||
|
||||
dbi(\%commands);
|
||||
|
||||
|
||||
if ($argument =~ /_/) {
|
||||
$orig_argument = $argument;
|
||||
my $check = $db{"$argument"};
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {};
|
||||
}
|
||||
untie %db;
|
||||
|
||||
if (defined $argument) {
|
||||
if (-e "$parent$base/info/$argument.list") {
|
||||
$filelist = "$parent$base/info/$argument.list";
|
||||
}
|
||||
if (defined $filelist) {
|
||||
# basically, re-find file/package passed to previous sub
|
||||
open(FINDMENU,"$filelist");
|
||||
while (<FINDMENU>) {
|
||||
chomp;
|
||||
if (m,^\/usr\/lib\/menu\/(.*[\w-\+\.]),) {
|
||||
if (!-d) {
|
||||
print "#####menu for $orig_argument($1)#####\n";
|
||||
open(MENU,"$_");
|
||||
while (<MENU>) {
|
||||
print;
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
close(FINDMENU);
|
||||
close(MENU);
|
||||
}
|
||||
} # defined
|
||||
|
||||
if (!$commands->{"i"}) {
|
||||
$argument = $orig_argument;
|
||||
}
|
||||
|
||||
} # end sub menu
|
||||
|
||||
|
||||
# Show changelog, default zcat. This will show all the changelogs in
|
||||
# the directory /usr/doc/package_name/, there are cases where there is
|
||||
# a debian.changelog and one provided by the individual(s) working on the
|
||||
# software, as well as a variety of other cases.
|
||||
sub changelog {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $file;
|
||||
my $orig_argument = $argument;
|
||||
|
||||
if ($commands->{"n"}) {
|
||||
print "swim: no changelog for not-installed, consider --diff\n"; exit;
|
||||
}
|
||||
|
||||
dbi(\%commands);
|
||||
|
||||
if ($argument =~ /_/) {
|
||||
$orig_argument = $argument;
|
||||
my $check = $db{"$argument"};
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {};
|
||||
}
|
||||
untie %db;
|
||||
|
||||
|
||||
# Using swim -qadt | grep -i change it looks like all the files which
|
||||
# have change in their name are changelogs when in /usr/doc/$argument,
|
||||
# sometimes there are more above, but these are the most significant.
|
||||
my @fsstnd;
|
||||
if (-e "$parent/usr/doc/$argument" &&
|
||||
-d "$parent/usr/doc/$argument") {
|
||||
my $directory = "$parent/usr/doc/$argument";
|
||||
opendir(CHANGE, "$directory") || die "I thought it existed";
|
||||
my @change = sort grep(/change/i, readdir(CHANGE));
|
||||
closedir(CHANGE);
|
||||
foreach (@change) {
|
||||
if (m,\.gz$,i) {
|
||||
push(@fsstnd,$_);
|
||||
print "#####$_ for $argument#####\n\n";
|
||||
open(ZCAT,"|$zcat") || die "swim: this option requires zcat";
|
||||
open(CHANGELOG, "$directory/$_");
|
||||
while (<CHANGELOG>) {
|
||||
print ZCAT $_;
|
||||
}
|
||||
close(ZCAT);
|
||||
close(CHANGELOG);
|
||||
print "\n";
|
||||
}
|
||||
elsif ($_ !~ m,html$|htm$|ps$|dvi$|sgml$|gs$,) {
|
||||
push(@fsstnd,$_);
|
||||
print "#####$_ for $argument#####\n\n";
|
||||
open(CHANGELOG, "$directory/$_");
|
||||
while (<CHANGELOG>) {
|
||||
print "$_";
|
||||
}
|
||||
close(CHANGELOG);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-e "$parent/usr/share/doc/$argument" &&
|
||||
-d "$parent/usr/share/doc/$argument") {
|
||||
my $directory = "$parent/usr/share/doc/$argument";
|
||||
opendir(CHANGE, "$directory") || die "I thought it existed";
|
||||
my @change = sort grep(/change/i, readdir(CHANGE));
|
||||
closedir(CHANGE);
|
||||
foreach (@change) {
|
||||
if (m,\.gz$,i) {
|
||||
my $cf = grep(m,^$_$,,@fsstnd);
|
||||
if ($cf == 0 ) {
|
||||
print "#####$_ for $argument#####\n\n";
|
||||
open(ZCAT,"|$zcat") || die "swim: this option requires zcat";
|
||||
open(CHANGELOG, "$directory/$_");
|
||||
while (<CHANGELOG>) {
|
||||
print ZCAT $_;
|
||||
}
|
||||
close(ZCAT);
|
||||
close(CHANGELOG);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
elsif ($_ !~ m,html$|htm$|ps$|dvi$|sgml$|gs$,) {
|
||||
my $cf = grep(m,^$_$,,@fsstnd);
|
||||
if ($cf == 0 ) {
|
||||
print "#####$_ for $argument#####\n\n";
|
||||
open(CHANGELOG, "$directory/$_");
|
||||
while (<CHANGELOG>) {
|
||||
print "$_";
|
||||
}
|
||||
close(CHANGELOG);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!$commands->{"i"}) {
|
||||
$argument = $orig_argument;
|
||||
}
|
||||
|
||||
} # end sub changelog
|
||||
|
||||
# Show copyright, default zcat. This will show all the copyrights in
|
||||
# the directory /usr/doc/package_name/. Rather than passing the
|
||||
# greped argument to changelog(), this subroutine was created instead which
|
||||
# keeps things sensible.
|
||||
sub copyright {
|
||||
|
||||
my $file;
|
||||
my $orig_argument = $argument;
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
|
||||
if ($commands->{"n"}) {
|
||||
print "swim: no copyright for not-installed, consider --diff\n"; exit;
|
||||
}
|
||||
|
||||
dbi(\%commands);
|
||||
|
||||
|
||||
if ($argument =~ /_/) {
|
||||
$orig_argument = $argument;
|
||||
my $check = $db{"$argument"};
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {};
|
||||
}
|
||||
untie %db;
|
||||
|
||||
|
||||
# Using swim -qadt | grep -i copy it looks like all the files which
|
||||
# have copy in their name are generally copyrights when in
|
||||
# /usr/doc/$argument, sometimes there are more above, but these are
|
||||
# the most significant.
|
||||
my @fsstnd;
|
||||
if (-e "$parent/usr/doc/$argument" &&
|
||||
-d "$parent/usr/doc/$argument") {
|
||||
my $directory = "$parent/usr/doc/$argument";
|
||||
opendir(CHANGE, "$directory") || die "I thought it existed";
|
||||
my @change = sort grep(/copy|license/i, readdir(CHANGE));
|
||||
closedir(CHANGE);
|
||||
foreach (@change) {
|
||||
if (defined $_) {
|
||||
if (m,\.gz$,i) {
|
||||
push(@fsstnd,$_);
|
||||
print "#####$_ for $orig_argument#####\n\n";
|
||||
open(ZCAT,"|$zcat") || die "swim: this option requires zcat";
|
||||
open(COPYRIGHT, "$directory/$_");
|
||||
while (<COPYRIGHT>) {
|
||||
print ZCAT $_;
|
||||
}
|
||||
# Sometimes these next two mysteriously open, and don't close
|
||||
# even when no previous gz file was found, causing error output,
|
||||
# but doesn't effect what's trying to be accomplished. Doesn't
|
||||
# happen with changelog().
|
||||
close(ZCAT);
|
||||
close(COPYRIGHT);
|
||||
print "\n";
|
||||
}
|
||||
elsif ($_ !~ m,html$|htm$|ps$|dvi$|sgml$|gs$,) {
|
||||
push(@fsstnd,$_);
|
||||
print "#####$_ for $orig_argument#####\n\n";
|
||||
open(COPYRIGHT, "$directory/$_");
|
||||
while (<COPYRIGHT>) {
|
||||
print "$_";
|
||||
}
|
||||
close(COPYRIGHT);
|
||||
print "\n";
|
||||
}
|
||||
} # if defined
|
||||
}
|
||||
}
|
||||
|
||||
if (-e "$parent/usr/share/doc/$argument" &&
|
||||
-d "$parent/usr/share/doc/$argument") {
|
||||
my $directory = "$parent/usr/share/doc/$argument";
|
||||
opendir(CHANGE, "$directory") || die "I thought it existed";
|
||||
my @change = sort grep(/copy|license/i, readdir(CHANGE));
|
||||
closedir(CHANGE);
|
||||
foreach (@change) {
|
||||
if (defined $_) {
|
||||
if (m,\.gz$,i) {
|
||||
my $cf = grep(m,^$_$,,@fsstnd);
|
||||
if ($cf == 0 ) {
|
||||
print "#####$_ for $orig_argument#####\n\n";
|
||||
open(ZCAT,"|$zcat") || die "swim: this option requires zcat";
|
||||
open(COPYRIGHT, "$directory/$_");
|
||||
while (<COPYRIGHT>) {
|
||||
print ZCAT $_;
|
||||
}
|
||||
# Sometimes these next two mysteriously open, and don't close
|
||||
# even when no previous gz file was found, causing error output,
|
||||
# but doesn't effect what's trying to be accomplished. Doesn't
|
||||
# happen with changelog().
|
||||
close(ZCAT);
|
||||
close(COPYRIGHT);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
elsif ($_ !~ m,html$|htm$|ps$|dvi$|sgml$|gs$,) {
|
||||
my $cf = grep(m,^$_$,,@fsstnd);
|
||||
if ($cf == 0 ) {
|
||||
print "#####$_ for $orig_argument#####\n\n";
|
||||
open(COPYRIGHT, "$directory/$_");
|
||||
while (<COPYRIGHT>) {
|
||||
print "$_";
|
||||
}
|
||||
close(COPYRIGHT);
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
} # if defined
|
||||
}
|
||||
}
|
||||
|
||||
if (!$commands->{"i"}) {
|
||||
$argument = $orig_argument;
|
||||
}
|
||||
|
||||
} # end copyright
|
||||
|
||||
# process the database for the configuration files
|
||||
sub conf {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
# added for -xyz, but not necessary
|
||||
if (defined $argument) {
|
||||
if ($argument !~ /_/) {
|
||||
if (defined $db{$argument}) {
|
||||
$argument = $db{$argument};
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
}
|
||||
else {}
|
||||
if (defined $argument) {
|
||||
my $conf = $argument . "CONF";
|
||||
if (defined $db{$conf}) {
|
||||
return $db{$conf};
|
||||
}
|
||||
else { return 0; }
|
||||
}
|
||||
untie %db;
|
||||
} # end sub conf
|
||||
|
||||
# shared libraries provided by the package
|
||||
sub shlibs {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my $shlibs;
|
||||
my $orig_argument;
|
||||
|
||||
if ($commands->{"n"}) {
|
||||
print "catswim: no shlibs for not-installed, consider --diff\n"; exit;
|
||||
}
|
||||
|
||||
|
||||
dbi(\%commands);
|
||||
|
||||
if (defined $argument) {
|
||||
if ($argument =~ /_/) {
|
||||
$orig_argument = $argument;
|
||||
my $check;
|
||||
if (defined $db{"$argument"}) {
|
||||
$check = $db{"$argument"};
|
||||
}
|
||||
$argument =~ m,(^.*)_(.*$),;
|
||||
if (defined $check) {
|
||||
$argument = $1;
|
||||
}
|
||||
else {}
|
||||
}
|
||||
else {
|
||||
$orig_argument = $argument;
|
||||
}
|
||||
}
|
||||
untie %db;
|
||||
|
||||
if (defined $argument) {
|
||||
if (-e "$parent$base/info/$argument.shlibs") {
|
||||
$shlibs = "$parent$base/info/$argument.shlibs";
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $shlibs) {
|
||||
print "Shlibs:\n";
|
||||
open(SHLIBS,"$shlibs");
|
||||
while (<SHLIBS>) {
|
||||
if ($_ !~ m,^\n$,) {
|
||||
print;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$argument = $orig_argument;
|
||||
|
||||
} # end sub shlibs
|
||||
|
||||
|
||||
1;
|
144
lib/Library.pm
Normal file
144
lib/Library.pm
Normal file
@ -0,0 +1,144 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Library;
|
||||
use strict;
|
||||
use SWIM::Conf;
|
||||
use SWIM::Global;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(which_archdist finddb root compress_contents);
|
||||
|
||||
|
||||
# functions which do not use DB_File which_archdist() finddb() root()
|
||||
|
||||
# which archictecture and distribution does this database involve
|
||||
sub which_archdist {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
my ($arch,$dist);
|
||||
#if ($commands->{"initndb"} || $commands->{"rebuildndb"}) {
|
||||
if ($commands->{"arch"}) {
|
||||
$arch = "-" . $commands->{"arch"};
|
||||
}
|
||||
else {
|
||||
$arch = "-$architecture";
|
||||
}
|
||||
|
||||
if ($commands->{"dists"}) {
|
||||
$dist = "-" . $commands->{"dists"};
|
||||
}
|
||||
else {
|
||||
$dist = "-$distribution";
|
||||
}
|
||||
return ($arch,$dist);
|
||||
# }
|
||||
|
||||
} # end sub which_archdist
|
||||
|
||||
|
||||
# finding any database
|
||||
sub finddb {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
my $fileplace;
|
||||
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$fileplace = "$parent$library";
|
||||
return $fileplace;
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$fileplace = "$parent$base";
|
||||
return $fileplace;
|
||||
}
|
||||
|
||||
} # end sub finddb
|
||||
|
||||
# This gives the option to be able to used -d & -l, but not -f, by only
|
||||
# copying Contents over to contentsindex*.deb.gz. This the fast way.
|
||||
sub compress_contents {
|
||||
|
||||
my ($Contents,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $contentsdb = finddb(\%commands);
|
||||
my($arch,$dist) = which_archdist(\%commands);
|
||||
my $contentsindex = "$contentsdb/ncontentsindex$arch$dist.deb";
|
||||
my ($contentsindexgz, $mtime);
|
||||
if (-e "$contentsdb/ncontentsindex$arch$dist.deb.gz") {
|
||||
$contentsindexgz = "$contentsdb/ncontentsindex$arch$dist.deb.gz";
|
||||
$mtime = (stat("$contentsindexgz"))[9];
|
||||
}
|
||||
else {
|
||||
$contentsindexgz = "$contentsdb/ncontentsindex$arch$dist.deb.gz";
|
||||
}
|
||||
|
||||
my $ex;
|
||||
my $Contents_mtime = (stat("$Contents"))[9];
|
||||
my $BContents = $Contents;
|
||||
$Contents = -B $Contents || $Contents =~ m,\.(gz|Z)$, ?
|
||||
"$gzip -dc $Contents|" : "cat $Contents|";
|
||||
if (defined $mtime) {
|
||||
if ($mtime == $Contents_mtime) {
|
||||
print "Same Contents files, won't compress\n";
|
||||
exit if !$commands->{"ndb"};
|
||||
$ex = "stop";
|
||||
}
|
||||
else {
|
||||
unlink($contentsindexgz);
|
||||
}
|
||||
}
|
||||
if (!defined $ex) {
|
||||
print "Copying new Contents\n";
|
||||
#system $copy, $BContents, $contentsindexgz;
|
||||
|
||||
# changed for >= 0.2.9
|
||||
# changed again >= 0.3.4
|
||||
open(CONTENTS, "$Contents") or die "where is it?\n";
|
||||
open(CONTENTSDB,">$contentsindex");
|
||||
while (<CONTENTS>) {
|
||||
##if (/^FILE\s*LOCATION$/) {
|
||||
##while (<CONTENTS>) {
|
||||
s,^(\./)+,,; # filter for Debians altered dir structure
|
||||
print CONTENTSDB $_;
|
||||
##}
|
||||
##}
|
||||
}
|
||||
print "Compressing Contents\n";
|
||||
# added -f just in case
|
||||
system "$gzip", "-f", "-9", "$contentsindex";
|
||||
utime(time,$Contents_mtime,$contentsindexgz);
|
||||
}
|
||||
|
||||
} # end sub compress_contents
|
||||
|
||||
# for / files
|
||||
sub root {
|
||||
|
||||
if ($argument eq "/") {
|
||||
$argument = "/.";
|
||||
}
|
||||
} # end sub root
|
||||
|
||||
|
||||
1;
|
268
lib/MD.pm
Normal file
268
lib/MD.pm
Normal file
@ -0,0 +1,268 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::MD;
|
||||
use strict;
|
||||
use SWIM::Conf qw(:Path $splt);
|
||||
use SWIM::DB_Library qw(:Md);
|
||||
use SWIM::Library;
|
||||
use SWIM::Global;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(process_md);
|
||||
|
||||
# process_md used by both SWIM::DB_Init and SWIM::NDB_Init
|
||||
|
||||
=pod
|
||||
|
||||
Because many files and directories exist more than once, and it would be
|
||||
kind of cool to go up to a directory /usr/bin or /usr/bin/ and do a
|
||||
swim -qf and see all the packages that populate that directory...
|
||||
multi-dimensional is the way to go.
|
||||
|
||||
=cut
|
||||
|
||||
sub process_md {
|
||||
|
||||
print "File Database is being made\n";
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my @ppackage;
|
||||
my %md;
|
||||
my @md;
|
||||
my @mi;
|
||||
my $thingy;
|
||||
my @name;
|
||||
my $count = 0;
|
||||
my $count1 = 1;
|
||||
|
||||
my($place) = finddb(\%commands);
|
||||
|
||||
# Let's determine what architecture and distribution this person is
|
||||
# interested in.
|
||||
my ($arch, $dist, $not);
|
||||
if ($commands->{"initndb"} || $commands->{"rebuildndb"}) {
|
||||
($arch,$dist) = which_archdist(\%commands);
|
||||
$not = "n";
|
||||
}
|
||||
else {
|
||||
$arch = "";
|
||||
$dist = "";
|
||||
$not = "";
|
||||
}
|
||||
my $fileindex = $not . "fileindex";
|
||||
|
||||
|
||||
# Now we process the files made from the massive array, and create
|
||||
# fileindex.deb or nfileindex.deb
|
||||
# Let's just use split, and will allow for customized line adj.
|
||||
# 25000 is the default
|
||||
if ($commands->{"split_data"}) {
|
||||
my $split = $commands->{"split_data"};
|
||||
system("$splt -l $split $tmp/big.debian $tmp/DEBIAN");
|
||||
}
|
||||
else {
|
||||
# Seems like a good default
|
||||
system("$splt -l 25000 $tmp/big.debian $tmp/DEBIAN");
|
||||
}
|
||||
@ppackage = <$tmp/DEBIAN*>;
|
||||
# It's unlikely this file will ever get too massive.
|
||||
push(@ppackage, "$tmp/long.debian");
|
||||
print " Create the database\n";
|
||||
foreach $thingy (@ppackage) {
|
||||
open(PARTS, "$thingy");
|
||||
while (<PARTS>) {
|
||||
my @c;
|
||||
@md = split(/ -> /,$_);
|
||||
if (defined($md[1])) {
|
||||
chomp $md[0];
|
||||
chomp $md[1];
|
||||
@c = split(/\s/, $md[1]);
|
||||
}
|
||||
push(@mi,$md[0]);
|
||||
push(@mi,$md[1]);
|
||||
} # while
|
||||
print " $thingy\n";
|
||||
print " wait a few seconds\n";
|
||||
my $zing;
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$zing = tie %md, 'DB_File',"$parent$library/$fileindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$zing = tie %md, 'DB_File',"$parent$base/$fileindex$arch$dist.deb"
|
||||
or die "DB_File: $!";
|
||||
}
|
||||
while ($count <= $#mi) {
|
||||
$zing->put($mi[$count], $mi[$count1]);
|
||||
$count = $count + 2;
|
||||
$count1 = $count1 + 2;
|
||||
}
|
||||
undef $zing;
|
||||
untie %md;
|
||||
undef %md;
|
||||
@mi = ();
|
||||
@md = ();
|
||||
$count = 0;
|
||||
$count1 = 1;
|
||||
close(PARTS);
|
||||
} # end foreach
|
||||
|
||||
# now we get to take into account deinstall:ok:config-files
|
||||
# situations for an installed system.
|
||||
if ($commands->{"initdb"} || $commands->{"rebuilddb"}) {
|
||||
sb(\%$commands); ib(\%commands); my $yich;
|
||||
foreach (values %sb) {
|
||||
my $zit; my ($nit,$yit) = (split(/\s/,$_))[0,3];
|
||||
if ($yit eq "deinstall:ok:config-files" ||
|
||||
$yit eq "purge:ok:config-files") {
|
||||
($zit = $nit) =~ s,\+,\\\+,;
|
||||
if ($ib{"/."} !~ m,$zit,) {
|
||||
if (!defined $yich) {
|
||||
$yich = $nit;
|
||||
}
|
||||
else {
|
||||
$yich = $yich . " $nit";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$ib{"/."} = $ib{"/."} . " $yich";
|
||||
}
|
||||
|
||||
# after much experimentation it turns out that a flat text file
|
||||
# is much faster for this particular application. This also
|
||||
# creates the hash database reference for -db or -i.
|
||||
my $searchindex = $not . "searchindex";
|
||||
open(FLATFILE, ">$place/$searchindex$arch$dist.deb");
|
||||
print "Create the powersearch flat database\n";
|
||||
foreach $thingy (@ppackage) {
|
||||
if ($thingy ne "$tmp/long.debian") {
|
||||
open(PARTS, "$thingy");
|
||||
while (<PARTS>) {
|
||||
@md = split(/ -> /,$_);
|
||||
if (defined($md[1])) {
|
||||
chomp $md[0];
|
||||
}
|
||||
push(@mi,$md[0]);
|
||||
} # while
|
||||
}
|
||||
print " $thingy\n";
|
||||
print " wait a few seconds\n";
|
||||
while ($count <= $#mi) {
|
||||
print FLATFILE "$mi[$count]\n";
|
||||
$count++;
|
||||
}
|
||||
$count = 0;
|
||||
@mi = ();
|
||||
@md = ();
|
||||
close(PARTS);
|
||||
} # end foreach
|
||||
close(FLATFILE);
|
||||
|
||||
# This creates the flatfile with the directories for --powersearch
|
||||
# --dir, which is probably a rare match in most cases. This doesn't
|
||||
# create a hash reference database for --db and -i because the only
|
||||
# package which could benifit from this is base-files, but it has
|
||||
# configuaration files, on the other hand RedHat has at least one
|
||||
# package without directories or files, but this is Debian.
|
||||
my $dirindex = $not . "dirindex";
|
||||
open(FLATFILE, ">$place/$dirindex$arch$dist.deb");
|
||||
print "Create the powersearch flat directory database\n";
|
||||
open(PARTS, "$ppackage[$#ppackage]");
|
||||
while (<PARTS>) {
|
||||
@md = split(/ -> /,$_);
|
||||
if (defined($md[1])) {
|
||||
chomp $md[0];
|
||||
}
|
||||
push(@mi,$md[0]);
|
||||
} # while
|
||||
print " $ppackage[$#ppackage]\n";
|
||||
while ($count <= $#mi) {
|
||||
print FLATFILE "$mi[$count]\n";
|
||||
$count++;
|
||||
}
|
||||
$count = 0;
|
||||
@mi = ();
|
||||
@md = ();
|
||||
close(PARTS);
|
||||
close(FLATFILE);
|
||||
|
||||
# compare nstatusindex*.deb to /. from nfileindex*.deb to find out if
|
||||
# any of the packages in Packages weren't represented in the Contents
|
||||
# file. This is different than the earlier report which shows packages
|
||||
# which weren't in Packages but were in Contents. This list is kept,
|
||||
# and used again in a future --ndb run to make the matches, if they
|
||||
# exist.
|
||||
if ($commands->{"initndb"} || $commands->{"rebuildndb"}) {
|
||||
nsb(\%$commands);
|
||||
nzing(\%commands);
|
||||
my @fileindex = split(/\s/,$ib{"/."});
|
||||
my @statusindex = split(/\s/,$nsb{"/."});
|
||||
if ($#fileindex < $#statusindex) {
|
||||
my $place = finddb(\%commands);
|
||||
open(DIFF, ">$place/.packagesdiff$arch$dist.deb")
|
||||
or warn "couldn't create diff file\n";
|
||||
my %uniques;
|
||||
@uniques{@fileindex} = ();
|
||||
foreach (@statusindex) {
|
||||
# no sense putting non-US or experimental in here unless this
|
||||
# is what is wanted. Only need to check for group non-us/*
|
||||
if (!$commands->{"nue"}) {
|
||||
my $name = (split(/_/,$_))[0];
|
||||
if (defined $nsb{$name}) {
|
||||
next if (split(/\s/,$nsb{$name}))[1] =~ m,non-us,;
|
||||
}
|
||||
if ($dist eq "experimental") {
|
||||
next;
|
||||
}
|
||||
}
|
||||
elsif ($dist eq "experimental") {
|
||||
if (!$commands->{"nue"}) {
|
||||
my $name = (split(/_/,$_))[0];
|
||||
if (defined $nsb{$name}) {
|
||||
next if (split(/\s/,$nsb{$name}))[1] =~ m,non-us,;
|
||||
}
|
||||
}
|
||||
}
|
||||
print DIFF "$_\n" unless exists $uniques{$_};
|
||||
}
|
||||
$zing->del("/.");
|
||||
$zing->put("/.",$nsb{"/."});
|
||||
}
|
||||
} # end if
|
||||
|
||||
# Will unlink transfer.deb, big.debian, long.debian.
|
||||
unlink(<$tmp/DEBIAN*>);
|
||||
unlink("$tmp/transfer.deb");
|
||||
unlink("$tmp/big.debian");
|
||||
unlink("$tmp/long.debian");
|
||||
|
||||
|
||||
#!!!
|
||||
print " over and out\n";
|
||||
print scalar(localtime), "\n";
|
||||
|
||||
} # end sub process_md
|
||||
|
||||
|
||||
1;
|
1834
lib/NDB.pm
Normal file
1834
lib/NDB.pm
Normal file
File diff suppressed because it is too large
Load Diff
251
lib/NDB_File.pm
Normal file
251
lib/NDB_File.pm
Normal file
@ -0,0 +1,251 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
package SWIM::NDB_File;
|
||||
use strict;
|
||||
use SWIM::DB_Library qw(ram_on); # nzing nsb
|
||||
use SWIM::Library;
|
||||
use SWIM::Global qw($argument); # %ib $zing %nsb
|
||||
use SWIM::Conf qw($pwd $tmp);
|
||||
use SWIM::Dir;
|
||||
use SWIM::Ramdisk;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(noram ncontents_exist find_contents remove_add_nfile);
|
||||
|
||||
# This program handles updating nfileindex-arch-dists.deb
|
||||
|
||||
# This checks if the ramdisk is on, we will want to turn it off, if it is.
|
||||
sub noram {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $ramdisk = ram_on(\%commands);
|
||||
|
||||
if ($ramdisk eq "yes") {
|
||||
my $what = "yes";
|
||||
$commands{"ramdiskoff"} = 1;
|
||||
ramdisk(\%commands);
|
||||
} # if ramdisk
|
||||
|
||||
} # end sub nfile
|
||||
|
||||
# This will set-up the argument for ncontents if it can be found.
|
||||
sub ncontents_exist {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my $contentsdb = finddb(\%commands);
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
|
||||
|
||||
if (-e "$contentsdb/ncontentsindex$arch$dist.deb.gz") {
|
||||
if (-e "$contentsdb/ndirindex$arch$dist.deb.gz") {
|
||||
unlink("$contentsdb/ndirindex$arch$dist.deb.gz");
|
||||
}
|
||||
if (-e "$contentsdb/nsearchindex$arch$dist.deb.gz") {
|
||||
unlink("$contentsdb/nsearchindex$arch$dist.deb.gz");
|
||||
}
|
||||
return " $contentsdb/ncontentsindex$arch$dist.deb.gz|";
|
||||
}
|
||||
else {
|
||||
return "no";
|
||||
}
|
||||
|
||||
} # end sub ncontents_exist
|
||||
|
||||
# Find where the new Contents is on the on the command line vs the old
|
||||
# Contents database (when the FDB argument isn't used).
|
||||
sub find_contents {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
############
|
||||
# CONTENTS #
|
||||
############
|
||||
# Figure out where Contents is
|
||||
if ($commands->{"Contents"}) {
|
||||
my ($Contents,$FDB);
|
||||
for ($commands->{"Contents"}) {
|
||||
|
||||
###############
|
||||
# SITUATION 0 #
|
||||
###############
|
||||
# this doesn't work to well for anything less simple than ../../
|
||||
if (m,^\.\./|^\.\.$,) {
|
||||
if ($_ !~ m,/[\w-+]+/[\.\$\^\+\?\*\[\]\w-]*$,) {
|
||||
my $dd; tr/\/// ? ($dd = tr/\///) : ($dd = 1);
|
||||
my @pwd = split(m,/,,$pwd);
|
||||
s,\.\./,,g;
|
||||
my $tpwd = "";
|
||||
for (1 .. $#pwd - $dd) {
|
||||
$_ == 1 ? ($tpwd = "/$pwd[$_]")
|
||||
: (x$tpwd = $tpwd . "/$pwd[$_]");
|
||||
}
|
||||
$_ ne ".." ? ($Contents = "$tpwd/$_") : ($Contents = "$tpwd/");
|
||||
}
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
}
|
||||
|
||||
###############
|
||||
# SITUATION I #
|
||||
###############
|
||||
elsif ( m,\/,) {
|
||||
$Contents = $_;
|
||||
if ($Contents =~ m,^\.\/.*,) {
|
||||
if ($pwd !~ m,^\/$,) {
|
||||
$Contents =~ m,^\.([^\.].*$),;
|
||||
$Contents = "$pwd$1";
|
||||
}
|
||||
else {
|
||||
$Contents =~ m,^\.([^\.].*$),;
|
||||
$Contents = "$1";
|
||||
}
|
||||
}
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
}
|
||||
|
||||
################
|
||||
# SITUATION II #
|
||||
################
|
||||
elsif ($pwd =~ m,^\/$,) {
|
||||
$Contents = "/$_";
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
}
|
||||
|
||||
#################
|
||||
# SITUATION III #
|
||||
#################
|
||||
else {
|
||||
$Contents = "$pwd/$_";
|
||||
if ($Contents =~ m,\.$,) {
|
||||
$Contents =~ m,(.*)\.$,;
|
||||
$Contents = $1;
|
||||
}
|
||||
dir(\%commands);
|
||||
fir(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
return $Contents;
|
||||
|
||||
} # if Contents
|
||||
|
||||
} # end sub find_contents
|
||||
|
||||
# figure out --df and remove from nfileindex-arch-dists.deb
|
||||
sub remove_add_nfile {
|
||||
|
||||
my ($argument,$Contents,$subject,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
#my $contentsdb = finddb(\%commands);
|
||||
#my ($arch,$dist) = which_archdist(\%commands);
|
||||
##nzing(\%commands);
|
||||
|
||||
# the + solution
|
||||
$argument =~ s,\+,\\\\+,g if $argument =~ m,\+,;
|
||||
$Contents = "zgrep -E $argument\ $Contents";
|
||||
|
||||
my($dirfile,$package,@dirfile,%all,%again,
|
||||
@package_match,@more_things,@file);
|
||||
open(CONTENTSDB, "$Contents");
|
||||
while (<CONTENTSDB>) {
|
||||
# changed for >= 0.2.9
|
||||
#if (/^FILE\s*LOCATION$/) {
|
||||
#while (<CONTENTSDB>) {
|
||||
########
|
||||
# --DF #
|
||||
########
|
||||
$argument =~ s,\\\\+,\\\+,g if $argument =~ m,\+,;
|
||||
if (m,$subject/$argument,) {
|
||||
#if (m,\b$argument\b,) {
|
||||
|
||||
######################
|
||||
# ENDS WITH / #
|
||||
######################
|
||||
if (m,.*/\s+\w*,) {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile); $dirfile =~ s,/$,,;
|
||||
}
|
||||
######################
|
||||
# DOESN'T END WITH / #
|
||||
######################
|
||||
else {
|
||||
($dirfile,$package) = split(/\s+/,$_,2);
|
||||
if ($package !~ m,^[a-z0-9-]*/.*$|^[a-z0-9-]*/.*/.*$,) {
|
||||
my @more_things = split(/\s+/,$package);
|
||||
$package = $more_things[$#more_things];
|
||||
(my $backpackage = $package) =~ s,\+,\\+,g;
|
||||
my @dirfile = split(/\s+$backpackage/,$_);
|
||||
$dirfile = $dirfile[0];
|
||||
}
|
||||
@dirfile = split(/\//,$dirfile);
|
||||
}
|
||||
###########################
|
||||
# PROCESS INTO FILES/DIRS #
|
||||
###########################
|
||||
my ($count,$holder);
|
||||
for ($count = 0; $count <= $#dirfile; $count++) {
|
||||
if ($count == 0) {
|
||||
$holder = "/$dirfile[$count]";
|
||||
my $again = "$dirfile[$count]";
|
||||
$again{$again}++;
|
||||
#my $all = "/.";
|
||||
#$all{$all}++;
|
||||
#if ($all{$all} == 1) {
|
||||
#print FILELIST "/.\n";
|
||||
#}
|
||||
if ($again{$again} == 1) {
|
||||
push(@file,"/$dirfile[$count]");
|
||||
#print FILELIST "/$dirfile[$count]\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$holder = $holder . "/$dirfile[$count]";
|
||||
my $again = "$holder";
|
||||
$again{$again}++;
|
||||
if ($again{$again} == 1) {
|
||||
push(@file,"$holder");
|
||||
#print FILELIST "$holder\n";
|
||||
}
|
||||
}
|
||||
} # end for
|
||||
}
|
||||
undef @package_match;
|
||||
#}
|
||||
#}
|
||||
} # while
|
||||
close(CONTENTSDB);
|
||||
undef @more_things; undef @dirfile; undef %again; undef %all;
|
||||
return @file;
|
||||
|
||||
|
||||
} # end sub remove_nfile
|
||||
|
||||
1;
|
2366
lib/NDB_Init.pm
Normal file
2366
lib/NDB_Init.pm
Normal file
File diff suppressed because it is too large
Load Diff
97
lib/Pn_print.pm
Normal file
97
lib/Pn_print.pm
Normal file
@ -0,0 +1,97 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Pn_print;
|
||||
use strict;
|
||||
use SWIM::Global qw($argument);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(singular);
|
||||
|
||||
|
||||
# There are times when it is good to print out the "package name_version"
|
||||
# and there are times when it is unecessary. This sub tries to resolve
|
||||
# these situations, basically it's printme()
|
||||
sub singular {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
# for files, dirs, or groups
|
||||
if (($commands->{"f"} || $commands->{"dir"} || $commands->{"g"} ||
|
||||
$commands->{"q"}) &&
|
||||
!($commands->{"i"} || $commands->{"l"} ||
|
||||
$commands->{"df"} || $commands->{"d"} || $commands->{"c"} ||
|
||||
$commands->{"scripts"} || $commands->{"preinst"} || $commands->{"postinst"} ||
|
||||
$commands->{"prerm"} || $commands->{"postrm"} || $commands->{"T"} ||
|
||||
$commands->{"pre_depends"} || $commands->{"depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"provides"} || $commands->{"replaces"} ||
|
||||
$commands->{"conflicts"} || $commands->{"requires"} ||
|
||||
$commands->{"changelog"} || $commands->{"m"} || $commands->{"menu"} ||
|
||||
$commands->{"copyright"})) {
|
||||
print "$argument\n";
|
||||
}
|
||||
elsif (($commands->{"f"} || $commands->{"dir"} || $commands->{"g"} ||
|
||||
$commands->{"q"}) &&
|
||||
$commands {"c"} && !($commands->{"i"} ||
|
||||
$commands->{"df"} || $commands->{"d"} || $commands->{"l"} ||
|
||||
$commands->{"scripts"} || $commands->{"preinst"} || $commands->{"postinst"} ||
|
||||
$commands->{"prerm"} || $commands->{"postrm"} || $commands->{"T"} &&
|
||||
$commands->{"pre_depends"} || $commands->{"depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"provides"} || $commands->{"replaces"} ||
|
||||
$commands->{"conflicts"} || $commands->{"requires"} ||
|
||||
$commands->{"changelog"} || $commands->{"m"} || $commands->{"menu"} ||
|
||||
$commands->{"copyright"})) {
|
||||
print "$argument\n";
|
||||
}
|
||||
elsif (($commands->{"f"} || $commands->{"dir"} || $commands->{"g"} ||
|
||||
$commands->{"q"}) &&
|
||||
$commands {"c"} && $commands->{"d"} &&
|
||||
!($commands->{"i"} || $commands->{"df"} || $commands->{"l"} ||
|
||||
$commands->{"scripts"} || $commands->{"preinst"} || $commands->{"postinst"} ||
|
||||
$commands->{"prerm"} || $commands->{"postrm"} || $commands->{"T"} ||
|
||||
$commands->{"pre_depends"} || $commands->{"depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"provides"} || $commands->{"replaces"} ||
|
||||
$commands->{"conflicts"} || $commands->{"requires"} ||
|
||||
$commands->{"changelog"} || $commands->{"m"} || $commands->{"menu"} ||
|
||||
$commands->{"copyright"})) {
|
||||
print "$argument\n";
|
||||
}
|
||||
elsif (($commands->{"f"} || $commands->{"dir"} || $commands->{"g"} ||
|
||||
$commands->{"q"}) &&
|
||||
$commands {"c"} && ($commands->{"d"} ||
|
||||
$commands->{"l"}) && !($commands->{"i"} || $commands->{"df"} ||
|
||||
$commands->{"scripts"} || $commands->{"preinst"} || $commands->{"postinst"} ||
|
||||
$commands->{"prerm"} || $commands->{"postrm"} || $commands->{"T"} ||
|
||||
$commands->{"pre_depends"} || $commands->{"depends"} ||
|
||||
$commands->{"recommends"} || $commands->{"suggests"} ||
|
||||
$commands->{"provides"} || $commands->{"replaces"} ||
|
||||
$commands->{"conflicts"} || $commands->{"requires"} ||
|
||||
$commands->{"changelog"} || $commands->{"m"} || $commands->{"menu"} ||
|
||||
$commands->{"copyright"})) {
|
||||
print "$argument\n";
|
||||
}
|
||||
|
||||
} # end sub singular
|
||||
|
||||
|
||||
1;
|
951
lib/Qftp.pm
Normal file
951
lib/Qftp.pm
Normal file
@ -0,0 +1,951 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Qftp;
|
||||
use strict;
|
||||
use SWIM::Conf;
|
||||
use SWIM::Global qw(@PACKAGES $argument %db);
|
||||
use SWIM::DB_Library qw(:Xyz);
|
||||
use SWIM::Deb qw(md5sumo);
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use Net::FTP;
|
||||
use SWIM::F;
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(qftp);
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
This is the ftp client when --ftp is called with -q, --search/--ps. The
|
||||
downloaded packages are put in the Default directory (DF) in a directory
|
||||
mirroring (in a way relative to the design of swim) the dists structure
|
||||
which is standard with Debian. This is desirable if a person wants to mirror
|
||||
parts of a remote ftp site above the
|
||||
default_directory/default_root_directory/; this also makes it easy for a
|
||||
person to make their own distribution if they want, and apt can be used to
|
||||
install the packages at a later time by temporarily placing them in
|
||||
/var/cache/apt/archives using --df2apt. Obviously, this is nicer than using
|
||||
apt just to download the packages, but the --nz option (apt) is provided
|
||||
just in case a person is too lazed to do the -T thing, then they can do the
|
||||
--apt2df thingy to move the packages from /var/cache/apt/archives to the
|
||||
appropriate place in the DF. Ofcourse, maybe the -T thing was what the
|
||||
person didn't want to do, or maybe the person wants to do a combination of
|
||||
both (like something in the -T apt doesn't care about), this would be an
|
||||
instance where --ftp would be more useful. The configuration file presents
|
||||
a way to set this up so that the directory particular to the local ftpd can
|
||||
be integrated into the DF. The DF can be given any unique named
|
||||
directories, and the permisions of the directories created above can also be
|
||||
specified. Other options to control the DF will be provided, and -h will be
|
||||
available for querying the database pertaining to the packages in the DF,
|
||||
thereby allowing manipulation of the packages in the DF. The database will
|
||||
be made from Packages databases updated whenever the DF is called. There
|
||||
will be two types of Packages, one pertaining to the state of the local
|
||||
system, and the other pertaining to the state of the real distribution.
|
||||
--file, and --http will also be integrated with DF when they become
|
||||
available.
|
||||
|
||||
IMPORTANT: Support will only be provided for not-installed databases, use a
|
||||
not-installed database which reflects the currently installed package you
|
||||
want to download in binary or source code. This is due to the fact that swim
|
||||
thinks in terms of distribution states, and your installed system may
|
||||
represent a combination of these things. The md5sum is currently checked
|
||||
for packages, but not for source, if the md5sum data exists (not a new
|
||||
debian-revision, for instance) the package will be checked. Whether or not
|
||||
the package is OK it will be placed in it's appropriate place if it
|
||||
downloads correctly. If you get FAILED, examine the package and alert
|
||||
the
|
||||
community (download place, what's wrong with the package), then delete the
|
||||
package.
|
||||
|
||||
=cut
|
||||
sub qftp {
|
||||
|
||||
my ($arg,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
|
||||
# Although the /dists/... could be found with -i, it's simpler
|
||||
# just to use name_versionFILENAME instead. People shouldn't
|
||||
# edit --stdin to combine different distributions when doing --ftp,
|
||||
# (note: ofcourse apt-cache dumpavail could be used, and
|
||||
# ncontentsindex could be put together from many dbs)
|
||||
# since swim can only figure out what distribution is wanted
|
||||
# from the default value or the one provided on the command line.
|
||||
# The same is true of using apt. Whatever package is
|
||||
# provided to --stdin is assumed to be of the specified distribution,
|
||||
# anyways.
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
@PACKAGES = map($db{$_},(@PACKAGES = split(/\s/,$arg)));
|
||||
}
|
||||
else {
|
||||
ndb(\%commands);
|
||||
@PACKAGES = map($db{$_},(@PACKAGES = split(/\s/,$arg)))
|
||||
}
|
||||
|
||||
|
||||
my @LOCATION;
|
||||
for (0 .. $#PACKAGES) {
|
||||
if (!defined $PACKAGES[$_]) {
|
||||
print "swim: specified package(s) not found in database\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
if (defined $db{$PACKAGES[0] . "FN"}) {
|
||||
@LOCATION = map($db{$_ . "FN"},@PACKAGES);
|
||||
}
|
||||
else {
|
||||
print "swim: incorrect database was specified\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
# might as well check for a temporary directory for downloads, if it
|
||||
# doesn't exist create it.
|
||||
mkdir("$default_directory/partial",$permission)
|
||||
if !-d "$default_directory/partial";
|
||||
|
||||
# Check if there is a sources.list specified
|
||||
if (-e "$swim_conf/swimz.list") {
|
||||
undef @FTP;
|
||||
open(SOURCES,"$swim_conf/swimz.list")
|
||||
or warn "swim: could not find swimz.list\n";
|
||||
while (<SOURCES>) {
|
||||
if ($_ !~ m,#.*|^\s+,) {
|
||||
chomp; push(@FTP,$_);
|
||||
}
|
||||
}
|
||||
if ($#FTP == -1) {
|
||||
print "swim: no sites specified in swimz.list, quiting\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
# let's make unique sites
|
||||
my (%site,@sites,$site);
|
||||
foreach $site (@FTP) {
|
||||
my @parts = split(' ', $site);
|
||||
$parts[1] =~ m,^ftp:/+( (?: (?!/). ) *)(.*),sx;
|
||||
$site{$1}++;
|
||||
push(@sites,"$1!$site") if $site{$1} == 1;
|
||||
}
|
||||
|
||||
|
||||
foreach $site (@sites) {
|
||||
|
||||
# will provide all kinds of options for ftp..like firewall
|
||||
|
||||
my $uri; ($site, $uri) = split(/!/,$site);
|
||||
my $ftp = Net::FTP->new($site,
|
||||
Debug => $debug,
|
||||
Timeout => $timeout,
|
||||
Passive => $passive,
|
||||
Firewall => $firewall,
|
||||
Port => $port
|
||||
);
|
||||
|
||||
###########
|
||||
# CONNECT #
|
||||
###########
|
||||
if (defined $ftp) {
|
||||
my $connected = $ftp->code();
|
||||
if ($connected == 220) {
|
||||
print "swim: connected to $site\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "swim: could not find $site\n";
|
||||
next;
|
||||
}
|
||||
|
||||
|
||||
#########
|
||||
# LOGIN #
|
||||
#########
|
||||
$ftp->login("anonymous","swim\@the.netpedia.net");
|
||||
my $logged = $ftp->code();
|
||||
# we are logged, but what is the time difference.
|
||||
if ($logged == 230 || $logged == 332) {
|
||||
print "swim: logged in to $site\n";
|
||||
$ftp->binary;
|
||||
}
|
||||
else {
|
||||
# 530 "not logged in" will have to test this
|
||||
$ftp->code();
|
||||
print "swim: not logged in to $site\n";
|
||||
next;
|
||||
}
|
||||
|
||||
# find the base to the distribution
|
||||
my @parts = split(' ', $uri);
|
||||
$parts[1] =~ m,^ftp:/+( (?: (?!/). ) *)(.*),sx;
|
||||
my $base = $2;
|
||||
|
||||
# this finds the base, but it only needs to be found once, ofcourse
|
||||
# a foreach is totally unecessary unless the site has weird symlinks.
|
||||
my @tryme_again; my $base_count = 0;
|
||||
foreach (@FTP) {
|
||||
next if $base_count == 1;
|
||||
|
||||
############
|
||||
# SETUP #
|
||||
############
|
||||
LOCUS: foreach (@LOCATION) {
|
||||
m,(.*)/(.*)$,;
|
||||
my $uptopackage = $1;
|
||||
my $packagename = $2; my $packagen = $2;
|
||||
$packagename =~ s,\+,\\\+,g;
|
||||
my ($source_drd,$drd);
|
||||
# make directories with permissions if they don't already exist
|
||||
# and also establish standardized (swimy) debian-non-US and the
|
||||
# appropriate symlinks
|
||||
# if a non-US file is requested.
|
||||
if ($uptopackage !~ /non-US/) {
|
||||
if (!-d "$default_directory/$default_root_directory/$uptopackage") {
|
||||
my $place = "$default_directory/$default_root_directory";
|
||||
my @DP = split(m,/,,$uptopackage);
|
||||
my $placement = "/";
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission);
|
||||
# will fix this later
|
||||
# or warn "swim: could not create dists directory\n";
|
||||
# Ofcourse there is even a better fix.
|
||||
}
|
||||
}
|
||||
}
|
||||
####################
|
||||
# ################ #
|
||||
# # NON-US FILES # #
|
||||
# ################ #
|
||||
####################
|
||||
else {
|
||||
(my $above_drd = $uptopackage) =~ s,dists,,;
|
||||
$above_drd =~ s,non-US/,,;
|
||||
$source_drd = (split(m,/,,$above_drd))[1];
|
||||
($drd = $default_root_directory) =~ s,/debian,,;
|
||||
if (!-e "$default_directory$drd/debian-non-US$above_drd") {
|
||||
my $place = "$default_directory";
|
||||
my $create = "$drd/debian-non-US$above_drd";
|
||||
my @DP = split(m,/,,$create);
|
||||
my $placement = "/";
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission)
|
||||
or warn "swim: could not create debian-non-US directory\n";
|
||||
}
|
||||
if (!-d "$default_directory$drd/debian-non-US/$source_drd/source") {
|
||||
my $place = "$default_directory";
|
||||
my $create = "$drd/debian-non-US/$source_drd/source";
|
||||
my @DP = split(m,/,,$create);
|
||||
my $placement = "/";
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission)
|
||||
or warn "swim: could not create debian-non-US directory\n";
|
||||
}
|
||||
}
|
||||
|
||||
$place = "$default_directory$drd/debian-non-US";
|
||||
my $disty = (split(m,/,))[1]; $create = "/dists/$disty";
|
||||
undef @DP;
|
||||
@DP = split(m,/,,$create);
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission)
|
||||
or warn "swim: could not create debian-non-US directory\n";
|
||||
}
|
||||
|
||||
# make the symlinks
|
||||
chdir("$place$placement");
|
||||
symlink("../../$disty","non-US");
|
||||
symlink("../../$disty/source","source");
|
||||
|
||||
$place = "$default_directory$drd/debian"; $create = "/dists/$disty";
|
||||
undef @DP;
|
||||
@DP = split(m,/,,$create);
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission)
|
||||
or warn "swim: could not create debian-non-US directory\n";
|
||||
}
|
||||
chdir("$place$placement");
|
||||
|
||||
# make more symlinks
|
||||
symlink
|
||||
("../../../debian-non-US/dists/$disty/non-US","non-US");
|
||||
} # if non-US dir !-e
|
||||
} # end non-us
|
||||
|
||||
|
||||
#######
|
||||
# GET #
|
||||
#######
|
||||
my $file;
|
||||
($packagen = $packagename) =~ s,\\\+,\+,g;
|
||||
my $localfile =
|
||||
"$default_directory/partial/$packagen";
|
||||
my $home =
|
||||
"$default_directory/$default_root_directory/$_";
|
||||
my $size = $ftp->size("$base/$_");
|
||||
my $rmtime = $ftp->mdtm("$base/$_");
|
||||
my $file_exist = $ftp->code();
|
||||
#########################
|
||||
# CHECK DEBIAN-REVISION #
|
||||
#########################
|
||||
# the way this is set up, it is assumed that something exists for
|
||||
# the -(debian-revision).
|
||||
if ($file_exist == 550) {
|
||||
print "swim: $packagen does not exist on the server\n";
|
||||
print "swim: checking to see if the debian-revision has changed\n";
|
||||
$packagename =~ m,^(.*)-[\dA-Za-z\.\+]+\.deb$,;
|
||||
my $matcher = $1;
|
||||
$_ =~ m,^(.*)/$matcher[-\da-zA-Z\.\+]+\.deb$,;
|
||||
my $otherthing = $1;
|
||||
my $REVISIONCHANGE = $ftp->ls("$base/$uptopackage");
|
||||
my $singfile;
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher[-\dA-Za-z\.\+]+\.deb)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
}
|
||||
}
|
||||
my $checkfile;
|
||||
defined $file
|
||||
? ($checkfile = $otherthing . "/$file")
|
||||
: ($checkfile = "NOFILE");
|
||||
$size = $ftp->size("$base/$checkfile");
|
||||
$rmtime = $ftp->mdtm("$base/$checkfile");
|
||||
$file_exist = $ftp->code();
|
||||
print "swim: could not find $packagen debian-revision\n"
|
||||
if $file_exist == 550;
|
||||
push(@tryme_again,$_) if $file_exist == 550;
|
||||
next if $file_exist == 550;
|
||||
$localfile =~ s,$matcher[-\dA-Za-z\.\+]*\.deb$,$file,;
|
||||
$home =
|
||||
"$default_directory/$default_root_directory/$uptopackage/$file";
|
||||
$packagename = $file; $file = $otherthing . "/$file";
|
||||
} # END DEBIAN-REVISION
|
||||
else {$file = $_; }
|
||||
my ($lsize,$lmtime);
|
||||
|
||||
|
||||
########################
|
||||
# SAME PACKAGE LOCALLY #
|
||||
########################
|
||||
$packagename =~ m,(^[A-Za-z\d\+-\\+]*)_([\\+A-Za-z\d\+\.:]*)
|
||||
[-]?[\dA-Za-z\.\+]*\.deb$,x;
|
||||
my $spackage = $1; my $upstream_revision = $2;
|
||||
$spackage =~ s,\+,\\\+,g;
|
||||
if (-e $home) {
|
||||
($lsize,$lmtime) = (stat($home))[7,9];
|
||||
}
|
||||
# If the upstream-revision has changed and
|
||||
# a local package with the same name exists, we want to delete it.
|
||||
else {
|
||||
opendir(DF,"$default_directory/$default_root_directory/$uptopackage");
|
||||
my $grepthing = "^" . $spackage . "_";
|
||||
#my $grepthing = $spackage . "_" . $upstream_revision;
|
||||
foreach (sort grep(/$grepthing/, readdir(DF))) {
|
||||
m,(.*)_([\dA-Za-z\+\.:]+)[-]?[\dA-Za-z\+\.]*\.deb$,;
|
||||
my $lupstream_revision = $2;
|
||||
if ($lupstream_revision eq $upstream_revision) {
|
||||
print "swim: $_ with different debian-revision exists\n";
|
||||
$_ = "";
|
||||
|
||||
##########
|
||||
# SOURCE #
|
||||
##########
|
||||
if ($commands->{"source"} || $commands->{"source_only"}) {
|
||||
my (@SOURCE,$upstream_change);
|
||||
my ($matcher,$local_source,$remote_source,$base) =
|
||||
source_calc($base,$uptopackage,$packagename,$drd,$source_drd);
|
||||
my $REVISIONCHANGE = $ftp->ls("$base/$remote_source");
|
||||
my $singfile;
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
if (!defined @SOURCE) {
|
||||
print "swim: checking for upstream-revsion change\n";
|
||||
($matcher) = (split(/_/,$matcher))[0];
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
$upstream_change = "yes" if defined @SOURCE;
|
||||
}
|
||||
foreach (@SOURCE) {
|
||||
m,.*/(.*)$,; $packagename = $1;
|
||||
$lmtime = (stat("$local_source/$packagename"))[9];
|
||||
-e "$local_source/$packagename"
|
||||
? ($lmtime = (stat("$local_source/$packagename"))[9])
|
||||
: ($lmtime = -1);
|
||||
$size = $ftp->size("$_");
|
||||
$rmtime = $ftp->mdtm("$_");
|
||||
$file_exist = $ftp->code();
|
||||
if ($lmtime != $rmtime) {
|
||||
if (!$commands->{"diff"}) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 &&
|
||||
$lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (m,diff\.gz,) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 &&
|
||||
$lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
utime(time,$rmtime,"$local_source/$packagename");
|
||||
$_ = "";
|
||||
}
|
||||
else {
|
||||
print "swim: $packagename already exists\n"
|
||||
}
|
||||
}
|
||||
} # source
|
||||
next LOCUS;
|
||||
}
|
||||
elsif ($lupstream_revision ne $upstream_revision) {
|
||||
if (!$commands->{"source_only"}) {
|
||||
print "swim: replacing $_ with a different upstream-revision\n";
|
||||
unlink
|
||||
("$default_directory/$default_root_directory/$uptopackage/$_");
|
||||
}
|
||||
print "swim: $_ exists with a different upstream-revision\n";
|
||||
}
|
||||
}
|
||||
closedir(DF);
|
||||
}
|
||||
|
||||
##################
|
||||
# EXISTS LOCALLY #
|
||||
##################
|
||||
# got here but localtime was greater.
|
||||
if (defined $rmtime && defined $lmtime) {
|
||||
# ofcourse if the file does exist locally and has the same name
|
||||
# and version, and this exists, something strange is going on.
|
||||
if ($lmtime < $rmtime) {
|
||||
print "swim: downloading $packagen, strange.........
|
||||
same upstream version exists in the same package locally\n";
|
||||
get($ftp,"$base/$file",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$argument = $localfile;
|
||||
$commands{"md5sum"} = 1;
|
||||
md5sumo(\%commands) if $complete == 226;
|
||||
($packagen = $packagename) =~ s,\\\+,\+,g;
|
||||
print "swim: successful retrieval of $packagen\n"
|
||||
if $complete == 226;
|
||||
$_ = "" if $complete == 226;
|
||||
utime(time,$rmtime,$localfile);
|
||||
}
|
||||
elsif ($lmtime == $rmtime) {
|
||||
$_ = "";
|
||||
($packagen = $packagename) =~ s,\\\+,\+,g;
|
||||
print "swim: $packagen already exists\n";
|
||||
##########
|
||||
# SOURCE #
|
||||
##########
|
||||
if ($commands->{"source"} || $commands->{"source_only"}) {
|
||||
my (@SOURCE,$upstream_change);
|
||||
my ($matcher,$local_source,$remote_source,$base) =
|
||||
source_calc($base,$uptopackage,$packagename,$drd,$source_drd);
|
||||
my $REVISIONCHANGE = $ftp->ls("$base/$remote_source");
|
||||
my $singfile;
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
if (!defined @SOURCE) {
|
||||
print "swim: checking for upstream-revsion change\n";
|
||||
($matcher) = (split(/_/,$matcher))[0];
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
$upstream_change = "yes" if defined @SOURCE;
|
||||
}
|
||||
foreach (@SOURCE) {
|
||||
m,.*/(.*)$,; $packagename = $1;
|
||||
-e "$local_source/$packagename"
|
||||
? ($lmtime = (stat("$local_source/$packagename"))[9])
|
||||
: ($lmtime = -1);
|
||||
$size = $ftp->size("$_");
|
||||
$rmtime = $ftp->mdtm("$_");
|
||||
$file_exist = $ftp->code();
|
||||
if ($lmtime != $rmtime) {
|
||||
if (!$commands->{"diff"}) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (m,diff\.gz,) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
utime(time,$rmtime,"$local_source/$packagename");
|
||||
$_ = "";
|
||||
}
|
||||
else {
|
||||
print "swim: $packagename already exists\n"
|
||||
}
|
||||
}
|
||||
} # source
|
||||
}
|
||||
}
|
||||
#########################################################
|
||||
# DOESN'T EXIST LOCALLY OR DIFFERENT UPSTREAM-REVISION #
|
||||
#########################################################
|
||||
else {
|
||||
########################
|
||||
# BINARY AND/OR SOURCE #
|
||||
########################
|
||||
if (!$commands->{"source_only"}) {
|
||||
print "swim: downloading $packagen ($size bytes)\n";
|
||||
my $upstream_change;
|
||||
get($ftp,"$base/$file",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226) {
|
||||
$argument = $localfile;
|
||||
$commands{"md5sum"} = 1; md5sumo(\%commands);
|
||||
($packagen = $packagename) =~ s,\\\+,\+,g;
|
||||
print "swim: successful retrieval of $packagen\n";
|
||||
rename("$localfile","$home")
|
||||
or system "$mv", "$localfile", "$home";
|
||||
utime(time,$rmtime,"$home");
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $file\n";
|
||||
}
|
||||
$_ = "";
|
||||
##########
|
||||
# SOURCE #
|
||||
##########
|
||||
if ($commands->{"source"}) {
|
||||
my (@SOURCE,$upstream_change);
|
||||
my ($matcher,$local_source,$remote_source,$base) =
|
||||
source_calc($base,$uptopackage,$packagename,$drd,$source_drd);
|
||||
my $REVISIONCHANGE = $ftp->ls("$base/$remote_source");
|
||||
my $singfile;
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
if (!defined @SOURCE) {
|
||||
print "swim: checking for upstream-revsion change\n";
|
||||
($matcher) = (split(/_/,$matcher))[0];
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
$upstream_change = "yes" if defined @SOURCE;
|
||||
}
|
||||
foreach (@SOURCE) {
|
||||
m,.*/(.*)$,; $packagename = $1;
|
||||
-e "$local_source/$packagename"
|
||||
? ($lmtime = (stat("$local_source/$packagename"))[9])
|
||||
: ($lmtime = -1);
|
||||
$size = $ftp->size("$_");
|
||||
$rmtime = $ftp->mdtm("$_");
|
||||
$file_exist = $ftp->code();
|
||||
if ($lmtime != $rmtime) {
|
||||
if (!$commands->{"diff"}) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (m,diff\.gz,) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
utime(time,$rmtime,"$local_source/$packagename");
|
||||
$_ = "";
|
||||
}
|
||||
else {
|
||||
print "swim: $packagename already exists\n"
|
||||
}
|
||||
}
|
||||
} # source
|
||||
}
|
||||
###############
|
||||
# SOURCE-ONLY #
|
||||
###############
|
||||
else {
|
||||
my (@SOURCE,$upstream_change);
|
||||
my ($matcher,$local_source,$remote_source,$base) =
|
||||
source_calc($base,$uptopackage,$packagename,$drd,$source_drd);
|
||||
my $REVISIONCHANGE = $ftp->ls("$base/$remote_source");
|
||||
my $singfile;
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
if (!defined @SOURCE) {
|
||||
print "swim: checking for upstream-revsion change\n";
|
||||
($matcher) = (split(/_/,$matcher))[0];
|
||||
foreach (@{$REVISIONCHANGE}) {
|
||||
m,^.*/($matcher.*)$,
|
||||
? ($singfile = $1)
|
||||
: ($singfile = $_);
|
||||
if ($singfile =~ /^$matcher/) {
|
||||
$file = $singfile;
|
||||
push(@SOURCE,"$base/$remote_source/$singfile");
|
||||
}
|
||||
}
|
||||
$upstream_change = "yes" if defined @SOURCE;
|
||||
}
|
||||
foreach (@SOURCE) {
|
||||
m,.*/(.*)$,; $packagename = $1;
|
||||
-e "$local_source/$packagename"
|
||||
? ($lmtime = (stat("$local_source/$packagename"))[9])
|
||||
: ($lmtime = -1);
|
||||
$size = $ftp->size("$_");
|
||||
$rmtime = $ftp->mdtm("$_");
|
||||
$file_exist = $ftp->code();
|
||||
if ($lmtime != $rmtime) {
|
||||
if (!$commands->{"diff"}) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (m,diff\.gz,) {
|
||||
$localfile = "$default_directory/partial/$packagename";
|
||||
!defined $upstream_change
|
||||
? print "swim: downloading $packagename ($size bytes)\n"
|
||||
: print "swim: downloading upstream-revision $packagename ($size bytes)\n";
|
||||
get($ftp,"$_",$localfile);
|
||||
my $complete = $ftp->code();
|
||||
$lsize = (stat($localfile))[7];
|
||||
if ($lsize == $size && $complete == 226 && $lmtime != $rmtime) {
|
||||
print "swim: successful retrieval of $packagename\n";
|
||||
rename("$localfile","$local_source/$packagename")
|
||||
or system "$mv","$localfile","$local_source/$packagename";
|
||||
}
|
||||
else {
|
||||
print "swim: unsuccessful retrieval of $packagename\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
utime(time,$rmtime,"$local_source/$packagename");
|
||||
$_ = "";
|
||||
}
|
||||
else {
|
||||
print "swim: $packagename already exists\n"
|
||||
}
|
||||
}
|
||||
} # source-only
|
||||
}
|
||||
}
|
||||
$base_count++;
|
||||
} # foreach FTP
|
||||
undef @LOCATION;
|
||||
@LOCATION = @tryme_again;
|
||||
$ftp->quit() if !defined @LOCATION;
|
||||
my $good_bye = $ftp->code();
|
||||
print "swim: logged out\n" if $good_bye == 221;
|
||||
undef @sites if !defined @LOCATION;
|
||||
|
||||
} # foreach sites
|
||||
untie %db;
|
||||
|
||||
} # end sub qftp
|
||||
|
||||
|
||||
# figure out the source stuff, make appropriate directories for sections
|
||||
# which aren't non-US
|
||||
sub source_calc {
|
||||
|
||||
my($base,$uptopackage,$packagename,$drd,$source_drd) = @_;
|
||||
|
||||
|
||||
# if source is empty in %db we can use the package name, need
|
||||
# to watch for experimental
|
||||
my ($remote_source,$local_source,@SOURCE);
|
||||
# NON-US
|
||||
if ($uptopackage =~ /non-US/) {
|
||||
$local_source =
|
||||
"$default_directory$drd/debian-non-US/$source_drd/source";
|
||||
$uptopackage =~ m,(.*)/.*$,; $remote_source = $1;
|
||||
$remote_source = "$remote_source/source";
|
||||
# for safety's sake and because most sites don't have
|
||||
# /pub/debian/dists/unstable/non-US/source except for a
|
||||
# site made with swim, convert debian to debian-non-US and
|
||||
# hope everything is standard.
|
||||
if ($base !~ /debian-non-US/) {
|
||||
$base =~ s/debian/debian-non-US/;
|
||||
}
|
||||
}
|
||||
# EVERYTHING ELSE
|
||||
else {
|
||||
$uptopackage =~ m,(.*)/(.*)$,;
|
||||
my $subject = $2; $1 =~ m,(.*)/.*$,; $local_source = $1;
|
||||
#$remote_source =~ m,(.*)/.*$,; $remote_source = $1;
|
||||
$remote_source = $local_source;
|
||||
$local_source = "$remote_source/source/$subject";
|
||||
$remote_source = $local_source;
|
||||
$local_source =
|
||||
"$default_directory$default_root_directory/$local_source";
|
||||
}
|
||||
|
||||
# exciting matcher realities..if it isn't non-US than the
|
||||
# %db needs to be searched for anything found in Source:,
|
||||
# if it is defined, then vola, herein this section lays the
|
||||
# source, otherwise it's probably in the section which pertains
|
||||
# to the package being queried..we hope. Epochs aren't used
|
||||
# fortunately they aren't in package_versionFN, but they can
|
||||
# be in the Source: area so they need to be removed.
|
||||
$packagename =~ m,(^[A-Za-z\d\+-\\+]*_[\\+A-Za-z\d\+\.:]*)
|
||||
[-]?[\dA-Za-z\.\+]*\.deb$,x;
|
||||
|
||||
# everything, but revision
|
||||
my $matcher = $1;
|
||||
$matcher =~ m,^(.*)_(.*)$,; my $mat = $1;
|
||||
if (defined $db{$mat}) {
|
||||
$mat = $db{$mat}; $mat = $db{$mat};
|
||||
if ($mat =~ m,Installed-Size:\s\d+\s+Source:\s(.*),){
|
||||
$matcher = $1;
|
||||
##########################################
|
||||
# DIFFERENT VERSION AND DIFFERENT SOURCE #
|
||||
##########################################
|
||||
if ($matcher =~ m,[\(\)], ) {
|
||||
$matcher =~ /:/
|
||||
? $matcher =~ m,^(.*)
|
||||
\s\([\d]?[:]?
|
||||
([A-Za-z0-9\+\.]+)
|
||||
[-]?[\dA-Za-z\+\.]*\)$,x
|
||||
: $matcher =~ m,^(.*)
|
||||
\s\(
|
||||
([A-Za-z0-9\+\.]+)
|
||||
[-]?[\dA-Za-z\+\.]*\)$,x;
|
||||
|
||||
my $mat2 = $1; my $mat2_ver = $2;
|
||||
$matcher = $mat2 . "_" . $mat2_ver;
|
||||
if (defined $db{$mat2}) {
|
||||
$matcher = $mat2 . "_" . $mat2_ver;
|
||||
# time to change the $remote_source and $local_source
|
||||
if ($uptopackage !~ /non-US/) {
|
||||
my $change = $db{$mat2};
|
||||
$change = $db{$change ."FN"};
|
||||
$change =~ m,(.*)/(.*)$,;
|
||||
$uptopackage = $1; $uptopackage =~ m,(.*)/(.*)$,;
|
||||
my $subject = $2;
|
||||
$1 =~ m,(.*)/.*$,; $local_source = $1;
|
||||
$local_source = "$local_source/source/$subject";
|
||||
$remote_source = $local_source;
|
||||
$local_source =
|
||||
"$default_directory$default_root_directory/$local_source";
|
||||
}
|
||||
}
|
||||
}
|
||||
#####################################
|
||||
# SAME VERSION AND DIFFERENT SOURCE #
|
||||
#####################################
|
||||
else {
|
||||
if (defined $db{$matcher}) {
|
||||
# time to change the
|
||||
# $remote_source and $local_source
|
||||
if ($uptopackage !~ /non-US/) {
|
||||
my $change = $db{$matcher};
|
||||
$change = $db{$change ."FN"};
|
||||
$change =~ m,(.*)/(.*)$,;
|
||||
$uptopackage = $1; $uptopackage =~ m,(.*)/(.*)$,;
|
||||
my $subject = $2;
|
||||
$1 =~ m,(.*)/.*$,; $local_source = $1;
|
||||
$local_source = "$local_source/source/$subject";
|
||||
$remote_source = $local_source;
|
||||
$local_source =
|
||||
"$default_directory$default_root_directory/$local_source";
|
||||
}
|
||||
}
|
||||
}
|
||||
} # Source: found
|
||||
} # should be defined
|
||||
|
||||
|
||||
# time to make direcorties if $local_source isn't defined
|
||||
# non-US already made, if source if already made, just the
|
||||
# subject above needs to be made
|
||||
if (!-e $local_source) {
|
||||
my $place;
|
||||
my @LS = split(m,/,,$local_source);
|
||||
for (1 .. $#LS - 2) {
|
||||
$_ == 1 ? ($place = "/$LS[$_]")
|
||||
: ($place = $place . "/" . $LS[$_]);
|
||||
}
|
||||
my $create = "$LS[$#LS -1]/$LS[$#LS]";
|
||||
if (-d "$place/$LS[$#LS - 1]") {
|
||||
mkdir("$place/$create",$permission)
|
||||
or warn "swim: could not create source directory\n";
|
||||
}
|
||||
else {
|
||||
my @DP = split(m,/,,$create);
|
||||
my $placement = "/";
|
||||
for (0 .. $#DP) {
|
||||
$_ == 0 ? ($placement = "/$DP[$_]")
|
||||
: ($placement = $placement . "/" . $DP[$_]);
|
||||
mkdir("$place$placement",$permission)
|
||||
or warn "swim: could not create source directory\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return($matcher,$local_source,$remote_source,$base);
|
||||
|
||||
} # end source_calc
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
180
lib/Ramdisk.pm
Normal file
180
lib/Ramdisk.pm
Normal file
@ -0,0 +1,180 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Ramdisk;
|
||||
use strict;
|
||||
use SWIM::Conf;
|
||||
use SWIM::Library;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(ramdisk);
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
make access a lot faster for contentsindex.deb.gz, alternatively
|
||||
searchindex.deb & file/dirindex. Ramdisks don't work well for
|
||||
everything like the creation of a database. The goal is to
|
||||
automatically determine the size of the disk based on the files
|
||||
put into it (which will all be compressed) This also has a residual
|
||||
effect, so when the ramdisk is umounted stuff still stays in
|
||||
the memory.
|
||||
|
||||
=cut
|
||||
|
||||
sub ramdisk {
|
||||
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
# lot's of thing can be put into the ramdisk, ncontentsindex being the
|
||||
# most important, but flat search files, too. --ramdiskon -n would be
|
||||
# the most important application.
|
||||
my $size = 0;
|
||||
my (@storage,@files);
|
||||
my $count = 0;
|
||||
my %commands = %$commands;
|
||||
my $where = finddb(\%commands);
|
||||
my ($arch,$dist) = which_archdist(\%commands);
|
||||
my $not = "n" if defined $arch;
|
||||
$not = "" if !$commands->{"n"};
|
||||
$arch = "" if !$commands->{"n"};
|
||||
$dist = "" if !$commands->{"n"};
|
||||
my $contentsindex = "contentsindex";
|
||||
my $searchindex = "searchindex";
|
||||
my $dirindex = "dirindex";
|
||||
|
||||
if ($commands->{"ramdiskon"}) {
|
||||
|
||||
my $rambo = "$cat /proc/mounts|";
|
||||
open(RAM, "$rambo");
|
||||
while (<RAM>) {
|
||||
if (/ram/) {
|
||||
my($device,$mount) = split(/\s/,$_,2);
|
||||
if ($mount =~ /dramdisk/) {
|
||||
print "swim: use --ramdiskoff\n";
|
||||
exit;
|
||||
}
|
||||
$storage[$count] = $device;
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
close(RAM);
|
||||
|
||||
if (-e "$where/$not$contentsindex$arch$dist.deb.gz" &&
|
||||
-B "$where/$not$contentsindex$arch$dist.deb.gz") {
|
||||
$size = (stat("$where/$not$contentsindex$arch$dist.deb.gz"))[7];
|
||||
push(@files,"$where/$not$contentsindex$arch$dist.deb.gz");
|
||||
}
|
||||
|
||||
if ($commands->{"searchfile"}) {
|
||||
# stat caused some weirdisms based on the boolean logic
|
||||
#if (-e "$where/$not$searchindex$arch$dist.deb" &&
|
||||
# -e "$where/$not$dirindex$arch$dist.deb") {
|
||||
# compress the monsters
|
||||
if (!-e "$where/$not$dirindex$arch$dist.deb.gz") {
|
||||
print "swim: please wait while dirindex.deb is compressed\n";
|
||||
if (-e "$where/$not$dirindex$arch$dist.deb") {
|
||||
system "$gzip -c9 $where/$not$dirindex$arch$dist.deb > $where/$not$dirindex$arch$dist.deb.gz";
|
||||
}
|
||||
}
|
||||
if (!-e "$where/$not$searchindex$arch$dist.deb.gz") {
|
||||
print "swim: please wait while searchindex.deb is compressed\n";
|
||||
if (-e "$where/$not$searchindex$arch$dist.deb") {
|
||||
system "$gzip -c9 $where/$not$searchindex$arch$dist.deb > $where/$not$searchindex$arch$dist.deb.gz";
|
||||
}
|
||||
}
|
||||
push(@files,"$where/$not$dirindex$arch$dist.deb.gz");
|
||||
push(@files,"$where/$not$searchindex$arch$dist.deb.gz");
|
||||
my $size1 = (stat("$where/$not$searchindex$arch$dist.deb.gz"))[7];
|
||||
my $size2 = (stat("$where/$not$dirindex$arch$dist.deb.gz"))[7];
|
||||
if (defined $size) {
|
||||
$size = $size + $size1 + $size2;
|
||||
}
|
||||
else {
|
||||
$size = $size1 + $size2;
|
||||
}
|
||||
#}
|
||||
}
|
||||
|
||||
# it will be assumed that ext2 is used, and hopefully there isn't a mount
|
||||
# of the exact same name..hence dramdisk should be unusual
|
||||
my $number;
|
||||
if (defined @storage) {
|
||||
@storage = sort {$a cmp $b} @storage;
|
||||
$storage[$#storage] =~ s/\D//g;
|
||||
$number = $storage[$#storage] + 1;
|
||||
}
|
||||
else {
|
||||
$number = 0;
|
||||
}
|
||||
|
||||
# the size will be the sizes added together/1024 + (.15 of the total)
|
||||
if (-e "$where/dramdisk") {
|
||||
if (!-d "$where/dramdisk") {
|
||||
print "swim: --ramdiskon requires dir dramdisk, but a file named dramdisk already exists\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
elsif (!-d "$where/dramdisk") {
|
||||
mkdir("$where/dramdisk",0666);
|
||||
}
|
||||
|
||||
my $increase = $size * 0.15;
|
||||
$size = $increase + $size;
|
||||
$size = $size/1024;
|
||||
$size = sprintf("%.f",$size);
|
||||
if ($size > 0) {
|
||||
system "$mke2fs", "-m0", "/dev/ram$number", "$size";
|
||||
system "$mount", "-t", "ext2", "/dev/ram$number", "$where/dramdisk";
|
||||
foreach (@files) {
|
||||
system "$copy", "$_", "$where/dramdisk";
|
||||
}
|
||||
}
|
||||
} # if on
|
||||
else {
|
||||
|
||||
my $rambo = "$cat /proc/mounts|";
|
||||
open(RAM, "$rambo");
|
||||
while (<RAM>) {
|
||||
if (/ram/) {
|
||||
my($device,$mount) = split(/\s/,$_,2);
|
||||
if ($mount =~ /dramdisk/) {
|
||||
system "$umount", "$device";
|
||||
exit;
|
||||
}
|
||||
$storage[$count] = $device;
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
close(RAM);
|
||||
|
||||
|
||||
} # if off
|
||||
|
||||
exit;
|
||||
|
||||
} # end sub ramdisk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
470
lib/Safex.pm
Normal file
470
lib/Safex.pm
Normal file
@ -0,0 +1,470 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Safex;
|
||||
use strict;
|
||||
use Term::ReadLine;
|
||||
use SWIM::Conf qw($apt_get $dpkg $tmp $HISTORY);
|
||||
use SWIM::Global qw(@PACKAGES $argument $aptor_group %db);
|
||||
use SWIM::DB_Library qw(:Xyz);
|
||||
use SWIM::Library;
|
||||
use vars qw(@ISA @EXPORT %EXPORT_TAGS);
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(safex);
|
||||
|
||||
|
||||
# when x is called
|
||||
sub safex {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if ($commands->{"x"} || $commands->{"ftp"} || $commands->{"source"} ||
|
||||
$commands->{"source_only"} || $commands->{"remove"} || $commands->{"r"} ||
|
||||
$commands->{"purge"}) {
|
||||
|
||||
|
||||
if (!defined @PACKAGES) {
|
||||
if ($commands->{"search"} || $commands->{"ps"} || $commands->{"research"}
|
||||
|| $commands->{"refinesearch"}) {
|
||||
@PACKAGES = "NOPACKAGES";
|
||||
}
|
||||
else {
|
||||
@PACKAGES = @ARGV;
|
||||
}
|
||||
}
|
||||
|
||||
#print "PACKAGES @PACKAGES $argument\n";
|
||||
|
||||
my ($aptor,$arg);
|
||||
if (defined $argument) {
|
||||
if ($argument =~ /_/) {
|
||||
$argument =~ m,(.*)_.*,;
|
||||
$aptor = $1;
|
||||
}
|
||||
else {
|
||||
if (($argument =~ m,/, && ($commands->{"y"} || $commands->{"z"} ||
|
||||
$commands->{"ftp"} || $commands->{"nz"})) || defined $aptor_group ||
|
||||
$commands->{"ftp"} || $commands->{"purge"} || $commands->{"remove"} ||
|
||||
$commands->{"r"}) {
|
||||
if ($PACKAGES[$#PACKAGES] =~ /_/) {
|
||||
$PACKAGES[$#PACKAGES] =~ m,(.*)_.*,;
|
||||
$aptor = $1;
|
||||
}
|
||||
else {
|
||||
$aptor = $PACKAGES[$#PACKAGES];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$aptor = $argument;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($commands->{"y"} || $commands->{"z"} || $commands->{"ftp"} ||
|
||||
$commands->{"nz"} || $commands->{"purge"} || $commands->{"remove"} ||
|
||||
$commands->{"r"}) {
|
||||
if ($PACKAGES[$#PACKAGES] =~ /_/) {
|
||||
$PACKAGES[$#PACKAGES] =~ m,(.*)_.*,;
|
||||
$aptor = $1;
|
||||
}
|
||||
else {
|
||||
$aptor = $PACKAGES[$#PACKAGES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($PACKAGES[$#PACKAGES] =~ m,/,) {
|
||||
$PACKAGES[$#PACKAGES] =~ m,.*/(.*)$,;
|
||||
$arg = $1;
|
||||
foreach (@PACKAGES) {
|
||||
$_ =~ m,.*/(.*)$,;
|
||||
shift @PACKAGES;
|
||||
push(@PACKAGES,$1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($PACKAGES[$#PACKAGES] =~ /_/) {
|
||||
$PACKAGES[$#PACKAGES] =~ m,(.*)_.*,;
|
||||
$arg = $1;
|
||||
foreach (0 .. $#PACKAGES) {
|
||||
if ($PACKAGES[$_] =~ /_/) {
|
||||
$PACKAGES[$_] =~ m,^(.*)_.*$,;
|
||||
$PACKAGES[$_] = $1;
|
||||
}
|
||||
else {
|
||||
$PACKAGES[$_] = $PACKAGES[$_];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$arg = $PACKAGES[$#PACKAGES];
|
||||
foreach (0 .. $#PACKAGES) {
|
||||
if ($PACKAGES[$_] =~ /_/) {
|
||||
$PACKAGES[$_] =~ m,^(.*)_.*$,;
|
||||
$PACKAGES[$_] = $1;
|
||||
}
|
||||
else {
|
||||
$PACKAGES[$_] = $PACKAGES[$_];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$aptor = "DEFINEDONE" if !defined $aptor;
|
||||
if (($aptor eq $arg) || ($commands->{"search"} ||
|
||||
$commands->{"ps"} || $commands->{"research"} ||
|
||||
$commands->{"refinesearch"} || $aptor eq "/.") &&
|
||||
$PACKAGES[0] ne "NOPACKAGES") {
|
||||
xyz(\%commands);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
# swim provides a great interface to apt. The trick is to not actually
|
||||
# run apt-get until all the arguments are stored in an array. This is
|
||||
# done easily for xy and for for xyz which provides virtual installation
|
||||
# and querying completion after --db && --ndb updates. Obviously, the
|
||||
# package virtually installed needs to be the same architecture as the
|
||||
# machine running, since this is how apt works, but the databases can be
|
||||
# in any specified directory. This function also provides an interface for
|
||||
# ftp, as well as dpkg's --remove & --purge.
|
||||
sub xyz {
|
||||
|
||||
my ($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
if (!$commands->{"ftp"}) {
|
||||
if (!defined $apt_get) {
|
||||
print "swim: configure swimrc\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
# error correcting
|
||||
if ($commands->{"ftp"} && ($commands->{"r"} || $commands->{"remove"} ||
|
||||
$commands->{"purge"})) {
|
||||
print "swim: --ftp cannot be used with ";
|
||||
print "-r " if defined $commands->{"r"};
|
||||
print "--remove " if defined $commands->{"remove"};
|
||||
print "--purge " if defined $commands->{"purge"};
|
||||
print "\n";
|
||||
exit;
|
||||
}
|
||||
if (($commands->{"r"} || $commands->{"remove"}) && $commands->{"purge"}) {
|
||||
print "swim: ";
|
||||
print "-r " if defined $commands->{"r"};
|
||||
print "--remove " if defined $commands->{"remove"};
|
||||
print "--purge " if defined $commands->{"purge"};
|
||||
print "cannot be used together\n";
|
||||
exit;
|
||||
}
|
||||
if (($commands->{"y"} || $commands->{"z"} || $commands->{"x"} ||
|
||||
$commands->{"nz"}) && ($commands->{"ftp"} || $commands->{"purge"})) {
|
||||
print "swim: -";
|
||||
print "x" if $commands->{"x"};
|
||||
print "y" if $commands->{"y"};
|
||||
print "z" if $commands->{"z"};
|
||||
print " --nz" if $commands->{"nz"};
|
||||
print " cannot be used with ";
|
||||
print "--purge " if defined $commands->{"purge"};
|
||||
print "--ftp " if defined $commands->{"ftp"};
|
||||
print "\n";
|
||||
exit;
|
||||
}
|
||||
if (($commands->{"source"} && $commands->{"source_only"})) {
|
||||
print "swim: --source and --source_only cannot be used together\n";
|
||||
exit;
|
||||
}
|
||||
if (($commands->{"source"} || $commands->{"source_only"}) &&
|
||||
!$commands->{"ftp"}) {
|
||||
print "swim: --";
|
||||
print "source" if $commands->{"source"};
|
||||
print "source_only" if $commands->{"source_only"};
|
||||
print " cannot be used without --ftp\n";
|
||||
exit;
|
||||
}
|
||||
if (($commands->{"y"} || $commands->{"z"} || $commands->{"nz"}) &&
|
||||
!$commands->{"x"}) {
|
||||
print "swim: requires -x option\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($commands->{"x"}) {
|
||||
# There's no sense in doing this if the wrong architecture is called.
|
||||
if (defined $dpkg) {
|
||||
system "$dpkg --print-installation-architecture > $tmp/arch.deb";
|
||||
open(ARCH, "$tmp/arch.deb") or warn "couldn't find arch\n";
|
||||
my @arch = <ARCH>; chomp $arch[0];
|
||||
my($arch,$dist) = which_archdist(\%commands); $arch =~ m,^-(.*),;
|
||||
if ($1 ne $arch[0]) {
|
||||
print "swim: apt uses the $arch[0] architecture\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
###############
|
||||
# SAFETY MODE #
|
||||
###############
|
||||
if ((($commands->{"x"} || ($commands->{"x"} && $commands->{"y"})) ||
|
||||
($commands->{"x"} && ($commands->{"r"} || $commands->{"remove"}) ||
|
||||
($commands->{"x"} && $commands->{"y"} && ($commands->{"r"} ||
|
||||
$commands->{"remove"})))) &&
|
||||
!($commands->{"z"} || $commands->{"nz"})) {
|
||||
my $arg;
|
||||
my $count = 0;
|
||||
foreach (@PACKAGES) {
|
||||
if ($count == 0) {
|
||||
$arg = "$_";
|
||||
}
|
||||
else {
|
||||
$arg = $arg . " " . "$_";
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
#########
|
||||
# STDIN #
|
||||
#########
|
||||
if ($commands->{"stdin"}) {
|
||||
my $term = Term::ReadLine->new("Simple Shell");
|
||||
my @HISTORY = history(\%commands);
|
||||
$term->addhistory(@HISTORY);
|
||||
my @history; push(@history,"$arg");
|
||||
print "swim: type exit to finish --stdin\n";
|
||||
my $termcount = 0;
|
||||
while ($termcount < 1 ) {
|
||||
$_ = $term->readline('swim: ',"$arg");
|
||||
push (@history,$_);
|
||||
$termcount++;
|
||||
} do { $_ = $term->readline('swim: ');
|
||||
push (@history,$_);
|
||||
} while $_ ne "exit";
|
||||
$arg = $history[$#history - 1];
|
||||
if ($arg ne $HISTORY[$#HISTORY]) {
|
||||
if ($arg =~ m,^[^\w],) {
|
||||
$arg =~ s,^\s+(\w+),$1,;
|
||||
}
|
||||
history_print($arg,\%commands);
|
||||
}
|
||||
}
|
||||
!($commands->{"r"} || $commands{"remove"}) ?
|
||||
system "$apt_get install -qs $arg" :
|
||||
system "$apt_get remove -qs $arg";
|
||||
}
|
||||
#####################
|
||||
# INSTALLATION MODE #
|
||||
#####################
|
||||
# provides optional --stdin to change packages to be installed
|
||||
# from the command line
|
||||
else {
|
||||
my $arg;
|
||||
my $count = 0;
|
||||
foreach (@PACKAGES) {
|
||||
if ($count == 0) {
|
||||
$arg = "$_";
|
||||
}
|
||||
else {
|
||||
$arg = $arg . " " . "$_";
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
#########
|
||||
# STDIN #
|
||||
#########
|
||||
if ($commands->{"stdin"}) {
|
||||
my $term = Term::ReadLine->new("Simple Shell");
|
||||
my @HISTORY = history(\%commands);
|
||||
$term->addhistory(@HISTORY);
|
||||
my @history; push(@history,"$arg");
|
||||
print "swim: type exit to finish --stdin\n";
|
||||
my $termcount = 0;
|
||||
while ($termcount < 1 ) {
|
||||
$_ = $term->readline('swim: ',"$arg");
|
||||
push (@history,$_);
|
||||
$termcount++;
|
||||
} do { $_ = $term->readline('swim: ');
|
||||
push (@history,$_);
|
||||
} while $_ ne "exit";
|
||||
$arg = $history[$#history - 1];
|
||||
if ("$arg" ne "$HISTORY[$#HISTORY]") {
|
||||
if ($arg =~ m,^[^\w],) {
|
||||
$arg =~ s,^\s+(\w+),$1,;
|
||||
}
|
||||
history_print($arg,\%commands);
|
||||
}
|
||||
}
|
||||
#######
|
||||
# XYZ #
|
||||
#######
|
||||
if (!($commands->{"ftp"} || $commands->{"purge"})) {
|
||||
if (!$commands->{"y"}) {
|
||||
if (!$commands->{"nz"}) {
|
||||
!($commands->{"r"} || $commands{"remove"}) ?
|
||||
system "$apt_get install $arg" :
|
||||
system "$apt_get remove $arg";
|
||||
}
|
||||
else {
|
||||
!($commands->{"r"} || $commands{"remove"}) ?
|
||||
system "$apt_get -d install $arg" :
|
||||
system "$apt_get remove $arg";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!$commands->{"nz"}) {
|
||||
!($commands->{"r"} || $commands{"remove"}) ?
|
||||
system "$apt_get install -y $arg" :
|
||||
system "$apt_get remove -y $arg";
|
||||
}
|
||||
else {
|
||||
# not that the y does anything
|
||||
!($commands->{"r"} || $commands{"remove"}) ?
|
||||
system "$apt_get install -y -d $arg" :
|
||||
system "$apt_get remove -y $arg";
|
||||
}
|
||||
}
|
||||
}
|
||||
#######
|
||||
# FTP #
|
||||
#######
|
||||
elsif ($commands->{"ftp"}) {
|
||||
require SWIM::Qftp;
|
||||
SWIM::Qftp->import(qw(qftp));
|
||||
qftp($arg,\%commands);
|
||||
}
|
||||
|
||||
##################
|
||||
# PURGE & REMOVE #
|
||||
##################
|
||||
elsif ($commands->{"purge"} || $commands->{"remove"} || $commands->{"r"}) {
|
||||
purge($arg,\%commands);
|
||||
}
|
||||
|
||||
# this is a good time to return the versions, too, as well as
|
||||
# including any NEW packages from --db and --ndb. We'll assume $arg
|
||||
# from qftp will never be too large
|
||||
if (!$commands->{"n"}) {
|
||||
dbi(\%commands);
|
||||
@PACKAGES = map($db{$_},(@PACKAGES = split(/\s/,$arg)));
|
||||
}
|
||||
else {
|
||||
ndb(\%commands);
|
||||
@PACKAGES = map($db{$_},(@PACKAGES = split(/\s/,$arg)));
|
||||
}
|
||||
untie %db;
|
||||
}
|
||||
|
||||
} # end sub xyz
|
||||
|
||||
|
||||
# Remove (keep configuration files) or purge everything for each package.
|
||||
sub purge {
|
||||
|
||||
my ($arg,$commands) = @_;
|
||||
|
||||
if (!$commands->{"n"}) {
|
||||
if ($commands->{"purge"}) {
|
||||
system "$dpkg --purge $arg";
|
||||
|
||||
}
|
||||
elsif ($commands->{"remove"} || $commands->{"r"}) {
|
||||
system "$dpkg -r $arg";
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "swim: ";
|
||||
print "-r " if defined $commands->{"r"};
|
||||
print "--remove " if defined $commands->{"remove"};
|
||||
print "--purge " if defined $commands->{"purge"};
|
||||
print "can only be used with installed packages\n";
|
||||
}
|
||||
|
||||
|
||||
} # end sub purge
|
||||
|
||||
|
||||
# find the history file and return proper output
|
||||
sub history {
|
||||
|
||||
my($commands) = @_;
|
||||
my %commands = %$commands;
|
||||
|
||||
my($arch,$dist) = which_archdist(\%commands);
|
||||
my($place) = finddb(\%commands);
|
||||
my $swim_history;
|
||||
if ($commands->{"n"}) {
|
||||
$swim_history = "$place/.nswim$arch$dist" . "_history";
|
||||
}
|
||||
else {
|
||||
$swim_history = "$place/.swim" . "_history";
|
||||
}
|
||||
open(HISTORY,"$swim_history") or exit;
|
||||
my (@HISTORY,$line);
|
||||
while (<HISTORY>) {
|
||||
chomp;
|
||||
foreach (split(/\s/,$_)) {
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
}
|
||||
push(@HISTORY,$line); undef $line;
|
||||
}
|
||||
|
||||
return @HISTORY;
|
||||
|
||||
} # end sub history
|
||||
|
||||
# append history if it has changed
|
||||
sub history_print {
|
||||
|
||||
my($arg,$commands) = @_;
|
||||
my %commands = %$commands;
|
||||
my($arch,$dist) = which_archdist(\%commands);
|
||||
my($place) = finddb(\%commands);
|
||||
my $swim_history;
|
||||
if ($commands->{"n"}) {
|
||||
$swim_history = "$place/.nswim$arch$dist" . "_history";
|
||||
}
|
||||
else {
|
||||
$swim_history = "$place/.swim" . "_history";
|
||||
}
|
||||
open(HISTORY,"$swim_history") or exit;
|
||||
my @HISTORY = <HISTORY>;
|
||||
close(HISTORY);
|
||||
if ($#HISTORY < $HISTORY - 1) {
|
||||
push(@HISTORY,"$arg\n");
|
||||
}
|
||||
else {
|
||||
shift(@HISTORY);
|
||||
push(@HISTORY,"$arg\n");
|
||||
}
|
||||
open(HISTORY,">$swim_history") or exit;
|
||||
print HISTORY @HISTORY;
|
||||
|
||||
|
||||
} # end sub history_print
|
||||
|
||||
1;
|
850
lib/Search.pm
Normal file
850
lib/Search.pm
Normal file
@ -0,0 +1,850 @@
|
||||
# Package administration and research tool for Debian
|
||||
# Copyright (C) 1999-2000 Jonathan D. Rosenbaum
|
||||
|
||||
# This program 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
package SWIM::Search;
|
||||
use vars qw(@ISA @EXPORT);
|
||||
use strict;
|
||||
use SWIM::Global;
|
||||
use SWIM::Conf;
|
||||
use SWIM::DB_Library qw(:Search);
|
||||
use SWIM::Library;
|
||||
use Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(search);
|
||||
|
||||
|
||||
# search() and searchdf() = mm --search, --ps --refinesearch --research
|
||||
|
||||
=pod
|
||||
|
||||
This searches for keyword(s) amongst the descriptions, and then
|
||||
shows the packages which match, a little more sophisticated than
|
||||
swim -qait | grep <keyword>, besides you can use perl regexping
|
||||
notation when you do your search. By default the description is
|
||||
automatically presented, but a list of package names which match is kept
|
||||
which can then be queried using -S in the normal fashion, until the
|
||||
next search.
|
||||
|
||||
=cut
|
||||
|
||||
sub search {
|
||||
|
||||
my ($search_mem,$commands,$num,$argv) = @_;
|
||||
|
||||
$argument = "/.";
|
||||
my %commands = %$commands;
|
||||
|
||||
my %morethanone;
|
||||
my $keyword = $commands->{"search"};
|
||||
if ($commands->{"search"}) {
|
||||
$keyword = $commands->{"search"};
|
||||
}
|
||||
elsif ($commands->{"research"}) {
|
||||
$keyword = $commands->{"research"};
|
||||
}
|
||||
elsif ($commands->{"refinesearch"}) {
|
||||
$keyword = $commands->{"refinesearch"};
|
||||
}
|
||||
elsif ($commands->{"powersearch"} || $commands->{"ps"}) {
|
||||
if ($commands->{"powersearch"}) {
|
||||
$keyword = $commands->{"powersearch"};
|
||||
}
|
||||
if ($commands->{"ps"}) {
|
||||
$keyword = $commands->{"ps"};
|
||||
}
|
||||
}
|
||||
my $count = 0;
|
||||
|
||||
my ($search_file, $search_dir);
|
||||
if (!$commands->{"n"}) {
|
||||
ib(\%commands);
|
||||
dbi(\%commands);
|
||||
if ($commands->{"ps"} || $commands->{"powersearch"}) {
|
||||
($search_file,$search_dir) = searchdf(\%commands);
|
||||
if (-B $search_file && -B $search_dir) {
|
||||
$search_file = "$gzip -dc $search_file|";
|
||||
$search_dir = "$gzip -dc $search_dir|";
|
||||
}
|
||||
}
|
||||
}
|
||||
#####
|
||||
# N #
|
||||
#####
|
||||
else {
|
||||
my $return = nib(\%commands);
|
||||
if (!defined $return) {
|
||||
untie %ib;
|
||||
nsb(\%commands);
|
||||
$ib{"/."} = $nsb{"/."};
|
||||
}
|
||||
ndb(\%commands);
|
||||
if ($commands->{"ps"} || $commands->{"powersearch"}) {
|
||||
($search_file,$search_dir) = searchdf(\%commands);
|
||||
if (!-e $search_file || !-e $search_dir) {
|
||||
delete $commands{"ps"} if defined $commands->{"ps"};
|
||||
delete $commands{"powersearch"} if defined $commands->{"powersearch"};
|
||||
}
|
||||
if (-B $search_file && -B $search_dir) {
|
||||
$search_file = "$gzip -dc $search_file|";
|
||||
$search_dir = "$gzip -dc $search_dir|";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
##########
|
||||
# #
|
||||
# SEARCH #
|
||||
# #
|
||||
##########
|
||||
# Here starts --search & optionally -g
|
||||
my ($line,@HISTORY);
|
||||
if ($commands->{"search"}) {
|
||||
my @stuff;
|
||||
if ($commands->{"g"}) {
|
||||
# check for some errors
|
||||
if ($commands->{"a"} || $commands->{"f"} || $commands->{"dir"}) {
|
||||
print "swim: one type of query/verify may be performed at a time\n";
|
||||
exit;
|
||||
}
|
||||
# extract the packages related to the group.
|
||||
if (!$commands->{"n"}) {
|
||||
gb(\%commands);
|
||||
}
|
||||
else {
|
||||
ngb(\%commands)
|
||||
}
|
||||
if ($#ARGV != -1) {
|
||||
foreach (@ARGV) {
|
||||
$argument = $_;
|
||||
if (defined $gb{$argument}) {
|
||||
@stuff = split(/\s/, $gb{$argument});
|
||||
}
|
||||
else {
|
||||
print "group $argument does not contain any packages\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "swim: no arguments given for query\n";
|
||||
}
|
||||
untie %gb;
|
||||
} # if ($commands->{"g"})
|
||||
|
||||
# not yet for -g
|
||||
if ($commands->{"search"} && !$commands->{"g"}) {
|
||||
if (defined $argument) {
|
||||
if ($ib{"$argument"}){
|
||||
foreach (split(/\s/, $ib{"$argument"})) {
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/i) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/m ) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/im ) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$keyword/) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print "swim: found $count package(s)\n";
|
||||
#exit;
|
||||
}
|
||||
if (!defined $line) {
|
||||
$line = "";
|
||||
}
|
||||
else {
|
||||
$line = "$line\n";
|
||||
}
|
||||
history($line,$search_mem);
|
||||
}
|
||||
}
|
||||
|
||||
# ok -g
|
||||
elsif ($commands->{"search"} && $commands->{"g"}) {
|
||||
if (defined @stuff) {
|
||||
#unlink("$search_mem");
|
||||
foreach (@stuff) {
|
||||
$argument = $_;
|
||||
version(\%commands);
|
||||
# if we just did a group search we don't want to append it to
|
||||
# the .search.deb file.
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$argument} =~ /$1/i) {
|
||||
print "$db{$argument}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$argument);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$argument} =~ /$1/m ) {
|
||||
print "$db{$argument}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$argument);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$argument} =~ /$1/im ) {
|
||||
print "$db{$argument}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$argument);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$argument} =~ /$keyword/) {
|
||||
print "$db{$argument}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$argument);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print "swim: found $count package(s)\n";
|
||||
if (!defined $line) {
|
||||
$line = "";
|
||||
}
|
||||
else {
|
||||
$line = "$line\n";
|
||||
}
|
||||
history($line,$search_mem);
|
||||
}
|
||||
}
|
||||
exit if !($commands->{"stdin"} || $commands->{"x"} || $commands->{"y"} ||
|
||||
$commands->{"z"} || $commands->{"ftp"});
|
||||
}
|
||||
|
||||
#############################
|
||||
# #
|
||||
# RESEARCH || REFINESEARCH #
|
||||
# #
|
||||
#############################
|
||||
# research time or refining time
|
||||
if ($commands->{"research"} || $commands{"refinesearch"}) {
|
||||
if ($commands->{"g"}) {
|
||||
print "swim: use -g only with a new search\n";
|
||||
exit;
|
||||
}
|
||||
foreach (@$argv) {
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$db{$_}} =~ /$1/i) {
|
||||
print "$db{$db{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$db{$_}} =~ /$1/m ) {
|
||||
print "$db{$db{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$db{$_}} =~ /$1/im ) {
|
||||
print "$db{$db{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$db{$_}} =~ /$keyword/) {
|
||||
print "$db{$db{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print "swim: found $count package(s)\n";
|
||||
if (!defined $line) {
|
||||
$line = "";
|
||||
}
|
||||
else {
|
||||
$line = "$line\n";
|
||||
}
|
||||
# refine the search
|
||||
if ($commands->{"refinesearch"}) {
|
||||
open(HISTORY, "$search_mem") || exit;
|
||||
my @HISTORY = reverse <HISTORY>;
|
||||
close(HISTORY);
|
||||
$HISTORY[$num - 1] = $line;
|
||||
open(HISTORY, ">$search_mem") || exit;
|
||||
print HISTORY reverse @HISTORY;
|
||||
close(HISTORY);
|
||||
}
|
||||
exit if !($commands->{"stdin"} || $commands->{"x"} ||
|
||||
$commands->{"y"} || $commands->{"z"} || $commands->{"ftp"});
|
||||
}
|
||||
|
||||
|
||||
################
|
||||
# #
|
||||
# POWERSEARCH #
|
||||
# #
|
||||
################
|
||||
# powersearch with no -g option since this searchs all files.
|
||||
if (($commands->{"powersearch"} || $commands->{"ps"}) && !$commands->{"g"}) {
|
||||
open(FLATFILE, "$search_file");
|
||||
while (<FLATFILE>) {
|
||||
chomp $_;
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if ($_ =~ /$1/i) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
print "$db{$ib{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$ib{$_});
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if ($_ =~ /$1/m ) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
print "$db{$ib{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$ib{$_});
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if ($_ =~ /$1/im ) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
print "$db{$ib{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$ib{$_});
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($_ =~ /$keyword/) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
# ofcourse this won't work if a dir filters through.
|
||||
# hummm.
|
||||
#print "HUMM DIR $_ ", $ib{$_}, "\n";
|
||||
print "$db{$ib{$_}}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$ib{$_});
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$ib{$_}))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} # while (<FLATFILE>)
|
||||
close(FLATFILE);
|
||||
|
||||
#######
|
||||
# DIR #
|
||||
#######
|
||||
# Somebody wants to do a rare --dir search, but this is done by default
|
||||
# for the n* because often enough more than one package shares one
|
||||
# file.
|
||||
if ($commands->{"dir"} || $commands{"n"}) {
|
||||
open(FLATFILE, "$search_dir");
|
||||
while (<FLATFILE>) {
|
||||
chomp $_;
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if ($_ =~ /$1/i) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
my @dir = split(/\s/,$ib{$_});
|
||||
foreach (@dir) {
|
||||
$morethanone{$_}++;
|
||||
if (defined $morethanone{$_}) {
|
||||
if ($morethanone{$_} == 1) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if ($_ =~ /$1/m ) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
my @dir = split(/\s/,$ib{$_});
|
||||
foreach (@dir) {
|
||||
$morethanone{$_}++;
|
||||
if (defined $morethanone{$_}) {
|
||||
if ($morethanone{$_} == 1) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if ($_ =~ /$1/im ) {
|
||||
if (defined $ib{$_}) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
my @dir = split(/\s/,$ib{$_});
|
||||
foreach (@dir) {
|
||||
$morethanone{$_}++;
|
||||
if (defined $morethanone{$_}) {
|
||||
if ($morethanone{$_} == 1) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($_ =~ /$keyword/) {
|
||||
if (defined $ib{$_}) {
|
||||
#my @dir = split(/\s/,$ib{$_});
|
||||
#foreach (@dir) {
|
||||
$morethanone{$ib{$_}}++;
|
||||
if ($morethanone{$ib{$_}} == 1) {
|
||||
my @dir = split(/\s/,$ib{$_});
|
||||
foreach (@dir) {
|
||||
$morethanone{$_}++;
|
||||
if (defined $morethanone{$_}) {
|
||||
if ($morethanone{$_} == 1) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} # while (<FLATFILE>)
|
||||
close(FLATFILE);
|
||||
}
|
||||
|
||||
#################
|
||||
# NORMAL SEARCH #
|
||||
#################
|
||||
# now we can do a normal search for the powersearch
|
||||
if (defined $argument) {
|
||||
if ($ib{"$argument"}){
|
||||
foreach (split(/\s/, $ib{$argument})) {
|
||||
if ($keyword =~ /\/i$/) {
|
||||
$morethanone{$_}++;
|
||||
if ($morethanone{$_} == 1) {
|
||||
$keyword =~ m,(.*)\/i$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/i) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/m$/) {
|
||||
$morethanone{$_}++;
|
||||
if ($morethanone{$_} == 1) {
|
||||
$keyword =~ m,(.*)\/m$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/m ) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($keyword =~ /\/.[im]$/) {
|
||||
$morethanone{$_}++;
|
||||
if ($morethanone{$_} == 1) {
|
||||
$keyword =~ m,(.*)\/.[im]$,;
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$1/im ) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$morethanone{$_}++;
|
||||
if ($morethanone{$_} == 1) {
|
||||
if (defined $db{$_}) {
|
||||
if ($db{$_} =~ /$keyword/) {
|
||||
print "$db{$_}\n" if !$commands->{"no"};
|
||||
push(@PACKAGES,$_);
|
||||
if (!defined $line) {
|
||||
$line = (split(/_/,$_))[0];
|
||||
}
|
||||
else {
|
||||
$line = $line . " " . (split(/_/,$_))[0];
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print "swim: found $count package(s)\n";
|
||||
if (!defined $line) {
|
||||
$line = "";
|
||||
}
|
||||
else {
|
||||
$line = "$line\n";
|
||||
}
|
||||
history($line,$search_mem);
|
||||
#exit if !($commands->{"stdin"} || $commands->{"x"} ||
|
||||
# $commands->{"y"} || $commands->{"z"} || $commands->{"ftp"});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
untie %ib;
|
||||
untie %db;
|
||||
|
||||
|
||||
} # end sub search
|
||||
|
||||
# for finding the search flatfiles
|
||||
sub searchdf {
|
||||
|
||||
my ($commands) = @_;
|
||||
|
||||
my($sfile,$sdir);
|
||||
if (!$commands->{"n"}) {
|
||||
my ($ramdisk) = ram_on();
|
||||
if ($ramdisk eq 1) {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sfile = "$parent$library/searchindex.deb";
|
||||
$sdir = "$parent$library/dirindex.deb";
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sfile = "$parent$base/searchindex.deb";
|
||||
$sdir = "$parent$base/dirindex.deb";
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
}
|
||||
elsif ($ramdisk eq "yes") {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sfile = "$parent$library/dramdisk/searchindex.deb.gz";
|
||||
$sdir = "$parent$library/dramdisk/dirindex.deb.gz";
|
||||
if (!-e $sdir && !-e $sfile) {
|
||||
print "swim: found wrong database(s), use --ramdiskoff\n";
|
||||
exit;
|
||||
}
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sfile = "$parent$base/dramdisk/searchindex.deb.gz";
|
||||
$sdir = "$parent$base/dramdisk/dirindex.deb.gz";
|
||||
if (!-e $sdir && !-e $sfile) {
|
||||
print "swim: found wrong database(s), use --ramdiskoff\n";
|
||||
exit;
|
||||
}
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
my ($ramdisk) = ram_on();
|
||||
my($arch,$dist) = which_archdist(\%commands);
|
||||
if ($ramdisk eq 1) {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sfile = "$parent$library/nsearchindex$arch$dist.deb";
|
||||
$sdir = "$parent$library/ndirindex$arch$dist.deb";
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sfile = "$parent$base/nsearchindex$arch$dist.deb";
|
||||
$sdir = "$parent$base/ndirindex$arch$dist.deb";
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
}
|
||||
elsif ($ramdisk eq "yes") {
|
||||
if (($commands->{"dbpath"} && $commands->{"root"}) ||
|
||||
($commands->{"dbpath"} && !$commands->{"root"}) ||
|
||||
(!$commands->{"dbpath"} && !$commands->{"root"})) {
|
||||
$sfile = "$parent$library/dramdisk/nsearchindex$arch$dist.deb.gz";
|
||||
$sdir = "$parent$library/dramdisk/ndirindex$arch$dist.deb.gz";
|
||||
if (!-e $sdir && !-e $sfile) {
|
||||
print "swim: found wrong database(s), use --ramdiskoff\n";
|
||||
exit;
|
||||
}
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
elsif (!$commands->{"dbpath"} && $commands->{"root"}) {
|
||||
$sfile = "$parent$base/dramdisk/nsearchindex$arch$dist.deb.gz";
|
||||
$sdir = "$parent$base/dramdisk/ndirindex$arch$dist.deb.gz";
|
||||
if (!-e $sdir && !-e $sfile) {
|
||||
print "swim: found wrong database(s), use --ramdiskoff\n";
|
||||
exit;
|
||||
}
|
||||
return ($sfile,$sdir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} # end sub searchdf
|
||||
|
||||
# print the search out to the right spot on the HISTORY
|
||||
# this is just shift and push
|
||||
sub history {
|
||||
|
||||
my($line,$file) = @_;
|
||||
my @HISTORY;
|
||||
|
||||
if (-e "$file") {
|
||||
open(HISTORY,"$file");
|
||||
@HISTORY = <HISTORY>;
|
||||
close(HISTORY);
|
||||
if ($#HISTORY < $HISTORY - 1) {
|
||||
push(@HISTORY,$line);
|
||||
}
|
||||
else {
|
||||
shift(@HISTORY);
|
||||
push(@HISTORY,$line);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@HISTORY = $line;
|
||||
}
|
||||
|
||||
open(HISTORY,">$file") or exit;
|
||||
print HISTORY @HISTORY;
|
||||
close(HISTORY);
|
||||
|
||||
} # end sub history
|
||||
|
||||
|
||||
1;
|
49
swim.html/ch-aptprep.html
Normal file
49
swim.html/ch-aptprep.html
Normal file
@ -0,0 +1,49 @@
|
||||
<html><head>
|
||||
<title>swim - PREPARING YOUR INSTALLATION FOR APT
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 8<br>
|
||||
PREPARING YOUR INSTALLATION FOR APT
|
||||
|
||||
</h1>
|
||||
|
||||
<pre>usage: swim --audit
|
||||
swim --status
|
||||
swim -C</pre>
|
||||
<P>
|
||||
|
||||
If you are using <strong>apt</strong> with <strong>swim</strong>, and this
|
||||
is the first time you are using it with your installation, check your live
|
||||
installation with this major mode. This is a call to <strong>dpkg -C
|
||||
(--audit)</strong>, and will show any packages which are not properly
|
||||
configured or installed. If you get any output, make corrections. The goal
|
||||
is to get absolutely no output whatsoever because it is under these
|
||||
conditions that apt will work properly. See the <A href="ch-query.html#s-vrrm">REMOVING AN INSTALLED PACKAGE - VIRTUAL OPTIONS
|
||||
, section 9.8</A> with
|
||||
<strong>-q</strong> to remove the offending packages. You may have to
|
||||
remove the package by hand under unusual situations like when it is not
|
||||
just dependencies (see <code>-T</code>) between packages keeping the package
|
||||
from being removed perhaps due to a broken script (see
|
||||
<code>--scripts</code>). In an extreme case you could manually remove the
|
||||
entry for this package from the <em>/var/lib/dpkg/status</em> database,
|
||||
and hunt down and remove all the files associated with the package with
|
||||
<strong>swim's -l</strong> option. When you are done if you still want
|
||||
some of the packages you removed, use <strong>apt</strong> to reinstall
|
||||
them with <strong>swim's -xyz</strong> option. Also, <strong>apt</strong>
|
||||
provides its own built-in method to clean up your system, and will provide
|
||||
instructions, but you still may have to do some of the cleaning yourself
|
||||
as discussed above.
|
||||
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-query.html">next</A>; <A href="ch-notinstalled.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
158
swim.html/ch-commandline.html
Normal file
158
swim.html/ch-commandline.html
Normal file
@ -0,0 +1,158 @@
|
||||
<html><head>
|
||||
<title>swim - COMMAND LINE OPTION SYNTAX
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 2<br>
|
||||
COMMAND LINE OPTION SYNTAX
|
||||
|
||||
</h1>
|
||||
When you press ``<strong>swim</strong>
|
||||
<<strong>enter</strong>>`` you will see a listing of command line
|
||||
options in a particular syntax. This is to help you understand under what
|
||||
context to use the options. When you enter the options on the command
|
||||
line, the brackets, parentheses, braces, diamonds, and question marks are
|
||||
not actually used.
|
||||
<P>
|
||||
|
||||
|
||||
<strong>Major Mode Option</strong>
|
||||
<P>
|
||||
|
||||
All command line options for <strong>swim</strong> always start with a
|
||||
<strong>major mode option</strong>, except for ``swim <enter>``
|
||||
which will show the whole listing of options. A major mode option is
|
||||
surrounded in braces <strong>{ major mode option }</strong>. In the case
|
||||
of {--search} there are the alternative major mode options
|
||||
{--refinesearch} and {--research}, but because --search needs to be used
|
||||
first before either of these two options, --refinesearch and --research
|
||||
are surrounded in parentheses ().
|
||||
<P>
|
||||
|
||||
Note: Through the other chapters of this manual <strong>{}</strong> is
|
||||
assumed for the <strong>major modes</strong> in the
|
||||
<strong>usage:</strong> section shown at the beginning of every chapter.
|
||||
<P>
|
||||
|
||||
Let's take a closer look at this situation:
|
||||
|
||||
<P>
|
||||
|
||||
<code>{--search ? (--research || --refinesearch)<pattern(s)>}</code>
|
||||
<P>
|
||||
`<strong>||</strong>' or `<strong>|</strong>' are used to indicate
|
||||
`<strong>or</strong>', `<strong>?</strong>' indicates
|
||||
`<strong>optional</strong>', <diamond> indicates an
|
||||
<strong>argument</strong> (a required argument - see Arguments below),
|
||||
(parenthesis) means `if used, must be used after the
|
||||
previous required option was used'. Note: for readability
|
||||
<code>--research</code> and -<code>-refinesearch</code> are not surrounded in
|
||||
<code>{}</code>.
|
||||
<P>
|
||||
|
||||
<strong>Normal Options</strong>
|
||||
<P>
|
||||
|
||||
Options to the major mode options are enclosed in brackets <strong>[
|
||||
option to major mode ]</strong>. <code>swim [-n]</code>
|
||||
<<code>enter</code>> (assume enter from here on out), for instance,
|
||||
will show all the command line options without using the pager. The pager
|
||||
which swim uses can be set in <em>swimrc</em> (see <em>swimrc(8)</em>).
|
||||
``<code>swim {--help} [-n]</code>'' will provide brief explanations of all of
|
||||
swim's options without using the pager. In this case the major mode option
|
||||
<strong>{--help}</strong>, and the option <strong>[-n]</strong> were used.
|
||||
<P>
|
||||
|
||||
<strong>Dashes</strong>
|
||||
<P>
|
||||
|
||||
Options which have a single dash can be combined with other single dashed
|
||||
options <strong>(-qaint)</strong>. Double dashed options need to be
|
||||
entered by themselves <strong>(--help --nopager)</strong>, many double
|
||||
dashed options have an alternative single dash option <strong>(-n for
|
||||
--nopager)</strong>. The meaning of options is related to the major
|
||||
mode they are being used with. <strong>[-n]</strong> means no pager
|
||||
when called with <strong>{--help}</strong>, but it's a reference to the
|
||||
not-installed databases when used with <strong>{-q --query}</strong>,
|
||||
fortunately most options do not have double meanings.
|
||||
<P>
|
||||
|
||||
<strong>Arguments</strong>
|
||||
<P>
|
||||
|
||||
Many options require an argument. Arguments are enclose in diamonds <
|
||||
<strong>argument</strong> >. An argument to an option may also be
|
||||
optional in which case a question mark ``<strong>?</strong>'' will be
|
||||
placed between the option and the argument. <strong>[-l ?
|
||||
<[--df]>]</strong> illustrates such a situation.
|
||||
<strong>[-l]</strong> shows a file listings, and optionally the option
|
||||
<strong>[--df]</strong> can be use with <strong>[-l]</strong> to show an
|
||||
expanded listing.
|
||||
<P>
|
||||
|
||||
<strong>[--dbpath</strong> <<strong>dir>]</strong> requires an
|
||||
argument, this time the argument would not be another option, but rather
|
||||
it is a directory.
|
||||
<P>
|
||||
|
||||
Rule: When an option is an argument to another option it can be written
|
||||
anywhere, but when a non-option is an argument
|
||||
<<strong>dir</strong>> <strong>(notice no brackets)</strong> it has
|
||||
to be placed directly after the option. Sometimes, there may be
|
||||
alternative arguments divided with ``<strong>|</strong>''.
|
||||
<<strong>argument1|argument2</strong>> means use argument1 or
|
||||
argument2, but not both.
|
||||
<P>
|
||||
|
||||
Based on what we now know, let's compare this situation to the
|
||||
<strong>{--search}</strong> situation shown above:
|
||||
<P>
|
||||
|
||||
<code>[--ftp ? --source | --source_only ? <[--diff]>]</code>
|
||||
<P>
|
||||
|
||||
|
||||
In this case <strong>--source</strong> or alternatively
|
||||
<strong>--source_only</strong> can be optionally used along with
|
||||
<strong>--ftp</strong> because they aren't in parentheses
|
||||
<strong>()</strong> (also notice: | was used instead of ||, but means the
|
||||
same thing ``or''). <strong>--diff</strong> can optionally be provided as
|
||||
an argument to either <strong>--source</strong> or
|
||||
<strong>--source_only</strong>. For readability --source and --source_only
|
||||
weren't enclosed in brackets.
|
||||
<P>
|
||||
|
||||
<strong>Global Arguments</strong>
|
||||
<P>
|
||||
|
||||
A <strong>global argument</strong> can be typed anywhere on the command
|
||||
line, and can be an option or text. If global arguments
|
||||
exist they are placed last after the list of normal
|
||||
options that can be used with a major mode
|
||||
option.
|
||||
<P>
|
||||
|
||||
[targets | -S] and [targets|APT|DF] are
|
||||
examples. {-q}, {--initndb}, and
|
||||
{--rebuildndb} all use global arguments.
|
||||
<P>
|
||||
|
||||
<strong>Minor Mode Options</strong>
|
||||
<P>
|
||||
|
||||
{-q --query} will generally use zero or more
|
||||
minor mode options [-afpgn --dir], with
|
||||
one exception (see <A href="ch-query.html">QUERYING THE INSTALLED AND NOT-INSTALLED DATABASES
|
||||
, chapter 9</A>).
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-version.html">next</A>; <A href="ch-description.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
32
swim.html/ch-description.html
Normal file
32
swim.html/ch-description.html
Normal file
@ -0,0 +1,32 @@
|
||||
<html><head>
|
||||
<title>swim - DESCRIPTION
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 1<br>
|
||||
DESCRIPTION
|
||||
|
||||
</h1>
|
||||
|
||||
|
||||
<strong>swim</strong> is a powerful <em>package administration</em>
|
||||
and <em>research tool</em> for both an <em>installed Debian
|
||||
distribution</em>, and/or <em>not-installed virtual Debian
|
||||
distribution(s)</em> allowing querying of software packages with a variety
|
||||
of package information options, and powerful searches. Virtual options
|
||||
which include ftp, installation, and package removal capabilities can be
|
||||
seamlessly combined with querying or searches. <strong>swim</strong> can
|
||||
be used on computer systems which either have, or do not have a Debian
|
||||
distribution installed.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-commandline.html">next</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
37
swim.html/ch-history.html
Normal file
37
swim.html/ch-history.html
Normal file
@ -0,0 +1,37 @@
|
||||
<html><head>
|
||||
<title>swim - HISTORY
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 4<br>
|
||||
HISTORY
|
||||
|
||||
</h1>
|
||||
|
||||
<pre>
|
||||
usage: swim --history
|
||||
swim -h
|
||||
|
||||
options: [--arch <architecture>] [--dists <distribution>]
|
||||
[--n] [--dbpath <dir>] [--root <dir>]
|
||||
</pre>
|
||||
<P>
|
||||
|
||||
This shows a shell-like history of searches and the most recent --stdin
|
||||
edit. History is numbered with the most recent action being 1, and the
|
||||
earlier actions being of a higher number until the maximum amount of lines
|
||||
set in the HISTORY variable in <code>swimrc(5)</code>. A separate history is
|
||||
kept for each architecture-distribution.
|
||||
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-makinginst.html">next</A>; <A href="ch-version.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
330
swim.html/ch-important.html
Normal file
330
swim.html/ch-important.html
Normal file
@ -0,0 +1,330 @@
|
||||
<html><head>
|
||||
<title>swim - IMPORTANT DEBIAN DATABASES FOR NOT-INSTALLED
|
||||
DATABASES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 6<br>
|
||||
IMPORTANT DEBIAN DATABASES FOR NOT-INSTALLED
|
||||
DATABASES
|
||||
|
||||
</h1>
|
||||
<hr>
|
||||
<h2><A name="s-downimportant">
|
||||
6.1 A. downloading the important databases with --ftp.
|
||||
|
||||
</A></h2>
|
||||
|
||||
<pre>usage: swim --ftp
|
||||
|
||||
options: --Contents <DF|directory>
|
||||
--Packages <DF|directory>
|
||||
[--dists <distribution>] [--arch <architecture>]
|
||||
[--onec] [--Release_only]</pre>
|
||||
<hr>
|
||||
<h2><A name="s6.2">
|
||||
6.2 OVERVIEW
|
||||
|
||||
</A></h2>
|
||||
<strong>swim</strong> provides a method so that all information about
|
||||
an existing Debian distribution is quickly accessible through databases.
|
||||
Debian already provides flat file databases for all its distributions. One
|
||||
database called ``<em>Contents-(architecture)</em>'' provides a complete
|
||||
listing of all the files associated with each package, the other much more
|
||||
important database called ``<em>Packages</em>'' provides everything from
|
||||
the Package's description, to all the dependencies for that package. The
|
||||
Packages database is a crucial database for other important Debian
|
||||
administrative tools like <strong>dpkg</strong> and <strong>apt</strong>.
|
||||
<hr>
|
||||
<h2><A name="s-dd">
|
||||
6.3 DISTRIBUTION DEFINED
|
||||
|
||||
</A></h2>
|
||||
Debian Distributions choose a name which reflect the development state of
|
||||
that distribution. The distribution named ``<em>unstable</em>'' is where
|
||||
the majority of the development processing occurs, after <em>unstable</em>
|
||||
has reached a certain level of maturity, it's copied over to a new
|
||||
distribution called ``<em>frozen</em>'' which is tested extensively before
|
||||
becoming the new ``<em>stable</em>'' distribution. The <em>frozen
|
||||
distribution</em> retains the <em>Release version number</em> of the
|
||||
<em>unstable distribution</em>, and the <em>unstable distribution</em>
|
||||
receives a new <em>Release version number</em>. Eventually,
|
||||
<em>frozen</em> becomes <em>stable</em>, and at this point both
|
||||
<em>frozen</em>, and the older <em>stable distribution</em> are removed.
|
||||
Code names are associated with the <em>Release Version number</em> given
|
||||
for each of the distributions. This is much better for mirroring Debian
|
||||
sites.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>swim</strong> was designed to ignore these code names, and instead
|
||||
shows the user the <em>Release version number</em> associated with the
|
||||
distribution. Swim users must always use the real distribution name, or
|
||||
swim will not work properly. This is a nice feature because it allows user
|
||||
to make decisions related to the management of their databases, and makes
|
||||
research much more easier.
|
||||
|
||||
<P>
|
||||
|
||||
The other Debian distribution which swim recognizes is
|
||||
<em>experimental</em>. This distribution <em>does not have any Release
|
||||
version number</em>, and contains packages which are considered risky
|
||||
because of their development level.
|
||||
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s6.4">
|
||||
6.4 SECTIONS
|
||||
|
||||
</A></h2>
|
||||
Each Debian distribution has sections related to the relationship of
|
||||
each of the packages to the <em>Debian's Policy Manual</em>. In
|
||||
``<em>main</em>'' there are packages which have a correct relationship
|
||||
with these Policies. Packages in ``<em>contrib</em>'' comply with the
|
||||
<em>DFSG</em> (<em>Debian Free Software Guidelines</em> found in the
|
||||
<em>Debian Policy Manual</em>) but have various limitations like requiring
|
||||
a package which is found in non-free, or is not in the Debian archive.
|
||||
Packages in ``<em>non-free</em>'' do not comply with the <em>DFSG</em> but
|
||||
are electronically distributable across international borders. The
|
||||
``<em>non-us</em>'' section is found outside of the United States and
|
||||
exists for packages which have export restrictions.
|
||||
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s6.5">
|
||||
6.5 ARCHITECTURES
|
||||
|
||||
</A></h2>
|
||||
Distributions also have architecture specific sections since not all
|
||||
packages compiled for one architecture can run on all other
|
||||
archictectures, however, there are a large percentage of packages which do
|
||||
run on all architectures. The architectures are <em>alpha</em>,
|
||||
<em>arm</em>, <em>i386</em>, <em>m68k</em>, <em>powerpc</em>,
|
||||
<em>sparc</em>, and more recently <em>hurd-i386</em> which represents
|
||||
packages for the hurd GNU kernel for the i386 architecture.
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s6.6">
|
||||
6.6 SWIMZ.LIST
|
||||
|
||||
</A></h2>
|
||||
<strong>--ftp</strong> uses a file called <em>swimz.list</em> which
|
||||
has the same type of format (see format below) as the
|
||||
<em>sources.list(5)</em> which <strong>apt</strong> uses. There are some
|
||||
differences. The <strong>first difference</strong> mentioned above (see
|
||||
<A href="#s-dd">DISTRIBUTION DEFINED
|
||||
, section 6.3</A>) requires that the distribution names never should be the
|
||||
code names for the <em>Release version</em>. <strong>Secondly</strong>,
|
||||
<strong>apt</strong> only retrieves databases specific to one
|
||||
archictecture, normally the one you are running <strong>apt</strong> on.
|
||||
With <strong>swim</strong> though you can fetch databases for any, or
|
||||
every architecture by adding the architecture to ``deb'' with a hyphen
|
||||
(deb-hurd-i386). If deb has no architecture appended it is assumed that
|
||||
the architecture you want is the same as the system you are running
|
||||
<strong>swim</strong> on. <strong>Thirdly</strong>, at this time
|
||||
<strong>swim</strong> only supports the ftp method.
|
||||
<strong>Fourthly</strong>, you can change <em>swimz.list</em> as often as
|
||||
you want without worrying about databases being removed so that that the
|
||||
<em>swimz.list</em> and the downloaded databases match. This would occur
|
||||
with <strong>apt's</strong> <em>sources.list(5)</em> if you removed a
|
||||
site. <strong>Fifthly</strong>, databases are kept in a compressed state.
|
||||
<strong>Sixthly</strong> because the list is used for both Contents and
|
||||
Packages, more flexibility is provided by only allowing the default
|
||||
distribution/archictecture or distribution/architecture provided on the
|
||||
commandline to be downloaded.
|
||||
<P>
|
||||
|
||||
|
||||
For <strong>apt</strong> users: If you are using <strong>apt</strong>, and
|
||||
<strong>swim</strong> together it is a good strategy to use the real
|
||||
distribution name in the <em>sources list(8)</em>, and to have an exact
|
||||
copy of the <em>sources.list(5)</em> ftp sites in the <em>swimz.list</em>.
|
||||
Packages databases specific to the architecture <strong>apt</strong> is
|
||||
using can be retrieved using <strong>swim --apt --update</strong> (this
|
||||
also will keep track of the Release version), and then
|
||||
<strong>swim</strong> can be used to fetch the architecture specific
|
||||
<em>Contents database</em> as shown below. It should also be of interest
|
||||
to note that Packages downloaded by either swim or apt can be used
|
||||
interchangeably by using 'cp -a' and 'gzip -d' or 'gzip -9'.
|
||||
<P>
|
||||
|
||||
Here is a brief outline of the format required by <em>swimz.list</em>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>deb uri distribution [section ... ]</strong>
|
||||
<P>
|
||||
|
||||
<strong>deb</strong> - represents a standard Debian distribution. And is
|
||||
simply written as deb or with the architecture appended
|
||||
(<strong>deb</strong> or <strong>deb-alpha</strong>).
|
||||
|
||||
<P>
|
||||
|
||||
<strong>uri</strong> - Universal Resource Identifier is exactly how you
|
||||
would enter an address into a web browser. This address is the base of a
|
||||
Debian distribution, generally this is right before the directory called
|
||||
``<em>dists</em>''. So if <em>dists</em> is found in
|
||||
<em>/stuff/pub/debian/dists</em>, and the site is
|
||||
<strong>somewhere.com</strong> then the uri would be
|
||||
<em>ftp://somewhere.com/stuff/pub/debian</em>.
|
||||
<P>
|
||||
|
||||
<strong>distribution</strong> - This can be <em>unstable</em>,
|
||||
<em>frozen</em>, <em>stable</em>, <em>experimental</em>. Distribution can
|
||||
also be a path which must end with a slash like
|
||||
<em>unstable/binary-i386/</em>. This is used when there is no section as
|
||||
in the experimental distribution or in sites which do not have symlinks to
|
||||
the non-us section. No section would be mentioned in this situation.
|
||||
<P>
|
||||
<strong>section</strong> - <em>main</em>, <em>contrib</em>,
|
||||
<em>non-free</em>, <em>non-US</em> (write it this way).
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s6.7">
|
||||
6.7 SWIMZ.LIST EXAMPLES
|
||||
|
||||
</A></h2>
|
||||
Examples (each on one line):
|
||||
|
||||
<P>
|
||||
|
||||
<strong>deb-alpha ftp://somewhere.com/stuff/pub/debian unstable main contrib non-US</strong>
|
||||
<P>
|
||||
|
||||
This will fetch the alpha databases from somewhere.com for the unstable
|
||||
distribution for the main, contrib and non-US sections.
|
||||
|
||||
<P>
|
||||
|
||||
Note: In these next two examples you can not append any architecture to deb
|
||||
with a hyphen.
|
||||
<P>
|
||||
|
||||
<strong>deb ftp://somewhere.com/stuff/pub/debian project/experimental/</strong>
|
||||
|
||||
<P>
|
||||
|
||||
This will fetch the experimental database, but there is not a
|
||||
Contents-(architecture) database for this distribution. Notice that it ends
|
||||
with a slash.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>deb ftp://somewhere.com/stuff/pub/debian-non-US stable/binary-i386/</strong>
|
||||
<P>
|
||||
|
||||
This will fetch the i386 databases for the stable distribution for non-us,
|
||||
|
||||
<hr>
|
||||
<h2><A name="s-ftp">
|
||||
6.8 FTP OR APT?
|
||||
|
||||
</A></h2>
|
||||
How you use major mode <strong>--ftp</strong> depends on your goals.
|
||||
Even if you are using <strong>apt</strong>, you may be interested in
|
||||
keeping tabs on different architectures. In this case you would have to
|
||||
download the <em>Packages databases</em> specific to these architectures.
|
||||
If you are only interested in the architecture which <strong>apt</strong>
|
||||
is interested in, then you only need to use <strong>--ftp</strong> to
|
||||
fetch the <em>Contents database(s)</em>. But, because it isn't a
|
||||
requirement to set up a virtual filesystem, you are not required to fetch
|
||||
the Contents database. The <strong>advantages</strong> of fetching the
|
||||
Contents database is determined by the method you choose to make the
|
||||
database (see <A href="ch-notinstalled.html">MAKING NOT-INSTALLED DATABASES
|
||||
, chapter 7</A>). These advantages include the
|
||||
ability to <em>view a listing of the files and directories</em> associated
|
||||
with a package, the ability to <em>query files and directories</em> to
|
||||
find out which packages relate to them, and the ability to perform a
|
||||
<em>powersearch</em> on all the files and directories to find the
|
||||
associated packages.
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s6.9">
|
||||
6.9 OPTIONS
|
||||
|
||||
</A></h2>
|
||||
<strong>Remember:</strong> If you want to download a different
|
||||
distribution/architecture other than the default specified in your
|
||||
configuration file, you must specify this on the commandline.
|
||||
<P>
|
||||
<strong>--Packages</strong> determines where you want the Packages
|
||||
database as well as the Release data put when they are downloaded. The
|
||||
<strong>DF argument</strong> implies that the databases will be put in
|
||||
your default directory (see <code>swimrc(5)).</code> These databases can later
|
||||
be located by the major modes <strong>--initndb and --rebuildndb</strong>
|
||||
just by using <strong>DF</strong> as an argument. Alternatively, these
|
||||
databases can be put in any directory you choose by providing a
|
||||
<strong>directory as an argument</strong>.
|
||||
<P>
|
||||
|
||||
<strong>--Contents</strong> determines where you want the
|
||||
<em>Content-(architecture)</em> <code>database(s)</code> put. (see
|
||||
--Packages).
|
||||
<P>
|
||||
|
||||
<strong>--onec</strong> will download only one Contents-arch per
|
||||
distribution/architecture specified on the commandline or by default.
|
||||
<P>
|
||||
|
||||
<strong>--Release_only</strong> will download only the Release data for
|
||||
the <em>swimz.list</em> or particular <em>Package(s)</em> mentioned on the
|
||||
command line.
|
||||
<P>
|
||||
|
||||
<strong>--dists</strong> will only find the distribution which corresponds
|
||||
to the argument provided this option.
|
||||
<P>
|
||||
|
||||
<strong>--arch</strong> will only find the architecture which corresponds
|
||||
to the argument provided this option. The different architecture needs to
|
||||
be specified in swimz.list with a hyphen and the architecture appended to
|
||||
deb (deb-(arch)).
|
||||
<hr>
|
||||
<h2><A name="s6.10">
|
||||
6.10 B. downloading the important databases with apt, and maintenance
|
||||
options.
|
||||
|
||||
</A></h2>
|
||||
usage: <strong>swim --apt</strong>
|
||||
<P>
|
||||
|
||||
options: <strong>[--update] [--clean] [--autoclean] [--check]</strong>
|
||||
|
||||
<P>
|
||||
|
||||
Please read <A href="#s-downimportant">A. downloading the important databases with --ftp.
|
||||
, section 6.1</A> for more information.
|
||||
<P>
|
||||
|
||||
<strong>--update</strong> calls <strong>apt</strong> to download the
|
||||
Packages databases.
|
||||
<P>
|
||||
|
||||
<strong>--clean</strong> is a call to an <strong>apt</strong> option to
|
||||
remove any packages stored in <strong>apt's</strong> storage area for
|
||||
downloaded packages. The default for this storage area is
|
||||
<em>/var/cache/apt/arhives</em>
|
||||
<P>
|
||||
|
||||
<strong>--autoclean</strong> will only clean out packages which are not
|
||||
found in apt's cache.
|
||||
<P>
|
||||
|
||||
<strong>--check</strong> tests and updates apt's cache.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-notinstalled.html">next</A>; <A href="ch-makinginst.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
180
swim.html/ch-makinginst.html
Normal file
180
swim.html/ch-makinginst.html
Normal file
@ -0,0 +1,180 @@
|
||||
<html><head>
|
||||
<title>swim - MAKING INSTALLED SYSTEM DATABASES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 5<br>
|
||||
MAKING INSTALLED SYSTEM DATABASES
|
||||
|
||||
</h1>
|
||||
|
||||
<hr>
|
||||
<h2><A name="s-initdb">
|
||||
5.1 Initial database making, and Rebuilding for an
|
||||
Installed system.
|
||||
|
||||
</A></h2>
|
||||
|
||||
<pre>
|
||||
usage: swim --initdb
|
||||
swim --rebuilddb
|
||||
|
||||
options: [--dbpath <dir>] [--root <dir>] [--lowmem]
|
||||
[--split_data <lines>]
|
||||
|
||||
</pre>
|
||||
<P>
|
||||
|
||||
An <em>installed Debian distribution</em> is one in which packages are
|
||||
installed using <strong>dpkg</strong> or some front-end to
|
||||
<strong>dpkg</strong> like <strong>apt</strong> or
|
||||
<strong>dselect</strong>; <strong>swim</strong> supports installation
|
||||
through <strong>apt</strong>. These major modes are for a computer with an
|
||||
<em>installed Debian distribution</em> and make the databases which allow
|
||||
querying and searching capabilities for the installed distribution.
|
||||
<P>
|
||||
|
||||
<strong>--initdb</strong> is run when the databases do not exist yet,
|
||||
<strong>--rebuilddb</strong> is run if the databases have become corrupt,
|
||||
or you want to rebuild the databases instead of updating them.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--dbpath</strong> can be specified as an alternative location for
|
||||
where the databases will be made. The default location is
|
||||
``<em>/var/lib/dpkg</em>''. An argument like ``<em>/otherstuff</em>''
|
||||
could be provided, and then the databases would be made here instead.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--root</strong> allows a database to be made for a Debian distribution installed on a
|
||||
different partition. If the distribution is mounted on
|
||||
<em>/New_Debian</em>, ``<em>/New_Debian</em>'' would be the argument to root. The databases would be made for the
|
||||
Debian distribution installed on the ``<em>/New_Debian</em>'' partition.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--dbpath</strong> and <strong>--root</strong> can be used
|
||||
together. Given the previous two examples, the databases would be made on
|
||||
``<em>/New_Debian/otherstuff</em>'', assuming
|
||||
``<em>/New_Debian/otherstuff</em>'' actually existed.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--lowmem</strong> uses a method which uses a small amount of
|
||||
memory to make the databases. By default <strong>--initdb</strong> and
|
||||
<strong>--rebuilddb</strong> use a method which fully takes advantage of
|
||||
memory, this is a good thing, because it means the databases are made in a
|
||||
quicker manner. On a computer with a K6-200 CPU, 64MB of memory, and 1500
|
||||
installed packages, the databases can be made in 4.5 minutes using the
|
||||
default method, and 11 minutes using the low memory method. The high
|
||||
memory method is the default because in general the size of a distribution
|
||||
is related to how much resources a computer has, and probably a large
|
||||
installation is unusual. If you get an ``out of memory'' when you use the
|
||||
default method, or if your system is overloaded to begin with, the
|
||||
<strong>--lowmem method</strong> is the prefered way.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--split_data</strong> determines the size of the files in the
|
||||
temporary directory used to contruct the database. The default is 25000
|
||||
lines per file. If you are using the <strong>--lowmem method</strong> you
|
||||
may want to provide a different argument to <strong>--split_data</strong>,
|
||||
like ``<strong>--split_data 10000</strong>''. This is a subject of
|
||||
experimentation.
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s5.2">
|
||||
5.2 UPDATING
|
||||
|
||||
</A></h2>
|
||||
usage: <strong>swim --db</strong>
|
||||
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
options: <strong>[--dbpath</strong> <<strong>dir</strong>><strong>]
|
||||
[--root</strong> <<strong>dir</strong>><strong>] [--check]</strong>
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--db</strong> allows you to update the databases by hand when
|
||||
packages have been removed, added, or changed. swim will automatically run
|
||||
<strong>--db</strong> under certain conditions.
|
||||
<P>
|
||||
<strong>--check</strong> prints out the changes to STDERR, and the
|
||||
total to STDOUT without proceeding with the update.
|
||||
<P>
|
||||
|
||||
See <A href="#s-initdb">Initial database making, and Rebuilding for an
|
||||
Installed system.
|
||||
, section 5.1</A> for options <strong>--dbpath</strong> and
|
||||
<strong>--root</strong>.
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s-searchy">
|
||||
5.3 REBUILDING THE SEARCH
|
||||
|
||||
|
||||
</A></h2>
|
||||
|
||||
usage: <strong>swim --rebuildflatdb</strong>
|
||||
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
options: <strong>[--dbpath</strong> <<strong>dir</strong>><strong>]
|
||||
[--root</strong> <<strong>dir</strong>><strong>]</strong>
|
||||
|
||||
<P>
|
||||
|
||||
swim makes the flat databases <em>searchindex.deb</em> and
|
||||
<em>dirindex.deb</em> for doing <em>powersearches</em>. Instead of
|
||||
rebuilding these databases everytime <strong>--db</strong> is run, new
|
||||
information is just appended to these databases, and old information is
|
||||
kept. Generally, this is not a problem because only files and directories
|
||||
which the other databases actually know something about will be refered
|
||||
to. But in a situation where a file has changed into a directory, the
|
||||
<em>powersearch</em> may not work properly, because the old file name
|
||||
remains in <em>searchindex.deb</em>, and the new directory name is now in
|
||||
<em>dirindex.deb</em> directory. In general, it takes a lot of changes to
|
||||
the installed system before it is really becomes necessary to rebuild the
|
||||
flat databases. This process takes less than a minute on a K6-200 with
|
||||
1500 packages.
|
||||
|
||||
<P>
|
||||
|
||||
See <A href="#s-initdb">Initial database making, and Rebuilding for an
|
||||
Installed system.
|
||||
, section 5.1</A> for options <strong>--dbpath</strong> and
|
||||
<strong>--root</strong>.
|
||||
<hr>
|
||||
<h2><A name="s5.4">
|
||||
5.4 FILES
|
||||
|
||||
</A></h2>
|
||||
|
||||
Databases which are made:
|
||||
<P>
|
||||
|
||||
<pre> packages.deb
|
||||
fileindex.deb
|
||||
statusindex.deb
|
||||
groupindex.deb
|
||||
searchindex.deb
|
||||
dirindex.deb</pre>
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-important.html">next</A>; <A href="ch-history.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
230
swim.html/ch-notinstalled.html
Normal file
230
swim.html/ch-notinstalled.html
Normal file
@ -0,0 +1,230 @@
|
||||
<html><head>
|
||||
<title>swim - MAKING NOT-INSTALLED DATABASES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 7<br>
|
||||
MAKING NOT-INSTALLED DATABASES
|
||||
|
||||
</h1>
|
||||
|
||||
<pre>
|
||||
usage: swim --initndb
|
||||
swim --ndb
|
||||
swim --rebuildndb
|
||||
|
||||
options: [--Contents <target|FDBtarget|DF|FDBDF>]
|
||||
[--main] [--contrib] [--non-free] [--non-us]
|
||||
[--arch <architecture>] [--dists <distribution>]
|
||||
[--dbpath <dir>] [--root <dir>] [--alt]
|
||||
[--split_data <lines>] [-v] [--cron]
|
||||
[targets|APT|DF]
|
||||
</pre>
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s7.1">
|
||||
7.1 OVERVIEW
|
||||
|
||||
</A></h2>
|
||||
The <strong>not-installed database</strong> provides swim with many capabilities like the searching, and querying of
|
||||
packages which do not actually exist on the live filesystem, as well as the
|
||||
ability to seamlessly install packages while searching or quering, or the
|
||||
ability to fetch the packages source code. The <em>virtual filesystem</em> is optional, but it is highly recommended. These two major mode options set
|
||||
up these databases, after determining the level of interaction which you
|
||||
want.
|
||||
<P>
|
||||
|
||||
Whenever <strong>swim</strong> makes databases it thinks only in terms of
|
||||
one distribution and one architecture. This keeps things logical.
|
||||
<strong>swim</strong> does have the ability to take Packages files with
|
||||
multiple architectures, and distributions, and to extract information for
|
||||
one distribution and one archictecture to make its databases. This could
|
||||
provide interesting information from dumps from <strong>apt</strong>
|
||||
(<code>apt-cache dumpavail</code>).
|
||||
<P>
|
||||
|
||||
<strong>--initndb</strong> creates the initial not-installed databases for
|
||||
a particular architecture and distribution, and
|
||||
<strong>--rebuildndb</strong> remakes the not-installed databases for that
|
||||
same architecure and distribution. If not otherwise specified
|
||||
<strong>swim</strong> <em>will use the values</em> it finds in
|
||||
<em>swimrc</em> to determine what architecture and distribution you want
|
||||
to use to make <strong>swim's</strong> databases. Otherwise...
|
||||
|
||||
<hr>
|
||||
<h2><A name="s7.2">
|
||||
7.2 OPTIONS
|
||||
|
||||
</A></h2>
|
||||
<strong>--arch</strong> allows an argument to override the
|
||||
<strong>architecture</strong> found in <em>swimrc</em>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--dists</strong> allows an argument to override the
|
||||
<strong>distribution</strong> found in <em>swimrc</em>.
|
||||
<P>
|
||||
|
||||
<strong>--alt</strong> is used for a distribution with a Debian archival
|
||||
structure, but which has a different name. This allows for alternative
|
||||
distributions.
|
||||
<P>
|
||||
|
||||
When <strong>APT</strong> or <strong>DF</strong> are provided as arguments
|
||||
(see below), by default the <em>Packages</em> which pertain to the
|
||||
sections found in <em>swimrc</em> will be shown. If you only want certain
|
||||
sections you may specify them on the command line. If you are not using
|
||||
<strong>APT</strong> or <strong>DF</strong>, it is a good idea to make
|
||||
sure that either the sections found in <em>swimrc</em> or the sections you
|
||||
put on the command line match the <em>Packages</em> you a targetting
|
||||
because this is much more effecient.
|
||||
<P>
|
||||
|
||||
<strong>--main</strong> will override the sections found in
|
||||
<em>swimrc</em>, and will use this section.
|
||||
<P>
|
||||
|
||||
<strong>--contrib</strong> will override the sections found in
|
||||
<em>swimrc</em>, and will use this section
|
||||
<P>
|
||||
|
||||
<strong>--non-free</strong> will override the sections found in
|
||||
<em>swimrc</em>, and will use this section
|
||||
<P>
|
||||
|
||||
<strong>--non-us</strong> will override the sections found in
|
||||
<em>swimrc</em>, and will use this section
|
||||
<P>
|
||||
|
||||
Global arguments <strong>targets|APT|DF</strong> must be used with either
|
||||
of these two major modes to find the <em>Packages</em> databases. targets
|
||||
can be a full path to one or a set of <em>Packages</em>.
|
||||
<strong>APT</strong> will use the <em>Packages</em> found in
|
||||
<em>/var/state/apt/lists</em>, and <strong>DF</strong> will use the
|
||||
Packages found in the default directory for <strong>swim</strong> (see
|
||||
<code>--ftp</code>). If you use either <strong>APT</strong> or
|
||||
<strong>DF</strong> you will be given an <strong>interface</strong> which
|
||||
allows you to choose one <em>Packages</em> database for each section you
|
||||
would like to use from the various sites. This <strong>interface</strong>
|
||||
shows the <strong>site</strong>, <strong>date</strong>,
|
||||
<strong>size</strong> and <strong>Release version</strong> for each
|
||||
<em>Packages</em>.
|
||||
<P>
|
||||
|
||||
<strong>--cron</strong> allows you to override the
|
||||
<strong>interface</strong> produced when <strong>APT</strong> or
|
||||
<strong>DF</strong> is provided as an argument. This is useful if you want
|
||||
to automate the database making process. <strong>--cron</strong> will
|
||||
choose the newest <code>database(s),</code> if cron notices that the Release
|
||||
version has changed, cron will not proceed, but will provide a warning
|
||||
instead. This allows you to make the appropriate changes and choices.
|
||||
<P>
|
||||
|
||||
<strong>--Contents</strong> can be give one of four arguments:
|
||||
<P>
|
||||
|
||||
<strong>1).</strong> If you have a <em>Contents-(architecture)</em>
|
||||
database in a target location you know about you may provide a path to the
|
||||
location. The <em>Contents</em> database can be compressed.
|
||||
<P>
|
||||
|
||||
<strong>2).</strong> If you prepend the path with the letters
|
||||
<strong>FDB</strong> (meaning flat database) when the databases for swim
|
||||
are made, instead of using the Contents database to make:
|
||||
|
||||
<pre>
|
||||
nfileindex-arch-dists.deb
|
||||
nsearchindex-arch-dists.deb
|
||||
ndirindex-arch-dists.deb</pre>
|
||||
<P>
|
||||
|
||||
Only the <em>ncontentsindex-arch-dists.deb.gz</em> database will be made
|
||||
which allows the ability to view file/dir listing for not-installed
|
||||
packages, but does not provide the virtual file system or powersearch
|
||||
capabilities which the other databases would have provided.
|
||||
<P>
|
||||
|
||||
<strong>3).</strong> The argument <strong>DF</strong> may be used if you
|
||||
have used <strong>--ftp</strong> with the <strong>DF</strong> argument to
|
||||
the option <strong>--Contents</strong> (see <code>--ftp</code>). In this case
|
||||
it is assumed you are also using global arguments <strong>DF</strong> or
|
||||
<strong>APT</strong> for the Packages databases. This will give you an
|
||||
<strong>interface</strong> (if --cron isn't used) allowing you to choose
|
||||
one <em>Contents</em> database for the particular distribution you want to
|
||||
make the databases for.
|
||||
<P>
|
||||
|
||||
<strong>4).</strong> <strong>FDB</strong> does the same exact thing with
|
||||
<strong>DF</strong> as it does with the before mentioned
|
||||
<strong>FDBtarget</strong>, and provides the <strong>interface</strong>.
|
||||
<P>
|
||||
|
||||
<strong>-v</strong> will only work if you have dpkg installed. It allows
|
||||
swim to verify <strong>swim's</strong> own built-in version comparison
|
||||
function with <strong>dpkg's version comparison function</strong>. This is
|
||||
good for debugging purposes, and produces a report called
|
||||
<em>.version_compare</em> in the same location that
|
||||
<strong>swim's</strong> databases are made.
|
||||
<P>
|
||||
|
||||
<strong>--split_data</strong> is only advantageous if
|
||||
<strong>--Contents</strong> is being used. See <strong>--initdb</strong>
|
||||
for more information about the <strong>--split_data</strong> option.
|
||||
<P>
|
||||
|
||||
See <A href="ch-makinginst.html#s-initdb">Initial database making, and Rebuilding for an
|
||||
Installed system.
|
||||
, section 5.1</A> for options <code>--dbpath</code> and <code>--root</code>.
|
||||
<hr>
|
||||
<h2><A name="s7.3">
|
||||
7.3 UPDATING
|
||||
|
||||
</A></h2>
|
||||
|
||||
<code>--ndb</code> has the same options as --initndb and --rebuildndb except
|
||||
for --split_data. It also has a new option <code>--nue</code> which will
|
||||
never have to be used unless the experimental distribution or non-us
|
||||
section are found in Contents (which presently isn't the case).
|
||||
<code>--check</code> prints out the changes to STDERR, and the total to STDOUT
|
||||
without proceeding with the update. <code>--status_only</code> can be used
|
||||
after a new package has been installed to update the status, after which
|
||||
-qni and -qi will correlate properly.
|
||||
<hr>
|
||||
<h2><A name="s7.4">
|
||||
7.4 REBUILDING THE SEARCH
|
||||
|
||||
</A></h2>
|
||||
<code>--rebuildflatndb</code> serves the same purpose as --rebuildflatdb. See
|
||||
<A href="ch-makinginst.html#s-searchy">REBUILDING THE SEARCH
|
||||
|
||||
, section 5.3</A>
|
||||
<hr>
|
||||
<h2><A name="s7.5">
|
||||
7.5 FILES
|
||||
|
||||
</A></h2>
|
||||
Databases and reports which are made (arch = architecture dists =
|
||||
distribution):
|
||||
<P>
|
||||
|
||||
<pre>
|
||||
npackages-arch-dists.deb
|
||||
nfileindex-arch-dists.deb requires <--Contents>
|
||||
nstatusindex-arch-dists.deb
|
||||
ngroupindex-arch-dists.deb
|
||||
nsearchindex-arch-dists.deb
|
||||
ndirindex-arch-dists.deb
|
||||
.packagesdiff-arch-dists.deb requires <--Contents></pre>
|
||||
<P>
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-aptprep.html">next</A>; <A href="ch-important.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
672
swim.html/ch-query.html
Normal file
672
swim.html/ch-query.html
Normal file
@ -0,0 +1,672 @@
|
||||
<html><head>
|
||||
<title>swim - QUERYING THE INSTALLED AND NOT-INSTALLED DATABASES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 9<br>
|
||||
QUERYING THE INSTALLED AND NOT-INSTALLED DATABASES
|
||||
|
||||
</h1>
|
||||
<pre>usage: swim -q [-fpgn --dir] [targets | -S]
|
||||
swim --query [-fpgn --dir] [targets | -S]
|
||||
swim -qa || swim --query -a </pre>
|
||||
<P>
|
||||
|
||||
<pre>options: [--total -t] [-i] [-l ? <[--df]>] [-d] [-c]
|
||||
[--scripts] [--preinst] [--postinst] [--prerm]
|
||||
[--postrm] [-v] [--dbpath <dir>] [--menu -m]
|
||||
[--shlibs] [-T] [--pre_depends] [--depends]
|
||||
[--recommends] [--suggests] [--conflicts]
|
||||
[--replaces] [--provides] [--md5sum] [--root <dir>]
|
||||
[--copyright] [--changelog] [--allgroups]
|
||||
[--arch <architecture>] [--dists <distribution>]
|
||||
[--ftp ? --source | --source_only ? <[--diff]>]
|
||||
[--stdin] [--extract] <ALL|archive|PWD!archive>]
|
||||
[-xyrz --remove ? <[--nz]>] [--purge] [--apt2df]
|
||||
[--df2apt] </pre><P>
|
||||
|
||||
global arguments: <strong>[targets | -S ? <\d{1,}>]</strong>
|
||||
<P>
|
||||
|
||||
Quering almost always involves using <strong>-q or --query</strong> with
|
||||
zero or one or a combination of the <strong>minor mode options</strong>
|
||||
(package specification options), and one or more (only one for
|
||||
<code>-g</code>) targets specific to the minor mode, or the results of a
|
||||
search (<code>-S</code>). [<code>-S</code> can be provided a numerical argument
|
||||
pertaining to the past history.] This can be combined with one or more
|
||||
options. The one exception is ``<strong>swim -q --allgroups</strong>''.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--query or -q</strong> can be used by itself or with
|
||||
<strong>-n</strong> to query known package names or package names with
|
||||
versions. ``<strong>swim -q test1 test2_0.3-1</strong>'' would produce the
|
||||
output:
|
||||
|
||||
<P>
|
||||
|
||||
<pre>test1_1.0-2
|
||||
test2_0.3-1</pre>
|
||||
<hr>
|
||||
<h2><A name="s-mm">
|
||||
9.1 MINOR MODES
|
||||
|
||||
</A></h2>
|
||||
<strong>-n</strong> is the minor mode option to access the
|
||||
<em>not-installed system</em>, it can be combined with the minor mode
|
||||
options <strong>-a</strong>, <strong>-g</strong>, <strong>-f</strong>, or
|
||||
it can be used by itself.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-a</strong> allows <em>every package</em> on an installed or
|
||||
not-installed (<strong>-n</strong>) system to be queried. ``<strong>swim
|
||||
-qan</strong>'' will show all the package names with versions for the
|
||||
not-installed system
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-f</strong> allows <em>files or directories</em> to be queried,
|
||||
when used without any options the package name with version is shown.
|
||||
<strong>--dir</strong> will only query directories, this is useful if you
|
||||
are not sure whether what you are quering is a directory or a file. When a
|
||||
directory is queried, swim shows all packages which exist below the
|
||||
queried directory. ``<strong>swim -qf /</strong>'' is exactly the same as
|
||||
``<strong>swim -qa</strong>''. Hint: ``<strong>swim -qf .</strong>'' and
|
||||
``<strong>swim -qf *</strong>'' are quite different, the first shows all
|
||||
packages which exist below the current directory, and the second will show
|
||||
the package which each file in the current directory comes from.
|
||||
<P>
|
||||
|
||||
<strong>-g</strong> will query a <em>group</em> (also called a section,
|
||||
see <A href="#s-section">SECTION AND PRIORITY
|
||||
, subsection 9.5.3</A>)) of packages. Groups represent subjects which
|
||||
packages with similiar characteristics are catagorized by. To view all the
|
||||
groups found in an installed or not-installed system use ``<strong>swim -q
|
||||
--allgroups</strong>'' or ``<strong>swim -qn --allgroups</strong>''.
|
||||
``<strong>swim -qg hamradio</strong>'' or ``<strong>swim -qng
|
||||
hamradio</strong>'' shows all the package names for the hamradio group.
|
||||
<P>
|
||||
|
||||
<strong>-p</strong> is used to query a <em>Debian package</em>, these
|
||||
packages are distinguished by their ``deb'' ending, but swim can
|
||||
tell whether a file is a debian package even without the ending. Called
|
||||
without any options the package name with version will be shown.
|
||||
<hr>
|
||||
<h2><A name="s-specdata">
|
||||
9.2 SPECIFYING THE DATABASES TO USE
|
||||
|
||||
</A></h2>
|
||||
<strong>--dists</strong> will use the databases for the argument
|
||||
given, otherwise the databases pertaining to the value found in swimrc
|
||||
will be used.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--arch</strong> will use the databases for the argument given,
|
||||
otherwise the databases pertaining to the value found in swimrc will be
|
||||
used.
|
||||
|
||||
<P>
|
||||
|
||||
Example: <strong>swim -qat --arch hurd-i386 --dists unstable</strong>
|
||||
|
||||
<P>
|
||||
|
||||
Assuming these databases exist this will show all packages and their
|
||||
versions for the unstable distribution and architecture hurd-i386 even if
|
||||
the values in <em>swimrc</em> are i386 and stable.
|
||||
|
||||
<P>
|
||||
|
||||
see <A href="ch-important.html#s-downimportant">A. downloading the important databases with --ftp.
|
||||
, section 6.1</A> and <A href="ch-notinstalled.html">MAKING NOT-INSTALLED DATABASES
|
||||
, chapter 7</A> for more
|
||||
information about the databases.
|
||||
|
||||
<hr>
|
||||
<h2><A name="s9.3">
|
||||
9.3 OPTIONS
|
||||
|
||||
</A></h2>
|
||||
<strong>--total or -t</strong> are <em>used to override the output
|
||||
suppressor</em>. The output suppressor will not show output if a certain
|
||||
number of packages is exceeded, instead it will show the number of
|
||||
packages you are querying. This is useful for two reasons, first, knowing
|
||||
the number of packages you are quering can be very informative, second, it
|
||||
gives you a chance to add to the command line a pipe to a pager, ex:
|
||||
``<strong>swim -qat | less</strong>''. You can set the number that the
|
||||
output suppressor works at as high or low as you want in the
|
||||
<em>swimrc(8)</em> file. By design the <strong>-t</strong> option will
|
||||
have to be used if the <strong>-i</strong> option is used and more than
|
||||
one package is being queried. This option can also be used to alter the
|
||||
output of the various script options (--scripts, --preinst, --postinst,
|
||||
--prerm, and --postrm).
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-i</strong> provides <em>information</em> about each package being
|
||||
queried. The format differs slightly for the installed packages versus the
|
||||
not-installed packages. see <A href="#s-format">FORMAT
|
||||
, section 9.5</A>:
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-l</strong> provides a listing of the files associated with a
|
||||
package. If the option <strong>--df</strong> is provided as an argument,
|
||||
all the directories associated with package will be shown. It is important
|
||||
to remember that many packages provide directories which become important
|
||||
to them after they are installed, so the option <strong>--df</strong>
|
||||
often provides necessary information which <strong>-l</strong> called by
|
||||
itself would have not.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-d</strong> shows the documentation which the package provides
|
||||
found in <em>/usr/doc/*</em>, <em>/usr/man/*</em>, <em>/usr/info/*</em>.
|
||||
Other documentation which the package may provide in a non-standard
|
||||
location will not be shown. <strong>-d</strong> takes precedence over
|
||||
<strong>-l</strong>, so if <strong>-l</strong> is used on the command line
|
||||
with <strong>-d</strong>, only the output for <strong>-d</strong> will be
|
||||
shown.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-v</strong> is a special option which works only with the minor
|
||||
mode <strong>-p</strong>. It can be used with <strong>-l</strong>,
|
||||
<strong>--df</strong>, <strong>-d</strong>, to show the packages files
|
||||
and/or directories in long format (<code>ls -
|
||||
l</code>).
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-c</strong> will show the configuration files packages use. If the
|
||||
package does not have a configuration file then nothing will be shown. The
|
||||
output will show the file and its path indented one space with the
|
||||
<strong>MD5 checksum</strong>. This will not work with
|
||||
<strong>-n</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--scripts</strong> shows all scripts associated with a package
|
||||
with the name of the script presented before each script in this way
|
||||
<strong>#####scriptname######</strong>. If the scripts are called
|
||||
individually by using the script options <strong>--preinst</strong>,
|
||||
<strong>--postinst</strong>, <strong>--prerm</strong>, or
|
||||
<strong>--postrm</strong> no title is shown, this is nice for writing to a
|
||||
file. If <strong>-t</strong> is used with the individual script options a
|
||||
title will be shown, this makes sense because normally only individual
|
||||
packages would be queried to write a script to a file, and
|
||||
<strong>-t</strong> wouldn't be used in this situation. Scripts are the
|
||||
soul of Debianized packages allowing packages to be installed, configured,
|
||||
and removed seamlessly and cleanly under all kinds of conditions. These
|
||||
options do no work with <strong>-n</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--menu or -m</strong> is used to view menufiles which belong to
|
||||
various packages. If the package does not have a menufile nothing will be
|
||||
shown. This option can be useful in troubleshooting a menu entry which
|
||||
does not seem to work, or in finding out where the menu entry is.
|
||||
<em>Joost Witteveen's Debian menu system</em> is a centralized program
|
||||
which interacts with all kinds of menus. <em>Please read the
|
||||
documentation</em> ``<strong>swim -qd menu</strong>'' which comes with the
|
||||
menu package to find out more. This will not work with
|
||||
<strong>-n</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--shlibs</strong> shows a list of shared libraries certain
|
||||
packages supply. The <em>Debian Packaging Manual</em> (packaging-manual)
|
||||
provides detailed information about the format of a shlibs file. This will
|
||||
not work with <strong>-n</strong>.
|
||||
<P>
|
||||
|
||||
<strong>--md5sum</strong> checks <strong>MD5 checksums</strong>. It can be
|
||||
used with <strong>-l</strong>, <strong>-d</strong>, <strong>-c</strong>,
|
||||
or <strong>-p</strong>. If there are checksums available the md5sum result
|
||||
will be either <strong>OK</strong>, <strong>FAILED</strong>, or
|
||||
<strong>MISSING</strong>. <strong>MISSING</strong> means that although a
|
||||
checksum exists, the file can not be found. The result is put after the
|
||||
file and its path and the <strong>MD5 checksum</strong> or the package
|
||||
name and version and the <strong>MD5 checksum</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--copyright</strong> does a case insensitive search for copy or
|
||||
license in the <em>/usr/doc/packagename</em> directory. This should show
|
||||
how the package relates to <em>Debian's Policy Manual</em>.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--changelog</strong> searches for any files in
|
||||
<em>/usr/doc/packagename</em> which look like changelogs. Debian packages
|
||||
always have a <em>Maintainer's</em> changelog for the package. There may
|
||||
be a separate changelog kept by the author of the program.
|
||||
<hr>
|
||||
<h2><A name="s9.4">
|
||||
9.4 PACKAGE RELATIONSHIPS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>-T</strong> shows all the package relationships of packages.
|
||||
Individual package relationships can be viewed using
|
||||
<strong>--pre_depends</strong>, <strong>--depends</strong>,
|
||||
<strong>--recommends</strong>, <strong>--suggests</strong>,
|
||||
<strong>--replaces</strong>, <strong>--conflicts</strong> or
|
||||
<strong>--provides</strong>. Package relationships are the spirit of
|
||||
Debian packages, here is a quick overview briefly reiterating what can be
|
||||
found in the <em>Debian Packaging Manual</em>. <em>Package
|
||||
Maintainers</em> set these relationships in control file fields of the
|
||||
same name.
|
||||
<P>
|
||||
|
||||
<strong>Dependencies</strong>
|
||||
|
||||
<em>Pre-depends</em> - means that the pre-depended package or packages
|
||||
must be installed before the queried package can be installed. Most
|
||||
packages which have pre-dependencies are usually essential and required
|
||||
packages.
|
||||
|
||||
<P>
|
||||
|
||||
<em>Depends</em> - declares an absolute dependency to another package or
|
||||
packages either <em>real or virtual</em>. The queried package cannot
|
||||
function without this other package.
|
||||
|
||||
<P>
|
||||
|
||||
<em>Recommends</em> - declares a strong, but not absolute dependency to
|
||||
another package or packages either <em>real or virtual</em>. You would
|
||||
usually find the recommended package together with the queried package in
|
||||
a normal installation.
|
||||
|
||||
<P>
|
||||
|
||||
<em>Suggests</em> - can be one or more packages either <em>real or
|
||||
virtual</em> which would be useful to the queried package, but are not
|
||||
necessary.
|
||||
|
||||
|
||||
<strong>Alternative Packages</strong>
|
||||
<P>
|
||||
|
||||
<em>Conflicts</em> - is a package or packages either <em>real or
|
||||
virtual</em> which would cause problems with the queried package, and
|
||||
would not be allowed to be installed while the queried package was
|
||||
installed.
|
||||
<P>
|
||||
|
||||
<strong>Overwriting files and Replacing Packages</strong>
|
||||
<P>
|
||||
|
||||
<em>Replaces</em> - allows the queried package to replace another package
|
||||
or packages by overwriting their files, after which the previous package
|
||||
would be considered to have disappeared. Essentially this allows the
|
||||
queried package to take over the package or packages. In a situation where
|
||||
there was a Conflict between the queried package and these packages this
|
||||
field would help determine which packages should be removed.
|
||||
<P>
|
||||
|
||||
<strong>Virtual Packages</strong>
|
||||
<P>
|
||||
|
||||
<em>Provides</em> - declares a virtual package which may be mentioned in
|
||||
<em>Depends</em>, <em>Recommends</em>, <em>Suggests</em>, or
|
||||
<em>Conflicts</em>. <em>Virtual packages</em> allow one or more packages
|
||||
to share the same name of another package, which means if the queried
|
||||
package has a reference to a virtual package in one of the before
|
||||
mentioned package relationship fields, then whatever packages provide the
|
||||
virtual package are also being listed.
|
||||
<hr>
|
||||
<h2><A name="s-format">
|
||||
9.5 FORMAT
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>1). Installed system</strong>
|
||||
|
||||
<P>
|
||||
|
||||
<pre> Package: name Status: hold ok installed
|
||||
Version: 1.1-1 Essential: no
|
||||
Section: namers Priority: extra
|
||||
Installed-Size: 10 Source: generatename (2.0-1)
|
||||
Maintainer: name <name@name.org>
|
||||
Description: hostname maker
|
||||
A nice way to figure out a hostname nobody
|
||||
else has.</pre>
|
||||
<P>
|
||||
|
||||
<strong>2) Not-installed system</strong>
|
||||
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<pre> Package: name Status: r> hold ok installed (1.1-1)
|
||||
Version: 1.1-2 Essential: no
|
||||
Section: names Priority: extra
|
||||
Installed-Size: 11 Source: generatename (2.0-1)
|
||||
Size: 43000 Architecture: i386
|
||||
Distribution: experimental
|
||||
Maintainer: name <name@name.org>
|
||||
Description: hostname maker
|
||||
A nice way to figure out a hostname nobody
|
||||
else has.</pre>
|
||||
<P>
|
||||
|
||||
There are several things to point out. The difference between the two
|
||||
outputs relates to the addition of the Distribution, Size, and
|
||||
Architecture fields for the not-installed query. Installed-Size is how
|
||||
many kilobytes the package will occupy when it is unpacked, whereas Size
|
||||
is the size in bytes of the package.
|
||||
<hr>
|
||||
<h3><A name="s9.5.1">
|
||||
9.5.1 STATUS FIELD
|
||||
|
||||
</A></h3>
|
||||
|
||||
|
||||
The Status field provides the installation status of the package, this
|
||||
holds true for the not-installed query as well. In a sense, the
|
||||
not-installed database isn't always not-installed. If the not-installed
|
||||
package is actually already installed, and the version numbers are exactly
|
||||
the same, then the status will be the same for either query. If the
|
||||
not-installed package is not installed then the status will be
|
||||
``not-installed''. In cases where the not-installed package is already
|
||||
installed, swim uses it's comparison function to figure out whether it is
|
||||
a newer of older package which is installed. In the above example, swim
|
||||
realizes the same package is installed, and only the debian-revision has
|
||||
changed, hence the only difference is that the revision number is greater
|
||||
``r>'' for the not-installed package. When only the debian-revision has
|
||||
changed it can safely be assumed that the author (creator, programmer) of
|
||||
the same program has not made any changes to the same program, but the
|
||||
Debian maintainer has made a change to an aspect of the package like a
|
||||
change in the script the package uses to properly install. You may have
|
||||
also noticed that the status field shows the version number of the
|
||||
installed package enclosed in parenthesis.
|
||||
<hr>
|
||||
<h3><A name="s9.5.2">
|
||||
9.5.2 SOURCE FIELD
|
||||
|
||||
</A></h3>
|
||||
|
||||
The Source field is present in these examples, but the Source field will
|
||||
not always be present for packages. In cases where the name of the source
|
||||
package is the same as the the name found in the Package field, and the
|
||||
version number of the source package is also the same as found in the
|
||||
Version field, then there will be no Source field. In the above examples
|
||||
there is a Source field. In this case name was probably one of many
|
||||
packages generated from the source package called generatename. In this
|
||||
particular example generatename also has its own unique version number
|
||||
2.0-1 enclosed in parentheses, if no version number had been mentioned
|
||||
then the source package would have the same version number as found in the
|
||||
Version field.
|
||||
<hr>
|
||||
<h3><A name="s-section">
|
||||
9.5.3 SECTION AND PRIORITY
|
||||
|
||||
</A></h3>
|
||||
|
||||
Section shows the subject which a package is categorized with (see
|
||||
<code>-g</code>). Priority shows how important the package is to have
|
||||
installed. In the case of the not-installed databases the information for
|
||||
these fields is almost always available from the Packages databases, but
|
||||
this is not always the case for Debian packages. For packages which do no
|
||||
provide this information swim will do its best to fill in the blanks from
|
||||
information found in the installed and not-installed databases. If proper
|
||||
information can not be found it will be indicated as ``unavailable'' or
|
||||
``unknown.'' Unavailable would indicate that information about the package
|
||||
exists, but it is from a different version (includes debian-revision), and
|
||||
no information exists for this version. Unknown means no similiar package
|
||||
exists, and there is absolutely no information about this package in the
|
||||
databases.
|
||||
<P>
|
||||
|
||||
When a Debian package is queried using the <strong>-p</strong>
|
||||
option you will get output like the first example shows, the status field
|
||||
is also calculated.
|
||||
<hr>
|
||||
<h2><A name="s-vrftp">
|
||||
9.6 FTP - VIRTUAL OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
For ftp capabilities swim uses the <em>swimz.list</em> to determine which
|
||||
sites it will check for the requested packages. The first site which fills
|
||||
the request will be used, otherwise <strong>swim</strong> will go through
|
||||
all the sites avoiding repeats, and if no sites can fill the request,
|
||||
<strong>swim</strong> will either quit or proceed on to check for another
|
||||
request.
|
||||
<P>
|
||||
|
||||
<strong>--ftp</strong> allows the queried package, its source package, or
|
||||
just the source package diff to be downloaded while being queried. This is
|
||||
refered to as virtual downloading because the quering and the downloading
|
||||
are seamless as though the package already exists locally. This has to be
|
||||
used with the option <strong>-n</strong> because packages which which are
|
||||
not part of the not-installed database are considered to already have been
|
||||
downloaded. Packages which are already installed can be downloaded or
|
||||
their source retrieved by setting up a database which corresponds to these
|
||||
packages; if the installed packages belong to the stable distribution,
|
||||
set-up the not-installed stable databases.
|
||||
<P>
|
||||
|
||||
Packages or source code are placed in an area below the default directory
|
||||
mirroring the remote directory they were downloaded from after their size
|
||||
and modification times are checked for correct values. This area is called
|
||||
the <strong>DF</strong> directory, and although this directory mirrors
|
||||
remote directories, it is not an exact mirror, but specific to the
|
||||
requirements of swim because code names for Release versions are not taken
|
||||
into account. For real mirroring capabilities there exist many excellent
|
||||
programs. If a package has a <strong>MD5 checksum</strong>,
|
||||
<strong>--md5sum</strong> will automatically be run and the value shown.
|
||||
Regardless of whether or not the md5sum check is <strong>OK</strong> or
|
||||
not, the package will still be put in the <strong>DF</strong> directory to
|
||||
allow the package to be looked at, so watch the output from
|
||||
<strong>--ftp</strong> to check for <strong>FAILED md5sums</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
Packages or source code packages will not be downloaded again if they are
|
||||
found in the <strong>DF</strong> directory unless their
|
||||
<em>upstream-version</em> has changed in the not-installed database, if
|
||||
the packages are not in the DF directory and the remote
|
||||
<em>upstream-version</em> is different than the not-installed
|
||||
<em>upstream-version</em> then the packages will not be downloaded until
|
||||
the not-installed database is updated or rebuilt to reflect the version
|
||||
change. Changes in the package's <em>upstream-version</em> indicates that
|
||||
the <code>author(s)</code> of the program have made changes to the computer
|
||||
code for the program contained in the package or the source code package.
|
||||
On the other hand, swim will check for a <em>debian-revision</em> change
|
||||
at the remote site if the package can not immediately be found. If the
|
||||
package's <em>debian-revision</em> has changed and the package does not
|
||||
exist locally in the <strong>DF</strong> directory, it will be downloaded.
|
||||
This is a nice feature, especially for the unstable distribution, because
|
||||
it tends to extend the time needed before the not-installed database has
|
||||
to be updated or rebuilt to match the changes at remote sites.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--source</strong> is used with <strong>--ftp</strong> to download
|
||||
the source code package. <strong>--source_only</strong> will download the
|
||||
source code package without the deb package. <em>Source packages consist
|
||||
of three files</em>. The <em>source control file</em> which ends in
|
||||
``dsc'', the <em>original source archive</em> which is a compressed tar
|
||||
file, and the <em>unified context diff</em> showing the changes necessary
|
||||
to make the original source into Debian source. The diff can be downloaded
|
||||
by itself if <strong>--diff</strong> is provided as an argument to
|
||||
<strong>--source or --source_only</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
For <strong>apt</strong> users: <strong>apt</strong> allows packages to be
|
||||
downloaded, but if more than one package is required for the package
|
||||
relationships to be proper, <strong>apt</strong> will download all these
|
||||
packages. <strong>--ftp</strong> allows specific packages to be
|
||||
downloaded, packages from other architectures, and source packages to be
|
||||
downloaded, here lies the advantage of this option over using <strong>-xyz
|
||||
--nz</strong> (see below). If a particular package has been dowloaded into
|
||||
the <strong>DF</strong> directory and it is needed by <strong>apt</strong>
|
||||
for installation, simply copy or move the package from the
|
||||
<strong>DF</strong> directory to <em>/var/cache/apt/archives</em> before
|
||||
running <strong>apt</strong>, and the package will not be downloaded by
|
||||
<strong>apt</strong> again; future versions of <strong>swim</strong> will
|
||||
have an option to automatically accomplish this (see <code>--df2apt</code>).
|
||||
<hr>
|
||||
<h2><A name="s-vrapt">
|
||||
9.7 APT - VIRTUAL OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
apt-get(8) is a nice package relationship checker from the
|
||||
<strong>apt</strong> package which figures out what needs to be done to
|
||||
properly install a package or packages when one or more package names are
|
||||
provided to it. <strong>apt-get</strong> will get all packages which are
|
||||
needed using a variety of methods, and then <strong>apt-get</strong>
|
||||
interacts with <strong>dpkg</strong> in a way which allows for a
|
||||
successful installation.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>-xyrz, --remove, and --nz</strong> can be used if
|
||||
<strong>apt-get</strong> from the <strong>apt</strong> package is
|
||||
installed. These options allow for what is refered to as virtual
|
||||
installation/removal. It is prudent to always test what will happen by
|
||||
using the <strong>-x</strong> option alone before actually proceeding with
|
||||
the installation with the <strong>-z</strong> option. <strong>-x</strong>
|
||||
will actually simulate what would happen in an installation, showing which
|
||||
and how many packages will be changed, which and how many new packages
|
||||
will need to be installed, which and how many packages will need to be
|
||||
removed, any conflicts, and what needs to be configured.
|
||||
<strong>-y</strong> will automatically answer yes to any prompts
|
||||
<strong>apt-get</strong> may produce allowing <strong>apt-get</strong> to
|
||||
run non-interactively. <strong>-z</strong> as mentioned before actually
|
||||
proceeds with the installation using <strong>dpkg</strong> after the
|
||||
<strong>apt-get</strong> gets the packages. You can append a minus sign
|
||||
to a package name to cause it to be removed. <strong>--nz</strong> when
|
||||
used as an optional argument with <strong>-xz or -xyz</strong> will only
|
||||
download the packages into <em>/var/cache/apt/archives</em> or into
|
||||
whatever directory you configured for holding archives for
|
||||
<strong>apt</strong>.
|
||||
<P>
|
||||
|
||||
<strong>IMPORTANT</strong>: <strong>apt</strong> makes it so easy to make
|
||||
changes to your installation that it is highly recommended to do your
|
||||
research with swim first. This can be done by checking package
|
||||
relationships, file/dir listings, comparing the not-installed package to
|
||||
an installed package if such exists, checking <strong>--md5sum</strong>
|
||||
and <strong>-c</strong> for the installed package, and checking the Source
|
||||
field by running a <strong>--search</strong> (see <A href="ch-search.html">SEARCHING
|
||||
, chapter 11</A>) to
|
||||
check to see how the source package has been split into binary packages
|
||||
for the not-installed package versus an installed package if such exists.
|
||||
Ofcourse, there are many other things you could look at, and you can
|
||||
always do your research after the fact. Presently <strong>--db</strong> is
|
||||
run only by hand, so you can check the old state after an installation if
|
||||
you have not already run <strong>--db</strong>, yourself.
|
||||
<hr>
|
||||
<h2><A name="s-vrrm">
|
||||
9.8 REMOVING AN INSTALLED PACKAGE - VIRTUAL OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--purge</strong> uses <strong>dpkg</strong> to remove an installed
|
||||
package or packages and the configuration files as shown with
|
||||
``<strong>swim -qc packagename</strong>''.
|
||||
<P>
|
||||
|
||||
<strong>-r or --remove</strong> removes an installed package or packages
|
||||
with <strong>apt</strong>, but not the configuration files as shown with
|
||||
``<strong>swim -qc packagename</strong>''. You may also append a plus
|
||||
sign to a package name to cause it to be installed. This option is used
|
||||
with -x or -x(y)z.
|
||||
<hr>
|
||||
<h2><A name="s9.9">
|
||||
9.9 STDIN - VIRTUAL OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--stdin</strong> works with either <strong>--ftp</strong>,
|
||||
<strong>-x</strong>, <strong>-xyz</strong>, <strong>-xz</strong>,
|
||||
<strong>--purge</strong>, <strong>-r</strong>, or
|
||||
<strong>--remove</strong>.
|
||||
<P>
|
||||
|
||||
<strong>--stdin</strong> provides the <em>readline capabilities</em>
|
||||
commonly found in shells allowing you to edit what is on the command line.
|
||||
You can edit the command line, press enter and then recall the history,
|
||||
and make more changes, or <em>type in exit to process the changed or
|
||||
unchanged command line</em>. To find out more about what readline commands
|
||||
your shell supports please read the man pages which apply to your shell.
|
||||
Information for the bash shell can be found in <code>bash(1)</code> under the
|
||||
title ``<strong>Readline Command Names</strong>''.
|
||||
<P>
|
||||
|
||||
Example: ``<strong>swim -qgnx --stdin hamradio</strong>'' will list all
|
||||
the packages from the not-installed hamradio group on the command line,
|
||||
this list can be edited then submitted to <strong>apt-get</strong> for a
|
||||
simulated installation. Another instance of <strong>swim</strong> can be
|
||||
run at the same time, perhaps ``<strong>swim -qinTg hamradio</strong>'' to
|
||||
help in making editing decisions for <strong>--stdin</strong>.
|
||||
<hr>
|
||||
<h2><A name="s9.10">
|
||||
9.10 PACKAGE MANIPULATION - VIRTUAL OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--extract</strong> only works with the <strong>minor mode
|
||||
-p</strong> to extract parts or all of a Debian package. If the
|
||||
<strong>argument ALL</strong> is provided then <em>everything found in the
|
||||
package will be extracted</em> below the current directory in the exact
|
||||
directories found in the package. A particular <em>file may be extracted
|
||||
in its exact location</em> below the current directory by <em>entering the
|
||||
exact path for the file</em> as shown by ``<strong>swim -qpl</strong>'' or
|
||||
``<strong>swim -qpd</strong>'' as the argument. Alternativily, a <em>file
|
||||
may be extracted in the current directory</em> regardless of its proper
|
||||
location by <em>prepending PWD\! before the path</em> shown by
|
||||
``<strong>swim -qpl</strong>'' or ``<strong>swim -qpd</strong>''. Notice
|
||||
the backslash before the exclamation point, this is because shells
|
||||
consider ! a special character, so it has to be backslashed so that the
|
||||
shell knows that it is not such a special character. Example:
|
||||
``<strong>swim -qpi --extract PWD\!usr/bin/name --scripts
|
||||
name_1.1-2.deb</strong>'' will extract the binary name in the current
|
||||
directory from the name package, show information for the name package,
|
||||
and show any scripts for the name package.
|
||||
<hr>
|
||||
<h2><A name="s-dblocus">
|
||||
9.11 DATABASE LOCATIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--dbpath</strong> can be specified as an alternative location for
|
||||
where the databases would be found. The default location is
|
||||
``<em>/var/lib/dpkg</em>''. An argument like ``<em>/otherstuff</em>'' can
|
||||
be provided, and then the databases would be found here instead.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--root</strong> allows a database to be found for a Debian
|
||||
distribution installed on a different partition. If the distribution is
|
||||
mounted on <em>/New_Debian</em>, ``<em>/New_Debian</em>'' would be the
|
||||
argument to root. The databases would be found for the Debian distribution
|
||||
installed on the ``<em>/New_Debian</em>'' partition.
|
||||
<P>
|
||||
|
||||
<strong>--dbpath and --root</strong> can be used together. Given the
|
||||
previous two examples, the databases would be found on
|
||||
``<em>/New_Debian/otherstuff</em>'', assuming
|
||||
``<em>/New_Debian/otherstuff</em>'' actually existed.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch10.html">next</A>; <A href="ch-aptprep.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
82
swim.html/ch-ramdisk.html
Normal file
82
swim.html/ch-ramdisk.html
Normal file
@ -0,0 +1,82 @@
|
||||
<html><head>
|
||||
<title>swim - RAMDISK
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 12<br>
|
||||
RAMDISK
|
||||
|
||||
</h1>
|
||||
|
||||
<pre>usage: swim --ramdiskon
|
||||
swim --ramdiskoff
|
||||
|
||||
options: [-n] [--searchfile] [--arch <architecture>]
|
||||
[--dists <distribution>] [--dbpath] [--root]
|
||||
|
||||
no options for --ramdiskoff
|
||||
</pre>
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s12.1">
|
||||
12.1 OVERVIEW
|
||||
|
||||
</A></h2>
|
||||
|
||||
A ramdisk can be mounted below the default path or the specified path for
|
||||
the databases in the dramdisk directory. The ramdisk is used to speed up
|
||||
powersearchs and/or file/dir listings for packages from the not-installed
|
||||
system. Also, this is useful if a computer system is heavily loaded with
|
||||
other processes using the memory, and the ramdisk tends to persist even
|
||||
after being unmounted. Modern kernels usually are built with support for
|
||||
ramdisks. If these options do not work the kernel will need to be compiled
|
||||
to support ramdisks by answering yes to RAM disk support. Perhaps the best
|
||||
<em>README</em> showing how to configure and compile a kernel comes with
|
||||
the <em>kernel sources</em> in the main directory.
|
||||
<P>
|
||||
|
||||
<strong>--ramdiskon</strong> allows a ramdisk to be created and mounted.
|
||||
If called with <strong>-n</strong> (not-installed databases)
|
||||
<em>ncontents-arch-dists.deb.gz</em> will automatically be written to the
|
||||
mounted ramdisk. This provides faster file/dir listing capabilities when
|
||||
using <strong>-l</strong>, <strong>--df</strong>, or <strong>-d</strong>
|
||||
when querying the not-installed system. Faster powersearch capabilities
|
||||
are available through the option <strong>--searchfile</strong>. If the
|
||||
search databases are not already compressed, they will now be compressed,
|
||||
this usually only needs to be done once or until the databases are updated
|
||||
or rebuilt again. The search databases will then be written to the mounted
|
||||
ramdisk. An installed system only writes the search databases to the
|
||||
mounted ramdisk, so always use --searchfile when specifying installed
|
||||
system databases.
|
||||
<P>
|
||||
|
||||
<strong>--ramdiskoff</strong> is used to unmount the ramdisk. The
|
||||
not-installed databases and the installed databases can not be
|
||||
simultaneously provided by a mounted ramdisk, use
|
||||
<strong>--ramdiskoff</strong> first, then <strong>--ramdiskon</strong> to
|
||||
install the other databases of choice. This also pertains to different
|
||||
distributions and/or architectures.
|
||||
<P>
|
||||
|
||||
|
||||
See the section ``<A href="ch-query.html#s-specdata">SPECIFYING THE DATABASES TO USE
|
||||
, section 9.2</A>'' for
|
||||
options <strong>--arch</strong>, <strong>-dists</strong>.
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-dblocus">DATABASE LOCATIONS
|
||||
, section 9.11</A>'' for options
|
||||
<strong>--dbpath</strong> and <strong>--root</strong>.
|
||||
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch13.html">next</A>; <A href="ch-search.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
191
swim.html/ch-search.html
Normal file
191
swim.html/ch-search.html
Normal file
@ -0,0 +1,191 @@
|
||||
<html><head>
|
||||
<title>swim - SEARCHING
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 11<br>
|
||||
SEARCHING
|
||||
|
||||
</h1>
|
||||
|
||||
<pre>usage: swim --search ? (--research || --refinesearch) <pattern(s)>
|
||||
swim --powersearch ? (--research || --refinesearch) <pattern(s)>
|
||||
swim --ps ? (--research || --refinesearch) <pattern(s)>
|
||||
|
||||
options: [-g] [-n] [--dbpath <dir>] [--root <dir>] [--no]
|
||||
[--arch <architecture>] [--dists <distribution>
|
||||
[--ftp ? --source | --source_only <[--diff]>]
|
||||
[-xyrz --remove ? <[--nz]>] [--stdin] [--apt2df]
|
||||
[--no] [--df2apt] [--purge] [<\d{1,}>]
|
||||
|
||||
[--dir] and no [-g]for --powersearch or --ps
|
||||
</pre>
|
||||
|
||||
<P>
|
||||
<hr>
|
||||
<h2><A name="s11.1">
|
||||
11.1 OVERVIEW
|
||||
|
||||
</A></h2>
|
||||
|
||||
|
||||
<strong>swim</strong> provides two major types of searches. A search with
|
||||
<strong>--search</strong> <em>searches package information</em> (see <A href="ch-query.html#s-format">FORMAT
|
||||
, section 9.5</A>), and a search with <strong>--powersearch or --ps</strong>
|
||||
<em>searches package information, and all files and/or directories
|
||||
associated with each package</em>.
|
||||
<P>
|
||||
|
||||
The results of either of these searches can be <em>narrowed down</em> by
|
||||
running a test search with <strong>--research</strong> (this step can be
|
||||
skipped) and/or setting the results in stone with
|
||||
<strong>--refinesearch</strong>. <strong>--search</strong> can be
|
||||
<em>narrowed down</em> initially by specifying a particular
|
||||
<em>group</em>, and <strong>--powersearch</strong> can be
|
||||
<em>expanded</em> initially by specifying that <em>directories</em> be
|
||||
searched as well as files. Both searches can <em>use the same virtual
|
||||
options</em> which the major mode <strong>-q or --query</strong> use.
|
||||
Generally, it is preferable to run a search, and then to provide the
|
||||
results of a search (<strong>using -S</strong>) as an argument to
|
||||
<strong>-q or --query</strong>; this allows the results of a search to be
|
||||
queried. Every time a search is run the results are appended to the
|
||||
history, past searches can be refined or researched by providing the
|
||||
numerical argument pertaining to the history. \d{1,} is simply Perl
|
||||
notation meaning a number with one of more digits.
|
||||
|
||||
<P>
|
||||
|
||||
<em>Perl regexps</em> (see <code>perlre(1p))</code> can be used to define the
|
||||
pattern (string) provided as an argument to a search. Do not surround a
|
||||
pattern in slashes, a slash is only used after all patterns and before the
|
||||
<em>modifiers i and/or m</em> (swim supports these two modifiers). To
|
||||
search for more than one pattern, patterns are separated with <em>bars
|
||||
(|)</em>. Patterns may include <em>quatifiers, and metacharacters</em>,
|
||||
also found in <code>egrep(1).</code>
|
||||
<P>
|
||||
|
||||
If a search finds any packages which match the search, the package
|
||||
information will be displayed as the package is found. The package will
|
||||
only be shown once regardless of how many times it is found while the
|
||||
search progresses. When the search is over the number of packages found is
|
||||
shown.
|
||||
<P>
|
||||
|
||||
<strong>--search</strong> provides a search of package information. This
|
||||
is similiar to grepping ``<strong>swim -qait</strong>'' or ``<strong>swim
|
||||
-qaint</strong>'', but it is significantly faster. A search can be
|
||||
performed on a particular group by using <strong>-g</strong> with a group
|
||||
as an argument
|
||||
<P>
|
||||
|
||||
<strong>--powersearch</strong> is somewhat similiar to ``<strong>dpkg
|
||||
--search</strong>'' which searches all files and directories on an
|
||||
installed system, but it combines <strong>--search</strong> with the file
|
||||
and/or directory search, and can also be performed on a not-installed
|
||||
system. A <em>powersearch</em> is significantly faster than the search
|
||||
which <strong>dpkg</strong> provides (even more so when ``<code>swim
|
||||
--ramdiskon --searchfile</code>'' is used) and even more importantly
|
||||
provides a logical output of the search (like ``<code>swim -qi
|
||||
packagename</code>''). By default a search of all directories is not
|
||||
performed because usually this is redundant except in rare cases. To
|
||||
enable a search of all directories use the <strong>--dir</strong> option.
|
||||
<hr>
|
||||
<h2><A name="s11.2">
|
||||
11.2 NARROWING A PREVIOUS SEARCH
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--research</strong> allows the results of a previous search to be
|
||||
researched without making the new results permanent.
|
||||
<P>
|
||||
|
||||
<strong>--refinesearch</strong> allows the results of a previous search to
|
||||
be researched while making the
|
||||
new results permanent.
|
||||
<P>
|
||||
|
||||
<strong>\d{1,}</strong> is a numerical argument to refine or research a
|
||||
past search from the history.
|
||||
<hr>
|
||||
<h2><A name="s11.3">
|
||||
11.3 MINOR MODES
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>-n</strong> allows the not-installed databases to be searched.
|
||||
These databases will not exist if the not-installed databases were made
|
||||
with the FDB argument (see <code>--initndb</code>).
|
||||
<P>
|
||||
|
||||
<strong>-g</strong> (see -g above and <A href="ch-query.html#s-mm">MINOR MODES
|
||||
, section 9.1</A>).
|
||||
<hr>
|
||||
<h2><A name="s11.4">
|
||||
11.4 OTHER OPTIONS
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>--no</strong> prevents normal output from a search, but does show
|
||||
how many packages were found.
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-specdata">SPECIFYING THE DATABASES TO USE
|
||||
, section 9.2</A>'' for options
|
||||
<strong>--arch</strong>, <strong>-dists</strong>.
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-vrftp">FTP - VIRTUAL OPTIONS
|
||||
, section 9.6</A>'' for
|
||||
<strong>--ftp</strong>, <strong>--source</strong>,
|
||||
<strong>--source_only</strong>, <strong>--diff</strong>,
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-vrapt">APT - VIRTUAL OPTIONS
|
||||
, section 9.7</A>'' for
|
||||
<strong>-xyz</strong>, <strong>--nz</strong>, <strong>--stdin</strong>,
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-vrrm">REMOVING AN INSTALLED PACKAGE - VIRTUAL OPTIONS
|
||||
, section 9.8</A>'' for
|
||||
<strong>--purge</strong>, <strong>--remove</strong>, <strong>-r</strong>.
|
||||
|
||||
<P>
|
||||
|
||||
See the section ``<A href="ch-query.html#s-dblocus">DATABASE LOCATIONS
|
||||
, section 9.11</A>'' for options
|
||||
<strong>--dbpath</strong> and <strong>--root</strong>.
|
||||
|
||||
<hr>
|
||||
<h2><A name="s11.5">
|
||||
11.5 EXAMPLES
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>swim -gn hamradio --search "radio network/i" --dbpath
|
||||
/test --arch alpha</strong>
|
||||
<P>
|
||||
|
||||
will search the alpha architecture not-installed system databases in the
|
||||
/test directory for all package information from the hamradio group using
|
||||
the case insensitive pattern ``radio network''.
|
||||
<P>
|
||||
|
||||
<strong>swim --powersearch dpkg -xn</strong>
|
||||
<P>
|
||||
|
||||
will search the not-installed system databases for all package information
|
||||
and all files using the case sensitive pattern dpkg, after which apt-get
|
||||
will run a simulation of what would happen if it got and installed these
|
||||
packages.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-ramdisk.html">next</A>; <A href="ch10.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
23
swim.html/ch-seealso.html
Normal file
23
swim.html/ch-seealso.html
Normal file
@ -0,0 +1,23 @@
|
||||
<html><head>
|
||||
<title>swim - SEE ALSO
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 14<br>
|
||||
SEE ALSO
|
||||
|
||||
</h1>
|
||||
|
||||
<code>swimrc(5),</code> apt-get(8), sources.list(5), <code>dpkg(8)</code>
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch15.html">next</A>; <A href="ch13.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
26
swim.html/ch-version.html
Normal file
26
swim.html/ch-version.html
Normal file
@ -0,0 +1,26 @@
|
||||
<html><head>
|
||||
<title>swim - VERSION
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 3<br>
|
||||
VERSION
|
||||
|
||||
</h1>
|
||||
usage: <strong>swim --version</strong>
|
||||
<P>
|
||||
|
||||
This shows the version for the swim program.
|
||||
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-history.html">next</A>; <A href="ch-commandline.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
64
swim.html/ch10.html
Normal file
64
swim.html/ch10.html
Normal file
@ -0,0 +1,64 @@
|
||||
<html><head>
|
||||
<title>swim - UPGRADING WITH APT
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 10<br>
|
||||
UPGRADING WITH APT
|
||||
|
||||
</h1>
|
||||
|
||||
usage: <strong>swim --apt</strong>
|
||||
<P>
|
||||
|
||||
options: <strong>[-xyz] [--upgrade] [--dist_upgrade]</strong>
|
||||
<P>
|
||||
|
||||
<strong>apt-get</strong> provides powerful methods to change an
|
||||
installion. When these methods are called using <strong>--apt</strong>,
|
||||
<strong>swim</strong> will not allow you to proceed until you are
|
||||
absolutely sure this is what you want to do. Before using these methods do
|
||||
a ``<strong>swim --apt --update</strong>'' so that
|
||||
<strong>apt-get</strong> knows the newest versions of available packages.
|
||||
This major mode requires a combination of <strong>-x</strong>,
|
||||
<strong>-xz</strong> or <strong>-xyz</strong> to be used along with either
|
||||
<strong>--upgrade</strong> or <strong>--dist_upgrade</strong>.
|
||||
<strong>-x</strong> used alone will simulate what would happen if
|
||||
<strong>-xz or -xyz</strong> were used (also see <code>-xyz</code> above).
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--upgrade</strong> is somewhat similiar to doing ``<strong>swim
|
||||
-qatxz</strong>'' except that it is a more intelligent method because
|
||||
<strong>apt</strong> does some behind the scene calculations in regards to
|
||||
package relationships, in fact the ``<strong>swim -qatxz</strong>''
|
||||
approach will provide totally different results, or maybe these were the
|
||||
results you really wanted. ``<strong>swim --apt --upgrade -xz</strong>''
|
||||
is the prefered, proper, and built-in way provided by
|
||||
<strong>apt-get</strong> to install the newest versions for all packages
|
||||
installed on your system. This method will not install any newer versions
|
||||
of packages which would change the install status of other packages. Note:
|
||||
It is not recommended to combine the query option <strong>-a</strong> with
|
||||
<strong>-xz or -xyz</strong>, but combining the query option
|
||||
<strong>-a</strong> just with <strong>-x</strong> can be educational.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--dist_upgrade</strong> combines an <strong>--upgrade</strong>
|
||||
with the installation of packages which are not installed. This method
|
||||
carefully examines dependencies, and resolves conflicts, and given these
|
||||
factors it will upgrade the most important packages before considering the
|
||||
installation of less important packages. Less important packages will be
|
||||
installed only if there are not any conflicts.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-search.html">next</A>; <A href="ch-query.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
29
swim.html/ch12.html
Normal file
29
swim.html/ch12.html
Normal file
@ -0,0 +1,29 @@
|
||||
<html><head>
|
||||
<title>swim - FILES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 12<br>
|
||||
FILES
|
||||
|
||||
</h1>
|
||||
|
||||
Configuration files:
|
||||
<P>
|
||||
|
||||
<pre>
|
||||
swimz.list
|
||||
swimrc
|
||||
</pre>
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-seealso.html">next</A>; <A href="ch-ramdisk.html">back</A>.
|
||||
<br>
|
||||
<address>12 March 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
29
swim.html/ch13.html
Normal file
29
swim.html/ch13.html
Normal file
@ -0,0 +1,29 @@
|
||||
<html><head>
|
||||
<title>swim - FILES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 13<br>
|
||||
FILES
|
||||
|
||||
</h1>
|
||||
|
||||
Configuration files:
|
||||
<P>
|
||||
|
||||
<pre>
|
||||
swimz.list
|
||||
swimrc
|
||||
</pre>
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-seealso.html">next</A>; <A href="ch-ramdisk.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
20
swim.html/ch15.html
Normal file
20
swim.html/ch15.html
Normal file
@ -0,0 +1,20 @@
|
||||
<html><head>
|
||||
<title>swim - BUGS</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 15<br>
|
||||
BUGS
|
||||
</h1>
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-seealso.html">back</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
64
swim.html/ch9.html
Normal file
64
swim.html/ch9.html
Normal file
@ -0,0 +1,64 @@
|
||||
<html><head>
|
||||
<title>swim - UPGRADING WITH APT
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swim - chapter 9<br>
|
||||
UPGRADING WITH APT
|
||||
|
||||
</h1>
|
||||
|
||||
usage: <strong>swim --apt</strong>
|
||||
<P>
|
||||
|
||||
options: <strong>[-xyz] [--upgrade] [--dist_upgrade]</strong>
|
||||
<P>
|
||||
|
||||
<strong>apt-get</strong> provides powerful methods to change an
|
||||
installion. When these methods are called using <strong>--apt</strong>,
|
||||
<strong>swim</strong> will not allow you to proceed until you are
|
||||
absolutely sure this is what you want to do. Before using these methods do
|
||||
a ``<strong>swim --apt --update</strong>'' so that
|
||||
<strong>apt-get</strong> knows the newest versions of available packages.
|
||||
This major mode requires a combination of <strong>-x</strong>,
|
||||
<strong>-xz</strong> or <strong>-xyz</strong> to be used along with either
|
||||
<strong>--upgrade</strong> or <strong>--dist_upgrade</strong>.
|
||||
<strong>-x</strong> used alone will simulate what would happen if
|
||||
<strong>-xz or -xyz</strong> were used (also see <code>-xyz</code> above).
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--upgrade</strong> is somewhat similiar to doing ``<strong>swim
|
||||
-qatxz</strong>'' except that it is a more intelligent method because
|
||||
<strong>apt</strong> does some behind the scene calculations in regards to
|
||||
package relationships, in fact the ``<strong>swim -qatxz</strong>''
|
||||
approach will provide totally different results, or maybe these were the
|
||||
results you really wanted. ``<strong>swim --apt --upgrade -xz</strong>''
|
||||
is the prefered, proper, and built-in way provided by
|
||||
<strong>apt-get</strong> to install the newest versions for all packages
|
||||
installed on your system. This method will not install any newer versions
|
||||
of packages which would change the install status of other packages. Note:
|
||||
It is not recommended to combine the query option <strong>-a</strong> with
|
||||
<strong>-xz or -xyz</strong>, but combining the query option
|
||||
<strong>-a</strong> just with <strong>-x</strong> can be educational.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>--dist_upgrade</strong> combines an <strong>--upgrade</strong>
|
||||
with the installation of packages which are not installed. This method
|
||||
carefully examines dependencies, and resolves conflicts, and given these
|
||||
factors it will upgrade the most important packages before considering the
|
||||
installation of less important packages. Less important packages will be
|
||||
installed only if there are not any conflicts.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-search.html">next</A>; <A href="ch-query.html">back</A>.
|
||||
<br>
|
||||
<address>12 March 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
162
swim.html/index.html
Normal file
162
swim.html/index.html
Normal file
@ -0,0 +1,162 @@
|
||||
<html><head>
|
||||
<title>swim</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>swim</h1>
|
||||
|
||||
<h2><A name="toc">
|
||||
0.1 Table of contents
|
||||
</A></h2>
|
||||
<ul>
|
||||
<li><A href="ch-description.html">1 DESCRIPTION
|
||||
</A>
|
||||
<li><A href="ch-commandline.html">2 COMMAND LINE OPTION SYNTAX
|
||||
</A>
|
||||
<li><A href="ch-version.html">3 VERSION
|
||||
</A>
|
||||
<li><A href="ch-history.html">4 HISTORY
|
||||
</A>
|
||||
<li><A href="ch-makinginst.html">5 MAKING INSTALLED SYSTEM DATABASES
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-makinginst.html#s-initdb">5.1</A> Initial database making, and Rebuilding for an
|
||||
Installed system.
|
||||
|
||||
<li><A href="ch-makinginst.html#s5.2">5.2</A> UPDATING
|
||||
|
||||
<li><A href="ch-makinginst.html#s-searchy">5.3</A> REBUILDING THE SEARCH
|
||||
|
||||
|
||||
<li><A href="ch-makinginst.html#s5.4">5.4</A> FILES
|
||||
|
||||
</ul>
|
||||
<li><A href="ch-important.html">6 IMPORTANT DEBIAN DATABASES FOR NOT-INSTALLED
|
||||
DATABASES
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-important.html#s-downimportant">6.1</A> A. downloading the important databases with --ftp.
|
||||
|
||||
<li><A href="ch-important.html#s6.2">6.2</A> OVERVIEW
|
||||
|
||||
<li><A href="ch-important.html#s-dd">6.3</A> DISTRIBUTION DEFINED
|
||||
|
||||
<li><A href="ch-important.html#s6.4">6.4</A> SECTIONS
|
||||
|
||||
<li><A href="ch-important.html#s6.5">6.5</A> ARCHITECTURES
|
||||
|
||||
<li><A href="ch-important.html#s6.6">6.6</A> SWIMZ.LIST
|
||||
|
||||
<li><A href="ch-important.html#s6.7">6.7</A> SWIMZ.LIST EXAMPLES
|
||||
|
||||
<li><A href="ch-important.html#s-ftp">6.8</A> FTP OR APT?
|
||||
|
||||
<li><A href="ch-important.html#s6.9">6.9</A> OPTIONS
|
||||
|
||||
<li><A href="ch-important.html#s6.10">6.10</A> B. downloading the important databases with apt, and maintenance
|
||||
options.
|
||||
|
||||
</ul>
|
||||
<li><A href="ch-notinstalled.html">7 MAKING NOT-INSTALLED DATABASES
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-notinstalled.html#s7.1">7.1</A> OVERVIEW
|
||||
|
||||
<li><A href="ch-notinstalled.html#s7.2">7.2</A> OPTIONS
|
||||
|
||||
<li><A href="ch-notinstalled.html#s7.3">7.3</A> UPDATING
|
||||
|
||||
<li><A href="ch-notinstalled.html#s7.4">7.4</A> REBUILDING THE SEARCH
|
||||
|
||||
<li><A href="ch-notinstalled.html#s7.5">7.5</A> FILES
|
||||
|
||||
</ul>
|
||||
<li><A href="ch-aptprep.html">8 PREPARING YOUR INSTALLATION FOR APT
|
||||
</A>
|
||||
<li><A href="ch-query.html">9 QUERYING THE INSTALLED AND NOT-INSTALLED DATABASES
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-query.html#s-mm">9.1</A> MINOR MODES
|
||||
|
||||
<li><A href="ch-query.html#s-specdata">9.2</A> SPECIFYING THE DATABASES TO USE
|
||||
|
||||
<li><A href="ch-query.html#s9.3">9.3</A> OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s9.4">9.4</A> PACKAGE RELATIONSHIPS
|
||||
|
||||
<li><A href="ch-query.html#s-format">9.5</A> FORMAT
|
||||
|
||||
<li><A href="ch-query.html#s-vrftp">9.6</A> FTP - VIRTUAL OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s-vrapt">9.7</A> APT - VIRTUAL OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s-vrrm">9.8</A> REMOVING AN INSTALLED PACKAGE - VIRTUAL OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s9.9">9.9</A> STDIN - VIRTUAL OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s9.10">9.10</A> PACKAGE MANIPULATION - VIRTUAL OPTIONS
|
||||
|
||||
<li><A href="ch-query.html#s-dblocus">9.11</A> DATABASE LOCATIONS
|
||||
|
||||
</ul>
|
||||
<li><A href="ch10.html">10 UPGRADING WITH APT
|
||||
</A>
|
||||
<li><A href="ch-search.html">11 SEARCHING
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-search.html#s11.1">11.1</A> OVERVIEW
|
||||
|
||||
<li><A href="ch-search.html#s11.2">11.2</A> NARROWING A PREVIOUS SEARCH
|
||||
|
||||
<li><A href="ch-search.html#s11.3">11.3</A> MINOR MODES
|
||||
|
||||
<li><A href="ch-search.html#s11.4">11.4</A> OTHER OPTIONS
|
||||
|
||||
<li><A href="ch-search.html#s11.5">11.5</A> EXAMPLES
|
||||
|
||||
</ul>
|
||||
<li><A href="ch-ramdisk.html">12 RAMDISK
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-ramdisk.html#s12.1">12.1</A> OVERVIEW
|
||||
|
||||
</ul>
|
||||
<li><A href="ch13.html">13 FILES
|
||||
</A>
|
||||
<li><A href="ch-seealso.html">14 SEE ALSO
|
||||
</A>
|
||||
<li><A href="ch15.html">15 BUGS</A>
|
||||
</ul>
|
||||
<hr><h2><A name="copyright">0.2 Copyright</A></h2>
|
||||
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
<P>
|
||||
|
||||
SWIM, including this manual, is free software; you
|
||||
may redistribute it and/or modify it under the terms of the
|
||||
GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
<P>
|
||||
|
||||
This is distributed in the hope that it will be useful, but
|
||||
<em>without any warranty</em>; without even the implied
|
||||
warranty of merchantability or fitness for a particular
|
||||
purpose. See the GNU General Public License for more
|
||||
details.
|
||||
<P>
|
||||
|
||||
You should have received a copy of the GNU General Public
|
||||
License with the <kbd>swim</kbd> source as the file
|
||||
<code>COPYING</code>. If not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
<hr>
|
||||
swim
|
||||
- <A href="#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="#toc">Contents</A>.
|
||||
<br>
|
||||
<address>15 June 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
755
swim_by_example.html
Normal file
755
swim_by_example.html
Normal file
@ -0,0 +1,755 @@
|
||||
<html>
|
||||
<head><title>swim by example</title></head>
|
||||
<body text="#000000" bgcolor="#FFFFe0" link="#0000EF" vlink="#51188E"
|
||||
alink="#FF0000">
|
||||
</p>
|
||||
|
||||
<br>
|
||||
<h2 align=center>The Swift, Wise, and Intuitive package Manager.</h2>
|
||||
<br>
|
||||
<p>
|
||||
We run a search for case-insensitive matches for the word "quake."
|
||||
Because we don't know how many matches the search will find, the
|
||||
descriptions of all packages found are supressed with "--no." Note: "-n"
|
||||
pertains to the not-installed (uninstalled) distribution.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -n --search quake/i --no
|
||||
swim: found 17 package(s)
|
||||
</pre>
|
||||
|
||||
<p>swim keeps a history for all searches.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -hn
|
||||
5 dpsclient-demos dgs dgs-dev freefont gs-aladdin gs-aladdin-manual
|
||||
gs-aladdin-manual-de gsfonts-other xpacman abc2ps efax ghostview gnome-gv
|
||||
gs gsfonts gsfonts-x11 gv hatman libroxen-tex pacman ppd-gs pstotext
|
||||
python-imaging svgalib1-altdev svgalibg1-dev tex4ht type1inst yorick
|
||||
4 lsof-2.2
|
||||
3 libwine-dev
|
||||
2 libwine libwine-dev libwings-dev
|
||||
1 gtkpak pak qstat quake-lib quake2 quake2-bin quake2-ctf quake2-dm
|
||||
xqf quake-3dfx quake-ggi quake-gl quake-lib-stub quake-sdl quake-server
|
||||
quake-svga quake-x11
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We can access any part of the history which we want. The first command looks at the
|
||||
information pertaining to the package. The second command shows a listing of the packages
|
||||
found for "quake." Note: When no numbers are specified for "-S", the number 1 is assumed.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qnSi 3
|
||||
Package: libwine-dev Status: install ok installed
|
||||
Version: 0.0.20000109-1 Essential: no
|
||||
Section: otherosfs Priority: optional
|
||||
Installed-Size: 3680 Source: wine
|
||||
Size: 729818 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Andrew D. Lenharth <andrewl@debian.org>
|
||||
Description: Windows Emulator (Development files)
|
||||
This is an ALPHA release of Wine, the MS-Windows emulator. This is
|
||||
still a developers release and many applications may still not work.
|
||||
.
|
||||
This package consists of the C header files.
|
||||
.
|
||||
Wine is often updated.
|
||||
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qnS
|
||||
gtkpak_0.2-1
|
||||
pak_0.2-1
|
||||
qstat_2.3e-1
|
||||
quake-lib_1.06-9
|
||||
quake2_3.20-5
|
||||
quake2-bin_3.20-1
|
||||
quake2-ctf_1.50-1
|
||||
quake2-dm_3.13-1
|
||||
xqf_0.8.99-1
|
||||
quake-3dfx_0.0.9-1
|
||||
quake-ggi_0.0.9-1
|
||||
quake-gl_0.0.9-1
|
||||
quake-lib-stub_1.9-1
|
||||
quake-sdl_0.0.9-1
|
||||
quake-server_0.0.9-1
|
||||
quake-svga_0.0.9-1
|
||||
quake-x11_0.0.9-1
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
After looking at the descriptions for the packages found through the "quake" search we decide
|
||||
to narrow down the search to "tools." Notes: We could have done this for any part of the
|
||||
history by specifying a number. "--research" will not write the changes to the history,
|
||||
"--refinesearch" will write the changes to the history. The qstat package is installed, but
|
||||
there is a newer version.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -n --research tool
|
||||
Package: gtkpak Status: not-installed
|
||||
Version: 0.2-1 Essential: no
|
||||
Section: games Priority: optional
|
||||
Installed-Size: 105 Source: pak
|
||||
Size: 32182 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Joseph Carter <knghtbrd@debian.org>
|
||||
Description: GTK program for manipulating pak archives
|
||||
gtkpak is a nifty GTK tool for manipulating the pak archives used by Quake,
|
||||
Quake 2, and QuakeWorld. It can view, extract, create, and append pak
|
||||
archives. pak contains basic command-line utilities that can do much of
|
||||
what gtkpak does without X or GTK, but gtkpak is easier to work with by
|
||||
far. Installing both won't hurt anything.
|
||||
|
||||
Package: pak Status: not-installed
|
||||
Version: 0.2-1 Essential: no
|
||||
Section: games Priority: optional
|
||||
Installed-Size: 110
|
||||
Size: 37412 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Joseph Carter <knghtbrd@debian.org>
|
||||
Description: command-line tools for pak archives
|
||||
This package contains pakx and pakc, a couple of tools for working with the
|
||||
pak archives used by Quake, Quake 2, and QuakeWorld. pakc can create and
|
||||
add files to archives, pakx can list and extract files from them. gtkpak
|
||||
is a bit fancier but then again it requires X and GTK.
|
||||
|
||||
Package: qstat Status: > hold ok installed (2.0b-1)
|
||||
Version: 2.3e-1 Essential: no
|
||||
Section: games Priority: optional
|
||||
Installed-Size: 236
|
||||
Size: 68652 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Michael Alan Dorman <mdorman@debian.org>
|
||||
Description: Command-line tool for querying quake (and other) servers
|
||||
Qstat provides a simple interface for querying servers for a number
|
||||
of games, including but not limited to quake, quakeworld, quake2,
|
||||
quake3arena, unreal tournament, kingpin and others.
|
||||
|
||||
swim: found 3 package(s)
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -n --refinesearch tool --no
|
||||
swim: found 3 package(s)
|
||||
</pre>
|
||||
|
||||
<p>This is what 1 now looks like in the history:
|
||||
<pre>
|
||||
1 gtkpak pak qstat
|
||||
</pre>
|
||||
|
||||
<p>If apt is installed it is possible to find out how other packages will
|
||||
be installed.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qxnS
|
||||
gtkpak_0.2-1
|
||||
pak_0.2-1
|
||||
qstat_2.3e-1
|
||||
Reading Package Lists...
|
||||
Building Dependency Tree...
|
||||
The following packages will be REMOVED:
|
||||
xqf
|
||||
The following NEW packages will be installed:
|
||||
gtkpak pak
|
||||
The following held packages will be changed:
|
||||
qstat xqf
|
||||
1 packages upgraded, 2 newly installed, 1 to remove and 1065 not upgraded.
|
||||
Inst gtkpak
|
||||
Remv xqf
|
||||
Inst qstat
|
||||
Inst pak
|
||||
Conf gtkpak
|
||||
Conf qstat
|
||||
Conf pak
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Oh no, xqf is going to be removed! Let's make sure that this isn't a
|
||||
package we want removed, but since we noticed a newer version of this
|
||||
package is included in the unstable distribution, let's find out what's
|
||||
going on here!
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qnxi xqf
|
||||
Package: xqf Status: > hold ok installed (0.5-1)
|
||||
Version: 0.8.99-1 Essential: no
|
||||
Section: games Priority: optional
|
||||
Installed-Size: 182
|
||||
Size: 80426 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Michael Alan Dorman <mdorman@debian.org>
|
||||
Description: X-based Quake Server Browser
|
||||
XQF allows one to browse and choose quake servers to play on.
|
||||
Reading Package Lists...
|
||||
Building Dependency Tree...
|
||||
Some packages could not be installed. This may mean that you have
|
||||
requested an impossible situation or if you are using the unstable
|
||||
distribution that some required packages have not yet been created
|
||||
or been moved out of Incoming.
|
||||
|
||||
Since you only requested a single operation it is extremely likely that
|
||||
the package is simply not installable and a bug report against
|
||||
that package should be filed.
|
||||
The following information may help to resolve the situation:
|
||||
|
||||
Sorry, but the following packages have unmet dependencies:
|
||||
xqf: Conflicts: qstat (< 2.1z-2.1a-0.1) but 2.0b-1 is to be installed
|
||||
E: Sorry, broken packages
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qnT qstat
|
||||
qstat_2.3e-1
|
||||
Depends: libc6 (>= 2.1.2)
|
||||
Conflicts: xqf (<< 0.9.2-1)
|
||||
</pre>
|
||||
|
||||
<p> As seen above, the reason why xqf has to be removed is due to a
|
||||
dependency in qstat which the packager (Michael Alan Dorman
|
||||
<mdorman@debian.org>) will have to resolve by uploading a newer version of
|
||||
xqf to the distribution. Sometimes necessary packages are still in
|
||||
Debian's Incoming directory at the ftp site, and not in the distribution,
|
||||
so we may want to check there first. If this isn't the case we will send
|
||||
a bug report to Debian's Bug Tracking System pointing out that there needs
|
||||
to be a newer version of xqf. In the meantime we have decided that we
|
||||
only want gtkpak and pak. We will use swim's editing capabilities to take
|
||||
gstat off the list. Notes: Another possibility for the bug shown above
|
||||
is that apt's cache needs to be updated to reflect the changes in Debain's
|
||||
distribution by using "swim --apt --update." When the history is edited
|
||||
with "--stdin" the history makes a new entry reflecting the change. The
|
||||
full history is accessible from "--stdin." Anybody can send a bug to
|
||||
Debian's Bug Tracking System.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qxznS --stdin
|
||||
swim: type exit to finish --stdin
|
||||
swim: gtkpak pak
|
||||
swim: exit
|
||||
Reading Package Lists... Done
|
||||
Building Dependency Tree... Done
|
||||
The following NEW packages will be installed:
|
||||
gtkpak pak
|
||||
0 packages upgraded, 2 newly installed, 0 to remove and 1067 not upgraded.
|
||||
Need to get 69.6kB of archives. After unpacking 220kB will be used.
|
||||
Get:1 ftp://ftp.debian.org unstable/main gtkpak 0.2-1 [32.2kB]
|
||||
Get:2 ftp://ftp.debian.org unstable/main pak 0.2-1 [37.4kB]
|
||||
Fetched 69.6kB in 1m15s (922B/s)
|
||||
Selecting previously deselected package gtkpak.
|
||||
(Reading database ... 106015 files and directories currently installed.)
|
||||
Unpacking gtkpak (from .../archives/gtkpak_0.2-1_i386.deb) ...
|
||||
Selecting previously deselected package pak.
|
||||
Unpacking pak (from .../archives/pak_0.2-1_i386.deb) ...
|
||||
Setting up gtkpak (0.2-1) ...
|
||||
|
||||
Setting up pak (0.2-1) ...
|
||||
gtkpak_0.2-1
|
||||
pak_0.2-1
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If we don't have apt we can still download these packages, and their sources. Here is another
|
||||
way to do the same thing we did above without using apt. Notes: This time we saved some
|
||||
typing by doing "--stdin" with "--research." We specified "--source" with "--ftp" to get the
|
||||
sources as well as the packages, or we could have just gotten the sources by themselves by
|
||||
specifying "--source_only" with "--ftp." Changes made while in "--stdin" are written to the
|
||||
history.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -n --search quake/i --no
|
||||
swim: found 17 package(s)
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -n --research tool --no --stdin --ftp --source
|
||||
swim: found 3 package(s)
|
||||
swim: type exit to finish --stdin
|
||||
swim: gtkpak pak
|
||||
swim: exit
|
||||
swim: connected to ftp.debian.org
|
||||
swim: logged in to ftp.debian.org
|
||||
swim: downloading gtkpak_0.2-1.deb (32182 bytes)
|
||||
gtkpak_0.2-1 49823b28c9599dbf94e290e28e695bc2 OK
|
||||
swim: successful retrieval of gtkpak_0.2-1.deb
|
||||
swim: downloading pak_0.2-1.diff.gz (2623 bytes)
|
||||
swim: successful retrieval of pak_0.2-1.diff.gz
|
||||
swim: downloading pak_0.2-1.dsc (825 bytes)
|
||||
swim: successful retrieval of pak_0.2-1.dsc
|
||||
swim: downloading pak_0.2.orig.tar.gz (26972 bytes)
|
||||
swim: successful retrieval of pak_0.2.orig.tar.gz
|
||||
swim: downloading pak_0.2-1.deb (37412 bytes)
|
||||
pak_0.2-1 55842f97f80c5c37415a93a7f0709171 OK
|
||||
swim: successful retrieval of pak_0.2-1.deb
|
||||
swim: pak_0.2-1.diff.gz already exists
|
||||
swim: pak_0.2-1.dsc already exists
|
||||
swim: pak_0.2.orig.tar.gz already exists
|
||||
swim: logged out
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We notice that the sources only had to be downloaded once. Looking at the packages'
|
||||
information we notice both packages share the same sources as indicated in the "Source" field.
|
||||
The field is absent for the pak package because the source name is exactly the same as the
|
||||
package's name, but for the gtkpak package this isn't the case, so the "Source" field is
|
||||
present.
|
||||
|
||||
<p>
|
||||
We can find the packages and the sources in their proper location on our local archive mirror.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ ls ~/.swim/pub/debian/dists/unstable/main/source/games
|
||||
pak_0.2-1.diff.gz pak_0.2-1.dsc pak_0.2.orig.tar.gz
|
||||
linuxalive:/home/swim/SWIMANIA$ ls ~/.swim/pub/debian/dists/unstable/main/binary-i386/games/
|
||||
gtkpak_0.2-1.deb pak_0.2-1.deb
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We can go examine the packages. It is useful to check out the changelog and the copyright.
|
||||
This is the initial release for this program. Note: "-v" will show the files in long format
|
||||
(ls -l), "--df" show the directories as well as the files.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ cd ~/.swim/pub/debian/dists/unstable/main/binary-i386/games/
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ swim -qpl --copyright --changelog gtkpak_0.2-1.deb
|
||||
#####copyright for gtkpak_0.2-1.deb#####
|
||||
|
||||
taken from the README:
|
||||
|
||||
(c) Michael Vance, 1999
|
||||
briareos@lokigames.com
|
||||
mkv102@psu.edu
|
||||
|
||||
0. Intro
|
||||
|
||||
gtkpak is a PAK file viewer for Gtk+. What are PAK files? A PAK file is used
|
||||
in id software games such as Quake and Quake 2, and their spin-offs. Just
|
||||
imagine collapsing an entire directory scheme into a big wad of files, and
|
||||
there you have a PAK file.
|
||||
|
||||
The three binaries are built around the interface provided in pakfile.h,
|
||||
which is a C++ class that allows access to the contents of a PAKFile, including
|
||||
searching and extracting from an already existing PAK file, to add files and
|
||||
then writing a new PAK file. The three binaries are then just front-ends
|
||||
to this functionality, in one way or another.
|
||||
|
||||
While it's tempting to make the classes provided in pakfile.h into a shared
|
||||
library, it's probably unnecessary. But it does make one tingly, eh?
|
||||
|
||||
And all this is GPL'ed, of course. See the file COPYING for license details.
|
||||
|
||||
|
||||
#####changelog.Debian.gz for gtkpak_0.2-1.deb#####
|
||||
|
||||
pak (0.2-1) unstable; urgency=low
|
||||
|
||||
* Initial Release.
|
||||
|
||||
-- Joseph Carter <knghtbrd@debian.org> Thu, 8 Jul 1999 17:35:38 -0700
|
||||
|
||||
Local variables:
|
||||
mode: debian-changelog
|
||||
End:
|
||||
|
||||
usr/bin/gtkpak
|
||||
usr/share/man/man6/gtkpak.6.gz
|
||||
usr/doc/gtkpak/README
|
||||
usr/doc/gtkpak/copyright
|
||||
usr/doc/gtkpak/examples/pak0.pak
|
||||
usr/doc/gtkpak/changelog.Debian.gz
|
||||
usr/lib/menu/gtkpak
|
||||
</pre>
|
||||
|
||||
<p>Let's see if there is a menu entry, and check the MD5 checksum.
|
||||
|
||||
<pre>
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ swim -qpm gtkpak_0.2-1.deb --md5sum
|
||||
#####menu for gtkpak_0.2-1.deb(gtkpak)#####
|
||||
?package(gtkpak):needs=X11 section=Games/Adventure\
|
||||
title="GtkPak" hints=Quake command="/usr/bin/gtkpak"
|
||||
|
||||
gtkpak_0.2-1 49823b28c9599dbf94e290e28e695bc2 OK
|
||||
</pre>
|
||||
|
||||
<p>It would be interesting to look at the man page for gtkpak.
|
||||
|
||||
<pre>
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ swim -qpd gtkpak_0.2-1.deb
|
||||
gtkpak_0.2-1
|
||||
|
||||
usr/share/man/man6/gtkpak.6.gz
|
||||
usr/doc/gtkpak/README
|
||||
usr/doc/gtkpak/copyright
|
||||
usr/doc/gtkpak/examples/pak0.pak
|
||||
usr/doc/gtkpak/changelog.Debian.gz
|
||||
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ swim -qp gtkpak_0.2-1.deb --extract PWD\!usr/share/man/man6/gtkpak.6.gz
|
||||
gtkpak_0.2-1
|
||||
|
||||
|
||||
swim: gtkpak.6.gz has been extracted
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ ls
|
||||
gtkpak.6.gz gtkpak_0.2-1.deb pak_0.2-1.deb
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games$ zcat gtkpak.6.gz | nroff -man | less
|
||||
"man page for gtkpak will be visible"
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We could also extract the whole archive onto our system. Note: First, we checked to make
|
||||
sure we wouldn't copy over any files from other installed packages.
|
||||
|
||||
<pre>
|
||||
linuxalive:~/.swim/pub/debian/dists/unstable/main/binary-i386/games/test$ cd /
|
||||
linuxalive:/$ swim -qp ~/.swim/pub/debian/dists/unstable/main/binary-i386/games/gtkpak_0.2-1.deb --extract ALL
|
||||
gtkpak_0.2-1
|
||||
|
||||
|
||||
swim: gtkpak_0.2-1.deb has been extracted
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If we have installed the packages with apt, we can check to see what kind of changes have been
|
||||
made to our system.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim --db --check
|
||||
checking for new, changed, and removed packages
|
||||
NEW gtkpak
|
||||
NEW pak
|
||||
|
||||
TOTAL
|
||||
-----
|
||||
NEW 2
|
||||
GONE 0
|
||||
CHANGED 0
|
||||
CHANGED STATUS 0
|
||||
</pre>
|
||||
|
||||
<p>At this point the database for our installation hasn't been updated.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -q pak
|
||||
package pak is not installed
|
||||
linuxalive:/home/swim/SWIMANIA$
|
||||
|
||||
To update the database we will issue "--db" without "--check."
|
||||
|
||||
linuxalive:/home/swim/SWIMANIA$ swim --db
|
||||
checking for new, changed, and removed packages
|
||||
NEW gtkpak
|
||||
NEW pak
|
||||
|
||||
TOTAL
|
||||
-----
|
||||
NEW 2
|
||||
GONE 0
|
||||
CHANGED 0
|
||||
CHANGED STATUS 0
|
||||
|
||||
|
||||
N|C|CS 2
|
||||
#2 N|C pak.list
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -q pak
|
||||
pak_0.2-1
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We can check to see if the uninstalled distribution had any changes. Notes: The results below
|
||||
indicate the changes found in the new Package databases that have been downloaded by updating
|
||||
apt; if we don't have apt then swim's major mode "--ftp" can be used with "DF." With "--ndb"
|
||||
use APT to indicate apt sources, or DF to indicate Package databases gotten directly through
|
||||
swim's "--ftp". If we originally made the uninstalled distribution with an uninstalled
|
||||
filesystem by using "--Contents DF" then to update the uninstalled distribution "--Contents
|
||||
DF" should be used again; this isn't necessary when running a check. To rebuild
|
||||
(--rebuildndb), update (--ndb), or check a distribution other than the default one, use
|
||||
"--dists stable", "--dists frozen" or "--dists unstable." The newest Packages can
|
||||
automatically be picked by using "--cron."
|
||||
|
||||
<p>
|
||||
A little blurb: Although not Debian approved or sanctioned, we find the unstable distribution
|
||||
acceptably stable in relation to certain well-known commercial distributions despite
|
||||
infrequent packaging bugs like the one shown in the xqf example above. The Debian
|
||||
distribution adheres to a self-imposed level of quality found in no other distribution in the
|
||||
world. Usually, unstable undergoes many changes so there isn't a time advantage over updating
|
||||
DF versus rebuilding DF, but this process is easier on system resources. On the other hand,
|
||||
updating FDBDF (no uninstalled filesystem) is faster.
|
||||
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim --apt --update; swim --ftp --Contents DF --onec;
|
||||
"output not shown"
|
||||
linuxalive:/home/swim/SWIMANIA$ swim --ndb --check APT 2> changes-today
|
||||
### Site Date Size (bytes) Release
|
||||
|
||||
CONTRIB
|
||||
1 ftp.debian.org Mon Jan 17 17:57:57 2000 112774 2.2
|
||||
|
||||
NON-FREE
|
||||
1 ftp.debian.org Sun Jan 16 17:26:23 2000 279821 2.2
|
||||
|
||||
MAIN
|
||||
1 ftp.debian.org Mon Jan 17 17:57:12 2000 3048732 2.2
|
||||
|
||||
swim: for CONTRIB, which ### do you want?: 1
|
||||
swim: for NON-FREE, which ### do you want?: 1
|
||||
swim: for MAIN, which ### do you want?: 1
|
||||
checking for new, changed, and removed packages
|
||||
|
||||
TOTAL
|
||||
-----
|
||||
NEW 12
|
||||
GONE 16
|
||||
CHANGED 54
|
||||
CHANGED REVISION 162
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We can view all the changes because we stored them in a file. We can use swim to look at all
|
||||
the changed packages except for the new ones which will be visible once we rebuild or update.
|
||||
By looking at this file we are provided a view of the inner workings of Debian development.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ cat changed-today | less
|
||||
CHANGED-REVISION gnujsp
|
||||
CHANGED iraf
|
||||
CHANGED iraf-common
|
||||
CHANGED iraf-ibin
|
||||
CHANGED iraf-noaobin
|
||||
CHANGED-REVISION jserv
|
||||
CHANGED-REVISION mailcrypt
|
||||
CHANGED plugger
|
||||
CHANGED-REVISION sarien
|
||||
NEW webrt
|
||||
"part of output not shown"
|
||||
GONE tinytable-zope
|
||||
GONE tip
|
||||
</pre>
|
||||
|
||||
<p> We decide to update with "--ndb" rather than to rebuild with
|
||||
"--rebuildndb."
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim --ndb APT --Contents DF --cron 2> changed-today
|
||||
checking for new, changed, and removed packages
|
||||
|
||||
TOTAL
|
||||
-----
|
||||
NEW 12
|
||||
GONE 16
|
||||
CHANGED 54
|
||||
CHANGED REVISION 162
|
||||
G|C|CR 232
|
||||
#232 VIRTUAL G|C|CR zicq.list
|
||||
Copying new Contents
|
||||
Compressing Contents
|
||||
N|C|CR 228
|
||||
#228 VIRTUAL N|C|CR zicq.list
|
||||
#22 NO-C zope-siteaccess.list
|
||||
Appending search databases
|
||||
Updating status
|
||||
|
||||
Sun Jan 23 14:59:04 2000 to Sun Jan 23 16:39:23 2000
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We were wondering whether it was time to update gv, but we found out that there was only a
|
||||
debian-revision change "r>" which means that the source code hasn't changed. There is no need
|
||||
to update right now.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/lib/perl5/SWIM$ which gv
|
||||
/usr/X11R6/bin/gv
|
||||
linuxalive:/usr/lib/perl5/SWIM$ cd /usr/X11R6/bin
|
||||
linuxalive:/usr/X11R6/bin$ swim -qf gv
|
||||
gv_1:3.5.8-7
|
||||
linuxalive:/usr/X11R6/bin$ swim -qfni gv
|
||||
Package: gv Status: r> hold ok installed (1:3.5.8-7)
|
||||
Version: 1:3.5.8-15 Essential: no
|
||||
Section: text Priority: optional
|
||||
Installed-Size: 477
|
||||
Size: 224778 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Marco Pistore <pistore@debian.org>
|
||||
Description: A PostScript and PDF viewer for X using 3d Athena Widgets
|
||||
`gv' is a comfortable viewer of PostScript and PDF files for the X
|
||||
Window System.
|
||||
.
|
||||
It uses the `ghostscript' PostScript(tm) interpreter and is based
|
||||
on the classic X front-end for `gs', `ghostview'. It is more
|
||||
comfortable and more powerful than `ghostview'.
|
||||
.
|
||||
Some features as e.g. PDF files or anti-aliasing are only supported
|
||||
if a recent ghostscript (4.0 or later) is installed. With
|
||||
anti-aliasing turned on, the text is very crisp and readable, with no
|
||||
`stepping' on the slants at all.
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
While we were in this directory we decided to do a little research. It is interesting to note
|
||||
that for the installed system there are 14 files which don't belong to any packages. There
|
||||
could be a variety of reasons for this (maybe we are slobs); this is good stuff to know.
|
||||
Notes: To see the total list just add "-t" to the existing command-line options. There is a
|
||||
big difference in using "." and "*", "." is the same as saying "./" but it only lists the
|
||||
same package once, whereas "*" would look at all the files in the immediate directory and if
|
||||
two files belong to the same package, that package will be shown twice for each file, it also
|
||||
reports if a file doesn't belong to a package.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/X11R6/bin$ swim -qf .
|
||||
use --total or -t to see all 202 packages
|
||||
linuxalive:/usr/X11R6/bin$ swim -qfn .
|
||||
use --total or -t to see all 420 packages
|
||||
linuxalive:/usr/X11R6/bin$ swim -qft * | grep "not owned" | wc -l
|
||||
14
|
||||
linuxalive:/usr/X11R6/bin$ swim -qfnt * | grep "not owned" | wc -l
|
||||
162
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We notice a file in the lib directory, and we wonder what it belongs to.
|
||||
|
||||
<pre>
|
||||
linuxalive:/lib$ swim -qf libthread_db-1.0.so --shlibs
|
||||
libc6_2.1.2-11
|
||||
Shlibs:
|
||||
ld-linux 2 libc6 (>= 2.1.2)
|
||||
libBrokenLocale 1 libc6 (>= 2.1.2)
|
||||
.. everything not shown ..
|
||||
libthread_db 1 libc6 (>= 2.1.2)
|
||||
libutil 1 libc6 (>= 2.1.2)
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We want to find out what dependencies apt has.
|
||||
|
||||
<pre>
|
||||
linuxalive:/lib$ swim -qfnT /usr/bin/apt-get
|
||||
apt_0.3.16
|
||||
Depends: libc6, libc6 (>= 2.1), libc6 (>= 2.1.2), libstdc++2.10
|
||||
Suggests: dpkg-dev
|
||||
Provides: libapt-pkg2.6
|
||||
Replaces: deity, libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)
|
||||
Conflicts: deity
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We need a header file called w32skrnl.h. We are in luck it's already on our system. Notes:
|
||||
We could have done "locate w32skrnl.h" and then done a "swim -qf", but we haven't updated our
|
||||
locatedb in months. The package installation will be tested by apt if it exists.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/include/wine$ swim -xn --ps w32skrnl\.h
|
||||
Package: libwine-dev Status: install ok installed
|
||||
Version: 0.0.20000109-1 Essential: no
|
||||
Section: otherosfs Priority: optional
|
||||
Installed-Size: 3680 Source: wine
|
||||
Size: 729818 Architecture: i386
|
||||
Distribution: unstable
|
||||
Maintainer: Andrew D. Lenharth <andrewl@debian.org>
|
||||
Description: Windows Emulator (Development files)
|
||||
This is an ALPHA release of Wine, the MS-Windows emulator. This is
|
||||
still a developers release and many applications may still not work.
|
||||
.
|
||||
This package consists of the C header files.
|
||||
.
|
||||
Wine is often updated.
|
||||
|
||||
swim: found 1 package(s)
|
||||
Reading Package Lists...
|
||||
Building Dependency Tree...
|
||||
Sorry, libwine-dev is already the newest version
|
||||
0 packages upgraded, 0 newly installed, 0 to remove and 1067 not upgraded.
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Sometimes it is nice to know the total of what we have installed.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/X11R6/bin$ swim -qa
|
||||
use --total or -t to see all 1449 packages
|
||||
linuxalive:/usr/X11R6/bin$ swim -qf /
|
||||
use --total or -t to see all 1449 packages
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qan
|
||||
use --total or -t to see all 4525 packages
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We can check the MD5 checksum for all the configuation files on the system. Notes: MD5
|
||||
checksum can be performed on "-l", "-d", "-c", or "-p." This can only be performed on the
|
||||
installed system.
|
||||
|
||||
<pre>
|
||||
linuxalive:/home/swim/SWIMANIA$ swim -qact --md5sum
|
||||
a2ps_4.10.2-4
|
||||
/etc/a2ps.cfg eb909349a1bb2d1f4b4adc7ab1f75e56 OK
|
||||
|
||||
acct_6.3.2-4
|
||||
/etc/cron.daily/acct d5e16c7f601c3a43d88fc8ede714c6e2 OK
|
||||
/etc/cron.monthly/acct 9ca2c358e430f94c9ae00a1ce54e6e96 OK
|
||||
/etc/init.d/acct 2f978d8517077c77e3262d7a6096fe2f OK
|
||||
|
||||
autolog_0.34-5
|
||||
/etc/autolog.conf b6ae10782ce13c45cbe72f9308b4caa1 OK
|
||||
/etc/cron.d/autolog 805d268ea44c645299defc1c14495282 MISSING
|
||||
|
||||
cfengine_1.4.9-2
|
||||
/etc/cfengine/cfengine.conf fd79d9462e92f88aa6c563f39e3e10d5 OK
|
||||
/etc/cron.daily/cfengine ac6a42f3be907b50e52834ae9d41fdbd FAILED
|
||||
/etc/cron.weekly/cfengine fbdd90ecf2e68a4ced6a6abbffd32f62 OK
|
||||
"rest of output not shown"
|
||||
</pre>
|
||||
|
||||
<p>We check to see what groups exist.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/lib/perl5/SWIM$ swim -q --allgroups
|
||||
"output not shown"
|
||||
linuxalive:/usr/lib/perl5/SWIM$ swim -qn --allgroups
|
||||
admin base comm
|
||||
contrib/admin contrib/devel contrib/doc
|
||||
contrib/games contrib/graphics contrib/interpreters
|
||||
contrib/libs contrib/mail contrib/math
|
||||
contrib/misc contrib/net contrib/news
|
||||
"rest of output not shown"
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We happen to be hamradio enthusiasts. Let's see what packages exist in the hamradio group.
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/lib/perl5/SWIM$ swim -qng hamradio
|
||||
acfax_981011-3
|
||||
ax25-apps_0.0.4-1
|
||||
ax25-tools_0.0.5-1
|
||||
colrconv_0.99.2-4
|
||||
dgipip_0.1-2
|
||||
gc_1.07-3
|
||||
hamsoft_0.1.1-1
|
||||
"rest of the output not shown"
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We edit the hamradio group package list with "--stdin." Notes: "--stdin" needs to be
|
||||
called with either "--ftp", "-x", "-xyz", "-xz", "--purge", "-r", or "--remove" to work. This
|
||||
is a readline interface. If we are in emacs mode (see man bash) here are some commands we can
|
||||
use to make the process easier.
|
||||
|
||||
<p>
|
||||
Note: The key bindings may be different on your system.
|
||||
<br>Ctrl-a = move to the beginning of the line
|
||||
<br>Ctrl-e = move to the end of the line
|
||||
<br>Ctrl-w = erase (kill) one word backward
|
||||
<br>Esc-d = kill one word forward
|
||||
<br>Esc-b = move one word backward
|
||||
<br>Esc-f = move one word forward
|
||||
<br>Ctrl-k = kill forward to the end of the line
|
||||
<br>Ctrl-y = retrieve (yank) last item killed
|
||||
<br>Ctrl-r = search backward
|
||||
<br>Esc-< = move to the beginning of the history
|
||||
<br>Esc-> = move to the end of the history
|
||||
|
||||
<pre>
|
||||
linuxalive:/usr/lib/perl5/SWIM$ swim -qng hamradio --stdin --ftp
|
||||
swim: type exit to finish --stdin
|
||||
swim: acfax ax25-apps ax25-tools colrconv dgipip gc hamsoft icom jiffy jiffy-per
|
||||
l-tk libax25 libax25-dev logconv morse nec node p10cfgd pileup predict rspfd sccw twclock twcw
|
||||
twlog unixcw wwl wxd xconvers xnecview z8530-utils z8530-utils2
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
We are finding new ways to swim everyday; we often solve problems in minutes which used
|
||||
to take an hour or more to solve. If you find a novel use for swim, please tell us, and we
|
||||
will add it to these examples.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
29
swimrc
Normal file
29
swimrc
Normal file
@ -0,0 +1,29 @@
|
||||
# Read QUICKSTART in /usr/doc/swim for important information and to
|
||||
# quickly prepare the swimrc, then read the swimrc(5) manpage for more
|
||||
# enlightenment and configuration options like "Do you want to use apt?",
|
||||
# "How about non-us?".
|
||||
|
||||
# Which do you have on your system? Pick dpkg if Debian, ar if non-Debian.
|
||||
#$package_tool = "/usr/bin/dpkg";
|
||||
#$package_tool = "/usr/bin/ar";
|
||||
|
||||
# Do you have apt installed?
|
||||
#$apt = "yes";
|
||||
|
||||
# Pick one.
|
||||
#$architecture = "alpha";
|
||||
#$architecture = "arm";
|
||||
#$architecture = "hurd-i386";
|
||||
#$architecture = "i386";
|
||||
#$architecture = "m68k";
|
||||
#$architecture = "powerpc";
|
||||
#$architecture = "sparc";
|
||||
|
||||
# Which distribution? Pick one.
|
||||
#$distribution = "stable";
|
||||
#$distribution = "unstable";
|
||||
#$distribution = "frozen";
|
||||
|
||||
# Remove sections after qw that you do not want. Use non-US for non-us.
|
||||
#@user_defined_section = qw(main contrib non-free);
|
||||
|
402
swimrc.5
Normal file
402
swimrc.5
Normal file
@ -0,0 +1,402 @@
|
||||
.rn '' }`
|
||||
''' $RCSfile$$Revision$$Date$
|
||||
'''
|
||||
''' $Log$
|
||||
'''
|
||||
.de Sh
|
||||
.br
|
||||
.if t .Sp
|
||||
.ne 5
|
||||
.PP
|
||||
\fB\\$1\fR
|
||||
.PP
|
||||
..
|
||||
.de Sp
|
||||
.if t .sp .5v
|
||||
.if n .sp
|
||||
..
|
||||
.de Ip
|
||||
.br
|
||||
.ie \\n(.$>=3 .ne \\$3
|
||||
.el .ne 3
|
||||
.IP "\\$1" \\$2
|
||||
..
|
||||
.de Vb
|
||||
.ft CW
|
||||
.nf
|
||||
.ne \\$1
|
||||
..
|
||||
.de Ve
|
||||
.ft R
|
||||
|
||||
.fi
|
||||
..
|
||||
'''
|
||||
'''
|
||||
''' Set up \*(-- to give an unbreakable dash;
|
||||
''' string Tr holds user defined translation string.
|
||||
''' Bell System Logo is used as a dummy character.
|
||||
'''
|
||||
.tr \(*W-|\(bv\*(Tr
|
||||
.ie n \{\
|
||||
.ds -- \(*W-
|
||||
.ds PI pi
|
||||
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
||||
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
||||
.ds L" ""
|
||||
.ds R" ""
|
||||
''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
|
||||
''' \*(L" and \*(R", except that they are used on ".xx" lines,
|
||||
''' such as .IP and .SH, which do another additional levels of
|
||||
''' double-quote interpretation
|
||||
.ds M" """
|
||||
.ds S" """
|
||||
.ds N" """""
|
||||
.ds T" """""
|
||||
.ds L' '
|
||||
.ds R' '
|
||||
.ds M' '
|
||||
.ds S' '
|
||||
.ds N' '
|
||||
.ds T' '
|
||||
'br\}
|
||||
.el\{\
|
||||
.ds -- \(em\|
|
||||
.tr \*(Tr
|
||||
.ds L" ``
|
||||
.ds R" ''
|
||||
.ds M" ``
|
||||
.ds S" ''
|
||||
.ds N" ``
|
||||
.ds T" ''
|
||||
.ds L' `
|
||||
.ds R' '
|
||||
.ds M' `
|
||||
.ds S' '
|
||||
.ds N' `
|
||||
.ds T' '
|
||||
.ds PI \(*p
|
||||
'br\}
|
||||
.\" If the F register is turned on, we'll generate
|
||||
.\" index entries out stderr for the following things:
|
||||
.\" TH Title
|
||||
.\" SH Header
|
||||
.\" Sh Subsection
|
||||
.\" Ip Item
|
||||
.\" X<> Xref (embedded
|
||||
.\" Of course, you have to process the output yourself
|
||||
.\" in some meaninful fashion.
|
||||
.if \nF \{
|
||||
.de IX
|
||||
.tm Index:\\$1\t\\n%\t"\\$2"
|
||||
..
|
||||
.nr % 0
|
||||
.rr F
|
||||
.\}
|
||||
.TH swimrc 5 " " "27/May/99" " "
|
||||
.UC
|
||||
.if n .hy 0
|
||||
.if n .na
|
||||
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
||||
.de CQ \" put $1 in typewriter font
|
||||
.ft CW
|
||||
'if n "\c
|
||||
'if t \\&\\$1\c
|
||||
'if n \\&\\$1\c
|
||||
'if n \&"
|
||||
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
|
||||
'.ft R
|
||||
..
|
||||
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
|
||||
. \" AM - accent mark definitions
|
||||
.bd B 3
|
||||
. \" fudge factors for nroff and troff
|
||||
.if n \{\
|
||||
. ds #H 0
|
||||
. ds #V .8m
|
||||
. ds #F .3m
|
||||
. ds #[ \f1
|
||||
. ds #] \fP
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
||||
. ds #V .6m
|
||||
. ds #F 0
|
||||
. ds #[ \&
|
||||
. ds #] \&
|
||||
.\}
|
||||
. \" simple accents for nroff and troff
|
||||
.if n \{\
|
||||
. ds ' \&
|
||||
. ds ` \&
|
||||
. ds ^ \&
|
||||
. ds , \&
|
||||
. ds ~ ~
|
||||
. ds ? ?
|
||||
. ds ! !
|
||||
. ds /
|
||||
. ds q
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
||||
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
||||
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
||||
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
||||
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
||||
. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
|
||||
. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
|
||||
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
||||
. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
|
||||
.\}
|
||||
. \" troff and (daisy-wheel) nroff accents
|
||||
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
||||
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
||||
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
|
||||
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
|
||||
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
|
||||
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
|
||||
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
||||
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
||||
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
||||
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
||||
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
||||
.ds ae a\h'-(\w'a'u*4/10)'e
|
||||
.ds Ae A\h'-(\w'A'u*4/10)'E
|
||||
.ds oe o\h'-(\w'o'u*4/10)'e
|
||||
.ds Oe O\h'-(\w'O'u*4/10)'E
|
||||
. \" corrections for vroff
|
||||
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
||||
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
||||
. \" for low resolution devices (crt and lpr)
|
||||
.if \n(.H>23 .if \n(.V>19 \
|
||||
\{\
|
||||
. ds : e
|
||||
. ds 8 ss
|
||||
. ds v \h'-1'\o'\(aa\(ga'
|
||||
. ds _ \h'-1'^
|
||||
. ds . \h'-1'.
|
||||
. ds 3 3
|
||||
. ds o a
|
||||
. ds d- d\h'-1'\(ga
|
||||
. ds D- D\h'-1'\(hy
|
||||
. ds th \o'bp'
|
||||
. ds Th \o'LP'
|
||||
. ds ae ae
|
||||
. ds Ae AE
|
||||
. ds oe oe
|
||||
. ds Oe OE
|
||||
.\}
|
||||
.rm #[ #] #H #V #F C
|
||||
.SH "NAME"
|
||||
swimrc \- swim configuration file
|
||||
.SH "DESCRIPTION"
|
||||
\fBswimrc\fR is the configuartion file for swim allowing many default values
|
||||
to be set so that they do not have to be mentioned on the command line.
|
||||
Swimrc interacts directly with Perl allowing a wide variety of variables
|
||||
found in \fBSWIW::Conf\fR to be altered.
|
||||
.SH "USAGE"
|
||||
Values for variable can be altered for \fBswim\fR by assigning different
|
||||
values enclosed in quotes or quoted whitespace (\fIqw()\fR), and ended with a
|
||||
semi-colon.
|
||||
.PP
|
||||
.Vb 2
|
||||
\& $variable = "value";
|
||||
\& $variable = "qw(value1 value2 ..)";
|
||||
.Ve
|
||||
.SH "VARIABLES"
|
||||
This is a list of variables with explanations. The default values for
|
||||
\fBswim\fR are shown.
|
||||
.Sh "\s-1OUTPUT\s0 \s-1VARIABLE\s0 "
|
||||
$my_number can be changed to how many lines you would like \*(L"swim \-qf <>\*(R"
|
||||
to print out, before the program asks for \f(CW-t\fR or \f(CW--total\fR. Exception:
|
||||
If \f(CW-i\fR is used in the query and there is more than one package then the
|
||||
total will be presented.
|
||||
.PP
|
||||
Hint: \f(CW-t\fR can be used with all the various \f(CW--scripts\fR family members
|
||||
to view the title of the script file regardless of this variable setting,
|
||||
and if \f(CW-t\fR has to be used, the titles will be displayed, which makes
|
||||
sense.
|
||||
.PP
|
||||
\fB$my_number = 23;\fR
|
||||
.Sh "\s-1HISTORY\s0"
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when \f(CW--stdin\fR is used.
|
||||
.PP
|
||||
\fB$\s-1HISTORY\s0 = 10;\fR
|
||||
.Sh "\s-1AR\s0 or \s-1DPKG\s0?"
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign \*(L"dpkg\*(R" to \f(CW$package_tool\fR, otherwise assign \*(L"ar\*(R" to \f(CW$package_tool\fR.
|
||||
.PP
|
||||
\fB$package_tool = \*(L"/usr/bin/ar\*(R";\fR
|
||||
.Sh "\s-1APT\s0"
|
||||
\fBSwim\fR does not assign a value for apt. To use \f(CW--apt\fR and \f(CW-xyz\fR
|
||||
assign \f(CW$apt\fR the value \*(L"yes\*(R".
|
||||
.PP
|
||||
Example: \fB$apt = \*(L"yes\*(R";\fR
|
||||
.Sh "\s-1PAGER\s0"
|
||||
less is a nice pager, unless you like more! Pager is used for \f(CW--help\fR
|
||||
and \fBswim\fR called without any options. There is an option \f(CW--nopager\fR or
|
||||
\f(CW-n\fR. more comes from the required package util-linux, whereas less
|
||||
comes from a standard package called less. Values: \*(L"less\*(R", \*(L"more\*(R", or
|
||||
\*(L"most\*(R" or...
|
||||
.PP
|
||||
\fB$\s-1ENV\s0{\s-1PAGER\s0} = \*(L"less\*(R";\fR
|
||||
.Sh "\s-1NOT\s0\-\s-1INSTALLED\s0 \s-1VARIABLES\s0 "
|
||||
Assign values for \f(CW$architecture\fR and/or \f(CW$distribution\fR to avoid having to
|
||||
use \f(CW--arch\fR and \f(CW--dists\fR everytime the not-installed databases are
|
||||
accessed with \f(CW-n\fR or made or altered.
|
||||
.PP
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is \fIalpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc\fR. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
.PP
|
||||
\fB$architecture = \*(L"i386\*(R";\fR
|
||||
.PP
|
||||
The distribution can be either \fIstable, unstable, frozen, or experimental
|
||||
(rare)\fR. These represent the state of development that the packages are
|
||||
under. The unstable distribution can have lot's of changes within a very
|
||||
short time period, and frozen may or may not be available.
|
||||
.PP
|
||||
\fB$distribution = \*(L"unstable\*(R";\fR
|
||||
.PP
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at one time separate distributions, but this has since changed.
|
||||
.PP
|
||||
You can determine which of the sections \fImain, non-free, contrib or
|
||||
non-\s-1US\s0\fR to pull out of the Contents file if you don't want to use
|
||||
\f(CW--main\fR, \f(CW--contrib\fR, \f(CW--non-free\fR, and \f(CW--non-us\fR to selectively
|
||||
pick the sections.
|
||||
.PP
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages \fIfile\fR\|(s) being targetted.
|
||||
.PP
|
||||
Rule: Use \*(L"non-\s-1US\s0\*(R" not \*(L"non-us\*(R".
|
||||
.PP
|
||||
\fB@user_defined_section = qw(main contrib non-free non-\s-1US\s0);\fR
|
||||
.Sh "\s-1DF\s0 \s-1LOCATION\s0"
|
||||
A little philosophy: \fBswim\fR was developed for maximum versatility, so
|
||||
whether you are just interested in researching, and keeping tabs on the
|
||||
newest packages, or maintaining a Debian virtual distribution on a
|
||||
non-Debian distribution, or you are a using \fBswim\fR for distribution
|
||||
development, \fBswim\fR provides a way.
|
||||
.PP
|
||||
The next two variables determine the location of the \s-1DF\s0 (default
|
||||
directory/file system)
|
||||
.PP
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release
|
||||
file are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim will still do the renaming and keeping track of the mtime, but you
|
||||
will have to remember where you put the files.
|
||||
.PP
|
||||
\fB$default_directory = \*(L'/root/.swim\*(R';\fR
|
||||
.PP
|
||||
The default root directory (\s-1DRD\s0) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be a real ftp site on your computer, or put wherever else you are
|
||||
allowed to have directories. The \s-1DRD\s0 is always placed below the value
|
||||
assigned to \f(CW$default_directory\fR. According to the previous assignment to
|
||||
\f(CW$default_directory\fR, if the \s-1DRD\s0 is \*(L"/pub/a/debian\*(R" then the full path
|
||||
would be \*(L"/root/.swim/pub/a/debian\*(R".
|
||||
.PP
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the \s-1DRD\s0.
|
||||
.PP
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-\s-1US\s0 or
|
||||
personal (specialized distribution).
|
||||
.PP
|
||||
\fB$default_root_directory = \*(L'/pub/debian\*(R';\fR
|
||||
.PP
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions \fBswim\fR will assign for directories it creates
|
||||
below the \s-1DRD\s0.
|
||||
.PP
|
||||
\fB$permission = \*(L'0755\*(R';\fR
|
||||
.Sh "\s-1TEMPORARY\s0 \s-1DIRECTORY\s0"
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
\f(CW$tmp\fR a \s-1RAM\s0 disk. See package loadlin for initrd documentation and an
|
||||
explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
.PP
|
||||
\fB$tmp = \*(L"/tmp\*(R";\fR
|
||||
.Sh "\s-1FTP\s0"
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in \fINet::\s-1FTP\s0\fR\|(3pm) by providing
|
||||
arguments to these variables. All variables but \f(CW$timeout\fR are set to untrue
|
||||
by default.
|
||||
.PP
|
||||
.Vb 5
|
||||
\& $firewall = 0; (FTP firewall machine name)
|
||||
\& $port = 0; (defaults to 23)
|
||||
\& $timeout = 120; (120 seconds)
|
||||
\& $debug = 0; (1 will turn on STDERR)
|
||||
\& $passive = 0; (1 will enable)
|
||||
.Ve
|
||||
.SH "OTHER VARIABLES"
|
||||
see SWIM::Conf
|
||||
.SH "FILES"
|
||||
.PP
|
||||
.Vb 2
|
||||
\& /etc/swim/swimrc
|
||||
\& ~/.swim/swimrc
|
||||
.Ve
|
||||
.SH "SEE ALSO"
|
||||
\fIswim\fR\|(8), \fINet::FTP\fR\|(3pm)
|
||||
.SH "BUGS"
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
.SH "AUTHOR"
|
||||
Jonathan D. Rosenbaum <mttrader@access.mountain.net>
|
||||
.SH "COPYRIGHT"
|
||||
Copyright (c) 1999 Jonathan Rosenbaum. All rights reserved. This program
|
||||
is free software; you can redistribute it and/or modify it under the GPL.
|
||||
|
||||
.rn }` ''
|
||||
.IX Title "swimrc 5"
|
||||
.IX Name "swimrc - swim configuration file"
|
||||
|
||||
.IX Header "NAME"
|
||||
|
||||
.IX Header "DESCRIPTION"
|
||||
|
||||
.IX Header "USAGE"
|
||||
|
||||
.IX Header "VARIABLES"
|
||||
|
||||
.IX Subsection "\s-1OUTPUT\s0 \s-1VARIABLE\s0 "
|
||||
|
||||
.IX Subsection "\s-1HISTORY\s0"
|
||||
|
||||
.IX Subsection "\s-1AR\s0 or \s-1DPKG\s0?"
|
||||
|
||||
.IX Subsection "\s-1APT\s0"
|
||||
|
||||
.IX Subsection "\s-1PAGER\s0"
|
||||
|
||||
.IX Subsection "\s-1NOT\s0\-\s-1INSTALLED\s0 \s-1VARIABLES\s0 "
|
||||
|
||||
.IX Subsection "\s-1DF\s0 \s-1LOCATION\s0"
|
||||
|
||||
.IX Subsection "\s-1TEMPORARY\s0 \s-1DIRECTORY\s0"
|
||||
|
||||
.IX Subsection "\s-1FTP\s0"
|
||||
|
||||
.IX Header "OTHER VARIABLES"
|
||||
|
||||
.IX Header "FILES"
|
||||
|
||||
.IX Header "SEE ALSO"
|
||||
|
||||
.IX Header "BUGS"
|
||||
|
||||
.IX Header "AUTHOR"
|
||||
|
||||
.IX Header "COPYRIGHT"
|
||||
|
26
swimrc.html/ch-description.html
Normal file
26
swimrc.html/ch-description.html
Normal file
@ -0,0 +1,26 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - DESCRIPTION
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 1<br>
|
||||
DESCRIPTION
|
||||
|
||||
</h1>
|
||||
|
||||
<kbd>swimrc</kbd> is the configuartion file for swim allowing many
|
||||
default values to be set so that they do not have to be mentioned on the
|
||||
command line. Swimrc interacts directly with Perl allowing a wide variety
|
||||
of variables found in <kbd>SWIW::Conf</kbd> to be altered.
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-usage.html">next</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
26
swimrc.html/ch-files.html
Normal file
26
swimrc.html/ch-files.html
Normal file
@ -0,0 +1,26 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - FILES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 5<br>
|
||||
FILES
|
||||
|
||||
</h1>
|
||||
|
||||
<code> /etc/swim/swimrc</code><P>
|
||||
|
||||
<code>~/.swim/swimrc</code>
|
||||
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch6.html">next</A>; <A href="ch-othervars.html">back</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
23
swimrc.html/ch-othervars.html
Normal file
23
swimrc.html/ch-othervars.html
Normal file
@ -0,0 +1,23 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - OTHER VARIABLES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 4<br>
|
||||
OTHER VARIABLES
|
||||
|
||||
</h1>
|
||||
|
||||
see SWIM::Conf
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-files.html">next</A>; <A href="ch-variables.html">back</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
35
swimrc.html/ch-restrictions.html
Normal file
35
swimrc.html/ch-restrictions.html
Normal file
@ -0,0 +1,35 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - RESTRICTIONS
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 6<br>
|
||||
RESTRICTIONS
|
||||
|
||||
</h1>
|
||||
|
||||
Strange Situations: If the same package happens to exist in two different
|
||||
sections, <em>main and non-us</em> for example, and you make the
|
||||
databases, you will still be able to find this package in the non-us
|
||||
group, but its section and locations will be the one which main recognizes
|
||||
assuming that you use the order in the example below.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Example: You just want to pull out main and contrib every time you run
|
||||
<code>--initndb</code>, <code>--rebuildndb</code>, or <code>--ndb</code>.
|
||||
<P>
|
||||
<code>@user_defined_section</code> = <code>``qw(main contrib non-US)'';</code>
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-files.html">back</A>.
|
||||
<br>
|
||||
<address>14 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
29
swimrc.html/ch-usage.html
Normal file
29
swimrc.html/ch-usage.html
Normal file
@ -0,0 +1,29 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - USAGE
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 2<br>
|
||||
USAGE
|
||||
|
||||
</h1>
|
||||
Values for variable can be altered for <strong>swim</strong> by assigning
|
||||
different values enclosed in quotes or quoted whitespace (qw()), and ending
|
||||
with a semi-colon. <P>
|
||||
|
||||
<code> $variable = ``value'';</code><P>
|
||||
<code>$variable = ``(value1 value2 ..)'';</code>
|
||||
<P>
|
||||
<P>
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-variables.html">next</A>; <A href="ch-description.html">back</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
284
swimrc.html/ch-variables.html
Normal file
284
swimrc.html/ch-variables.html
Normal file
@ -0,0 +1,284 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - VARIABLES
|
||||
</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 3<br>
|
||||
VARIABLES
|
||||
|
||||
</h1>
|
||||
This is a list of variables with explanations. The default values for
|
||||
<strong>swim</strong> are shown.
|
||||
|
||||
|
||||
<hr>
|
||||
<h2><A name="s3.1">
|
||||
3.1 OUTPUT VARIABLE
|
||||
|
||||
</A></h2>
|
||||
<code>$my_number</code> can be changed to how many lines you would like
|
||||
``swim -qf <>'' to print out, before the program asks for
|
||||
<code>-t</code> or <code>--total</code>. Exception: If <code>-i</code> is
|
||||
used in the query and there is more than one package then the total will
|
||||
be presented.
|
||||
|
||||
<P>
|
||||
|
||||
Hint: <code>-t</code> can be used with all the various
|
||||
<code>--scripts</code> family members to view the title of the script file
|
||||
regardless of this variable setting, and if <code>-t</code> has to be
|
||||
used, the titles will be displayed, which makes sense.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>$my_number = 23;</strong>
|
||||
|
||||
<hr>
|
||||
<h2><A name="s3.2">
|
||||
3.2 HISTORY
|
||||
|
||||
</A></h2>
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when <code>--stdin</code> is used.
|
||||
<P>
|
||||
|
||||
<strong>$HISTORY = 10;</strong>
|
||||
|
||||
<hr>
|
||||
<h2><A name="s3.3">
|
||||
3.3 AR or DPKG?
|
||||
|
||||
</A></h2>
|
||||
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign ``dpkg'' to $package_tool, otherwise assign ``ar'' to
|
||||
$package_tool.
|
||||
<P>
|
||||
|
||||
<strong>$package_tool = "/usr/bin/ar";</strong>
|
||||
<hr>
|
||||
<h2><A name="s3.4">
|
||||
3.4 APT
|
||||
|
||||
</A></h2>
|
||||
|
||||
<strong>Swim</strong> does not assign a value for apt. To use
|
||||
<code>--apt</code> and <code>-xyz</code> assign <code>$apt</code> the
|
||||
value ``yes''.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Example: <strong>$apt = "yes";</strong>
|
||||
<hr>
|
||||
<h2><A name="s3.5">
|
||||
3.5 PAGER
|
||||
|
||||
</A></h2>
|
||||
|
||||
|
||||
<strong>less</strong> is a nice pager, unless you like
|
||||
<strong>more</strong>! Pager is used for <code>--help</code> and
|
||||
<strong>swim</strong> called without any options. There is an option
|
||||
<code>--nopager</code> or <code>-n</code>. <strong>more</strong> comes from the
|
||||
required package util-linux, whereas <strong>less</strong> comes from a
|
||||
standard package called less. Values: ``less'', ``more'', or ``most''
|
||||
or...
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$ENV{PAGER} = "less";</strong>
|
||||
<hr>
|
||||
<h2><A name="s3.6">
|
||||
3.6 NOT-INSTALLED VARIABLES
|
||||
|
||||
</A></h2>
|
||||
|
||||
Assign values for <code>$architecture</code> and/or
|
||||
<code>$distribution</code> to avoid having to use <code>--arch</code> and
|
||||
<code>--dists</code> everytime the not-installed databases are accessed
|
||||
with <code>-n</code> or made or altered.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is <em>alpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc</em>. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$architecture = "i386";</strong>
|
||||
<P>
|
||||
|
||||
|
||||
The distribution can be either <em>stable, unstable, frozen, or
|
||||
experimental (rare)</em>. These represent the state of development that
|
||||
the packages are under. The unstable distribution can have lot's of
|
||||
changes within a very short time period, and frozen may or may not be
|
||||
available.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$distribution = "unstable";</strong>
|
||||
<P>
|
||||
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at
|
||||
one time separate distributions, but this has since changed.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
You can determine which of the sections <em>main, non-free, contrib or
|
||||
non-US</em> to pull out of the Contents file if you don't want to use
|
||||
<code>--main</code>, <code>--contrib</code>, <code>--non-free</code>, and
|
||||
<code>--non-us</code> to selectively pick the sections.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages <code>file(s)</code> being targetted.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Rule: Use ``non-US'' not ``non-us''.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>@user_defined_section = qw(main contrib non-free non-US);</strong>
|
||||
|
||||
<hr>
|
||||
<h2><A name="s3.7">
|
||||
3.7 DF LOCATION
|
||||
|
||||
</A></h2>
|
||||
|
||||
A little philosophy: <strong>swim</strong> was developed for maximum
|
||||
versatility, so whether you are just interested in researching, and
|
||||
keeping tabs on the newest packages, or maintaining a Debian virtual
|
||||
distribution on a non-Debian distribution, or you are a using
|
||||
<strong>swim</strong> for distribution development, <strong>swim</strong>
|
||||
provides a way.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release file
|
||||
are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim
|
||||
|
||||
will still do the renaming and keeping track of the mtime, but you will
|
||||
have to remember where you put the files.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$default_directory = '/root/.swim';</strong>
|
||||
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
The default root directory (DRD) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be
|
||||
a real ftp site on your computer, or put wherever else you are allowed to
|
||||
have directories. The DRD is always placed below the value assigned to
|
||||
$default_directory. According to the previous assignment to
|
||||
$default_directory, if the DRD is ``/pub/a/debian'' then the full path
|
||||
would be ``/root/.swim/pub/a/debian''.
|
||||
<P>
|
||||
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$default_root_directory = '/pub/debian';</strong>
|
||||
<P>
|
||||
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions <strong>swim</strong> will assign for
|
||||
directories it
|
||||
creates below the DRD.
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$permission = '0755';</strong>
|
||||
|
||||
<hr>
|
||||
<h2><A name="s3.8">
|
||||
3.8 TEMPORARY DIRECTORY
|
||||
|
||||
</A></h2>
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
<code>$tmp</code> a RAM disk. See package loadlin for initrd documentation and
|
||||
an explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
<P>
|
||||
|
||||
|
||||
<strong>$tmp = "/tmp";</strong>
|
||||
<hr>
|
||||
<h2><A name="s3.9">
|
||||
3.9 FTP
|
||||
|
||||
</A></h2>
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by providing
|
||||
arguments to these variables. All variables but $timeout are set to untrue
|
||||
by default.
|
||||
|
||||
<pre> $firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)</pre>
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-othervars.html">next</A>; <A href="ch-usage.html">back</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
20
swimrc.html/ch6.html
Normal file
20
swimrc.html/ch6.html
Normal file
@ -0,0 +1,20 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file - BUGS</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>
|
||||
swimrc - swim configuration file - chapter 6<br>
|
||||
BUGS
|
||||
</h1>
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="index.html#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="index.html#toc">Contents</A>; <A href="ch-files.html">back</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
76
swimrc.html/index.html
Normal file
76
swimrc.html/index.html
Normal file
@ -0,0 +1,76 @@
|
||||
<html><head>
|
||||
<title>swimrc - swim configuration file</title>
|
||||
<link rev=made href="mailto:mttrader@access.mountain.net">
|
||||
</head><body>
|
||||
<h1>swimrc - swim configuration file</h1>
|
||||
|
||||
<h2><A name="toc">
|
||||
0.1 Table of contents
|
||||
</A></h2>
|
||||
<ul>
|
||||
<li><A href="ch-description.html">1 DESCRIPTION
|
||||
</A>
|
||||
<li><A href="ch-usage.html">2 USAGE
|
||||
</A>
|
||||
<li><A href="ch-variables.html">3 VARIABLES
|
||||
</A>
|
||||
<ul>
|
||||
<li><A href="ch-variables.html#s3.1">3.1</A> OUTPUT VARIABLE
|
||||
|
||||
<li><A href="ch-variables.html#s3.2">3.2</A> HISTORY
|
||||
|
||||
<li><A href="ch-variables.html#s3.3">3.3</A> AR or DPKG?
|
||||
|
||||
<li><A href="ch-variables.html#s3.4">3.4</A> APT
|
||||
|
||||
<li><A href="ch-variables.html#s3.5">3.5</A> PAGER
|
||||
|
||||
<li><A href="ch-variables.html#s3.6">3.6</A> NOT-INSTALLED VARIABLES
|
||||
|
||||
<li><A href="ch-variables.html#s3.7">3.7</A> DF LOCATION
|
||||
|
||||
<li><A href="ch-variables.html#s3.8">3.8</A> TEMPORARY DIRECTORY
|
||||
|
||||
<li><A href="ch-variables.html#s3.9">3.9</A> FTP
|
||||
|
||||
</ul>
|
||||
<li><A href="ch-othervars.html">4 OTHER VARIABLES
|
||||
</A>
|
||||
<li><A href="ch-files.html">5 FILES
|
||||
</A>
|
||||
<li><A href="ch6.html">6 BUGS</A>
|
||||
</ul>
|
||||
<hr><h2><A name="copyright">0.2 Copyright</A></h2>
|
||||
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
<P>
|
||||
|
||||
SWIM, including this manual, is free software; you
|
||||
may redistribute it and/or modify it under the terms of the
|
||||
GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
<P>
|
||||
|
||||
This is distributed in the hope that it will be useful, but
|
||||
<em>without any warranty</em>; without even the implied
|
||||
warranty of merchantability or fitness for a particular
|
||||
purpose. See the GNU General Public License for more
|
||||
details.
|
||||
<P>
|
||||
|
||||
You should have received a copy of the GNU General Public
|
||||
License with the <kbd>swim</kbd> source as the file
|
||||
<code>COPYING</code>. If not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
<hr>
|
||||
swimrc - swim configuration file
|
||||
- <A href="#copyright">
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</A>
|
||||
<br>
|
||||
<A href="#toc">Contents</A>.
|
||||
<br>
|
||||
<address>27 May 1999<br>
|
||||
Jonathan D. Rosenbaum<A href="mailto:mttrader@access.mountain.net">mttrader@access.mountain.net</A></address>
|
||||
</body></html>
|
354
swimrc.sgml
Normal file
354
swimrc.sgml
Normal file
@ -0,0 +1,354 @@
|
||||
<!doctype debiandoc system>
|
||||
|
||||
<debiandoc>
|
||||
|
||||
<book>
|
||||
|
||||
<titlepag>
|
||||
|
||||
<title>swimrc - swim configuration file</title>
|
||||
|
||||
<author>
|
||||
<name>Jonathan D. Rosenbaum</name>
|
||||
<email>mttrader@access.mountain.net</email>
|
||||
</author>
|
||||
|
||||
<version><date></version>
|
||||
|
||||
<copyright>
|
||||
|
||||
<copyrightsummary>
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
</copyrightsummary>
|
||||
|
||||
<p>
|
||||
SWIM, including this manual, is free software; you
|
||||
may redistribute it and/or modify it under the terms of the
|
||||
GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This is distributed in the hope that it will be useful, but
|
||||
<em>without any warranty</em>; without even the implied
|
||||
warranty of merchantability or fitness for a particular
|
||||
purpose. See the GNU General Public License for more
|
||||
details.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You should have received a copy of the GNU General Public
|
||||
License with the <prgn>swim</prgn> source as the file
|
||||
<tt>COPYING</tt>. If not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
</p>
|
||||
|
||||
</copyright>
|
||||
|
||||
</titlepag>
|
||||
|
||||
<toc sect>
|
||||
|
||||
<chapt id="description">DESCRIPTION
|
||||
|
||||
<p>
|
||||
|
||||
<prgn>swimrc</prgn> is the configuartion file for swim allowing many
|
||||
default values to be set so that they do not have to be mentioned on the
|
||||
command line. Swimrc interacts directly with Perl allowing a wide variety
|
||||
of variables found in <prgn>SWIW::Conf</prgn> to be altered.
|
||||
|
||||
<chapt id="usage">USAGE
|
||||
|
||||
<p>
|
||||
Values for variable can be altered for <STRONG>swim</STRONG> by assigning
|
||||
different values enclosed in quotes or quoted whitespace (qw()), and ending
|
||||
with a semi-colon.
|
||||
<P>
|
||||
|
||||
<tt> $variable = ``value'';</tt>
|
||||
<p>
|
||||
<tt>$variable = ``(value1 value2 ..)'';</tt>
|
||||
|
||||
<P>
|
||||
|
||||
<P>
|
||||
<chapt id="variables">VARIABLES
|
||||
|
||||
<p>
|
||||
This is a list of variables with explanations. The default values for
|
||||
<STRONG>swim</STRONG> are shown.
|
||||
|
||||
|
||||
|
||||
<sect>OUTPUT VARIABLE
|
||||
|
||||
<p>
|
||||
<tt>$my_number</tt> can be changed to how many lines you would like
|
||||
``swim -qf <>'' to print out, before the program asks for
|
||||
<tt>-t</tt> or <tt>--total</tt>. Exception: If <tt>-i</tt> is
|
||||
used in the query and there is more than one package then the total will
|
||||
be presented.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
Hint: <tt>-t</tt> can be used with all the various
|
||||
<tt>--scripts</tt> family members to view the title of the script file
|
||||
regardless of this variable setting, and if <tt>-t</tt> has to be
|
||||
used, the titles will be displayed, which makes sense.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<strong>$my_number = 23;</strong>
|
||||
|
||||
|
||||
<sect>HISTORY
|
||||
|
||||
<p>
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when <tt>--stdin</tt> is used.
|
||||
|
||||
<P>
|
||||
|
||||
<strong>$HISTORY = 10;</strong>
|
||||
|
||||
|
||||
<sect>AR or DPKG?
|
||||
|
||||
<p>
|
||||
Debian packages are ar archives. If you are using a Debian Distribution
|
||||
assign ``dpkg'' to $package_tool, otherwise assign ``ar'' to
|
||||
$package_tool.
|
||||
|
||||
<p>
|
||||
<STRONG>$package_tool = "/usr/bin/ar";</STRONG>
|
||||
|
||||
<sect>APT
|
||||
|
||||
<p>
|
||||
<STRONG>Swim</STRONG> does not assign a value for apt. To use
|
||||
<tt>--apt</tt> and <tt>-xyz</tt> assign <tt>$apt</tt> the
|
||||
value ``yes''.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
Example: <STRONG>$apt = "yes";</STRONG>
|
||||
|
||||
<sect>PAGER
|
||||
|
||||
<p>
|
||||
|
||||
<strong>less</strong> is a nice pager, unless you like
|
||||
<strong>more</strong>! Pager is used for <tt>--help</tt> and
|
||||
<STRONG>swim</STRONG> called without any options. There is an option
|
||||
<tt>--nopager</tt> or <tt>-n</tt>. <strong>more</strong> comes from the
|
||||
required package util-linux, whereas <strong>less</strong> comes from a
|
||||
standard package called less. Values: ``less'', ``more'', or ``most''
|
||||
or...
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$ENV{PAGER} = "less";</STRONG>
|
||||
|
||||
<sect>NOT-INSTALLED VARIABLES
|
||||
|
||||
<p>
|
||||
Assign values for <tt>$architecture</tt> and/or
|
||||
<tt>$distribution</tt> to avoid having to use <tt>--arch</tt> and
|
||||
<tt>--dists</tt> everytime the not-installed databases are accessed
|
||||
with <tt>-n</tt> or made or altered.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
Architectures are always being added so check with Debian to find a list.
|
||||
There is <EM>alpha, arm, hurd-i386 (alternative kernel to linux), i386,
|
||||
m68k, powerpc, sparc</EM>. Just use the arch found after the hyphen in the
|
||||
Contents-(arch) file.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$architecture = "i386";</STRONG>
|
||||
|
||||
<P>
|
||||
|
||||
The distribution can be either <EM>stable, unstable, frozen, or
|
||||
experimental (rare)</EM>. These represent the state of development that
|
||||
the packages are under. The unstable distribution can have lot's of
|
||||
changes within a very short time period, and frozen may or may not be
|
||||
available.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$distribution = "unstable";</STRONG>
|
||||
|
||||
<P>
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they were
|
||||
at
|
||||
one time separate distributions, but this has since changed.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
You can determine which of the sections <EM>main, non-free, contrib or
|
||||
non-US</EM> to pull out of the Contents file if you don't want to use
|
||||
<tt>--main</tt>, <tt>--contrib</tt>, <tt>--non-free</tt>, and
|
||||
<tt>--non-us</tt> to selectively pick the sections.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
For efficiency, you should choose the sections which you will be pulling
|
||||
out of the Packages <tt>file(s)</tt> being targetted.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
|
||||
Rule: Use ``non-US'' not ``non-us''.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
<STRONG>@user_defined_section = qw(main contrib non-free non-US);</STRONG>
|
||||
|
||||
|
||||
<sect>DF LOCATION
|
||||
|
||||
<p>
|
||||
A little philosophy: <STRONG>swim</STRONG> was developed for maximum
|
||||
versatility, so whether you are just interested in researching, and
|
||||
keeping tabs on the newest packages, or maintaining a Debian virtual
|
||||
distribution on a non-Debian distribution, or you are a using
|
||||
<STRONG>swim</STRONG> for distribution development, <STRONG>swim</STRONG>
|
||||
provides a way.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
The default directory keeps track of Contents and/or Packages databases
|
||||
retrieved with --ftp. The Contents and Packages databases and Release file
|
||||
are give names specific to the distribution and architectures they
|
||||
represent using the naming convention found in apt's sources directory.
|
||||
You also have the freedom not to use the default directory, in which case
|
||||
swim
|
||||
|
||||
will still do the renaming and keeping track of the mtime, but you will
|
||||
have to remember where you put the files.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$default_directory = '/root/.swim';</STRONG>
|
||||
|
||||
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
The default root directory (DRD) is the key to easy management of binary
|
||||
packages, source, dsc, and diff files received from --ftp, and provides an
|
||||
easy way to put together a personalized distribution. This directory can
|
||||
be
|
||||
a real ftp site on your computer, or put wherever else you are allowed to
|
||||
have directories. The DRD is always placed below the value assigned to
|
||||
$default_directory. According to the previous assignment to
|
||||
$default_directory, if the DRD is ``/pub/a/debian'' then the full path
|
||||
would be ``/root/.swim/pub/a/debian''.
|
||||
|
||||
<P>
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$default_root_directory = '/pub/debian';</STRONG>
|
||||
|
||||
<P>
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions <STRONG>swim</STRONG> will assign for
|
||||
directories it
|
||||
creates below the DRD.
|
||||
|
||||
|
||||
<P>
|
||||
|
||||
<STRONG>$permission = '0755';</STRONG>
|
||||
|
||||
|
||||
<sect>TEMPORARY DIRECTORY
|
||||
|
||||
<p>
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
<tt>$tmp</tt> a RAM disk. See package loadlin for initrd documentation and
|
||||
an explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
|
||||
<p>
|
||||
|
||||
<STRONG>$tmp = "/tmp";</STRONG>
|
||||
|
||||
<sect>FTP
|
||||
|
||||
<p>
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by providing
|
||||
arguments to these variables. All variables but $timeout are set to untrue
|
||||
by default.
|
||||
|
||||
<example>
|
||||
$firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)
|
||||
</example>
|
||||
|
||||
<chapt id="othervars">OTHER VARIABLES
|
||||
|
||||
<p>
|
||||
see SWIM::Conf
|
||||
|
||||
<chapt id="files">FILES
|
||||
|
||||
<p>
|
||||
<tt> /etc/swim/swimrc</tt>
|
||||
<p>
|
||||
<tt>~/.swim/swimrc</tt>
|
||||
|
||||
|
||||
<chapt>BUGS
|
||||
<p>Send directly to mttrader@access.mountain.net.
|
||||
|
||||
</book>
|
||||
|
||||
</debiandoc>
|
294
swimrc.text
Normal file
294
swimrc.text
Normal file
@ -0,0 +1,294 @@
|
||||
|
||||
swimrc - swim configuration file
|
||||
--------------------------------
|
||||
Jonathan D. Rosenbaum<mttrader@access.mountain.net>
|
||||
27 May 1999
|
||||
|
||||
0.1 Contents
|
||||
------------
|
||||
|
||||
1. DESCRIPTION
|
||||
|
||||
2. USAGE
|
||||
|
||||
3. VARIABLES
|
||||
3.1. OUTPUT VARIABLE
|
||||
3.2. HISTORY
|
||||
3.3. AR or DPKG?
|
||||
3.4. APT
|
||||
3.5. PAGER
|
||||
3.6. NOT-INSTALLED VARIABLES
|
||||
3.7. DF LOCATION
|
||||
3.8. TEMPORARY DIRECTORY
|
||||
3.9. FTP
|
||||
|
||||
4. OTHER VARIABLES
|
||||
|
||||
5. FILES
|
||||
|
||||
6. BUGS
|
||||
|
||||
0.2 Copyright Notice
|
||||
--------------------
|
||||
|
||||
Copyright © 1999 Jonathan D. Rosenbaum
|
||||
|
||||
SWIM, including this manual, is free software; you may redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2, or (at
|
||||
your option) any later version.
|
||||
|
||||
This 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 with
|
||||
the swim source as the file `COPYING'. If not, write to the Free
|
||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
1. DESCRIPTION
|
||||
---------------
|
||||
|
||||
swimrc is the configuartion file for swim allowing many default values
|
||||
to be set so that they do not have to be mentioned on the command
|
||||
line. Swimrc interacts directly with Perl allowing a wide variety of
|
||||
variables found in SWIW::Conf to be altered.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
2. USAGE
|
||||
---------
|
||||
|
||||
Values for variable can be altered for *swim* by assigning different
|
||||
values enclosed in quotes or quoted whitespace (qw()), and ending with
|
||||
a semi-colon.
|
||||
|
||||
` $variable = ``value'';'
|
||||
|
||||
`$variable = ``(value1 value2 ..)'';'
|
||||
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
3. VARIABLES
|
||||
-------------
|
||||
|
||||
This is a list of variables with explanations. The default values for
|
||||
*swim* are shown.
|
||||
|
||||
|
||||
3.1. OUTPUT VARIABLE
|
||||
---------------------
|
||||
|
||||
`$my_number' can be changed to how many lines you would like ``swim
|
||||
-qf <>'' to print out, before the program asks for `-t' or `--total'.
|
||||
Exception: If `-i' is used in the query and there is more than one
|
||||
package then the total will be presented.
|
||||
|
||||
Hint: `-t' can be used with all the various `--scripts' family members
|
||||
to view the title of the script file regardless of this variable
|
||||
setting, and if `-t' has to be used, the titles will be displayed,
|
||||
which makes sense.
|
||||
|
||||
*$my_number = 23;*
|
||||
|
||||
|
||||
3.2. HISTORY
|
||||
-------------
|
||||
|
||||
This is a shell-like history kept in relation to searches and the most
|
||||
recent edit when `--stdin' is used.
|
||||
|
||||
*$HISTORY = 10;*
|
||||
|
||||
|
||||
3.3. AR or DPKG?
|
||||
-----------------
|
||||
|
||||
Debian packages are ar archives. If you are using a Debian
|
||||
Distribution assign ``dpkg'' to $package_tool, otherwise assign ``ar''
|
||||
to $package_tool.
|
||||
|
||||
*$package_tool = "/usr/bin/ar";*
|
||||
|
||||
|
||||
3.4. APT
|
||||
---------
|
||||
|
||||
*Swim* does not assign a value for apt. To use `--apt' and `-xyz'
|
||||
assign `$apt' the value ``yes''.
|
||||
|
||||
Example: *$apt = "yes";*
|
||||
|
||||
|
||||
3.5. PAGER
|
||||
-----------
|
||||
|
||||
*less* is a nice pager, unless you like *more*! Pager is used for
|
||||
`--help' and *swim* called without any options. There is an option
|
||||
`--nopager' or `-n'. *more* comes from the required package
|
||||
util-linux, whereas *less* comes from a standard package called less.
|
||||
Values: ``less'', ``more'', or ``most'' or...
|
||||
|
||||
*$ENV{PAGER} = "less";*
|
||||
|
||||
|
||||
3.6. NOT-INSTALLED VARIABLES
|
||||
-----------------------------
|
||||
|
||||
Assign values for `$architecture' and/or `$distribution' to avoid
|
||||
having to use `--arch' and `--dists' everytime the not-installed
|
||||
databases are accessed with `-n' or made or altered.
|
||||
|
||||
Architectures are always being added so check with Debian to find a
|
||||
list. There is *alpha, arm, hurd-i386 (alternative kernel to linux),
|
||||
i386, m68k, powerpc, sparc*. Just use the arch found after the hyphen
|
||||
in the Contents-(arch) file.
|
||||
|
||||
*$architecture = "i386";*
|
||||
|
||||
The distribution can be either *stable, unstable, frozen, or
|
||||
experimental (rare)*. These represent the state of development that
|
||||
the packages are under. The unstable distribution can have lot's of
|
||||
changes within a very short time period, and frozen may or may not be
|
||||
available.
|
||||
|
||||
*$distribution = "unstable";*
|
||||
|
||||
Distributions are divided into sections. These sections were called
|
||||
distributions in the version 2.4.1.0 packaging manual, because they
|
||||
were at one time separate distributions, but this has since changed.
|
||||
|
||||
You can determine which of the sections *main, non-free, contrib or
|
||||
non-US* to pull out of the Contents file if you don't want to use
|
||||
`--main', `--contrib', `--non-free', and `--non-us' to selectively
|
||||
pick the sections.
|
||||
|
||||
For efficiency, you should choose the sections which you will be
|
||||
pulling out of the Packages `file(s)' being targetted.
|
||||
|
||||
Rule: Use ``non-US'' not ``non-us''.
|
||||
|
||||
*@user_defined_section = qw(main contrib non-free non-US);*
|
||||
|
||||
|
||||
3.7. DF LOCATION
|
||||
-----------------
|
||||
|
||||
A little philosophy: *swim* was developed for maximum versatility, so
|
||||
whether you are just interested in researching, and keeping tabs on
|
||||
the newest packages, or maintaining a Debian virtual distribution on a
|
||||
non-Debian distribution, or you are a using *swim* for distribution
|
||||
development, *swim* provides a way.
|
||||
|
||||
The next two variables determine the location of the DF (default
|
||||
directory/file system)
|
||||
|
||||
The default directory keeps track of Contents and/or Packages
|
||||
databases retrieved with --ftp. The Contents and Packages databases
|
||||
and Release file are give names specific to the distribution and
|
||||
architectures they represent using the naming convention found in
|
||||
apt's sources directory. You also have the freedom not to use the
|
||||
default directory, in which case swim will still do the renaming and
|
||||
keeping track of the mtime, but you will have to remember where you
|
||||
put the files.
|
||||
|
||||
*$default_directory = '/root/.swim';*
|
||||
|
||||
The default root directory (DRD) is the key to easy management of
|
||||
binary packages, source, dsc, and diff files received from --ftp, and
|
||||
provides an easy way to put together a personalized distribution. This
|
||||
directory can be a real ftp site on your computer, or put wherever
|
||||
else you are allowed to have directories. The DRD is always placed
|
||||
below the value assigned to $default_directory. According to the
|
||||
previous assignment to $default_directory, if the DRD is
|
||||
``/pub/a/debian'' then the full path would be
|
||||
``/root/.swim/pub/a/debian''.
|
||||
|
||||
Example: When a package is downloaded it will be placed in
|
||||
dists/distribution/section/architecture/subject below the DRD.
|
||||
|
||||
Rule: debian must be the final directory before dists, this is because
|
||||
other distributions are placed alongside debian, like debian-non-US or
|
||||
personal (specialized distribution).
|
||||
|
||||
*$default_root_directory = '/pub/debian';*
|
||||
|
||||
Because you may be using a real ftp site, this variable allows you to
|
||||
determine what permissions *swim* will assign for directories it
|
||||
creates below the DRD.
|
||||
|
||||
*$permission = '0755';*
|
||||
|
||||
|
||||
3.8. TEMPORARY DIRECTORY
|
||||
-------------------------
|
||||
|
||||
If you want to set an alternative directory for the temporary files
|
||||
created when the databases are made, change here. You may want to make
|
||||
`$tmp' a RAM disk. See package loadlin for initrd documentation and an
|
||||
explanation for making such a disk. There is also documentation in
|
||||
/usr/src/kernel-source.version/Documentation. Whether this will speed
|
||||
things up is a subject of experimentation.
|
||||
|
||||
*$tmp = "/tmp";*
|
||||
|
||||
|
||||
3.9. FTP
|
||||
---------
|
||||
|
||||
You can alter the Firewall, Port, Timeout, Debug and Passive
|
||||
characteristics of the ftp client as defined in Net::FTP(3pm) by
|
||||
providing arguments to these variables. All variables but $timeout are
|
||||
set to untrue by default.
|
||||
$firewall = 0; (FTP firewall machine name)
|
||||
$port = 0; (defaults to 23)
|
||||
$timeout = 120; (120 seconds)
|
||||
$debug = 0; (1 will turn on STDERR)
|
||||
$passive = 0; (1 will enable)
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
4. OTHER VARIABLES
|
||||
-------------------
|
||||
|
||||
see SWIM::Conf
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
5. FILES
|
||||
---------
|
||||
|
||||
` /etc/swim/swimrc'
|
||||
|
||||
`~/.swim/swimrc'
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
6. BUGS
|
||||
-------
|
||||
|
||||
Send directly to mttrader@access.mountain.net.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
swimrc - swim configuration file
|
||||
Jonathan D. Rosenbaum<mttrader@access.mountain.net> 27 May 1999
|
||||
|
11
swimz.list
Normal file
11
swimz.list
Normal file
@ -0,0 +1,11 @@
|
||||
# Read QUICKSTART for a quick start, and check out the SWIMZ.LIST
|
||||
# section in swim(8) for much more information. This list is read
|
||||
# sequentially, so earlier entries are read before later entries
|
||||
#
|
||||
# Debian users: Unlike apt which only downloads Packages, swim reads this
|
||||
# list based on the specified or default distribution/architecture to
|
||||
# make handling the downloading of both the Contents and Packages files
|
||||
# easier. Look at the Cron example in /usr/doc/swim/examples.
|
||||
#
|
||||
# deb ftp://ftp.debian.org/pub/debian unstable contrib non-free main
|
||||
# deb ftp://ftp.debian.org/pub/debian stable contrib non-free main
|
Loading…
x
Reference in New Issue
Block a user